forked from gatewayd-io/gatewayd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
hclog_adapter_test.go
160 lines (140 loc) · 5.67 KB
/
hclog_adapter_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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package logging
import (
"bytes"
"context"
"testing"
"time"
"github.com/gatewayd-io/gatewayd/config"
"github.com/hashicorp/go-hclog"
"github.com/rs/zerolog"
"github.com/stretchr/testify/assert"
)
// TestNewHcLogAdapter tests the HcLogAdapter.
func TestNewHcLogAdapter(t *testing.T) {
out := &bytes.Buffer{}
logger := NewLogger(
context.Background(),
LoggerConfig{
Output: []config.LogOutput{config.Console},
Level: zerolog.TraceLevel,
TimeFormat: zerolog.TimeFormatUnix,
ConsoleTimeFormat: time.RFC3339,
NoColor: true,
ConsoleOut: out,
},
)
hcLogAdapter := NewHcLogAdapter(&logger, "test")
hcLogAdapter.SetLevel(hclog.Trace)
hcLogAdapter.Trace("This is a trace message")
hcLogAdapter.Debug("This is a debug message")
hcLogAdapter.Info("This is an info message")
hcLogAdapter.Warn("This is a warn message")
hcLogAdapter.Error("This is an error message")
hcLogAdapter.Log(hclog.Debug, "This is a log message")
hcLogAdapter.SetLevel(hclog.Warn)
hcLogAdapter.Trace("This is a trace message, but it should not be logged")
consoleOutput := out.String()
assert.Contains(t, consoleOutput, "TRC This is a trace message")
assert.Contains(t, consoleOutput, "DBG This is a debug message")
assert.Contains(t, consoleOutput, "INF This is an info message")
assert.Contains(t, consoleOutput, "WRN This is a warn message")
assert.Contains(t, consoleOutput, "ERR This is an error message")
assert.Contains(t, consoleOutput, "DBG This is a log message")
assert.NotContains(t, consoleOutput, "TRC This is a trace message, but it should not be logged")
}
// TestNewHcLogAdapter_LogLevel_Difference tests the HcLogAdapter when the
// logger and the hclog adapter have different log levels.
func TestNewHcLogAdapter_LogLevel_Difference(t *testing.T) {
out := &bytes.Buffer{}
logger := NewLogger(
context.Background(),
LoggerConfig{
Output: []config.LogOutput{config.Console},
ConsoleOut: out,
Level: zerolog.WarnLevel,
TimeFormat: zerolog.TimeFormatUnix,
NoColor: true,
},
)
// The logger is set to WarnLevel, but the hclog adapter is set to TraceLevel.
// This means that the hclog adapter will log everything, but the logger will
// only log WarnLevel and above.
hcLogAdapter := NewHcLogAdapter(&logger, "test")
hcLogAdapter.SetLevel(hclog.Trace)
hcLogAdapter.Trace("This is a trace message, but it should not be logged")
hcLogAdapter.Debug("This is a debug message, but it should not be logged")
hcLogAdapter.Info("This is an info message, but it should not be logged")
hcLogAdapter.Warn("This is a warn message")
hcLogAdapter.Error("This is an error message")
hcLogAdapter.Log(hclog.Debug, "This is a log message, but it should not be logged")
consoleOutput := out.String()
assert.NotContains(t, consoleOutput, "TRC This is a trace message, but it should not be logged")
assert.NotContains(t, consoleOutput, "DBG This is a debug message, but it should not be logged")
assert.NotContains(t, consoleOutput, "INF This is an info message, but it should not be logged")
assert.Contains(t, consoleOutput, "WRN This is a warn message")
assert.Contains(t, consoleOutput, "ERR This is an error message")
assert.NotContains(t, consoleOutput, "DBG This is a log message, but it should not be logged")
}
// TestNewHcLogAdapter_Log tests the HcLogAdapter.Log method.
func TestNewHcLogAdapter_Log(t *testing.T) {
out := &bytes.Buffer{}
logger := NewLogger(
context.Background(),
LoggerConfig{
Output: []config.LogOutput{config.Console},
ConsoleOut: out,
Level: zerolog.TraceLevel,
TimeFormat: zerolog.TimeFormatUnix,
NoColor: true,
},
)
hcLogAdapter := NewHcLogAdapter(&logger, "test")
hcLogAdapter.SetLevel(hclog.Trace)
hcLogAdapter.Log(hclog.Off, "This is a message")
hcLogAdapter.Log(hclog.NoLevel, "This is yet another message")
hcLogAdapter.Log(hclog.Trace, "This is a trace message")
hcLogAdapter.Log(hclog.Debug, "This is a debug message")
hcLogAdapter.Log(hclog.Info, "This is an info message")
hcLogAdapter.Log(hclog.Warn, "This is a warn message")
hcLogAdapter.Log(hclog.Error, "This is an error message")
consoleOutput := out.String()
assert.NotContains(t, consoleOutput, "This is a message")
assert.NotContains(t, consoleOutput, "This is yet another message")
assert.Contains(t, consoleOutput, "TRC This is a trace message")
assert.Contains(t, consoleOutput, "DBG This is a debug message")
assert.Contains(t, consoleOutput, "INF This is an info message")
assert.Contains(t, consoleOutput, "WRN This is a warn message")
assert.Contains(t, consoleOutput, "ERR This is an error message")
}
func TestNewHcLogAdapter_GetLevel(t *testing.T) {
levels := map[zerolog.Level]hclog.Level{
zerolog.NoLevel: hclog.NoLevel,
zerolog.TraceLevel: hclog.Trace,
zerolog.DebugLevel: hclog.Debug,
zerolog.InfoLevel: hclog.Info,
zerolog.WarnLevel: hclog.Warn,
zerolog.ErrorLevel: hclog.Error,
zerolog.FatalLevel: hclog.Error,
zerolog.PanicLevel: hclog.Error,
zerolog.Disabled: hclog.Off,
}
for zerologLevel, hclogLevel := range levels {
logger := NewLogger(
context.Background(),
LoggerConfig{
Output: []config.LogOutput{config.Console},
Level: zerologLevel,
TimeFormat: zerolog.TimeFormatUnix,
NoColor: true,
},
)
hcLogAdapter := NewHcLogAdapter(&logger, "test")
hcLogAdapter.SetLevel(hclogLevel)
hcLogAdapter.Log(hclogLevel, "This is a message", "key", "value")
assert.Equal(t, hclogLevel, hcLogAdapter.GetLevel())
hcLogAdapter.SetLevel(hclog.Debug)
assert.Equal(t, hclog.Debug, hcLogAdapter.GetLevel())
assert.NotEqual(t, zerolog.DebugLevel, logger.GetLevel(),
"The logger should not be affected by the hclog adapter's loggerLevel")
}
}