From dd131fcf8c4903138755b201e7d5c68206f60638 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 16 Feb 2023 16:31:02 +0100 Subject: [PATCH] test: add test for new "systemctl --kill-value=" functionality (as side-effect this also tests the new systemd-notify --exec switch) --- test/TEST-78-SIGQUEUE/Makefile | 1 + test/TEST-78-SIGQUEUE/test.sh | 10 +++++++++ test/units/testsuite-78.service | 7 +++++++ test/units/testsuite-78.sh | 36 +++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+) create mode 120000 test/TEST-78-SIGQUEUE/Makefile create mode 100755 test/TEST-78-SIGQUEUE/test.sh create mode 100644 test/units/testsuite-78.service create mode 100755 test/units/testsuite-78.sh diff --git a/test/TEST-78-SIGQUEUE/Makefile b/test/TEST-78-SIGQUEUE/Makefile new file mode 120000 index 00000000000..e9f93b1104c --- /dev/null +++ b/test/TEST-78-SIGQUEUE/Makefile @@ -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 index 00000000000..61e8e7d1c42 --- /dev/null +++ b/test/TEST-78-SIGQUEUE/test.sh @@ -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 index 00000000000..05f3effdb64 --- /dev/null +++ b/test/units/testsuite-78.service @@ -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 index 00000000000..16801665535 --- /dev/null +++ b/test/units/testsuite-78.sh @@ -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