From: Florian Westphal Date: Tue, 8 Apr 2025 14:21:32 +0000 (+0200) Subject: tests: shell: add feature check for count output change X-Git-Tag: v1.1.4~47 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7b21b7e387e30de4c4147c82247655cca608d2fd;p=thirdparty%2Fnftables.git tests: shell: add feature check for count output change New kernels with latest nft release will print the number of set elements allocated on the kernel side. This causes shell test dump validation to fail in several places. We can't just update the affected dump files because the test cases are also supposed to pass on current -stable releases. Add a feature check for this. Dump failure can then use sed to postprocess the stored dump file and can then call diff a second time. Signed-off-by: Florian Westphal --- diff --git a/tests/shell/features/setcount.sh b/tests/shell/features/setcount.sh new file mode 100755 index 00000000..9c2f75c3 --- /dev/null +++ b/tests/shell/features/setcount.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +$NFT -f - < "$NFT_TEST_TESTTMPDIR/ruleset-diff" ; then + rm -f "$NFT_TEST_TESTTMPDIR/ruleset-diff" + return + fi + + if [ $NFT_TEST_HAVE_setcount = n ];then + # old kernel or nft binary, expect "size 42", not "size 42 # count 1". + sed s/.\#\ count\ .\*//g "$dumpfile" > "$NFT_TEST_TESTTMPDIR/ruleset-diff-postprocess" + + if $DIFF -u "$NFT_TEST_TESTTMPDIR/ruleset-diff-postprocess" "$after" > /dev/null ; then + rm -f "$NFT_TEST_TESTTMPDIR/ruleset-diff" "$NFT_TEST_TESTTMPDIR/ruleset-diff-postprocess" + return + fi + fi + + show_file "$NFT_TEST_TESTTMPDIR/ruleset-diff" "Failed \`$DIFF -u \"$dumpfile\" \"$after\"\`" >> "$NFT_TEST_TESTTMPDIR/rc-failed-dump" + rc_dump=1 +} + json_pretty() { "$NFT_TEST_BASEDIR/helpers/json-pretty.sh" "$@" 2>&1 || : } @@ -196,15 +221,9 @@ if [ "$rc_test" -eq 0 -a '(' "$DUMPGEN" = all -o "$DUMPGEN" = y ')' ] ; then fi fi -rc_dump=0 if [ "$rc_test" -ne 77 -a "$dump_written" != y ] ; then if [ -f "$DUMPFILE" ] ; then - if ! $DIFF -u "$DUMPFILE" "$NFT_TEST_TESTTMPDIR/ruleset-after" &> "$NFT_TEST_TESTTMPDIR/ruleset-diff" ; then - show_file "$NFT_TEST_TESTTMPDIR/ruleset-diff" "Failed \`$DIFF -u \"$DUMPFILE\" \"$NFT_TEST_TESTTMPDIR/ruleset-after\"\`" >> "$NFT_TEST_TESTTMPDIR/rc-failed-dump" - rc_dump=1 - else - rm -f "$NFT_TEST_TESTTMPDIR/ruleset-diff" - fi + diff_check_setcount "$DUMPFILE" "$NFT_TEST_TESTTMPDIR/ruleset-after" fi if [ "$NFT_TEST_HAVE_json" != n -a -f "$JDUMPFILE" ] ; then if ! $DIFF -u "$JDUMPFILE" "$NFT_TEST_TESTTMPDIR/ruleset-after.json-pretty" &> "$NFT_TEST_TESTTMPDIR/ruleset-diff.json" ; then diff --git a/tests/shell/testcases/rule_management/0011reset_0 b/tests/shell/testcases/rule_management/0011reset_0 index 2004b17d..5e65ced9 100755 --- a/tests/shell/testcases/rule_management/0011reset_0 +++ b/tests/shell/testcases/rule_management/0011reset_0 @@ -4,6 +4,12 @@ set -e +if [ $NFT_TEST_HAVE_setcount = y ]; then + size="size 65535 # count 1" +else + size="size 65535" +fi + echo "loading ruleset with anonymous set" $NFT -f - <