1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package redis_test
16
17 import (
18 "fmt"
19 "reflect"
20 "testing"
21
22 "github.com/gomodule/redigo/redis"
23 )
24
25 type valueError struct {
26 v interface{}
27 err error
28 }
29
30 func ve(v interface{}, err error) valueError {
31 return valueError{v, err}
32 }
33
34 var replyTests = []struct {
35 name interface{}
36 actual valueError
37 expected valueError
38 }{
39 {
40 "ints([[]byte, []byte])",
41 ve(redis.Ints([]interface{}{[]byte("4"), []byte("5")}, nil)),
42 ve([]int{4, 5}, nil),
43 },
44 {
45 "ints([nt64, int64])",
46 ve(redis.Ints([]interface{}{int64(4), int64(5)}, nil)),
47 ve([]int{4, 5}, nil),
48 },
49 {
50 "ints([[]byte, nil, []byte])",
51 ve(redis.Ints([]interface{}{[]byte("4"), nil, []byte("5")}, nil)),
52 ve([]int{4, 0, 5}, nil),
53 },
54 {
55 "ints(nil)",
56 ve(redis.Ints(nil, nil)),
57 ve([]int(nil), redis.ErrNil),
58 },
59 {
60 "int64s([[]byte, []byte])",
61 ve(redis.Int64s([]interface{}{[]byte("4"), []byte("5")}, nil)),
62 ve([]int64{4, 5}, nil),
63 },
64 {
65 "int64s([int64, int64])",
66 ve(redis.Int64s([]interface{}{int64(4), int64(5)}, nil)),
67 ve([]int64{4, 5}, nil),
68 },
69 {
70 "strings([[]byte, []bytev2])",
71 ve(redis.Strings([]interface{}{[]byte("v1"), []byte("v2")}, nil)),
72 ve([]string{"v1", "v2"}, nil),
73 },
74 {
75 "strings([string, string])",
76 ve(redis.Strings([]interface{}{"v1", "v2"}, nil)),
77 ve([]string{"v1", "v2"}, nil),
78 },
79 {
80 "byteslices([v1, v2])",
81 ve(redis.ByteSlices([]interface{}{[]byte("v1"), []byte("v2")}, nil)),
82 ve([][]byte{[]byte("v1"), []byte("v2")}, nil),
83 },
84 {
85 "float64s([v1, v2])",
86 ve(redis.Float64s([]interface{}{[]byte("1.234"), []byte("5.678")}, nil)),
87 ve([]float64{1.234, 5.678}, nil),
88 },
89 {
90 "values([v1, v2])",
91 ve(redis.Values([]interface{}{[]byte("v1"), []byte("v2")}, nil)),
92 ve([]interface{}{[]byte("v1"), []byte("v2")}, nil),
93 },
94 {
95 "values(nil)",
96 ve(redis.Values(nil, nil)),
97 ve([]interface{}(nil), redis.ErrNil),
98 },
99 {
100 "float64(1.0)",
101 ve(redis.Float64([]byte("1.0"), nil)),
102 ve(float64(1.0), nil),
103 },
104 {
105 "float64(nil)",
106 ve(redis.Float64(nil, nil)),
107 ve(float64(0.0), redis.ErrNil),
108 },
109 {
110 "uint64(1)",
111 ve(redis.Uint64(int64(1), nil)),
112 ve(uint64(1), nil),
113 },
114 {
115 "uint64(-1)",
116 ve(redis.Uint64(int64(-1), nil)),
117 ve(uint64(0), redis.ErrNegativeInt),
118 },
119 {
120 "positions([[1, 2], nil, [3, 4]])",
121 ve(redis.Positions([]interface{}{[]interface{}{[]byte("1"), []byte("2")}, nil, []interface{}{[]byte("3"), []byte("4")}}, nil)),
122 ve([]*[2]float64{{1.0, 2.0}, nil, {3.0, 4.0}}, nil),
123 },
124 }
125
126 func TestReply(t *testing.T) {
127 for _, rt := range replyTests {
128 if rt.actual.err != rt.expected.err {
129 t.Errorf("%s returned err %v, want %v", rt.name, rt.actual.err, rt.expected.err)
130 continue
131 }
132 if !reflect.DeepEqual(rt.actual.v, rt.expected.v) {
133 t.Errorf("%s=%+v, want %+v", rt.name, rt.actual.v, rt.expected.v)
134 }
135 }
136 }
137
138
139 func dial() (redis.Conn, error) {
140 return redis.DialDefaultServer()
141 }
142
143
144 func serverAddr() (string, error) {
145 return redis.DefaultServerAddr()
146 }
147
148 func ExampleBool() {
149 c, err := dial()
150 if err != nil {
151 fmt.Println(err)
152 return
153 }
154 defer c.Close()
155
156 c.Do("SET", "foo", 1)
157 exists, _ := redis.Bool(c.Do("EXISTS", "foo"))
158 fmt.Printf("%#v\n", exists)
159
160
161 }
162
163 func ExampleInt() {
164 c, err := dial()
165 if err != nil {
166 fmt.Println(err)
167 return
168 }
169 defer c.Close()
170
171 c.Do("SET", "k1", 1)
172 n, _ := redis.Int(c.Do("GET", "k1"))
173 fmt.Printf("%#v\n", n)
174 n, _ = redis.Int(c.Do("INCR", "k1"))
175 fmt.Printf("%#v\n", n)
176
177
178
179 }
180
181 func ExampleInts() {
182 c, err := dial()
183 if err != nil {
184 fmt.Println(err)
185 return
186 }
187 defer c.Close()
188
189 c.Do("SADD", "set_with_integers", 4, 5, 6)
190 ints, _ := redis.Ints(c.Do("SMEMBERS", "set_with_integers"))
191 fmt.Printf("%#v\n", ints)
192
193
194 }
195
196 func ExampleString() {
197 c, err := dial()
198 if err != nil {
199 fmt.Println(err)
200 return
201 }
202 defer c.Close()
203
204 c.Do("SET", "hello", "world")
205 s, err := redis.String(c.Do("GET", "hello"))
206 fmt.Printf("%#v\n", s)
207
208
209 }
210
View as plain text