Files
cloud-services/pkg/redis/conn_test.go

558 lines
13 KiB
Go

package redis
import (
"testing"
m "github.com/fiskerinc/cloud-services/pkg/common"
"github.com/fiskerinc/cloud-services/pkg/testhelper"
"github.com/gomodule/redigo/redis"
)
func newMockConnClient() Client {
return NewClient(GetMockPool().Get())
}
func TestConnClient(t *testing.T) {
MockRedisConnection()
conn := newMockConnClient()
defer conn.Close()
c := conn.GetConn()
conn.SetConn(c)
if c == nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnClient", "conn client", c)
}
}
func TestConnClose(t *testing.T) {
MockRedisConnection()
conn := newMockConnClient()
_ = conn.GetConn()
err := conn.Close()
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnClose", nil, err)
}
}
func TestConnQueueMessage(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
err := conn.SafeQueueMessage("TESTVIN123", "hello fisker!")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnQueueMessage", nil, err)
}
}
func TestConnPublishMessage(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
err := conn.SafePublishMessage("TESTVIN123", "hello fisker!")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnPublishMessage", nil, err)
}
}
func TestConnBatchQueueMessages(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
err := conn.BatchQueueMessages(
[]string{"TESTVIN123", "TESTVIN456"},
[]interface{}{"hello ocean!", "hello pear!"})
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnBatchQueueMessages", nil, err)
}
}
func TestConnBatchPublishMessages(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
err := conn.BatchPublishMessages(
[]string{"TESTVIN123", "TESTVIN456"},
[]interface{}{"hello ocean!", "hello pear!"})
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnBatchPublishMessages", nil, err)
}
}
func TestConnSafeQueueMessage(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
err := conn.SafeQueueMessage("TESTVIN123", "hello fisker!")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnQueueMessage", nil, err)
}
}
func TestConnSafePublishMessage(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
err := conn.SafePublishMessage("TESTVIN123", "hello fisker!")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnPublishMessage", nil, err)
}
}
func TestConnSet(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
err := conn.Set("TESTKEY", true)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSet", nil, err)
}
}
func TestConnGet(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
_, err := conn.Get("TESTKEY")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGet", nil, err)
}
}
func TestConnDelete(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
err := conn.Delete("TESTKEY")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnDelete", nil, err)
}
}
func TestConnNewSet(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
err := conn.NewSet("TESTKEY", []string{"cognito-id-1", "cognito-id-2"}, 0)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnNewSet", nil, err)
}
}
func TestConnGetSet(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
var ids []string
err := conn.GetSet("TESTKEY", &ids)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetSet", nil, err)
}
}
func TestConnSetObjectStruct(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
l := m.Locks{
Driver: true,
All: false,
}
err := conn.SetObject("TESTVIN123:locks", &l, -1)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSetObjectStruct", nil, err)
}
}
func TestConnSetObjectStructExpiring(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
l := m.Locks{
Driver: true,
All: false,
}
err := conn.SetObject("TESTVIN123:locks", &l, 100)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSetObjectStruct", nil, err)
}
}
func TestConnSetObjectMap(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
l := map[string]interface{}{
"left_front": true,
"left_rear": true,
"right_front": false,
"right_rear": false,
"trunk": false,
}
err := conn.SetObject("TESTVIN123:locks", l, -1)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSetObjectMap", nil, err)
}
}
func TestConnSetObjectField(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
location := m.Location{
Altitude: 10,
Longitude: 15,
Latitude: 20,
}
serialized, err := location.Marshal()
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSetObjectField", nil, err)
}
err = conn.SetObjectField(CarLocationsKey(), "TESTVIN123", serialized)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSetObjectField", nil, err)
}
}
func TestConnSetObjects(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
ids := []string{"TESTKEY1", "TESTKEY2", "TESTKEY3"}
objects := []interface{}{
m.Locks{
Driver: true,
All: true,
},
m.Locks{
Driver: false,
All: false,
},
m.Locks{
Driver: true,
All: false,
},
}
err := conn.SetObjects(ids, objects, 60)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSetObjects", nil, err)
}
}
func TestConnSetObjectsError(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
ids := []string{"TESTKEY1", "TESTKEY2", "TESTKEY3"}
objects := []interface{}{}
err := conn.SetObjects(ids, objects, 60)
if err == nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSetObjectsError", "error", err)
}
}
func TestConnGetObjectStruct(t *testing.T) {
MockRedisConnection()
var conn Client = newMockConnClient()
defer conn.Close()
var o m.Locks
err := conn.GetObject("TESTVIN123:locks", &o)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetObjectStruct", nil, err)
}
}
func TestConnGetObjectMap(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
_, err := client.GetObjectMap("TESTVIN123:locks")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetObjectMap", nil, err)
}
}
func TestConnGetObjectRaw(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
_, err := client.GetObjectRaw(CarLocationsKey())
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetObjectRaw", nil, err)
}
}
func TestConnGetObjectField(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
_, err := client.GetObjectField(CarLocationsKey(), "TESTVIN123")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetObjectField", nil, err)
}
}
func TestConnGetObjectsMulti(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
keys := []string{"TESTVIN123:locks", CarUpdateStatusHashKey(1234)}
os := []interface{}{&m.Locks{}, &m.CarUpdateProgress{}}
err := client.GetObjectsMulti(keys, os)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetObjectsMulti", nil, err)
}
if len(keys) != len(os) {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetObjectsMulti", len(keys), len(os))
}
}
func TestConnGetObjectsMultiMap(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
keys := []string{"TESTVIN123:locks", CarUpdateStatusHashKey(1234)}
os, err := client.GetObjectsMultiMap(keys)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetObjectsMultiMap", nil, err)
}
if os == nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetObjectsMultiMap", "map", os)
}
}
func TestConnGetValuesMulti(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
ids := []string{"test1", "test2", "test3"}
data := make([]string, len(ids))
err := client.GetValuesMulti(ids, &data)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnGetValuesMulti", nil, err)
}
}
func TestConnRetrieve(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
var value interface{}
err := client.Retrieve("HGET test1", &value)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnRetrieve", nil, err)
}
}
func TestConnSafeSet(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
err := client.SafeSet("TESTKEY", true)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSafeSet", nil, err)
}
}
func TestConnSafeGet(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
_, err := client.SafeGet("TESTKEY")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSafeGet", nil, err)
}
}
func TestConnSafeDelete(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
err := client.SafeDelete("TESTKEY")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSafeDelete", nil, err)
}
}
func TestConnSafeNewSet(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
err := client.SafeNewSet("TESTKEY", []string{"cognito-id-1", "cognito-id-2"}, 0)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSafeNewSet", nil, err)
}
}
func TestConnSafeGetSet(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
var ids []string
err := client.SafeGetSet("TESTKEY", &ids)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSafeGetSet", nil, err)
}
}
func TestConnSafeSetObjectStruct(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
l := m.Locks{
Driver: true,
All: false,
}
err := client.SafeSetObject("TESTVIN123:locks", &l, -1)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSafeSetObjectStruct", nil, err)
}
}
func TestConnSafeGetObjectStruct(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
var o m.Locks
err := client.SafeGetObject("TESTVIN123:locks", &o)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnSafeGetObjectStruct", nil, err)
}
}
func TestConnExecute(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
_, err := client.Execute("GET", "test_key")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnExecute", nil, err)
}
_, err = client.Execute("SET", "test_key", "test_value")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnExecute", nil, err)
}
}
func TestConnSafeExecute(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
_, err := client.Execute("HGETALL", "test_key")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnExecute", nil, err)
}
_, err = client.Execute("HGET", "test_key", "test_field")
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnExecute", nil, err)
}
}
func TestConnAddToBatch(t *testing.T) {
batch := NewRedisBatchCommands()
batch.Add("SET", "test_key", "test_value")
}
func TestConnExecuteBatch(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
batch := NewRedisBatchCommands()
batch.Add("SET", "test_key", "test_value")
result, err := redis.Values(client.ExecuteBatch(batch))
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnExecuteBatch", nil, err)
}
if len(result) != 0 {
t.Errorf(testhelper.TestErrorTemplate, "TestConnExecuteBatch", 0, len(result))
}
}
func TestConnSafeExecuteBatch(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
batch := NewRedisBatchCommands()
batch.Add("SET", "test_key", "test_value")
result, err := redis.Values(client.SafeExecuteBatch(batch))
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "TestConnExecuteBatch", nil, err)
}
if len(result) != 0 {
t.Errorf(testhelper.TestErrorTemplate, "TestConnExecuteBatch", 0, len(result))
}
}
func TestConnBatchIsEmpty(t *testing.T) {
MockRedisConnection()
client := newMockConnClient()
defer client.Close()
batch := NewRedisBatchCommands()
if !batch.IsEmpty() {
t.Errorf(testhelper.TestErrorTemplate, "TestConnBatchIsEmpty", true, false)
}
batch.Add("SET", "test_key", "test_value")
if batch.IsEmpty() {
t.Errorf(testhelper.TestErrorTemplate, "TestConnBatchIsEmpty", false, true)
}
}