Error watchdog tests on runtimes

This commit is contained in:
Dominion
2023-04-03 00:03:16 -04:00
parent 9c388e4700
commit 24627e3efd
4 changed files with 54 additions and 25 deletions
+5
View File
@@ -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")
+5
View File
@@ -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()
+5
View File
@@ -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
@@ -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);