1package test
2
3import (
4	"math/rand"
5	"sync"
6	"testing"
7	"time"
8
9	"github.com/sirupsen/logrus"
10	"github.com/stretchr/testify/assert"
11)
12
13func 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
42func 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
75func 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