entry_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package logrus
  2. import (
  3. "bytes"
  4. "fmt"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func TestEntryWithError(t *testing.T) {
  9. assert := assert.New(t)
  10. defer func() {
  11. ErrorKey = "error"
  12. }()
  13. err := fmt.Errorf("kaboom at layer %d", 4711)
  14. assert.Equal(err, WithError(err).Data["error"])
  15. logger := New()
  16. logger.Out = &bytes.Buffer{}
  17. entry := NewEntry(logger)
  18. assert.Equal(err, entry.WithError(err).Data["error"])
  19. ErrorKey = "err"
  20. assert.Equal(err, entry.WithError(err).Data["err"])
  21. }
  22. func TestEntryPanicln(t *testing.T) {
  23. errBoom := fmt.Errorf("boom time")
  24. defer func() {
  25. p := recover()
  26. assert.NotNil(t, p)
  27. switch pVal := p.(type) {
  28. case *Entry:
  29. assert.Equal(t, "kaboom", pVal.Message)
  30. assert.Equal(t, errBoom, pVal.Data["err"])
  31. default:
  32. t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal)
  33. }
  34. }()
  35. logger := New()
  36. logger.Out = &bytes.Buffer{}
  37. entry := NewEntry(logger)
  38. entry.WithField("err", errBoom).Panicln("kaboom")
  39. }
  40. func TestEntryPanicf(t *testing.T) {
  41. errBoom := fmt.Errorf("boom again")
  42. defer func() {
  43. p := recover()
  44. assert.NotNil(t, p)
  45. switch pVal := p.(type) {
  46. case *Entry:
  47. assert.Equal(t, "kaboom true", pVal.Message)
  48. assert.Equal(t, errBoom, pVal.Data["err"])
  49. default:
  50. t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal)
  51. }
  52. }()
  53. logger := New()
  54. logger.Out = &bytes.Buffer{}
  55. entry := NewEntry(logger)
  56. entry.WithField("err", errBoom).Panicf("kaboom %v", true)
  57. }
  58. const (
  59. badMessage = "this is going to panic"
  60. panicMessage = "this is broken"
  61. )
  62. type panickyHook struct{}
  63. func (p *panickyHook) Levels() []Level {
  64. return []Level{InfoLevel}
  65. }
  66. func (p *panickyHook) Fire(entry *Entry) error {
  67. if entry.Message == badMessage {
  68. panic(panicMessage)
  69. }
  70. return nil
  71. }
  72. func TestEntryHooksPanic(t *testing.T) {
  73. logger := New()
  74. logger.Out = &bytes.Buffer{}
  75. logger.Level = InfoLevel
  76. logger.Hooks.Add(&panickyHook{})
  77. defer func() {
  78. p := recover()
  79. assert.NotNil(t, p)
  80. assert.Equal(t, panicMessage, p)
  81. entry := NewEntry(logger)
  82. entry.Info("another message")
  83. }()
  84. entry := NewEntry(logger)
  85. entry.Info(badMessage)
  86. }