durationlogger_test.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package logx
  2. import (
  3. "context"
  4. "strings"
  5. "sync/atomic"
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/assert"
  9. "go.opentelemetry.io/otel"
  10. sdktrace "go.opentelemetry.io/otel/sdk/trace"
  11. )
  12. func TestWithDurationError(t *testing.T) {
  13. w := new(mockWriter)
  14. old := writer.Swap(w)
  15. defer writer.Store(old)
  16. WithDuration(time.Second).Error("foo")
  17. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  18. }
  19. func TestWithDurationErrorf(t *testing.T) {
  20. w := new(mockWriter)
  21. old := writer.Swap(w)
  22. defer writer.Store(old)
  23. WithDuration(time.Second).Errorf("foo")
  24. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  25. }
  26. func TestWithDurationErrorv(t *testing.T) {
  27. w := new(mockWriter)
  28. old := writer.Swap(w)
  29. defer writer.Store(old)
  30. WithDuration(time.Second).Errorv("foo")
  31. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  32. }
  33. func TestWithDurationErrorw(t *testing.T) {
  34. w := new(mockWriter)
  35. old := writer.Swap(w)
  36. defer writer.Store(old)
  37. WithDuration(time.Second).Errorw("foo", Field("foo", "bar"))
  38. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  39. assert.True(t, strings.Contains(w.String(), "foo"), w.String())
  40. assert.True(t, strings.Contains(w.String(), "bar"), w.String())
  41. }
  42. func TestWithDurationInfo(t *testing.T) {
  43. w := new(mockWriter)
  44. old := writer.Swap(w)
  45. defer writer.Store(old)
  46. WithDuration(time.Second).Info("foo")
  47. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  48. }
  49. func TestWithDurationInfoConsole(t *testing.T) {
  50. old := atomic.LoadUint32(&encoding)
  51. atomic.StoreUint32(&encoding, plainEncodingType)
  52. defer func() {
  53. atomic.StoreUint32(&encoding, old)
  54. }()
  55. w := new(mockWriter)
  56. o := writer.Swap(w)
  57. defer writer.Store(o)
  58. WithDuration(time.Second).Info("foo")
  59. assert.True(t, strings.Contains(w.String(), "ms"), w.String())
  60. }
  61. func TestWithDurationInfof(t *testing.T) {
  62. w := new(mockWriter)
  63. old := writer.Swap(w)
  64. defer writer.Store(old)
  65. WithDuration(time.Second).Infof("foo")
  66. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  67. }
  68. func TestWithDurationInfov(t *testing.T) {
  69. w := new(mockWriter)
  70. old := writer.Swap(w)
  71. defer writer.Store(old)
  72. WithDuration(time.Second).Infov("foo")
  73. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  74. }
  75. func TestWithDurationInfow(t *testing.T) {
  76. w := new(mockWriter)
  77. old := writer.Swap(w)
  78. defer writer.Store(old)
  79. WithDuration(time.Second).Infow("foo", Field("foo", "bar"))
  80. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  81. assert.True(t, strings.Contains(w.String(), "foo"), w.String())
  82. assert.True(t, strings.Contains(w.String(), "bar"), w.String())
  83. }
  84. func TestWithDurationWithContextInfow(t *testing.T) {
  85. w := new(mockWriter)
  86. old := writer.Swap(w)
  87. defer writer.Store(old)
  88. otp := otel.GetTracerProvider()
  89. tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample()))
  90. otel.SetTracerProvider(tp)
  91. defer otel.SetTracerProvider(otp)
  92. ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar")
  93. WithDuration(time.Second).WithContext(ctx).Infow("foo", Field("foo", "bar"))
  94. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  95. assert.True(t, strings.Contains(w.String(), "foo"), w.String())
  96. assert.True(t, strings.Contains(w.String(), "bar"), w.String())
  97. assert.True(t, strings.Contains(w.String(), "trace"), w.String())
  98. assert.True(t, strings.Contains(w.String(), "span"), w.String())
  99. }
  100. func TestWithDurationSlow(t *testing.T) {
  101. w := new(mockWriter)
  102. old := writer.Swap(w)
  103. defer writer.Store(old)
  104. WithDuration(time.Second).Slow("foo")
  105. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  106. }
  107. func TestWithDurationSlowf(t *testing.T) {
  108. w := new(mockWriter)
  109. old := writer.Swap(w)
  110. defer writer.Store(old)
  111. WithDuration(time.Second).WithDuration(time.Hour).Slowf("foo")
  112. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  113. }
  114. func TestWithDurationSlowv(t *testing.T) {
  115. w := new(mockWriter)
  116. old := writer.Swap(w)
  117. defer writer.Store(old)
  118. WithDuration(time.Second).WithDuration(time.Hour).Slowv("foo")
  119. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  120. }
  121. func TestWithDurationSloww(t *testing.T) {
  122. w := new(mockWriter)
  123. old := writer.Swap(w)
  124. defer writer.Store(old)
  125. WithDuration(time.Second).WithDuration(time.Hour).Sloww("foo", Field("foo", "bar"))
  126. assert.True(t, strings.Contains(w.String(), "duration"), w.String())
  127. assert.True(t, strings.Contains(w.String(), "foo"), w.String())
  128. assert.True(t, strings.Contains(w.String(), "bar"), w.String())
  129. }