diff --git a/tests/Tgstation.Server.Host.Tests/Components/Watchdog/TestExperimentalWatchdog.cs b/tests/Tgstation.Server.Host.Tests/Components/Watchdog/TestExperimentalWatchdog.cs index 9483526883..45e726fc87 100644 --- a/tests/Tgstation.Server.Host.Tests/Components/Watchdog/TestExperimentalWatchdog.cs +++ b/tests/Tgstation.Server.Host.Tests/Components/Watchdog/TestExperimentalWatchdog.cs @@ -66,81 +66,5 @@ namespace Tgstation.Server.Host.Components.Watchdog.Tests mockServerControl.VerifyAll(); mockChat.VerifyAll(); } - - [TestMethod] - public async Task TestSuccessfulLaunchAndShutdown() - { - var mockChat = new Mock(); - mockChat.Setup(x => x.RegisterCommandHandler(It.IsNotNull())).Verifiable(); - var mockSessionControllerFactory = new Mock(); - var mockDmbFactory = new Mock(); - var mockLogger = new Mock>(); - var mockReattachInfoHandler = new Mock(); - var mockDatabaseContextFactory = new Mock(); - var mockJobManager = new Mock(); - var mockRestartRegistration = new Mock(); - mockRestartRegistration.Setup(x => x.Dispose()).Verifiable(); - var mockServerControl = new Mock(); - mockServerControl.Setup(x => x.RegisterForRestart(It.IsNotNull())).Returns(mockRestartRegistration.Object).Verifiable(); - var mockLaunchParameters = new DreamDaemonLaunchParameters(); - var mockInstance = new Models.Instance(); - var mockAsyncDelayer = new Mock(); - - using (var wd = new ExperimentalWatchdog(mockChat.Object, mockSessionControllerFactory.Object, mockDmbFactory.Object, mockReattachInfoHandler.Object, mockDatabaseContextFactory.Object, mockJobManager.Object, mockServerControl.Object, mockAsyncDelayer.Object, mockLogger.Object, mockLaunchParameters, mockInstance, default)) - using (var cts = new CancellationTokenSource()) - { - var mockCompileJob = new Models.CompileJob(); - var mockDmbProvider = new Mock(); - mockDmbProvider.SetupGet(x => x.CompileJob).Returns(mockCompileJob).Verifiable(); - var mDmbP = mockDmbProvider.Object; - - var infiniteTask = new TaskCompletionSource().Task; - - mockDmbFactory.SetupGet(x => x.OnNewerDmb).Returns(infiniteTask); - mockDmbFactory.SetupGet(x => x.DmbAvailable).Returns(true).Verifiable(); - mockDmbFactory.Setup(x => x.LockNextDmb(2)).Returns(mDmbP).Verifiable(); - - var sessionsToVerify = new List>(); - - var cancellationToken = cts.Token; - mockSessionControllerFactory.Setup(x => x.LaunchNew(mDmbP, null, mockLaunchParameters, It.IsAny(), It.IsAny(), false, cancellationToken)).Returns(() => - { - var mockSession = new Mock(); - mockSession.SetupGet(x => x.Lifetime).Returns(infiniteTask).Verifiable(); - mockSession.SetupGet(x => x.OnReboot).Returns(infiniteTask).Verifiable(); - mockSession.SetupGet(x => x.Dmb).Returns(mDmbP).Verifiable(); - mockSession.SetupGet(x => x.LaunchResult).Returns(Task.FromResult(new LaunchResult - { - StartupTime = TimeSpan.FromSeconds(1) - })).Verifiable(); - sessionsToVerify.Add(mockSession); - return Task.FromResult(mockSession.Object); - }).Verifiable(); - mockAsyncDelayer.Setup(x => x.Delay(It.IsAny(), cancellationToken)).Returns(Task.CompletedTask).Verifiable(); - - cts.CancelAfter(TimeSpan.FromSeconds(15)); - - try - { - await wd.Launch(cancellationToken).ConfigureAwait(false); - await wd.Terminate(false, cancellationToken).ConfigureAwait(false); - } - finally - { - cts.Cancel(); - } - Assert.AreEqual(2, sessionsToVerify.Count); - foreach (var I in sessionsToVerify) - I.VerifyAll(); - mockDmbProvider.VerifyAll(); - } - - mockSessionControllerFactory.VerifyAll(); - mockDmbFactory.VerifyAll(); - mockRestartRegistration.VerifyAll(); - mockServerControl.VerifyAll(); - mockChat.VerifyAll(); - mockAsyncDelayer.VerifyAll(); - } } } diff --git a/tests/Tgstation.Server.Tests/Instance/JobsRequiredTest.cs b/tests/Tgstation.Server.Tests/Instance/JobsRequiredTest.cs index b25c96c3d9..bb3cb43f45 100644 --- a/tests/Tgstation.Server.Tests/Instance/JobsRequiredTest.cs +++ b/tests/Tgstation.Server.Tests/Instance/JobsRequiredTest.cs @@ -9,16 +9,16 @@ using Tgstation.Server.Client.Components; namespace Tgstation.Server.Tests.Instance { - abstract class JobsRequiredTest + class JobsRequiredTest { protected IJobsClient JobsClient { get; } - protected JobsRequiredTest(IJobsClient jobsClient) + public JobsRequiredTest(IJobsClient jobsClient) { this.JobsClient = jobsClient; } - protected async Task WaitForJob(Job originalJob, int timeout, bool expectFailure, CancellationToken cancellationToken) + public async Task WaitForJob(Job originalJob, int timeout, bool expectFailure, CancellationToken cancellationToken) { var job = originalJob; do diff --git a/tests/Tgstation.Server.Tests/IntegrationTest.cs b/tests/Tgstation.Server.Tests/IntegrationTest.cs index 3fbd79f60f..9a43c84b21 100644 --- a/tests/Tgstation.Server.Tests/IntegrationTest.cs +++ b/tests/Tgstation.Server.Tests/IntegrationTest.cs @@ -249,15 +249,46 @@ namespace Tgstation.Server.Tests using (var adminClient = await CreateAdminClient()) { var instanceClient = adminClient.Instances.CreateClient(instance); - var dd = instanceClient.DreamDaemon.Read(cancellationToken); + await Task.Delay(3000, cancellationToken); + + var dd = await instanceClient.DreamDaemon.Read(cancellationToken); + Assert.IsTrue(dd.Running.Value); + + await instanceClient.DreamDaemon.Shutdown(cancellationToken); + await instanceClient.DreamDaemon.Update(new DreamDaemon + { + AutoStart = true + }, cancellationToken); + + await adminClient.Administration.Restart(cancellationToken); + } + + await Task.WhenAny(serverTask, Task.Delay(30000, cancellationToken)); + Assert.IsTrue(serverTask.IsCompleted); + + serverTask = server.Run(cancellationToken); + using (var adminClient = await CreateAdminClient()) + { + var instanceClient = adminClient.Instances.CreateClient(instance); + + var jobs = await instanceClient.Jobs.ListActive(cancellationToken); + if (jobs.Any()) + { + Assert.AreEqual(1, jobs.Count); + + await new JobsRequiredTest(instanceClient.Jobs).WaitForJob(jobs.Single(), 40, false, cancellationToken); + } + + await Task.Delay(3000, cancellationToken); + var dd = await instanceClient.DreamDaemon.Read(cancellationToken); + + Assert.IsTrue(dd.Running.Value); var repoTest = new RepositoryTest(instanceClient.Repository, instanceClient.Jobs).RunPostTest(cancellationToken); await new ChatTest(instanceClient.ChatBots, adminClient.Instances, instance).RunPostTest(cancellationToken); await repoTest; await new InstanceManagerTest(adminClient.Instances, adminClient.Users, server.Directory).RunPostTest(cancellationToken); - - Assert.IsTrue((await dd).Running.Value); } } catch (Exception ex)