Consistency test improved

This commit is contained in:
antirez 2010-07-27 14:42:11 +02:00
parent f99e660b44
commit dd3f505ff5
2 changed files with 99 additions and 16 deletions

View File

@ -224,3 +224,52 @@ proc formatCommand {args} {
} }
set _ $cmd 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\""
}

View File

@ -46,23 +46,57 @@ start_server {} {
set _ $err set _ $err
} {*invalid*} } {*invalid*}
if {![catch {package require sha1}]} { tags {consistency} {
test {Check consistency of different data types after a reload} { if {![catch {package require sha1}]} {
r flushdb test {Check consistency of different data types after a reload} {
createComplexDataset r 10000 r flushdb
set sha1 [r debug digest] createComplexDataset r 10000
r debug reload set dump [csvdump r]
set sha1_after [r debug digest] set sha1 [r debug digest]
expr {$sha1 eq $sha1_after} r debug reload
} {1} 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?} { set fd [open /tmp/repldump1.txt w]
r bgrewriteaof puts $fd $dump
waitForBgrewriteaof r close $fd
r debug loadaof set fd [open /tmp/repldump2.txt w]
set sha1_after [r debug digest] puts $fd $newdump
expr {$sha1 eq $sha1_after} close $fd
} {1}
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)} { test {EXPIRES after a reload (snapshot + append only file)} {