From: Mike Yuan Date: Tue, 21 Oct 2025 23:34:04 +0000 (+0200) Subject: TEST-80-NOTIFYACCESS: add test case for #37515 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ca8658120e1c9993bc05aa08dac2c74e618c2118;p=thirdparty%2Fsystemd.git TEST-80-NOTIFYACCESS: add test case for #37515 --- diff --git a/test/integration-tests/TEST-80-NOTIFYACCESS/TEST-80-NOTIFYACCESS.units/reload-timeout.service b/test/integration-tests/TEST-80-NOTIFYACCESS/TEST-80-NOTIFYACCESS.units/reload-timeout.service new file mode 100644 index 00000000000..95a501e37ad --- /dev/null +++ b/test/integration-tests/TEST-80-NOTIFYACCESS/TEST-80-NOTIFYACCESS.units/reload-timeout.service @@ -0,0 +1,4 @@ +[Service] +Type=notify-reload +TimeoutStartSec=40 +ExecStart=/usr/lib/systemd/tests/testdata/TEST-80-NOTIFYACCESS.units/reload-timeout.sh diff --git a/test/integration-tests/TEST-80-NOTIFYACCESS/TEST-80-NOTIFYACCESS.units/reload-timeout.sh b/test/integration-tests/TEST-80-NOTIFYACCESS/TEST-80-NOTIFYACCESS.units/reload-timeout.sh new file mode 100755 index 00000000000..266c3cfef2c --- /dev/null +++ b/test/integration-tests/TEST-80-NOTIFYACCESS/TEST-80-NOTIFYACCESS.units/reload-timeout.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +# shellcheck disable=SC2016 +set -eux +set -o pipefail + +COUNTER=0 + +sync_in() { + read -r x < /tmp/syncfifo2 + test "$x" = "$1" +} + +wait_for_signal() { + sleep infinity & + wait "$!" || : +} + +sighup_handler() { + echo "hup$(( ++COUNTER ))" > /tmp/syncfifo1 +} + +trap sighup_handler SIGHUP + +export SYSTEMD_LOG_LEVEL=debug + +systemd-notify --ready + +wait_for_signal +systemd-notify --reloading + +wait_for_signal +systemd-notify --reloading +sync_in ready +systemd-notify --ready + +wait_for_signal +systemd-notify --reloading --ready + +exec sleep infinity diff --git a/test/units/TEST-80-NOTIFYACCESS.sh b/test/units/TEST-80-NOTIFYACCESS.sh index a8ecd9fa709..22a5a3af80d 100755 --- a/test/units/TEST-80-NOTIFYACCESS.sh +++ b/test/units/TEST-80-NOTIFYACCESS.sh @@ -62,6 +62,33 @@ assert_eq "$(systemctl show notify.service -p NotifyAccess --value)" "none" systemctl stop notify.service assert_eq "$(systemctl show notify.service -p NotifyAccess --value)" "all" +# Timeout of READY=1 for Type=notify-reload services (issue #37515) + +systemctl start reload-timeout.service + +systemctl reload --no-block reload-timeout.service +timeout 10 bash -c 'until [[ $(systemctl show reload-timeout.service -P SubState) == "reload-signal" ]]; do sleep .5; done' +sync_in hup1 +timeout 10 bash -c 'until [[ $(systemctl show reload-timeout.service -P SubState) == "reload-notify" ]]; do sleep .5; done' +timeout 80 bash -c 'until [[ $(systemctl show reload-timeout.service -P SubState) == "running" ]]; do sleep 5; done' +assert_eq "$(systemctl show reload-timeout.service -P ReloadResult)" "timeout" + +systemctl reload --no-block reload-timeout.service +timeout 10 bash -c 'until [[ $(systemctl show reload-timeout.service -P SubState) == "reload-signal" ]]; do sleep .5; done' +assert_eq "$(systemctl show reload-timeout.service -P ReloadResult)" "success" +sync_in hup2 +timeout 10 bash -c 'until [[ $(systemctl show reload-timeout.service -P SubState) == "reload-notify" ]]; do sleep .5; done' +sync_out ready +timeout 40 bash -c 'until [[ $(systemctl show reload-timeout.service -P SubState) == "running" ]]; do sleep 1; done' +assert_eq "$(systemctl show reload-timeout.service -P ReloadResult)" "success" + +systemctl reload --no-block reload-timeout.service +sync_in hup3 +timeout 40 bash -c 'until [[ $(systemctl show reload-timeout.service -P SubState) == "running" ]]; do sleep 1; done' +assert_eq "$(systemctl show reload-timeout.service -P ReloadResult)" "success" + +systemctl stop reload-timeout.service + rm /tmp/syncfifo1 /tmp/syncfifo2 # Explicitly test busctl's BUSERROR= reporting and systemctl status should show it