mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-07-17 11:28:58 +00:00
ktesting: fix potential log panic
If the goroutine happens to log after the test has already terminated, testing.T.Log panics. We must ensure that the goroutine has stopped before allowing the test to terminate.
This commit is contained in:
@@ -48,11 +48,17 @@ func withTimeout(ctx context.Context, tb TB, timeout time.Duration, timeoutCause
|
||||
cancelCtx, cancel := context.WithCancelCause(ctx)
|
||||
after := time.NewTimer(timeout)
|
||||
stopCtx, stop := context.WithCancel(ctx) // Only used internally, doesn't need a cause.
|
||||
done := make(chan struct{})
|
||||
tb.Cleanup(func() {
|
||||
cancel(cleanupErr(tb.Name()))
|
||||
stop()
|
||||
// Wait for goroutine termination. This is important because
|
||||
// otherwise the goroutine might log through tb *after* the
|
||||
// test has already finished, which causes a panic.
|
||||
<-done
|
||||
})
|
||||
go func() {
|
||||
defer close(done)
|
||||
select {
|
||||
case <-stopCtx.Done():
|
||||
after.Stop()
|
||||
|
||||
Reference in New Issue
Block a user