Redis test: scripting EVALSHA replication test more reliable.

A new primitive wait_for_condition was introduced in the scripting
engine that makes waiting for events simpler, so that it is simpler to
write tests that are more resistant to timing issues.
This commit is contained in:
antirez 2012-04-26 11:16:52 +02:00
parent d9237055ba
commit 5080e625d3
2 changed files with 23 additions and 4 deletions

View File

@ -3,6 +3,10 @@ set ::num_passed 0
set ::num_failed 0
set ::tests_failed {}
proc fail {msg} {
error "assertion:$msg"
}
proc assert {condition} {
if {![uplevel 1 [list expr $condition]]} {
error "assertion:Expected condition '$condition' to be true ([uplevel 1 [list subst -nocommands $condition]])"
@ -44,6 +48,19 @@ proc assert_type {type key} {
assert_equal $type [r type $key]
}
# Wait for the specified condition to be true, with the specified number of
# max retries and delay between retries. Otherwise the 'elsescript' is
# executed.
proc wait_for_condition {maxtries delay e _else_ elsescript} {
while {[incr maxtries -1] >= 0} {
if {[uplevel 1 expr $e]} break
after $delay
}
if {$maxtries == -1} {
uplevel 1 $elsescript
}
}
# Test if TERM looks like to support colors
proc color_term {} {
expr {[info exists ::env(TERM)] && [string match *xterm* $::env(TERM)]}

View File

@ -327,10 +327,12 @@ start_server {tags {"scripting repl"}} {
r evalsha ae3477e27be955de7e1bc9adfdca626b478d3cb2 0
} {2}
if {$::valgrind} {after 2000} else {after 100}
test {If EVALSHA was replicated as EVAL the slave should be ok} {
r -1 get x
} {2}
wait_for_condition 50 100 {
[r -1 get x] eq {2}
} else {
fail "Expected 2 in x, but value is '[r -1 get x]'"
}
}
}
}