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  }