Skip to content

Commit

Permalink
Added test hook.
Browse files Browse the repository at this point in the history
  • Loading branch information
yawn committed Feb 22, 2016
1 parent 088ac13 commit be4b44b
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 0 deletions.
67 changes: 67 additions & 0 deletions hooks/test/test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package test

import (
"io/ioutil"

"github.com/Sirupsen/logrus"
)

// test.Hook is a hook designed for dealing with logs in test scenarios.
type Hook struct {
Entries []*logrus.Entry
}

// Installs a test hook for the global logger.
func NewGlobal() *Hook {

hook := new(Hook)
logrus.AddHook(hook)

return hook

}

// Installs a test hook for a given local logger.
func NewLocal(logger *logrus.Logger) *Hook {

hook := new(Hook)
logger.Hooks.Add(hook)

return hook

}

// Creates a discarding logger and installs the test hook.
func NewNullLogger() (*logrus.Logger, *Hook) {

logger := logrus.New()
logger.Out = ioutil.Discard

return logger, NewLocal(logger)

}

func (t *Hook) Fire(e *logrus.Entry) error {
t.Entries = append(t.Entries, e)
return nil
}

func (t *Hook) Levels() []logrus.Level {
return logrus.AllLevels
}

// LastEntry returns the last entry that was logged or nil.
func (t *Hook) LastEntry() (l *logrus.Entry) {

if i := len(t.Entries) - 1; i < 0 {
return nil
} else {
return t.Entries[i]
}

}

// Reset removes all Entries from this test hook.
func (t *Hook) Reset() {
t.Entries = make([]*logrus.Entry, 0)
}
36 changes: 36 additions & 0 deletions hooks/test/test_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package test

import (
"testing"

"github.com/Sirupsen/logrus"
"github.com/stretchr/testify/assert"
)

func TestAllHooks(t *testing.T) {

assert := assert.New(t)

logger, hook := NewNullLogger()

logger.Error("Hello error")
assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level)
assert.Equal("Hello error", hook.LastEntry().Message)
assert.Equal(1, len(hook.Entries))

logger.Warn("Hello warning")
assert.Equal(logrus.WarnLevel, hook.LastEntry().Level)
assert.Equal("Hello warning", hook.LastEntry().Message)
assert.Equal(2, len(hook.Entries))

hook.Reset()
assert.Equal(0, len(hook.Entries))

hook = NewGlobal()

logrus.Error("Hello error")
assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level)
assert.Equal("Hello error", hook.LastEntry().Message)
assert.Equal(1, len(hook.Entries))

}

0 comments on commit be4b44b

Please sign in to comment.