You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

base_redis_test.go 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package queue
  4. import (
  5. "context"
  6. "os"
  7. "os/exec"
  8. "testing"
  9. "time"
  10. "code.gitea.io/gitea/modules/nosql"
  11. "code.gitea.io/gitea/modules/setting"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func waitRedisReady(conn string, dur time.Duration) (ready bool) {
  15. ctxTimed, cancel := context.WithTimeout(context.Background(), time.Second*5)
  16. defer cancel()
  17. for t := time.Now(); ; time.Sleep(50 * time.Millisecond) {
  18. ret := nosql.GetManager().GetRedisClient(conn).Ping(ctxTimed)
  19. if ret.Err() == nil {
  20. return true
  21. }
  22. if time.Since(t) > dur {
  23. return false
  24. }
  25. }
  26. }
  27. func redisServerCmd(t *testing.T) *exec.Cmd {
  28. redisServerProg, err := exec.LookPath("redis-server")
  29. if err != nil {
  30. return nil
  31. }
  32. c := &exec.Cmd{
  33. Path: redisServerProg,
  34. Args: []string{redisServerProg, "--bind", "127.0.0.1", "--port", "6379"},
  35. Dir: t.TempDir(),
  36. Stdin: os.Stdin,
  37. Stdout: os.Stdout,
  38. Stderr: os.Stderr,
  39. }
  40. return c
  41. }
  42. func TestBaseRedis(t *testing.T) {
  43. var redisServer *exec.Cmd
  44. defer func() {
  45. if redisServer != nil {
  46. _ = redisServer.Process.Signal(os.Interrupt)
  47. _ = redisServer.Wait()
  48. }
  49. }()
  50. if !waitRedisReady("redis://127.0.0.1:6379/0", 0) {
  51. redisServer = redisServerCmd(t)
  52. if redisServer == nil && os.Getenv("CI") == "" {
  53. t.Skip("redis-server not found")
  54. return
  55. }
  56. assert.NoError(t, redisServer.Start())
  57. if !assert.True(t, waitRedisReady("redis://127.0.0.1:6379/0", 5*time.Second), "start redis-server") {
  58. return
  59. }
  60. }
  61. testQueueBasic(t, newBaseRedisSimple, toBaseConfig("baseRedis", setting.QueueSettings{Length: 10}), false)
  62. testQueueBasic(t, newBaseRedisUnique, toBaseConfig("baseRedisUnique", setting.QueueSettings{Length: 10}), true)
  63. }