2024-01-02 18:11:34 +00:00
#!/usr/bin/env bash
2022-02-06 23:23:02 +00:00
# `run-gnu-test.bash [TEST]`
2022-02-03 19:42:13 +00:00
# run GNU test (or all tests if TEST is missing/null)
2022-02-06 23:23:02 +00:00
2024-01-02 18:11:34 +00:00
# spell-checker:ignore (env/vars) GNULIB SRCDIR SUBDIRS OSTYPE ; (utils) shellcheck gnproc greadlink
2022-02-03 19:42:13 +00:00
2022-02-22 14:00:37 +00:00
# ref: [How the GNU coreutils are tested](https://www.pixelbeat.org/docs/coreutils-testing.html) @@ <https://archive.is/p2ITW>
# * note: to run a single test => `make check TESTS=PATH/TO/TEST/SCRIPT SUBDIRS=. VERBOSE=yes`
2024-01-02 18:11:34 +00:00
# Use GNU version for make, nproc, readlink on *BSD
case " $OSTYPE " in
*bsd*)
MAKE = "gmake"
NPROC = "gnproc"
READLINK = "greadlink"
; ;
*)
MAKE = "make"
NPROC = "nproc"
READLINK = "readlink"
; ;
esac
ME_dir = " $( dirname -- " $( " ${ READLINK } " -fm -- " $0 " ) " ) "
2022-02-03 19:42:13 +00:00
REPO_main_dir = " $( dirname -- " ${ ME_dir } " ) "
2022-02-06 23:23:02 +00:00
echo " ME_dir=' ${ ME_dir } ' "
echo " REPO_main_dir=' ${ REPO_main_dir } ' "
2021-05-21 16:25:23 +00:00
set -e
2022-02-03 19:42:13 +00:00
2022-02-06 23:23:02 +00:00
### * config (from environment with fallback defaults); note: GNU and GNULIB are expected to be sibling repo directories
2022-02-03 19:42:13 +00:00
path_UUTILS = ${ path_UUTILS :- ${ REPO_main_dir } }
2024-01-02 18:11:34 +00:00
path_GNU = " $( " ${ READLINK } " -fm -- " ${ path_GNU :- ${ path_UUTILS } /../gnu } " ) "
2022-02-03 19:42:13 +00:00
2022-02-06 23:23:02 +00:00
echo " path_UUTILS=' ${ path_UUTILS } ' "
echo " path_GNU=' ${ path_GNU } ' "
2022-02-03 19:42:13 +00:00
2022-02-06 23:23:02 +00:00
###
2022-02-03 19:42:13 +00:00
2022-02-06 23:23:02 +00:00
cd " ${ path_GNU } " && echo " [ pwd:' ${ PWD } ' ] "
2021-05-21 16:25:23 +00:00
2021-06-02 18:59:53 +00:00
export RUST_BACKTRACE = 1
2021-06-02 19:21:12 +00:00
2023-09-26 07:33:14 +00:00
if test " $1 " != "run-root" ; then
if test $# -ge 1; then
# if set, run only the tests passed
SPECIFIC_TESTS = ""
for t in " $@ " ; do
# Construct the full path
full_path = " $path_GNU / $t "
# Check if the file exists with .sh, .pl extension or without any extension in the $path_GNU directory
if [ -f " $full_path " ] || [ -f " $full_path .sh " ] || [ -f " $full_path .pl " ] ; then
SPECIFIC_TESTS = " $SPECIFIC_TESTS $t "
else
echo " Error: Test file $full_path , $full_path .sh, or $full_path .pl does not exist! "
exit 1
fi
done
# trim it
2024-01-02 18:11:34 +00:00
SPECIFIC_TESTS = $( echo " $SPECIFIC_TESTS " | xargs)
2023-09-26 07:33:14 +00:00
echo " Running specific tests: $SPECIFIC_TESTS "
fi
2021-06-02 19:21:12 +00:00
fi
2022-02-06 23:23:02 +00:00
# * timeout used to kill occasionally errant/"stuck" processes (note: 'release' testing takes ~1 hour; 'debug' testing takes ~2.5 hours)
# * `gl_public_submodule_commit=` disables testing for use of a "public" gnulib commit (which will fail when using shallow gnulib checkouts)
# * `srcdir=..` specifies the GNU source directory for tests (fixing failing/confused 'tests/factor/tNN.sh' tests and causing no harm to other tests)
2022-02-01 06:55:11 +00:00
#shellcheck disable=SC2086
2022-02-20 10:29:18 +00:00
2022-09-17 09:08:12 +00:00
if test " $1 " != "run-root" ; then
2023-07-17 02:53:44 +00:00
# run the regular tests
2022-09-17 09:08:12 +00:00
if test $# -ge 1; then
2024-01-02 18:11:34 +00:00
timeout -sKILL 4h " ${ MAKE } " -j " $( " ${ NPROC } " ) " check TESTS = " $SPECIFIC_TESTS " SUBDIRS = . RUN_EXPENSIVE_TESTS = yes RUN_VERY_EXPENSIVE_TESTS = yes VERBOSE = no gl_public_submodule_commit = "" srcdir = " ${ path_GNU } " || : # Kill after 4 hours in case something gets stuck in make
2022-09-17 09:08:12 +00:00
else
2024-01-02 18:11:34 +00:00
timeout -sKILL 4h " ${ MAKE } " -j " $( " ${ NPROC } " ) " check SUBDIRS = . RUN_EXPENSIVE_TESTS = yes RUN_VERY_EXPENSIVE_TESTS = yes VERBOSE = no gl_public_submodule_commit = "" srcdir = " ${ path_GNU } " || : # Kill after 4 hours in case something gets stuck in make
2022-09-17 09:08:12 +00:00
fi
else
2023-07-17 02:53:44 +00:00
# in case we would like to run tests requiring root
2022-09-17 09:08:12 +00:00
if test -z " $1 " -o " $1 " = = "run-root" ; then
if test -n " $CI " ; then
echo "Running check-root to run only root tests"
2024-01-02 18:11:34 +00:00
sudo " ${ MAKE } " -j " $( " ${ NPROC } " ) " check-root SUBDIRS = . RUN_EXPENSIVE_TESTS = yes RUN_VERY_EXPENSIVE_TESTS = yes VERBOSE = no gl_public_submodule_commit = "" srcdir = " ${ path_GNU } " TEST_SUITE_LOG = "tests/test-suite-root.log" || :
2022-09-17 09:08:12 +00:00
fi
fi
2023-04-13 14:47:05 +00:00
fi