]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
Merge branch 'test-protocols' into testsuite-work
authorStefano Lattarini <stefano.lattarini@gmail.com>
Tue, 6 Sep 2011 15:53:29 +0000 (17:53 +0200)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Tue, 6 Sep 2011 15:53:29 +0000 (17:53 +0200)
* test-protocols:
  tests: fix spurious failures due to ignored signals

1  2 
ChangeLog
tests/defs
tests/self-check-cleanup.test
tests/self-check-exit.tap

diff --cc ChangeLog
Simple merge
diff --cc tests/defs
index 671ce6f6fdc35fe7a48ef1a6104504bb271d7736,ad0490bf8dde14896a5c242d80da9e47830d8343..931188b601470cd5ce08573bff90903ba75a6750
@@@ -222,55 -152,37 +222,64 @@@ is_newest (
    test -z "$is_newest_files"
  }
  
 -# AUTOMAKE_run status [options...]
 -# --------------------------------
 -# Run Automake with OPTIONS, and fail if automake
 -# does not exit with STATUS.
+ # is_blocked_signal SIGNAL-NUMBER
+ # --------------------------------
+ # Return success if the given signal number is blocked in the shell,
+ # return a non-zero exit status and print a proper diagnostic otherwise.
+ is_blocked_signal ()
+ {
+   $SHELL -c "kill -$1 \$\$; echo '$me: signal $1 seems blocked'"
+ }
 +# AUTOMAKE_run [-e STATUS] [-d DESCRIPTION] [--] [AUTOMAKE-ARGS...]
 +# -----------------------------------------------------------------
 +# Run automake with AUTOMAKE-ARGS, and fail if it doesn't exit with
 +# STATUS.  Should be polymorphic for TAP and "plain" tests.  The
 +# DESCRIPTION, when provided, is used for console reporting, only if
 +# the TAP protocol is in use in the current test script.
  AUTOMAKE_run ()
  {
 -  expected_exitcode=$1
 -  shift
 -  exitcode=0
 -  $AUTOMAKE ${1+"$@"} >stdout 2>stderr || exitcode=$?
 +  am__desc=
 +  am__exp_rc=0
 +  while test $# -gt 0; do
 +    case $1 in
 +      -d) am__desc=$2; shift;;
 +      -e) am__exp_rc=$2; shift;;
 +      --) shift; break;;
 +       # Don't fail on unknown option: assume they (and the rest of the
 +       # command line) are to be passed verbatim to automake (so stop our
 +       # own option parsing).
 +       *) break;;
 +    esac
 +    shift
 +  done
 +  am__got_rc=0
 +  $AUTOMAKE ${1+"$@"} >stdout 2>stderr || am__got_rc=$?
    cat stderr >&2
    cat stdout
 -  test $exitcode = $expected_exitcode || Exit 1
 +  if test $using_tap != yes; then
 +    test $am__got_rc -eq $am__exp_rc || Exit 1
 +    return
 +  fi
 +  if test -z "$am__desc"; then
 +    if test $am__got_rc -eq $am__exp_rc; then
 +      am__desc="automake exited $am__got_rc"
 +    else
 +      am__desc="automake exited $am__got_rc, expecting $am__exp_rc"
 +    fi
 +  fi
 +  command_ok_ "$am__desc" test $am__got_rc -eq $am__exp_rc
  }
  
 -# AUTOMAKE_fails [options...]
 -# ---------------------------
 -# Run Automake with OPTIONS, and fail if automake
 -# does not exit with STATUS.
 +# AUTOMAKE_fails [-d DESCRIPTION] [OPTIONS...]
 +# --------------------------------------------
 +# Run automake with OPTIONS, and fail if doesn't exit with status `1'.
 +# Should be polymorphic for TAP and "plain" tests.  The DESCRIPTION,
 +# when provided, is used for console reporting, only if the TAP
 +# protocol is in use in the current test script.
  AUTOMAKE_fails ()
  {
 -  AUTOMAKE_run 1 ${1+"$@"}
 +  AUTOMAKE_run -e 1 ${1+"$@"}
  }
  
  # using_gmake
index fb5b055f75024d5e316f589f8a924744df62a323,9cfde1d3e8af31b5e2450f04a01636b4495de629..754ed0de6a7ec7be40af3f542ffb477bd336ea1f
@@@ -112,28 -108,21 +112,31 @@@ fi # $have_symlink
  # Check that the cleanup trap does not remove the temporary
  # test directory in case of test failure, skip, hard-error,
  # or when receiving a signal.
- for bailout_command in \
-   'Exit 1' \
-   'Exit 2' \
-   'Exit 10' \
-   'Exit 77' \
-   'Exit 99' \
-   'Exit 126' \
-   'Exit 127' \
-   'Exit 255' \
-   'kill -1 $$' \
-   'kill -2 $$' \
-   'kill -9 $$' \
-   'kill -13 $$' \
-   'kill -15 $$' \
- ; do
+ for st in 1 2 3 10 77 99 126 127 130 255; do
 -  $SHELL -c  ". ./defs; : > foo; Exit $st" dummy.test && Exit 1
++  $SHELL -c  "
++    stderr_fileno_=2
++    . ./defs
++    : > foo
++    Exit $st
++  " dummy.test && Exit 1
+   test -f dummy.dir/foo
+   rm -rf dummy.dir
+ done
+ for signum in 1 2 3 9 13 15; do
+   if is_blocked_signal $signum; then
+     echo "$me: signal $signum is blocked, skipping part of the test"
+     continue
+   fi
 -  $SHELL -c  ". ./defs; : > foo; kill -$signum \$\$" dummy.test && Exit 1
 +  $SHELL -c  "
 +    stderr_fileno_=2
 +    . ./defs
 +    : > foo
-     $bailout_command
++    kill -$signum \$\$
 +  " dummy.test && Exit 1
    test -f dummy.dir/foo
+   rm -rf dummy.dir
  done
  
  :
index 6f35e0874cb4324e94dc1100e09ed6f6c45e1779,0000000000000000000000000000000000000000..563500b2e0406b6b2c28a0081432e2de62ae12ec
mode 100755,000000..100755
--- /dev/null
@@@ -1,99 -1,0 +1,103 @@@
 +#! /bin/sh
 +# Copyright (C) 2011 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/>.
 +
 +# Sanity check for the automake testsuite.
 +# Check that, in case of failing commands, the correct exit status is
 +# passed to the exit trap installed by the `./defs' script.
 +# Also check that the `errexit' shell flag is active.
 +
 +am_create_testdir=no
 +. ./defs || Exit 99
 +
 +plan_ 34
 +
 +# This test becomes more cumbersome if we keep the `errexit' shell flag
 +# set.  And removing it is no big deal, as this test is a TAP-based one,
 +# so that false positives remain very unlikely.
 +set +e
 +
 +AM_TESTS_REEXEC=no; export AM_TESTS_REEXEC
 +
 +init='. ./defs; stderr_fileno_=2; unset am_explicit_skips'
 +
 +for st in 1 2 3 4 5 77 99 126 127 128 129 130 255; do
 +  for exit_cmd in "Exit $st" "sh -c 'exit $st'"; do
 +    $SHELL -c  "$init; $exit_cmd; :"
 +    command_ok_ "$exit_cmd" test $? -eq $st
 +  done
 +done
 +
 +for sig in 1 2 13 15; do
++  if is_blocked_signal $sig; then
++    skip_ -r "signal $sig seems blocked"
++    continue
++  fi
 +  if test $sig -eq 2; then
 +    # Some Korn shells might otherwise get a spurious SIGINT
 +    # signal when one is sent to the child $SHELL.
 +    trap : 2
 +  fi
 +  $SHELL -c  "$init; kill -$sig \$\$; :"
 +  rc=$?
 +  if test $sig -eq 2; then
 +    # Reset default SIGINT handler as portably as possible.
 +    trap 2 || trap - 2
 +  fi
 +  if test x"$sh_errexit_works" = x"yes"; then
 +    # The exit trap should turn into an hard errors any failure
 +    # caused by signals.
 +    command_ok_ "kill -$sig" test $rc -eq 99
 +  else
 +    # The exit trap is not installed, so that the shell should exit
 +    # with status 128+n when receiving signal number n.  But don't
 +    # be too strict in the check, as POSIX only says that "The exit
 +    # status of a command that terminated because it received a
 +    # signal shall be reported as greater than 128".
 +    command_ok_ "kill -$sig" test $rc -gt 128
 +  fi
 +  unset rc
 +done
 +
 +: Non-existent program.
 +# Solaris 10 /bin/sh erroneously exit with success right away when the
 +# following three conditions are met at the same time:
 +#   1. the `errexit' flag is active,
 +#   2. an exit trap is installed, and
 +#   3. a non-existing command is issued.
 +# Note that the non-existent command is issued as the last command to
 +# the shell in the next line; this is deliberate.
 +if $SHELL -c 'set -e; trap "exit \$?" 0; non-existent-program'; then
 +  maybe_todo=TODO reason="known Solaris /bin/sh bug"
 +else
 +  maybe_todo="" reason=""
 +fi
 +$SHELL -c  "$init; non-existent-program; :"
 +command_ok_ "command not found" -D "$maybe_todo" -r "$reason" \
 +            -- test $? -gt 0
 +
 +: Non-executable command.
 +test -f Makefile && test ! -x Makefile || \
 +  framowork_failure_ "no proper Makefile in the current directory"
 +$SHELL -c  "$init; ./Makefile; :"
 +command_ok_ "permission denied" test $? -gt 0
 +
 +: Syntax errors in the test code.
 +$SHELL -c  "$init; if :; then"
 +command_ok_ "syntax error 1" test $? -gt 0
 +$SHELL -c  "$init; fi"
 +command_ok_ "syntax error 2" test $? -gt 0
 +
 +: