From eea3ec71d4eee2a9020a0f0f522ed18582a4d5ea Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Mon, 25 Dec 2023 08:49:38 -0500 Subject: [PATCH] Workaround for random-ass port allocation failures --- .../Live/Instance/InstanceTest.cs | 25 +++++++++++-- .../Live/Instance/WatchdogTest.cs | 37 ++++++++++++++----- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs b/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs index bbe349ca5c..555760d91f 100644 --- a/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs +++ b/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs @@ -159,10 +159,27 @@ namespace Tgstation.Server.Tests.Live.Instance Origin = new Uri(Origin), }, cancellationToken).AsTask(); - var dmUpdateRequest = instanceClient.DreamMaker.Update(new DreamMakerRequest + async Task UpdateDMSettings() { - ApiValidationPort = dmPort, - }, cancellationToken); + for (var i = 0; i < 5; ++i) + try + { + await instanceClient.DreamMaker.Update(new DreamMakerRequest + { + ApiValidationPort = dmPort, + }, cancellationToken); + } + catch (ConflictException ex) when (ex.ErrorCode == ErrorCode.PortNotAvailable) + { + if (i == 4) + throw; + + // I have no idea why this happens sometimes + await Task.Delay(TimeSpan.FromSeconds(3), cancellationToken); + } + } + + var dmUpdateRequest = UpdateDMSettings(); // need at least one chat bot to satisfy DMAPI test, // use discord as it allows multi-botting on on token unlike IRC @@ -230,7 +247,7 @@ namespace Tgstation.Server.Tests.Live.Instance await Task.WhenAll( jrt.WaitForJob(installJob2.InstallJob, EngineTest.EngineInstallationTimeout(compatVersion) + 30, false, null, cancellationToken), jrt.WaitForJob(cloneRequest.Result.ActiveJob, 60, false, null, cancellationToken), - dmUpdateRequest.AsTask(), + dmUpdateRequest, cloneRequest); if (compatVersion.Engine.Value == EngineType.OpenDream) diff --git a/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs b/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs index 6c32ac45b8..87a04a297d 100644 --- a/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs +++ b/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs @@ -129,17 +129,34 @@ namespace Tgstation.Server.Tests.Live.Instance } } + async Task UpdateDDSettings() + { + for (var i = 0; i < 5; ++i) + try + { + // Increase startup timeout, disable heartbeats, enable map threads because we've tested without for years + await instanceClient.DreamDaemon.Update(new DreamDaemonRequest + { + StartupTimeout = 60, + HealthCheckSeconds = 0, + Port = ddPort, + MapThreads = 2, + LogOutput = false, + AdditionalParameters = BaseAdditionalParameters + }, cancellationToken); + } + catch (ConflictException ex) when (ex.ErrorCode == ErrorCode.PortNotAvailable) + { + if (i == 4) + throw; + + // I have no idea why this happens sometimes + await Task.Delay(TimeSpan.FromSeconds(3), cancellationToken); + } + } + await Task.WhenAll( - // Increase startup timeout, disable heartbeats, enable map threads because we've tested without for years - instanceClient.DreamDaemon.Update(new DreamDaemonRequest - { - StartupTimeout = 60, - HealthCheckSeconds = 0, - Port = ddPort, - MapThreads = 2, - LogOutput = false, - AdditionalParameters = BaseAdditionalParameters - }, cancellationToken).AsTask(), + UpdateDDSettings(), CheckByondVersions(), ApiAssert.ThrowsException(() => instanceClient.DreamDaemon.Update(new DreamDaemonRequest {