Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lima-vm
GitHub Repository: lima-vm/lima
Path: blob/master/pkg/logrusutil/logrusutil_test.go
2601 views
1
// SPDX-FileCopyrightText: Copyright The Lima Authors
2
// SPDX-License-Identifier: Apache-2.0
3
4
package logrusutil
5
6
import (
7
"bytes"
8
"testing"
9
"time"
10
11
"github.com/sirupsen/logrus"
12
"gotest.tools/v3/assert"
13
)
14
15
func TestPropagateJSON(t *testing.T) {
16
loggerWithoutTS := func(output *bytes.Buffer) *logrus.Logger {
17
logger := logrus.New()
18
logger.SetOutput(output)
19
logger.SetLevel(logrus.TraceLevel)
20
logger.SetFormatter(&logrus.TextFormatter{DisableTimestamp: true})
21
return logger
22
}
23
24
t.Run("trace level", func(t *testing.T) {
25
actual := &bytes.Buffer{}
26
logger := loggerWithoutTS(actual)
27
jsonLine := []byte(`{"level": "trace"}`)
28
29
PropagateJSON(logger, jsonLine, "header", time.Time{})
30
31
assert.Equal(t, "level=trace msg=header\n", actual.String())
32
})
33
t.Run("debug level", func(t *testing.T) {
34
actual := &bytes.Buffer{}
35
logger := loggerWithoutTS(actual)
36
jsonLine := []byte(`{"level": "debug"}`)
37
38
PropagateJSON(logger, jsonLine, "header", time.Time{})
39
40
assert.Equal(t, "level=debug msg=header\n", actual.String())
41
})
42
t.Run("info level", func(t *testing.T) {
43
actual := &bytes.Buffer{}
44
logger := loggerWithoutTS(actual)
45
jsonLine := []byte(`{"level": "info"}`)
46
47
PropagateJSON(logger, jsonLine, "header", time.Time{})
48
49
assert.Equal(t, "level=info msg=header\n", actual.String())
50
})
51
t.Run("error level", func(t *testing.T) {
52
actual := &bytes.Buffer{}
53
logger := loggerWithoutTS(actual)
54
jsonLine := []byte(`{"level": "error"}`)
55
56
PropagateJSON(logger, jsonLine, "header", time.Time{})
57
58
assert.Equal(t, "level=error msg=header\n", actual.String())
59
})
60
t.Run("warning level", func(t *testing.T) {
61
actual := &bytes.Buffer{}
62
logger := loggerWithoutTS(actual)
63
jsonLine := []byte(`{"level": "warning"}`)
64
65
PropagateJSON(logger, jsonLine, "header", time.Time{})
66
67
assert.Equal(t, "level=warning msg=header\n", actual.String())
68
})
69
t.Run("panic level", func(t *testing.T) {
70
actual := &bytes.Buffer{}
71
logger := loggerWithoutTS(actual)
72
jsonLine := []byte(`{"level": "panic"}`)
73
74
PropagateJSON(logger, jsonLine, "header", time.Time{})
75
76
assert.Equal(t, "level=error msg=header fields.level=panic\n", actual.String())
77
})
78
t.Run("fatal level", func(t *testing.T) {
79
actual := &bytes.Buffer{}
80
logger := loggerWithoutTS(actual)
81
jsonLine := []byte(`{"level": "fatal"}`)
82
83
PropagateJSON(logger, jsonLine, "header", time.Time{})
84
85
assert.Equal(t, "level=error msg=header fields.level=fatal\n", actual.String())
86
})
87
t.Run("SetLevel", func(t *testing.T) {
88
actual := &bytes.Buffer{}
89
logger := loggerWithoutTS(actual)
90
logger.SetLevel(logrus.ErrorLevel)
91
jsonLine := []byte(`{"level": "warning"}`)
92
93
PropagateJSON(logger, jsonLine, "header", time.Time{})
94
95
assert.Equal(t, "", actual.String())
96
})
97
t.Run("extra fields", func(t *testing.T) {
98
actual := &bytes.Buffer{}
99
logger := loggerWithoutTS(actual)
100
jsonLine := []byte(`{"level": "warning", "error": "oops", "extra": "field"}`)
101
102
PropagateJSON(logger, jsonLine, "header", time.Time{})
103
104
assert.Equal(t, "level=warning msg=header error=oops extra=field\n", actual.String())
105
})
106
t.Run("timestamp", func(t *testing.T) {
107
actual := &bytes.Buffer{}
108
logger := loggerWithoutTS(actual)
109
logger.SetFormatter(&logrus.TextFormatter{DisableTimestamp: false})
110
jsonLine := []byte(`{"level": "warning", "time": "2024-03-06T00:20:53-08:00"}`)
111
112
PropagateJSON(logger, jsonLine, "header", time.Time{})
113
114
assert.Equal(t, "time=\"2024-03-06T00:20:53-08:00\" level=warning msg=header\n", actual.String())
115
})
116
t.Run("empty json line", func(t *testing.T) {
117
actual := &bytes.Buffer{}
118
logger := loggerWithoutTS(actual)
119
jsonLine := []byte{}
120
121
PropagateJSON(logger, jsonLine, "header", time.Time{})
122
123
assert.Equal(t, "", actual.String())
124
})
125
t.Run("unmarshal failed", func(t *testing.T) {
126
actual := &bytes.Buffer{}
127
logger := loggerWithoutTS(actual)
128
jsonLine := []byte(`"`)
129
130
PropagateJSON(logger, jsonLine, "header", time.Time{})
131
132
assert.Equal(t, `level=info msg="header\""
133
`, actual.String())
134
})
135
t.Run("begin time after time in jsonLine", func(t *testing.T) {
136
actual := &bytes.Buffer{}
137
logger := loggerWithoutTS(actual)
138
jsonLine := []byte(`{"level": "info", "time": "2023-12-01T00:00:00.0000+00:00"}`)
139
begin := time.Date(2023, time.December, 15, 0, 0, 0, 0, time.UTC)
140
141
PropagateJSON(logger, jsonLine, "header", begin)
142
143
assert.Equal(t, "", actual.String())
144
})
145
t.Run("parse level failed", func(t *testing.T) {
146
actual := &bytes.Buffer{}
147
logger := loggerWithoutTS(actual)
148
jsonLine := []byte(`{"level": "info", "level": "unknown level"}`)
149
150
PropagateJSON(logger, jsonLine, "header", time.Time{})
151
152
assert.Equal(t, `level=info msg="header{\"level\": \"info\", \"level\": \"unknown level\"}"
153
`, actual.String())
154
})
155
}
156
157