3
0

logger_test.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package nebula
  2. import (
  3. "errors"
  4. "testing"
  5. "github.com/sirupsen/logrus"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. type TestLogWriter struct {
  9. Logs []string
  10. }
  11. func NewTestLogWriter() *TestLogWriter {
  12. return &TestLogWriter{Logs: make([]string, 0)}
  13. }
  14. func (tl *TestLogWriter) Write(p []byte) (n int, err error) {
  15. tl.Logs = append(tl.Logs, string(p))
  16. return len(p), nil
  17. }
  18. func (tl *TestLogWriter) Reset() {
  19. tl.Logs = tl.Logs[:0]
  20. }
  21. func TestContextualError_Log(t *testing.T) {
  22. l := logrus.New()
  23. l.Formatter = &logrus.TextFormatter{
  24. DisableTimestamp: true,
  25. DisableColors: true,
  26. }
  27. tl := NewTestLogWriter()
  28. l.Out = tl
  29. // Test a full context line
  30. tl.Reset()
  31. e := NewContextualError("test message", m{"field": "1"}, errors.New("error"))
  32. e.Log(l)
  33. assert.Equal(t, []string{"level=error msg=\"test message\" error=error field=1\n"}, tl.Logs)
  34. // Test a line with an error and msg but no fields
  35. tl.Reset()
  36. e = NewContextualError("test message", nil, errors.New("error"))
  37. e.Log(l)
  38. assert.Equal(t, []string{"level=error msg=\"test message\" error=error\n"}, tl.Logs)
  39. // Test just a context and fields
  40. tl.Reset()
  41. e = NewContextualError("test message", m{"field": "1"}, nil)
  42. e.Log(l)
  43. assert.Equal(t, []string{"level=error msg=\"test message\" field=1\n"}, tl.Logs)
  44. // Test just a context
  45. tl.Reset()
  46. e = NewContextualError("test message", nil, nil)
  47. e.Log(l)
  48. assert.Equal(t, []string{"level=error msg=\"test message\"\n"}, tl.Logs)
  49. // Test just an error
  50. tl.Reset()
  51. e = NewContextualError("", nil, errors.New("error"))
  52. e.Log(l)
  53. assert.Equal(t, []string{"level=error error=error\n"}, tl.Logs)
  54. }