...
1 package test
2
3 import (
4 "math/rand"
5 "sync"
6 "testing"
7 "time"
8
9 "github.com/sirupsen/logrus"
10 "github.com/stretchr/testify/assert"
11 )
12
13 func TestAllHooks(t *testing.T) {
14 assert := assert.New(t)
15
16 logger, hook := NewNullLogger()
17 assert.Nil(hook.LastEntry())
18 assert.Equal(0, len(hook.Entries))
19
20 logger.Error("Hello error")
21 assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level)
22 assert.Equal("Hello error", hook.LastEntry().Message)
23 assert.Equal(1, len(hook.Entries))
24
25 logger.Warn("Hello warning")
26 assert.Equal(logrus.WarnLevel, hook.LastEntry().Level)
27 assert.Equal("Hello warning", hook.LastEntry().Message)
28 assert.Equal(2, len(hook.Entries))
29
30 hook.Reset()
31 assert.Nil(hook.LastEntry())
32 assert.Equal(0, len(hook.Entries))
33
34 hook = NewGlobal()
35
36 logrus.Error("Hello error")
37 assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level)
38 assert.Equal("Hello error", hook.LastEntry().Message)
39 assert.Equal(1, len(hook.Entries))
40 }
41
42 func TestLoggingWithHooksRace(t *testing.T) {
43
44 rand.Seed(time.Now().Unix())
45 unlocker := rand.Int() % 100
46
47 assert := assert.New(t)
48 logger, hook := NewNullLogger()
49
50 var wgOne, wgAll sync.WaitGroup
51 wgOne.Add(1)
52 wgAll.Add(100)
53
54 for i := 0; i < 100; i++ {
55 go func(i int) {
56 logger.Info("info")
57 wgAll.Done()
58 if i == unlocker {
59 wgOne.Done()
60 }
61 }(i)
62 }
63
64 wgOne.Wait()
65
66 assert.Equal(logrus.InfoLevel, hook.LastEntry().Level)
67 assert.Equal("info", hook.LastEntry().Message)
68
69 wgAll.Wait()
70
71 entries := hook.AllEntries()
72 assert.Equal(100, len(entries))
73 }
74
75 func TestFatalWithAlternateExit(t *testing.T) {
76 assert := assert.New(t)
77
78 logger, hook := NewNullLogger()
79 logger.ExitFunc = func(code int) {}
80
81 logger.Fatal("something went very wrong")
82 assert.Equal(logrus.FatalLevel, hook.LastEntry().Level)
83 assert.Equal("something went very wrong", hook.LastEntry().Message)
84 assert.Equal(1, len(hook.Entries))
85 }
86
87 func TestNewLocal(t *testing.T) {
88 assert := assert.New(t)
89 logger := logrus.New()
90
91 var wg sync.WaitGroup
92 defer wg.Wait()
93
94 wg.Add(10)
95 for i := 0; i < 10; i++ {
96 go func(i int) {
97 logger.Info("info")
98 wg.Done()
99 }(i)
100 }
101
102 hook := NewLocal(logger)
103 assert.NotNil(hook)
104 }
105
View as plain text