Beispiel #1
0
        public void performing_updates_has_information_about_failure_modules_operations_throws()
        {
            ModulesOperations.Setup(x => x.LoadModules(It.IsAny <IModuleDiscovery>()))
            .Throws(new Exception("Can not discovery moduels"));

            var moduleManifests = new List <ModuleManifest>
            {
                new ModuleManifest(),
            };

            // preapre stub module manifest
            NomadUpdater.PrepareUpdate(moduleManifests);

            ModulesRepository.Setup(x => x.GetModule(It.IsAny <string>()))
            .Returns(new ModulePackage()
            {
                ModuleManifest = moduleManifests[0]
            });

            NomadUpdater.PerformUpdates(new CompositeModuleDiscovery());

            // wait till end to get the information about failure
            NomadUpdater.UpdateFinished.WaitOne();
            Assert.AreEqual(UpdaterStatus.Invalid, NomadUpdater.Status);
        }
Beispiel #2
0
        public void preparing_updates_calls_proper_subsystems_publishes_msg_at_the_end()
        {
            // return the same - might stop working if some of the code is gonna be put to verify download };
            var modulePacakge = new ModulePackage {
                ModuleManifest = _moduleManifest
            };

            ModulesRepository.Setup(x => x.GetModule(It.Is <string>(y => y == _moduleName)))
            .Returns(modulePacakge)
            .Verifiable("This package should be downloaded");

            EventAggregator.Setup(x => x.Publish(It.IsAny <NomadUpdatesReadyMessage>()))
            .Callback <NomadUpdatesReadyMessage>(msg =>
            {
                Assert.IsFalse(msg.Error);
                Assert.AreEqual(1, msg.ModuleManifests.Count);
                Assert.AreSame(modulePacakge.ModuleManifest,
                               msg.ModuleManifests[0]);
            })
            .Returns(null)
            .Verifiable("This message should be published upon exit");

            NomadUpdater.PrepareUpdate(new List <ModuleManifest>()
            {
                _moduleManifest
            });

            EventAggregator.Verify();
            ModulesRepository.Verify();
            Assert.AreEqual(UpdaterStatus.Prepared, NomadUpdater.Status);
        }
Beispiel #3
0
        public void performing_updates_uses_packager_on_n_packages_exactly_n_times(int times)
        {
            int n = times;
            IList <ModuleManifest> modulePackages = new List <ModuleManifest>();

            for (int i = 0; i < n; i++)
            {
                modulePackages.Add(new ModuleManifest()
                {
                    ModuleName = "Test" + i
                });
            }

            // provide the proper packages per modules
            ModulesRepository.Setup(x => x.GetModule(It.IsAny <string>()))
            .Returns <string>(name => new ModulePackage()
            {
                ModuleManifest = modulePackages
                                 .Where(x => x.ModuleName.Equals(name))
                                 .Select(x => x).Single()
            });

            NomadUpdater.PrepareUpdate(modulePackages);

            NomadUpdater.PerformUpdates(new CompositeModuleDiscovery());

            NomadUpdater.UpdateFinished.WaitOne();
            ModulePackager.Verify(x => x.PerformUpdates(PluginsDir, It.IsAny <ModulePackage>()),
                                  Times.Exactly(n),
                                  string.Format("One package should be invoked {0} times.", n));
        }
Beispiel #4
0
        public void publishes_avaliable_modules_message_when_everything_is_ok()
        {
            const string assembly   = "test_assembly.dll";
            var          moduleInfo = new ModuleInfo(assembly);

            var moduleManifest = new ModuleManifest
            {
                ModuleName    = assembly,
                ModuleVersion = new Version("0.0.0.0")
            };

            var updateManifest = new ModuleManifest
            {
                ModuleName    = assembly,
                ModuleVersion = new Version("0.0.0.1")
            };

            ModuleDiscovery.Setup(x => x.GetModules()).Returns(new List <ModuleInfo>
            {
                moduleInfo
            });

            // FIXME: this should use internal manifest factory
            ModuleManifestFactory.Setup(x => x.GetManifest(It.Is <ModuleInfo>(y => y == moduleInfo)))
            .Returns(moduleManifest);


            EventAggregator.Setup(x => x.Publish(It.IsAny <NomadAvailableUpdatesMessage>()))
            .Callback <NomadAvailableUpdatesMessage>(msg =>
            {
                Assert.AreEqual(1,
                                msg.AvailableUpdates.
                                Count);
                Assert.AreEqual(updateManifest,
                                msg.AvailableUpdates.
                                First());
            })
            .Returns(null)
            .Verifiable("Message was not published");

            ModulesRepository
            .Setup(x => x.GetAvailableModules())
            .Returns(new AvailableModules
            {
                Manifests = new List <ModuleManifest> {
                    updateManifest
                }
            })
            .Verifiable("Get Avaliable modules has not been called");

            NomadUpdater.CheckUpdates();

            ModulesRepository.Verify();
            EventAggregator.Verify();
        }
Beispiel #5
0
        public void module_repository_throws_exception_while_preparing_updates_changed_to_message()
        {
            ModulesRepository.Setup(x => x.GetModule(It.IsAny <string>()))
            .Throws(new Exception("Module Cannot be selected"));

            EventAggregator.Setup(x => x.Publish(It.IsAny <NomadUpdatesReadyMessage>()))
            .Callback <NomadUpdatesReadyMessage>(msg => Assert.IsTrue(msg.Error))
            .Returns(null)
            .Verifiable("The message should be published");

            NomadUpdater.PrepareUpdate(new List <ModuleManifest>()
            {
                _moduleManifest
            });

            EventAggregator.Verify();
            Assert.AreEqual(UpdaterStatus.Invalid, NomadUpdater.Status);
        }
Beispiel #6
0
        public void publishes_error_message_when_checking_for_updates_failed()
        {
            ModulesRepository.Setup(x => x.GetAvailableModules())
            .Throws(new Exception("Can not have these modules"));

            EventAggregator.Setup(x => x.Publish(It.IsAny <NomadAvailableUpdatesMessage>()))
            .Callback <NomadAvailableUpdatesMessage>(
                (msg) =>
            {
                Assert.IsTrue(msg.Error);
                Assert.AreEqual(0, msg.AvailableUpdates.Count);
            })
            .Returns(null)
            .Verifiable("Message was not published");

            Assert.DoesNotThrow(() => NomadUpdater.CheckUpdates());

            EventAggregator.Verify();
        }
Beispiel #7
0
        public void performing_updates_has_information_about_failure_packager_throws()
        {
            ModulePackager.Setup(
                x => x.PerformUpdates(It.IsAny <String>(), It.IsAny <ModulePackage>()))
            .Throws(new Exception("Can not pacakge this"));

            var manifest = new ModuleManifest()
            {
                ModuleName = "AlaMaKota"
            };
            var moduleManifests = new List <ModuleManifest>
            {
                manifest,
            };

            ModulesRepository.Setup(x => x.GetModule(It.IsAny <string>()))
            .Returns(new ModulePackage()
            {
                ModuleManifest = manifest
            });

            // preapre stub module manifest
            NomadUpdater.PrepareUpdate(moduleManifests);

            ModulesRepository.Setup(x => x.GetModule(It.IsAny <string>()))
            .Returns(new ModulePackage()
            {
                ModuleManifest = moduleManifests[0]
            });

            NomadUpdater.PerformUpdates(new CompositeModuleDiscovery());

            // wait till end to get the information about failure
            NomadUpdater.UpdateFinished.WaitOne();
            Assert.AreEqual(UpdaterStatus.Invalid, NomadUpdater.Status);
        }
Beispiel #8
0
        public void packages_gotten_from_repository_have_nulls()
        {
            EventAggregator.Setup(x => x.Publish(It.IsAny <NomadUpdatesReadyMessage>()))
            .Callback <NomadUpdatesReadyMessage>(msg => Assert.IsTrue(msg.Error))
            .Returns(null)
            .Verifiable("The message should be published");

            var modulePackages = new List <ModuleManifest>
            {
                new ModuleManifest()
                {
                    ModuleName = "Test"
                },
            };

            // provide wrong packages in repository
            ModulesRepository.Setup(x => x.GetModule(It.IsAny <string>())).Returns(
                new ModulePackage());

            NomadUpdater.PrepareUpdate(modulePackages);

            EventAggregator.Verify();
            Assert.AreEqual(UpdaterStatus.Invalid, NomadUpdater.Status);
        }
Beispiel #9
0
        public void failing_update_beacause_of_the_missing_dependencies()
        {
            // create the updater module
            string updaterDir = NomadConfigurationSettings.ModuleDirectoryPath;

            ModuleCompiler.SetUpModuleWithManifest(updaterDir,
                                                   @"..\Source\Nomad.Tests\FunctionalTests\Data\Updater\UpdaterModule.cs");

            // version for modules A, B and C
            const string versionString = "1.0.0.0";

            // create modules A with version v0 (this version and dependencies are only in manifest - not in assembly)
            var moduelADir           = Path.Combine(NomadConfigurationSettings.ModuleDirectoryPath, @"ModuleADir");
            var moduleAConfiguration = ManifestBuilderConfiguration.Default;

            moduleAConfiguration.VersionProvider             = GetVersionProviderForVersion(versionString);
            moduleAConfiguration.ModulesDependenciesProvider = GetModuleDependenciesOnSingleModule("SimplestModulePossible2", versionString);

            ModuleCompiler.SetUpModuleWithManifest(moduelADir, ModuleCompiler.DefaultSimpleModuleSource, moduleAConfiguration);

            // create module B with the same setting as A (with version v0)
            var moduelBDir = Path.Combine(NomadConfigurationSettings.ModuleDirectoryPath, @"ModuleBDir");

            moduleAConfiguration = ManifestBuilderConfiguration.Default;

            moduleAConfiguration.VersionProvider             = GetVersionProviderForVersion(versionString);
            moduleAConfiguration.ModulesDependenciesProvider = GetModuleDependenciesOnSingleModule("SimplestModulePossible3", versionString);

            ModuleCompiler.SetUpModuleWithManifest(moduelBDir, ModuleCompiler.DefaultSimpleModuleSourceAlternative, moduleAConfiguration);

            // create module C with no dependency on any other module with version v0
            var moduleCDir = Path.Combine(NomadConfigurationSettings.ModuleDirectoryPath, @"ModuleCDir");

            moduleAConfiguration = ManifestBuilderConfiguration.Default;

            moduleAConfiguration.VersionProvider = GetVersionProviderForVersion(versionString);
            ModuleCompiler.SetUpModuleWithManifest(moduleCDir, ModuleCompiler.DefaultSimpleModuleSourceLastAlternative, moduleAConfiguration);

            // create module B in version v1 which depends on module C in version v1
            var moduleBVersionUpperDir = Path.Combine(NomadConfigurationSettings.ModuleDirectoryPath, @"ModuleBUpperDir");

            moduleAConfiguration = ManifestBuilderConfiguration.Default;

            moduleAConfiguration.VersionProvider             = GetVersionProviderForVersion("2.0.0.0");
            moduleAConfiguration.ModulesDependenciesProvider = GetModuleDependenciesOnSingleModule("SimplestModulePossible3", "2.0.0.0");

            ModuleCompiler.SetUpModuleWithManifest(moduleBVersionUpperDir, ModuleCompiler.DefaultSimpleModuleSourceAlternative, moduleAConfiguration);

            // put module B into repository
            var bRepoModuleInfo = new DirectoryModuleDiscovery(moduleBVersionUpperDir, SearchOption.TopDirectoryOnly)
                                  .GetModules()
                                  .Select(x => x)
                                  .Single();


            ModulesRepository.Setup(x => x.GetAvailableModules())
            .Returns(new AvailableModules(new List <ModuleManifest>()
            {
                bRepoModuleInfo.Manifest
            }));

            ModulesRepository
            .Setup(x => x.GetModule(It.IsAny <string>()))
            .Returns(new ModulePackage()
            {
                ModuleManifest = bRepoModuleInfo.Manifest,
                ModuleZip      = GetZippedData(new List <ModuleInfo>()
                {
                    bRepoModuleInfo
                }, bRepoModuleInfo.Manifest.ModuleName)
            });

            // configure kernel
            NomadConfigurationSettings.UpdaterType = UpdaterType.Automatic;
            SetUpKernel();

            // load modules A,B,C in version v0 into Nomad
            var discovery = new CompositeModuleDiscovery(new DirectoryModuleDiscovery(moduelADir, SearchOption.TopDirectoryOnly),
                                                         new DirectoryModuleDiscovery(moduelBDir, SearchOption.TopDirectoryOnly),
                                                         new DirectoryModuleDiscovery(moduleCDir, SearchOption.TopDirectoryOnly),
                                                         new DirectoryModuleDiscovery(updaterDir, SearchOption.TopDirectoryOnly));

            Kernel.LoadModules(discovery);

            // register for updates available message
            var hasBeenInvoked = false;

            Kernel.EventAggregator.Subscribe <NomadUpdatesReadyMessage>(message =>
            {
                hasBeenInvoked = true;
                Assert.IsTrue(message.Error, "The error should be reported");

                // list of non valid modules is accurate
                Assert.AreEqual("SimplestModulePossible2", message.ModuleManifests[0].ModuleName);
            });

            // initialize check updates (automatic mode)
            Kernel.EventAggregator.Publish(new BeginUpdateMessage());

            // verify that update can not be done
            Assert.IsTrue(hasBeenInvoked, "The updates ready message was not invoked");
            Assert.AreEqual(UpdaterStatus.Invalid, Kernel.ServiceLocator.Resolve <IUpdater>().Status);
        }