mesh-knowledge tests: set the local zone once before any goroutine, not under a running bus server (race found by the repository check on #237)

inZone wrote time.Local while the bus test's nats server read it from a
goroutine that outlives its test; the race detector the repository check
now runs failed TestAReviewOwedOutlivesARestartAndItsLastTryIsSaid.
This commit is contained in:
jochen
2026-10-12 13:25:09 +02:00
parent 2051d8b80b
commit ca3c3e6dfd
2 changed files with 11 additions and 5 deletions
@@ -40,6 +40,9 @@ func TestMain(m *testing.M) {
serve(k, os.Getenv("MESH_KNOWLEDGE_STATUS"))
os.Exit(0)
}
// Every test runs in a zone that is not UTC, so a time said locally is proven to be, wherever the tests run. It
// is set once, before any goroutine starts: a test that set it while a bus test's server read it raced.
time.Local = testZone
code := m.Run()
stopPostgres()
os.Exit(code)
@@ -155,13 +155,16 @@ func TestProposedAgainAfterTheLastTryClearsTheNotice(t *testing.T) {
})
}
// inZone sets the local zone to one that is not UTC for one test, so a time said locally is proven to be, wherever
// the test runs.
// testZone is the local zone every test runs in, set once by TestMain: not UTC.
var testZone = time.FixedZone("CEST", 2*60*60)
// inZone says the test needs the local zone not to be UTC; TestMain set it before any goroutine started. Setting it
// here, under a running bus server's goroutines, was a data race the race detector failed.
func inZone(t *testing.T) {
t.Helper()
was := time.Local
time.Local = time.FixedZone("CEST", 2*60*60)
t.Cleanup(func() { time.Local = was })
if time.Local != testZone {
t.Fatal("the local zone is not the tests' own: TestMain sets it")
}
}
// novox/hq issue 497: a clear the operator's channel refused keeps its notice as told, and is sent again at the next