summaryrefslogtreecommitdiffstats
path: root/tools/check-tree.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/check-tree.sh')
-rwxr-xr-xtools/check-tree.sh21
1 files changed, 20 insertions, 1 deletions
diff --git a/tools/check-tree.sh b/tools/check-tree.sh
index 4be874fc..e358c957 100755
--- a/tools/check-tree.sh
+++ b/tools/check-tree.sh
@@ -41,6 +41,7 @@ check_shell_dumps() {
local base="$(basename "$TEST")"
local dir="$(dirname "$TEST")"
local has_nft=0
+ local has_jnft=0
local has_nodump=0
local nft_name
local nodump_name
@@ -51,9 +52,11 @@ check_shell_dumps() {
fi
nft_name="$dir/dumps/$base.nft"
+ jnft_name="$dir/dumps/$base.json-nft"
nodump_name="$dir/dumps/$base.nodump"
[ -f "$nft_name" ] && has_nft=1
+ [ -f "$jnft_name" ] && has_jnft=1
[ -f "$nodump_name" ] && has_nodump=1
if [ "$has_nft" != 1 -a "$has_nodump" != 1 ] ; then
@@ -63,6 +66,22 @@ check_shell_dumps() {
elif [ "$has_nodump" == 1 -a -s "$nodump_name" ] ; then
msg_err "\"$TEST\" has a non-empty \"$dir/dumps/$base.nodump\" file"
fi
+ if [ "$has_jnft" = 1 -a "$has_nft" != 1 ] ; then
+ msg_err "\"$TEST\" has a JSON dump file \"$jnft_name\" but lacks a dump \"$nft_name\""
+ fi
+ if [ "$has_nft" = 1 -a "$has_jnft" != 1 ] ; then
+ # it's currently known that `nft -j --check` cannot parse all dumped rulesets.
+ # Accept having no JSON dump file.
+ #
+ # This should be fixed. Currently this is only a warning.
+ msg_warn "\"$TEST\" has a dump file \"$nft_name\" but lacks a JSON dump \"$jnft_name\""
+ fi
+
+ if [ "$has_jnft" = 1 ] && command -v jq &>/dev/null ; then
+ if ! jq empty < "$jnft_name" &>/dev/null ; then
+ msg_err "\"$TEST\" has a JSON dump file \"$jnft_name\" that does not validate with \`jq empty < \"$jnft_name\"\`"
+ fi
+ fi
}
SHELL_TESTS=( $(find "tests/shell/testcases/" -type f -executable | sort) )
@@ -91,7 +110,7 @@ fi
##############################################################################
#
-F=( $(find tests/shell/testcases/ -type f | grep '^tests/shell/testcases/[^/]\+/dumps/[^/]\+\.\(nft\|nodump\)$' -v | sort) )
+F=( $(find tests/shell/testcases/ -type f | grep '^tests/shell/testcases/[^/]\+/dumps/[^/]\+\.\(json-nft\|nft\|nodump\)$' -v | sort) )
IGNORED_FILES=( tests/shell/testcases/bogons/nft-f/* )
for f in "${F[@]}" ; do
if ! array_contains "$f" "${SHELL_TESTS[@]}" "${IGNORED_FILES[@]}" ; then