X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/12f72a714c6266269b7c9066b7e1349c7682a8e7..e6cca5dba6ad046625c195c9c4f39c7ce06ad080:/test-redis.tcl diff --git a/test-redis.tcl b/test-redis.tcl index c8cb3019..f321258a 100644 --- a/test-redis.tcl +++ b/test-redis.tcl @@ -234,7 +234,7 @@ proc main {server port} { # The following AUTH test should be enabled only when requirepass # is set in redis.conf and redis-server was started with - # redis.conf as the first argument. + # redis.conf as the first argument. #test {AUTH with requirepass in redis.conf} { # $r auth foobared @@ -359,10 +359,18 @@ proc main {server port} { $r incrby novar 17179869184 } {34359738368} - test {INCR against key with spaces (no integer encoded)} { + test {INCR fails against key with spaces (no integer encoded)} { $r set novar " 11 " - $r incr novar - } {12} + catch {$r incr novar} err + format $err + } {ERR*} + + test {INCR fails against a key holding a list} { + $r rpush mylist 1 + catch {$r incr novar} err + $r rpop mylist + format $err + } {ERR*} test {DECRBY over 32bit value with over 32bit increment, negative res} { $r set novar 17179869184 @@ -831,7 +839,7 @@ proc main {server port} { test {SUNION with two sets} { lsort [$r sunion set1 set2] } [lsort -uniq "[$r smembers set1] [$r smembers set2]"] - + test {SINTERSTORE with two sets} { $r sinterstore setres set1 set2 lsort [$r smembers setres] @@ -902,9 +910,9 @@ proc main {server port} { $r lpush mysavelist world $r set myemptykey {} $r set mynormalkey {blablablba} - $r zadd mytestzset a 10 - $r zadd mytestzset b 20 - $r zadd mytestzset c 30 + $r zadd mytestzset 10 a + $r zadd mytestzset 20 b + $r zadd mytestzset 30 c $r save } {OK} @@ -920,7 +928,7 @@ proc main {server port} { } lsort [array names myset] } {a b c} - + test {Create a random list and a random set} { set tosort {} array set seenrand {} @@ -1489,6 +1497,11 @@ proc main {server port} { list [$r zremrangebyrank zset 1 3] [$r zrange zset 0 -1] } {3 {a e}} + test {ZUNION against non-existing key doesn't set destination} { + $r del zseta + list [$r zunion dst_key 1 zseta] [$r exists dst_key] + } {0 0} + test {ZUNION basics} { $r del zseta zsetb zsetc $r zadd zseta 1 a @@ -1609,6 +1622,13 @@ proc main {server port} { set _ $err } {} + test {HGET against non existing key} { + set rv {} + lappend rv [$r hget smallhash __123123123__] + lappend rv [$r hget bighash __123123123__] + set _ $rv + } {{} {}} + test {HSET in update and insert mode} { set rv {} set k [lindex [array names smallhash *] 0] @@ -1626,12 +1646,70 @@ proc main {server port} { set _ $rv } {0 newval1 1 0 newval2 1 1 1} - test {HGET against non existing key} { + test {HMSET wrong number of args} { + catch {$r hmset smallhash key1 val1 key2} err + format $err + } {*wrong number*} + + test {HMSET - small hash} { + set args {} + foreach {k v} [array get smallhash] { + set newval [randstring 0 8 alpha] + set smallhash($k) $newval + lappend args $k $newval + } + $r hmset smallhash {*}$args + } {OK} + + test {HMSET - big hash} { + set args {} + foreach {k v} [array get bighash] { + set newval [randstring 0 8 alpha] + set bighash($k) $newval + lappend args $k $newval + } + $r hmset bighash {*}$args + } {OK} + + test {HMGET against non existing key and fields} { set rv {} - lappend rv [$r hget smallhash __123123123__] - lappend rv [$r hget bighash __123123123__] + lappend rv [$r hmget doesntexist __123123123__ __456456456__] + lappend rv [$r hmget smallhash __123123123__ __456456456__] + lappend rv [$r hmget bighash __123123123__ __456456456__] set _ $rv - } {{} {}} + } {{{} {}} {{} {}} {{} {}}} + + test {HMGET - small hash} { + set keys {} + set vals {} + foreach {k v} [array get smallhash] { + lappend keys $k + lappend vals $v + } + set err {} + set result [$r hmget smallhash {*}$keys] + if {$vals ne $result} { + set err "$vals != $result" + break + } + set _ $err + } {} + + test {HMGET - big hash} { + set keys {} + set vals {} + foreach {k v} [array get bighash] { + lappend keys $k + lappend vals $v + } + set err {} + set result [$r hmget bighash {*}$keys] + if {$vals ne $result} { + set err "$vals != $result" + break + } + set _ $err + } {} test {HKEYS - small hash} { lsort [$r hkeys smallhash] @@ -1697,6 +1775,53 @@ proc main {server port} { $r debug object smallhash } {*hashtable*} + test {HINCRBY against non existing database key} { + $r del htest + list [$r hincrby htest foo 2] + } {2} + + test {HINCRBY against non existing hash key} { + set rv {} + $r hdel smallhash tmp + $r hdel bighash tmp + lappend rv [$r hincrby smallhash tmp 2] + lappend rv [$r hget smallhash tmp] + lappend rv [$r hincrby bighash tmp 2] + lappend rv [$r hget bighash tmp] + } {2 2 2 2} + + test {HINCRBY against hash key created by hincrby itself} { + set rv {} + lappend rv [$r hincrby smallhash tmp 3] + lappend rv [$r hget smallhash tmp] + lappend rv [$r hincrby bighash tmp 3] + lappend rv [$r hget bighash tmp] + } {5 5 5 5} + + test {HINCRBY against hash key originally set with HSET} { + $r hset smallhash tmp 100 + $r hset bighash tmp 100 + list [$r hincrby smallhash tmp 2] [$r hincrby bighash tmp 2] + } {102 102} + + test {HINCRBY over 32bit value} { + $r hset smallhash tmp 17179869184 + $r hset bighash tmp 17179869184 + list [$r hincrby smallhash tmp 1] [$r hincrby bighash tmp 1] + } {17179869185 17179869185} + + test {HINCRBY over 32bit value with over 32bit increment} { + $r hset smallhash tmp 17179869184 + $r hset bighash tmp 17179869184 + list [$r hincrby smallhash tmp 17179869184] [$r hincrby bighash tmp 17179869184] + } {34359738368 34359738368} + + test {HINCRBY against key with spaces (no integer encoded)} { + $r hset smallhash tmp " 11 " + $r hset bighash tmp " 11 " + list [$r hincrby smallhash tmp 1] [$r hincrby bighash tmp 1] + } {12 12} + # TODO: # Randomized test, small and big # .rdb / AOF consistency test should include hashes