diff options
Diffstat (limited to 'examples/redis-unstable/tests/unit/dump.tcl')
| -rw-r--r-- | examples/redis-unstable/tests/unit/dump.tcl | 440 |
1 files changed, 0 insertions, 440 deletions
diff --git a/examples/redis-unstable/tests/unit/dump.tcl b/examples/redis-unstable/tests/unit/dump.tcl deleted file mode 100644 index a03c846..0000000 --- a/examples/redis-unstable/tests/unit/dump.tcl +++ /dev/null @@ -1,440 +0,0 @@ -start_server {tags {"dump"}} { - test {DUMP / RESTORE are able to serialize / unserialize a simple key} { - r set foo bar - set encoded [r dump foo] - r del foo - list [r exists foo] [r restore foo 0 $encoded] [r ttl foo] [r get foo] - } {0 OK -1 bar} - - test {RESTORE can set an arbitrary expire to the materialized key} { - r set foo bar - set encoded [r dump foo] - r del foo - r restore foo 5000 $encoded - set ttl [r pttl foo] - assert_range $ttl 3000 5000 - r get foo - } {bar} - - test {RESTORE can set an expire that overflows a 32 bit integer} { - r set foo bar - set encoded [r dump foo] - r del foo - r restore foo 2569591501 $encoded - set ttl [r pttl foo] - assert_range $ttl (2569591501-3000) 2569591501 - r get foo - } {bar} - - test {RESTORE can set an absolute expire} { - r set foo bar - set encoded [r dump foo] - r del foo - set now [clock milliseconds] - r restore foo [expr $now+3000] $encoded absttl - set ttl [r pttl foo] - assert_range $ttl 2000 3100 - r get foo - } {bar} - - test {RESTORE with ABSTTL in the past} { - r set foo bar - set encoded [r dump foo] - set now [clock milliseconds] - r debug set-active-expire 0 - r restore foo [expr $now-3000] $encoded absttl REPLACE - catch {r debug object foo} e - r debug set-active-expire 1 - set e - } {ERR no such key} {needs:debug} - - test {RESTORE can set LRU} { - r set foo bar - set encoded [r dump foo] - r del foo - r config set maxmemory-policy allkeys-lru - r restore foo 0 $encoded idletime 1000 - set idle [r object idletime foo] - assert {$idle >= 1000 && $idle <= 1010} - assert_equal [r get foo] {bar} - r config set maxmemory-policy noeviction - } {OK} {needs:config-maxmemory} - - test {RESTORE with TTL maintain valid object} { - # RESTORE Creates a string with TTL in two steps. The second step potentially - # reallocates the object. Access the object and verify it is not corrupted - r del foo - r set foo bar - set encoded [r dump foo] - # Iterate several times and verify it is consistent - for {set i 0} {$i < 100} {incr i} { - r del foo - r restore foo 1000 $encoded IDLETIME 500 - assert_equal [r get foo] {bar} - } - } - - test {RESTORE can set LFU} { - r set foo bar - set encoded [r dump foo] - r del foo - r config set maxmemory-policy allkeys-lfu - r restore foo 0 $encoded freq 100 - - # We need to determine whether the `object` operation happens within the same minute or crosses into a new one - # This will help us verify if the freq remains 100 or decays due to a minute transition - set start [clock format [clock seconds] -format %M] - set freq [r object freq foo] - set end [clock format [clock seconds] -format %M] - - if { $start == $end } { - # If the minutes haven't changed (i.e., the restore and object happened within the same minute), - # the freq should remain 100 as no decay has occurred yet. - assert {$freq == 100} - } else { - # If the object operation crosses into a new minute, freq may have already decayed by 1 (99), - # or it may still be 100 if the minute update hasn't been applied yet when the operation is performed. - # The decay might only take effect after the operation completes and the minute is updated. - assert {($freq == 100) || ($freq == 99)} - } - - r get foo - assert_equal [r get foo] {bar} - r config set maxmemory-policy noeviction - } {OK} {needs:config-maxmemory} - - test {RESTORE returns an error of the key already exists} { - r set foo bar - set e {} - catch {r restore foo 0 "..."} e - set e - } {*BUSYKEY*} - - test {RESTORE can overwrite an existing key with REPLACE} { - r set foo bar1 - set encoded1 [r dump foo] - r set foo bar2 - set encoded2 [r dump foo] - r del foo - r restore foo 0 $encoded1 - r restore foo 0 $encoded2 replace - r get foo - } {bar2} - - test {RESTORE can detect a syntax error for unrecognized options} { - catch {r restore foo 0 "..." invalid-option} e - set e - } {*syntax*} - - test {RESTORE should not store key that are already expired, with REPLACE will propagate it as DEL or UNLINK} { - r del key1{t} key2{t} - r set key1{t} value2 - r lpush key2{t} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 - - r set key{t} value - set encoded [r dump key{t}] - set now [clock milliseconds] - - set repl [attach_to_replication_stream] - - # Keys that have expired will not be stored. - r config set lazyfree-lazy-server-del no - assert_equal {OK} [r restore key1{t} [expr $now-5000] $encoded replace absttl] - r config set lazyfree-lazy-server-del yes - assert_equal {OK} [r restore key2{t} [expr $now-5000] $encoded replace absttl] - assert_equal {0} [r exists key1{t} key2{t}] - - # Verify the propagate of DEL and UNLINK. - assert_replication_stream $repl { - {select *} - {del key1{t}} - {unlink key2{t}} - } - - close_replication_stream $repl - } {} {needs:repl} - - test {DUMP of non existing key returns nil} { - r dump nonexisting_key - } {} - - test {MIGRATE is caching connections} { - # Note, we run this as first test so that the connection cache - # is empty. - set first [srv 0 client] - r set key "Some Value" - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - assert_match {*migrate_cached_sockets:0*} [r -1 info] - r -1 migrate $second_host $second_port key 9 1000 - assert_match {*migrate_cached_sockets:1*} [r -1 info] - } - } {} {external:skip} - - test {MIGRATE cached connections are released after some time} { - after 15000 - assert_match {*migrate_cached_sockets:0*} [r info] - } - - test {MIGRATE is able to migrate a key between two instances} { - set first [srv 0 client] - r set key "Some Value" - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - assert {[$first exists key] == 1} - assert {[$second exists key] == 0} - set ret [r -1 migrate $second_host $second_port key 9 5000] - assert {$ret eq {OK}} - assert {[$first exists key] == 0} - assert {[$second exists key] == 1} - assert {[$second get key] eq {Some Value}} - assert {[$second ttl key] == -1} - } - } {} {external:skip} - - test {MIGRATE is able to copy a key between two instances} { - set first [srv 0 client] - r del list - r lpush list a b c d - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - assert {[$first exists list] == 1} - assert {[$second exists list] == 0} - set ret [r -1 migrate $second_host $second_port list 9 5000 copy] - assert {$ret eq {OK}} - assert {[$first exists list] == 1} - assert {[$second exists list] == 1} - assert {[$first lrange list 0 -1] eq [$second lrange list 0 -1]} - } - } {} {external:skip} - - test {MIGRATE will not overwrite existing keys, unless REPLACE is used} { - set first [srv 0 client] - r del list - r lpush list a b c d - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - assert {[$first exists list] == 1} - assert {[$second exists list] == 0} - $second set list somevalue - catch {r -1 migrate $second_host $second_port list 9 5000 copy} e - assert_match {ERR*} $e - set ret [r -1 migrate $second_host $second_port list 9 5000 copy replace] - assert {$ret eq {OK}} - assert {[$first exists list] == 1} - assert {[$second exists list] == 1} - assert {[$first lrange list 0 -1] eq [$second lrange list 0 -1]} - } - } {} {external:skip} - - test {MIGRATE propagates TTL correctly} { - set first [srv 0 client] - r set key "Some Value" - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - assert {[$first exists key] == 1} - assert {[$second exists key] == 0} - $first expire key 10 - set ret [r -1 migrate $second_host $second_port key 9 5000] - assert {$ret eq {OK}} - assert {[$first exists key] == 0} - assert {[$second exists key] == 1} - assert {[$second get key] eq {Some Value}} - assert {[$second ttl key] >= 7 && [$second ttl key] <= 10} - } - } {} {external:skip} - - test {MIGRATE can correctly transfer large values} { - set first [srv 0 client] - r del key - for {set j 0} {$j < 40000} {incr j} { - r rpush key 1 2 3 4 5 6 7 8 9 10 - r rpush key "item 1" "item 2" "item 3" "item 4" "item 5" \ - "item 6" "item 7" "item 8" "item 9" "item 10" - } - assert {[string length [r dump key]] > (1024*64)} - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - assert {[$first exists key] == 1} - assert {[$second exists key] == 0} - set ret [r -1 migrate $second_host $second_port key 9 10000] - assert {$ret eq {OK}} - assert {[$first exists key] == 0} - assert {[$second exists key] == 1} - assert {[$second ttl key] == -1} - assert {[$second llen key] == 40000*20} - } - } {} {external:skip} - - test {MIGRATE can correctly transfer hashes} { - set first [srv 0 client] - r del key - r hmset key field1 "item 1" field2 "item 2" field3 "item 3" \ - field4 "item 4" field5 "item 5" field6 "item 6" - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - assert {[$first exists key] == 1} - assert {[$second exists key] == 0} - set ret [r -1 migrate $second_host $second_port key 9 10000] - assert {$ret eq {OK}} - assert {[$first exists key] == 0} - assert {[$second exists key] == 1} - assert {[$second ttl key] == -1} - } - } {} {external:skip} - - test {MIGRATE timeout actually works} { - set first [srv 0 client] - r set key "Some Value" - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - assert {[$first exists key] == 1} - assert {[$second exists key] == 0} - - set rd [redis_deferring_client] - $rd debug sleep 1.0 ; # Make second server unable to reply. - set e {} - catch {r -1 migrate $second_host $second_port key 9 500} e - assert_match {IOERR*} $e - } - } {} {external:skip} - - test {MIGRATE can migrate multiple keys at once} { - set first [srv 0 client] - r set key1 "v1" - r set key2 "v2" - r set key3 "v3" - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - assert {[$first exists key1] == 1} - assert {[$second exists key1] == 0} - set ret [r -1 migrate $second_host $second_port "" 9 5000 keys key1 key2 key3] - assert {$ret eq {OK}} - assert {[$first exists key1] == 0} - assert {[$first exists key2] == 0} - assert {[$first exists key3] == 0} - assert {[$second get key1] eq {v1}} - assert {[$second get key2] eq {v2}} - assert {[$second get key3] eq {v3}} - } - } {} {external:skip} - - test {MIGRATE with multiple keys must have empty key arg} { - catch {r MIGRATE 127.0.0.1 6379 NotEmpty 9 5000 keys a b c} e - set e - } {*empty string*} {external:skip} - - test {MIGRATE with multiple keys migrate just existing ones} { - set first [srv 0 client] - r set key1 "v1" - r set key2 "v2" - r set key3 "v3" - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - set ret [r -1 migrate $second_host $second_port "" 9 5000 keys nokey-1 nokey-2 nokey-2] - assert {$ret eq {NOKEY}} - - assert {[$first exists key1] == 1} - assert {[$second exists key1] == 0} - set ret [r -1 migrate $second_host $second_port "" 9 5000 keys nokey-1 key1 nokey-2 key2 nokey-3 key3] - assert {$ret eq {OK}} - assert {[$first exists key1] == 0} - assert {[$first exists key2] == 0} - assert {[$first exists key3] == 0} - assert {[$second get key1] eq {v1}} - assert {[$second get key2] eq {v2}} - assert {[$second get key3] eq {v3}} - } - } {} {external:skip} - - test {MIGRATE with multiple keys: stress command rewriting} { - set first [srv 0 client] - r flushdb - r mset a 1 b 2 c 3 d 4 c 5 e 6 f 7 g 8 h 9 i 10 l 11 m 12 n 13 o 14 p 15 q 16 - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - set ret [r -1 migrate $second_host $second_port "" 9 5000 keys a b c d e f g h i l m n o p q] - - assert {[$first dbsize] == 0} - assert {[$second dbsize] == 15} - } - } {} {external:skip} - - test {MIGRATE with multiple keys: delete just ack keys} { - set first [srv 0 client] - r flushdb - r mset a 1 b 2 c 3 d 4 c 5 e 6 f 7 g 8 h 9 i 10 l 11 m 12 n 13 o 14 p 15 q 16 - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - - $second mset c _ d _; # Two busy keys and no REPLACE used - - catch {r -1 migrate $second_host $second_port "" 9 5000 keys a b c d e f g h i l m n o p q} e - - assert {[$first dbsize] == 2} - assert {[$second dbsize] == 15} - assert {[$first exists c] == 1} - assert {[$first exists d] == 1} - } - } {} {external:skip} - - test {MIGRATE AUTH: correct and wrong password cases} { - set first [srv 0 client] - r del list - r lpush list a b c d - start_server {tags {"repl"}} { - set second [srv 0 client] - set second_host [srv 0 host] - set second_port [srv 0 port] - $second config set requirepass foobar - $second auth foobar - - assert {[$first exists list] == 1} - assert {[$second exists list] == 0} - set ret [r -1 migrate $second_host $second_port list 9 5000 AUTH foobar] - assert {$ret eq {OK}} - assert {[$second exists list] == 1} - assert {[$second lrange list 0 -1] eq {d c b a}} - - r -1 lpush list a b c d - $second config set requirepass foobar2 - catch {r -1 migrate $second_host $second_port list 9 5000 AUTH foobar} err - assert_match {*WRONGPASS*} $err - } - } {} {external:skip} -} |
