@@ -14,17 +14,40 @@ import (
1414
1515var buf bytes.Buffer
1616
17- func NewSlogServer () http.Handler {
17+ func NewSlogServer (logger * slog. Logger ) http.Handler {
1818 mux := http .NewServeMux ()
1919 mux .HandleFunc ("/" , Handler )
20- handler := slog .NewJSONHandler (& buf , nil )
21- logger := slog .New (handler )
2220 mw := flowtracker .NewMiddleware (flowtracker .WithExporter (& SlogExporter {logger : logger }))
2321 return mw (mux )
2422}
2523
2624func TestSlogExporter_OK (t * testing.T ) {
27- server := NewSlogServer ()
25+ handler := slog .NewJSONHandler (& buf , nil )
26+ logger := slog .New (handler )
27+ server := NewSlogServer (logger )
28+
29+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
30+ rr := httptest .NewRecorder ()
31+
32+ server .ServeHTTP (rr , req )
33+
34+ time .Sleep (500 * time .Millisecond )
35+
36+ output := buf .String ()
37+ var logEntry map [string ]interface {}
38+ if err := json .Unmarshal ([]byte (output ), & logEntry ); err != nil {
39+ t .Fatalf ("Failed to unmarshal log output: %v" , err )
40+ }
41+ now := time .Now ()
42+ if duration , err := time .Parse (time .RFC3339Nano , logEntry ["time" ].(string )); err != nil {
43+ t .Fatalf ("Failed to unmarshal time in logEntry: %v" , err )
44+ } else if now .Sub (duration ).Milliseconds () < 0 {
45+ t .Fatalf ("Invalid time in logEntry" )
46+ }
47+ }
48+
49+ func TestSlogExporter_OK_DefaultLogger (t * testing.T ) {
50+ server := NewSlogServer (nil )
2851
2952 req := httptest .NewRequest (http .MethodGet , "/" , nil )
3053 rr := httptest .NewRecorder ()
0 commit comments