diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/check-tree.sh | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/tools/check-tree.sh b/tools/check-tree.sh new file mode 100755 index 00000000..ede3e699 --- /dev/null +++ b/tools/check-tree.sh @@ -0,0 +1,91 @@ +#!/bin/bash -e + +# Preform various consistency checks of the source tree. + +die() { + printf '%s\n' "$*" + exit 1 +} + +array_contains() { + local needle="$1" + local a + shift + for a; do + [ "$a" = "$needle" ] && return 0 + done + return 1 +} + +cd "$(dirname "$0")/.." + +EXIT_CODE=0 + +############################################################################## + +check_shell_dumps() { + local TEST="$1" + local base="$(basename "$TEST")" + local dir="$(dirname "$TEST")" + local has_nft=0 + local has_nodump=0 + local nft_name + local nodump_name + + if [ ! -d "$dir/dumps/" ] ; then + echo "\"$TEST\" has no \"$dir/dumps/\" directory" + EXIT_CODE=1 + return 0 + fi + + nft_name="$dir/dumps/$base.nft" + nodump_name="$dir/dumps/$base.nodump" + + [ -f "$nft_name" ] && has_nft=1 + [ -f "$nodump_name" ] && has_nodump=1 + + if [ "$has_nft" != 1 -a "$has_nodump" != 1 ] ; then + echo "\"$TEST\" has no \"$dir/dumps/$base.{nft,nodump}\" file" + EXIT_CODE=1 + elif [ "$has_nft" == 1 -a "$has_nodump" == 1 ] ; then + echo "\"$TEST\" has both \"$dir/dumps/$base.{nft,nodump}\" files" + EXIT_CODE=1 + elif [ "$has_nodump" == 1 -a -s "$nodump_name" ] ; then + echo "\"$TEST\" has a non-empty \"$dir/dumps/$base.nodump\" file" + EXIT_CODE=1 + fi +} + +SHELL_TESTS=( $(find "tests/shell/testcases/" -type f -executable | LANG=C sort) ) + +if [ "${#SHELL_TESTS[@]}" -eq 0 ] ; then + echo "No executable tests under \"tests/shell/testcases/\" found" + EXIT_CODE=1 +fi +for t in "${SHELL_TESTS[@]}" ; do + check_shell_dumps "$t" +done + +############################################################################## + +SHELL_TESTS2=( $(./tests/shell/run-tests.sh --list-tests) ) +if [ "${SHELL_TESTS[*]}" != "${SHELL_TESTS2[*]}" ] ; then + echo "\`./tests/shell/run-tests.sh --list-tests\` does not list the expected tests" + EXIT_CODE=1 +fi + +############################################################################## + +FILES=( $(find "tests/shell/testcases/" -type f | sed -n 's#\(tests/shell/testcases\(/.*\)\?/\)dumps/\(.*\)\.\(nft\|nodump\)$#\0#p' | LANG=C sort) ) + +for f in "${FILES[@]}" ; do + f2="$(echo "$f" | sed -n 's#\(tests/shell/testcases\(/.*\)\?/\)dumps/\(.*\)\.\(nft\|nodump\)$#\1\3#p')" + if ! array_contains "$f2" "${SHELL_TESTS[@]}" ; then + echo "\"$f\" has no test \"$f2\"" + EXIT_CODE=1 + fi +done + +############################################################################## + +exit "$EXIT_CODE" |