]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
tests/shell: expand vmap test case to also cause batch abort
authorFlorian Westphal <fw@strlen.de>
Mon, 21 Aug 2023 15:16:49 +0000 (17:16 +0200)
committerFlorian Westphal <fw@strlen.de>
Tue, 29 Aug 2023 16:10:15 +0000 (18:10 +0200)
Let the last few batches also push an update that contains
elements twice.

This is expected to cause the batch to be aborted,
which increases code coverage on kernel side.

Signed-off-by: Florian Westphal <fw@strlen.de>
tests/shell/testcases/maps/dumps/vmap_timeout.nft
tests/shell/testcases/maps/vmap_timeout

index 295971abda2ac934a03496dd6333aa153a82393e..095f894d62e165b0d7e763e51f5939c6e8f9cdd6 100644 (file)
@@ -2,12 +2,14 @@ table inet filter {
        map portmap {
                type inet_service : verdict
                flags timeout
+               gc-interval 10s
                elements = { 22 : jump ssh_input }
        }
 
        map portaddrmap {
                typeof ip daddr . th dport : verdict
                flags timeout
+               gc-interval 10s
                elements = { 1.2.3.4 . 22 : jump ssh_input }
        }
 
index a81ff4f5763f7f3c25f81d2c4a2f5c984955e725..e59d37ab40480c294e864d007ea19defc727e9c8 100755 (executable)
@@ -6,22 +6,36 @@ dumpfile=$(dirname $0)/dumps/$(basename $0).nft
 $NFT -f $dumpfile
 
 port=23
-for i in $(seq 1 400) ; do
-       timeout=$((RANDOM%3))
+for i in $(seq 1 100) ; do
+       timeout=$((RANDOM%5))
        timeout=$((timeout+1))
        j=1
 
        batched="{ $port timeout 3s : jump other_input "
-       batched_addr="{ 10.0.$((i%256)).$j . $port timeout 3s : jump other_input "
+       batched_addr="{ 10.0.$((i%256)).$j . $port timeout ${timeout}s : jump other_input "
        port=$((port + 1))
-       for j in $(seq 2 100); do
+       for j in $(seq 2 400); do
+               timeout=$((RANDOM%5))
+               timeout=$((timeout+1))
+
                batched="$batched, $port timeout ${timeout}s : jump other_input "
-               batched_addr="$batched_addr, 10.0.$((i%256)).$j . $port timeout ${timeout}s : jump other_input "
+               batched_addr="$batched_addr, 10.0.$((i%256)).$((j%256)) . $port timeout ${timeout}s : jump other_input "
                port=$((port + 1))
        done
 
+       fail_addr="$batched_addr, 1.2.3.4 . 23 timeout 5m : jump other_input,
+                                 1.2.3.4 . 23 timeout 3m : jump other_input }"
+       fail="$batched, 23 timeout 1m : jump other_input, 23 : jump other_input }"
+
        batched="$batched }"
        batched_addr="$batched_addr }"
+
+       if [ $i -gt 90 ]; then
+               # must fail, we create and $fail/$fail_addr contain one element twice.
+               $NFT create element inet filter portmap "$fail" && exit 111
+               $NFT create element inet filter portaddrmap "$fail_addr" && exit 112
+       fi
+
        $NFT add element inet filter portmap "$batched"
        $NFT add element inet filter portaddrmap "$batched_addr"
 done
@@ -30,4 +44,4 @@ $NFT add element inet filter portaddrmap { "* timeout 2s : drop" }
 $NFT add element inet filter portmap { "* timeout 3s : drop" }
 
 # wait for elements to time out
-sleep 4
+sleep 5