-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Expand file tree
/
Copy pathfilehook_test.go
More file actions
131 lines (114 loc) · 3.27 KB
/
filehook_test.go
File metadata and controls
131 lines (114 loc) · 3.27 KB
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
package logging
import (
"os"
"strings"
"testing"
"github.com/sirupsen/logrus"
)
func TestFileHookLevels(t *testing.T) {
h := &fileHook{
path: "/dev/null",
formatter: &logrus.TextFormatter{},
}
got := h.Levels()
if len(got) != len(logrus.AllLevels) {
t.Errorf("Levels() returned %d levels, want %d", len(got), len(logrus.AllLevels))
}
for i, l := range logrus.AllLevels {
if got[i] != l {
t.Errorf("Levels()[%d] = %v, want %v", i, got[i], l)
}
}
}
func TestFileHookFire(t *testing.T) {
tmpFile, err := os.CreateTemp(t.TempDir(), "filehook-*.log")
if err != nil {
t.Fatalf("failed to create temp file: %v", err)
}
if err := tmpFile.Close(); err != nil {
t.Fatalf("failed to close temp file: %v", err)
}
h := &fileHook{
path: tmpFile.Name(),
formatter: &logrus.TextFormatter{DisableColors: true, DisableTimestamp: true},
}
entry := &logrus.Entry{
Logger: logrus.New(),
Level: logrus.InfoLevel,
Message: "hello from fire",
Data: logrus.Fields{},
}
if err := h.Fire(entry); err != nil {
t.Fatalf("Fire() returned error: %v", err)
}
content, err := os.ReadFile(tmpFile.Name())
if err != nil {
t.Fatalf("failed to read log file: %v", err)
}
if !strings.Contains(string(content), "hello from fire") {
t.Errorf("log file does not contain expected message, got: %q", string(content))
}
}
func TestFileHookFireAppends(t *testing.T) {
tmpFile, err := os.CreateTemp(t.TempDir(), "filehook-*.log")
if err != nil {
t.Fatalf("failed to create temp file: %v", err)
}
if err := tmpFile.Close(); err != nil {
t.Fatalf("failed to close temp file: %v", err)
}
h := &fileHook{
path: tmpFile.Name(),
formatter: &logrus.TextFormatter{DisableColors: true, DisableTimestamp: true},
}
for i, msg := range []string{"first message", "second message", "third message"} {
entry := &logrus.Entry{
Logger: logrus.New(),
Level: logrus.InfoLevel,
Message: msg,
Data: logrus.Fields{},
}
if err := h.Fire(entry); err != nil {
t.Fatalf("Fire() call %d returned error: %v", i, err)
}
}
content, err := os.ReadFile(tmpFile.Name())
if err != nil {
t.Fatalf("failed to read log file: %v", err)
}
s := string(content)
for _, msg := range []string{"first message", "second message", "third message"} {
if !strings.Contains(s, msg) {
t.Errorf("log file missing %q, got: %q", msg, s)
}
}
}
func TestFileHookIntegration(t *testing.T) {
tmpFile, err := os.CreateTemp(t.TempDir(), "filehook-*.log")
if err != nil {
t.Fatalf("failed to create temp file: %v", err)
}
if err := tmpFile.Close(); err != nil {
t.Fatalf("failed to close temp file: %v", err)
}
logger := logrus.New()
logger.Out = os.Stderr
logger.Level = logrus.DebugLevel
logger.Hooks.Add(&fileHook{
path: tmpFile.Name(),
formatter: &logrus.TextFormatter{DisableColors: true, DisableTimestamp: true},
})
logger.Info("integration info message")
logger.Warn("integration warn message")
content, err := os.ReadFile(tmpFile.Name())
if err != nil {
t.Fatalf("failed to read log file: %v", err)
}
s := string(content)
if !strings.Contains(s, "integration info message") {
t.Errorf("log file missing info message, got: %q", s)
}
if !strings.Contains(s, "integration warn message") {
t.Errorf("log file missing warn message, got: %q", s)
}
}