From 7b21b7e387e30de4c4147c82247655cca608d2fd Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Tue, 8 Apr 2025 16:21:32 +0200 Subject: [PATCH] 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 --- tests/shell/features/setcount.sh | 13 ++++++++ tests/shell/helpers/test-wrapper.sh | 33 +++++++++++++++---- .../testcases/rule_management/0011reset_0 | 30 ++++++++++------- .../rule_management/dumps/0011reset_0.nft | 2 +- .../sets/dumps/0016element_leak_0.nft | 2 +- .../sets/dumps/0017add_after_flush_0.nft | 2 +- .../sets/dumps/0018set_check_size_1.nft | 2 +- .../sets/dumps/0019set_check_size_0.nft | 2 +- .../sets/dumps/0045concat_ipv4_service.nft | 2 +- .../sets/dumps/0057set_create_fails_0.nft | 2 +- .../sets/dumps/0060set_multistmt_1.nft | 2 +- 11 files changed, 65 insertions(+), 27 deletions(-) create mode 100755 tests/shell/features/setcount.sh diff --git a/tests/shell/features/setcount.sh b/tests/shell/features/setcount.sh new file mode 100755 index 000000000..9c2f75c3a --- /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 2004b17d5..5e65ced94 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 - <