Exemplo n.º 1
0
        public async Task TestThatUpdateSessionIsNotEndedWhenUpdateFails()
        {
            IEnumerable <AppIdentity> appsToDeploy = new[] { app1v2 };
            IEnumerable <string>      clusters     = new[] { "clusterId1" };

            IApplicationPool applicationPool = new ApplicationPoolStub();
            string           path            = Path.GetTempPath();
            await applicationPool.AddApplication(new ApplicationStub(app1v1, path));

            bool updateSessionEnded = false;
            IUpdateSessionManager updateSessionManagerStub = new StubIUpdateSessionManager()
                                                             .TryStartUpdateSession(() => Task.FromResult(true))
                                                             .EndUpdateSession(() =>
            {
                updateSessionEnded = true;
                return(Task.CompletedTask);
            });

            IApplicationDeploymentDirectory applicationDeploymentDirectory = new StubIApplicationDeploymentDirectory()
                                                                             .FetchDeployments(() => Task.FromResult(appsToDeploy.Select(identity => new AppDeploymentConfig(identity, clusters))));

            const string             ClusterId  = "clusterId";
            const string             InstanceId = "instanceId";
            ApplicationUpdateManager applicationUpdateManager = new ApplicationUpdateManager(ClusterId, InstanceId,
                                                                                             applicationDeploymentDirectory, applicationPool, applicationDownloader, applicationInstaller,
                                                                                             deploymentStatusWriterStub, updateSessionManagerStub);
            await applicationUpdateManager.CheckForUpdates();

            Assert.True(updateSessionEnded);
        }
Exemplo n.º 2
0
        public async Task TestThatUpdateDoesNothingIfCannotStartUpdateSession()
        {
            IEnumerable <AppIdentity> appsToDeploy = new[] { app1v2 };
            IEnumerable <string>      clusters     = new[] { "clusterId1" };

            IApplicationPool applicationPool = new ApplicationPoolStub();
            string           path            = Path.GetTempPath();
            await applicationPool.AddApplication(new ApplicationStub(app1v1, path));

            IUpdateSessionManager updateSessionManagerStub = new StubIUpdateSessionManager()
                                                             .TryStartUpdateSession(() => Task.FromResult(false));

            IApplicationDeploymentDirectory applicationDeploymentDirectory = new StubIApplicationDeploymentDirectory()
                                                                             .FetchDeployments(() => Task.FromResult(appsToDeploy.Select(identity => new AppDeploymentConfig(identity, clusters))));

            const string             ClusterId  = "clusterId";
            const string             InstanceId = "instanceId";
            ApplicationUpdateManager applicationUpdateManager = new ApplicationUpdateManager(ClusterId, InstanceId,
                                                                                             applicationDeploymentDirectory, applicationPool, applicationDownloader, applicationInstaller,
                                                                                             deploymentStatusWriterStub, updateSessionManagerStub);
            await applicationUpdateManager.CheckForUpdates();

            Assert.Equal(1, applicationPool.Applications.Count());
            Assert.True(applicationPool.HasApplication(app1v1));
        }
Exemplo n.º 3
0
    public void UserCheckForUpdates()
    {
        ApplicationUpdateManager updateManager = services.updateManager;

        updateManager.CheckForUpdates(OnUserCheckForUpdatesComplete);

        LoadingTask waitForUpdateCheckTask = new LoadingTask("Checking for updates...", () =>
        {
            while (updateManager.UpdateCheckInProgress)
            {
                ;
            }
        });

        List <LoadingTask> tasks = new List <LoadingTask>()
        {
            waitForUpdateCheckTask
        };

        LoadingTasksManager tasksManager = services.loadingTasksManager;

        tasksManager.KickTasks(tasks);
    }
Exemplo n.º 4
0
        public async Task TestMultipleUpdates()
        {
            IEnumerable <AppIdentity> appsToDeploy = new[] { app1v3, app1v4, app1v5 };
            IEnumerable <string>      clusters     = new[] { "clusterId1" };

            IApplicationDeploymentDirectory applicationDeploymentDirectory = new StubIApplicationDeploymentDirectory()
                                                                             .FetchDeployments(() => Task.FromResult(appsToDeploy.Select(identity => new AppDeploymentConfig(identity, clusters))));

            string path = Path.GetTempPath();
            await applicationPool.AddApplication(new ApplicationStub(app1v1, path));

            await applicationPool.AddApplication(new ApplicationStub(app1v2, path));

            await applicationPool.AddApplication(new ApplicationStub(app1v3, path));

            IUpdateSessionManager updateSessionManagerStub = new StubIUpdateSessionManager()
                                                             .TryStartUpdateSession(() => Task.FromResult(true))
                                                             .EndUpdateSession(() => Task.CompletedTask);

            const string             ClusterId  = "clusterId";
            const string             InstanceId = "instanceId";
            ApplicationUpdateManager applicationUpdateManager = new ApplicationUpdateManager(ClusterId, InstanceId,
                                                                                             applicationDeploymentDirectory, applicationPool, applicationDownloader, applicationInstaller,
                                                                                             deploymentStatusWriterStub, updateSessionManagerStub);
            await applicationUpdateManager.CheckForUpdates();

            Assert.Equal(3, applicationPool.Applications.Count());
            Assert.True(applicationPool.HasApplication(app1v3));
            Assert.True(applicationPool.HasApplication(app1v4));
            Assert.True(applicationPool.HasApplication(app1v5));

            Assert.Equal(3, instanceDeploymentStatus.Applications.Count());
            VerifyThatDeploymentStatusHasBeenUpdated(instanceDeploymentStatus, app1v3, ClusterId, InstanceId);
            VerifyThatDeploymentStatusHasBeenUpdated(instanceDeploymentStatus, app1v4, ClusterId, InstanceId);
            VerifyThatDeploymentStatusHasBeenUpdated(instanceDeploymentStatus, app1v5, ClusterId, InstanceId);
        }
Exemplo n.º 5
0
        public async Task TestMultipleUpdates()
        {
            string id1 = "appId1";
            var    v1  = SemVersion.Parse("1.0.0");
            var    v2  = SemVersion.Parse("2.0.0");
            var    v3  = SemVersion.Parse("3.0.0");
            var    v4  = SemVersion.Parse("4.0.0");
            var    v5  = SemVersion.Parse("5.0.0");

            AppIdentity app1v1 = new AppIdentity(id1, v1);
            AppIdentity app1v2 = new AppIdentity(id1, v2);
            AppIdentity app1v3 = new AppIdentity(id1, v3);
            AppIdentity app1v4 = new AppIdentity(id1, v4);
            AppIdentity app1v5 = new AppIdentity(id1, v5);

            IEnumerable <AppIdentity> appsToDeploy = new[] { app1v3, app1v4, app1v5 };
            IEnumerable <string>      clusters     = new[] { "clusterId1" };

            IApplicationDeploymentDirectory applicationDeploymentDirectory = new StubIApplicationDeploymentDirectory()
                                                                             .FetchDeployments(() => Task.FromResult(appsToDeploy.Select(identity => new AppDeploymentConfig(identity, clusters))));

            IApplicationPool applicationPool = new ApplicationPoolStub();
            string           path            = Path.GetTempPath();
            await applicationPool.AddApplication(new ApplicationStub(app1v1, path));

            await applicationPool.AddApplication(new ApplicationStub(app1v2, path));

            await applicationPool.AddApplication(new ApplicationStub(app1v3, path));

            var downloadedApps = new List <AppIdentity>();
            IApplicationDownloader applicationDownloader = new StubIApplicationDownloader()
                                                           .DownloadApplication(appIdentity =>
            {
                downloadedApps.Add(appIdentity);
                return(Task.FromResult(true));
            }
                                                                                );

            var    installedApps   = new List <AppIdentity>();
            var    uninstalledApps = new List <AppIdentity>();
            string updatedAppId    = null;
            IEnumerable <SemVersion> versionsRemoved      = null;
            IEnumerable <SemVersion> versionsAdded        = null;
            IApplicationInstaller    applicationInstaller = new StubIApplicationInstaller()
                                                            .Install(config =>
            {
                installedApps.Add(config.AppIdentity);
                return(Task.FromResult(true));
            })
                                                            .UnInstall(appIdentity =>
            {
                uninstalledApps.Add(appIdentity);
                return(Task.FromResult(true));
            })
                                                            .Update((applicationsToRemove, applicationsToInstall) =>
            {
                updatedAppId    = applicationsToInstall.First().AppIdentity.Id;
                versionsRemoved = applicationsToRemove.Select(identity => identity.Version);
                versionsAdded   = applicationsToInstall.Select(config => config.AppIdentity.Version);
                return(Task.FromResult(true));
            }
                                                                    );

            ApplicationUpdateManager applicationUpdateManager = new ApplicationUpdateManager("clusterId", applicationDeploymentDirectory, applicationPool, applicationDownloader, applicationInstaller);
            await applicationUpdateManager.CheckForUpdates();

            Assert.Equal(2, downloadedApps.Count);
            Assert.True(downloadedApps.Contains(app1v4));
            Assert.True(downloadedApps.Contains(app1v5));

            Assert.False(installedApps.Any());
            Assert.False(uninstalledApps.Any());

            Assert.Equal(id1, updatedAppId);
            Assert.Equal(new [] { v1, v2 }, versionsRemoved.ToList());
            Assert.Equal(new[] { v4, v5 }, versionsAdded.ToList());
        }
Exemplo n.º 6
0
        public async Task TestMultipleUpdates()
        {
            string id1 = "appId1";
            var    v1  = SemVersion.Parse("1.0.0");
            var    v2  = SemVersion.Parse("2.0.0");
            var    v3  = SemVersion.Parse("3.0.0");
            var    v4  = SemVersion.Parse("4.0.0");
            var    v5  = SemVersion.Parse("5.0.0");

            AppIdentity app1v1 = new AppIdentity(id1, v1);
            AppIdentity app1v2 = new AppIdentity(id1, v2);
            AppIdentity app1v3 = new AppIdentity(id1, v3);
            AppIdentity app1v4 = new AppIdentity(id1, v4);
            AppIdentity app1v5 = new AppIdentity(id1, v5);

            IEnumerable <AppIdentity> appsToDeploy = new[] { app1v3, app1v4, app1v5 };
            IEnumerable <string>      clusters     = new[] { "clusterId1" };

            IApplicationDeploymentDirectory applicationDeploymentDirectory = new StubIApplicationDeploymentDirectory()
                                                                             .FetchDeployments(() => Task.FromResult(appsToDeploy.Select(identity => new AppDeploymentConfig(identity, clusters))));

            IApplicationPool applicationPool = new ApplicationPoolStub();
            string           path            = Path.GetTempPath();
            await applicationPool.AddApplication(new ApplicationStub(app1v1, path));

            await applicationPool.AddApplication(new ApplicationStub(app1v2, path));

            await applicationPool.AddApplication(new ApplicationStub(app1v3, path));

            var downloadedApps = new List <AppIdentity>();
            IApplicationDownloader applicationDownloader = new StubIApplicationDownloader()
                                                           .DownloadApplication(appIdentity =>
            {
                downloadedApps.Add(appIdentity);
                return(Task.FromResult(true));
            }
                                                                                );

            IApplicationInstaller applicationInstaller = new StubIApplicationInstaller()
                                                         .Install(config =>
            {
                applicationPool.AddApplication(new ApplicationStub(config.AppIdentity, "path"));
                return(Task.FromResult(true));
            })
                                                         .UnInstall(appIdentity =>
            {
                applicationPool.RemoveApplication(appIdentity);
                return(Task.FromResult(true));
            })
                                                         .Update((applicationsToRemove, applicationsToInstall) =>
            {
                foreach (var appIdentity in applicationsToRemove)
                {
                    applicationPool.RemoveApplication(appIdentity);
                }
                foreach (var appInstallConfig in applicationsToInstall)
                {
                    applicationPool.AddApplication(new ApplicationStub(appInstallConfig.AppIdentity, "path"));
                }
                return(Task.FromResult(true));
            }
                                                                 );

            var instanceDeploymentStatus = new InstanceDeploymentStatus();
            IDeploymentStatusWriter deploymentStatusWriterStub = new StubIDeploymentStatusWriter()
                                                                 .PublishInstanceDeploymentStatus((clusterId, instanceId, status) =>
            {
                instanceDeploymentStatus = status;
                return(Task.CompletedTask);
            });

            const string             ClusterId  = "clusterId";
            const string             InstanceId = "instanceId";
            ApplicationUpdateManager applicationUpdateManager = new ApplicationUpdateManager(ClusterId, InstanceId,
                                                                                             applicationDeploymentDirectory, applicationPool, applicationDownloader, applicationInstaller,
                                                                                             deploymentStatusWriterStub);
            await applicationUpdateManager.CheckForUpdates();

            Assert.Equal(3, applicationPool.Applications.Count());
            Assert.True(applicationPool.HasApplication(app1v3));
            Assert.True(applicationPool.HasApplication(app1v4));
            Assert.True(applicationPool.HasApplication(app1v5));

            Assert.Equal(3, instanceDeploymentStatus.Applications.Count());
            VerifyThatDeploymentStatusHasBeenUpdated(instanceDeploymentStatus, app1v3, ClusterId, InstanceId);
            VerifyThatDeploymentStatusHasBeenUpdated(instanceDeploymentStatus, app1v4, ClusterId, InstanceId);
            VerifyThatDeploymentStatusHasBeenUpdated(instanceDeploymentStatus, app1v5, ClusterId, InstanceId);
        }
Exemplo n.º 7
0
        public async Task TestMultipleUpdates()
        {
            string id1 = "appId1";
            var    v1  = new Version("1.0.0");
            var    v2  = new Version("2.0.0");
            var    v3  = new Version("3.0.0");
            var    v4  = new Version("4.0.0");
            var    v5  = new Version("5.0.0");

            AppIdentity app1v1 = new AppIdentity(id1, v1);
            AppIdentity app1v2 = new AppIdentity(id1, v2);
            AppIdentity app1v3 = new AppIdentity(id1, v3);
            AppIdentity app1v4 = new AppIdentity(id1, v4);
            AppIdentity app1v5 = new AppIdentity(id1, v5);

            IEnumerable <AppIdentity> appsToDeploy = new[] { app1v3, app1v4, app1v5 };

            IApplicationDeploymentDirectory applicationDeploymentDirectory = new StubIApplicationDeploymentDirectory
            {
                FetchDeployments_String = (deploymentId) => Task.FromResult(appsToDeploy)
            };

            IApplicationPool applicationPool = new ApplicationPoolStub();
            string           path            = Path.GetTempPath();
            await applicationPool.AddApplication(new ApplicationStub(app1v1, path));

            await applicationPool.AddApplication(new ApplicationStub(app1v2, path));

            await applicationPool.AddApplication(new ApplicationStub(app1v3, path));

            var downloadedApps = new List <AppIdentity>();
            IApplicationDownloader applicationDownloader = new StubIApplicationDownloader
            {
                DownloadApplication_AppIdentity = (appIdentity) =>
                {
                    downloadedApps.Add(appIdentity);
                    return(Task.FromResult(true));
                }
            };

            var    installedApps   = new List <AppIdentity>();
            var    uninstalledApps = new List <AppIdentity>();
            string updatedAppId    = null;
            IEnumerable <Version> versionsRemoved      = null;
            IEnumerable <Version> versionsAdded        = null;
            IApplicationInstaller applicationInstaller = new StubIApplicationInstaller
            {
                Install_AppIdentity = (appIdentity) =>
                {
                    installedApps.Add(appIdentity);
                    return(Task.FromResult(true));
                },
                UnInstall_AppIdentity = (appIdentity) =>
                {
                    uninstalledApps.Add(appIdentity);
                    return(Task.FromResult(true));
                },
                Update_String_IEnumerableOfVersion_IEnumerableOfVersion = (appId, versionsToRemove, versionToDeploy) =>
                {
                    updatedAppId    = appId;
                    versionsRemoved = versionsToRemove;
                    versionsAdded   = versionToDeploy;
                    return(Task.FromResult(true));
                }
            };

            ApplicationUpdateManager applicationUpdateManager = new ApplicationUpdateManager("deploymentId", applicationDeploymentDirectory, applicationPool, applicationDownloader, applicationInstaller);
            await applicationUpdateManager.CheckForUpdates();

            Assert.Equal(2, downloadedApps.Count);
            Assert.True(downloadedApps.Contains(app1v4));
            Assert.True(downloadedApps.Contains(app1v5));

            Assert.False(installedApps.Any());
            Assert.False(uninstalledApps.Any());

            Assert.Equal(id1, updatedAppId);
            Assert.Equal(new [] { v1, v2 }, versionsRemoved.ToList());
            Assert.Equal(new[] { v4, v5 }, versionsAdded.ToList());
        }