redis_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package cache
  2. import (
  3. "errors"
  4. "strings"
  5. "testing"
  6. "time"
  7. "github.com/redis/go-redis/v9"
  8. )
  9. const (
  10. TEST_PREFIX = "test"
  11. )
  12. func getRedisConnection(t *testing.T) error {
  13. return InitRedisClient("0.0.0.0:6379", "difyai123456")
  14. }
  15. func TestRedisConnection(t *testing.T) {
  16. // get redis connection
  17. if err := getRedisConnection(t); err != nil {
  18. t.Errorf("get redis connection failed: %v", err)
  19. return
  20. }
  21. // close
  22. if err := Close(); err != nil {
  23. t.Errorf("close redis client failed: %v", err)
  24. return
  25. }
  26. }
  27. func TestRedisTransaction(t *testing.T) {
  28. // get redis connection
  29. if err := getRedisConnection(t); err != nil {
  30. t.Errorf("get redis connection failed: %v", err)
  31. return
  32. }
  33. defer Close()
  34. // test transaction
  35. err := Transaction(func(p redis.Pipeliner) error {
  36. // set key
  37. if err := Store(
  38. strings.Join([]string{TEST_PREFIX, "key"}, ":"),
  39. "value",
  40. time.Second,
  41. p,
  42. ); err != nil {
  43. t.Errorf("store key failed: %v", err)
  44. return err
  45. }
  46. return errors.New("test transaction error")
  47. })
  48. if err == nil {
  49. t.Errorf("transaction should return error")
  50. return
  51. }
  52. // get key
  53. value, err := GetString(
  54. strings.Join([]string{TEST_PREFIX, "key"}, ":"),
  55. )
  56. if err != ErrNotFound {
  57. t.Errorf("key should not exist")
  58. return
  59. }
  60. if value != "" {
  61. t.Errorf("value should be empty")
  62. return
  63. }
  64. // test success transaction
  65. err = Transaction(func(p redis.Pipeliner) error {
  66. // set key
  67. if err := Store(
  68. strings.Join([]string{TEST_PREFIX, "key"}, ":"),
  69. "value",
  70. time.Second,
  71. p,
  72. ); err != nil {
  73. t.Errorf("store key failed: %v", err)
  74. return err
  75. }
  76. return nil
  77. })
  78. if err != nil {
  79. t.Errorf("transaction should not return error")
  80. return
  81. }
  82. defer Del(strings.Join([]string{TEST_PREFIX, "key"}, ":"))
  83. // get key
  84. value, err = GetString(
  85. strings.Join([]string{TEST_PREFIX, "key"}, ":"),
  86. )
  87. if err != nil {
  88. t.Errorf("get key failed: %v", err)
  89. return
  90. }
  91. if value != "value" {
  92. t.Errorf("value should be value")
  93. return
  94. }
  95. }
  96. func TestRedisScanMap(t *testing.T) {
  97. // get redis connection
  98. if err := getRedisConnection(t); err != nil {
  99. t.Errorf("get redis connection failed: %v", err)
  100. return
  101. }
  102. defer Close()
  103. type s struct {
  104. Field string `json:"field"`
  105. }
  106. err := SetMapOneField(strings.Join([]string{TEST_PREFIX, "map"}, ":"), "key1", s{Field: "value1"})
  107. if err != nil {
  108. t.Errorf("set map failed: %v", err)
  109. return
  110. }
  111. defer Del(strings.Join([]string{TEST_PREFIX, "map"}, ":"))
  112. err = SetMapOneField(strings.Join([]string{TEST_PREFIX, "map"}, ":"), "key2", s{Field: "value2"})
  113. if err != nil {
  114. t.Errorf("set map failed: %v", err)
  115. return
  116. }
  117. err = SetMapOneField(strings.Join([]string{TEST_PREFIX, "map"}, ":"), "key3", s{Field: "value3"})
  118. if err != nil {
  119. t.Errorf("set map failed: %v", err)
  120. return
  121. }
  122. err = SetMapOneField(strings.Join([]string{TEST_PREFIX, "map"}, ":"), "4", s{Field: "value4"})
  123. if err != nil {
  124. t.Errorf("set map failed: %v", err)
  125. return
  126. }
  127. data, err := ScanMap[s](strings.Join([]string{TEST_PREFIX, "map"}, ":"), "key*")
  128. if err != nil {
  129. t.Errorf("scan map failed: %v", err)
  130. return
  131. }
  132. if len(data) != 3 {
  133. t.Errorf("scan map should return 3")
  134. return
  135. }
  136. if data["key1"].Field != "value1" {
  137. t.Errorf("scan map should return value1")
  138. return
  139. }
  140. if data["key2"].Field != "value2" {
  141. t.Errorf("scan map should return value2")
  142. return
  143. }
  144. if data["key3"].Field != "value3" {
  145. t.Errorf("scan map should return value3")
  146. return
  147. }
  148. err = ScanMapAsync[s](strings.Join([]string{TEST_PREFIX, "map"}, ":"), "4", func(m map[string]s) error {
  149. if len(m) != 1 {
  150. t.Errorf("scan map async should return 1")
  151. return errors.New("scan map async should return 1")
  152. }
  153. if m["4"].Field != "value4" {
  154. t.Errorf("scan map async should return value4")
  155. return errors.New("scan map async should return value4")
  156. }
  157. return nil
  158. })
  159. if err != nil {
  160. t.Errorf("scan map async failed: %v", err)
  161. return
  162. }
  163. }