diffutils/tests/init.cfg
Jim Meyering 03e379ecc8 tests: avoid "make check" hang on CentOS Stream 9 with valgrind-3.19.0
* tests/init.cfg (require_timeout_): New function, from grep.
(require_valgrind_): Use it, to kill -9 after 3 seconds, because the
default SIGINT was insufficient.
2025-02-02 19:01:25 -08:00

124 lines
3.7 KiB
INI

# This file is sourced by init.sh, *before* its initialization.
# Copyright (C) 2010-2025 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
# Skip the current test if valgrind doesn't work,
# which could happen if not installed,
# or hasn't support for the built architecture,
# or hasn't appropriate error suppressions installed etc.
# This goes hand in hand with the "exec 9>&2;" in tests/Makefile.am's
# TESTS_ENVIRONMENT definition.
stderr_fileno_=9
# Having an unsearchable directory in PATH causes execve to fail with EACCES
# when applied to an unresolvable program name, contrary to the desired ENOENT.
# Avoid the problem by rewriting PATH to exclude unsearchable directories.
# Also, if PATH lacks /sbin and/or /usr/sbin, append it/them.
sanitize_path_()
{
# FIXME: remove double quotes around $IFS when all tests use init.sh.
# They constitute a work-around for a bug in FreeBSD 8.1's /bin/sh.
local saved_IFS="$IFS"
IFS=$PATH_SEPARATOR
set -- $PATH
IFS=$saved_IFS
local d d1
local colon=
local new_path=
for d in "$@"; do
test -z "$d" && d1=. || d1=$d
if ls -d "$d1/." > /dev/null 2>&1; then
new_path="$new_path$colon$d"
colon=$PATH_SEPARATOR
fi
done
for d in /sbin /usr/sbin ; do
case "$PATH_SEPARATOR$new_path$PATH_SEPARATOR" in
*$PATH_SEPARATOR$d$PATH_SEPARATOR*) ;;
*) new_path="$new_path$PATH_SEPARATOR$d" ;;
esac
done
PATH=$new_path
export PATH
}
require_timeout_()
{
( timeout 10s true ) > /dev/null 2>&1 \
|| skip_ your system lacks the timeout program
returns_ 1 timeout 10s false \
|| skip_ your system has a non-GNU timeout program
returns_ 124 timeout 0.01 sleep 0.02 \
|| skip_ "'timeout 0.01 sleep 0.02' did not time out"
}
require_valgrind_()
{
require_timeout_
local errout; errout=$(
LC_ALL=C timeout --signal=9 3 valgrind --error-exitcode=1 diff /dev/null /dev/null 2>&1
) ||
skip_ "requires a working valgrind"
case $errout in
*'Serious error'*)
skip_ "requires a valgrind without serious errors";;
esac
}
# Skip the current test if we lack Perl.
require_perl_()
{
: ${PERL=perl}
$PERL -e 'use warnings' > /dev/null 2>&1 \
|| skip_ 'configure did not find a usable version of Perl'
}
# Run this test in a UTF-8 locale if possible, and skip the test otherwise.
# Prefer en_US for its diagnostics.
require_utf8_locale_()
{
local locale
if test "`(locale charmap) 2>/dev/null`" != UTF-8; then
for locale in en_US.UTF-8 `(locale -a) 2>/dev/null` not-found; do
case $locale in
*.[Uu][Tt][Ff]*8)
if test "`(LC_ALL=$locale locale charmap) 2>/dev/null`" = UTF-8; then
LC_ALL=$locale
export LC_ALL
break
fi;;
not-found)
skip_ "No UTF-8 locale found";;
esac
done
fi
# Solaris 10's /usr/bin/tr can silently malfunction. Try to find one that works.
found_working_tr=0
for i in tr /usr/xpg4/bin/tr gtr; do
tr() { env $i "$@"; }
test '一' = "$(printf 一|tr a b)" && { found_working_tr=1; break; }
done
test $found_working_tr = 1 || skip_ "failed to find a working tr program"
}
sanitize_path_