| package logrus |
| |
| import ( |
| "testing" |
| |
| "github.com/stretchr/testify/assert" |
| ) |
| |
| type TestHook struct { |
| Fired bool |
| } |
| |
| func (hook *TestHook) Fire(entry *Entry) error { |
| hook.Fired = true |
| return nil |
| } |
| |
| func (hook *TestHook) Levels() []Level { |
| return []Level{ |
| DebugLevel, |
| InfoLevel, |
| WarnLevel, |
| ErrorLevel, |
| FatalLevel, |
| PanicLevel, |
| } |
| } |
| |
| func TestHookFires(t *testing.T) { |
| hook := new(TestHook) |
| |
| LogAndAssertJSON(t, func(log *Logger) { |
| log.Hooks.Add(hook) |
| assert.Equal(t, hook.Fired, false) |
| |
| log.Print("test") |
| }, func(fields Fields) { |
| assert.Equal(t, hook.Fired, true) |
| }) |
| } |
| |
| type ModifyHook struct { |
| } |
| |
| func (hook *ModifyHook) Fire(entry *Entry) error { |
| entry.Data["wow"] = "whale" |
| return nil |
| } |
| |
| func (hook *ModifyHook) Levels() []Level { |
| return []Level{ |
| DebugLevel, |
| InfoLevel, |
| WarnLevel, |
| ErrorLevel, |
| FatalLevel, |
| PanicLevel, |
| } |
| } |
| |
| func TestHookCanModifyEntry(t *testing.T) { |
| hook := new(ModifyHook) |
| |
| LogAndAssertJSON(t, func(log *Logger) { |
| log.Hooks.Add(hook) |
| log.WithField("wow", "elephant").Print("test") |
| }, func(fields Fields) { |
| assert.Equal(t, fields["wow"], "whale") |
| }) |
| } |
| |
| func TestCanFireMultipleHooks(t *testing.T) { |
| hook1 := new(ModifyHook) |
| hook2 := new(TestHook) |
| |
| LogAndAssertJSON(t, func(log *Logger) { |
| log.Hooks.Add(hook1) |
| log.Hooks.Add(hook2) |
| |
| log.WithField("wow", "elephant").Print("test") |
| }, func(fields Fields) { |
| assert.Equal(t, fields["wow"], "whale") |
| assert.Equal(t, hook2.Fired, true) |
| }) |
| } |
| |
| type ErrorHook struct { |
| Fired bool |
| } |
| |
| func (hook *ErrorHook) Fire(entry *Entry) error { |
| hook.Fired = true |
| return nil |
| } |
| |
| func (hook *ErrorHook) Levels() []Level { |
| return []Level{ |
| ErrorLevel, |
| } |
| } |
| |
| func TestErrorHookShouldntFireOnInfo(t *testing.T) { |
| hook := new(ErrorHook) |
| |
| LogAndAssertJSON(t, func(log *Logger) { |
| log.Hooks.Add(hook) |
| log.Info("test") |
| }, func(fields Fields) { |
| assert.Equal(t, hook.Fired, false) |
| }) |
| } |
| |
| func TestErrorHookShouldFireOnError(t *testing.T) { |
| hook := new(ErrorHook) |
| |
| LogAndAssertJSON(t, func(log *Logger) { |
| log.Hooks.Add(hook) |
| log.Error("test") |
| }, func(fields Fields) { |
| assert.Equal(t, hook.Fired, true) |
| }) |
| } |