From a0573260b0928170d66268eb22be1a5699615275 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 28 Jul 2010 14:08:46 +0200 Subject: [PATCH] better random dataset creation function in test. master-slave replication test now is able to save the two datasets in CSV when an inconsistency is detected. --- tests/integration/replication.tcl | 13 ++++++ tests/support/util.tcl | 72 ++++++++++++++++++------------- 2 files changed, 54 insertions(+), 31 deletions(-) diff --git a/tests/integration/replication.tcl b/tests/integration/replication.tcl index 39d77c8f..4b258825 100644 --- a/tests/integration/replication.tcl +++ b/tests/integration/replication.tcl @@ -8,6 +8,19 @@ start_server {tags {"repl"}} { test {MASTER and SLAVE dataset should be identical after complex ops} { createComplexDataset r 10000 + after 500 + if {[r debug digest] ne [r -1 debug digest]} { + set csv1 [csvdump r] + set csv2 [csvdump {r -1}] + set fd [open /tmp/repldump1.txt w] + puts -nonewline $fd $csv1 + close $fd + set fd [open /tmp/repldump2.txt w] + puts -nonewline $fd $csv2 + close $fd + puts "Master - Slave inconsistency" + puts "Run diff -u against /tmp/repldump*.txt for more info" + } assert_equal [r debug digest] [r -1 debug digest] } } diff --git a/tests/support/util.tcl b/tests/support/util.tcl index 26cf1dc1..b9c89aa8 100644 --- a/tests/support/util.tcl +++ b/tests/support/util.tcl @@ -44,7 +44,7 @@ proc warnings_from_file {filename} { # Return value for INFO property proc status {r property} { - if {[regexp "\r\n$property:(.*?)\r\n" [$r info] _ value]} { + if {[regexp "\r\n$property:(.*?)\r\n" [{*}$r info] _ value]} { set _ $value } } @@ -129,11 +129,11 @@ proc randomKey {} { proc findKeyWithType {r type} { for {set j 0} {$j < 20} {incr j} { - set k [$r randomkey] + set k [{*}$r randomkey] if {$k eq {}} { return {} } - if {[$r type $k] eq $type} { + if {[{*}$r type $k] eq $type} { return $k } } @@ -159,23 +159,23 @@ proc createComplexDataset {r ops} { } { randpath {set d +inf} {set d -inf} } - set t [$r type $k] + set t [{*}$r type $k] if {$t eq {none}} { randpath { - $r set $k $v + {*}$r set $k $v } { - $r lpush $k $v + {*}$r lpush $k $v } { - $r sadd $k $v + {*}$r sadd $k $v } { - $r zadd $k $d $v + {*}$r zadd $k $d $v } { - $r hset $k $f $v + {*}$r hset $k $f $v } { - $r del $k + {*}$r del $k } - set t [$r type $k] + set t [{*}$r type $k] } switch $t { @@ -183,35 +183,45 @@ proc createComplexDataset {r ops} { # Nothing to do } {list} { - randpath {$r lpush $k $v} \ - {$r rpush $k $v} \ - {$r lrem $k 0 $v} \ - {$r rpop $k} \ - {$r lpop $k} + randpath {{*}$r lpush $k $v} \ + {{*}$r rpush $k $v} \ + {{*}$r lrem $k 0 $v} \ + {{*}$r rpop $k} \ + {{*}$r lpop $k} } {set} { - randpath {$r sadd $k $v} \ - {$r srem $k $v} \ + randpath {{*}$r sadd $k $v} \ + {{*}$r srem $k $v} \ { set otherset [findKeyWithType r set] if {$otherset ne {}} { - $r sunionstore $k2 $k $otherset + randpath { + {*}$r sunionstore $k2 $k $otherset + } { + {*}$r sinterstore $k2 $k $otherset + } { + {*}$r sdiffstore $k2 $k $otherset + } } } } {zset} { - randpath {$r zadd $k $d $v} \ - {$r zrem $k $v} \ + randpath {{*}$r zadd $k $d $v} \ + {{*}$r zrem $k $v} \ { set otherzset [findKeyWithType r zset] if {$otherzset ne {}} { - $r zunionstore $k2 2 $k $otherzset + randpath { + {*}$r zunionstore $k2 2 $k $otherzset + } { + {*}$r zinterstore $k2 2 $k $otherzset + } } } } {hash} { - randpath {$r hset $k $f $v} \ - {$r hdel $k $f} + randpath {{*}$r hset $k $f $v} \ + {{*}$r hdel $k $f} } } } @@ -227,33 +237,33 @@ proc formatCommand {args} { proc csvdump r { set o {} - foreach k [lsort [$r keys *]] { - set type [$r type $k] + 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" + append o [csvstring [{*}$r get $k]] "\n" } list { - foreach e [$r lrange $k 0 -1] { + foreach e [{*}$r lrange $k 0 -1] { append o [csvstring $e] , } append o "\n" } set { - foreach e [lsort [$r smembers $k]] { + foreach e [lsort [{*}$r smembers $k]] { append o [csvstring $e] , } append o "\n" } zset { - foreach e [$r zrange $k 0 -1 withscores] { + foreach e [{*}$r zrange $k 0 -1 withscores] { append o [csvstring $e] , } append o "\n" } hash { - set fields [$r hgetall $k] + set fields [{*}$r hgetall $k] set newfields {} foreach {k v} $fields { lappend newfields [list $k $v] -- 2.45.2