tests: use bash in some scripts to avoid false failures

* init.cfg (require_bash_as_SHELL_): A new function to replace
SHELL for the current test, with bash if available.
This is useful on OpenIndiana 11 where /bin/sh was seen
to have races in handling of SIGPIPE.
* tests/misc/seq-epipe.sh: Use the new function to enforce bash.
* tests/misc/env-signal-handler.sh: Likewise.
Reported by Bruno Haible
This commit is contained in:
Pádraig Brady 2020-03-01 21:49:16 +00:00
parent 5cdab9f26b
commit 04e2b9b1a6
3 changed files with 20 additions and 1 deletions

View File

@ -629,6 +629,15 @@ trap_sigpipe_or_skip_()
skip_ 'trapping SIGPIPE is not supported'
}
require_bash_as_SHELL_()
{
if bash --version >/dev/null 2>&1; then
SHELL='bash'
else
skip_ 'bash is required'
fi
}
# Disable the current test if the working directory seems to have
# the setgid bit set.
skip_if_setgid_()

View File

@ -20,6 +20,11 @@
print_ver_ env seq test timeout printf
trap_sigpipe_or_skip_
# /bin/sh has an intermittent failure in ignoring SIGPIPE on OpenIndiana 11
# so we require bash as discussed at:
# https://lists.gnu.org/archive/html/coreutils/2020-03/msg00004.html
require_bash_as_SHELL_
# Paraphrasing http://bugs.gnu.org/34488#8:
# POSIX requires that sh started with an inherited ignored SIGPIPE must
# silently ignore all attempts from within the shell to restore SIGPIPE

View File

@ -20,8 +20,13 @@
print_ver_ seq
trap_sigpipe_or_skip_
# /bin/sh has an intermittent failure in ignoring SIGPIPE on OpenIndiana 11
# so we require bash as discussed at:
# https://lists.gnu.org/archive/html/coreutils/2020-03/msg00004.html
require_bash_as_SHELL_
# upon EPIPE with signals ignored, 'seq' should exit with an error.
timeout 10 sh -c \
timeout 10 $SHELL -c \
'trap "" PIPE && { seq inf 2>err; echo $? >code; } | head -n1' >out
# Exit-code must be 1, indicating 'write error'