diff options
Diffstat (limited to 'tests/shell/run-tests.sh')
-rwxr-xr-x | tests/shell/run-tests.sh | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/shell/run-tests.sh b/tests/shell/run-tests.sh new file mode 100755 index 00000000..df2670b1 --- /dev/null +++ b/tests/shell/run-tests.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# Configuration +TESTDIR="./" +RETURNCODE_SEPARATOR="_" + +msg_error() { + echo "E: $1 ..." >&2 + exit 1 +} + +msg_warn() { + echo "W: $1" >&2 +} + +msg_info() { + echo "I: $1" +} + +if [ "$(id -u)" != "0" ] ; then + msg_error "this requires root!" +fi + +[ -z "$NFT" ] && NFT="$(which nft)" +if [ ! -x "$NFT" ] ; then + msg_error "no nft binary!" +else + msg_info "using nft binary $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 + +if [ "$1" == "-v" ] ; then + VERBOSE=y +fi + +echo "" +ok=0 +failed=0 +for testfile in $(${FIND} ${TESTDIR} -executable -regex .*${RETURNCODE_SEPARATOR}[0-9]+) +do + $NFT flush ruleset + + rc_spec=$(awk -F${RETURNCODE_SEPARATOR} '{print $NF}' <<< $testfile) + test_output=$(NFT=$NFT ${testfile} ${TESTS_OUTPUT} 2>&1) + rc_got=$? + if [ "$rc_got" == "$rc_spec" ] ; then + msg_info "[OK] $testfile" + [ "$VERBOSE" == "y" ] && [ ! -z "$test_output" ] && echo "$test_output" + ((ok++)) + else + ((failed++)) + if [ "$VERBOSE" == "y" ] ; then + msg_warn "[FAILED] $testfile: expected $rc_spec but got $rc_got" + [ ! -z "$test_output" ] && echo "$test_output" + else + msg_warn "[FAILED] $testfile" + fi + fi +done + +echo "" +msg_info "results: [OK] $ok [FAILED] $failed [TOTAL] $((ok+failed))" + +$NFT flush ruleset |