212 lines
4.7 KiB
Go
212 lines
4.7 KiB
Go
package redisutils_test
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
|
|
"fiskerinc.com/modules/redis/redisutils"
|
|
"fiskerinc.com/modules/redis/tester"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGetCacheSet(t *testing.T) {
|
|
key := "someKey"
|
|
redisMock := tester.NewRedisMock()
|
|
|
|
tests := map[string]struct {
|
|
getResults map[string]map[string]interface{}
|
|
batchError error
|
|
expRes map[string]struct{}
|
|
expError error
|
|
}{
|
|
"correct": {
|
|
getResults: map[string]map[string]interface{}{
|
|
"EXISTS": {
|
|
key: int64(1),
|
|
},
|
|
"SMEMBERS": {
|
|
key: []interface{}{
|
|
[]byte("609:ESP_ActvSig_DTC"),
|
|
[]byte("832:ADAS_FltIndcr"),
|
|
[]byte("832:ADAS_IntegtCrsFltTxt"),
|
|
},
|
|
},
|
|
},
|
|
expRes: map[string]struct{}{
|
|
"609:ESP_ActvSig_DTC": {},
|
|
"832:ADAS_FltIndcr": {},
|
|
"832:ADAS_IntegtCrsFltTxt": {},
|
|
},
|
|
},
|
|
"key_doesnt_exist": {
|
|
getResults: map[string]map[string]interface{}{
|
|
"EXISTS": {
|
|
key: int64(0),
|
|
},
|
|
},
|
|
expError: redisutils.ErrCacheDoesntExist,
|
|
},
|
|
"batch_error": {
|
|
batchError: errors.New("some error"),
|
|
expError: errors.New("some error"),
|
|
},
|
|
"wrong_batch_first_elem": {
|
|
getResults: map[string]map[string]interface{}{
|
|
"EXISTS": {
|
|
key: 1,
|
|
},
|
|
"SMEMBERS": {
|
|
key: []interface{}{},
|
|
},
|
|
},
|
|
expError: errors.New("expected type: int64, got: 1: wrong response format"),
|
|
},
|
|
"wrong_batch_second_elem": {
|
|
getResults: map[string]map[string]interface{}{
|
|
"EXISTS": {
|
|
key: int64(1),
|
|
},
|
|
"SMEMBERS": {
|
|
key: 1,
|
|
},
|
|
},
|
|
expError: errors.New("expected type: []interface{}, got: 1: wrong response format"),
|
|
},
|
|
"wrong_batch_second_sub_elem": {
|
|
getResults: map[string]map[string]interface{}{
|
|
"EXISTS": {
|
|
key: int64(1),
|
|
},
|
|
"SMEMBERS": {
|
|
key: []interface{}{1},
|
|
},
|
|
},
|
|
expError: errors.New("expected type: []byte, got: 1: wrong response format"),
|
|
},
|
|
}
|
|
|
|
for name, tt := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
redisMock.GetCommandResult = tt.getResults
|
|
redisMock.Error = tt.batchError
|
|
|
|
cSet := redisutils.CachedSet{}
|
|
cSet.SetConnection(redisMock)
|
|
|
|
res, err := cSet.GetCachedSet(key)
|
|
if err != nil && tt.expError != nil {
|
|
assert.Equal(t, tt.expError.Error(), err.Error())
|
|
return
|
|
}
|
|
|
|
assert.Equal(t, tt.expError, err)
|
|
assert.Equal(t, tt.expRes, res)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCreateSetCache(t *testing.T) {
|
|
redisMock := tester.NewRedisMock()
|
|
mockTime := time.Date(2022, 8, 11, 15, 53, 0, 0, time.UTC)
|
|
|
|
tests := map[string]struct {
|
|
cacheValues []interface{}
|
|
batchError error
|
|
expSetValues map[string]tester.ExpiringCache
|
|
expError error
|
|
}{
|
|
"correct": {
|
|
cacheValues: []interface{}{
|
|
"609:ESP_ActvSig_DTC",
|
|
"832:ADAS_FltIndcr",
|
|
"832:ADAS_IntegtCrsFltTxt",
|
|
},
|
|
expSetValues: map[string]tester.ExpiringCache{
|
|
"someKey": {
|
|
Value: []interface{}{
|
|
"609:ESP_ActvSig_DTC",
|
|
"832:ADAS_FltIndcr",
|
|
"832:ADAS_IntegtCrsFltTxt",
|
|
},
|
|
Expires: 1660233180,
|
|
},
|
|
},
|
|
},
|
|
"fail": {
|
|
batchError: errors.New("some error"),
|
|
expError: errors.New("some error"),
|
|
},
|
|
}
|
|
|
|
for name, tt := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
redisMock.Reset()
|
|
redisMock.Error = tt.batchError
|
|
|
|
cSet := redisutils.CachedSet{}
|
|
cSet.SetConnection(redisMock)
|
|
|
|
err := cSet.CreateSetCache("someKey", tt.cacheValues, mockTime)
|
|
if err != nil && tt.expError != nil {
|
|
assert.Equal(t, tt.expError.Error(), err.Error())
|
|
return
|
|
}
|
|
|
|
assert.Equal(t, tt.expError, err)
|
|
assert.Equal(t, tt.expSetValues, redisMock.SetValues)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestUpdateSetCache(t *testing.T) {
|
|
redisMock := tester.NewRedisMock()
|
|
|
|
tests := map[string]struct {
|
|
cacheValues []interface{}
|
|
execError error
|
|
expSetValues map[string]tester.ExpiringCache
|
|
expError error
|
|
}{
|
|
"correct": {
|
|
cacheValues: []interface{}{
|
|
"609:ESP_ActvSig_DTC",
|
|
"832:ADAS_FltIndcr",
|
|
"832:ADAS_IntegtCrsFltTxt",
|
|
},
|
|
expSetValues: map[string]tester.ExpiringCache{
|
|
"someKey": {
|
|
Value: []interface{}{
|
|
"609:ESP_ActvSig_DTC",
|
|
"832:ADAS_FltIndcr",
|
|
"832:ADAS_IntegtCrsFltTxt",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"fail": {
|
|
execError: errors.New("some error"),
|
|
expError: errors.New("some error"),
|
|
},
|
|
}
|
|
|
|
for name, tt := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
redisMock.Reset()
|
|
redisMock.Error = tt.execError
|
|
|
|
cSet := redisutils.CachedSet{}
|
|
cSet.SetConnection(redisMock)
|
|
|
|
err := cSet.UpdateSetCache("someKey", tt.cacheValues)
|
|
if err != nil && tt.expError != nil {
|
|
assert.Equal(t, tt.expError.Error(), err.Error())
|
|
return
|
|
}
|
|
|
|
assert.Equal(t, tt.expError, err)
|
|
assert.Equal(t, tt.expSetValues, redisMock.SetValues)
|
|
})
|
|
}
|
|
}
|