From daf28bfec55a626041a7212e95fbc14415cde3af Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 19 Aug 2026 13:59:42 +0200 Subject: [PATCH] test: revert Core.Net serialization; widen the virtual-clock harness patience instead MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Serializing AcDream.Core.Net.Tests to fix a Linux starvation REGRESSED Windows, which had been green: Core.Net went from 1000 passed in 7 s (run 154) to 999/1000 in 17 s (run 155), taking down LossSoak_TwoPercentBidirectional_ ZeroMessageLoss_LedgersConverge, a test that had never failed. That trade trans- ferred the flake between platforms rather than fixing anything, so it is reverted: no xunit.runner.json, no csproj change. The actual fragility is narrower than it looked — exactly ONE test uses real-time waits (PausedSelector_SeededDroppedServerReady_RecoversOnIdleSweep), and its harness drives a VIRTUAL clock while asserting on 2 s wall-clock windows. Those windows are patience for background work, not part of the assertion, and 2 s only ever encoded 'the machine is idle'. They now share a 60 s HarnessPatience constant. Nothing about what the test verifies changes: recovery must still occur, a genuine failure to NAK still fails, and a real hang is still bounded. Campaign N transport code is untouched. Local: 1000/1000 in 6 s under the gate filter. --- .../AcDream.Core.Net.Tests.csproj | 11 ----------- .../Transport/FakeAceTransportTests.cs | 18 ++++++++++++++++-- tests/AcDream.Core.Net.Tests/xunit.runner.json | 6 ------ 3 files changed, 16 insertions(+), 19 deletions(-) delete mode 100644 tests/AcDream.Core.Net.Tests/xunit.runner.json 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 -}