From 8a2d153817d97a7fccc64fa683df6d8259fb1a52 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Thu, 26 Feb 2026 08:44:18 +0100 Subject: [PATCH] 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. --- test/utils/ktesting/contexthelper.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/utils/ktesting/contexthelper.go b/test/utils/ktesting/contexthelper.go index 6347211e0a7..b6f6263a4a8 100644 --- a/test/utils/ktesting/contexthelper.go +++ b/test/utils/ktesting/contexthelper.go @@ -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()