nats_logrus_hook_test.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package nhook
  2. import (
  3. "encoding/json"
  4. "log"
  5. "os"
  6. "testing"
  7. "time"
  8. "github.com/nats-io/nats.go"
  9. "github.com/nats-io/nats.go/test"
  10. "github.com/sirupsen/logrus"
  11. ltest "github.com/sirupsen/logrus/hooks/test"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. var nc *nats.Conn
  15. func TestMain(m *testing.M) {
  16. s := test.RunDefaultServer()
  17. defer s.Shutdown()
  18. var err error
  19. nc, err = nats.Connect("nats://" + s.Addr().String())
  20. if err != nil {
  21. log.Fatal("Failed to connect to server: " + err.Error())
  22. }
  23. defer nc.Close()
  24. os.Exit(m.Run())
  25. }
  26. func TestSimpleSend(t *testing.T) {
  27. logger, logHook := ltest.NewNullLogger()
  28. sub, err := nc.SubscribeSync("test")
  29. if !assert.NoError(t, err) {
  30. return
  31. }
  32. defer sub.Unsubscribe()
  33. hook := NewNatsHook(nc, "test")
  34. hook.AddField("hook-level", "pikachu")
  35. hook.AddDynamicField("dynamic-level", func() interface{} {
  36. return 12
  37. })
  38. addToAll(logger, hook)
  39. logger.WithField("instance-level", "charizard").Info("this is a test")
  40. assert.Len(t, logHook.Entries, 1)
  41. entry := logHook.Entries[0]
  42. msg, err := sub.NextMsg(time.Minute)
  43. parsed := make(map[string]interface{})
  44. err = json.Unmarshal(msg.Data, &parsed)
  45. if !assert.NoError(t, err) {
  46. return
  47. }
  48. // {"dynamic-level":12,"hook-level":"pikachu","instance-level":"charizard","level":"info","msg":"this is a test","time":"2016-10-19T13:01:14-07:00"}
  49. assert.Len(t, parsed, 6)
  50. for _, m := range []map[string]interface{}{entry.Data, parsed} {
  51. assert.Equal(t, "pikachu", m["hook-level"])
  52. assert.Equal(t, "charizard", m["instance-level"])
  53. assert.EqualValues(t, 12, m["dynamic-level"])
  54. }
  55. assert.Equal(t, "this is a test", parsed["msg"])
  56. assert.Equal(t, "this is a test", entry.Message)
  57. assert.Equal(t, "info", parsed["level"])
  58. assert.Equal(t, "info", entry.Level.String())
  59. assert.NotEmpty(t, parsed["time"])
  60. assert.NotEmpty(t, entry.Time)
  61. }
  62. func addToAll(logger *logrus.Logger, hook logrus.Hook) {
  63. for l, hooks := range logger.Hooks {
  64. logger.Hooks[l] = append(hooks, hook)
  65. }
  66. }