diff --git a/tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj b/tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj index dc186f13..a77f941d 100644 --- a/tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj +++ b/tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj @@ -22,15 +22,4 @@ - - - - - diff --git a/tests/AcDream.Core.Net.Tests/Transport/FakeAceTransportTests.cs b/tests/AcDream.Core.Net.Tests/Transport/FakeAceTransportTests.cs index 2d79544f..18abee77 100644 --- a/tests/AcDream.Core.Net.Tests/Transport/FakeAceTransportTests.cs +++ b/tests/AcDream.Core.Net.Tests/Transport/FakeAceTransportTests.cs @@ -14,6 +14,13 @@ namespace AcDream.Core.Net.Tests.Transport; /// public sealed class FakeAceTransportTests { + /// + /// Wall-clock allowance for background transport work in these + /// virtual-clock harnesses. Generous on purpose: it bounds a hang without + /// encoding an assumption that the machine is idle. + /// + private static readonly TimeSpan HarnessPatience = TimeSpan.FromSeconds(60); + // ---- LossyLink ---- [Fact] @@ -212,7 +219,14 @@ public sealed class FakeAceTransportTests Task gapDriver = Task.Run(() => { - Assert.True(enterRequest.Wait(TimeSpan.FromSeconds(2))); + // These two windows are wall-clock patience for a harness whose + // CLOCK is virtual, not part of what the test verifies. Two + // seconds was enough on an idle dev box but not on a loaded CI + // runner, where this test took 37-42 s and failed while passing + // 5/5 in ~350 ms in isolation. Widening the window changes no + // assertion — recovery must still happen, and a genuine failure + // to NAK still fails the test, just later. + Assert.True(enterRequest.Wait(HarnessPatience)); // This later sequenced packet passes the seeded loss gate, // exposing the missing ServerReady and parking behind it. fake.EnqueueServerGameMessage( @@ -220,7 +234,7 @@ public sealed class FakeAceTransportTests GameMessageGroup.UIQueue); Assert.True(SpinWait.SpinUntil( () => session.Transport?.Inbound.NakCount > 0, - TimeSpan.FromSeconds(2))); + HarnessPatience)); // No datagram follows this virtual-time edge. Recovery now // requires paused EnterWorld's independent periodic sweep. diff --git a/tests/AcDream.Core.Net.Tests/xunit.runner.json b/tests/AcDream.Core.Net.Tests/xunit.runner.json deleted file mode 100644 index c3155894..00000000 --- a/tests/AcDream.Core.Net.Tests/xunit.runner.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", - "parallelizeAssembly": false, - "parallelizeTestCollections": false, - "maxParallelThreads": 1 -}