/
logger_test.go
125 lines (99 loc) · 3.66 KB
/
logger_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
package sklog_test
import (
"bytes"
"errors"
"testing"
"github.com/go-kit/kit/log"
"github.com/piotrkowalczuk/sklog"
"github.com/stretchr/testify/assert"
)
func testLevel(t *testing.T, scenarios ...func(*testing.T, *bytes.Buffer, log.Logger)) {
b := bytes.NewBuffer(nil)
l := log.NewJSONLogger(b)
for _, scenario := range scenarios {
scenario(t, b, l)
b.Reset()
}
}
func TestSetTimestampFunc(t *testing.T) {
testLevel(t, testSetTimestampFunc)
}
func testSetTimestampFunc(t *testing.T, b *bytes.Buffer, l log.Logger) {
fn := func() string { return "fake-timestamp" }
sklog.SetTimestampFunc(fn)
sklog.Info(l, "TEST")
assert.Contains(t, b.String(), `"msg":"TEST"`)
assert.Contains(t, b.String(), `"timestamp":"`+fn()+`"`)
}
func TestInfo(t *testing.T) {
testLevel(t, testInfoWithOnlyMessage, testInfoWithMessageAndTag)
}
func testInfoWithOnlyMessage(t *testing.T, b *bytes.Buffer, l log.Logger) {
sklog.Info(l, "TEST")
assert.Contains(t, b.String(), `"level":"info"`)
assert.Contains(t, b.String(), `"msg":"TEST"`)
assert.Contains(t, b.String(), `"timestamp":`)
}
func testInfoWithMessageAndTag(t *testing.T, b *bytes.Buffer, l log.Logger) {
sklog.Info(l, "TEST", "tag1", "value1")
assert.Contains(t, b.String(), `"level":"info"`)
assert.Contains(t, b.String(), `"msg":"TEST"`)
assert.Contains(t, b.String(), `"timestamp":`)
assert.Contains(t, b.String(), `"tag1":"value1"`)
}
func TestDebug(t *testing.T) {
testLevel(t, testDebugWithOnlyMessage, testDebugWithMessageAndTag)
}
func testDebugWithOnlyMessage(t *testing.T, b *bytes.Buffer, l log.Logger) {
sklog.Debug(l, "TEST")
assert.Contains(t, b.String(), `"level":"debug"`)
assert.Contains(t, b.String(), `"msg":"TEST"`)
assert.Contains(t, b.String(), `"timestamp":`)
}
func testDebugWithMessageAndTag(t *testing.T, b *bytes.Buffer, l log.Logger) {
sklog.Debug(l, "TEST", "tag1", "value1")
assert.Contains(t, b.String(), `"level":"debug"`)
assert.Contains(t, b.String(), `"msg":"TEST"`)
assert.Contains(t, b.String(), `"timestamp":`)
assert.Contains(t, b.String(), `"tag1":"value1"`)
}
func TestError(t *testing.T) {
testLevel(t, testErrorWithOnlyMessage, testErrorWithMessageAndTag)
}
func testErrorWithOnlyMessage(t *testing.T, b *bytes.Buffer, l log.Logger) {
err := errors.New("sklog_test: example error")
sklog.Error(l, err)
assert.Contains(t, b.String(), `"level":"error"`)
assert.Contains(t, b.String(), `"msg":"`+err.Error()+`"`)
assert.Contains(t, b.String(), `"timestamp":`)
}
func testErrorWithMessageAndTag(t *testing.T, b *bytes.Buffer, l log.Logger) {
err := errors.New("sklog_test: example error")
sklog.Error(l, err, "tag1", "value1")
assert.Contains(t, b.String(), `"level":"error"`)
assert.Contains(t, b.String(), `"msg":"`+err.Error()+`"`)
assert.Contains(t, b.String(), `"timestamp":`)
assert.Contains(t, b.String(), `"tag1":"value1"`)
}
func TestPanic(t *testing.T) {
testLevel(t, testPanicWithOnlyMessage, testPanicWithMessageAndTag)
}
func testPanicWithOnlyMessage(t *testing.T, b *bytes.Buffer, l log.Logger) {
err := errors.New("sklog_test: example fatal error")
assert.Panics(t, func() {
sklog.Panic(l, err)
})
assert.Contains(t, b.String(), `"level":"panic"`)
assert.Contains(t, b.String(), `"msg":"`+err.Error()+`"`)
assert.Contains(t, b.String(), `"timestamp":`)
}
func testPanicWithMessageAndTag(t *testing.T, b *bytes.Buffer, l log.Logger) {
err := errors.New("sklog_test: example fatal error")
assert.Panics(t, func() {
sklog.Panic(l, err, "tag1", "value1")
})
assert.Contains(t, b.String(), `"level":"panic"`)
assert.Contains(t, b.String(), `"msg":"`+err.Error()+`"`)
assert.Contains(t, b.String(), `"timestamp":`)
assert.Contains(t, b.String(), `"tag1":"value1"`)
}