66 "database/sql"
77 "fmt"
88 "runtime"
9+ "strings"
910 "testing"
1011
1112 sdktrace "go.opentelemetry.io/otel/sdk/trace"
@@ -34,7 +35,7 @@ func TestMake(t *testing.T) {
3435 l .Error (ctx , "line1\n \n line2" , slog .F ("wowow" , "me\n you" ))
3536
3637 j := entryjson .Filter (b .String (), "ts" )
37- exp := fmt .Sprintf (`{"level":"ERROR","msg":"line1\n\nline2","caller":"%v:34 ","func":"cdr.dev/slog/v3/sloggers/slogjson_test.TestMake","logger_names":["named"],"trace":"%v","span":"%v","fields":{"wowow":"me\nyou"}}
38+ exp := fmt .Sprintf (`{"level":"ERROR","msg":"line1\n\nline2","caller":"%v:35 ","func":"cdr.dev/slog/v3/sloggers/slogjson_test.TestMake","logger_names":["named"],"trace":"%v","span":"%v","fields":{"wowow":"me\nyou"}}
3839` , slogjsonTestFile , span .SpanContext ().TraceID ().String (), span .SpanContext ().SpanID ().String ())
3940 assert .Equal (t , "entry" , exp , j )
4041}
@@ -60,7 +61,44 @@ func TestNoDriverValue(t *testing.T) {
6061 l .Error (bg , "error!" , slog .F ("inval" , invalidField ), slog .F ("val" , validField ), slog .F ("int" , validInt ))
6162
6263 j := entryjson .Filter (b .String (), "ts" )
63- exp := fmt .Sprintf (`{"level":"ERROR","msg":"error!","caller":"%v:60 ","func":"cdr.dev/slog/v3/sloggers/slogjson_test.TestNoDriverValue","logger_names":["named"],"fields":{"inval":null,"val":"cat","int":42}}
64+ exp := fmt .Sprintf (`{"level":"ERROR","msg":"error!","caller":"%v:61 ","func":"cdr.dev/slog/v3/sloggers/slogjson_test.TestNoDriverValue","logger_names":["named"],"fields":{"inval":null,"val":"cat","int":42}}
6465` , slogjsonTestFile )
6566 assert .Equal (t , "entry" , exp , j )
6667}
68+
69+ func TestContextErrors (t * testing.T ) {
70+ t .Parallel ()
71+
72+ t .Run ("DeadlineExceeded" , func (t * testing.T ) {
73+ t .Parallel ()
74+
75+ b := & bytes.Buffer {}
76+ l := slog .Make (slogjson .Sink (b ))
77+ l .Error (bg , "request failed" , slog .Error (context .DeadlineExceeded ))
78+
79+ j := entryjson .Filter (b .String (), "ts" )
80+ assert .True (t , "error contains deadline exceeded" , strings .Contains (j , `"error":"context deadline exceeded"` ))
81+ })
82+
83+ t .Run ("Canceled" , func (t * testing.T ) {
84+ t .Parallel ()
85+
86+ b := & bytes.Buffer {}
87+ l := slog .Make (slogjson .Sink (b ))
88+ l .Error (bg , "request failed" , slog .Error (context .Canceled ))
89+
90+ j := entryjson .Filter (b .String (), "ts" )
91+ assert .True (t , "error contains context canceled" , strings .Contains (j , `"error":"context canceled"` ))
92+ })
93+
94+ t .Run ("WrappedDeadlineExceeded" , func (t * testing.T ) {
95+ t .Parallel ()
96+
97+ b := & bytes.Buffer {}
98+ l := slog .Make (slogjson .Sink (b ))
99+ l .Error (bg , "request failed" , slog .Error (fmt .Errorf ("dial: %w" , context .DeadlineExceeded )))
100+
101+ j := entryjson .Filter (b .String (), "ts" )
102+ assert .True (t , "error contains dial: context deadline exceeded" , strings .Contains (j , `"error":"dial: context deadline exceeded"` ))
103+ })
104+ }
0 commit comments