Ejemplo n.º 1
0
        public void SaveLoadViewModelTest()
        {
            MainWindowViewModel _vm1 = CreateViewModelWithGraph001();

            string tempFilePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());

            DetailedOperationResult r = _vm1.SaveState(tempFilePath);

            Assert.That(r.IsSuccessful);

            MainWindowViewModel _vm2 = new MainWindowViewModel();

            DetailedOperationResult r2 = _vm2.LoadState(tempFilePath);

            File.Delete(tempFilePath);

            Assert.That(r2.IsSuccessful);

            Assert.That(_vm1.PluginInfos.Count == _vm2.PluginInfos.Count);
            foreach (var infoB in _vm2.PluginInfos)
            {
                Assert.That(_vm1.PluginInfos.Where(x => x.PluginFullName == infoB.PluginFullName).Count() == 1);
                IPluginInfo infoA = _vm1.PluginInfos.Where(x => x.PluginFullName == infoB.PluginFullName).First();

                EquivalenceExtensions.AssertPluginEquivalence(infoA, infoB, true);
            }

            Assert.That(_vm1.ServiceInfos.Count == _vm2.ServiceInfos.Count);
            foreach (var infoB in _vm2.ServiceInfos)
            {
                Assert.That(_vm1.ServiceInfos.Where(x => x.ServiceFullName == infoB.ServiceFullName).Count() == 1);
                var infoA = _vm1.ServiceInfos.Where(x => x.ServiceFullName == infoB.ServiceFullName).First();

                EquivalenceExtensions.AssertServiceEquivalence(infoA, infoB, true);
            }

            EquivalenceExtensions.AssertManagerEquivalence(_vm1.LabState.Engine.Configuration, _vm2.LabState.Engine.Configuration);
        }
Ejemplo n.º 2
0
        internal static MainWindowViewModel CreateViewModelWithGraph001()
        {
            /** Imagine a graph like this:
             *                 +RUNNING-+                              +--------+
             *     +---------->|ServiceA+-------+   *----------------->|ServiceB|
             *     |           +---+----+       |   | Need Running     +---+----+
             *     |               |            |   |                      |
             *     |               |            |   |                      |
             *     |               |            |   |                      |
             *     |               |            |   |                      |
             * +---+-----+     +---+-----+  +RUNNING*-+                +---+-----+
             * |ServiceAx|     |PluginA-1|  |PluginA-2|                |PluginB-1|
             * +----+----+     +---------+  +---------+                +---------+
             *      |
             *      |
             * +----+-----+    +----------------------+
             * |PluginAx-1|    |Plugin.Without.Service|
             * +----------+    +----------------------+
             */
            MainWindowViewModel vm = new MainWindowViewModel();

            Assert.That(vm.LabState.Engine.IsRunning, Is.False);

            // Services
            IServiceInfo serviceA = vm.CreateNewService("ServiceA");

            Assert.That(vm.ServiceInfos.Contains(serviceA));
            Assert.That(vm.ServiceInfos.Count == 1);
            Assert.That(vm.LabState.LabServiceInfos.Count == 1);
            Assert.That(vm.LabState.LabServiceInfos.Where(x => x.ServiceInfo == serviceA).Count() == 1);

            LabServiceInfo labServiceA = vm.LabState.LabServiceInfos.Where(x => x.ServiceInfo == serviceA).First();

            IServiceInfo serviceB = vm.CreateNewService("ServiceB");

            Assert.That(vm.ServiceInfos.Contains(serviceB));
            Assert.That(vm.ServiceInfos.Count == 2);
            Assert.That(vm.LabState.LabServiceInfos.Count == 2);
            Assert.That(vm.LabState.LabServiceInfos.Where(x => x.ServiceInfo == serviceB).Count() == 1);

            IServiceInfo serviceAx = vm.CreateNewService("ServiceAx", serviceA);

            Assert.That(vm.ServiceInfos.Contains(serviceAx));
            Assert.That(vm.ServiceInfos.Count == 3);
            Assert.That(vm.LabState.LabServiceInfos.Count == 3);
            Assert.That(vm.LabState.LabServiceInfos.Where(x => x.ServiceInfo == serviceAx).Count() == 1);

            LabServiceInfo labServiceAx = vm.LabState.LabServiceInfos.Where(x => x.ServiceInfo == serviceAx).First();

            Assert.That(labServiceAx.ServiceInfo.Generalization == labServiceA.ServiceInfo);

            Assert.That(serviceA.Generalization == null);
            Assert.That(serviceB.Generalization == null);
            Assert.That(serviceAx.Generalization == serviceA);

            // Plugins
            IPluginInfo pluginWithoutService = vm.CreateNewPlugin("Plugin.Without.Service");

            IPluginInfo pluginA1 = vm.CreateNewPlugin("Plugin.A1", serviceA);

            IPluginInfo pluginA2 = vm.CreateNewPlugin("Plugin.A2", serviceA);

            IPluginInfo pluginAx1 = vm.CreateNewPlugin("Plugin.Ax1", serviceAx);

            IPluginInfo pluginB1 = vm.CreateNewPlugin("Plugin.B1", serviceB);

            vm.SetPluginDependency(pluginA2, serviceB, DependencyRequirement.Running);

            Assert.That(pluginA2.ServiceReferences.Count == 1);
            Assert.That(pluginA2.ServiceReferences[0].Reference == serviceB);
            Assert.That(pluginA2.ServiceReferences[0].Requirement == DependencyRequirement.Running);

            Assert.That(serviceA.Implementations.Count == 2);
            Assert.That(serviceB.Implementations.Count == 1);
            Assert.That(serviceAx.Implementations.Count == 1);

            // Set configuration
            var cLayer1 = vm.LabState.Engine.Configuration.Layers.Create("Test layer");
            var result  = cLayer1.Items.Add(serviceA.ServiceFullName, ConfigurationStatus.Running, "Test reason");

            Assert.That(result.Success);

            var cLayer2 = vm.LabState.Engine.Configuration.Layers.Create("Test layer 2");

            result = cLayer2.Items.Add(pluginA2.PluginFullName, ConfigurationStatus.Running, "Test reason 2");
            Assert.That(result.Success);

            // Testing tests
            foreach (var si in vm.ServiceInfos)
            {
                EquivalenceExtensions.AssertServiceEquivalence(si, si, true);
            }
            foreach (var pi in vm.PluginInfos)
            {
                EquivalenceExtensions.AssertPluginEquivalence(pi, pi, true);
            }

            EquivalenceExtensions.AssertManagerEquivalence(vm.LabState.Engine.Configuration, vm.LabState.Engine.Configuration);

            return(vm);
        }