276 lines
6.6 KiB
Tcl
276 lines
6.6 KiB
Tcl
start_server {tags {"keyspace"}} {
|
|
test {DEL against a single item} {
|
|
r set x foo
|
|
assert {[r get x] eq "foo"}
|
|
r del x
|
|
r get x
|
|
} {}
|
|
|
|
test {Vararg DEL} {
|
|
r set foo1 a
|
|
r set foo2 b
|
|
r set foo3 c
|
|
list [r del foo1 foo2 foo3 foo4] [r mget foo1 foo2 foo3]
|
|
} {3 {{} {} {}}}
|
|
|
|
test {KEYS with pattern} {
|
|
foreach key {key_x key_y key_z foo_a foo_b foo_c} {
|
|
r set $key hello
|
|
}
|
|
lsort [r keys foo*]
|
|
} {foo_a foo_b foo_c}
|
|
|
|
test {KEYS to get all keys} {
|
|
lsort [r keys *]
|
|
} {foo_a foo_b foo_c key_x key_y key_z}
|
|
|
|
test {DBSIZE} {
|
|
r dbsize
|
|
} {6}
|
|
|
|
test {DEL all keys} {
|
|
foreach key [r keys *] {r del $key}
|
|
r dbsize
|
|
} {0}
|
|
|
|
test "DEL against expired key" {
|
|
r debug set-active-expire 0
|
|
r setex keyExpire 1 valExpire
|
|
after 1100
|
|
assert_equal 0 [r del keyExpire]
|
|
r debug set-active-expire 1
|
|
}
|
|
|
|
test {EXISTS} {
|
|
set res {}
|
|
r set newkey test
|
|
append res [r exists newkey]
|
|
r del newkey
|
|
append res [r exists newkey]
|
|
} {10}
|
|
|
|
test {Zero length value in key. SET/GET/EXISTS} {
|
|
r set emptykey {}
|
|
set res [r get emptykey]
|
|
append res [r exists emptykey]
|
|
r del emptykey
|
|
append res [r exists emptykey]
|
|
} {10}
|
|
|
|
test {Commands pipelining} {
|
|
set fd [r channel]
|
|
puts -nonewline $fd "SET k1 xyzk\r\nGET k1\r\nPING\r\n"
|
|
flush $fd
|
|
set res {}
|
|
append res [string match OK* [r read]]
|
|
append res [r read]
|
|
append res [string match PONG* [r read]]
|
|
format $res
|
|
} {1xyzk1}
|
|
|
|
test {Non existing command} {
|
|
catch {r foobaredcommand} err
|
|
string match ERR* $err
|
|
} {1}
|
|
|
|
test {RENAME basic usage} {
|
|
r set mykey hello
|
|
r rename mykey mykey1
|
|
r rename mykey1 mykey2
|
|
r get mykey2
|
|
} {hello}
|
|
|
|
test {RENAME source key should no longer exist} {
|
|
r exists mykey
|
|
} {0}
|
|
|
|
test {RENAME against already existing key} {
|
|
r set mykey a
|
|
r set mykey2 b
|
|
r rename mykey2 mykey
|
|
set res [r get mykey]
|
|
append res [r exists mykey2]
|
|
} {b0}
|
|
|
|
test {RENAMENX basic usage} {
|
|
r del mykey
|
|
r del mykey2
|
|
r set mykey foobar
|
|
r renamenx mykey mykey2
|
|
set res [r get mykey2]
|
|
append res [r exists mykey]
|
|
} {foobar0}
|
|
|
|
test {RENAMENX against already existing key} {
|
|
r set mykey foo
|
|
r set mykey2 bar
|
|
r renamenx mykey mykey2
|
|
} {0}
|
|
|
|
test {RENAMENX against already existing key (2)} {
|
|
set res [r get mykey]
|
|
append res [r get mykey2]
|
|
} {foobar}
|
|
|
|
test {RENAME against non existing source key} {
|
|
catch {r rename nokey foobar} err
|
|
format $err
|
|
} {ERR*}
|
|
|
|
test {RENAME where source and dest key are the same (existing)} {
|
|
r set mykey foo
|
|
r rename mykey mykey
|
|
} {OK}
|
|
|
|
test {RENAMENX where source and dest key are the same (existing)} {
|
|
r set mykey foo
|
|
r renamenx mykey mykey
|
|
} {0}
|
|
|
|
test {RENAME where source and dest key are the same (non existing)} {
|
|
r del mykey
|
|
catch {r rename mykey mykey} err
|
|
format $err
|
|
} {ERR*}
|
|
|
|
test {RENAME with volatile key, should move the TTL as well} {
|
|
r del mykey mykey2
|
|
r set mykey foo
|
|
r expire mykey 100
|
|
assert {[r ttl mykey] > 95 && [r ttl mykey] <= 100}
|
|
r rename mykey mykey2
|
|
assert {[r ttl mykey2] > 95 && [r ttl mykey2] <= 100}
|
|
}
|
|
|
|
test {RENAME with volatile key, should not inherit TTL of target key} {
|
|
r del mykey mykey2
|
|
r set mykey foo
|
|
r set mykey2 bar
|
|
r expire mykey2 100
|
|
assert {[r ttl mykey] == -1 && [r ttl mykey2] > 0}
|
|
r rename mykey mykey2
|
|
r ttl mykey2
|
|
} {-1}
|
|
|
|
test {DEL all keys again (DB 0)} {
|
|
foreach key [r keys *] {
|
|
r del $key
|
|
}
|
|
r dbsize
|
|
} {0}
|
|
|
|
test {DEL all keys again (DB 1)} {
|
|
r select 10
|
|
foreach key [r keys *] {
|
|
r del $key
|
|
}
|
|
set res [r dbsize]
|
|
r select 9
|
|
format $res
|
|
} {0}
|
|
|
|
test {MOVE basic usage} {
|
|
r set mykey foobar
|
|
r move mykey 10
|
|
set res {}
|
|
lappend res [r exists mykey]
|
|
lappend res [r dbsize]
|
|
r select 10
|
|
lappend res [r get mykey]
|
|
lappend res [r dbsize]
|
|
r select 9
|
|
format $res
|
|
} [list 0 0 foobar 1]
|
|
|
|
test {MOVE against key existing in the target DB} {
|
|
r set mykey hello
|
|
r move mykey 10
|
|
} {0}
|
|
|
|
test {MOVE against non-integer DB (#1428)} {
|
|
r set mykey hello
|
|
catch {r move mykey notanumber} e
|
|
set e
|
|
} {*ERR*index out of range}
|
|
|
|
test {MOVE can move key expire metadata as well} {
|
|
r select 10
|
|
r flushdb
|
|
r select 9
|
|
r set mykey foo ex 100
|
|
r move mykey 10
|
|
assert {[r ttl mykey] == -2}
|
|
r select 10
|
|
assert {[r ttl mykey] > 0 && [r ttl mykey] <= 100}
|
|
assert {[r get mykey] eq "foo"}
|
|
r select 9
|
|
}
|
|
|
|
test {MOVE does not create an expire if it does not exist} {
|
|
r select 10
|
|
r flushdb
|
|
r select 9
|
|
r set mykey foo
|
|
r move mykey 10
|
|
assert {[r ttl mykey] == -2}
|
|
r select 10
|
|
assert {[r ttl mykey] == -1}
|
|
assert {[r get mykey] eq "foo"}
|
|
r select 9
|
|
}
|
|
|
|
test {SET/GET keys in different DBs} {
|
|
r set a hello
|
|
r set b world
|
|
r select 10
|
|
r set a foo
|
|
r set b bared
|
|
r select 9
|
|
set res {}
|
|
lappend res [r get a]
|
|
lappend res [r get b]
|
|
r select 10
|
|
lappend res [r get a]
|
|
lappend res [r get b]
|
|
r select 9
|
|
format $res
|
|
} {hello world foo bared}
|
|
|
|
test {RANDOMKEY} {
|
|
r flushdb
|
|
r set foo x
|
|
r set bar y
|
|
set foo_seen 0
|
|
set bar_seen 0
|
|
for {set i 0} {$i < 100} {incr i} {
|
|
set rkey [r randomkey]
|
|
if {$rkey eq {foo}} {
|
|
set foo_seen 1
|
|
}
|
|
if {$rkey eq {bar}} {
|
|
set bar_seen 1
|
|
}
|
|
}
|
|
list $foo_seen $bar_seen
|
|
} {1 1}
|
|
|
|
test {RANDOMKEY against empty DB} {
|
|
r flushdb
|
|
r randomkey
|
|
} {}
|
|
|
|
test {RANDOMKEY regression 1} {
|
|
r flushdb
|
|
r set x 10
|
|
r del x
|
|
r randomkey
|
|
} {}
|
|
|
|
test {KEYS * two times with long key, Github issue #1208} {
|
|
r flushdb
|
|
r set dlskeriewrioeuwqoirueioqwrueoqwrueqw test
|
|
r keys *
|
|
r keys *
|
|
} {dlskeriewrioeuwqoirueioqwrueoqwrueqw}
|
|
}
|