components-contrib/internal/component/redis/redis_test.go

128 lines
3.9 KiB
Go

// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation and Dapr Contributors.
// Licensed under the MIT License.
// ------------------------------------------------------------
package redis
import (
"errors"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
const (
host = "redisHost"
password = "redisPassword"
db = "redisDB"
redisType = "redisType"
redisMaxRetries = "redisMaxRetries"
redisMinRetryInterval = "redisMinRetryInterval"
redisMaxRetryInterval = "redisMaxRetryInterval"
dialTimeout = "dialTimeout"
readTimeout = "readTimeout"
writeTimeout = "writeTimeout"
poolSize = "poolSize"
minIdleConns = "minIdleConns"
poolTimeout = "poolTimeout"
idleTimeout = "idleTimeout"
idleCheckFrequency = "idleCheckFrequency"
maxConnAge = "maxConnAge"
enableTLS = "enableTLS"
failover = "failover"
sentinelMasterName = "sentinelMasterName"
)
func getFakeProperties() map[string]string {
return map[string]string{
host: "fake.redis.com",
password: "fakePassword",
redisType: "node",
enableTLS: "true",
dialTimeout: "5s",
readTimeout: "5s",
writeTimeout: "50000",
poolSize: "20",
maxConnAge: "200s",
db: "1",
redisMaxRetries: "1",
redisMinRetryInterval: "8ms",
redisMaxRetryInterval: "1s",
minIdleConns: "1",
poolTimeout: "1s",
idleTimeout: "1s",
idleCheckFrequency: "1s",
failover: "true",
sentinelMasterName: "master",
}
}
func TestParseRedisMetadata(t *testing.T) {
t.Run("ClientMetadata is correct", func(t *testing.T) {
fakeProperties := getFakeProperties()
// act
m := &Settings{}
err := m.Decode(fakeProperties)
// assert
assert.NoError(t, err)
assert.Equal(t, fakeProperties[host], m.Host)
assert.Equal(t, fakeProperties[password], m.Password)
assert.Equal(t, fakeProperties[redisType], m.RedisType)
assert.Equal(t, true, m.EnableTLS)
assert.Equal(t, 5*time.Second, time.Duration(m.DialTimeout))
assert.Equal(t, 5*time.Second, time.Duration(m.ReadTimeout))
assert.Equal(t, 50000*time.Millisecond, time.Duration(m.WriteTimeout))
assert.Equal(t, 20, m.PoolSize)
assert.Equal(t, 200*time.Second, time.Duration(m.MaxConnAge))
assert.Equal(t, 1, m.DB)
assert.Equal(t, 1, m.RedisMaxRetries)
assert.Equal(t, 8*time.Millisecond, time.Duration(m.RedisMinRetryInterval))
assert.Equal(t, 1*time.Second, time.Duration(m.RedisMaxRetryInterval))
assert.Equal(t, 1, m.MinIdleConns)
assert.Equal(t, 1*time.Second, time.Duration(m.PoolTimeout))
assert.Equal(t, 1*time.Second, time.Duration(m.IdleTimeout))
assert.Equal(t, 1*time.Second, time.Duration(m.IdleCheckFrequency))
assert.Equal(t, true, m.Failover)
assert.Equal(t, "master", m.SentinelMasterName)
})
t.Run("host is not given", func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeProperties[host] = ""
// act
m := &Settings{}
err := m.Decode(fakeProperties)
// assert
assert.Error(t, errors.New("redis streams error: missing host address"), err)
assert.Empty(t, m.Host)
})
t.Run("check values can be set as -1", func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeProperties[readTimeout] = "-1"
fakeProperties[idleTimeout] = "-1"
fakeProperties[idleCheckFrequency] = "-1"
fakeProperties[redisMaxRetryInterval] = "-1"
fakeProperties[redisMinRetryInterval] = "-1"
// act
m := &Settings{}
err := m.Decode(fakeProperties)
// assert
assert.NoError(t, err)
assert.True(t, m.ReadTimeout == -1)
assert.True(t, m.IdleTimeout == -1)
assert.True(t, m.IdleCheckFrequency == -1)
assert.True(t, m.RedisMaxRetryInterval == -1)
assert.True(t, m.RedisMinRetryInterval == -1)
})
}