test(historian): justify/tighten the shutdown watch window; single read of RemoveCallCount per poll

This commit is contained in:
Joseph Doherty
2026-08-17 05:39:52 -04:00
parent 120e885b31
commit 68461fbfb6
@@ -609,12 +609,22 @@ public sealed class ContinuousHistorizationRecorderTests : TestKit
// the queued count moving off 2. Either fires the moment the unfixed recorder books the failure and
// truncates, so a regression fails in milliseconds rather than after a fixed sleep; only the passing
// case pays the full window.
//
// 1s is the window, and it is already generous headroom rather than a guess: everything it waits on
// is prompt on this fixture — the cancellation of the writer's `Task.Delay(Timeout.Infinite, ct)` is
// essentially synchronous (and `writer.Cancelled` above has already fired), the fold that would
// truncate runs immediately behind it, and the recorder's own cadence here is a 20ms drain interval
// with a 20-50ms backoff. The unfixed recorder trips this in ~150ms including startup, so the
// remaining ~6x is CI-load slack, not mechanism.
var watch = Stopwatch.StartNew();
while (watch.Elapsed < TimeSpan.FromSeconds(2))
while (watch.Elapsed < TimeSpan.FromSeconds(1))
{
// Read once per iteration: the condition and its failure message must report the SAME
// observation, or a red run names a count that is not the one that tripped.
int removeCalls = outbox.RemoveCallCount;
Assert.True(
outbox.RemoveCallCount == 0,
$"the cancelled pass acked: RemoveAsync ran {outbox.RemoveCallCount}x, truncating the queue");
removeCalls == 0,
$"the cancelled pass acked: RemoveAsync ran {removeCalls}x, truncating the queue");
int queued = await outbox.CountAsync(default);
Assert.True(queued == 2, $"the cancelled pass changed the queue depth: expected 2, saw {queued}");
await Task.Delay(25);