From 28a3c974092a565fdf6af534fcba6da723ed8058 Mon Sep 17 00:00:00 2001 From: fukua95 Date: Tue, 27 May 2025 19:53:41 +0800 Subject: [PATCH] chore: set the default value for the `options.protocol` in the `init()` of `options` (#3387) * chore: set the default value for the `options.protocol` in the `init()` of `options` Signed-off-by: fukua95 * add a test Signed-off-by: fukua95 --------- Signed-off-by: fukua95 --- options.go | 3 +++ options_test.go | 23 +++++++++++++++++++++++ redis.go | 8 +------- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/options.go b/options.go index 3ffcd07e..bf6c032e 100644 --- a/options.go +++ b/options.go @@ -178,6 +178,9 @@ func (opt *Options) init() { opt.Network = "tcp" } } + if opt.Protocol < 2 { + opt.Protocol = 3 + } if opt.DialTimeout == 0 { opt.DialTimeout = 5 * time.Second } diff --git a/options_test.go b/options_test.go index d46ecc85..8de4986b 100644 --- a/options_test.go +++ b/options_test.go @@ -222,3 +222,26 @@ func TestReadTimeoutOptions(t *testing.T) { } } } + +func TestProtocolOptions(t *testing.T) { + testCasesMap := map[int]int{ + 0: 3, + 1: 3, + 2: 2, + 3: 3, + } + + o := &Options{} + o.init() + if o.Protocol != 3 { + t.Errorf("got %d instead of %d as protocol option", o.Protocol, 3) + } + + for set, want := range testCasesMap { + o := &Options{Protocol: set} + o.init() + if o.Protocol != want { + t.Errorf("got %d instead of %d as protocol option", o.Protocol, want) + } + } +} diff --git a/redis.go b/redis.go index f50df568..19ff57b0 100644 --- a/redis.go +++ b/redis.go @@ -302,15 +302,9 @@ func (c *baseClient) initConn(ctx context.Context, cn *pool.Conn) error { conn := newConn(c.opt, connPool) var auth bool - protocol := c.opt.Protocol - // By default, use RESP3 in current version. - if protocol < 2 { - protocol = 3 - } - // for redis-server versions that do not support the HELLO command, // RESP2 will continue to be used. - if err = conn.Hello(ctx, protocol, username, password, c.opt.ClientName).Err(); err == nil { + if err = conn.Hello(ctx, c.opt.Protocol, username, password, c.opt.ClientName).Err(); err == nil { auth = true } else if !isRedisError(err) { // When the server responds with the RESP protocol and the result is not a normal