1 start_server 
{tags 
{"basic"}} { 
   2     test 
{DEL all keys to start with a clean DB
} { 
   3         foreach key 
[r keys 
*] {r del 
$key} 
   7     test 
{SET and GET an item
} { 
  12     test 
{SET and GET an empty item
} { 
  17     test 
{DEL against a single item
} { 
  26         list [r del foo1 foo2 foo3 foo4
] [r mget foo1 foo2 foo3
] 
  29     test 
{KEYS with pattern
} { 
  30         foreach key 
{key_x key_y key_z foo_a foo_b foo_c
} { 
  36     test 
{KEYS to get all keys
} { 
  38     } {foo_a foo_b foo_c key_x key_y key_z
} 
  45         foreach key 
[r keys 
*] {r del 
$key} 
  49     test 
{Very big payload in GET
/SET
} { 
  50         set buf 
[string repeat 
"abcd" 1000000] 
  53     } [string repeat 
"abcd" 1000000] 
  56         test 
{Very big payload random access
} { 
  59             for {set j 
0} {$j < 100} {incr j
} { 
  60                 set size 
[expr 1+[randomInt 
100000]] 
  61                 set buf 
[string repeat 
"pl-$j" $size] 
  63                 r 
set bigpayload_
$j $buf 
  65             for {set j 
0} {$j < 1000} {incr j
} { 
  66                 set index 
[randomInt 
100] 
  67                 set buf 
[r get bigpayload_
$index] 
  68                 if {$buf != $payload($index)} { 
  69                     set err 
"Values differ: I set '$payload($index)' but I read back '$buf'" 
  77         test 
{SET 
10000 numeric keys and access all them in reverse order
} { 
  79             for {set x 
0} {$x < 10000} {incr x
} { 
  83             for {set x 
9999} {$x >= 0} {incr x 
-1} { 
  86                     set err 
"Eleemnt at position $x is $val instead of $x" 
  93         test 
{DBSIZE should be 
10101 now
} { 
  98     test 
{INCR against non existing key
} { 
 100         append res 
[r 
incr novar
] 
 101         append res 
[r get novar
] 
 104     test 
{INCR against key created by 
incr itself
} { 
 108     test 
{INCR against key originally 
set with SET
} { 
 113     test 
{INCR over 
32bit value
} { 
 114         r 
set novar 
17179869184 
 118     test 
{INCRBY over 
32bit value with over 
32bit increment
} { 
 119         r 
set novar 
17179869184 
 120         r incrby novar 
17179869184 
 123     test 
{INCR fails against key with spaces 
(no integer encoded
)} { 
 125         catch {r 
incr novar
} err
 
 129     test 
{INCR fails against a key holding a 
list} { 
 131         catch {r 
incr mylist
} err
 
 136     test 
{DECRBY over 
32bit value with over 
32bit increment
, negative res
} { 
 137         r 
set novar 
17179869184 
 138         r decrby novar 
17179869185 
 141     test 
{SETNX target key missing
} { 
 142         r setnx novar2 foobared
 
 146     test 
{SETNX target key exists
} { 
 147         r setnx novar2 blabla
 
 151     test 
{SETNX against volatile key
} { 
 154         list [r setnx x 
20] [r get x
] 
 160         append res 
[r exists newkey
] 
 162         append res 
[r exists newkey
] 
 165     test 
{Zero length value in key. SET
/GET
/EXISTS
} { 
 167         set res 
[r get emptykey
] 
 168         append res 
[r exists emptykey
] 
 170         append res 
[r exists emptykey
] 
 173     test 
{Commands pipelining
} { 
 175         puts -nonewline $fd "SET k1 4\r\nxyzk\r\nGET k1\r\nPING\r\n" 
 178         append res 
[string match OK
* [::redis::redis_read_reply $fd]] 
 179         append res 
[::redis::redis_read_reply $fd] 
 180         append res 
[string match PONG
* [::redis::redis_read_reply $fd]] 
 184     test 
{Non existing command
} { 
 185         catch {r foobaredcommand
} err
 
 186         string match ERR
* $err 
 189     test 
{RENAME basic usage
} { 
 191         r 
rename mykey mykey1
 
 192         r 
rename mykey1 mykey2
 
 196     test 
{RENAME 
source key should no longer exist
} { 
 200     test 
{RENAME against already existing key
} { 
 203         r 
rename mykey2 mykey
 
 204         set res 
[r get mykey
] 
 205         append res 
[r exists mykey2
] 
 208     test 
{RENAMENX basic usage
} { 
 212         r renamenx mykey mykey2
 
 213         set res 
[r get mykey2
] 
 214         append res 
[r exists mykey
] 
 217     test 
{RENAMENX against already existing key
} { 
 220         r renamenx mykey mykey2
 
 223     test 
{RENAMENX against already existing key 
(2)} { 
 224         set res 
[r get mykey
] 
 225         append res 
[r get mykey2
] 
 228     test 
{RENAME against non existing 
source key
} { 
 229         catch {r 
rename nokey foobar
} err
 
 233     test 
{RENAME where 
source and dest key is the same
} { 
 234         catch {r 
rename mykey mykey
} err
 
 238     test 
{DEL all keys again 
(DB 
0)} { 
 239         foreach key 
[r keys 
*] { 
 245     test 
{DEL all keys again 
(DB 
1)} { 
 247         foreach key 
[r keys 
*] { 
 255     test 
{MOVE basic usage
} { 
 259         lappend res 
[r exists mykey
] 
 260         lappend res 
[r dbsize
] 
 262         lappend res 
[r get mykey
] 
 263         lappend res 
[r dbsize
] 
 266     } [list 0 0 foobar 
1] 
 268     test 
{MOVE against key existing in the target DB
} { 
 273     test 
{SET
/GET keys in different DBs
} { 
 281         lappend res 
[r get a
] 
 282         lappend res 
[r get b
] 
 284         lappend res 
[r get a
] 
 285         lappend res 
[r get b
] 
 288     } {hello world foo bared
} 
 297     test 
{MGET against non existing key
} { 
 301     test 
{MGET against non-string key
} { 
 304         r mget foo baazz bar myset
 
 313         for {set i 
0} {$i < 100} {incr i
} { 
 314             set rkey 
[r randomkey
] 
 315             if {$rkey eq 
{foo
}} { 
 318             if {$rkey eq 
{bar
}} { 
 322         list $foo_seen $bar_seen 
 325     test 
{RANDOMKEY against empty DB
} { 
 330     test 
{RANDOMKEY regression 
1} { 
 337     test 
{GETSET 
(set new value
)} { 
 338         list [r getset foo xyz
] [r get foo
] 
 341     test 
{GETSET 
(replace old value
)} { 
 343         list [r getset foo xyz
] [r get foo
] 
 346     test 
{MSET base case
} { 
 347         r mset x 
10 y 
"foo bar" z 
"x x x x x x x\n\n\r\n" 
 349     } [list 10 {foo bar
} "x x x x x x x\n\n\r\n"] 
 351     test 
{MSET wrong number of args
} { 
 352         catch {r mset x 
10 y 
"foo bar" z
} err
 
 356     test 
{MSETNX with already existent key
} { 
 357         list [r msetnx x1 xxx y2 yyy x 
20] [r exists x1
] [r exists y2
] 
 360     test 
{MSETNX with not existing keys
} { 
 361         list [r msetnx x1 xxx y2 yyy
] [r get x1
] [r get y2
] 
 364     test 
{STRLEN against non existing key
} { 
 368     test 
{STRLEN against integer
} { 
 373     test 
{STRLEN against plain 
string} { 
 374         r 
set mystring 
"foozzz0123456789 baz"