}
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=<CMD> : Path to nft executable. Will be called as \`\$NFT [...]\` so"
}
# 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
DUMPGEN="$DUMPGEN"
VALGRIND="$VALGRIND"
KMEMLEAK="$KMEMLEAK"
+DO_LIST_TESTS=
TESTS=()
usage
exit 0
;;
+ -L|--list-tests)
+ DO_LIST_TESTS=y
+ ;;
--)
TESTS+=( "$@" )
shift $#
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
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"
nft_xfrm
}
-find_tests() {
- if [ ! -z "$SINGLE" ] ; then
- echo $SINGLE
- return
- fi
- ${FIND} ${TESTDIR} -type f -executable | sort
-}
-
printscript() { # (cmd, tmpd)
cat <<EOF
#!/bin/bash
check_taint
-for testfile in $(find_tests)
-do
+for testfile in "${TESTS[@]}" ; do
read taint < /proc/sys/kernel/tainted
kernel_cleanup