7 "github.com/stretchr/testify/assert"
10 type TestHook struct {
14 func (hook *TestHook) Fire(entry *Entry) error {
19 func (hook *TestHook) Levels() []Level {
30 func TestHookFires(t *testing.T) {
33 LogAndAssertJSON(t, func(log *Logger) {
35 assert.Equal(t, hook.Fired, false)
38 }, func(fields Fields) {
39 assert.Equal(t, hook.Fired, true)
43 type ModifyHook struct {
46 func (hook *ModifyHook) Fire(entry *Entry) error {
47 entry.Data["wow"] = "whale"
51 func (hook *ModifyHook) Levels() []Level {
62 func TestHookCanModifyEntry(t *testing.T) {
63 hook := new(ModifyHook)
65 LogAndAssertJSON(t, func(log *Logger) {
67 log.WithField("wow", "elephant").Print("test")
68 }, func(fields Fields) {
69 assert.Equal(t, fields["wow"], "whale")
73 func TestCanFireMultipleHooks(t *testing.T) {
74 hook1 := new(ModifyHook)
75 hook2 := new(TestHook)
77 LogAndAssertJSON(t, func(log *Logger) {
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)
88 type ErrorHook struct {
92 func (hook *ErrorHook) Fire(entry *Entry) error {
97 func (hook *ErrorHook) Levels() []Level {
103 func TestErrorHookShouldntFireOnInfo(t *testing.T) {
104 hook := new(ErrorHook)
106 LogAndAssertJSON(t, func(log *Logger) {
109 }, func(fields Fields) {
110 assert.Equal(t, hook.Fired, false)
114 func TestErrorHookShouldFireOnError(t *testing.T) {
115 hook := new(ErrorHook)
117 LogAndAssertJSON(t, func(log *Logger) {
120 }, func(fields Fields) {
121 assert.Equal(t, hook.Fired, true)
125 func TestAddHookRace(t *testing.T) {
126 var wg sync.WaitGroup
128 hook := new(ErrorHook)
129 LogAndAssertJSON(t, func(log *Logger) {
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