X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/322ea972fe945a8cf439e9e3577de624f3e3e10b..ab551808832a9f3097861a706b2c2f57302a3992:/tests/unit/other.tcl diff --git a/tests/unit/other.tcl b/tests/unit/other.tcl index f30505d1..14fd73ac 100644 --- a/tests/unit/other.tcl +++ b/tests/unit/other.tcl @@ -1,4 +1,11 @@ start_server {tags {"other"}} { + if {$::force_failure} { + # This is used just for test suite development purposes. + test {Failing test} { + format err + } {ok} + } + test {SAVE - make sure there are all the types as values} { # Wait for a background saving in progress to terminate waitForBgsave r @@ -12,11 +19,12 @@ start_server {tags {"other"}} { r save } {OK} - tags {slow nodiskstore} { + tags {slow} { + if {$::accurate} {set iterations 10000} else {set iterations 1000} foreach fuzztype {binary alpha compr} { test "FUZZ stresser with data model $fuzztype" { set err 0 - for {set i 0} {$i < 10000} {incr i} { + for {set i 0} {$i < $iterations} {incr i} { set fuzz [randstring 0 512 $fuzztype] r set foo $fuzz set got [r get foo] @@ -46,11 +54,12 @@ start_server {tags {"other"}} { set _ $err } {*invalid*} - tags {consistency nodiskstore} { + tags {consistency} { if {![catch {package require sha1}]} { + if {$::accurate} {set numops 10000} else {set numops 1000} test {Check consistency of different data types after a reload} { r flushdb - createComplexDataset r 10000 + createComplexDataset r $numops set dump [csvdump r] set sha1 [r debug digest] r debug reload @@ -98,29 +107,62 @@ start_server {tags {"other"}} { } } - test {EXPIRES after a reload (snapshot + append only file)} { + test {EXPIRES after a reload (snapshot + append only file rewrite)} { r flushdb r set x 10 r expire x 1000 - if {$::diskstore} { - r debug flushcache - } else { - r save - r debug reload - } + r save + r debug reload set ttl [r ttl x] set e1 [expr {$ttl > 900 && $ttl <= 1000}] - if {!$::diskstore} { - r bgrewriteaof - waitForBgrewriteaof r - r debug loadaof - } + r bgrewriteaof + waitForBgrewriteaof r + r debug loadaof set ttl [r ttl x] set e2 [expr {$ttl > 900 && $ttl <= 1000}] list $e1 $e2 } {1 1} - tags {protocol nodiskstore} { + test {EXPIRES after AOF reload (without rewrite)} { + r flushdb + r config set appendonly yes + r set x somevalue + r expire x 1000 + r setex y 2000 somevalue + r set z somevalue + r expireat z [expr {[clock seconds]+3000}] + + # Milliseconds variants + r set px somevalue + r pexpire px 1000000 + r psetex py 2000000 somevalue + r set pz somevalue + r pexpireat pz [expr {([clock seconds]+3000)*1000}] + + # Reload and check + waitForBgrewriteaof r + # We need to wait two seconds to avoid false positives here, otherwise + # the DEBUG LOADAOF command may read a partial file. + # Another solution would be to set the fsync policy to no, since this + # prevents write() to be delayed by the completion of fsync(). + after 2000 + r debug loadaof + set ttl [r ttl x] + assert {$ttl > 900 && $ttl <= 1000} + set ttl [r ttl y] + assert {$ttl > 1900 && $ttl <= 2000} + set ttl [r ttl z] + assert {$ttl > 2900 && $ttl <= 3000} + set ttl [r ttl px] + assert {$ttl > 900 && $ttl <= 1000} + set ttl [r ttl py] + assert {$ttl > 1900 && $ttl <= 2000} + set ttl [r ttl pz] + assert {$ttl > 2900 && $ttl <= 3000} + r config set appendonly no + } + + tags {protocol} { test {PIPELINING stresser (also a regression for the old epoll bug)} { set fd2 [socket $::host $::port] fconfigure $fd2 -encoding binary -translation binary @@ -183,6 +225,13 @@ start_server {tags {"other"}} { set _ $err } {*ERR MULTI*} + test {MULTI where commands alter argc/argv} { + r sadd myset a + r multi + r spop myset + list [r exec] [r exists myset] + } {a 0} + test {WATCH inside MULTI is not allowed} { set err {} r multi @@ -237,6 +286,7 @@ start_server {tags {"other"}} { } {0 0} test {Perform a final SAVE to leave a clean DB on disk} { + waitForBgsave r r save } {OK} }