forked from sneak/simplelog
Reproduces issue #3 — JSONHandler.Handle() calling log.Println() causes a deadlock when slog.SetDefault redirects log output back through slog. This test hangs/fails on main and should pass once #4 is merged.
34 lines
871 B
Go
34 lines
871 B
Go
package simplelog
|
|
|
|
import (
|
|
"log/slog"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// TestJSONHandlerDeadlock verifies that JSONHandler.Handle does not deadlock
|
|
// when the default slog handler routes log.Println back through slog.
|
|
// On the unfixed code this test will hang (deadlock); with the fix it completes.
|
|
func TestJSONHandlerDeadlock(t *testing.T) {
|
|
handler := NewJSONHandler()
|
|
|
|
// Set our handler as the default so log.Println routes through slog
|
|
logger := slog.New(handler)
|
|
slog.SetDefault(logger)
|
|
|
|
done := make(chan struct{})
|
|
go func() {
|
|
// This call deadlocks on unfixed code because Handle() calls
|
|
// log.Println() which re-enters slog → Handle() → log.Println() …
|
|
slog.Info("test message")
|
|
close(done)
|
|
}()
|
|
|
|
select {
|
|
case <-done:
|
|
// success
|
|
case <-time.After(5 * time.Second):
|
|
t.Fatal("JSONHandler.Handle deadlocked: timed out after 5 seconds")
|
|
}
|
|
}
|