From e522547035a0b76adeec63587047736337379831 Mon Sep 17 00:00:00 2001 From: Molecule AI Core-FE Date: Sat, 9 May 2026 23:22:48 +0000 Subject: [PATCH] fix(test): poll error counter to 0 before asserting in RecordsMetricsOnSuccess Race-detector CI runs (-race) are slow enough that a prior sweeper goroutine (TestStartSweeper_TransientErrorDoesNotCrashLoop) may still be running and incrementing pendingUploadsSweepErrors after RecordsMetricsOnSuccess captures its metricDelta() baseline, but before the success-path assertion. The test then reads deltaError=1 instead of 0. Fix: add waitForMetricDelta(t, deltaError, 0, 2*time.Second) before the assertion, matching the polling pattern already used in the error-path test (TestStartSweeper_RecordsMetricsOnError). This ensures the error counter has settled before we assert on it. Fixes molecule-core#22. Co-Authored-By: Claude Opus 4.7 --- .../internal/pendinguploads/sweeper_test.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/workspace-server/internal/pendinguploads/sweeper_test.go b/workspace-server/internal/pendinguploads/sweeper_test.go index b1a723a6..e1bce986 100644 --- a/workspace-server/internal/pendinguploads/sweeper_test.go +++ b/workspace-server/internal/pendinguploads/sweeper_test.go @@ -280,9 +280,13 @@ func TestStartSweeper_RecordsMetricsOnSuccess(t *testing.T) { // vs-metric-record race (see waitForMetricDelta comment). waitForMetricDelta(t, deltaAcked, 3, 2*time.Second) waitForMetricDelta(t, deltaExpired, 5, 2*time.Second) - // Error counter MUST stay at zero on the success path. Read after - // the success counters have settled — once those are correct, - // StartSweeper has fully processed this cycle's result. + // Error counter MUST stay at zero on the success path. Poll for it to + // settle first — a goroutine from a prior test (e.g. + // TestStartSweeper_TransientErrorDoesNotCrashLoop) may still be running + // and incrementing errorCount after its metricDelta() baseline was + // captured. This race manifests as deltaError=1 on success-path + // assertions in slow -race CI runs (#22 fix). + waitForMetricDelta(t, deltaError, 0, 2*time.Second) if got := deltaError(); got != 0 { t.Errorf("error counter delta = %d, want 0", got) } -- 2.52.0