#! /bin/sh # Copyright (C) 2011-2013 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 . # TAP support: # - a test script terminated by a signal causes an hard error . test-init.sh fetch_tap_driver plan_ 10 cat >> configure.ac < 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 < "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" case $am_tap_implementation in # Dummy escape to please maintainer-check. per\l) rx="$pfx_re - terminated by signal $sig_re$";; shell) rx="$pfx_re .*terminated by signal $sig_re$wbound_re";; *) fatal_ "invalid \$am_tap_implementation '$am_tap_implementation'";; esac 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 :