Commit f8a09985 by Edward Thomson Committed by Patrick Steinhardt

ci: add flaky test re-execution on Unix

Our online tests are occasionally flaky since they hit real network
endpoints.  Re-run them up to 5 times if they fail, to allow us to
avoid having to fail the whole build.
parent 2ce6eddf
...@@ -32,11 +32,6 @@ cleanup() { ...@@ -32,11 +32,6 @@ cleanup() {
echo "Done." echo "Done."
} }
failure() {
echo "Test exited with code: $1"
SUCCESS=0
}
# Ask ctest what it would run if we were to invoke it directly. This lets # Ask ctest what it would run if we were to invoke it directly. This lets
# us manage the test configuration in a single place (tests/CMakeLists.txt) # us manage the test configuration in a single place (tests/CMakeLists.txt)
# instead of running clar here as well. But it allows us to wrap our test # instead of running clar here as well. But it allows us to wrap our test
...@@ -60,7 +55,35 @@ run_test() { ...@@ -60,7 +55,35 @@ run_test() {
RUNNER="$TEST_CMD" RUNNER="$TEST_CMD"
fi fi
eval $RUNNER || failure if [[ "$GITTEST_FLAKY_RETRY" > 0 ]]; then
ATTEMPTS_REMAIN=$GITTEST_FLAKY_RETRY
else
ATTEMPTS_REMAIN=1
fi
FAILED=0
while [[ "$ATTEMPTS_REMAIN" > 0 ]]; do
if [ "$FAILED" -eq 1 ]; then
echo ""
echo "Re-running flaky ${1} tests..."
echo ""
fi
RETURN_CODE=0
eval $RUNNER || RETURN_CODE=$? && true
if [ "$RETURN_CODE" -eq 0 ]; then
break
fi
echo "Test exited with code: $RETURN_CODE"
ATTEMPTS_REMAIN="$(($ATTEMPTS_REMAIN-1))"
FAILED=1
done
if [ "$FAILED" -ne 0 ]; then
SUCCESS=0
fi
} }
# Configure the test environment; run them early so that we're certain # Configure the test environment; run them early so that we're certain
...@@ -160,7 +183,9 @@ if [ -z "$SKIP_ONLINE_TESTS" ]; then ...@@ -160,7 +183,9 @@ if [ -z "$SKIP_ONLINE_TESTS" ]; then
echo "## Running (online) tests" echo "## Running (online) tests"
echo "##############################################################################" echo "##############################################################################"
export GITTEST_FLAKY_RETRY=5
run_test online run_test online
unset GITTEST_FLAKY_RETRY
fi fi
if [ -z "$SKIP_GITDAEMON_TESTS" ]; then if [ -z "$SKIP_GITDAEMON_TESTS" ]; then
...@@ -220,7 +245,7 @@ fi ...@@ -220,7 +245,7 @@ fi
cleanup cleanup
if [ "$SUCCESS" -ne "1" ]; then if [ "$SUCCESS" -ne 1 ]; then
echo "Some tests failed." echo "Some tests failed."
exit 1 exit 1
fi fi
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment