From d1813ba436bf4eb70788097ea3885006c7fc1e65 Mon Sep 17 00:00:00 2001 From: Jakub Sitnicki Date: Thu, 14 Mar 2024 11:20:50 +0100 Subject: [PATCH] test: integration test for PassFileDescriptorsToExec= option Check if socket file descriptors are passed to ExecXYZ= commands from the socket unit depending on whether PassFileDescriptorsToExec= option is set. --- .../pass-fds-to-exec-no.socket | 35 ++++++++++++++++++ .../pass-fds-to-exec-yes.socket | 36 +++++++++++++++++++ test/units/testsuite-07.socket-pass-fds.sh | 11 ++++++ 3 files changed, 82 insertions(+) create mode 100644 test/testsuite-07.units/pass-fds-to-exec-no.socket create mode 100644 test/testsuite-07.units/pass-fds-to-exec-yes.socket create mode 100755 test/units/testsuite-07.socket-pass-fds.sh diff --git a/test/testsuite-07.units/pass-fds-to-exec-no.socket b/test/testsuite-07.units/pass-fds-to-exec-no.socket new file mode 100644 index 00000000000..8b7964b6648 --- /dev/null +++ b/test/testsuite-07.units/pass-fds-to-exec-no.socket @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Unit] +Description=Test if ExecXYZ= commands don't inherit listen FDs when PassFileDescriptorsToExec= is unset + +[Socket] +# With Accept= set we don't need a corresponding service unit +Accept=yes +FileDescriptorName=foo +ListenStream=127.0.0.1:1234 +ListenStream=[::1]:1234 +PassFileDescriptorsToExec=no +ExecStartPre=\ + test ExecStartPre -a \ + -z ${LISTEN_FDS} -a \ + -z ${LISTEN_FDNAMES} -a \ + ! -e /dev/fd/3 -a \ + ! -e /dev/fd/4 +ExecStartPost=\ + test ExecStartPost -a \ + -z ${LISTEN_FDS} -a \ + -z ${LISTEN_FDNAMES} -a \ + ! -e /dev/fd/3 -a \ + ! -e /dev/fd/4 +ExecStopPre=\ + test ExecStopPre -a \ + -z ${LISTEN_FDS} -a \ + -z ${LISTEN_FDNAMES} -a \ + ! -e /dev/fd/3 -a \ + ! -e /dev/fd/4 +ExecStopPost=\ + test ExecStopPost -a \ + -z ${LISTEN_FDS} -a \ + -z ${LISTEN_FDNAMES} -a \ + ! -e /dev/fd/3 -a \ + ! -e /dev/fd/4 diff --git a/test/testsuite-07.units/pass-fds-to-exec-yes.socket b/test/testsuite-07.units/pass-fds-to-exec-yes.socket new file mode 100644 index 00000000000..bff192d559d --- /dev/null +++ b/test/testsuite-07.units/pass-fds-to-exec-yes.socket @@ -0,0 +1,36 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Unit] +Description=Test if ExecXYZ= commands inherit listen FDs when PassFileDescriptorsToExec= is set + +[Socket] +# With Accept= set we don't need a corresponding service unit +Accept=yes +FileDescriptorName=foo +ListenStream=127.0.0.1:1234 +ListenStream=[::1]:1234 +PassFileDescriptorsToExec=yes +# ExecStartPre runs before we create sockets. Nothing to pass. +ExecStartPre=\ + test ExecStartPre -a \ + -z ${LISTEN_FDS} -a \ + -z ${LISTEN_FDNAMES} -a \ + ! -e /dev/fd/3 -a \ + ! -e /dev/fd/4 +ExecStartPost=\ + test ExecStartPost -a \ + ${LISTEN_FDS} = 2 -a \ + ${LISTEN_FDNAMES} = foo:foo -a \ + -S /dev/fd/3 -a \ + -S /dev/fd/4 +ExecStopPre=\ + test "ExecStopPre" -a \ + ${LISTEN_FDS} = 2 -a \ + ${LISTEN_FDNAMES} = foo:foo -a \ + -S /dev/fd/3 -a \ + -S /dev/fd/4 +ExecStopPost=\ + test "ExecStopPost" -a \ + ${LISTEN_FDS} = 2 -a \ + ${LISTEN_FDNAMES} = foo:foo -a \ + -S /dev/fd/3 -a \ + -S /dev/fd/4 diff --git a/test/units/testsuite-07.socket-pass-fds.sh b/test/units/testsuite-07.socket-pass-fds.sh new file mode 100755 index 00000000000..a61b1c01f14 --- /dev/null +++ b/test/units/testsuite-07.socket-pass-fds.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +set -eux +set -o pipefail + +# Test PassFileDescriptorsToExec= option in socket units + +for u in pass-fds-to-exec-{no,yes}.socket; do + systemctl start "$u" + systemctl stop "$u" +done