-
Notifications
You must be signed in to change notification settings - Fork 0
/
context_test.go
94 lines (78 loc) · 2.42 KB
/
context_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package clog
import (
"context"
"testing"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"go.uber.org/zap/zaptest/observer"
)
func TestContextLogging(t *testing.T) {
levels := map[zapcore.Level]func(context.Context, string, ...zapcore.Field){
zap.DPanicLevel: DPanic,
zap.FatalLevel: Fatal,
zap.PanicLevel: Panic,
zap.DebugLevel: Debug,
zap.ErrorLevel: Error,
zap.InfoLevel: Info,
zap.WarnLevel: Warn,
}
fstr := zap.String("f-string", "value")
fint := zap.Int("f-int", 1234)
const (
msgNoFields = "log message - no fields"
msgWithFields = "log message - with fields"
)
root := context.Background()
if Logger(root) != zap.L() {
t.Error("default logger should be the global logger (zap.L)")
}
for lev, fun := range levels {
lev, fun := lev, fun
t.Run(lev.String(), func(t *testing.T) {
core, logs := observer.New(zap.DebugLevel)
logger := zap.New(core)
ctx := WithLogger(root, logger)
var (
wantWithoutFields = 3
wantWithFields = 3
)
switch lev {
case zap.DPanicLevel, zap.FatalLevel, zap.PanicLevel:
wantWithoutFields = 2
wantWithFields = 2
default:
fun(ctx, msgNoFields)
fun(ctx, msgWithFields, fstr, fint)
}
wantTotal := wantWithoutFields + wantWithoutFields
// Without fields
check := Check(ctx, lev, msgNoFields)
check.Should(check.Entry, zapcore.WriteThenNoop).Write()
// With fields
check = Check(ctx, lev, msgWithFields)
check.Should(check.Entry, zapcore.WriteThenNoop).Write(fstr, fint)
// With no extra fields
with := With(ctx)
check = Check(with, lev, msgNoFields)
check.Should(check.Entry, zapcore.WriteThenNoop).Write()
// With extra fields
with = With(ctx, fstr, fint)
check = Check(with, lev, msgWithFields)
check.Should(check.Entry, zapcore.WriteThenNoop).Write()
for _, l := range logs.All() {
t.Log(l)
}
if got, want := logs.Len(), wantTotal; got != want {
t.Fatalf("received %d log messages; want %d", got, want)
}
noFields := logs.FilterMessage(msgNoFields)
if got, want := noFields.Len(), wantWithoutFields; got != want {
t.Errorf("expected %d messages with message %q; got %d", got, msgNoFields, want)
}
withFields := logs.FilterMessage(msgWithFields).FilterField(fstr).FilterField(fint)
if got, want := withFields.Len(), wantWithFields; got != want {
t.Errorf("expected %d messages with message %q; got %d", got, msgWithFields, want)
}
})
}
}