diff --git a/tests/DMAPI/ApiFree/Test.dm b/tests/DMAPI/ApiFree/Test.dm index 42bd226f8a..b7b4ae5535 100644 --- a/tests/DMAPI/ApiFree/Test.dm +++ b/tests/DMAPI/ApiFree/Test.dm @@ -1,2 +1,7 @@ /world/New() + text2file("SUCCESS", "test_success.txt") log << "Hello world!" + +/world/Error(exception) + fdel("test_success.txt") + text2file("Runtime Error: [exception]", "test_fail_reason.txt") diff --git a/tests/DMAPI/BasicOperation/Test.dm b/tests/DMAPI/BasicOperation/Test.dm index d0119e52fc..ad65de0e1a 100644 --- a/tests/DMAPI/BasicOperation/Test.dm +++ b/tests/DMAPI/BasicOperation/Test.dm @@ -1,10 +1,15 @@ /world/New() + text2file("SUCCESS", "test_success.txt") log << "About to call TgsNew()" sleep_offline = FALSE TgsNew(minimum_required_security_level = TGS_SECURITY_SAFE) log << "About to call StartAsync()" StartAsync() +/world/Error(exception) + fdel("test_success.txt") + text2file("Runtime Error: [exception]", "test_fail_reason.txt") + /proc/StartAsync() set waitfor = FALSE Run() diff --git a/tests/DMAPI/LongRunning/Test.dm b/tests/DMAPI/LongRunning/Test.dm index 71174adf7f..e94bfb2e6f 100644 --- a/tests/DMAPI/LongRunning/Test.dm +++ b/tests/DMAPI/LongRunning/Test.dm @@ -2,7 +2,12 @@ sleep_offline = FALSE loop_checks = FALSE +/world/Error(exception) + fdel("test_success.txt") + text2file("Runtime Error: [exception]", "test_fail_reason.txt") + /world/New() + text2file("SUCCESS", "test_success.txt") log << "Initial value of sleep_offline: [sleep_offline]" sleep_offline = FALSE diff --git a/tests/Tgstation.Server.Tests/Instance/WatchdogTest.cs b/tests/Tgstation.Server.Tests/Instance/WatchdogTest.cs index e2fb6f4cd3..99db3e31dd 100644 --- a/tests/Tgstation.Server.Tests/Instance/WatchdogTest.cs +++ b/tests/Tgstation.Server.Tests/Instance/WatchdogTest.cs @@ -140,6 +140,7 @@ namespace Tgstation.Server.Tests.Instance Assert.AreEqual(false, daemonStatus.SoftShutdown); Assert.AreEqual(String.Empty, daemonStatus.AdditionalParameters); var initialCompileJob = daemonStatus.ActiveCompileJob; + await CheckDMApiFail(daemonStatus.ActiveCompileJob, cancellationToken); daemonStatus = await DeployTestDme("BasicOperation/basic_operation_test", DreamDaemonSecurity.Trusted, true, cancellationToken); @@ -153,6 +154,7 @@ namespace Tgstation.Server.Tests.Instance Assert.AreEqual(DreamDaemonSecurity.Trusted, newerCompileJob.MinimumSecurityLevel); Assert.AreEqual(DMApiConstants.InteropVersion, daemonStatus.StagedCompileJob.DMApiVersion); await instanceClient.DreamDaemon.Shutdown(cancellationToken); + await CheckDMApiFail(daemonStatus.ActiveCompileJob, cancellationToken); } async Task RunBasicTest(CancellationToken cancellationToken) @@ -260,7 +262,10 @@ namespace Tgstation.Server.Tests.Instance var ddStatus = await instanceClient.DreamDaemon.Read(cancellationToken); Assert.AreEqual(1U, ddStatus.HeartbeatSeconds.Value); if (ddStatus.Status.Value == WatchdogStatus.Offline) + { + await CheckDMApiFail(ddStatus.ActiveCompileJob, cancellationToken); break; + } if (--timeout == 0) Assert.Fail("DreamDaemon didn't shutdown within the timeout!"); @@ -343,6 +348,7 @@ namespace Tgstation.Server.Tests.Instance Assert.AreNotEqual(initialCompileJob.Id, newerCompileJob.Id); Assert.AreEqual(DreamDaemonSecurity.Ultrasafe, newerCompileJob.MinimumSecurityLevel); + await CheckDMApiFail(daemonStatus.ActiveCompileJob, cancellationToken); daemonStatus = await TellWorldToReboot(cancellationToken); Assert.AreNotEqual(initialCompileJob.Id, daemonStatus.ActiveCompileJob.Id); @@ -352,6 +358,7 @@ namespace Tgstation.Server.Tests.Instance daemonStatus = await instanceClient.DreamDaemon.Read(cancellationToken); Assert.AreEqual(WatchdogStatus.Offline, daemonStatus.Status.Value); + await CheckDMApiFail(daemonStatus.ActiveCompileJob, cancellationToken); } async Task RunLongRunningTestThenUpdateWithNewDme(CancellationToken cancellationToken) @@ -383,6 +390,7 @@ namespace Tgstation.Server.Tests.Instance Assert.AreNotEqual(initialCompileJob.Id, newerCompileJob.Id); Assert.AreEqual(DreamDaemonSecurity.Ultrasafe, newerCompileJob.MinimumSecurityLevel); + await CheckDMApiFail(daemonStatus.ActiveCompileJob, cancellationToken); daemonStatus = await TellWorldToReboot(cancellationToken); Assert.AreNotEqual(initialCompileJob.Id, daemonStatus.ActiveCompileJob.Id); @@ -392,6 +400,7 @@ namespace Tgstation.Server.Tests.Instance daemonStatus = await instanceClient.DreamDaemon.Read(cancellationToken); Assert.AreEqual(WatchdogStatus.Offline, daemonStatus.Status.Value); + await CheckDMApiFail(daemonStatus.ActiveCompileJob, cancellationToken); } async Task RunLongRunningTestThenUpdateWithByondVersionSwitch(CancellationToken cancellationToken) @@ -436,12 +445,14 @@ namespace Tgstation.Server.Tests.Instance Assert.AreEqual(true, daemonStatus.SoftRestart); + await CheckDMApiFail(daemonStatus.ActiveCompileJob, cancellationToken); daemonStatus = await TellWorldToReboot(cancellationToken); Assert.AreEqual(versionToInstall, daemonStatus.ActiveCompileJob.ByondVersion); Assert.IsNull(daemonStatus.StagedCompileJob); await instanceClient.DreamDaemon.Shutdown(cancellationToken); + await CheckDMApiFail(daemonStatus.ActiveCompileJob, cancellationToken); daemonStatus = await instanceClient.DreamDaemon.Read(cancellationToken); Assert.AreEqual(WatchdogStatus.Offline, daemonStatus.Status.Value); @@ -462,33 +473,30 @@ namespace Tgstation.Server.Tests.Instance Assert.AreEqual(WatchdogStatus.Online, daemonStatus.Status.Value); Assert.AreEqual(IntegrationTest.DDPort, daemonStatus.CurrentPort); - // The measure we use to test dream daemon startup doesn't work on linux currently - if (new PlatformIdentifier().IsWindows) + // Try killing the DD process to ensure it gets set to the restoring state + do { - // Try killing the DD process to ensure it gets set to the restoring state - do - { - KillDD(true); - await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); - daemonStatus = await instanceClient.DreamDaemon.Read(cancellationToken); - } - while (daemonStatus.Status == WatchdogStatus.Online); - Assert.AreEqual(WatchdogStatus.Restoring, daemonStatus.Status.Value); - - // Kill it again - do - { - KillDD(false); - daemonStatus = await instanceClient.DreamDaemon.Read(cancellationToken); - } - while (daemonStatus.Status == WatchdogStatus.Online || daemonStatus.Status == WatchdogStatus.Restoring); - Assert.AreEqual(WatchdogStatus.DelayedRestart, daemonStatus.Status.Value); - - await Task.Delay(TimeSpan.FromSeconds(15), cancellationToken); - + KillDD(true); + await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); daemonStatus = await instanceClient.DreamDaemon.Read(cancellationToken); - Assert.AreEqual(WatchdogStatus.Online, daemonStatus.Status.Value); } + while (daemonStatus.Status == WatchdogStatus.Online); + Assert.AreEqual(WatchdogStatus.Restoring, daemonStatus.Status.Value); + + // Kill it again + do + { + KillDD(false); + daemonStatus = await instanceClient.DreamDaemon.Read(cancellationToken); + } + while (daemonStatus.Status == WatchdogStatus.Online || daemonStatus.Status == WatchdogStatus.Restoring); + Assert.AreEqual(WatchdogStatus.DelayedRestart, daemonStatus.Status.Value); + + await Task.Delay(TimeSpan.FromSeconds(15), cancellationToken); + + daemonStatus = await instanceClient.DreamDaemon.Read(cancellationToken); + Assert.AreEqual(WatchdogStatus.Online, daemonStatus.Status.Value); + await CheckDMApiFail(daemonStatus.ActiveCompileJob, cancellationToken); } static bool KillDD(bool require) @@ -565,6 +573,7 @@ namespace Tgstation.Server.Tests.Instance compileJobJob = await instanceClient.DreamMaker.Compile(cancellationToken); await WaitForJob(compileJobJob, 90, true, ErrorCode.DeploymentTimeout, cancellationToken); + ranTimeoutTest = true; } await instanceClient.DreamMaker.Update(new DreamMakerRequest @@ -606,9 +615,14 @@ namespace Tgstation.Server.Tests.Instance async Task CheckDMApiFail(CompileJobResponse compileJob, CancellationToken cancellationToken) { - var failFile = Path.Combine(instanceClient.Metadata.Path, "Game", compileJob.DirectoryName.Value.ToString(), "A", Path.GetDirectoryName(compileJob.DmeName), "test_fail_reason.txt"); + var gameDir = Path.Combine(instanceClient.Metadata.Path, "Game", compileJob.DirectoryName.Value.ToString(), Path.GetDirectoryName(compileJob.DmeName)); + var failFile = Path.Combine(gameDir, "test_fail_reason.txt"); if (!File.Exists(failFile)) + { + var successFile = Path.Combine(gameDir, "test_success.txt"); + Assert.IsTrue(File.Exists(successFile)); return; + } var text = await File.ReadAllTextAsync(failFile, cancellationToken); Assert.Fail(text);