]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Add integration test for ExtraFileDescriptors after daemon-reexec
authorRyan Wilson <ryantimwilson@meta.com>
Fri, 11 Oct 2024 20:38:58 +0000 (13:38 -0700)
committerMike Yuan <me@yhndnzj.com>
Sat, 12 Oct 2024 18:17:45 +0000 (20:17 +0200)
This commit adds a corresponding integration test for ExtraFileDescriptors
after systemctl daemon-reexec. This ensures systemd keeps the file
descriptors while the service manager is restarting and we don't lose
ability to restart the service correctly.

test/units/TEST-23-UNIT-FILE-ExtraFileDescriptors-child.sh [new file with mode: 0755]
test/units/TEST-23-UNIT-FILE.ExtraFileDescriptors.sh

diff --git a/test/units/TEST-23-UNIT-FILE-ExtraFileDescriptors-child.sh b/test/units/TEST-23-UNIT-FILE-ExtraFileDescriptors-child.sh
new file mode 100755 (executable)
index 0000000..8b18295
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eux
+set -o pipefail
+
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
+
+assert_eq "$LISTEN_FDS" "$1"
+assert_eq "$LISTEN_FDNAMES" "$2"
+
+for ((i = 3; i < 3 + LISTEN_FDS; i++)); do
+    assert_eq "$(cat /proc/self/fd/"$i")" "${!i}" # Dereference $i to get i'th arg
+done
index cf5c24090864910e479438d66b23201d5743c458..eaeee635db6a0ef47ed8e03521176c3483d966c7 100755 (executable)
@@ -31,8 +31,8 @@ busctl call \
     org.freedesktop.systemd1.Manager StartTransientUnit \
     "ssa(sv)a(sa(sv))" "$TEST_UNIT" replace 4 \
       ExecStart "a(sasb)" 1 \
-        /usr/lib/systemd/tests/testdata/units/TEST-23-UNIT-FILE-openfile-child.sh \
-        5 /usr/lib/systemd/tests/testdata/units/TEST-23-UNIT-FILE-openfile-child.sh 2 "test:other" "Hello" "Extra" \
+        /usr/lib/systemd/tests/testdata/units/TEST-23-UNIT-FILE-ExtraFileDescriptors-child.sh \
+        5 /usr/lib/systemd/tests/testdata/units/TEST-23-UNIT-FILE-ExtraFileDescriptors-child.sh 2 "test:other" "Hello" "Extra" \
         true \
       RemainAfterExit "b" true \
       Type "s" oneshot \
@@ -51,6 +51,15 @@ timeout 10s bash -xec 'while [[ "$(systemctl show -P SubState test-23-extra-fd.s
 assert_eq "$(systemctl show -P Result "$TEST_UNIT")" "success"
 assert_eq "$(systemctl show -P ExecMainStatus "$TEST_UNIT")" "0"
 
+# Verify extra file descriptors stay accessible even after service manager re-executes
+systemctl daemon-reexec
+
+systemctl restart "$TEST_UNIT"
+
+assert_eq "$(systemctl show -P SubState "$TEST_UNIT")" "exited"
+assert_eq "$(systemctl show -P Result "$TEST_UNIT")" "success"
+assert_eq "$(systemctl show -P ExecMainStatus "$TEST_UNIT")" "0"
+
 systemctl stop "$TEST_UNIT"
 
 systemctl log-level info