Files
crawlab/db/redis/test/client_test.go
2024-06-14 15:59:48 +08:00

274 lines
5.7 KiB
Go

package test
import (
"github.com/crawlab-team/crawlab/db/redis"
"github.com/stretchr/testify/require"
"testing"
"time"
)
func TestRedisClient_Ping(t *testing.T) {
var err error
T.Setup(t)
err = T.client.Ping()
require.Nil(t, err)
}
func TestRedisClient_Get_Set(t *testing.T) {
var err error
T.Setup(t)
err = T.client.Set(T.TestCollection, T.TestMessage)
require.Nil(t, err)
value, err := T.client.Get(T.TestCollection)
require.Nil(t, err)
require.Equal(t, T.TestMessage, value)
}
func TestRedisClient_Keys_AllKeys(t *testing.T) {
var err error
T.Setup(t)
for _, key := range T.TestKeysAlpha {
err = T.client.Set(key, key)
require.Nil(t, err)
}
for _, key := range T.TestKeysBeta {
err = T.client.Set(key, key)
require.Nil(t, err)
}
keys, err := T.client.Keys("*alpha*")
require.Nil(t, err)
require.Len(t, keys, len(T.TestKeysAlpha))
keys, err = T.client.Keys("*beta*")
require.Nil(t, err)
require.Len(t, keys, len(T.TestKeysBeta))
keys, err = T.client.AllKeys()
require.Nil(t, err)
require.Len(t, keys, len(T.TestKeysAlpha)+len(T.TestKeysBeta))
}
func TestRedisClient_RPush_LPop_LLen(t *testing.T) {
var err error
T.Setup(t)
for _, msg := range T.TestMessages {
err = T.client.RPush(T.TestCollection, msg)
require.Nil(t, err)
}
n, err := T.client.LLen(T.TestCollection)
require.Nil(t, err)
require.Equal(t, len(T.TestMessages), n)
value, err := T.client.LPop(T.TestCollection)
require.Nil(t, err)
require.Equal(t, T.TestMessages[0], value)
}
func TestRedisClient_LPush_RPop(t *testing.T) {
var err error
T.Setup(t)
for _, msg := range T.TestMessages {
err = T.client.LPush(T.TestCollection, msg)
require.Nil(t, err)
}
n, err := T.client.LLen(T.TestCollection)
require.Nil(t, err)
require.Equal(t, len(T.TestMessages), n)
value, err := T.client.RPop(T.TestCollection)
require.Nil(t, err)
require.Equal(t, T.TestMessages[0], value)
}
func TestRedisClient_BRPop(t *testing.T) {
var err error
T.Setup(t)
isErr := true
go func(t *testing.T) {
value, err := T.client.BRPop(T.TestCollection, 0)
require.Nil(t, err)
require.Equal(t, T.TestMessage, value)
isErr = false
}(t)
err = T.client.LPush(T.TestCollection, T.TestMessage)
require.Nil(t, err)
time.Sleep(500 * time.Millisecond)
require.False(t, isErr)
}
func TestRedisClient_BLPop(t *testing.T) {
var err error
T.Setup(t)
isErr := true
go func(t *testing.T) {
value, err := T.client.BLPop(T.TestCollection, 0)
require.Nil(t, err)
require.Equal(t, T.TestMessage, value)
isErr = false
}(t)
err = T.client.RPush(T.TestCollection, T.TestMessage)
require.Nil(t, err)
time.Sleep(500 * time.Millisecond)
require.False(t, isErr)
}
func TestRedisClient_HSet_HGet_HDel(t *testing.T) {
var err error
T.Setup(t)
for k, v := range T.TestMessagesMap {
err = T.client.HSet(T.TestCollection, k, v)
require.Nil(t, err)
}
for k, v := range T.TestMessagesMap {
vr, err := T.client.HGet(T.TestCollection, k)
require.Nil(t, err)
require.Equal(t, v, vr)
}
for k := range T.TestMessagesMap {
err = T.client.HDel(T.TestCollection, k)
require.Nil(t, err)
v, err := T.client.HGet(T.TestCollection, k)
require.Nil(t, err)
require.Empty(t, v)
}
}
func TestRedisClient_HScan(t *testing.T) {
var err error
T.Setup(t)
for k, v := range T.TestMessagesMap {
err = T.client.HSet(T.TestCollection, k, v)
require.Nil(t, err)
}
results, err := T.client.HScan(T.TestCollection)
require.Nil(t, err)
for k, vr := range results {
v, ok := T.TestMessagesMap[k]
require.True(t, ok)
require.Equal(t, v, vr)
}
}
func TestRedisClient_HKeys(t *testing.T) {
var err error
T.Setup(t)
for k, v := range T.TestMessagesMap {
err = T.client.HSet(T.TestCollection, k, v)
require.Nil(t, err)
}
keys, err := T.client.HKeys(T.TestCollection)
require.Nil(t, err)
for _, k := range keys {
_, ok := T.TestMessagesMap[k]
require.True(t, ok)
}
}
func TestRedisClient_ZAdd_ZCount_ZCountAll_ZPopMax_ZPopMin(t *testing.T) {
var err error
T.Setup(t)
for i, v := range T.TestMessages {
score := float32(i)
err = T.client.ZAdd(T.TestCollection, score, v)
require.Nil(t, err)
}
count, err := T.client.ZCountAll(T.TestCollection)
require.Nil(t, err)
require.Equal(t, len(T.TestMessages), count)
value, err := T.client.ZPopMaxOne(T.TestCollection)
require.Nil(t, err)
require.Equal(t, T.TestMessages[len(T.TestMessages)-1], value)
value, err = T.client.ZPopMinOne(T.TestCollection)
require.Nil(t, err)
require.Equal(t, T.TestMessages[0], value)
}
func TestRedisClient_BZPopMax_BZPopMin(t *testing.T) {
var err error
T.Setup(t)
isErr := true
go func(t *testing.T) {
value, err := T.client.BZPopMax(T.TestCollection, 0)
require.Nil(t, err)
require.Equal(t, T.TestMessage, value)
isErr = false
}(t)
err = T.client.ZAdd(T.TestCollection, 1, T.TestMessage)
require.Nil(t, err)
time.Sleep(500 * time.Millisecond)
require.False(t, isErr)
isErr = true
go func(t *testing.T) {
value, err := T.client.BZPopMin(T.TestCollection, 0)
require.Nil(t, err)
require.Equal(t, T.TestMessage, value)
isErr = false
}(t)
err = T.client.ZAdd(T.TestCollection, 1, T.TestMessage)
require.Nil(t, err)
time.Sleep(500 * time.Millisecond)
require.False(t, isErr)
}
func TestRedisClient_Lock_Unlock(t *testing.T) {
var err error
T.Setup(t)
ts, err := T.client.Lock(T.TestLockKey)
require.Nil(t, err)
_, err = T.client.Lock(T.TestLockKey)
require.NotNil(t, err)
T.client.UnLock(T.TestLockKey, ts)
ts, err = T.client.Lock(T.TestLockKey)
require.Nil(t, err)
}
func TestRedisClient_MemoryStats(t *testing.T) {
var err error
T.Setup(t)
stats, err := T.client.MemoryStats()
require.Nil(t, err)
for _, k := range redis.MemoryStatsMetrics {
v, ok := stats[k]
require.True(t, ok)
require.Greater(t, v, int64(-1))
}
}