]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: testing for core NFTSet= feature
authorTopi Miettinen <toiwoton@gmail.com>
Wed, 6 Sep 2023 18:48:02 +0000 (21:48 +0300)
committerTopi Miettinen <topimiettinen@users.noreply.github.com>
Wed, 27 Sep 2023 18:10:11 +0000 (18:10 +0000)
test/units/testsuite-75.sh

index 6e8f9fa55280d7c8ad44fcf18ab9f35222116569..dbcb53d72b5edcfdb5736324f36d9e5caddb6b51 100755 (executable)
@@ -530,7 +530,7 @@ grep -qF "fd00:dead:beef:cafe::123" "$RUN_OUT"
 
 systemctl stop resmontest.service
 
-# Test serve stale feature if nftables is installed
+# Test serve stale feature and NFTSet= if nftables is installed
 if command -v nft >/dev/null; then
     ### Test without serve stale feature ###
     NFT_FILTER_NAME=dns_port_filter
@@ -589,8 +589,63 @@ if command -v nft >/dev/null; then
     grep -qE "NXDOMAIN" "$RUN_OUT"
 
     nft flush ruleset
+
+    ### NFTSet= test
+    nft add table inet sd_test
+    nft add set inet sd_test c '{ type cgroupsv2; }'
+    nft add set inet sd_test u '{ typeof meta skuid; }'
+    nft add set inet sd_test g '{ typeof meta skgid; }'
+
+    # service
+    systemd-run -u nft-test.service -p DynamicUser=yes -p 'NFTSet=cgroup:inet:sd_test:c user:inet:sd_test:u group:inet:sd_test:g' sleep 10000
+    run nft list set inet sd_test c
+    grep -qF "nft-test.service" "$RUN_OUT"
+    uid=$(getent passwd nft-test | cut -d':' -f3)
+    run nft list set inet sd_test u
+    grep -qF "$uid" "$RUN_OUT"
+    gid=$(getent passwd nft-test | cut -d':' -f4)
+    run nft list set inet sd_test g
+    grep -qF "$gid" "$RUN_OUT"
+    systemctl stop nft-test.service
+
+    # scope
+    run systemd-run --scope -u nft-test.scope -p 'NFTSet=cgroup:inet:sd_test:c' nft list set inet sd_test c
+    grep -qF "nft-test.scope" "$RUN_OUT"
+
+    # socket
+    {
+        echo "[Socket]"
+        echo "ListenStream=12345"
+        echo "BindToDevice=lo"
+        echo "NFTSet=cgroup:inet:sd_test:c"
+    } >/etc/systemd/system/nft-test.socket
+    {
+        echo "[Service]"
+        echo "ExecStart=/usr/bin/sleep 10000"
+    } >/etc/systemd/system/nft-test.service
+    systemctl daemon-reload
+    systemctl start nft-test.socket
+    systemctl status nft-test.socket
+    run nft list set inet sd_test c
+    grep -qF "nft-test.socket" "$RUN_OUT"
+    systemctl stop nft-test.socket
+    rm /etc/systemd/system/nft-test.{socket,service}
+
+    # slice
+    mkdir /etc/systemd/system/system.slice.d
+    {
+        echo "[Slice]"
+        echo "NFTSet=cgroup:inet:sd_test:c"
+    } >/etc/systemd/system/system.slice.d/00-nft-test.conf
+    systemctl daemon-reload
+    run nft list set inet sd_test c
+    grep -qF "system.slice" "$RUN_OUT"
+    rm /etc/systemd/system/system.slice.d/00-nft-test.conf
+    rmdir /etc/systemd/system/system.slice.d
+
+    nft flush ruleset
 else
-    echo "nftables is not installed. Skipped serve stale feature test."
+    echo "nftables is not installed. Skipped serve stale feature and NFTSet= tests."
 fi
 
 ### Test resolvectl show-server-state ###