Пример #1
0
        public async Task TestMultipleUpdates()
        {
            var yamsConfig = new YamsConfigBuilder("clusterId1", "1", "instanceId",
                                                   _applicationsInstallPath).SetShowApplicationProcessWindow(false).Build();

            InitializeYamsService(yamsConfig);

            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsRunning(new AppIdentity("test.app1", new SemVersion(1, 0, 0)), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app2", new SemVersion(1, 1, 0)), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app2", new SemVersion(2, 0, 0, "beta")), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app3", new SemVersion(1, 1, 0)), "TestProcess");

            UploadDeploymentConfig("DeploymentConfigUpdate.json");

            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsNotRunning(new AppIdentity("test.app1", new SemVersion(1, 0, 0)));
            AssertThatApplicationIsNotRunning(new AppIdentity("test.app2", new SemVersion(1, 1, 0)));

            AssertThatApplicationIsRunning(new AppIdentity("test.app1", new SemVersion(1, 0, 1)), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app2", new SemVersion(2, 0, 0, "beta")), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app3", new SemVersion(1, 0, 0)), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app3", new SemVersion(1, 1, 0)), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app4", new SemVersion(1, 0, 0)), "TestProcess");

            AssertThatNumberOfApplicationsRunningIs(5);
        }
Пример #2
0
        public async Task TestThatClusterPropertiesAreUsedToMatchDeployments()
        {
            UploadDeploymentConfig("DeploymentConfigWithProperties.json");
            var yamsConfig = new YamsConfigBuilder("clusterId1", "1", "instanceId",
                                                   _applicationsInstallPath).SetShowApplicationProcessWindow(false)
                             .AddClusterProperty("NodeType", "Test")
                             .AddClusterProperty("Region", "East").Build();

            AppInstallConfig appInstallConfig = null;
            var applicationInstallerStub      = new StubIApplicationInstaller().Install(
                (config) =>
            {
                Assert.Null(appInstallConfig);
                appInstallConfig = config;
                return(Task.CompletedTask);
            });

            ContainerBuilder builder = InitializeContainerBuilder(yamsConfig);

            builder.RegisterInstance <IApplicationInstaller>(applicationInstallerStub);
            InitializeYamsService(builder.Build());

            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            Assert.Equal(new AppIdentity("test.app1", new SemVersion(1, 0, 0)), appInstallConfig.AppIdentity);
            Assert.True(appInstallConfig.Properties.ContainsKey("NodeType"));
            Assert.Equal("Test", appInstallConfig.Properties["NodeType"]);
            Assert.True(appInstallConfig.Properties.ContainsKey("Region"));
            Assert.Equal("East", appInstallConfig.Properties["Region"]);
        }
Пример #3
0
 public DeploymentWatcher(IApplicationUpdateManager deploymentUpdateManager, int updateFrequencyInSeconds)
 {
     _deploymentUpdateManager = deploymentUpdateManager;
     IsUpdating           = false;
     UpdateTimer          = new Timer(updateFrequencyInSeconds * 1000);
     UpdateTimer.Elapsed += OnTimer;
 }
Пример #4
0
 public DeploymentWatcher(IApplicationUpdateManager deploymentUpdateManager, int updateFrequencyInSeconds)
 {
     _deploymentUpdateManager = deploymentUpdateManager;
     IsUpdating = false;
     UpdateTimer = new Timer(updateFrequencyInSeconds*1000);
     UpdateTimer.Elapsed += OnTimer;
 }
Пример #5
0
        public async Task TestThatApplicationsAreLoadedAtStartup()
        {
            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsRunning(new AppIdentity("test.app1", new Version(1, 0, 0)));
            AssertThatApplicationIsRunning(new AppIdentity("test.app2", new Version(1, 1, 0)));
            AssertThatApplicationIsRunning(new AppIdentity("test.app2", new Version(2, 0, 0)));
            AssertThatApplicationIsRunning(new AppIdentity("test.app3", new Version(1, 1, 0)));

            AssertThatApplicationIsNotRunning(new AppIdentity("test.app4", new Version(1, 0, 0)));

            AssertThatNumberOfApplicationsRunningIs(4);
        }
Пример #6
0
        public async Task TestApplicationWithMonitoredInitializationTimeout()
        {
            await CopyAppBinariesToAppDeploymentDir("MonitorInitApp", "MonitorInitProcess", "1.0.0");

            UploadDeploymentConfig("DeploymentConfigMonitorInitApp.json");

            var yamsConfig = new YamsConfigBuilder("clusterId1", "1", "instanceId",
                                                   _applicationsInstallPath).SetAppInitTimeout(TimeSpan.FromSeconds(1))
                             .SetShowApplicationProcessWindow(false).Build();

            InitializeYamsService(yamsConfig);

            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsNotRunning(new AppIdentity("MonitorInitApp", new SemVersion(1, 0, 0)));
        }
Пример #7
0
        public async Task TestMultipleUpdates()
        {
            const string ClusterId  = "clusterId1";
            const string InstanceId = "instanceId";
            var          yamsConfig = new YamsConfigBuilder(ClusterId, "1", InstanceId,
                                                            _applicationsInstallPath).SetUseShellExecute(false).Build();

            InitializeYamsService(yamsConfig);

            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsRunning(new AppIdentity("test.app1", new SemVersion(1, 0, 0)), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app2", new SemVersion(1, 1, 0)), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app2", new SemVersion(2, 0, 0, "beta")), "TestProcess");
            AssertThatApplicationIsRunning(new AppIdentity("test.app3", new SemVersion(1, 1, 0)), "TestProcess");

            UploadDeploymentConfig("DeploymentConfigUpdate.json");

            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsNotRunning(new AppIdentity("test.app1", new SemVersion(1, 0, 0)));
            AssertThatApplicationIsNotRunning(new AppIdentity("test.app2", new SemVersion(1, 1, 0)));

            AppIdentity app1v101     = new AppIdentity("test.app1", new SemVersion(1, 0, 1));
            AppIdentity app2v200beta = new AppIdentity("test.app2", new SemVersion(2, 0, 0, "beta"));
            AppIdentity app3v100     = new AppIdentity("test.app3", new SemVersion(1, 0, 0));
            AppIdentity app3v110     = new AppIdentity("test.app3", new SemVersion(1, 1, 0));
            AppIdentity app4v100     = new AppIdentity("test.app4", new SemVersion(1, 0, 0));

            AssertThatApplicationIsRunning(app1v101, "TestProcess");
            AssertThatApplicationIsRunning(app2v200beta, "TestProcess");
            AssertThatApplicationIsRunning(app3v100, "TestProcess");
            AssertThatApplicationIsRunning(app3v110, "TestProcess");
            AssertThatApplicationIsRunning(app4v100, "TestProcess");

            AssertThatNumberOfApplicationsRunningIs(5);

            InstanceDeploymentStatus deploymentStatus = await _deploymentRepository.FetchInstanceDeploymentStatus(ClusterId, InstanceId);

            VerifyThatDeploymentStatusHasBeenUpdated(deploymentStatus, app1v101, ClusterId, InstanceId);
            VerifyThatDeploymentStatusHasBeenUpdated(deploymentStatus, app2v200beta, ClusterId, InstanceId);
            VerifyThatDeploymentStatusHasBeenUpdated(deploymentStatus, app3v100, ClusterId, InstanceId);
            VerifyThatDeploymentStatusHasBeenUpdated(deploymentStatus, app3v110, ClusterId, InstanceId);
            VerifyThatDeploymentStatusHasBeenUpdated(deploymentStatus, app4v100, ClusterId, InstanceId);
        }
Пример #8
0
        public async Task TestMultipleUpdates()
        {
            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            File.Copy(Path.Combine(_dataRootPath, "DeploymentConfigUpdate.json"), Path.Combine(_deploymentDirPath, "DeploymentConfig.json"), overwrite: true);

            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsNotRunning(new AppIdentity("test.app1", new Version(1, 0, 0)));
            AssertThatApplicationIsNotRunning(new AppIdentity("test.app2", new Version(1, 1, 0)));

            AssertThatApplicationIsRunning(new AppIdentity("test.app1", new Version(1, 0, 1)));
            AssertThatApplicationIsRunning(new AppIdentity("test.app2", new Version(2, 0, 0)));
            AssertThatApplicationIsRunning(new AppIdentity("test.app3", new Version(1, 0, 0)));
            AssertThatApplicationIsRunning(new AppIdentity("test.app3", new Version(1, 1, 0)));
            AssertThatApplicationIsRunning(new AppIdentity("test.app4", new Version(1, 0, 0)));

            AssertThatNumberOfApplicationsRunningIs(5);
        }
Пример #9
0
        private async Task RunGracefulShutdownTest(TimeSpan gracefulShutdownTimeout)
        {
            await CopyAppBinariesToAppDeploymentDir("GracefulShutdownApp", "GracefullShutdownProcess", "1.0.0");

            UploadDeploymentConfig("DeploymentConfigGracefulShutdownApp.json");

            var yamsConfig = new YamsConfigBuilder("clusterId1", "1", "instanceId",
                                                   _applicationsInstallPath).SetAppGracefulShutdownTimeout(gracefulShutdownTimeout)
                             .SetShowApplicationProcessWindow(false).Build();

            InitializeYamsService(yamsConfig);

            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsRunning(new AppIdentity("GracefulShutdownApp", new SemVersion(1, 0, 0)));

            UploadDeploymentConfig("DeploymentConfigNoApps.json");
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsNotRunning(new AppIdentity("GracefulShutdownApp", new SemVersion(1, 0, 0)));
        }
Пример #10
0
        private async Task RunHeartBeatTest(TimeSpan heartBeatTimeout)
        {
            await CopyAppBinariesToAppDeploymentDir("HeartBeatApp", "HeartBeatProcess", "1.0.0");

            UploadDeploymentConfig("DeploymentConfigHeartBeatApp.json");

            var yamsConfig = new YamsConfigBuilder("clusterId1", "1", "instanceId",
                                                   _applicationsInstallPath)
                             .SetAppHeartBeatTimeout(heartBeatTimeout)
                             .SetShowApplicationProcessWindow(false).Build();

            InitializeYamsService(yamsConfig);

            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsRunning(new AppIdentity("HeartBeatApp", new SemVersion(1, 0, 0)));
            // wait for a bit to make sure heart beat messages are not failing
            await Task.Delay(1000);

            AssertThatApplicationIsRunning(new AppIdentity("HeartBeatApp", new SemVersion(1, 0, 0)));
        }
Пример #11
0
        public async Task TestThatClusterPropertiesAreUsedToMatchDeployments()
        {
            File.Copy(Path.Combine(_dataRootPath, "DeploymentConfigWithProperties.json"), Path.Combine(_deploymentDirPath, "DeploymentConfig.json"), overwrite: true);
            var yamsConfig = new YamsConfigBuilder("clusterId1", "1", "instanceId",
                                                   _applicationsInstallPath).SetShowApplicationProcessWindow(false)
                             .AddClusterProperty("NodeType", "Test")
                             .AddClusterProperty("Region", "East").Build();

            InitializeYamsService(yamsConfig);

            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsRunning(new AppIdentity("test.app1", new SemVersion(1, 0, 0)));

            AssertThatApplicationIsNotRunning(new AppIdentity("test.app2", new SemVersion(1, 1, 0)));
            AssertThatApplicationIsNotRunning(new AppIdentity("test.app2", new SemVersion(2, 0, 0, "beta")));
            AssertThatApplicationIsNotRunning(new AppIdentity("test.app3", new SemVersion(1, 1, 0)));
            AssertThatApplicationIsNotRunning(new AppIdentity("test.app4", new SemVersion(1, 0, 0)));

            AssertThatNumberOfApplicationsRunningIs(1);
        }
Пример #12
0
        public async Task TestFullIpcApp()
        {
            await CopyAppBinariesToAppDeploymentDir("FullIpcApp", "FullIpcProcess", "1.0.0");

            UploadDeploymentConfig("DeploymentConfigFullIpcApp.json");

            var yamsConfig = new YamsConfigBuilder("clusterId1", "1", "instanceId",
                                                   _applicationsInstallPath).SetShowApplicationProcessWindow(false).Build();

            InitializeYamsService(yamsConfig);

            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsRunning(new AppIdentity("FullIpcApp", new SemVersion(1, 0, 0)));

            await Task.Delay(5000);

            UploadDeploymentConfig("DeploymentConfigNoApps.json");
            await applicationUpdateManager.CheckForUpdates();

            AssertThatApplicationIsNotRunning(new AppIdentity("FullIpcApp", new SemVersion(1, 0, 0)));
        }
Пример #13
0
        public async Task TestThatClusterPropertiesAreUsedToMatchDeployments()
        {
            UploadDeploymentConfig("DeploymentConfigWithProperties.json");
            var yamsConfig = new YamsConfigBuilder("clusterId1", "1", "instanceId",
                                                   _applicationsInstallPath).SetUseShellExecute(false)
                             .AddClusterProperty("NodeType", "Test")
                             .AddClusterProperty("Region", "East").Build();

            var installedApps            = new List <AppInstallConfig>();
            var applicationInstallerStub = new StubIApplicationInstaller().Install(
                (config) =>
            {
                installedApps.Add(config);
                return(Task.CompletedTask);
            });

            ContainerBuilder builder = InitializeContainerBuilder(yamsConfig);

            builder.RegisterInstance <IApplicationInstaller>(applicationInstallerStub);
            InitializeYamsService(builder.Build());

            IApplicationUpdateManager applicationUpdateManager = _yamsDiModule.Container.Resolve <IApplicationUpdateManager>();
            await applicationUpdateManager.CheckForUpdates();

            Assert.Equal(2, installedApps.Count);
            Assert.True(installedApps.Any(config => config.AppIdentity == new AppIdentity("test.app1", "1.0.0")));
            Assert.True(installedApps.Any(config => config.AppIdentity == new AppIdentity("test.app2", "2.0.0-beta")));

            AppInstallConfig appInstallConfig = installedApps.Find(config => config.AppIdentity.Id == "test.app1");

            Assert.Equal(new AppIdentity("test.app1", new SemVersion(1, 0, 0)), appInstallConfig.AppIdentity);
            Assert.True(appInstallConfig.Properties.ContainsKey("NodeType"));
            Assert.Equal("Test", appInstallConfig.Properties["NodeType"]);
            Assert.True(appInstallConfig.Properties.ContainsKey("Region"));
            Assert.Equal("East", appInstallConfig.Properties["Region"]);
        }