mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-08-22 20:47:28 +01:00
Make some live tests more generic for OpenDream
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user