summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xtools/check-tree.sh91
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"