Make some live tests more generic for OpenDream

This commit is contained in:
Jordan Dominion
2023-10-15 15:42:26 -04:00
parent 1e70e2d053
commit 88773528a9
4 changed files with 49 additions and 30 deletions
@@ -23,6 +23,7 @@ namespace Tgstation.Server.Tests.Live.Instance
readonly ushort dmPort;
readonly ushort ddPort;
readonly bool lowPriorityDeployments;
readonly EngineType testEngine;
Task vpTest;
@@ -31,7 +32,8 @@ namespace Tgstation.Server.Tests.Live.Instance
IJobsClient jobsClient,
ushort dmPort,
ushort ddPort,
bool lowPriorityDeployments) : base(jobsClient)
bool lowPriorityDeployments,
EngineType testEngine) : base(jobsClient)
{
this.instanceClient = instanceClient ?? throw new ArgumentNullException(nameof(instanceClient));
dreamMakerClient = instanceClient.DreamMaker;
@@ -39,6 +41,7 @@ namespace Tgstation.Server.Tests.Live.Instance
this.dmPort = dmPort;
this.ddPort = ddPort;
this.lowPriorityDeployments = lowPriorityDeployments;
this.testEngine = testEngine;
}
public async ValueTask RunPreRepoClone(CancellationToken cancellationToken)
@@ -61,12 +64,12 @@ namespace Tgstation.Server.Tests.Live.Instance
// this doesn't check dm's priority, but it really should
while (!deploymentJobWaitTask.IsCompleted)
{
var allProcesses = TestLiveServer.GetDDProcessesOnPort(dmPort);
var allProcesses = TestLiveServer.GetEngineServerProcessesOnPort(testEngine, dmPort);
if (allProcesses.Count == 0)
continue;
if (allProcesses.Count > 1)
Assert.Fail("Multiple DreamDaemon-like processes running!");
Assert.Fail("Multiple engine-like processes running!");
using var process = allProcesses[0];
@@ -42,11 +42,12 @@ namespace Tgstation.Server.Tests.Live.Instance
bool lowPrioDeployment,
CancellationToken cancellationToken)
{
var byondTest = new ByondTest(instanceClient.Byond, instanceClient.Jobs, fileDownloader, instanceClient.Metadata, EngineType.Byond);
var testVersion = await ByondTest.GetEdgeVersion(EngineType.Byond, fileDownloader, cancellationToken);
var byondTest = new ByondTest(instanceClient.Byond, instanceClient.Jobs, fileDownloader, instanceClient.Metadata, testVersion.Engine.Value);
var chatTest = new ChatTest(instanceClient.ChatBots, instanceManagerClient, instanceClient.Jobs, instanceClient.Metadata);
var configTest = new ConfigurationTest(instanceClient.Configuration, instanceClient.Metadata);
var repoTest = new RepositoryTest(instanceClient.Repository, instanceClient.Jobs);
var dmTest = new DeploymentTest(instanceClient, instanceClient.Jobs, dmPort, ddPort, lowPrioDeployment);
var dmTest = new DeploymentTest(instanceClient, instanceClient.Jobs, dmPort, ddPort, lowPrioDeployment, testVersion.Engine.Value);
var byondTask = byondTest.Run(cancellationToken, out var firstInstall);
var chatTask = chatTest.RunPreWatchdog(cancellationToken);
@@ -62,8 +63,8 @@ namespace Tgstation.Server.Tests.Live.Instance
await dmTask;
await byondTask;
await new WatchdogTest(
await ByondTest.GetEdgeVersion(EngineType.Byond, fileDownloader, cancellationToken), instanceClient, instanceManager, serverPort, highPrioDD, ddPort).Run(cancellationToken);
await new WatchdogTest(testVersion, instanceClient, instanceManager, serverPort, highPrioDD, ddPort)
.Run(cancellationToken);
}
public async Task RunCompatTests(
@@ -74,12 +75,6 @@ namespace Tgstation.Server.Tests.Live.Instance
bool highPrioDD,
CancellationToken cancellationToken)
{
if (compatVersion.Engine.Value == EngineType.OpenDream)
#if DEBUG
return;
#else
Assert.Fail("OD Compat test not ready!");
#endif
System.Console.WriteLine($"COMPAT TEST START: {compatVersion}");
const string Origin = "https://github.com/Cyberboss/common_core";
var cloneRequest = instanceClient.Repository.Clone(new RepositoryCreateRequest
@@ -207,10 +202,14 @@ namespace Tgstation.Server.Tests.Live.Instance
if (compatVersion.Engine.Value == EngineType.OpenDream)
{
Assert.IsNotNull(compatVersion.SourceSHA);
Assert.AreNotEqual(Limits.MaximumCommitShaLength, compatVersion.SourceSHA.Length);
var activeVersion = await instanceClient.Byond.ActiveVersion(cancellationToken);
Assert.AreEqual(Limits.MaximumCommitShaLength, activeVersion.EngineVersion.SourceSHA.Length);
Assert.AreEqual(compatVersion, activeVersion.EngineVersion);
Assert.AreEqual(compatVersion.SourceSHA, activeVersion.EngineVersion.SourceSHA);
Assert.AreEqual(compatVersion.Version, activeVersion.EngineVersion.Version);
Assert.AreEqual(compatVersion.Engine, activeVersion.EngineVersion.Engine);
Assert.AreEqual(1, activeVersion.EngineVersion.CustomIteration);
compatVersion = activeVersion.EngineVersion;
}
var configSetupTask = new ConfigurationTest(instanceClient.Configuration, instanceClient.Metadata).SetupDMApiTests(cancellationToken);
@@ -535,7 +535,7 @@ namespace Tgstation.Server.Tests.Live.Instance
CheckDDPriority();
// lock on to DD and pause it so it can't health check
var ddProcs = TestLiveServer.GetDDProcessesOnPort(ddPort).Where(x => !x.HasExited).ToList();
var ddProcs = TestLiveServer.GetEngineServerProcessesOnPort(testVersion.Engine.Value, ddPort).Where(x => !x.HasExited).ToList();
if (ddProcs.Count != 1)
Assert.Fail($"Incorrect number of DD processes: {ddProcs.Count}");
@@ -882,7 +882,7 @@ namespace Tgstation.Server.Tests.Live.Instance
void CheckDDPriority()
{
var allProcesses = TestLiveServer.GetDDProcessesOnPort(ddPort).Where(x => !x.HasExited).ToList();
var allProcesses = TestLiveServer.GetEngineServerProcessesOnPort(testVersion.Engine.Value, ddPort).Where(x => !x.HasExited).ToList();
if (allProcesses.Count == 0)
Assert.Fail("Expected DreamDaemon to be running here");
@@ -1093,7 +1093,7 @@ namespace Tgstation.Server.Tests.Live.Instance
bool KillDD(bool require)
{
var ddProcs = TestLiveServer.GetDDProcessesOnPort(ddPort).Where(x => !x.HasExited).ToList();
var ddProcs = TestLiveServer.GetEngineServerProcessesOnPort(testVersion.Engine.Value, ddPort).Where(x => !x.HasExited).ToList();
if (require && ddProcs.Count == 0 || ddProcs.Count > 1)
Assert.Fail($"Incorrect number of DD processes: {ddProcs.Count}");
@@ -1167,7 +1167,12 @@ namespace Tgstation.Server.Tests.Live.Instance
var ddInfo = await instanceClient.DreamDaemon.Read(cancellationToken);
if (requireApi)
Assert.IsNotNull((ddInfo.StagedCompileJob ?? ddInfo.ActiveCompileJob).DMApiVersion);
{
var targetJob = ddInfo.StagedCompileJob ?? ddInfo.ActiveCompileJob;
Assert.IsNotNull(targetJob);
Assert.IsNotNull(targetJob.DMApiVersion);
}
return ddInfo;
}
@@ -60,12 +60,23 @@ namespace Tgstation.Server.Tests.Live
readonly ServerClientFactory clientFactory = new (new ProductHeaderValue(Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString()));
public static List<System.Diagnostics.Process> GetDDProcessesOnPort(ushort? port)
public static List<System.Diagnostics.Process> GetEngineServerProcessesOnPort(EngineType engineType, ushort? port)
{
var result = new List<System.Diagnostics.Process>();
result.AddRange(System.Diagnostics.Process.GetProcessesByName("DreamDaemon"));
if (new PlatformIdentifier().IsWindows)
result.AddRange(System.Diagnostics.Process.GetProcessesByName("dd"));
switch (engineType) {
case EngineType.Byond:
result.AddRange(System.Diagnostics.Process.GetProcessesByName("DreamDaemon"));
if (new PlatformIdentifier().IsWindows)
result.AddRange(System.Diagnostics.Process.GetProcessesByName("dd"));
break;
case EngineType.OpenDream:
result.AddRange(System.Diagnostics.Process.GetProcessesByName("OpenDreamServer"));
break;
default:
Assert.Fail($"Unknown engine type: {engineType}");
return null;
}
if (port.HasValue)
result = result.Where(x =>
@@ -102,11 +113,12 @@ namespace Tgstation.Server.Tests.Live
}
}
static void TerminateAllDDs()
static void TerminateAllEngineServers()
{
foreach (var proc in GetDDProcessesOnPort(null))
using (proc)
proc.Kill();
foreach (var enumValue in Enum.GetValues<EngineType>())
foreach (var proc in GetEngineServerProcessesOnPort(enumValue, null))
using (proc)
proc.Kill();
}
static ushort FreeTcpPort(params ushort[] usedPorts)
@@ -1057,7 +1069,7 @@ namespace Tgstation.Server.Tests.Live
using var serverCts = CancellationTokenSource.CreateLinkedTokenSource(hardCancellationToken);
var cancellationToken = serverCts.Token;
TerminateAllDDs();
TerminateAllEngineServers();
InstanceManager GetInstanceManager() => ((Host.Server)server.RealServer).Host.Services.GetRequiredService<InstanceManager>();
@@ -1315,7 +1327,7 @@ namespace Tgstation.Server.Tests.Live
.Select(e => instanceClient.Jobs.GetId(e, cancellationToken))
.ToList();
jobs = (await ValueTaskExtensions.WhenAll(getTasks))
.Where(x => x.StartedAt.Value > preStartupTime)
.ToList();
@@ -1422,7 +1434,7 @@ namespace Tgstation.Server.Tests.Live
}
catch (OperationCanceledException) { }
TerminateAllDDs();
TerminateAllEngineServers();
}
Assert.IsTrue(serverTask.IsCompleted);