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
|
package redigostore_test
import (
"testing"
"time"
"github.com/garyburd/redigo/redis"
"gopkg.in/throttled/throttled.v2/store/redigostore"
"gopkg.in/throttled/throttled.v2/store/storetest"
)
const (
redisTestDB = 1
redisTestPrefix = "throttled:"
)
func getPool() *redis.Pool {
pool := &redis.Pool{
MaxIdle: 3,
IdleTimeout: 30 * time.Second,
Dial: func() (redis.Conn, error) {
return redis.Dial("tcp", ":6379")
},
TestOnBorrow: func(c redis.Conn, t time.Time) error {
_, err := c.Do("PING")
return err
},
}
return pool
}
func TestRedisStore(t *testing.T) {
c, st := setupRedis(t, 0)
defer c.Close()
defer clearRedis(c)
clearRedis(c)
storetest.TestGCRAStore(t, st)
storetest.TestGCRAStoreTTL(t, st)
}
func BenchmarkRedisStore(b *testing.B) {
c, st := setupRedis(b, 0)
defer c.Close()
defer clearRedis(c)
storetest.BenchmarkGCRAStore(b, st)
}
func clearRedis(c redis.Conn) error {
keys, err := redis.Values(c.Do("KEYS", redisTestPrefix+"*"))
if err != nil {
return err
}
if _, err := redis.Int(c.Do("DEL", keys...)); err != nil {
return err
}
return nil
}
func setupRedis(tb testing.TB, ttl time.Duration) (redis.Conn, *redigostore.RedigoStore) {
pool := getPool()
c := pool.Get()
if _, err := redis.String(c.Do("PING")); err != nil {
c.Close()
tb.Skip("redis server not available on localhost port 6379")
}
if _, err := redis.String(c.Do("SELECT", redisTestDB)); err != nil {
c.Close()
tb.Fatal(err)
}
st, err := redigostore.New(pool, redisTestPrefix, redisTestDB)
if err != nil {
c.Close()
tb.Fatal(err)
}
return c, st
}
|