cache_test.go 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. package test
  2. import (
  3. "git.sxidc.com/go-framework/baize/framework/core/infrastructure"
  4. "git.sxidc.com/go-framework/baize/framework/core/infrastructure/cache"
  5. "git.sxidc.com/go-framework/baize/framework/core/infrastructure/cache/local"
  6. "git.sxidc.com/go-framework/baize/framework/core/infrastructure/cache/redis"
  7. "git.sxidc.com/go-tools/utils/strutils"
  8. "github.com/pkg/errors"
  9. "testing"
  10. "time"
  11. )
  12. func TestLocalCache(t *testing.T) {
  13. localhostCache := local.New("test")
  14. testLocalCache(t, localhostCache)
  15. }
  16. func TestRedisCache(t *testing.T) {
  17. redisCache, err := redis.New("localhost:6379", "", "mtyzxhc", 1, "test")
  18. if err != nil {
  19. t.Fatalf("%+v\n", err)
  20. }
  21. defer func() {
  22. err := redis.Destroy(redisCache)
  23. if err != nil {
  24. t.Fatalf("%+v\n", err)
  25. }
  26. }()
  27. testRedisCache(t, redisCache)
  28. }
  29. func TestCacheInfrastructure(t *testing.T) {
  30. i := infrastructure.NewInfrastructure(infrastructure.Config{
  31. CacheConfig: infrastructure.CacheConfig{
  32. Namespace: "test",
  33. Redis: &infrastructure.RedisConfig{
  34. Address: "localhost:6379",
  35. UserName: "",
  36. Password: "mtyzxhc",
  37. DB: 1,
  38. },
  39. },
  40. })
  41. defer infrastructure.DestroyInfrastructure(i)
  42. testCache(t, i.LocalCache())
  43. testCache(t, i.RedisCache())
  44. }
  45. func TestCacheExpire(t *testing.T) {
  46. i := infrastructure.NewInfrastructure(infrastructure.Config{
  47. CacheConfig: infrastructure.CacheConfig{
  48. Namespace: "test",
  49. Redis: &infrastructure.RedisConfig{
  50. Address: "localhost:6379",
  51. UserName: "",
  52. Password: "mtyzxhc",
  53. DB: 1,
  54. },
  55. },
  56. })
  57. defer infrastructure.DestroyInfrastructure(i)
  58. testCacheExpire(t, i.LocalCache())
  59. testCacheExpire(t, i.RedisCache())
  60. }
  61. func testLocalCache(t *testing.T, localCache *local.Cache) {
  62. err := localCache.Set("test1", "test1-value", 0)
  63. if err != nil {
  64. t.Fatalf("%+v\n", err)
  65. }
  66. test1Value, err := localCache.Get("test1")
  67. if err != nil {
  68. t.Fatalf("%+v\n", err)
  69. }
  70. if test1Value != "test1-value" {
  71. t.Fatalf("Value Error: cache %v\n", test1Value)
  72. }
  73. err = localCache.Set("test2", "test2-value", 0)
  74. if err != nil {
  75. t.Fatalf("%+v\n", err)
  76. }
  77. multiValues, err := localCache.GetMulti([]string{"test1", "test2"})
  78. if err != nil {
  79. t.Fatalf("%+v\n", err)
  80. }
  81. if len(multiValues) != 2 {
  82. t.Fatalf("Value Error: cache %v\n", multiValues)
  83. }
  84. if multiValues["test1"] != "test1-value" || multiValues["test2"] != "test2-value" {
  85. t.Fatalf("Value Error: cache %v\n", multiValues)
  86. }
  87. allValues, err := localCache.GetAll()
  88. if err != nil {
  89. t.Fatalf("%+v\n", err)
  90. }
  91. if len(allValues) != 2 {
  92. t.Fatalf("Value Error: cache %v\n", allValues)
  93. }
  94. if allValues["test1"] != "test1-value" || allValues["test2"] != "test2-value" {
  95. t.Fatalf("Value Error: cache %v\n", allValues)
  96. }
  97. err = localCache.Delete("test2")
  98. if err != nil {
  99. t.Fatalf("%+v\n", err)
  100. }
  101. test2Value, err := localCache.Get("test2")
  102. if err != nil {
  103. t.Fatalf("%+v\n", err)
  104. }
  105. if strutils.IsStringNotEmpty(test2Value) {
  106. t.Fatalf("Delete Value Error: cache %v\n", test2Value)
  107. }
  108. err = localCache.Clear()
  109. if err != nil {
  110. t.Fatalf("%+v\n", err)
  111. }
  112. allValues, err = localCache.GetAll()
  113. if err != nil {
  114. t.Fatalf("%+v\n", err)
  115. }
  116. if len(allValues) != 0 {
  117. t.Fatalf("Clear Value Error: cache %v\n", allValues)
  118. }
  119. err = localCache.Set("test", "test-value", 1)
  120. if err != nil {
  121. t.Fatalf("%+v\n", err)
  122. }
  123. time.Sleep(1500 * time.Millisecond)
  124. testValue, err := localCache.Get("test")
  125. if err != nil {
  126. t.Fatalf("%+v\n", err)
  127. }
  128. if strutils.IsStringNotEmpty(testValue) {
  129. t.Fatalf("Value Expire Error: cache %v\n", testValue)
  130. }
  131. err = localCache.Clear()
  132. if err != nil {
  133. t.Fatalf("%+v\n", err)
  134. }
  135. }
  136. func testRedisCache(t *testing.T, redisCache *redis.Cache) {
  137. err := redisCache.Set("test1", "test1-value", 0)
  138. if err != nil {
  139. t.Fatalf("%+v\n", err)
  140. }
  141. test1Value, err := redisCache.Get("test1")
  142. if err != nil {
  143. t.Fatalf("%+v\n", err)
  144. }
  145. if test1Value != "test1-value" {
  146. t.Fatalf("Value Error: cache %v\n", test1Value)
  147. }
  148. err = redisCache.Set("test2", "test2-value", 0)
  149. if err != nil {
  150. t.Fatalf("%+v\n", err)
  151. }
  152. multiValues, err := redisCache.GetMulti([]string{"test1", "test2"})
  153. if err != nil {
  154. t.Fatalf("%+v\n", err)
  155. }
  156. if len(multiValues) != 2 {
  157. t.Fatalf("Value Error: cache %v\n", multiValues)
  158. }
  159. if multiValues["test1"] != "test1-value" || multiValues["test2"] != "test2-value" {
  160. t.Fatalf("Value Error: cache %v\n", multiValues)
  161. }
  162. allValues, err := redisCache.GetAll()
  163. if err != nil {
  164. t.Fatalf("%+v\n", err)
  165. }
  166. if len(allValues) != 2 {
  167. t.Fatalf("Value Error: cache %v\n", allValues)
  168. }
  169. if allValues["test1"] != "test1-value" || allValues["test2"] != "test2-value" {
  170. t.Fatalf("Value Error: cache %v\n", allValues)
  171. }
  172. err = redisCache.Delete("test2")
  173. if err != nil {
  174. t.Fatalf("%+v\n", err)
  175. }
  176. test2Value, err := redisCache.Get("test2")
  177. if err != nil {
  178. t.Fatalf("%+v\n", err)
  179. }
  180. if strutils.IsStringNotEmpty(test2Value) {
  181. t.Fatalf("Delete Value Error: cache %v\n", test2Value)
  182. }
  183. err = redisCache.Clear()
  184. if err != nil {
  185. t.Fatalf("%+v\n", err)
  186. }
  187. allValues, err = redisCache.GetAll()
  188. if err != nil {
  189. t.Fatalf("%+v\n", err)
  190. }
  191. if len(allValues) != 0 {
  192. t.Fatalf("Clear Value Error: cache %v\n", allValues)
  193. }
  194. err = redisCache.Set("test", "test-value", 1)
  195. if err != nil {
  196. t.Fatalf("%+v\n", err)
  197. }
  198. time.Sleep(1500 * time.Millisecond)
  199. testValue, err := redisCache.Get("test")
  200. if err != nil {
  201. t.Fatalf("%+v\n", err)
  202. }
  203. if strutils.IsStringNotEmpty(testValue) {
  204. t.Fatalf("Value Expire Error: cache %v\n", testValue)
  205. }
  206. err = redisCache.Clear()
  207. if err != nil {
  208. t.Fatalf("%+v\n", err)
  209. }
  210. }
  211. func testCache(t *testing.T, cacheInterface cache.Cache) {
  212. err := cache.Set(cacheInterface, "test1", "test1-value", 0)
  213. if err != nil {
  214. t.Fatalf("%+v\n", err)
  215. }
  216. test1Value, err := cache.Get[string](cacheInterface, "test1")
  217. if err != nil {
  218. t.Fatalf("%+v\n", err)
  219. }
  220. if test1Value != "test1-value" {
  221. t.Fatalf("Value Error: cache %v\n", test1Value)
  222. }
  223. err = cache.Set(cacheInterface, "test2", "test2-value", 0)
  224. if err != nil {
  225. t.Fatalf("%+v\n", err)
  226. }
  227. multiValues, err := cache.GetMulti(cacheInterface, []string{"test1", "test2"})
  228. if err != nil {
  229. t.Fatalf("%+v\n", err)
  230. }
  231. if len(multiValues) != 2 {
  232. t.Fatalf("Value Error: cache %v\n", multiValues)
  233. }
  234. if multiValues["test1"] != "test1-value" || multiValues["test2"] != "test2-value" {
  235. t.Fatalf("Value Error: cache %v\n", multiValues)
  236. }
  237. allValues, err := cache.GetAll(cacheInterface)
  238. if err != nil {
  239. t.Fatalf("%+v\n", err)
  240. }
  241. if len(allValues) != 2 {
  242. t.Fatalf("Value Error: cache %v\n", allValues)
  243. }
  244. if allValues["test1"] != "test1-value" || allValues["test2"] != "test2-value" {
  245. t.Fatalf("Value Error: cache %v\n", allValues)
  246. }
  247. err = cache.Delete(cacheInterface, "test2")
  248. if err != nil {
  249. t.Fatalf("%+v\n", err)
  250. }
  251. test2Value, err := cache.Get[string](cacheInterface, "test2")
  252. if err != nil {
  253. t.Fatalf("%+v\n", err)
  254. }
  255. if strutils.IsStringNotEmpty(test2Value) {
  256. t.Fatalf("Delete Value Error: cache %v\n", test2Value)
  257. }
  258. err = cache.Clear(cacheInterface)
  259. if err != nil {
  260. t.Fatalf("%+v\n", err)
  261. }
  262. allValues, err = cache.GetAll(cacheInterface)
  263. if err != nil {
  264. t.Fatalf("%+v\n", err)
  265. }
  266. if len(allValues) != 0 {
  267. t.Fatalf("Clear Value Error: cache %v\n", allValues)
  268. }
  269. err = cache.Set(cacheInterface, "test", "test-value", 1)
  270. if err != nil {
  271. t.Fatalf("%+v\n", err)
  272. }
  273. time.Sleep(1500 * time.Millisecond)
  274. testValue, err := cache.Get[string](cacheInterface, "test")
  275. if err != nil {
  276. t.Fatalf("%+v\n", err)
  277. }
  278. if strutils.IsStringNotEmpty(testValue) {
  279. t.Fatalf("Value Expire Error: cache %v\n", testValue)
  280. }
  281. err = cache.Clear(cacheInterface)
  282. if err != nil {
  283. t.Fatalf("%+v\n", err)
  284. }
  285. }
  286. func testCacheExpire(t *testing.T, cacheInterface cache.Cache) {
  287. err := cache.Set(cacheInterface, "test", 10, 1)
  288. if err != nil {
  289. t.Fatalf("%+v\n", err)
  290. }
  291. time.Sleep(2 * time.Second)
  292. value, err := cache.Get[string](cacheInterface, "test")
  293. if err != nil {
  294. t.Fatalf("%+v\n", err)
  295. }
  296. if strutils.IsStringNotEmpty(value) {
  297. t.Fatalf("%+v\n", errors.Errorf("Value Expire Error: cache %v", value))
  298. }
  299. err = cache.Set(cacheInterface, "test", 10, 0)
  300. if err != nil {
  301. t.Fatalf("%+v\n", err)
  302. }
  303. err = cache.Expire(cacheInterface, "test", 1)
  304. if err != nil {
  305. t.Fatalf("%+v\n", err)
  306. }
  307. time.Sleep(2 * time.Second)
  308. value, err = cache.Get[string](cacheInterface, "test")
  309. if err != nil {
  310. t.Fatalf("%+v\n", err)
  311. }
  312. if strutils.IsStringNotEmpty(value) {
  313. t.Fatalf("%+v\n", errors.Errorf("Value Expire Error: cache %v", value))
  314. }
  315. err = cache.Set(cacheInterface, "test", 10, 5)
  316. if err != nil {
  317. t.Fatalf("%+v\n", err)
  318. }
  319. err = cache.Expire(cacheInterface, "test", 1)
  320. if err != nil {
  321. t.Fatalf("%+v\n", err)
  322. }
  323. time.Sleep(2 * time.Second)
  324. value, err = cache.Get[string](cacheInterface, "test")
  325. if err != nil {
  326. t.Fatalf("%+v\n", err)
  327. }
  328. if strutils.IsStringNotEmpty(value) {
  329. t.Fatalf("%+v\n", errors.Errorf("Value Expire Error: cache %v", value))
  330. }
  331. err = cache.Set(cacheInterface, "test", 10, 10)
  332. if err != nil {
  333. t.Fatalf("%+v\n", err)
  334. }
  335. err = cache.Expire(cacheInterface, "test", 5)
  336. if err != nil {
  337. t.Fatalf("%+v\n", err)
  338. }
  339. ttl, err := cache.TTL(cacheInterface, "test")
  340. if err != nil {
  341. t.Fatalf("%+v\n", err)
  342. }
  343. if ttl != 5 {
  344. t.Fatalf("%+v\n", errors.Errorf("TTL Error: ttl %v", ttl))
  345. }
  346. err = cache.Delete(cacheInterface, "test")
  347. if err != nil {
  348. t.Fatalf("%+v\n", err)
  349. }
  350. }