1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package zapcore_test
22
23 import (
24 "fmt"
25 "testing"
26
27 "github.com/stretchr/testify/assert"
28 "github.com/stretchr/testify/require"
29 "go.uber.org/zap"
30
31
32 . "go.uber.org/zap/zapcore"
33 "go.uber.org/zap/zaptest/observer"
34 )
35
36 func TestIncreaseLevel(t *testing.T) {
37 tests := []struct {
38 coreLevel Level
39 increaseLevel Level
40 wantErr bool
41 with []Field
42 }{
43 {
44 coreLevel: InfoLevel,
45 increaseLevel: DebugLevel,
46 wantErr: true,
47 },
48 {
49 coreLevel: InfoLevel,
50 increaseLevel: InfoLevel,
51 },
52 {
53 coreLevel: InfoLevel,
54 increaseLevel: ErrorLevel,
55 },
56 {
57 coreLevel: InfoLevel,
58 increaseLevel: ErrorLevel,
59 with: []Field{zap.String("k", "v")},
60 },
61 {
62 coreLevel: ErrorLevel,
63 increaseLevel: DebugLevel,
64 wantErr: true,
65 },
66 {
67 coreLevel: ErrorLevel,
68 increaseLevel: InfoLevel,
69 wantErr: true,
70 },
71 {
72 coreLevel: ErrorLevel,
73 increaseLevel: WarnLevel,
74 wantErr: true,
75 },
76 {
77 coreLevel: ErrorLevel,
78 increaseLevel: PanicLevel,
79 },
80 }
81
82 for _, tt := range tests {
83 msg := fmt.Sprintf("increase %v to %v", tt.coreLevel, tt.increaseLevel)
84 t.Run(msg, func(t *testing.T) {
85 logger, logs := observer.New(tt.coreLevel)
86
87
88 require.Equal(t, tt.coreLevel, LevelOf(logger), "Original logger has the wrong level")
89
90 filteredLogger, err := NewIncreaseLevelCore(logger, tt.increaseLevel)
91 if tt.wantErr {
92 assert.ErrorContains(t, err, "invalid increase level")
93 return
94 }
95
96 if len(tt.with) > 0 {
97 filteredLogger = filteredLogger.With(tt.with)
98 }
99
100 require.NoError(t, err)
101
102 t.Run("LevelOf", func(t *testing.T) {
103 assert.Equal(t, tt.increaseLevel, LevelOf(filteredLogger), "Filtered logger has the wrong level")
104 })
105
106 for l := DebugLevel; l <= FatalLevel; l++ {
107 enabled := filteredLogger.Enabled(l)
108 entry := Entry{Level: l}
109 ce := filteredLogger.Check(entry, nil)
110 ce.Write()
111 entries := logs.TakeAll()
112
113 if l >= tt.increaseLevel {
114 assert.True(t, enabled, "expect %v to be enabled", l)
115 assert.NotNil(t, ce, "expect non-nil Check")
116 assert.NotEmpty(t, entries, "Expect log to be written")
117 } else {
118 assert.False(t, enabled, "expect %v to be disabled", l)
119 assert.Nil(t, ce, "expect nil Check")
120 assert.Empty(t, entries, "No logs should have been written")
121 }
122
123
124 require.NoError(t, filteredLogger.Write(entry, nil), "Write failed")
125 require.NoError(t, filteredLogger.Sync(), "Sync failed")
126 assert.NotEmpty(t, logs.TakeAll(), "Write should always log")
127 }
128 })
129 }
130 }
131
View as plain text