gopkg.in/essentialkaos/ek.v3@v3.5.1/log/log_test.go (about) 1 package log 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2009-2016 Essential Kaos // 6 // Essential Kaos Open Source License <http://essentialkaos.com/ekol?en> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "io/ioutil" 12 "os" 13 "strings" 14 "testing" 15 "time" 16 17 . "pkg.re/check.v1" 18 19 "pkg.re/essentialkaos/ek.v3/fsutil" 20 ) 21 22 // ////////////////////////////////////////////////////////////////////////////////// // 23 24 type LogSuite struct { 25 TempDir string 26 } 27 28 // ////////////////////////////////////////////////////////////////////////////////// // 29 30 func Test(t *testing.T) { TestingT(t) } 31 32 // ////////////////////////////////////////////////////////////////////////////////// // 33 34 var _ = Suite(&LogSuite{}) 35 36 // ////////////////////////////////////////////////////////////////////////////////// // 37 38 func (ls *LogSuite) SetUpSuite(c *C) { 39 ls.TempDir = c.MkDir() 40 } 41 42 func (ls *LogSuite) SetUpTest(c *C) { 43 Global = &Logger{ 44 PrefixWarn: true, 45 PrefixError: true, 46 PrefixCrit: true, 47 48 level: INFO, 49 } 50 } 51 52 // ////////////////////////////////////////////////////////////////////////////////// // 53 54 func (ls *LogSuite) TestErrors(c *C) { 55 var l *Logger 56 57 l.MinLevel(DEBUG) 58 59 err := l.Flush() 60 61 c.Assert(err, NotNil) 62 c.Assert(err.Error(), Equals, "Logger is nil") 63 64 err = l.Reopen() 65 66 c.Assert(err, NotNil) 67 c.Assert(err.Error(), Equals, "Logger is nil") 68 69 _, err = l.Print(DEBUG, "test") 70 71 c.Assert(err, NotNil) 72 c.Assert(err.Error(), Equals, "Logger is nil") 73 74 _, err = l.Debug("test") 75 76 c.Assert(err, NotNil) 77 c.Assert(err.Error(), Equals, "Logger is nil") 78 79 _, err = l.Info("test") 80 81 c.Assert(err, NotNil) 82 c.Assert(err.Error(), Equals, "Logger is nil") 83 84 _, err = l.Warn("test") 85 86 c.Assert(err, NotNil) 87 c.Assert(err.Error(), Equals, "Logger is nil") 88 89 _, err = l.Error("test") 90 91 c.Assert(err, NotNil) 92 c.Assert(err.Error(), Equals, "Logger is nil") 93 94 _, err = l.Crit("test") 95 96 c.Assert(err, NotNil) 97 c.Assert(err.Error(), Equals, "Logger is nil") 98 99 _, err = l.Aux("test") 100 101 c.Assert(err, NotNil) 102 c.Assert(err.Error(), Equals, "Logger is nil") 103 104 _, err = New("/_not_exist_", 0644) 105 106 c.Assert(err, NotNil) 107 c.Assert(err.Error(), Equals, "open /_not_exist_: permission denied") 108 109 err = Reopen() 110 111 c.Assert(err, NotNil) 112 c.Assert(err.Error(), Equals, "Output file is not set") 113 } 114 115 func (ls *LogSuite) TestLevel(c *C) { 116 l := &Logger{level: WARN} 117 118 c.Assert(l.MinLevel(-1), IsNil) 119 c.Assert(l.MinLevel(6), IsNil) 120 c.Assert(l.MinLevel("debug"), IsNil) 121 c.Assert(l.MinLevel("info"), IsNil) 122 c.Assert(l.MinLevel("warn"), IsNil) 123 c.Assert(l.MinLevel("warning"), IsNil) 124 c.Assert(l.MinLevel("error"), IsNil) 125 c.Assert(l.MinLevel("crit"), IsNil) 126 c.Assert(l.MinLevel("critical"), IsNil) 127 c.Assert(l.MinLevel(int8(1)), IsNil) 128 c.Assert(l.MinLevel(int16(1)), IsNil) 129 c.Assert(l.MinLevel(int32(1)), IsNil) 130 c.Assert(l.MinLevel(int64(1)), IsNil) 131 c.Assert(l.MinLevel(uint(1)), IsNil) 132 c.Assert(l.MinLevel(uint8(1)), IsNil) 133 c.Assert(l.MinLevel(uint16(1)), IsNil) 134 c.Assert(l.MinLevel(uint32(1)), IsNil) 135 c.Assert(l.MinLevel(uint64(1)), IsNil) 136 c.Assert(l.MinLevel(float32(1)), IsNil) 137 c.Assert(l.MinLevel(float64(1)), IsNil) 138 139 c.Assert(l.MinLevel("abcd"), NotNil) 140 c.Assert(l.MinLevel(time.Now()), NotNil) 141 142 l.MinLevel("crit") 143 144 _, err := l.Print(ERROR, "error") 145 146 c.Assert(err, IsNil) 147 } 148 149 func (ls *LogSuite) TestFlush(c *C) { 150 l := &Logger{} 151 152 err := l.Flush() 153 154 c.Assert(err, IsNil) 155 } 156 157 func (ls *LogSuite) TestReopenAndSet(c *C) { 158 l, err := New(ls.TempDir+"/set-test.log", 0644) 159 160 c.Assert(err, IsNil) 161 162 err = l.Set(ls.TempDir+"/set-test-2.log", 0644) 163 164 c.Assert(err, IsNil) 165 166 err = l.Reopen() 167 168 c.Assert(err, IsNil) 169 } 170 171 func (ls *LogSuite) TestStdOutput(c *C) { 172 var err error 173 174 l := &Logger{} 175 176 _, err = l.Print(INFO, "info") 177 178 c.Assert(err, IsNil) 179 180 _, err = l.Print(ERROR, "error") 181 182 c.Assert(err, IsNil) 183 } 184 185 func (ls *LogSuite) TestWithoutPrefixes(c *C) { 186 logfile := ls.TempDir + "/file1.log" 187 l, err := New(logfile, 0644) 188 189 l.MinLevel(DEBUG) 190 191 c.Assert(l, Not(IsNil)) 192 c.Assert(err, IsNil) 193 194 l.PrefixDebug = false 195 l.PrefixInfo = false 196 l.PrefixWarn = false 197 l.PrefixError = false 198 l.PrefixCrit = false 199 200 c.Assert(fsutil.GetPerm(logfile), Equals, os.FileMode(0644)) 201 202 l.Print(DEBUG, "Test debug %d", DEBUG) 203 l.Print(INFO, "Test info %d", INFO) 204 l.Print(WARN, "Test warn %d", WARN) 205 l.Print(ERROR, "Test error %d", ERROR) 206 l.Print(CRIT, "Test crit %d", CRIT) 207 208 l.Print(DEBUG, "Test debug") 209 l.Print(INFO, "Test info") 210 l.Print(WARN, "Test warn") 211 l.Print(ERROR, "Test error") 212 l.Print(CRIT, "Test crit") 213 214 l.Debug("Test debug %d\n", DEBUG) 215 l.Info("Test info %d\n", INFO) 216 l.Warn("Test warn %d\n", WARN) 217 l.Error("Test error %d\n", ERROR) 218 l.Crit("Test crit %d\n", CRIT) 219 220 l.Print(DEBUG, "") 221 222 data, err := ioutil.ReadFile(logfile) 223 224 c.Assert(len(data), Not(Equals), 0) 225 c.Assert(err, IsNil) 226 227 dataSlice := strings.Split(string(data[:]), "\n") 228 229 c.Assert(len(dataSlice), Equals, 17) 230 231 c.Assert(dataSlice[0][28:], Equals, "Test debug 0") 232 c.Assert(dataSlice[1][28:], Equals, "Test info 1") 233 c.Assert(dataSlice[2][28:], Equals, "Test warn 2") 234 c.Assert(dataSlice[3][28:], Equals, "Test error 3") 235 c.Assert(dataSlice[4][28:], Equals, "Test crit 4") 236 237 c.Assert(dataSlice[5][28:], Equals, "Test debug") 238 c.Assert(dataSlice[6][28:], Equals, "Test info") 239 c.Assert(dataSlice[7][28:], Equals, "Test warn") 240 c.Assert(dataSlice[8][28:], Equals, "Test error") 241 c.Assert(dataSlice[9][28:], Equals, "Test crit") 242 243 c.Assert(dataSlice[10][28:], Equals, "Test debug 0") 244 c.Assert(dataSlice[11][28:], Equals, "Test info 1") 245 c.Assert(dataSlice[12][28:], Equals, "Test warn 2") 246 c.Assert(dataSlice[13][28:], Equals, "Test error 3") 247 c.Assert(dataSlice[14][28:], Equals, "Test crit 4") 248 249 c.Assert(dataSlice[15][28:], Equals, "") 250 } 251 252 func (ls *LogSuite) TestWithPrefixes(c *C) { 253 logfile := ls.TempDir + "/file2.log" 254 err := Set(logfile, 0644) 255 256 MinLevel(DEBUG) 257 258 c.Assert(Global, Not(IsNil)) 259 c.Assert(err, IsNil) 260 261 Global.PrefixDebug = true 262 Global.PrefixInfo = true 263 Global.PrefixWarn = true 264 Global.PrefixError = true 265 Global.PrefixCrit = true 266 267 c.Assert(fsutil.GetPerm(logfile), Equals, os.FileMode(0644)) 268 269 Print(DEBUG, "Test debug %d", DEBUG) 270 Print(INFO, "Test info %d", INFO) 271 Print(WARN, "Test warn %d", WARN) 272 Print(ERROR, "Test error %d", ERROR) 273 Print(CRIT, "Test crit %d", CRIT) 274 Print(AUX, "Test aux %d", AUX) 275 276 Print(DEBUG, "Test debug") 277 Print(INFO, "Test info") 278 Print(WARN, "Test warn") 279 Print(ERROR, "Test error") 280 Print(CRIT, "Test crit") 281 Print(AUX, "Test aux") 282 283 Debug("Test debug %d", DEBUG) 284 Info("Test info %d", INFO) 285 Warn("Test warn %d", WARN) 286 Error("Test error %d", ERROR) 287 Crit("Test crit %d", CRIT) 288 Aux("Test aux %d", AUX) 289 290 data, err := ioutil.ReadFile(logfile) 291 292 c.Assert(len(data), Not(Equals), 0) 293 c.Assert(err, IsNil) 294 295 dataSlice := strings.Split(string(data[:]), "\n") 296 297 c.Assert(len(dataSlice), Equals, 19) 298 299 c.Assert(dataSlice[0][28:], Equals, "[DEBUG] Test debug 0") 300 c.Assert(dataSlice[1][28:], Equals, "[INFO] Test info 1") 301 c.Assert(dataSlice[2][28:], Equals, "[WARNING] Test warn 2") 302 c.Assert(dataSlice[3][28:], Equals, "[ERROR] Test error 3") 303 c.Assert(dataSlice[4][28:], Equals, "[CRITICAL] Test crit 4") 304 c.Assert(dataSlice[5][28:], Equals, "Test aux 99") 305 306 c.Assert(dataSlice[6][28:], Equals, "[DEBUG] Test debug") 307 c.Assert(dataSlice[7][28:], Equals, "[INFO] Test info") 308 c.Assert(dataSlice[8][28:], Equals, "[WARNING] Test warn") 309 c.Assert(dataSlice[9][28:], Equals, "[ERROR] Test error") 310 c.Assert(dataSlice[10][28:], Equals, "[CRITICAL] Test crit") 311 c.Assert(dataSlice[11][28:], Equals, "Test aux") 312 313 c.Assert(dataSlice[12][28:], Equals, "[DEBUG] Test debug 0") 314 c.Assert(dataSlice[13][28:], Equals, "[INFO] Test info 1") 315 c.Assert(dataSlice[14][28:], Equals, "[WARNING] Test warn 2") 316 c.Assert(dataSlice[15][28:], Equals, "[ERROR] Test error 3") 317 c.Assert(dataSlice[16][28:], Equals, "[CRITICAL] Test crit 4") 318 c.Assert(dataSlice[17][28:], Equals, "Test aux 99") 319 } 320 321 func (ls *LogSuite) TestBufIODaemon(c *C) { 322 logfile := ls.TempDir + "/file3.log" 323 err := Set(logfile, 0644) 324 325 MinLevel(DEBUG) 326 327 c.Assert(Global, Not(IsNil)) 328 c.Assert(err, IsNil) 329 330 Global.PrefixDebug = true 331 Global.PrefixInfo = true 332 Global.PrefixWarn = true 333 Global.PrefixError = true 334 Global.PrefixCrit = true 335 336 c.Assert(fsutil.GetPerm(logfile), Equals, os.FileMode(0644)) 337 338 EnableBufIO(250 * time.Millisecond) 339 340 Print(DEBUG, "Test debug %d", DEBUG) 341 Print(INFO, "Test info %d", INFO) 342 Print(WARN, "Test warn %d", WARN) 343 Print(ERROR, "Test error %d", ERROR) 344 Print(CRIT, "Test crit %d", CRIT) 345 Print(AUX, "Test aux %d", AUX) 346 347 Print(DEBUG, "Test debug") 348 Print(INFO, "Test info") 349 Print(WARN, "Test warn") 350 Print(ERROR, "Test error") 351 Print(CRIT, "Test crit") 352 Print(AUX, "Test aux") 353 354 Debug("Test debug %d", DEBUG) 355 Info("Test info %d", INFO) 356 Warn("Test warn %d", WARN) 357 Error("Test error %d", ERROR) 358 Crit("Test crit %d", CRIT) 359 Aux("Test aux %d", AUX) 360 361 c.Assert(fsutil.GetSize(logfile), Equals, int64(0)) 362 363 time.Sleep(2 * time.Second) 364 365 c.Assert(fsutil.GetSize(logfile), Not(Equals), int64(0)) 366 367 data, err := ioutil.ReadFile(logfile) 368 369 c.Assert(len(data), Not(Equals), 0) 370 c.Assert(err, IsNil) 371 372 dataSlice := strings.Split(string(data[:]), "\n") 373 374 c.Assert(len(dataSlice), Equals, 19) 375 376 c.Assert(dataSlice[0][28:], Equals, "[DEBUG] Test debug 0") 377 c.Assert(dataSlice[1][28:], Equals, "[INFO] Test info 1") 378 c.Assert(dataSlice[2][28:], Equals, "[WARNING] Test warn 2") 379 c.Assert(dataSlice[3][28:], Equals, "[ERROR] Test error 3") 380 c.Assert(dataSlice[4][28:], Equals, "[CRITICAL] Test crit 4") 381 c.Assert(dataSlice[5][28:], Equals, "Test aux 99") 382 383 c.Assert(dataSlice[6][28:], Equals, "[DEBUG] Test debug") 384 c.Assert(dataSlice[7][28:], Equals, "[INFO] Test info") 385 c.Assert(dataSlice[8][28:], Equals, "[WARNING] Test warn") 386 c.Assert(dataSlice[9][28:], Equals, "[ERROR] Test error") 387 c.Assert(dataSlice[10][28:], Equals, "[CRITICAL] Test crit") 388 c.Assert(dataSlice[11][28:], Equals, "Test aux") 389 390 c.Assert(dataSlice[12][28:], Equals, "[DEBUG] Test debug 0") 391 c.Assert(dataSlice[13][28:], Equals, "[INFO] Test info 1") 392 c.Assert(dataSlice[14][28:], Equals, "[WARNING] Test warn 2") 393 c.Assert(dataSlice[15][28:], Equals, "[ERROR] Test error 3") 394 c.Assert(dataSlice[16][28:], Equals, "[CRITICAL] Test crit 4") 395 c.Assert(dataSlice[17][28:], Equals, "Test aux 99") 396 } 397 398 func (ls *LogSuite) TestBufIO(c *C) { 399 logfile := ls.TempDir + "/file4.log" 400 err := Set(logfile, 0644) 401 402 c.Assert(Global, Not(IsNil)) 403 c.Assert(err, IsNil) 404 405 c.Assert(fsutil.GetPerm(logfile), Equals, os.FileMode(0644)) 406 407 EnableBufIO(time.Minute) 408 409 Aux("Test aux %d", AUX) 410 411 fileSize := fsutil.GetSize(logfile) 412 413 c.Assert(fileSize, Equals, int64(0)) 414 415 Reopen() 416 417 fileSize = fsutil.GetSize(logfile) 418 419 c.Assert(fileSize, Not(Equals), int64(0)) 420 421 Aux("Test aux %d", AUX) 422 423 c.Assert(fsutil.GetSize(logfile), Equals, fileSize) 424 425 Flush() 426 427 c.Assert(fsutil.GetSize(logfile), Not(Equals), fileSize) 428 }