]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
tests: shell: extend runtime set element automerge to cover partial deletions
authorPablo Neira Ayuso <pablo@netfilter.org>
Sun, 15 Jan 2023 19:17:50 +0000 (20:17 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 24 Jan 2023 18:41:07 +0000 (19:41 +0100)
Perform partial deletions of an existing interval and check that the
set remains in consistent state.

Before the follow kernel fixes:

 netfilter: nft_set_rbtree: skip elements in transaction from garbage collection
 netfilter: nft_set_rbtree: Switch to node list walk for overlap detection

without these patches, this test fails with bogus overlap reports.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
tests/shell/testcases/sets/automerge_0

index c9fb609571fa8e74c51e949f797a8ed433222cab..7530b3db73170aa8d447bd9a1b8ac71f5c35fbe1 100755 (executable)
@@ -38,6 +38,11 @@ i=0
 cat $tmpfile3 | while read line && [ $i -lt 10 ]
 do
        $NFT add element inet x y { $line }
+       if [ $? -ne 0 ]
+       then
+               echo "failed to add $line"
+               exit 1
+       fi
        i=$((i+1))
 done
 
@@ -51,12 +56,56 @@ do
                echo "failed to add $from-$to"
                exit 1
        fi
-       $NFT get element inet x y { $from-$to }
+
+       $NFT get element inet x y { $from-$to } 1>/dev/null
        if [ $? -ne 0 ]
        then
                echo "failed to get $from-$to"
                exit 1
        fi
+
+       # partial removals in the previous random range
+       from2=$(($from+10))
+       to2=$(($to-10))
+       $NFT delete element inet x y { $from, $to, $from2-$to2 }
+       if [ $? -ne 0 ]
+       then
+               echo "failed to delete $from, $to, $from2-$to2"
+               exit 1
+       fi
+
+       # check deletions are correct
+       from=$(($from+1))
+       $NFT get element inet x y { $from } 1>/dev/null
+       if [ $? -ne 0 ]
+       then
+               echo "failed to get $from"
+               exit 1
+       fi
+
+       to=$(($to-1))
+       $NFT get element inet x y { $to } 1>/dev/null
+       if [ $? -ne 0 ]
+       then
+               echo "failed to get $to"
+               exit 1
+       fi
+
+       from2=$(($from2-1))
+       $NFT get element inet x y { $from2 } 1>/dev/null
+       if [ $? -ne 0 ]
+       then
+               echo "failed to get $from2"
+               exit 1
+       fi
+       to2=$(($to2+1))
+
+       $NFT get element inet x y { $to2 } 1>/dev/null
+       if [ $? -ne 0 ]
+       then
+               echo "failed to get $to2"
+               exit 1
+       fi
 done
 
 rm -f $tmpfile