Skip to content

Commit

Permalink
Test everything
Browse files Browse the repository at this point in the history
  • Loading branch information
veqryn committed Nov 16, 2023
1 parent 20e571e commit 97d1841
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 10 deletions.
91 changes: 91 additions & 0 deletions ctx_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package slogcontext

import (
"bytes"
"context"
"log/slog"
"testing"
)

func TestCtx(t *testing.T) {
t.Parallel()

buf := &bytes.Buffer{}
h := slog.NewJSONHandler(buf, &slog.HandlerOptions{
AddSource: false,
Level: slog.LevelDebug,
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
// fmt.Printf("ReplaceAttr: key:%s valueKind:%s value:%s nilGroups:%t groups:%#+v\n", a.Key, a.Value.Kind().String(), a.Value.String(), groups == nil, groups)
if groups == nil && a.Key == slog.TimeKey {
return slog.Time(slog.TimeKey, defaultTime)
}
return a
},
})

ctx := ToCtx(context.Background(), slog.New(h))

ctx = With(ctx, "with1", "arg1", "with1", "arg2")
ctx = With(ctx, "with2", "arg1", "with2", "arg2")
With(ctx, "with3", "arg1", "with3", "arg2") // Ensure we aren't overwriting the parent context

WithGroup(ctx, "group0") // Ensure we aren't overwriting the parent context
ctx = WithGroup(ctx, "group1")
WithGroup(ctx, "group2") // Ensure we aren't overwriting the parent context

ctx = With(ctx, "with4", "arg1", "with4", "arg2")
ctx = With(ctx, "with5", "arg1", "with5", "arg2")
With(ctx, "with6", "arg1", "with6", "arg2") // Ensure we aren't overwriting the parent context

// Test with getting logger back out
l := Logger(ctx)
l.InfoContext(ctx, "main message", "main1", "arg1", "main1", "arg2")
expectedInfo := `{"time":"2023-09-29T13:00:59Z","level":"INFO","msg":"main message","with1":"arg1","with1":"arg2","with2":"arg1","with2":"arg2","group1":{"with4":"arg1","with4":"arg2","with5":"arg1","with5":"arg2","main1":"arg1","main1":"arg2"}}
`
if buf.String() != expectedInfo {
t.Errorf("Expected:\n%s\nGot:\n%s\n", expectedInfo, buf.String())
}

// Test with wrappers
buf.Reset()
Debug(ctx, "main message", "main1", "arg1", "main1", "arg2")
expectedDebug := `{"time":"2023-09-29T13:00:59Z","level":"DEBUG","msg":"main message","with1":"arg1","with1":"arg2","with2":"arg1","with2":"arg2","group1":{"with4":"arg1","with4":"arg2","with5":"arg1","with5":"arg2","main1":"arg1","main1":"arg2"}}
`
if buf.String() != expectedDebug {
t.Errorf("Expected:\n%s\nGot:\n%s\n", expectedDebug, buf.String())
}

buf.Reset()
Info(ctx, "main message", "main1", "arg1", "main1", "arg2")
if buf.String() != expectedInfo {
t.Errorf("Expected:\n%s\nGot:\n%s\n", expectedInfo, buf.String())
}

buf.Reset()
Warn(ctx, "main message", "main1", "arg1", "main1", "arg2")
expectedWarn := `{"time":"2023-09-29T13:00:59Z","level":"WARN","msg":"main message","with1":"arg1","with1":"arg2","with2":"arg1","with2":"arg2","group1":{"with4":"arg1","with4":"arg2","with5":"arg1","with5":"arg2","main1":"arg1","main1":"arg2"}}
`
if buf.String() != expectedWarn {
t.Errorf("Expected:\n%s\nGot:\n%s\n", expectedWarn, buf.String())
}

buf.Reset()
Error(ctx, "main message", "main1", "arg1", "main1", "arg2")
expectedError := `{"time":"2023-09-29T13:00:59Z","level":"ERROR","msg":"main message","with1":"arg1","with1":"arg2","with2":"arg1","with2":"arg2","group1":{"with4":"arg1","with4":"arg2","with5":"arg1","with5":"arg2","main1":"arg1","main1":"arg2"}}
`
if buf.String() != expectedError {
t.Errorf("Expected:\n%s\nGot:\n%s\n", expectedError, buf.String())
}

buf.Reset()
Log(ctx, slog.LevelWarn, "main message", "main1", "arg1", "main1", "arg2")
if buf.String() != expectedWarn {
t.Errorf("Expected:\n%s\nGot:\n%s\n", expectedWarn, buf.String())
}

buf.Reset()
LogAttrs(ctx, slog.LevelInfo, "main message", slog.String("main1", "arg1"), slog.String("main1", "arg2"))
if buf.String() != expectedInfo {
t.Errorf("Expected:\n%s\nGot:\n%s\n", expectedInfo, buf.String())
}
}
27 changes: 18 additions & 9 deletions handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,33 @@ func TestHandler(t *testing.T) {
ctx := context.Background()
ctx = Prepend(ctx, "prepend1", "arg1", "prepend1", "arg2")
ctx = Prepend(ctx, "prepend2", "arg1", "prepend2", "arg2")
Prepend(ctx, "prepend3", "arg1", "prepend3", "arg2") // Ensure we aren't overwriting the parent context
ctx = Append(ctx, "append1", "arg1", "append1", "arg2")
ctx = Append(ctx, "append2", "arg1", "append2", "arg2")
Append(ctx, "append3", "arg1", "append3", "arg2") // Ensure we aren't overwriting the parent context

log := slog.New(h)
l := slog.New(h)

log = log.With("with1", "arg1", "with1", "arg2")
log = log.WithGroup("group1")
log = log.With("with2", "arg1", "with2", "arg2")
l = l.With("with1", "arg1", "with1", "arg2")
l = l.WithGroup("group1")
l = l.With("with2", "arg1", "with2", "arg2")

log.InfoContext(ctx, "main message", "main1", "arg1", "main1", "arg2")
l.InfoContext(ctx, "main message", "main1", "arg1", "main1", "arg2")

t.Log(tester.String())
// time=2023-09-29T13:00:59.000Z level=INFO msg="main message" prepend1=arg1 prepend1=arg2 prepend2=arg1 prepend2=arg2 with1=arg1 with1=arg2 group1.with2=arg1 group1.with2=arg2 group1.main1=arg1 group1.main1=arg2 group1.append1=arg1 group1.append1=arg2 group1.append2=arg1 group1.append2=arg2
expectedText := `time=2023-09-29T13:00:59.000Z level=INFO msg="main message" prepend1=arg1 prepend1=arg2 prepend2=arg1 prepend2=arg2 with1=arg1 with1=arg2 group1.with2=arg1 group1.with2=arg2 group1.main1=arg1 group1.main1=arg2 group1.append1=arg1 group1.append1=arg2 group1.append2=arg1 group1.append2=arg2
`
if s := tester.String(); s != expectedText {
t.Errorf("Expected:\n%s\nGot:\n%s\n", expectedText, s)
}

b, err := tester.MarshalJSON()
if err != nil {
t.Fatal(err)
}
t.Log(string(b))
// {"time":"2023-09-29T13:00:59Z","level":"INFO","msg":"main message","prepend1":"arg1","prepend1":"arg2","prepend2":"arg1","prepend2":"arg2","with1":"arg1","with1":"arg2","group1":{"with2":"arg1","with2":"arg2","main1":"arg1","main1":"arg2","append1":"arg1","append1":"arg2","append2":"arg1","append2":"arg2"}}

expectedJSON := `{"time":"2023-09-29T13:00:59Z","level":"INFO","msg":"main message","prepend1":"arg1","prepend1":"arg2","prepend2":"arg1","prepend2":"arg2","with1":"arg1","with1":"arg2","group1":{"with2":"arg1","with2":"arg2","main1":"arg1","main1":"arg2","append1":"arg1","append1":"arg2","append2":"arg1","append2":"arg2"}}
`
if string(b) != expectedJSON {
t.Errorf("Expected:\n%s\nGot:\n%s\n", expectedText, string(b))
}
}
4 changes: 3 additions & 1 deletion helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import (
"time"
)

var defaultTime = time.Date(2023, 9, 29, 13, 0, 59, 0, time.UTC)

type testHandler struct {
Ctx context.Context
Record slog.Record
Expand All @@ -19,7 +21,7 @@ func (h *testHandler) Enabled(context.Context, slog.Level) bool {
func (h *testHandler) Handle(ctx context.Context, r slog.Record) error {
h.Ctx = ctx
h.Record = r
h.Record.Time = time.Date(2023, 9, 29, 13, 0, 59, 0, time.UTC)
h.Record.Time = defaultTime
return nil
}

Expand Down

0 comments on commit 97d1841

Please sign in to comment.