diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d3944ab0da..d0f5f0075a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -180,12 +180,21 @@ jobs: - name: Testing if: matrix.skip_testing != true + working-directory: tests run: | - echo 'Testing...' - pushd tests - ./test || rc=$? - popd - if [ -n "$rc" ]; then + # Explicitly use bash because /bin/sh doesn't have pipefail option + /bin/bash -o pipefail -c './test 2>&1 | tee test.out' + rc=$? + if [ ${{ matrix.use_asan }} ]; then + # Work around spurious crashes by running the test again. + # See https://github.com/google/sanitizers/issues/1353 + if fgrep -q 'LeakSanitizer has encountered a fatal error' test.out; then + echo '+++ Rerunning the tests once again after LeakSanitizer crash +++' + ./test + rc=$? + fi + fi + if [ "$rc" != 0 ]; then echo '*** Tests failed, contents of httpbin.log follows: ***' echo '-----------------------------------------------------------' cat httpbin.log