-
Notifications
You must be signed in to change notification settings - Fork 0
/
mcache_test.go
93 lines (78 loc) · 2.09 KB
/
mcache_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package mcache_test
import (
"context"
"testing"
"github.com/alicebob/miniredis"
"github.com/cgxxv/mcache-go/v2"
"github.com/go-redis/redis/v8"
"github.com/stretchr/testify/assert"
)
const (
runTimes = 1 << 5
)
var (
redisServer *miniredis.Miniredis
redisClient *redis.Client
keys []string
vals []string
)
func init() {
fakeRedis, err := miniredis.Run()
if err != nil {
panic(err)
}
redisServer = fakeRedis
redisClient = redis.NewClient(&redis.Options{Addr: redisServer.Addr()})
for i := 0; i < runTimes; i++ {
keys = append(keys, mcache.RandString(i+10))
vals = append(vals, mcache.RandString(i+11))
}
}
func TestMcacheNoRemote(t *testing.T) {
t.Run("simple cache", runMcacheNoRemote[mcache.SimpleCache])
t.Run("lfu cache", runMcacheNoRemote[mcache.LfuCache])
t.Run("lru cache", runMcacheNoRemote[mcache.LruCache])
t.Run("arc cache", runMcacheNoRemote[mcache.ArcCache])
}
func runMcacheNoRemote[T any, P mcache.CachePolicy[T]](t *testing.T) {
var (
ctx = context.TODO()
cc = mcache.New[T, P](runTimes)
)
for i := 0; i < runTimes; i++ {
err := cc.Set(ctx, keys[i], vals[i])
assert.Nil(t, err)
}
for i := 0; i < runTimes; i++ {
assert.True(t, cc.Exists(ctx, keys[i]))
val, err := cc.Get(ctx, keys[i])
assert.Nil(t, err)
assert.Equal(t, vals[i], val)
}
}
func TestMcacheRemote(t *testing.T) {
t.Run("simple cache", runMcacheRemote[mcache.SimpleCache])
t.Run("lfu cache", runMcacheRemote[mcache.LfuCache])
t.Run("lru cache", runMcacheRemote[mcache.LruCache])
t.Run("arc cache", runMcacheNoRemote[mcache.ArcCache])
}
func runMcacheRemote[T any, P mcache.CachePolicy[T]](t *testing.T) {
var (
ctx = context.TODO()
cc = mcache.New[T, P](runTimes, mcache.WithRedisClient(redisClient))
val interface{}
err error
)
for i := 0; i < runTimes; i++ {
err = cc.Set(ctx, keys[i], vals[i])
assert.Nil(t, err)
}
for i := 0; i < runTimes; i++ {
val = redisClient.Get(ctx, keys[i]).Val()
assert.Equal(t, vals[i], val)
assert.True(t, cc.Exists(ctx, keys[i]))
val, err = cc.Get(ctx, keys[i])
assert.Nil(t, err)
assert.Equal(t, vals[i], val)
}
}