558 lines
13 KiB
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)
|
|
}
|
|
}
|