treewide: fix t.Fatal calls in non-test goroutines
Functions that abruptly terminate a test, such as the
Fatal, Fatalf, FailNow, and Skip{,f,Now} methods of *testing.T,
must be called from the test goroutine itself, as they call
runtime.Goexit internally to stop the calling goroutine, not the
test.
Change-Id: I4926c802bfbb11aeec6e130b0f4fb2407879cbd4
Reviewed-on: https://review.monogon.dev/c/monogon/+/2972
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/cloud/bmaas/bmdb/sessions_test.go b/cloud/bmaas/bmdb/sessions_test.go
index d3c80bd..9806ddb 100644
--- a/cloud/bmaas/bmdb/sessions_test.go
+++ b/cloud/bmaas/bmdb/sessions_test.go
@@ -582,11 +582,13 @@
}
worker := func(workerID int) {
- ctxS, ctxC := context.WithCancel(ctx)
- defer ctxC()
+ ctxS, ctxSC := context.WithCancel(ctx)
+ defer ctxSC()
session, err := conn.StartSession(ctxS)
if err != nil {
- t.Fatalf("Starting session failed: %v", err)
+ t.Errorf("Starting session failed: %v", err)
+ ctxC()
+ return
}
for {
err := workOnce(ctxS, workerID, session)
@@ -597,7 +599,9 @@
if errors.Is(err, ctxS.Err()) {
return
}
- t.Fatalf("worker failed: %v", err)
+ t.Errorf("worker failed: %v", err)
+ ctxC()
+ return
}
}
}
@@ -608,7 +612,11 @@
// Wait for at least three workers to be alive.
for i := 0; i < 3; i++ {
- workStarted <- struct{}{}
+ select {
+ case workStarted <- struct{}{}:
+ case <-ctx.Done():
+ t.FailNow()
+ }
}
// Allow all workers to continue running from now on.