OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / github.com / sirupsen / logrus / hook_test.go
1 package logrus
2
3 import (
4         "sync"
5         "testing"
6
7         "github.com/stretchr/testify/assert"
8 )
9
10 type TestHook struct {
11         Fired bool
12 }
13
14 func (hook *TestHook) Fire(entry *Entry) error {
15         hook.Fired = true
16         return nil
17 }
18
19 func (hook *TestHook) Levels() []Level {
20         return []Level{
21                 DebugLevel,
22                 InfoLevel,
23                 WarnLevel,
24                 ErrorLevel,
25                 FatalLevel,
26                 PanicLevel,
27         }
28 }
29
30 func TestHookFires(t *testing.T) {
31         hook := new(TestHook)
32
33         LogAndAssertJSON(t, func(log *Logger) {
34                 log.Hooks.Add(hook)
35                 assert.Equal(t, hook.Fired, false)
36
37                 log.Print("test")
38         }, func(fields Fields) {
39                 assert.Equal(t, hook.Fired, true)
40         })
41 }
42
43 type ModifyHook struct {
44 }
45
46 func (hook *ModifyHook) Fire(entry *Entry) error {
47         entry.Data["wow"] = "whale"
48         return nil
49 }
50
51 func (hook *ModifyHook) Levels() []Level {
52         return []Level{
53                 DebugLevel,
54                 InfoLevel,
55                 WarnLevel,
56                 ErrorLevel,
57                 FatalLevel,
58                 PanicLevel,
59         }
60 }
61
62 func TestHookCanModifyEntry(t *testing.T) {
63         hook := new(ModifyHook)
64
65         LogAndAssertJSON(t, func(log *Logger) {
66                 log.Hooks.Add(hook)
67                 log.WithField("wow", "elephant").Print("test")
68         }, func(fields Fields) {
69                 assert.Equal(t, fields["wow"], "whale")
70         })
71 }
72
73 func TestCanFireMultipleHooks(t *testing.T) {
74         hook1 := new(ModifyHook)
75         hook2 := new(TestHook)
76
77         LogAndAssertJSON(t, func(log *Logger) {
78                 log.Hooks.Add(hook1)
79                 log.Hooks.Add(hook2)
80
81                 log.WithField("wow", "elephant").Print("test")
82         }, func(fields Fields) {
83                 assert.Equal(t, fields["wow"], "whale")
84                 assert.Equal(t, hook2.Fired, true)
85         })
86 }
87
88 type ErrorHook struct {
89         Fired bool
90 }
91
92 func (hook *ErrorHook) Fire(entry *Entry) error {
93         hook.Fired = true
94         return nil
95 }
96
97 func (hook *ErrorHook) Levels() []Level {
98         return []Level{
99                 ErrorLevel,
100         }
101 }
102
103 func TestErrorHookShouldntFireOnInfo(t *testing.T) {
104         hook := new(ErrorHook)
105
106         LogAndAssertJSON(t, func(log *Logger) {
107                 log.Hooks.Add(hook)
108                 log.Info("test")
109         }, func(fields Fields) {
110                 assert.Equal(t, hook.Fired, false)
111         })
112 }
113
114 func TestErrorHookShouldFireOnError(t *testing.T) {
115         hook := new(ErrorHook)
116
117         LogAndAssertJSON(t, func(log *Logger) {
118                 log.Hooks.Add(hook)
119                 log.Error("test")
120         }, func(fields Fields) {
121                 assert.Equal(t, hook.Fired, true)
122         })
123 }
124
125 func TestAddHookRace(t *testing.T) {
126         var wg sync.WaitGroup
127         wg.Add(2)
128         hook := new(ErrorHook)
129         LogAndAssertJSON(t, func(log *Logger) {
130                 go func() {
131                         defer wg.Done()
132                         log.AddHook(hook)
133                 }()
134                 go func() {
135                         defer wg.Done()
136                         log.Error("test")
137                 }()
138                 wg.Wait()
139         }, func(fields Fields) {
140                 // the line may have been logged
141                 // before the hook was added, so we can't
142                 // actually assert on the hook
143         })
144 }