提交 d7bad544 编写于 作者: A antirez

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.
上级 8111a803
......@@ -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)]}
......
......@@ -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]'"
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册