1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package nhook
- import (
- "encoding/json"
- "log"
- "os"
- "testing"
- "time"
- "github.com/nats-io/nats.go"
- "github.com/nats-io/nats.go/test"
- "github.com/sirupsen/logrus"
- ltest "github.com/sirupsen/logrus/hooks/test"
- "github.com/stretchr/testify/assert"
- )
- var nc *nats.Conn
- func TestMain(m *testing.M) {
- s := test.RunDefaultServer()
- defer s.Shutdown()
- var err error
- nc, err = nats.Connect("nats://" + s.Addr().String())
- if err != nil {
- log.Fatal("Failed to connect to server: " + err.Error())
- }
- defer nc.Close()
- os.Exit(m.Run())
- }
- func TestSimpleSend(t *testing.T) {
- logger, logHook := ltest.NewNullLogger()
- sub, err := nc.SubscribeSync("test")
- if !assert.NoError(t, err) {
- return
- }
- defer sub.Unsubscribe()
- hook := NewNatsHook(nc, "test")
- hook.AddField("hook-level", "pikachu")
- hook.AddDynamicField("dynamic-level", func() interface{} {
- return 12
- })
- addToAll(logger, hook)
- logger.WithField("instance-level", "charizard").Info("this is a test")
- assert.Len(t, logHook.Entries, 1)
- entry := logHook.Entries[0]
- msg, err := sub.NextMsg(time.Minute)
- parsed := make(map[string]interface{})
- err = json.Unmarshal(msg.Data, &parsed)
- if !assert.NoError(t, err) {
- return
- }
- // {"dynamic-level":12,"hook-level":"pikachu","instance-level":"charizard","level":"info","msg":"this is a test","time":"2016-10-19T13:01:14-07:00"}
- assert.Len(t, parsed, 6)
- for _, m := range []map[string]interface{}{entry.Data, parsed} {
- assert.Equal(t, "pikachu", m["hook-level"])
- assert.Equal(t, "charizard", m["instance-level"])
- assert.EqualValues(t, 12, m["dynamic-level"])
- }
- assert.Equal(t, "this is a test", parsed["msg"])
- assert.Equal(t, "this is a test", entry.Message)
- assert.Equal(t, "info", parsed["level"])
- assert.Equal(t, "info", entry.Level.String())
- assert.NotEmpty(t, parsed["time"])
- assert.NotEmpty(t, entry.Time)
- }
- func addToAll(logger *logrus.Logger, hook logrus.Hook) {
- for l, hooks := range logger.Hooks {
- logger.Hooks[l] = append(hooks, hook)
- }
- }
|