code.gitea.io/gitea@v1.19.3/modules/log/writer_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package log 5 6 import ( 7 "fmt" 8 "strings" 9 "testing" 10 "time" 11 12 "github.com/stretchr/testify/assert" 13 ) 14 15 type CallbackWriteCloser struct { 16 callback func([]byte, bool) 17 } 18 19 func (c CallbackWriteCloser) Write(p []byte) (int, error) { 20 c.callback(p, false) 21 return len(p), nil 22 } 23 24 func (c CallbackWriteCloser) Close() error { 25 c.callback(nil, true) 26 return nil 27 } 28 29 func TestBaseLogger(t *testing.T) { 30 var written []byte 31 var closed bool 32 33 c := CallbackWriteCloser{ 34 callback: func(p []byte, close bool) { 35 written = p 36 closed = close 37 }, 38 } 39 prefix := "TestPrefix " 40 b := WriterLogger{ 41 out: c, 42 Level: INFO, 43 Flags: LstdFlags | LUTC, 44 Prefix: prefix, 45 } 46 location, _ := time.LoadLocation("EST") 47 48 date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location) 49 50 dateString := date.UTC().Format("2006/01/02 15:04:05") 51 52 event := Event{ 53 level: INFO, 54 msg: "TEST MSG", 55 caller: "CALLER", 56 filename: "FULL/FILENAME", 57 line: 1, 58 time: date, 59 } 60 61 assert.Equal(t, INFO, b.GetLevel()) 62 63 expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) 64 b.LogEvent(&event) 65 assert.Equal(t, expected, string(written)) 66 assert.False(t, closed) 67 written = written[:0] 68 69 event.level = DEBUG 70 expected = "" 71 b.LogEvent(&event) 72 assert.Equal(t, expected, string(written)) 73 assert.False(t, closed) 74 75 event.level = TRACE 76 expected = "" 77 b.LogEvent(&event) 78 assert.Equal(t, expected, string(written)) 79 assert.False(t, closed) 80 81 event.level = WARN 82 expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) 83 b.LogEvent(&event) 84 assert.Equal(t, expected, string(written)) 85 assert.False(t, closed) 86 written = written[:0] 87 88 event.level = ERROR 89 expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) 90 b.LogEvent(&event) 91 assert.Equal(t, expected, string(written)) 92 assert.False(t, closed) 93 written = written[:0] 94 95 event.level = CRITICAL 96 expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg) 97 b.LogEvent(&event) 98 assert.Equal(t, expected, string(written)) 99 assert.False(t, closed) 100 written = written[:0] 101 102 b.Close() 103 assert.True(t, closed) 104 } 105 106 func TestBaseLoggerDated(t *testing.T) { 107 var written []byte 108 var closed bool 109 110 c := CallbackWriteCloser{ 111 callback: func(p []byte, close bool) { 112 written = p 113 closed = close 114 }, 115 } 116 prefix := "" 117 b := WriterLogger{ 118 out: c, 119 Level: WARN, 120 Flags: Ldate | Ltime | Lmicroseconds | Lshortfile | Llevel, 121 Prefix: prefix, 122 } 123 124 location, _ := time.LoadLocation("EST") 125 126 date := time.Date(2019, time.January, 13, 22, 3, 30, 115, location) 127 128 dateString := date.Format("2006/01/02 15:04:05.000000") 129 130 event := Event{ 131 level: WARN, 132 msg: "TEST MESSAGE TEST\n", 133 caller: "CALLER", 134 filename: "FULL/FILENAME", 135 line: 1, 136 time: date, 137 } 138 139 assert.Equal(t, WARN, b.GetLevel()) 140 141 expected := fmt.Sprintf("%s%s %s:%d [%s] %s", prefix, dateString, "FILENAME", event.line, strings.ToUpper(event.level.String()), event.msg) 142 b.LogEvent(&event) 143 assert.Equal(t, expected, string(written)) 144 assert.False(t, closed) 145 written = written[:0] 146 147 event.level = INFO 148 expected = "" 149 b.LogEvent(&event) 150 assert.Equal(t, expected, string(written)) 151 assert.False(t, closed) 152 written = written[:0] 153 154 event.level = ERROR 155 expected = fmt.Sprintf("%s%s %s:%d [%s] %s", prefix, dateString, "FILENAME", event.line, strings.ToUpper(event.level.String()), event.msg) 156 b.LogEvent(&event) 157 assert.Equal(t, expected, string(written)) 158 assert.False(t, closed) 159 written = written[:0] 160 161 event.level = DEBUG 162 expected = "" 163 b.LogEvent(&event) 164 assert.Equal(t, expected, string(written)) 165 assert.False(t, closed) 166 written = written[:0] 167 168 event.level = CRITICAL 169 expected = fmt.Sprintf("%s%s %s:%d [%s] %s", prefix, dateString, "FILENAME", event.line, strings.ToUpper(event.level.String()), event.msg) 170 b.LogEvent(&event) 171 assert.Equal(t, expected, string(written)) 172 assert.False(t, closed) 173 written = written[:0] 174 175 event.level = TRACE 176 expected = "" 177 b.LogEvent(&event) 178 assert.Equal(t, expected, string(written)) 179 assert.False(t, closed) 180 written = written[:0] 181 182 b.Close() 183 assert.True(t, closed) 184 } 185 186 func TestBaseLoggerMultiLineNoFlagsRegexp(t *testing.T) { 187 var written []byte 188 var closed bool 189 190 c := CallbackWriteCloser{ 191 callback: func(p []byte, close bool) { 192 written = p 193 closed = close 194 }, 195 } 196 prefix := "" 197 b := WriterLogger{ 198 Level: DEBUG, 199 StacktraceLevel: ERROR, 200 Flags: -1, 201 Prefix: prefix, 202 Expression: "FILENAME", 203 } 204 b.NewWriterLogger(c) 205 206 location, _ := time.LoadLocation("EST") 207 208 date := time.Date(2019, time.January, 13, 22, 3, 30, 115, location) 209 210 event := Event{ 211 level: DEBUG, 212 msg: "TEST\nMESSAGE\nTEST", 213 caller: "CALLER", 214 filename: "FULL/FILENAME", 215 line: 1, 216 time: date, 217 } 218 219 assert.Equal(t, DEBUG, b.GetLevel()) 220 221 expected := "TEST\n\tMESSAGE\n\tTEST\n" 222 b.LogEvent(&event) 223 assert.Equal(t, expected, string(written)) 224 assert.False(t, closed) 225 written = written[:0] 226 227 event.filename = "ELSEWHERE" 228 229 b.LogEvent(&event) 230 assert.Equal(t, "", string(written)) 231 assert.False(t, closed) 232 written = written[:0] 233 234 event.caller = "FILENAME" 235 b.LogEvent(&event) 236 assert.Equal(t, expected, string(written)) 237 assert.False(t, closed) 238 written = written[:0] 239 240 event = Event{ 241 level: DEBUG, 242 msg: "TEST\nFILENAME\nTEST", 243 caller: "CALLER", 244 filename: "FULL/ELSEWHERE", 245 line: 1, 246 time: date, 247 } 248 expected = "TEST\n\tFILENAME\n\tTEST\n" 249 b.LogEvent(&event) 250 assert.Equal(t, expected, string(written)) 251 assert.False(t, closed) 252 written = written[:0] 253 } 254 255 func TestBrokenRegexp(t *testing.T) { 256 var closed bool 257 258 c := CallbackWriteCloser{ 259 callback: func(p []byte, close bool) { 260 closed = close 261 }, 262 } 263 264 b := WriterLogger{ 265 Level: DEBUG, 266 StacktraceLevel: ERROR, 267 Flags: -1, 268 Prefix: prefix, 269 Expression: "\\", 270 } 271 b.NewWriterLogger(c) 272 assert.Empty(t, b.regexp) 273 b.Close() 274 assert.True(t, closed) 275 }