github.com/xmidt-org/webpa-common@v1.11.9/logging/logger_test.go (about) 1 package logging 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/go-kit/kit/log" 8 "github.com/go-kit/kit/log/level" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/mock" 11 ) 12 13 func TestCallerKey(t *testing.T) { 14 assert := assert.New(t) 15 assert.Equal(callerKey, CallerKey()) 16 } 17 18 func TestMessageKey(t *testing.T) { 19 assert := assert.New(t) 20 assert.Equal(messageKey, MessageKey()) 21 } 22 23 func TestErrorKey(t *testing.T) { 24 assert := assert.New(t) 25 assert.Equal(errorKey, ErrorKey()) 26 } 27 28 func TestTimestampKey(t *testing.T) { 29 assert := assert.New(t) 30 assert.Equal(timestampKey, TimestampKey()) 31 } 32 33 func TestDefaultLogger(t *testing.T) { 34 assert := assert.New(t) 35 assert.Equal(defaultLogger, DefaultLogger()) 36 } 37 38 func TestNew(t *testing.T) { 39 assert := assert.New(t) 40 41 assert.NotNil(New(nil)) 42 assert.NotNil(New(new(Options))) 43 } 44 45 func testNewFilter(t *testing.T, o *Options) { 46 var ( 47 assert = assert.New(t) 48 next = new(mockLogger) 49 ) 50 51 switch strings.ToUpper(o.level()) { 52 case "DEBUG": 53 next.On("Log", mock.MatchedBy(matchLevel(level.DebugValue()))). 54 Run(expectKeys(assert, MessageKey())). 55 Return(nil). 56 Once() 57 fallthrough 58 59 case "INFO": 60 next.On("Log", mock.MatchedBy(matchLevel(level.InfoValue()))). 61 Run(expectKeys(assert, MessageKey())). 62 Return(nil). 63 Once() 64 fallthrough 65 66 case "WARN": 67 next.On("Log", mock.MatchedBy(matchLevel(level.WarnValue()))). 68 Run(expectKeys(assert, MessageKey())). 69 Return(nil). 70 Once() 71 fallthrough 72 73 default: 74 next.On("Log", mock.MatchedBy(matchLevel(level.ErrorValue()))). 75 Run(expectKeys(assert, MessageKey())). 76 Return(nil). 77 Once() 78 } 79 80 filter := NewFilter(next, o) 81 filter.Log(level.Key(), level.DebugValue(), MessageKey(), "debug message") 82 filter.Log(level.Key(), level.InfoValue(), MessageKey(), "info message") 83 filter.Log(level.Key(), level.WarnValue(), MessageKey(), "warn message") 84 filter.Log(level.Key(), level.ErrorValue(), MessageKey(), "error message") 85 86 next.AssertExpectations(t) 87 } 88 89 func TestNewFilter(t *testing.T) { 90 t.Run("Nil", func(t *testing.T) { testNewFilter(t, nil) }) 91 t.Run("Default", func(t *testing.T) { testNewFilter(t, new(Options)) }) 92 t.Run("Error", func(t *testing.T) { testNewFilter(t, &Options{Level: "error"}) }) 93 t.Run("Warn", func(t *testing.T) { testNewFilter(t, &Options{Level: "warn"}) }) 94 t.Run("Info", func(t *testing.T) { testNewFilter(t, &Options{Level: "info"}) }) 95 t.Run("Debug", func(t *testing.T) { testNewFilter(t, &Options{Level: "debug"}) }) 96 } 97 98 func testDefaultCallerSimple(t *testing.T) { 99 var ( 100 assert = assert.New(t) 101 next = new(mockLogger) 102 ) 103 104 next.On("Log", mock.MatchedBy(func([]interface{}) bool { return true })). 105 Run(expectKeys(assert, CallerKey(), MessageKey())). 106 Return(expectKeys(assert, MessageKey())). 107 Once() 108 109 decorated := DefaultCaller(next) 110 decorated.Log(MessageKey(), "message") 111 112 next.AssertExpectations(t) 113 } 114 115 func testDefaultCallerKeyvals(t *testing.T) { 116 var ( 117 assert = assert.New(t) 118 next = new(mockLogger) 119 ) 120 121 next.On("Log", mock.MatchedBy(func([]interface{}) bool { return true })). 122 Run(expectKeys(assert, CallerKey(), MessageKey())). 123 Return(expectKeys(assert, MessageKey(), "foo")). 124 Once() 125 126 decorated := DefaultCaller(next, "foo", "bar") 127 decorated.Log(MessageKey(), "message") 128 129 next.AssertExpectations(t) 130 } 131 132 func TestDefaultCaller(t *testing.T) { 133 t.Run("Simple", testDefaultCallerSimple) 134 t.Run("Keyvals", testDefaultCallerKeyvals) 135 } 136 137 func testLevelledLogger(t *testing.T, factory func(log.Logger, ...interface{}) log.Logger, expected level.Value) { 138 var ( 139 assert = assert.New(t) 140 next = new(mockLogger) 141 ) 142 143 next.On("Log", mock.MatchedBy(matchLevel(expected))). 144 Run(expectKeys(assert, level.Key(), CallerKey(), MessageKey())). 145 Return(nil). 146 Once() 147 148 decorated := factory(next) 149 decorated.Log(level.Key(), expected, MessageKey(), "message") 150 151 next.AssertExpectations(t) 152 } 153 154 func testLevelledLoggerKeyvals(t *testing.T, factory func(log.Logger, ...interface{}) log.Logger, expected level.Value) { 155 var ( 156 assert = assert.New(t) 157 next = new(mockLogger) 158 ) 159 160 next.On("Log", mock.MatchedBy(matchLevel(expected))). 161 Run(expectKeys(assert, level.Key(), "foo", CallerKey(), MessageKey())). 162 Return(nil). 163 Once() 164 165 decorated := factory(next, "foo", "bar") 166 decorated.Log(MessageKey(), "message") 167 168 next.AssertExpectations(t) 169 } 170 171 func TestError(t *testing.T) { 172 t.Run("Simple", func(t *testing.T) { testLevelledLogger(t, Error, level.ErrorValue()) }) 173 t.Run("Keyvals", func(t *testing.T) { testLevelledLoggerKeyvals(t, Error, level.ErrorValue()) }) 174 } 175 176 func TestInfo(t *testing.T) { 177 t.Run("Simple", func(t *testing.T) { testLevelledLogger(t, Info, level.InfoValue()) }) 178 t.Run("Keyvals", func(t *testing.T) { testLevelledLoggerKeyvals(t, Info, level.InfoValue()) }) 179 } 180 181 func TestWarn(t *testing.T) { 182 t.Run("Simple", func(t *testing.T) { testLevelledLogger(t, Warn, level.WarnValue()) }) 183 t.Run("Keyvals", func(t *testing.T) { testLevelledLoggerKeyvals(t, Warn, level.WarnValue()) }) 184 } 185 186 func TestDebug(t *testing.T) { 187 t.Run("Simple", func(t *testing.T) { testLevelledLogger(t, Debug, level.DebugValue()) }) 188 t.Run("Keyvals", func(t *testing.T) { testLevelledLoggerKeyvals(t, Debug, level.DebugValue()) }) 189 }