summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2025-04-08 16:21:32 +0200
committerFlorian Westphal <fw@strlen.de>2025-06-22 21:40:40 +0200
commit7b21b7e387e30de4c4147c82247655cca608d2fd (patch)
tree37d4390cfe185733c8215f6e905248ced9508678
parent8ff87c8fd483eb3fdab5839cccaf100b593fe92e (diff)
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 <fw@strlen.de>
-rwxr-xr-xtests/shell/features/setcount.sh13
-rwxr-xr-xtests/shell/helpers/test-wrapper.sh33
-rwxr-xr-xtests/shell/testcases/rule_management/0011reset_030
-rw-r--r--tests/shell/testcases/rule_management/dumps/0011reset_0.nft2
-rw-r--r--tests/shell/testcases/sets/dumps/0016element_leak_0.nft2
-rw-r--r--tests/shell/testcases/sets/dumps/0017add_after_flush_0.nft2
-rw-r--r--tests/shell/testcases/sets/dumps/0018set_check_size_1.nft2
-rw-r--r--tests/shell/testcases/sets/dumps/0019set_check_size_0.nft2
-rw-r--r--tests/shell/testcases/sets/dumps/0045concat_ipv4_service.nft2
-rw-r--r--tests/shell/testcases/sets/dumps/0057set_create_fails_0.nft2
-rw-r--r--tests/shell/testcases/sets/dumps/0060set_multistmt_1.nft2
11 files changed, 65 insertions, 27 deletions
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 - <<EOF
+table ip t {
+ set s {
+ type ipv4_addr
+ size 2
+ elements = { 1.2.3.4 }
+ }
+}
+EOF
+
+$NFT list set ip t s | grep -q 'size 2 # count 1'
diff --git a/tests/shell/helpers/test-wrapper.sh b/tests/shell/helpers/test-wrapper.sh
index 6ec4e030..cef38a59 100755
--- a/tests/shell/helpers/test-wrapper.sh
+++ b/tests/shell/helpers/test-wrapper.sh
@@ -5,6 +5,8 @@
#
# For some printf debugging, you can also patch this file.
+rc_dump=0
+
array_contains() {
local needle="$1"
local a
@@ -25,6 +27,29 @@ show_file() {
printf "<<<<\n"
}
+diff_check_setcount() {
+ local dumpfile="$1"
+ local after="$2"
+
+ if $DIFF -u "$dumpfile" "$after" &> "$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 - <<EOF
table t {
@@ -60,10 +66,10 @@ EOF
echo "resetting specific rule"
handle=$($NFT -a list chain t c | sed -n 's/.*accept # handle \([0-9]*\)$/\1/p')
$NFT reset rule t c handle $handle
-EXPECT='table ip t {
+EXPECT="table ip t {
set s {
type ipv4_addr
- size 65535
+ $size
flags dynamic
counter
elements = { 1.1.1.1 counter packets 1 bytes 11 }
@@ -90,7 +96,7 @@ table ip t2 {
counter packets 7 bytes 17 accept
counter packets 8 bytes 18 drop
}
-}'
+}"
$DIFF -u <(echo "$EXPECT") <($NFT list ruleset)
echo "resetting specific chain"
@@ -103,10 +109,10 @@ EXPECT='table ip t {
$DIFF -u <(echo "$EXPECT") <($NFT reset rules chain t c2)
echo "resetting specific table"
-EXPECT='table ip t {
+EXPECT="table ip t {
set s {
type ipv4_addr
- size 65535
+ $size
flags dynamic
counter
elements = { 1.1.1.1 counter packets 1 bytes 11 }
@@ -121,14 +127,14 @@ EXPECT='table ip t {
counter packets 0 bytes 0 accept
counter packets 0 bytes 0 drop
}
-}'
+}"
$DIFF -u <(echo "$EXPECT") <($NFT reset rules table t)
echo "resetting specific family"
-EXPECT='table ip t {
+EXPECT="table ip t {
set s {
type ipv4_addr
- size 65535
+ $size
flags dynamic
counter
elements = { 1.1.1.1 counter packets 1 bytes 11 }
@@ -149,14 +155,14 @@ table ip t2 {
counter packets 7 bytes 17 accept
counter packets 8 bytes 18 drop
}
-}'
+}"
$DIFF -u <(echo "$EXPECT") <($NFT reset rules ip)
echo "resetting whole ruleset"
-EXPECT='table ip t {
+EXPECT="table ip t {
set s {
type ipv4_addr
- size 65535
+ $size
flags dynamic
counter
elements = { 1.1.1.1 counter packets 1 bytes 11 }
@@ -183,5 +189,5 @@ table ip t2 {
counter packets 0 bytes 0 accept
counter packets 0 bytes 0 drop
}
-}'
+}"
$DIFF -u <(echo "$EXPECT") <($NFT reset rules)
diff --git a/tests/shell/testcases/rule_management/dumps/0011reset_0.nft b/tests/shell/testcases/rule_management/dumps/0011reset_0.nft
index 3b4f5a11..3c29b582 100644
--- a/tests/shell/testcases/rule_management/dumps/0011reset_0.nft
+++ b/tests/shell/testcases/rule_management/dumps/0011reset_0.nft
@@ -1,7 +1,7 @@
table ip t {
set s {
type ipv4_addr
- size 65535
+ size 65535 # count 1
flags dynamic
counter
elements = { 1.1.1.1 counter packets 1 bytes 11 }
diff --git a/tests/shell/testcases/sets/dumps/0016element_leak_0.nft b/tests/shell/testcases/sets/dumps/0016element_leak_0.nft
index 9d2b0afe..debd819d 100644
--- a/tests/shell/testcases/sets/dumps/0016element_leak_0.nft
+++ b/tests/shell/testcases/sets/dumps/0016element_leak_0.nft
@@ -1,7 +1,7 @@
table ip x {
set s {
type ipv4_addr
- size 2
+ size 2 # count 1
elements = { 1.1.1.1 }
}
}
diff --git a/tests/shell/testcases/sets/dumps/0017add_after_flush_0.nft b/tests/shell/testcases/sets/dumps/0017add_after_flush_0.nft
index 9d2b0afe..debd819d 100644
--- a/tests/shell/testcases/sets/dumps/0017add_after_flush_0.nft
+++ b/tests/shell/testcases/sets/dumps/0017add_after_flush_0.nft
@@ -1,7 +1,7 @@
table ip x {
set s {
type ipv4_addr
- size 2
+ size 2 # count 1
elements = { 1.1.1.1 }
}
}
diff --git a/tests/shell/testcases/sets/dumps/0018set_check_size_1.nft b/tests/shell/testcases/sets/dumps/0018set_check_size_1.nft
index 8cd37076..c4b69ef8 100644
--- a/tests/shell/testcases/sets/dumps/0018set_check_size_1.nft
+++ b/tests/shell/testcases/sets/dumps/0018set_check_size_1.nft
@@ -1,7 +1,7 @@
table ip x {
set s {
type ipv4_addr
- size 2
+ size 2 # count 2
elements = { 1.1.1.1, 1.1.1.2 }
}
}
diff --git a/tests/shell/testcases/sets/dumps/0019set_check_size_0.nft b/tests/shell/testcases/sets/dumps/0019set_check_size_0.nft
index 8cd37076..c4b69ef8 100644
--- a/tests/shell/testcases/sets/dumps/0019set_check_size_0.nft
+++ b/tests/shell/testcases/sets/dumps/0019set_check_size_0.nft
@@ -1,7 +1,7 @@
table ip x {
set s {
type ipv4_addr
- size 2
+ size 2 # count 2
elements = { 1.1.1.1, 1.1.1.2 }
}
}
diff --git a/tests/shell/testcases/sets/dumps/0045concat_ipv4_service.nft b/tests/shell/testcases/sets/dumps/0045concat_ipv4_service.nft
index e548a17a..fb9634e6 100644
--- a/tests/shell/testcases/sets/dumps/0045concat_ipv4_service.nft
+++ b/tests/shell/testcases/sets/dumps/0045concat_ipv4_service.nft
@@ -1,7 +1,7 @@
table inet t {
set s {
type ipv4_addr . inet_service
- size 65536
+ size 65536 # count 1
flags dynamic,timeout
elements = { 192.168.7.1 . 22 }
}
diff --git a/tests/shell/testcases/sets/dumps/0057set_create_fails_0.nft b/tests/shell/testcases/sets/dumps/0057set_create_fails_0.nft
index de43d565..443ca711 100644
--- a/tests/shell/testcases/sets/dumps/0057set_create_fails_0.nft
+++ b/tests/shell/testcases/sets/dumps/0057set_create_fails_0.nft
@@ -1,7 +1,7 @@
table inet filter {
set test {
type ipv4_addr
- size 65535
+ size 65535 # count 1
elements = { 1.1.1.1 }
}
}
diff --git a/tests/shell/testcases/sets/dumps/0060set_multistmt_1.nft b/tests/shell/testcases/sets/dumps/0060set_multistmt_1.nft
index befc2f75..0743453f 100644
--- a/tests/shell/testcases/sets/dumps/0060set_multistmt_1.nft
+++ b/tests/shell/testcases/sets/dumps/0060set_multistmt_1.nft
@@ -1,7 +1,7 @@
table ip x {
set y {
type ipv4_addr
- size 65535
+ size 65535 # count 3
flags dynamic
counter quota 500 bytes
elements = { 1.1.1.1 counter packets 0 bytes 0 quota 500 bytes,