@@ -8,17 +8,17 @@ import (
8
8
"time"
9
9
10
10
"cdr.dev/slog"
11
- "cdr.dev/slog/sloggers/slogtest"
12
11
"github.com/coder/coder/v2/coderd/tracing"
13
12
)
14
13
15
14
func TestRequestLogger_WriteLog (t * testing.T ) {
16
15
t .Parallel ()
17
16
ctx := context .Background ()
18
17
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 ())
22
22
23
23
// Add custom fields
24
24
logCtx .WithFields (
@@ -28,24 +28,32 @@ func TestRequestLogger_WriteLog(t *testing.T) {
28
28
// Write log for 200 status
29
29
logCtx .WriteLog (ctx ,http .StatusOK )
30
30
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 )
36
41
}
37
42
38
43
// Attempt to write again (should be skipped).
39
- // If the error log entry gets written,
40
- // slogtest will fail the test.
41
44
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
+ }
42
49
}
43
50
44
51
func TestLoggerMiddleware (t * testing.T ) {
45
52
t .Parallel ()
46
53
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 )
49
57
50
58
// Create a test handler to simulate an HTTP request
51
59
testHandler := http .HandlerFunc (func (rw http.ResponseWriter ,r * http.Request ) {
@@ -54,7 +62,7 @@ func TestLoggerMiddleware(t *testing.T) {
54
62
})
55
63
56
64
// Wrap the test handler with the Logger middleware
57
- loggerMiddleware := Logger (testLogger )
65
+ loggerMiddleware := Logger (logger )
58
66
wrappedHandler := loggerMiddleware (testHandler )
59
67
60
68
// Create a test HTTP request
@@ -68,12 +76,21 @@ func TestLoggerMiddleware(t *testing.T) {
68
76
// Serve the request
69
77
wrappedHandler .ServeHTTP (sw ,req )
70
78
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 ))
78
81
}
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
79
90
}
91
+
92
+ func (s * fakeSink )LogEntry (_ context.Context ,e slog.SinkEntry ) {
93
+ s .entries = append (s .entries ,e )
94
+ }
95
+
96
+ func (* fakeSink )Sync () {}