grafana/pkg/infra/remotecache/redis_storage_test.go
Kyle Brandt f689b60426
remotecache: support SSL with redis (#18511)
* update go-redis lib from v2 -> v5
* add ssl option to the redis connection string
fixes #18498
2019-08-13 06:51:13 -04:00

101 lines
2.3 KiB
Go

package remotecache
import (
"crypto/tls"
"fmt"
"testing"
"github.com/stretchr/testify/assert"
redis "gopkg.in/redis.v5"
)
func Test_parseRedisConnStr(t *testing.T) {
cases := map[string]struct {
InputConnStr string
OutputOptions *redis.Options
ShouldErr bool
}{
"all redis options should parse": {
"addr=127.0.0.1:6379,pool_size=100,db=1,password=grafanaRocks,ssl=false",
&redis.Options{
Addr: "127.0.0.1:6379",
PoolSize: 100,
DB: 1,
Password: "grafanaRocks",
Network: "tcp",
TLSConfig: nil,
},
false,
},
"subset of redis options should parse": {
"addr=127.0.0.1:6379,pool_size=100",
&redis.Options{
Addr: "127.0.0.1:6379",
PoolSize: 100,
Network: "tcp",
},
false,
},
"ssl set to true should result in default TLS configuration with tls set to addr's host": {
"addr=grafana.com:6379,ssl=true",
&redis.Options{
Addr: "grafana.com:6379",
Network: "tcp",
TLSConfig: &tls.Config{ServerName: "grafana.com"},
},
false,
},
"ssl to insecure should result in TLS configuration with InsecureSkipVerify": {
"addr=127.0.0.1:6379,ssl=insecure",
&redis.Options{
Addr: "127.0.0.1:6379",
Network: "tcp",
TLSConfig: &tls.Config{InsecureSkipVerify: true},
},
false,
},
"invalid SSL option should err": {
"addr=127.0.0.1:6379,ssl=dragons",
nil,
true,
},
"invalid pool_size value should err": {
"addr=127.0.0.1:6379,pool_size=seven",
nil,
true,
},
"invalid db value should err": {
"addr=127.0.0.1:6379,db=seven",
nil,
true,
},
"trailing comma should err": {
"addr=127.0.0.1:6379,pool_size=100,",
nil,
true,
},
"invalid key should err": {
"addr=127.0.0.1:6379,puddle_size=100",
nil,
true,
},
"empty connection string should err": {
"",
nil,
true,
},
}
for reason, testCase := range cases {
options, err := parseRedisConnStr(testCase.InputConnStr)
if testCase.ShouldErr {
assert.Error(t, err, fmt.Sprintf("error cases should return non-nil error for test case %v", reason))
assert.Nil(t, options, fmt.Sprintf("error cases should return nil for redis options for test case %v", reason))
continue
}
assert.NoError(t, err, reason)
assert.EqualValues(t, testCase.OutputOptions, options, reason)
}
}