Add retries for boost unit test timeouts.

This commit is contained in:
Pentarctagon 2023-03-10 19:02:39 -06:00
parent 13f87fdebb
commit e18d2ff314

View File

@ -22,16 +22,26 @@ def run_with_rerun_for_sdl_video(executable, test_name):
# Sanity check on the number of retries.
# It's a rare failure, a single retry would probably be enough.
sdl_retries = 0
while sdl_retries < 10:
timeout_retries = 0
while sdl_retries < 10 and timeout_retries < 5:
sdl_retry = False
timeout_retry = False
try:
res = subprocess.run([executable, "--run_test="+test_name, "--color_output"], timeout=20, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
retry = False
except subprocess.TimeoutExpired as t:
timeout_retries += 1
timeout_retry = True
print("Test timed out, attempt", timeout_retries)
else:
if b"Could not initialize SDL_video" in res.stdout:
retry = True
if not retry:
return res
sdl_retries += 1
sdl_retry = True
print("Could not initialise SDL_video error, attempt", sdl_retries)
if not sdl_retry and not timeout_retry:
return res
if __name__ == '__main__':
ap = argparse.ArgumentParser()
ap.add_argument("-e", "--executable", help="The name of the boost unit test executable. Default is boost_unit_tests.", default="boost_unit_tests")
@ -46,13 +56,7 @@ if __name__ == '__main__':
failure=0
for test in tests:
try:
res = run_with_rerun_for_sdl_video(os.path.join(options.path, executable), test)
except subprocess.TimeoutExpired as t:
failure+=1
output = str(t.output) or ""
print("Test "+test+" timed out: "+output)
else:
if res.returncode == 0:
success+=1
print("Test "+test+" passed")