diff --git a/tests/support/util.tcl b/tests/support/util.tcl index ae758f4c..26cf1dc1 100644 --- a/tests/support/util.tcl +++ b/tests/support/util.tcl @@ -224,3 +224,52 @@ proc formatCommand {args} { } set _ $cmd } + +proc csvdump r { + set o {} + foreach k [lsort [$r keys *]] { + set type [$r type $k] + append o [csvstring $k] , [csvstring $type] , + switch $type { + string { + append o [csvstring [$r get $k]] "\n" + } + list { + foreach e [$r lrange $k 0 -1] { + append o [csvstring $e] , + } + append o "\n" + } + set { + foreach e [lsort [$r smembers $k]] { + append o [csvstring $e] , + } + append o "\n" + } + zset { + foreach e [$r zrange $k 0 -1 withscores] { + append o [csvstring $e] , + } + append o "\n" + } + hash { + set fields [$r hgetall $k] + set newfields {} + foreach {k v} $fields { + lappend newfields [list $k $v] + } + set fields [lsort -index 0 $newfields] + foreach kv $fields { + append o [csvstring [lindex $kv 0]] , + append o [csvstring [lindex $kv 1]] , + } + append o "\n" + } + } + } + return $o +} + +proc csvstring s { + return "\"$s\"" +} diff --git a/tests/unit/other.tcl b/tests/unit/other.tcl index a2e8ba9e..024adace 100644 --- a/tests/unit/other.tcl +++ b/tests/unit/other.tcl @@ -46,23 +46,57 @@ start_server {} { set _ $err } {*invalid*} - if {![catch {package require sha1}]} { - test {Check consistency of different data types after a reload} { - r flushdb - createComplexDataset r 10000 - set sha1 [r debug digest] - r debug reload - set sha1_after [r debug digest] - expr {$sha1 eq $sha1_after} - } {1} + tags {consistency} { + if {![catch {package require sha1}]} { + test {Check consistency of different data types after a reload} { + r flushdb + createComplexDataset r 10000 + set dump [csvdump r] + set sha1 [r debug digest] + r debug reload + r set baubau x + set sha1_after [r debug digest] + if {$sha1 eq $sha1_after} { + set _ 1 + } else { + set newdump [csvdump r] + puts "Consistency test failed!" + puts "You can inspect the two dumps in /tmp/repldump*.txt" - test {Same dataset digest if saving/reloading as AOF?} { - r bgrewriteaof - waitForBgrewriteaof r - r debug loadaof - set sha1_after [r debug digest] - expr {$sha1 eq $sha1_after} - } {1} + set fd [open /tmp/repldump1.txt w] + puts $fd $dump + close $fd + set fd [open /tmp/repldump2.txt w] + puts $fd $newdump + close $fd + + set _ 0 + } + } {1} + + test {Same dataset digest if saving/reloading as AOF?} { + r bgrewriteaof + waitForBgrewriteaof r + r debug loadaof + set sha1_after [r debug digest] + if {$sha1 eq $sha1_after} { + set _ 1 + } else { + set newdump [csvdump r] + puts "Consistency test failed!" + puts "You can inspect the two dumps in /tmp/aofdump*.txt" + + set fd [open /tmp/aofdump1.txt w] + puts $fd $dump + close $fd + set fd [open /tmp/aofdump2.txt w] + puts $fd $newdump + close $fd + + set _ 0 + } + } {1} + } } test {EXPIRES after a reload (snapshot + append only file)} {