From 88773528a9cc7ce4fa0749f3bd22c8261f9e7789 Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Sun, 15 Oct 2023 15:42:26 -0400 Subject: [PATCH] Make some live tests more generic for OpenDream --- .../Live/Instance/DeploymentTest.cs | 9 +++-- .../Live/Instance/InstanceTest.cs | 23 ++++++------- .../Live/Instance/WatchdogTest.cs | 13 ++++--- .../Live/TestLiveServer.cs | 34 +++++++++++++------ 4 files changed, 49 insertions(+), 30 deletions(-) diff --git a/tests/Tgstation.Server.Tests/Live/Instance/DeploymentTest.cs b/tests/Tgstation.Server.Tests/Live/Instance/DeploymentTest.cs index 3861634aa2..8b5fab58c9 100644 --- a/tests/Tgstation.Server.Tests/Live/Instance/DeploymentTest.cs +++ b/tests/Tgstation.Server.Tests/Live/Instance/DeploymentTest.cs @@ -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]; diff --git a/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs b/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs index 96b8b86492..31048283e5 100644 --- a/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs +++ b/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs @@ -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); diff --git a/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs b/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs index 7ba10fdaa7..24394f4a8b 100644 --- a/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs +++ b/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs @@ -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; } diff --git a/tests/Tgstation.Server.Tests/Live/TestLiveServer.cs b/tests/Tgstation.Server.Tests/Live/TestLiveServer.cs index 6bf1ccf6c2..ac589da22f 100644 --- a/tests/Tgstation.Server.Tests/Live/TestLiveServer.cs +++ b/tests/Tgstation.Server.Tests/Live/TestLiveServer.cs @@ -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 GetDDProcessesOnPort(ushort? port) + public static List GetEngineServerProcessesOnPort(EngineType engineType, ushort? port) { var result = new List(); - 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()) + 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(); @@ -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);