Skip to content

Commit 02afb0a

Browse files
committed
refactored tests to use a fakesink to verify the written messages
1 parent e60d30f commit 02afb0a

File tree

1 file changed

+38
-21
lines changed

1 file changed

+38
-21
lines changed

coderd/httpmw/logger_internal_test.go

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ import (
88
"time"
99

1010
"cdr.dev/slog"
11-
"cdr.dev/slog/sloggers/slogtest"
1211
"github.com/coder/coder/v2/coderd/tracing"
1312
)
1413

1514
func TestRequestLogger_WriteLog(t *testing.T) {
1615
t.Parallel()
1716
ctx := context.Background()
1817

19-
testLogger := slogtest.Make(t, nil)
20-
21-
logCtx := NewRequestLogger(testLogger, "GET", time.Now())
18+
sink := &fakeSink{}
19+
logger := slog.Make(sink)
20+
logger = logger.Leveled(slog.LevelDebug)
21+
logCtx := NewRequestLogger(logger, "GET", time.Now())
2222

2323
// Add custom fields
2424
logCtx.WithFields(
@@ -28,24 +28,32 @@ func TestRequestLogger_WriteLog(t *testing.T) {
2828
// Write log for 200 status
2929
logCtx.WriteLog(ctx, http.StatusOK)
3030

31-
if logCtx != nil {
32-
requestCtxLog, ok := logCtx.(*RequestContextLogger)
33-
if ok && !requestCtxLog.written {
34-
t.Error("expected log to be written once")
35-
}
31+
if len(sink.entries) != 1 {
32+
t.Fatalf("expected 1 log entry, got %d", len(sink.entries))
33+
}
34+
35+
if sink.entries[0].Message != "GET" {
36+
t.Errorf("expected log message to be 'GET', got '%s'", sink.entries[0].Message)
37+
}
38+
39+
if sink.entries[0].Fields[0].Value != "custom_value" {
40+
t.Errorf("expected a custom_field with value custom_value, got '%s'", sink.entries[0].Fields[0].Value)
3641
}
3742

3843
// Attempt to write again (should be skipped).
39-
// If the error log entry gets written,
40-
// slogtest will fail the test.
4144
logCtx.WriteLog(ctx, http.StatusInternalServerError)
45+
46+
if len(sink.entries) != 1 {
47+
t.Fatalf("expected 1 log entry after second write, got %d", len(sink.entries))
48+
}
4249
}
4350

4451
func TestLoggerMiddleware(t *testing.T) {
4552
t.Parallel()
4653

47-
// Create a test logger
48-
testLogger := slogtest.Make(t, nil)
54+
sink := &fakeSink{}
55+
logger := slog.Make(sink)
56+
logger = logger.Leveled(slog.LevelDebug)
4957

5058
// Create a test handler to simulate an HTTP request
5159
testHandler := http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
@@ -54,7 +62,7 @@ func TestLoggerMiddleware(t *testing.T) {
5462
})
5563

5664
// Wrap the test handler with the Logger middleware
57-
loggerMiddleware := Logger(testLogger)
65+
loggerMiddleware := Logger(logger)
5866
wrappedHandler := loggerMiddleware(testHandler)
5967

6068
// Create a test HTTP request
@@ -68,12 +76,21 @@ func TestLoggerMiddleware(t *testing.T) {
6876
// Serve the request
6977
wrappedHandler.ServeHTTP(sw, req)
7078

71-
logCtx := RequestLoggerFromContext(context.Background())
72-
// Verify that the log was written
73-
if logCtx != nil {
74-
requestCtxLog, ok := logCtx.(*RequestContextLogger)
75-
if ok && !requestCtxLog.written {
76-
t.Error("expected log to be written once")
77-
}
79+
if len(sink.entries) != 1 {
80+
t.Fatalf("expected 1 log entry, got %d", len(sink.entries))
7881
}
82+
83+
if sink.entries[0].Message != "GET" {
84+
t.Errorf("expected log message to be 'GET', got '%s'", sink.entries[0].Message)
85+
}
86+
}
87+
88+
type fakeSink struct {
89+
entries []slog.SinkEntry
7990
}
91+
92+
func (s *fakeSink) LogEntry(_ context.Context, e slog.SinkEntry) {
93+
s.entries = append(s.entries, e)
94+
}
95+
96+
func (*fakeSink) Sync() {}

0 commit comments

Comments
 (0)