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  }