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); }
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); }