...

Source file src/github.com/redis/go-redis/v9/universal_test.go

Documentation: github.com/redis/go-redis/v9

     1  package redis_test
     2  
     3  import (
     4  	. "github.com/bsm/ginkgo/v2"
     5  	. "github.com/bsm/gomega"
     6  
     7  	"github.com/redis/go-redis/v9"
     8  )
     9  
    10  var _ = Describe("UniversalClient", func() {
    11  	var client redis.UniversalClient
    12  
    13  	AfterEach(func() {
    14  		if client != nil {
    15  			Expect(client.Close()).To(Succeed())
    16  		}
    17  	})
    18  
    19  	It("should connect to failover servers", Label("NonRedisEnterprise"), func() {
    20  		client = redis.NewUniversalClient(&redis.UniversalOptions{
    21  			MasterName: sentinelName,
    22  			Addrs:      sentinelAddrs,
    23  		})
    24  		Expect(client.Ping(ctx).Err()).NotTo(HaveOccurred())
    25  	})
    26  
    27  	It("should connect to failover cluster", Label("NonRedisEnterprise"), func() {
    28  		client = redis.NewUniversalClient(&redis.UniversalOptions{
    29  			MasterName:    sentinelName,
    30  			RouteRandomly: true,
    31  			Addrs:         sentinelAddrs,
    32  		})
    33  		_, ok := client.(*redis.ClusterClient)
    34  		Expect(ok).To(BeTrue(), "expected a ClusterClient")
    35  	})
    36  
    37  	It("should connect to simple servers", func() {
    38  		client = redis.NewUniversalClient(&redis.UniversalOptions{
    39  			Addrs: []string{redisAddr},
    40  		})
    41  		Expect(client.Ping(ctx).Err()).NotTo(HaveOccurred())
    42  	})
    43  
    44  	It("should connect to clusters", Label("NonRedisEnterprise"), func() {
    45  		client = redis.NewUniversalClient(&redis.UniversalOptions{
    46  			Addrs: cluster.addrs(),
    47  		})
    48  		Expect(client.Ping(ctx).Err()).NotTo(HaveOccurred())
    49  	})
    50  
    51  	It("connect to clusters with UniversalClient and UnstableResp3", Label("NonRedisEnterprise"), func() {
    52  		client = redis.NewUniversalClient(&redis.UniversalOptions{
    53  			Addrs:         cluster.addrs(),
    54  			Protocol:      3,
    55  			UnstableResp3: true,
    56  		})
    57  		Expect(client.Ping(ctx).Err()).NotTo(HaveOccurred())
    58  		a := func() { client.FTInfo(ctx, "all").Result() }
    59  		Expect(a).ToNot(Panic())
    60  	})
    61  
    62  	It("connect to clusters with ClusterClient and UnstableResp3", Label("NonRedisEnterprise"), func() {
    63  		client = redis.NewClusterClient(&redis.ClusterOptions{
    64  			Addrs:         cluster.addrs(),
    65  			Protocol:      3,
    66  			UnstableResp3: true,
    67  		})
    68  		Expect(client.Ping(ctx).Err()).NotTo(HaveOccurred())
    69  		a := func() { client.FTInfo(ctx, "all").Result() }
    70  		Expect(a).ToNot(Panic())
    71  	})
    72  
    73  	It("should connect to failover servers on slaves when readonly Options is ok", Label("NonRedisEnterprise"), func() {
    74  		client = redis.NewUniversalClient(&redis.UniversalOptions{
    75  			MasterName: sentinelName,
    76  			Addrs:      sentinelAddrs,
    77  			ReadOnly:   true,
    78  		})
    79  		Expect(client.Ping(ctx).Err()).NotTo(HaveOccurred())
    80  
    81  		roleCmd := client.Do(ctx, "ROLE")
    82  		role, err := roleCmd.Result()
    83  		Expect(err).NotTo(HaveOccurred())
    84  
    85  		roleSlice, ok := role.([]interface{})
    86  		Expect(ok).To(BeTrue())
    87  		Expect(roleSlice[0]).To(Equal("slave"))
    88  
    89  		err = client.Set(ctx, "somekey", "somevalue", 0).Err()
    90  		Expect(err).To(HaveOccurred())
    91  	})
    92  
    93  	It("should connect to clusters if IsClusterMode is set even if only a single address is provided", Label("NonRedisEnterprise"), func() {
    94  		client = redis.NewUniversalClient(&redis.UniversalOptions{
    95  			Addrs:         []string{cluster.addrs()[0]},
    96  			IsClusterMode: true,
    97  		})
    98  		_, ok := client.(*redis.ClusterClient)
    99  		Expect(ok).To(BeTrue(), "expected a ClusterClient")
   100  	})
   101  
   102  	It("should return all slots after instantiating UniversalClient with IsClusterMode", Label("NonRedisEnterprise"), func() {
   103  		client = redis.NewUniversalClient(&redis.UniversalOptions{
   104  			Addrs:         []string{cluster.addrs()[0]},
   105  			IsClusterMode: true,
   106  		})
   107  		Expect(client.ClusterSlots(ctx).Val()).To(HaveLen(3))
   108  	})
   109  })
   110  

View as plain text