From e69be63ca99b472872c2a213485c595d444cf0af Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 6 Sep 2023 13:52:05 +0200 Subject: tests/shell: rework finding tests and add "--list-tests" option Cleanup finding the test files. Also add a "--list-tests" option to see which tests are found and would run. Also get rid of the FIND="$(which find)" detection. Which system doesn't have a working find? Also, we can just fail when we try to use find, and don't need a check first. This is still after "unshare", which will be addressed next. Signed-off-by: Thomas Haller Signed-off-by: Florian Westphal --- tests/shell/run-tests.sh | 58 +++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 28 deletions(-) (limited to 'tests/shell/run-tests.sh') diff --git a/tests/shell/run-tests.sh b/tests/shell/run-tests.sh index a1576493..5f526dd8 100755 --- a/tests/shell/run-tests.sh +++ b/tests/shell/run-tests.sh @@ -14,14 +14,18 @@ msg_info() { } usage() { - echo " $0 [OPTIONS]" + echo " $0 [OPTIONS] [TESTS...]" echo echo "OPTIONS:" - echo " -h|--help : Print usage." - echo " -v : Sets VERBOSE=y." - echo " -g : Sets DUMPGEN=y." - echo " -V : Sets VALGRIND=y." - echo " -K : Sets KMEMLEAK=y." + echo " -h|--help : Print usage." + echo " -L|--list-tests : List test names and quit." + echo " -v : Sets VERBOSE=y. Specifying tests without \"--\" enables verbose mode." + echo " -g : Sets DUMPGEN=y." + echo " -V : Sets VALGRIND=y." + echo " -K : Sets KMEMLEAK=y." + echo " -- : Separate options from tests." + echo " [TESTS...] : Other options are treated as test names," + echo " that is, executables that are run by the runner." echo echo "ENVIRONMENT VARIABLES:" echo " NFT= : Path to nft executable. Will be called as \`\$NFT [...]\` so" @@ -35,8 +39,8 @@ usage() { } # Configuration -TESTDIR="./$(dirname $0)/testcases" -SRC_NFT="$(dirname $0)/../../src/nft" +BASEDIR="$(dirname "$0")" +SRC_NFT="$BASEDIR/../../src/nft" DIFF=$(which diff) if [ "$(id -u)" != "0" ] ; then @@ -56,6 +60,7 @@ VERBOSE="$VERBOSE" DUMPGEN="$DUMPGEN" VALGRIND="$VALGRIND" KMEMLEAK="$KMEMLEAK" +DO_LIST_TESTS= TESTS=() @@ -79,6 +84,9 @@ while [ $# -gt 0 ] ; do usage exit 0 ;; + -L|--list-tests) + DO_LIST_TESTS=y + ;; --) TESTS+=( "$@" ) shift $# @@ -92,7 +100,19 @@ while [ $# -gt 0 ] ; do esac done -SINGLE="${TESTS[*]}" +find_tests() { + find "$1" -type f -executable | sort +} + +if [ "${#TESTS[@]}" -eq 0 ] ; then + TESTS=( $(find_tests "$BASEDIR/testcases/") ) + test "${#TESTS[@]}" -gt 0 || msg_error "Could not find tests" +fi + +if [ "$DO_LIST_TESTS" = y ] ; then + printf '%s\n' "${TESTS[@]}" + exit 0 +fi [ -z "$NFT" ] && NFT=$SRC_NFT ${NFT} > /dev/null 2>&1 @@ -103,15 +123,6 @@ else msg_info "using nft command: ${NFT}" fi -if [ ! -d "$TESTDIR" ] ; then - msg_error "missing testdir $TESTDIR" -fi - -FIND="$(which find)" -if [ ! -x "$FIND" ] ; then - msg_error "no find binary found" -fi - MODPROBE="$(which modprobe)" if [ ! -x "$MODPROBE" ] ; then msg_error "no modprobe binary found" @@ -146,14 +157,6 @@ kernel_cleanup() { nft_xfrm } -find_tests() { - if [ ! -z "$SINGLE" ] ; then - echo $SINGLE - return - fi - ${FIND} ${TESTDIR} -type f -executable | sort -} - printscript() { # (cmd, tmpd) cat <