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); }
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"]); }
public DeploymentWatcher(IApplicationUpdateManager deploymentUpdateManager, int updateFrequencyInSeconds) { _deploymentUpdateManager = deploymentUpdateManager; IsUpdating = false; UpdateTimer = new Timer(updateFrequencyInSeconds * 1000); UpdateTimer.Elapsed += OnTimer; }
public DeploymentWatcher(IApplicationUpdateManager deploymentUpdateManager, int updateFrequencyInSeconds) { _deploymentUpdateManager = deploymentUpdateManager; IsUpdating = false; UpdateTimer = new Timer(updateFrequencyInSeconds*1000); UpdateTimer.Elapsed += OnTimer; }
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); }
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))); }
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); }
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); }
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))); }
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))); }
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); }
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))); }
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"]); }