mirror of
https://github.com/charlienet/go-mixed.git
synced 2025-07-18 00:22:41 +08:00
87 lines
1.6 KiB
Go
87 lines
1.6 KiB
Go
package redis
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/alicebob/miniredis/v2"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGetSet(t *testing.T) {
|
|
runOnRedis(t, func(client *Redis) {
|
|
ctx := context.Background()
|
|
|
|
val, err := client.GetSet(ctx, "hello", "world")
|
|
assert.NotNil(t, err)
|
|
assert.Equal(t, "", val)
|
|
|
|
val, err = client.Get(ctx, "hello")
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "world", val)
|
|
|
|
val, err = client.GetSet(ctx, "hello", "newworld")
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "world", val)
|
|
|
|
val, err = client.Get(ctx, "hello")
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "newworld", val)
|
|
|
|
ret, err := client.Del(ctx, "hello")
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 1, ret)
|
|
})
|
|
}
|
|
|
|
func TestRedis_SetGetDel(t *testing.T) {
|
|
runOnRedis(t, func(client *Redis) {
|
|
ctx := context.Background()
|
|
|
|
err := client.Set(ctx, "hello", "world")
|
|
assert.Nil(t, err)
|
|
|
|
val, err := client.Get(ctx, "hello")
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "world", val)
|
|
ret, err := client.Del(ctx, "hello")
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 1, ret)
|
|
})
|
|
}
|
|
|
|
func runOnRedis(t *testing.T, fn func(client *Redis)) {
|
|
redis, clean, err := CreateMiniRedis()
|
|
assert.Nil(t, err)
|
|
|
|
defer clean()
|
|
|
|
fn(redis)
|
|
}
|
|
|
|
func CreateMiniRedis() (r *Redis, clean func(), err error) {
|
|
mr, err := miniredis.Run()
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
addr := mr.Addr()
|
|
log.Println("mini redis run at:", addr)
|
|
|
|
return New(addr), func() {
|
|
ch := make(chan struct{})
|
|
|
|
go func() {
|
|
mr.Close()
|
|
close(ch)
|
|
}()
|
|
|
|
select {
|
|
case <-ch:
|
|
case <-time.After(time.Second):
|
|
}
|
|
}, nil
|
|
}
|