]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: add test for new "systemctl --kill-value=" functionality 26447/head
authorLennart Poettering <lennart@poettering.net>
Thu, 16 Feb 2023 15:31:02 +0000 (16:31 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 17 Feb 2023 08:55:35 +0000 (09:55 +0100)
(as side-effect this also tests the new systemd-notify --exec switch)

test/TEST-78-SIGQUEUE/Makefile [new symlink]
test/TEST-78-SIGQUEUE/test.sh [new file with mode: 0755]
test/units/testsuite-78.service [new file with mode: 0644]
test/units/testsuite-78.sh [new file with mode: 0755]

diff --git a/test/TEST-78-SIGQUEUE/Makefile b/test/TEST-78-SIGQUEUE/Makefile
new file mode 120000 (symlink)
index 0000000..e9f93b1
--- /dev/null
@@ -0,0 +1 @@
+../TEST-01-BASIC/Makefile
\ No newline at end of file
diff --git a/test/TEST-78-SIGQUEUE/test.sh b/test/TEST-78-SIGQUEUE/test.sh
new file mode 100755 (executable)
index 0000000..61e8e7d
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -e
+
+TEST_DESCRIPTION="Test queue signal logic"
+
+# shellcheck source=test/test-functions
+. "$TEST_BASE_DIR/test-functions"
+
+do_test "$@"
diff --git a/test/units/testsuite-78.service b/test/units/testsuite-78.service
new file mode 100644 (file)
index 0000000..05f3eff
--- /dev/null
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Unit]
+Description=TEST-78-SIGQUEUE
+
+[Service]
+Type=oneshot
+ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
diff --git a/test/units/testsuite-78.sh b/test/units/testsuite-78.sh
new file mode 100755 (executable)
index 0000000..1680166
--- /dev/null
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -ex
+set -o pipefail
+
+if ! env --block-signal=SIGUSR1 true 2> /dev/null ; then
+    echo "env tool too old, can't block signals, skipping test." >&2
+    echo OK >/testok
+    exit 0
+fi
+
+systemd-analyze log-level debug
+
+UNIT="test-sigqueue-$RANDOM.service"
+
+systemd-run -u "$UNIT" -p Type=notify -p DynamicUser=1 -- env --block-signal=SIGRTMIN+7 systemd-notify --exec --ready \; sleep infinity
+
+systemctl kill --kill-whom=main --kill-value=4 --signal=SIGRTMIN+7 "$UNIT"
+systemctl kill --kill-whom=main --kill-value=4 --signal=SIGRTMIN+7 "$UNIT"
+systemctl kill --kill-whom=main --kill-value=7 --signal=SIGRTMIN+7 "$UNIT"
+systemctl kill --kill-whom=main --kill-value=16 --signal=SIGRTMIN+7 "$UNIT"
+systemctl kill --kill-whom=main --kill-value=32 --signal=SIGRTMIN+7 "$UNIT"
+systemctl kill --kill-whom=main --kill-value=16 --signal=SIGRTMIN+7 "$UNIT"
+
+# We simply check that six signals are queued now. There's no easy way to check
+# from shell wich ones those are, hence we don't check that.
+P=$(systemctl show -P MainPID "$UNIT")
+
+test "$(grep SigQ: /proc/"$P"/status | cut -d: -f2 | cut -d/ -f1)" -eq 6
+
+systemctl stop $UNIT
+
+systemd-analyze log-level info
+echo OK >/testok
+
+exit 0