Initial cloud-services repo - gateway service + pkg modules

This commit is contained in:
Chris Rai
2026-01-30 23:14:52 -05:00
commit fbb820d7b3
1037 changed files with 171318 additions and 0 deletions

View File

@@ -0,0 +1,211 @@
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)
})
}
}