123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #! /bin/sh
- # Copyright (C) 2011-2017 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/>.
- # TAP support:
- # - a test script terminated by a signal causes an hard error
- . test-init.sh
- fetch_tap_driver
- plan_ 10
- cat >> configure.ac <<END
- AC_OUTPUT
- END
- cat > Makefile.am << END
- TEST_LOG_DRIVER = \$(srcdir)/tap-driver
- TEST_LOG_COMPILER = $PERL -w
- ## Will be updated later.
- TESTS =
- END
- all_signals='1 2 3 9 13 15'
- blocked_signals=''
- for sig in $all_signals; do
- # Ignore blocked signals
- if is_blocked_signal $sig; then
- blocked_signals="$blocked_signals $sig"
- continue
- fi
- # Write the dummy test scripts in perl, not as shell scripts, to work
- # around unportabilities in the handling of signals (in fact, even
- # with bash, the older script were unable to properly deliver a SIGQUIT
- # to themselves consistently). The shebang is dummy here, as we prefer
- # to rely on the definition of TEST_LOG_COMPILER instead.
- unindent > signal-$sig.test <<END
- #! /usr/bin/env perl
- # We need autoflush to avoid losing output, which could cause spurious
- # "no test plan seen" in the TAP driver.
- BEGIN { $| = 1 }
- use warnings FATAL => "all";
- print "1..1\\n";
- print "ok 1\\n";
- kill $sig, \$\$;
- print "Bail out! \$0 not killed?\\n";
- END
- echo TESTS += signal-$sig.test >> Makefile.am
- done
- results_count=$(ls *.test | wc -l | tr -d "$tab$sp")
- chmod a+x *.test
- $ACLOCAL
- $AUTOCONF
- $AUTOMAKE
- ./configure
- system=$(uname -s -r || echo unknown) # Needed later.
- signal_caught ()
- {
- numeric=$1
- case $numeric in
- 1) symbolic=HUP;;
- 2) symbolic=INT;;
- 3) symbolic=QUIT;;
- 9) symbolic=KILL;;
- 13) symbolic=PIPE;;
- 15) symbolic=TERM;;
- *) fatal_ "unexpected signal number '$numeric'"
- esac
- # Sending a SIGQUIT on Cygwin 1.5 can cause a segmentation fault
- # instead (sometimes). Don't let this older bug pollute the results
- # of our testsuite.
- case $numeric,$system in
- 3,CYGWIN*\ 1.5.*) sig_re="((SIG)?($symbolic|SEGV)|$numeric|11)";;
- *) sig_re="((SIG)?$symbolic|$numeric)";;
- esac
- wbound_re="($|[^a-zA-Z0-9_-])"
- pfx_re="^ERROR: signal-$numeric\\.test"
- rx="${pfx_re} .*terminated by signal ${sig_re}${wbound_re}"
- desc="TAP driver catch test termination by signal SIG${symbolic}"
- case " $blocked_signals " in
- *" $numeric "*) skip_ -r "SIG$symbolic is blocked" "$desc" ;;
- *) command_ok_ "$desc" env LC_ALL=C $EGREP "$rx" stdout ;;
- esac
- }
- command_ok_ '"make check" fails' eval '
- (
- run_make -e IGNORE -O check
- # Extra "echo" and silencing of xtraces required to avoid possible
- # garbled output with NetBSD make, which would miss some final
- # newlines in the expected places and thus mess up our TAP output.
- set +x; echo
- test $am_make_rc -gt 0
- )
- '
- cat stdout # For debugging.
- command_ok_ "count of test results" count_test_results \
- total=$(($results_count * 2)) \
- pass=$results_count error=$results_count \
- fail=0 xpass=0 xfail=0 skip=0
- for sig in $all_signals; do
- signal_caught $sig
- done
- echo 'TEST_LOG_DRIVER_FLAGS = --ignore-exit' >> Makefile
- command_ok_ '"make check" passes [--ignore-exit]' run_make -O check
- command_ok_ "count of test results [--ignore-exit]" count_test_results \
- total=$results_count pass=$results_count \
- fail=0 xpass=0 xfail=0 skip=0 error=0
- :
|