Hash :
7b142a7b
Author :
Date :
2012-05-15T16:12:09
tests: use 'parallel-tests' Automake option by default This will help our transition from 'serial-tests' to 'parallel-tests' as the default test suite driver enabled by a TESTS assignment in the input Makefile.am. Note that that change of default will only take place in master, though. * defs: Pass the 'parallel-tests' option to the AM_INIT_AUTOMAKE invocation in the created 'configure.ac' stub, unless the variable 'am_serial_tests' is set to "yes". Don't pay attention anymore to the 'am_parallel_tests' variable, that's obsolete now. * defs-static.in: Warn if the 'am_serial_tests' variable is set in the environment; conversely, don't warn anymore about 'am_parallel_tests' being set in the environment. * Makefile.am (AM_TESTS_ENVIRONMENT): Nullify the 'am_serial_tests' variable instead of the now-obsolete 'am_parallel_tests' one. * syntax-checks.mk (sc_tests_obsolete_variables): Also warn against uses of 'am_parallel_tests', which is now deprecated in favor of 'am_serial_tests'. Similarly, if a use of 'parallel_tests' is seen, suggest using 'am_serial_tests' instead, not 'am_parallel_tests'. * gen-testsuite-part: Now that we use the 'parallel-tests' by default in our tests, we need to completely change the logic and semantics of generation of sibling tests for those tests that check the Automake generated testsuite harness itself. Do that, and give a complete explanation of the new logic and semantics in the relevant comments. * t/README: Update. * Lots of test cases: Adjust. Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
#! /bin/sh
# Copyright (C) 2011-2012 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Check that the parallel-tests driver removed incomplete log files
# when interrupt upon some signal. This test is definitely too hacky,
# but we couldn't find a better way to deal with inter-processes
# signals and the whole process-synchronization mess.
. ./defs || Exit 1
plan_ 16
cat >> configure.ac << 'END'
AC_OUTPUT
END
cat > Makefile.am << 'END'
TESTS = foo.test
## Provide more debugging info.
TEST_LOG_COMPILER = $(SHELL) -x
## Required by foo.test; see below.
AM_TESTS_FD_REDIRECT = 9>&1
END
# This is hacky and ugly, but has the great advantage of avoiding us a lot
# of pain with background processes and related synchronization issues.
cat - "$am_scriptdir"/test-driver > test-driver <<'END'
#!/bin/sh
echo $$ > pid
END
cat > foo.test << 'END'
#!/bin/sh -e
# We expect the test driver to be terminated by a signal, and so
# to exit with non-zero status, thus causing "make check" to fail.
# Exiting with status 0 from this test script is thus a good way to
# make unexpected behaviours more evident, since this will likely
# cause and unexpected success in "make check".
trap 'exit 0' 0;
stop_test () { exit 0; }
# We need the "foo is starting to run" string flushed to standard output
# ASAP, because we are soon going to grep for that string in the log file
# where the test driver is redirecting this script's stdout. The safest
# way force this flushing portably is to rely on perl I/O capabilities.
$PERL -e 'BEGIN { $| = 1 }; print "foo is starting to run\n"' || stop_test
ls -l >&9 || stop_test
bailout ()
{
# Print this to the original stdout (saved in the fd 9), so that the
# emitted "Bail out!" directive will be interpreted by the test driver
# running the Automake testsuite.
echo "Bail out! $*" >&9
stop_test
}
test $sig -gt 0 || bailout "\$sig not exported to test script"
res=ok; cat foo.log >&9 || res="not ok"
echo "$res - logfile created and readable [SIG $sig]" >&9
res=ok; grep '^foo is starting to run$' foo.log >&9 || res='not ok'
echo "$res - logfile contains output from test script [SIG $sig]" >&9
cat pid >&9 || bailout "cannot get PID of test driver"
kill -$sig `cat pid` || bailout "cannot send signal $sig to test driver"
stop_test
END
chmod a+x foo.test
$ACLOCAL || fatal_ "aclocal failed"
$AUTOCONF || fatal_ "autoconf failed"
$AUTOMAKE || fatal_ "automake failed"
./configure || fatal_ "./configure failed"
# The only signals that can be trapped portable are 1 "SIGHUP",
# 2 "SIGINT", 13 "SIGPIPE" and 15 "SIGTERM".
trapped_signals='1 2 13 15'
for sig in $trapped_signals; do
if is_blocked_signal $sig; then
for i in 1 2 3 4; do echo "ok # SKIP signal $sig is blocked"; done
continue
fi
rm -f pid fail *.log
r=ok; env PERL="$PERL" sig="$sig" $MAKE check && r='not ok'
echo "$r - signal $sig to test driver causes \"make check\" to fail"
ls -l
# These files shouldn't exist, but in case they do, their content might
# provide helpful information about the causes of the failure(s).
cat foo.log || :
cat test-suite.log || :
r=ok; ls | $EGREP 'foo.*\.(log|tmp)' && r='not ok'
echo "$r - test driver clean up log and tmp files after signal $sig"
done
: