2 (:refer-clojure :exclude [get set keys type sort])
4 (:use [clojure.contrib.test-is]))
7 (defn server-fixture [f]
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")
25 (use-fixtures :each server-fixture)
28 (is (= "PONG" (redis/ping))))
31 (redis/set "bar" "foo")
32 (is (= "foo" (redis/get "bar")))
33 (redis/set "foo" "baz")
34 (is (= "baz" (redis/get "foo"))))
37 (is (= nil (redis/get "bar")))
38 (is (= "bar" (redis/get "foo"))))
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"))))
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")))
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"))))
63 (is (= 1 (redis/incr "nonexistent")))
64 (is (= 1 (redis/incr "foo")))
65 (is (= 2 (redis/incr "foo"))))
68 (is (= 42 (redis/incrby "nonexistent" 42)))
69 (is (= 0 (redis/incrby "foo" 0)))
70 (is (= 5 (redis/incrby "foo" 5))))
73 (is (= -1 (redis/decr "nonexistent")))
74 (is (= -1 (redis/decr "foo")))
75 (is (= -2 (redis/decr "foo"))))
78 (is (= -42 (redis/decrby "nonexistent" 42)))
79 (is (= 0 (redis/decrby "foo" 0)))
80 (is (= -5 (redis/decrby "foo" 5))))
83 (is (= true (redis/exists "foo")))
84 (is (= false (redis/exists "nonexistent"))))
87 (is (= false (redis/del "nonexistent")))
88 (is (= true (redis/del "foo")))
89 (is (= nil (redis/get "foo"))))
92 (is (= :none (redis/type "nonexistent")))
93 (is (= :string (redis/type "foo")))
94 (is (= :list (redis/type "list")))
95 (is (= :set (redis/type "set"))))
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*")))))
106 (redis/set "foo" "bar")
107 (is (= "foo" (redis/randomkey)))
109 (is (= "" (redis/randomkey))))
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")))
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")))
136 (let [size-before (redis/dbsize)]
137 (redis/set "anewkey" "value")
138 (let [size-after (redis/dbsize)]
140 (+ 1 size-before))))))
143 (is (= true (redis/expire "foo" 1)))
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)))
153 (is (= -1 (redis/ttl "nonexistent")))
154 (is (= -1 (redis/ttl "foo")))
155 (redis/expire "foo" 42)
156 (is (< 40 (redis/ttl "foo"))))
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"))))
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"))))
180 (is (thrown? Exception (redis/llen "foo")))
181 (is (= 0 (redis/llen "newlist")))
182 (is (= 3 (redis/llen "list"))))
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)))
197 (is (thrown? Exception (redis/ltrim "foo" 0 0))))
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))))
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))))
220 (is (thrown? Exception (redis/lrem "foo" 0 "bar")))
221 (is (= 0 (redis/lrem "list" 0 ""))))
225 (is (thrown? Exception (redis/lpop "foo")))
226 (is (= "one" (redis/lpop "list"))))
229 (is (thrown? Exception (redis/rpop "foo")))
230 (is (= "three" (redis/rpop "list"))))
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"))))
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"))))
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"))))
260 (is (thrown? Exception (redis/scard "foo")))
261 (is (= 3 (redis/scard "set"))))
264 (is (thrown? Exception (redis/sismember "foo" "bar")))
265 (is (= false (redis/sismember "set" "blahonga")))
266 (is (= true (redis/sismember "set" "two"))))
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"))))
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"))))
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"))))
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"))))
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"))))
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"))))
320 (is (thrown? Exception (redis/smembers "foo")))
321 (is (= #{"one" "two" "three"} (redis/smembers "set"))))
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")
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"]
347 (is (= ["1" "2" "3" "4"]
348 (redis/sort "ids" :asc)))
349 (is (= ["4" "3" "2" "1"]
350 (redis/sort "ids" :desc)))
352 (redis/sort "ids" :asc :limit 0 2)))
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_*")))
360 (redis/sort "ids" :by "name_*" :alpha :limit 0 2 :desc :get "object_*"))))
365 ;; Multiple database handling commands
369 (is (= nil (redis/get "akeythat_probably_doesnotexsistindb0"))))
373 (is (= 0 (redis/dbsize))))
376 ;; Persistence commands
385 (let [ages-ago (new java.util.Date (long 1))]
386 (is (.before ages-ago (redis/lastsave)))))