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