]> git.saurik.com Git - redis.git/blob - client-libraries/clojure/src/redis/tests.clj
8add90af61d2849abb1d39b0975d1f5ef0ea7355
[redis.git] / client-libraries / clojure / src / redis / tests.clj
1 (ns redis.tests
2 (:refer-clojure :exclude [get set keys type sort])
3 (:require redis)
4 (:use [clojure.contrib.test-is]))
5
6
7 (defn server-fixture [f]
8 (redis/with-server
9 {:host "127.0.0.1"
10 :port 6379
11 :db 15}
12 ;; String value
13 (redis/set "foo" "bar")
14 ;; List with three items
15 (redis/rpush "list" "one")
16 (redis/rpush "list" "two")
17 (redis/rpush "list" "three")
18 ;; Set with three members
19 (redis/sadd "set" "one")
20 (redis/sadd "set" "two")
21 (redis/sadd "set" "three")
22 (f)
23 (redis/flushdb)))
24
25 (use-fixtures :each server-fixture)
26
27 (deftest ping
28 (is (= "PONG" (redis/ping))))
29
30 (deftest set
31 (redis/set "bar" "foo")
32 (is (= "foo" (redis/get "bar")))
33 (redis/set "foo" "baz")
34 (is (= "baz" (redis/get "foo"))))
35
36 (deftest get
37 (is (= nil (redis/get "bar")))
38 (is (= "bar" (redis/get "foo"))))
39
40 (deftest getset
41 (is (= nil (redis/getset "bar" "foo")))
42 (is (= "foo" (redis/get "bar")))
43 (is (= "bar" (redis/getset "foo" "baz")))
44 (is (= "baz" (redis/get "foo"))))
45
46 (deftest mget
47 (is (= [nil] (redis/mget "bar")))
48 (redis/set "bar" "baz")
49 (redis/set "baz" "buz")
50 (is (= ["bar"] (redis/mget "foo")))
51 (is (= ["bar" "baz"] (redis/mget "foo" "bar")))
52 (is (= ["bar" "baz" "buz"] (redis/mget "foo" "bar" "baz")))
53 (is (= ["bar" nil "buz"] (redis/mget "foo" "bra" "baz")))
54 )
55
56 (deftest setnx
57 (is (= true (redis/setnx "bar" "foo")))
58 (is (= "foo" (redis/get "bar")))
59 (is (= false (redis/setnx "foo" "baz")))
60 (is (= "bar" (redis/get "foo"))))
61
62 (deftest incr
63 (is (= 1 (redis/incr "nonexistent")))
64 (is (= 1 (redis/incr "foo")))
65 (is (= 2 (redis/incr "foo"))))
66
67 (deftest incrby
68 (is (= 42 (redis/incrby "nonexistent" 42)))
69 (is (= 0 (redis/incrby "foo" 0)))
70 (is (= 5 (redis/incrby "foo" 5))))
71
72 (deftest decr
73 (is (= -1 (redis/decr "nonexistent")))
74 (is (= -1 (redis/decr "foo")))
75 (is (= -2 (redis/decr "foo"))))
76
77 (deftest decrby
78 (is (= -42 (redis/decrby "nonexistent" 42)))
79 (is (= 0 (redis/decrby "foo" 0)))
80 (is (= -5 (redis/decrby "foo" 5))))
81
82 (deftest exists
83 (is (= true (redis/exists "foo")))
84 (is (= false (redis/exists "nonexistent"))))
85
86 (deftest del
87 (is (= false (redis/del "nonexistent")))
88 (is (= true (redis/del "foo")))
89 (is (= nil (redis/get "foo"))))
90
91 (deftest type
92 (is (= :none (redis/type "nonexistent")))
93 (is (= :string (redis/type "foo")))
94 (is (= :list (redis/type "list")))
95 (is (= :set (redis/type "set"))))
96
97 (deftest keys
98 (is (= nil (redis/keys "a*")))
99 (is (= ["foo"] (redis/keys "f*")))
100 (is (= ["foo"] (redis/keys "f?o")))
101 (redis/set "fuu" "baz")
102 (is (= #{"foo" "fuu"} (clojure.core/set (redis/keys "f*")))))
103
104 (deftest randomkey
105 (redis/flushdb)
106 (redis/set "foo" "bar")
107 (is (= "foo" (redis/randomkey)))
108 (redis/flushdb)
109 (is (= "" (redis/randomkey))))
110
111 (deftest rename
112 (is (thrown? Exception (redis/rename "foo" "foo")))
113 (is (thrown? Exception (redis/rename "nonexistent" "foo")))
114 (redis/rename "foo" "bar")
115 (is (= "bar" (redis/get "bar")))
116 (is (= nil (redis/get "foo")))
117 (redis/set "foo" "bar")
118 (redis/set "bar" "baz")
119 (redis/rename "foo" "bar")
120 (is (= "bar" (redis/get "bar")))
121 (is (= nil (redis/get "foo")))
122 )
123
124 (deftest renamenx
125 (is (thrown? Exception (redis/renamenx "foo" "foo")))
126 (is (thrown? Exception (redis/renamenx "nonexistent" "foo")))
127 (is (= true (redis/renamenx "foo" "bar")))
128 (is (= "bar" (redis/get "bar")))
129 (is (= nil (redis/get "foo")))
130 (redis/set "foo" "bar")
131 (redis/set "bar" "baz")
132 (is (= false (redis/renamenx "foo" "bar")))
133 )
134
135 (deftest dbsize
136 (let [size-before (redis/dbsize)]
137 (redis/set "anewkey" "value")
138 (let [size-after (redis/dbsize)]
139 (is (= size-after
140 (+ 1 size-before))))))
141
142 (deftest expire
143 (is (= true (redis/expire "foo" 1)))
144 (Thread/sleep 2000)
145 (is (= false (redis/exists "foo")))
146 (redis/set "foo" "bar")
147 (is (= true (redis/expire "foo" 20)))
148 (is (= false (redis/expire "foo" 10)))
149 (is (= false (redis/expire "nonexistent" 42)))
150 )
151
152 (deftest ttl
153 (is (= -1 (redis/ttl "nonexistent")))
154 (is (= -1 (redis/ttl "foo")))
155 (redis/expire "foo" 42)
156 (is (< 40 (redis/ttl "foo"))))
157
158
159 ;;
160 ;; List commands
161 ;;
162 (deftest rpush
163 (is (thrown? Exception (redis/rpush "foo")))
164 (redis/rpush "newlist" "one")
165 (is (= 1 (redis/llen "newlist")))
166 (is (= "one" (redis/lindex "newlist" 0)))
167 (redis/del "newlist")
168 (redis/rpush "list" "item")
169 (is (= "item" (redis/rpop "list"))))
170
171 (deftest lpush
172 (is (thrown? Exception (redis/lpush "foo")))
173 (redis/lpush "newlist" "item")
174 (is (= 1 (redis/llen "newlist")))
175 (is (= "item" (redis/lindex "newlist" 0)))
176 (redis/lpush "list" "item")
177 (is (= "item" (redis/lpop "list"))))
178
179 (deftest llen
180 (is (thrown? Exception (redis/llen "foo")))
181 (is (= 0 (redis/llen "newlist")))
182 (is (= 3 (redis/llen "list"))))
183
184 (deftest lrange
185 (is (thrown? Exception (redis/lrange "foo" 0 1)))
186 (is (= nil (redis/lrange "newlist" 0 42)))
187 (is (= ["one"] (redis/lrange "list" 0 0)))
188 (is (= ["three"] (redis/lrange "list" -1 -1)))
189 (is (= ["one" "two"] (redis/lrange "list" 0 1)))
190 (is (= ["one" "two" "three"] (redis/lrange "list" 0 2)))
191 (is (= ["one" "two" "three"] (redis/lrange "list" 0 42)))
192 (is (= [] (redis/lrange "list" 42 0)))
193 )
194
195 ;; TBD
196 (deftest ltrim
197 (is (thrown? Exception (redis/ltrim "foo" 0 0))))
198
199 (deftest lindex
200 (is (thrown? Exception (redis/lindex "foo" 0)))
201 (is (= nil (redis/lindex "list" 42)))
202 (is (= nil (redis/lindex "list" -4)))
203 (is (= "one" (redis/lindex "list" 0)))
204 (is (= "three" (redis/lindex "list" 2)))
205 (is (= "three" (redis/lindex "list" -1))))
206
207 (deftest lset
208 (is (thrown? Exception (redis/lset "foo" 0 "bar")))
209 (is (thrown? Exception (redis/lset "list" 42 "value")))
210 (redis/lset "list" 0 "test")
211 (is (= "test" (redis/lindex "list" 0)))
212 (redis/lset "list" 2 "test2")
213 (is (= "test2" (redis/lindex "list" 2)))
214 (redis/lset "list" -1 "test3")
215 (is (= "test3" (redis/lindex "list" 2))))
216
217
218 ;; TBD
219 (deftest lrem
220 (is (thrown? Exception (redis/lrem "foo" 0 "bar")))
221 (is (= 0 (redis/lrem "list" 0 ""))))
222
223
224 (deftest lpop
225 (is (thrown? Exception (redis/lpop "foo")))
226 (is (= "one" (redis/lpop "list"))))
227
228 (deftest rpop
229 (is (thrown? Exception (redis/rpop "foo")))
230 (is (= "three" (redis/rpop "list"))))
231
232 ;;
233 ;; Set commands
234 ;;
235 (deftest sadd
236 (is (thrown? Exception (redis/sadd "foo" "bar")))
237 (is (= true (redis/sadd "newset" "member")))
238 (is (= true (redis/sismember "newset" "member")))
239 (is (= false (redis/sadd "set" "two")))
240 (is (= true (redis/sadd "set" "four")))
241 (is (= true (redis/sismember "set" "four"))))
242
243 (deftest srem
244 (is (thrown? Exception (redis/srem "foo" "bar")))
245 (is (thrown? Exception (redis/srem "newset" "member")))
246 (is (= true (redis/srem "set" "two")))
247 (is (= false (redis/sismember "set" "two")))
248 (is (= false (redis/srem "set" "blahonga"))))
249
250 (deftest smove
251 (is (thrown? Exception (redis/smove "foo" "set" "one")))
252 (is (thrown? Exception (redis/smove "set" "foo" "one")))
253 (redis/sadd "set1" "two")
254 (is (= false (redis/smove "set" "set1" "four")))
255 (is (= #{"two"} (redis/smembers "set1")))
256 (is (= true (redis/smove "set" "set1" "one")))
257 (is (= #{"one" "two"} (redis/smembers "set1"))))
258
259 (deftest scard
260 (is (thrown? Exception (redis/scard "foo")))
261 (is (= 3 (redis/scard "set"))))
262
263 (deftest sismember
264 (is (thrown? Exception (redis/sismember "foo" "bar")))
265 (is (= false (redis/sismember "set" "blahonga")))
266 (is (= true (redis/sismember "set" "two"))))
267
268 (deftest sinter
269 (is (thrown? Exception (redis/sinter "foo" "set")))
270 (is (= #{} (redis/sinter "nonexistent")))
271 (redis/sadd "set1" "one")
272 (redis/sadd "set1" "four")
273 (is (= #{"one" "two" "three"} (redis/sinter "set")))
274 (is (= #{"one"} (redis/sinter "set" "set1")))
275 (is (= #{} (redis/sinter "set" "set1" "nonexistent"))))
276
277 (deftest sinterstore
278 (redis/sinterstore "foo" "set")
279 (is (= #{"one" "two" "three"} (redis/smembers "foo")))
280 (redis/sadd "set1" "one")
281 (redis/sadd "set1" "four")
282 (redis/sinterstore "newset" "set" "set1")
283 (is (= #{"one"} (redis/smembers "newset"))))
284
285 (deftest sunion
286 (is (thrown? Exception (redis/sunion "foo" "set")))
287 (is (= #{} (redis/sunion "nonexistent")))
288 (redis/sadd "set1" "one")
289 (redis/sadd "set1" "four")
290 (is (= #{"one" "two" "three"} (redis/sunion "set")))
291 (is (= #{"one" "two" "three" "four"} (redis/sunion "set" "set1")))
292 (is (= #{"one" "two" "three" "four"} (redis/sunion "set" "set1" "nonexistent"))))
293
294 (deftest sunionstore
295 (redis/sunionstore "foo" "set")
296 (is (= #{"one" "two" "three"} (redis/smembers "foo")))
297 (redis/sadd "set1" "one")
298 (redis/sadd "set1" "four")
299 (redis/sunionstore "newset" "set" "set1")
300 (is (= #{"one" "two" "three" "four"} (redis/smembers "newset"))))
301
302 (deftest sdiff
303 (is (thrown? Exception (redis/sdiff "foo" "set")))
304 (is (= #{} (redis/sdiff "nonexistent")))
305 (redis/sadd "set1" "one")
306 (redis/sadd "set1" "four")
307 (is (= #{"one" "two" "three"} (redis/sdiff "set")))
308 (is (= #{"two" "three"} (redis/sdiff "set" "set1")))
309 (is (= #{"two" "three"} (redis/sdiff "set" "set1" "nonexistent"))))
310
311 (deftest sdiffstore
312 (redis/sdiffstore "foo" "set")
313 (is (= #{"one" "two" "three"} (redis/smembers "foo")))
314 (redis/sadd "set1" "one")
315 (redis/sadd "set1" "four")
316 (redis/sdiffstore "newset" "set" "set1")
317 (is (= #{"two" "three"} (redis/smembers "newset"))))
318
319 (deftest smembers
320 (is (thrown? Exception (redis/smembers "foo")))
321 (is (= #{"one" "two" "three"} (redis/smembers "set"))))
322
323
324 ;;
325 ;; Sorting
326 ;;
327 (deftest sort
328 (redis/lpush "ids" 1)
329 (redis/lpush "ids" 4)
330 (redis/lpush "ids" 2)
331 (redis/lpush "ids" 3)
332 (redis/set "object_1" "one")
333 (redis/set "object_2" "two")
334 (redis/set "object_3" "three")
335 (redis/set "object_4" "four")
336 (redis/set "name_1" "Derek")
337 (redis/set "name_2" "Charlie")
338 (redis/set "name_3" "Bob")
339 (redis/set "name_4" "Alice")
340
341 (is (= ["one" "two" "three"]
342 (redis/sort "list")))
343 (is (= ["one" "three" "two"]
344 (redis/sort "list" :alpha)))
345 (is (= ["1" "2" "3" "4"]
346 (redis/sort "ids")))
347 (is (= ["1" "2" "3" "4"]
348 (redis/sort "ids" :asc)))
349 (is (= ["4" "3" "2" "1"]
350 (redis/sort "ids" :desc)))
351 (is (= ["1" "2"]
352 (redis/sort "ids" :asc :limit 0 2)))
353 (is (= ["4" "3"]
354 (redis/sort "ids" :desc :limit 0 2)))
355 (is (= ["4" "3" "2" "1"]
356 (redis/sort "ids" :by "name_*" :alpha)))
357 (is (= ["one" "two" "three" "four"]
358 (redis/sort "ids" :get "object_*")))
359 (is (= ["one" "two"]
360 (redis/sort "ids" :by "name_*" :alpha :limit 0 2 :desc :get "object_*"))))
361
362
363
364 ;;
365 ;; Multiple database handling commands
366 ;;
367 (deftest select
368 (redis/select 0)
369 (is (= nil (redis/get "akeythat_probably_doesnotexsistindb0"))))
370
371 (deftest flushdb
372 (redis/flushdb)
373 (is (= 0 (redis/dbsize))))
374
375 ;;
376 ;; Persistence commands
377 ;;
378 (deftest save
379 (redis/save))
380
381 (deftest bgsave
382 (redis/bgsave))
383
384 (deftest lastsave
385 (let [ages-ago (new java.util.Date (long 1))]
386 (is (.before ages-ago (redis/lastsave)))))
387