github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/test/docker/redis/redis.go (about)

     1  package redis
     2  
     3  import (
     4  	"context"
     5  	"log"
     6  	"net"
     7  
     8  	"github.com/ory/dockertest"
     9  	"github.com/redis/go-redis/v9"
    10  )
    11  
    12  func GenerateInstance(pool *dockertest.Pool) (*redis.Client, *dockertest.Resource) {
    13  	var redisClient *redis.Client
    14  
    15  	// Run the Docker container
    16  	resource, err := pool.Run("redis", "latest", nil)
    17  	if err != nil {
    18  		log.Fatalf("Could not start resource: %s", err)
    19  	}
    20  
    21  	// Exponential retry to connect to redis while it is booting
    22  	if err := pool.Retry(func() error {
    23  		redisClient = redis.NewClient(&redis.Options{
    24  			Addr:     net.JoinHostPort("localhost", resource.GetPort("6379/tcp")),
    25  			Password: "", // no password set
    26  			DB:       0,  // use default DB
    27  		})
    28  
    29  		ping := redisClient.Ping(context.Background())
    30  		return ping.Err()
    31  	}); err != nil {
    32  		log.Fatalf("Could not connect to Docker: %s", err)
    33  	}
    34  
    35  	return redisClient, resource
    36  }