Tests (cluster / sentinel): add --stop and--loop options (#11070)

--stop: Blocks once the first test fails.
--loop: Execute the specified set of tests forever.
It is useful when we debug some test failures.
This commit is contained in:
Binbin 2022-08-01 15:12:27 +08:00 committed by GitHub
parent 2029976dc3
commit e13b681874
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -34,6 +34,8 @@ set ::leaked_fds_file [file normalize "tmp/leaked_fds.txt"]
set ::pids {} ; # We kill everything at exit
set ::dirs {} ; # We remove all the temp dirs at exit
set ::run_matching {} ; # If non empty, only tests matching pattern are run.
set ::stop_on_failure 0
set ::loop 0
if {[catch {cd tmp}]} {
puts "tmp directory not found."
@ -280,6 +282,10 @@ proc parse_options {} {
set val2 [lindex $::argv [expr $j+2]]
dict set ::global_config $val $val2
incr j 2
} elseif {$opt eq {--stop}} {
set ::stop_on_failure 1
} elseif {$opt eq {--loop}} {
set ::loop 1
} elseif {$opt eq "--help"} {
puts "--single <pattern> Only runs tests specified by pattern."
puts "--dont-clean Keep log files on exit."
@ -289,6 +295,8 @@ proc parse_options {} {
puts "--tls Run tests in TLS mode."
puts "--host <host> Use hostname instead of 127.0.0.1."
puts "--config <k> <v> Extra config argument(s)."
puts "--stop Blocks once the first test fails."
puts "--loop Execute the specified set of tests forever."
puts "--help Shows this help."
exit 0
} else {
@ -435,6 +443,8 @@ proc check_leaks instance_types {
# Execute all the units inside the 'tests' directory.
proc run_tests {} {
set tests [lsort [glob ../tests/*]]
while 1 {
foreach test $tests {
# Remove leaked_fds file before starting
if {$::leaked_fds_file != "" && [file exists $::leaked_fds_file]} {
@ -451,6 +461,12 @@ proc run_tests {} {
puts $::errorInfo
incr ::failed
# letting the tests resume, so we'll eventually reach the cleanup and report crashes
if {$::stop_on_failure} {
puts -nonewline "(Test stopped, press enter to resume the tests)"
flush stdout
gets stdin
}
}
check_leaks {redis sentinel}
@ -462,6 +478,9 @@ proc run_tests {} {
incr ::failed
}
}
if {$::loop == 0} { break }
} ;# while 1
}
# Print a message and exists with 0 / 1 according to zero or more failures.