]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
TEST-07-PID1: add test case for #35635 35637/head
authorMike Yuan <me@yhndnzj.com>
Mon, 30 Dec 2024 22:35:32 +0000 (23:35 +0100)
committerMike Yuan <me@yhndnzj.com>
Mon, 30 Dec 2024 23:22:53 +0000 (00:22 +0100)
test/units/TEST-07-PID1.socket-on-failure.sh [new file with mode: 0755]

diff --git a/test/units/TEST-07-PID1.socket-on-failure.sh b/test/units/TEST-07-PID1.socket-on-failure.sh
new file mode 100755 (executable)
index 0000000..affcec4
--- /dev/null
@@ -0,0 +1,73 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+# shellcheck disable=SC2016
+set -eux
+set -o pipefail
+
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
+
+UNIT_NAME="TEST-07-PID1-socket-$RANDOM"
+
+at_exit() {
+    systemctl stop "$UNIT_NAME.socket"
+    rm -f /run/systemd/system/"$UNIT_NAME".{socket,service} \
+        /run/systemd/system/TEST-07-PID1-socket-OnFailure.service
+}
+
+trap at_exit EXIT
+
+# Test triggering OnFailure= when fails to listen on socket (#35635)
+
+mkdir -p "/tmp/$UNIT_NAME"
+
+cat >/run/systemd/system/"$UNIT_NAME.socket" <<EOF
+[Unit]
+OnFailure=TEST-07-PID1-socket-OnFailure.service
+
+[Socket]
+ListenStream=/tmp/$UNIT_NAME/test
+EOF
+
+cat >/run/systemd/system/"$UNIT_NAME.service" <<EOF
+[Service]
+ExecStart=true
+EOF
+
+cat >/run/systemd/system/TEST-07-PID1-socket-OnFailure.service <<EOF
+[Service]
+Type=oneshot
+ExecStart=rmdir /tmp/$UNIT_NAME/test
+RemainAfterExit=yes
+EOF
+
+systemctl start "$UNIT_NAME.socket"
+systemctl is-active "$UNIT_NAME.socket"
+[[ -S "/tmp/$UNIT_NAME/test" ]]
+
+systemctl stop "$UNIT_NAME.socket"
+rm "/tmp/$UNIT_NAME/test"
+
+chattr +i "/tmp/$UNIT_NAME"
+
+(! systemctl start "$UNIT_NAME.socket")
+systemctl is-failed "$UNIT_NAME.socket"
+assert_eq "$(systemctl show "$UNIT_NAME.socket" -P SubState)" "failed"
+
+[[ ! -e "/tmp/$UNIT_NAME/test" ]]
+timeout 10 bash -c "until systemctl is-failed TEST-07-PID1-socket-OnFailure.service; do sleep .5; done"
+
+chattr -i "/tmp/$UNIT_NAME"
+
+mkdir "/tmp/$UNIT_NAME/test"
+
+(! systemctl start "$UNIT_NAME.socket")
+systemctl is-failed "$UNIT_NAME.socket"
+assert_eq "$(systemctl show "$UNIT_NAME.socket" -P SubState)" "failed"
+
+timeout 10 bash -c "while [[ -d '/tmp/$UNIT_NAME/test' ]]; do sleep .5; done"
+[[ ! -e "/tmp/$UNIT_NAME/test" ]]
+systemctl is-active TEST-07-PID1-socket-OnFailure.service
+
+systemctl start "$UNIT_NAME.socket"
+systemctl is-active "$UNIT_NAME.socket"