|
|
package logrus
import ( "sync" "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) }) }
func TestAddHookRace(t *testing.T) { var wg sync.WaitGroup wg.Add(2) hook := new(ErrorHook) LogAndAssertJSON(t, func(log *Logger) { go func() { defer wg.Done() log.AddHook(hook) }() go func() { defer wg.Done() log.Error("test") }() wg.Wait() }, func(fields Fields) { // the line may have been logged
// before the hook was added, so we can't
// actually assert on the hook
}) }
|