| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- package log
- import (
- "bytes"
- "os"
- "os/exec"
- "sync"
- "testing"
- "github.com/stretchr/testify/assert"
- )
- func test(l *Logger, t *testing.T) {
- b := new(bytes.Buffer)
- l.SetOutput(b)
- l.DisableColor()
- l.SetLevel(WARN)
- l.Print("print")
- l.Printf("print%s", "f")
- l.Debug("debug")
- l.Debugf("debug%s", "f")
- l.Info("info")
- l.Infof("info%s", "f")
- l.Warn("warn")
- l.Warnf("warn%s", "f")
- l.Error("error")
- l.Errorf("error%s", "f")
- assert.Contains(t, b.String(), "print")
- assert.Contains(t, b.String(), "printf")
- assert.NotContains(t, b.String(), "debug")
- assert.NotContains(t, b.String(), "debugf")
- assert.NotContains(t, b.String(), "info")
- assert.NotContains(t, b.String(), "infof")
- assert.Contains(t, b.String(), `"level":"WARN","prefix":"`+l.prefix+`"`)
- assert.Contains(t, b.String(), `"message":"warn"`)
- assert.Contains(t, b.String(), `"level":"ERROR","prefix":"`+l.prefix+`"`)
- assert.Contains(t, b.String(), `"message":"errorf"`)
- }
- func TestLog(t *testing.T) {
- l := New("test")
- test(l, t)
- }
- func TestGlobal(t *testing.T) {
- test(global, t)
- }
- func TestLogConcurrent(t *testing.T) {
- var wg sync.WaitGroup
- for i := 0; i < 2; i++ {
- wg.Add(1)
- go func() {
- TestLog(t)
- wg.Done()
- }()
- }
- wg.Wait()
- }
- func TestFatal(t *testing.T) {
- l := New("test")
- switch os.Getenv("TEST_LOGGER_FATAL") {
- case "fatal":
- l.Fatal("fatal")
- return
- case "fatalf":
- l.Fatalf("fatal-%s", "f")
- return
- }
- loggerFatalTest(t, "fatal", "fatal")
- loggerFatalTest(t, "fatalf", "fatal-f")
- }
- func loggerFatalTest(t *testing.T, env string, contains string) {
- buf := new(bytes.Buffer)
- cmd := exec.Command(os.Args[0], "-test.run=TestFatal")
- cmd.Env = append(os.Environ(), "TEST_LOGGER_FATAL="+env)
- cmd.Stdout = buf
- cmd.Stderr = buf
- err := cmd.Run()
- if e, ok := err.(*exec.ExitError); ok && !e.Success() {
- assert.Contains(t, buf.String(), contains)
- return
- }
- t.Fatalf("process ran with err %v, want exit status 1", err)
- }
- func TestNoFormat(t *testing.T) {
- }
- func TestFormat(t *testing.T) {
- l := New("test")
- l.SetHeader("${level} | ${prefix}")
- b := new(bytes.Buffer)
- l.SetOutput(b)
- l.Info("info")
- assert.Equal(t, "INFO | test info\n", b.String())
- }
- func TestJSON(t *testing.T) {
- l := New("test")
- b := new(bytes.Buffer)
- l.SetOutput(b)
- l.SetLevel(DEBUG)
- l.Debugj(JSON{"name": "value"})
- assert.Contains(t, b.String(), `"name":"value"`)
- }
- func TestStringWithQuotes(t *testing.T) {
- l := New("test")
- b := new(bytes.Buffer)
- l.SetOutput(b)
- l.SetLevel(DEBUG)
- l.Debugf("Content-Type: %q", "")
- assert.Contains(t, b.String(), `"message":"Content-Type: \"\""`)
- }
- func BenchmarkLog(b *testing.B) {
- l := New("test")
- l.SetOutput(new(bytes.Buffer))
- for i := 0; i < b.N; i++ {
- l.Infof("Info=%s, Debug=%s", "info", "debug")
- }
- }
|