hook_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package redis
  2. import (
  3. "context"
  4. "log"
  5. "strings"
  6. "testing"
  7. "time"
  8. red "github.com/go-redis/redis/v8"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestHookProcessCase1(t *testing.T) {
  12. writer := log.Writer()
  13. var buf strings.Builder
  14. log.SetOutput(&buf)
  15. defer log.SetOutput(writer)
  16. ctx, err := durationHook.BeforeProcess(context.Background(), nil)
  17. if err != nil {
  18. t.Fatal(err)
  19. }
  20. assert.Nil(t, durationHook.AfterProcess(ctx, red.NewCmd(context.Background())))
  21. assert.False(t, strings.Contains(buf.String(), "slow"))
  22. }
  23. func TestHookProcessCase2(t *testing.T) {
  24. writer := log.Writer()
  25. var buf strings.Builder
  26. log.SetOutput(&buf)
  27. defer log.SetOutput(writer)
  28. ctx, err := durationHook.BeforeProcess(context.Background(), nil)
  29. if err != nil {
  30. t.Fatal(err)
  31. }
  32. time.Sleep(slowThreshold.Load() + time.Millisecond)
  33. assert.Nil(t, durationHook.AfterProcess(ctx, red.NewCmd(context.Background(), "foo", "bar")))
  34. assert.True(t, strings.Contains(buf.String(), "slow"))
  35. }
  36. func TestHookProcessCase3(t *testing.T) {
  37. writer := log.Writer()
  38. var buf strings.Builder
  39. log.SetOutput(&buf)
  40. defer log.SetOutput(writer)
  41. assert.Nil(t, durationHook.AfterProcess(context.Background(), red.NewCmd(context.Background())))
  42. assert.True(t, buf.Len() == 0)
  43. }
  44. func TestHookProcessCase4(t *testing.T) {
  45. writer := log.Writer()
  46. var buf strings.Builder
  47. log.SetOutput(&buf)
  48. defer log.SetOutput(writer)
  49. ctx := context.WithValue(context.Background(), startTimeKey, "foo")
  50. assert.Nil(t, durationHook.AfterProcess(ctx, red.NewCmd(context.Background())))
  51. assert.True(t, buf.Len() == 0)
  52. }
  53. func TestHookProcessPipelineCase1(t *testing.T) {
  54. writer := log.Writer()
  55. var buf strings.Builder
  56. log.SetOutput(&buf)
  57. defer log.SetOutput(writer)
  58. ctx, err := durationHook.BeforeProcessPipeline(context.Background(), nil)
  59. if err != nil {
  60. t.Fatal(err)
  61. }
  62. assert.Nil(t, durationHook.AfterProcessPipeline(ctx, []red.Cmder{
  63. red.NewCmd(context.Background()),
  64. }))
  65. assert.False(t, strings.Contains(buf.String(), "slow"))
  66. }
  67. func TestHookProcessPipelineCase2(t *testing.T) {
  68. writer := log.Writer()
  69. var buf strings.Builder
  70. log.SetOutput(&buf)
  71. defer log.SetOutput(writer)
  72. ctx, err := durationHook.BeforeProcessPipeline(context.Background(), nil)
  73. if err != nil {
  74. t.Fatal(err)
  75. }
  76. time.Sleep(slowThreshold.Load() + time.Millisecond)
  77. assert.Nil(t, durationHook.AfterProcessPipeline(ctx, []red.Cmder{
  78. red.NewCmd(context.Background(), "foo", "bar"),
  79. }))
  80. assert.True(t, strings.Contains(buf.String(), "slow"))
  81. }
  82. func TestHookProcessPipelineCase3(t *testing.T) {
  83. writer := log.Writer()
  84. var buf strings.Builder
  85. log.SetOutput(&buf)
  86. defer log.SetOutput(writer)
  87. assert.Nil(t, durationHook.AfterProcessPipeline(context.Background(), []red.Cmder{
  88. red.NewCmd(context.Background()),
  89. }))
  90. assert.True(t, buf.Len() == 0)
  91. }
  92. func TestHookProcessPipelineCase4(t *testing.T) {
  93. writer := log.Writer()
  94. var buf strings.Builder
  95. log.SetOutput(&buf)
  96. defer log.SetOutput(writer)
  97. ctx := context.WithValue(context.Background(), startTimeKey, "foo")
  98. assert.Nil(t, durationHook.AfterProcessPipeline(ctx, []red.Cmder{
  99. red.NewCmd(context.Background()),
  100. }))
  101. assert.True(t, buf.Len() == 0)
  102. }
  103. func TestHookProcessPipelineCase5(t *testing.T) {
  104. writer := log.Writer()
  105. var buf strings.Builder
  106. log.SetOutput(&buf)
  107. defer log.SetOutput(writer)
  108. ctx := context.WithValue(context.Background(), startTimeKey, "foo")
  109. assert.Nil(t, durationHook.AfterProcessPipeline(ctx, nil))
  110. assert.True(t, buf.Len() == 0)
  111. }