mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-07-14 09:33:22 +01:00
Error watchdog tests on runtimes
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user