/
log_test.go
128 lines (112 loc) · 2.69 KB
/
log_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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")
}
}