mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-01 07:04:10 +01:00
73cebe6e72
In certain cases of test suite failure, the summary report was not being printed. In particular, any failure on the parallel test suite, and any aborted test in the serialized test suite would end up hiding the summary. It's better to always show the summary where we can (while preserving the return code). If we do abort due to this high-level failure, though, we should also announce to the user that we're doing so as close to the end of the process as possible, to make it easier to find the problem. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
94 lines
2.5 KiB
Bash
Executable file
94 lines
2.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# Run tests
|
|
#
|
|
# Copyright (c) 2005 Junio C Hamano
|
|
# Copyright (c) 2010 Notmuch Developers
|
|
#
|
|
# Adapted from a Makefile to a shell script by Carl Worth (2010)
|
|
|
|
if [ ${BASH_VERSINFO[0]} -lt 4 ]; then
|
|
echo "Error: The notmuch test suite requires a bash version >= 4.0"
|
|
echo "due to use of associative arrays within the test suite."
|
|
echo "Please try again with a newer bash (or help us fix the"
|
|
echo "test suite to be more portable). Thanks."
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure NOTMUCH_SRCDIR and NOTMUCH_BUILDDIR are set.
|
|
. $(dirname "$0")/export-dirs.sh || exit 1
|
|
|
|
TESTS=
|
|
for test in $NOTMUCH_TESTS; do
|
|
TESTS="$TESTS $NOTMUCH_SRCDIR/test/$test"
|
|
done
|
|
|
|
if [[ -z "$TESTS" ]]; then
|
|
TESTS="$NOTMUCH_SRCDIR/test/T[0-9][0-9][0-9]-*.sh"
|
|
fi
|
|
|
|
# Clean up any results from a previous run
|
|
rm -rf $NOTMUCH_BUILDDIR/test/test-results
|
|
|
|
# Test for timeout utility
|
|
if command -v timeout >/dev/null; then
|
|
TEST_TIMEOUT=${NOTMUCH_TEST_TIMEOUT:-2m}
|
|
if [ "$TEST_TIMEOUT" = 0 ]; then
|
|
TEST_TIMEOUT_CMD=""
|
|
echo "INFO: timeout disabled"
|
|
else
|
|
TEST_TIMEOUT_CMD="timeout $TEST_TIMEOUT"
|
|
echo "INFO: using $TEST_TIMEOUT timeout for tests"
|
|
fi
|
|
else
|
|
TEST_TIMEOUT_CMD=""
|
|
fi
|
|
|
|
trap 'e=$?; kill $!; exit $e' HUP INT TERM
|
|
|
|
META_FAILURE=
|
|
# Run the tests
|
|
if test -z "$NOTMUCH_TEST_SERIALIZE" && command -v parallel >/dev/null ; then
|
|
test -t 1 && export COLORS_WITHOUT_TTY=t || :
|
|
if parallel -h | grep -q GNU ; then
|
|
echo "INFO: running tests with GNU parallel"
|
|
printf '%s\n' $TESTS | $TEST_TIMEOUT_CMD parallel
|
|
else
|
|
echo "INFO: running tests with moreutils parallel"
|
|
$TEST_TIMEOUT_CMD parallel -- $TESTS
|
|
fi
|
|
RES=$?
|
|
if [[ $RES != 0 ]]; then
|
|
META_FAILURE="parallel test suite returned error code $RES"
|
|
fi
|
|
else
|
|
for test in $TESTS; do
|
|
$TEST_TIMEOUT_CMD $test "$@" &
|
|
wait $!
|
|
# If the test failed without producing results, then it aborted,
|
|
# so we should abort, too.
|
|
RES=$?
|
|
testname=$(basename $test .sh)
|
|
if [[ $RES != 0 && ! -e "$NOTMUCH_BUILDDIR/test/test-results/$testname" ]]; then
|
|
META_FAILURE="Aborting on $testname (returned $RES)"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
trap - HUP INT TERM
|
|
|
|
# Report results
|
|
echo
|
|
$NOTMUCH_SRCDIR/test/aggregate-results.sh $NOTMUCH_BUILDDIR/test/test-results/*
|
|
ev=$?
|
|
if [ -n "$META_FAILURE" ]; then
|
|
printf 'ERROR: %s\n' "$META_FAILURE"
|
|
if [ $ev = 0 ]; then
|
|
ev=$RES
|
|
fi
|
|
fi
|
|
|
|
# Clean up
|
|
rm -rf $NOTMUCH_BUILDDIR/test/test-results
|
|
|
|
exit $ev
|