128 lines
3.9 KiB
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)
|
|
})
|
|
}
|