github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/lorry/engines/redis/redis_test.go (about) 1 /* 2 Copyright 2021 The Dapr Authors 3 Licensed under the Apache License, Version 2.0 (the "License"); 4 you may not use this file except in compliance with the License. 5 You may obtain a copy of the License at 6 http://www.apache.org/licenses/LICENSE-2.0 7 Unless required by applicable law or agreed to in writing, software 8 distributed under the License is distributed on an "AS IS" BASIS, 9 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 See the License for the specific language governing permissions and 11 limitations under the License. 12 */ 13 14 package redis 15 16 import ( 17 "errors" 18 "testing" 19 "time" 20 21 "github.com/stretchr/testify/assert" 22 ) 23 24 const ( 25 host = "redisHost" 26 password = "redisPassword" 27 username = "redisUsername" 28 db = "redisDB" 29 redisType = "redisType" 30 redisMaxRetries = "redisMaxRetries" 31 redisMinRetryInterval = "redisMinRetryInterval" 32 redisMaxRetryInterval = "redisMaxRetryInterval" 33 dialTimeout = "dialTimeout" 34 readTimeout = "readTimeout" 35 writeTimeout = "writeTimeout" 36 poolSize = "poolSize" 37 minIdleConns = "minIdleConns" 38 poolTimeout = "poolTimeout" 39 idleTimeout = "idleTimeout" 40 idleCheckFrequency = "idleCheckFrequency" 41 maxConnAge = "maxConnAge" 42 enableTLS = "enableTLS" 43 failover = "failover" 44 sentinelMasterName = "sentinelMasterName" 45 ) 46 47 func getFakeProperties() map[string]string { 48 return map[string]string{ 49 host: "fake.redis.com", 50 password: "fakePassword", 51 username: "fakeUsername", 52 redisType: "node", 53 enableTLS: "true", 54 dialTimeout: "5s", 55 readTimeout: "5s", 56 writeTimeout: "50000", 57 poolSize: "20", 58 maxConnAge: "200s", 59 db: "1", 60 redisMaxRetries: "1", 61 redisMinRetryInterval: "8ms", 62 redisMaxRetryInterval: "1s", 63 minIdleConns: "1", 64 poolTimeout: "1s", 65 idleTimeout: "1s", 66 idleCheckFrequency: "1s", 67 failover: "true", 68 sentinelMasterName: "master", 69 } 70 } 71 72 func TestParseRedisMetadata(t *testing.T) { 73 t.Run("ClientMetadata is correct", func(t *testing.T) { 74 fakeProperties := getFakeProperties() 75 76 // act 77 m := &Settings{} 78 err := m.Decode(fakeProperties) 79 80 // assert 81 assert.NoError(t, err) 82 assert.Equal(t, fakeProperties[host], m.Host) 83 assert.Equal(t, fakeProperties[password], m.Password) 84 assert.Equal(t, fakeProperties[username], m.Username) 85 assert.Equal(t, fakeProperties[redisType], m.RedisType) 86 assert.Equal(t, true, m.EnableTLS) 87 assert.Equal(t, 5*time.Second, time.Duration(m.DialTimeout)) 88 assert.Equal(t, 5*time.Second, time.Duration(m.ReadTimeout)) 89 assert.Equal(t, 50000*time.Millisecond, time.Duration(m.WriteTimeout)) 90 assert.Equal(t, 20, m.PoolSize) 91 assert.Equal(t, 200*time.Second, time.Duration(m.MaxConnAge)) 92 assert.Equal(t, 1, m.DB) 93 assert.Equal(t, 1, m.RedisMaxRetries) 94 assert.Equal(t, 8*time.Millisecond, time.Duration(m.RedisMinRetryInterval)) 95 assert.Equal(t, 1*time.Second, time.Duration(m.RedisMaxRetryInterval)) 96 assert.Equal(t, 1, m.MinIdleConns) 97 assert.Equal(t, 1*time.Second, time.Duration(m.PoolTimeout)) 98 assert.Equal(t, 1*time.Second, time.Duration(m.IdleTimeout)) 99 assert.Equal(t, 1*time.Second, time.Duration(m.IdleCheckFrequency)) 100 assert.Equal(t, true, m.Failover) 101 assert.Equal(t, "master", m.SentinelMasterName) 102 }) 103 104 t.Run("host is not given", func(t *testing.T) { 105 fakeProperties := getFakeProperties() 106 107 fakeProperties[host] = "" 108 109 // act 110 m := &Settings{} 111 err := m.Decode(fakeProperties) 112 113 // assert 114 assert.Error(t, errors.New("redis streams error: missing host address"), err) 115 assert.Empty(t, m.Host) 116 }) 117 118 t.Run("check values can be set as -1", func(t *testing.T) { 119 fakeProperties := getFakeProperties() 120 121 fakeProperties[readTimeout] = "-1" 122 fakeProperties[idleTimeout] = "-1" 123 fakeProperties[idleCheckFrequency] = "-1" 124 fakeProperties[redisMaxRetryInterval] = "-1" 125 fakeProperties[redisMinRetryInterval] = "-1" 126 127 // act 128 m := &Settings{} 129 err := m.Decode(fakeProperties) 130 // assert 131 assert.NoError(t, err) 132 assert.True(t, m.ReadTimeout == -1) 133 assert.True(t, m.IdleTimeout == -1) 134 assert.True(t, m.IdleCheckFrequency == -1) 135 assert.True(t, m.RedisMaxRetryInterval == -1) 136 assert.True(t, m.RedisMinRetryInterval == -1) 137 }) 138 }