diff options
Diffstat (limited to '')
-rwxr-xr-x | test/units/testsuite-07.main-PID-change.sh (renamed from test/units/testsuite-20.sh) | 62 | ||||
-rw-r--r-- | test/units/testsuite-07.service | 1 | ||||
-rw-r--r-- | test/units/testsuite-20.service | 11 |
3 files changed, 39 insertions, 35 deletions
diff --git a/test/units/testsuite-20.sh b/test/units/testsuite-07.main-PID-change.sh index 6ce992f41a..da23032d1e 100755 --- a/test/units/testsuite-20.sh +++ b/test/units/testsuite-07.main-PID-change.sh @@ -3,9 +3,13 @@ set -eux set -o pipefail +# Test changing the main PID + systemd-analyze log-level debug -test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$ +# The main service PID should be the parent bash process +MAINPID="${PPID:?}" +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$MAINPID" # Start a test process inside of our own cgroup sleep infinity & @@ -18,43 +22,43 @@ EXTERNALPID="$(systemctl show -P MainPID test-sleep.service)" # Update our own main PID to the external test PID, this should work systemd-notify MAINPID="$EXTERNALPID" -test "$(systemctl show -P MainPID testsuite-20.service)" -eq "$EXTERNALPID" +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$EXTERNALPID" # Update our own main PID to the internal test PID, this should work, too systemd-notify MAINPID=$INTERNALPID -test "$(systemctl show -P MainPID testsuite-20.service)" -eq "$INTERNALPID" +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$INTERNALPID" # Update it back to our own PID, this should also work -systemd-notify MAINPID=$$ -test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$ +systemd-notify MAINPID="$MAINPID" +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$MAINPID" # Try to set it to PID 1, which it should ignore, because that's the manager systemd-notify MAINPID=1 -test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$ +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$MAINPID" # Try to set it to PID 0, which is invalid and should be ignored systemd-notify MAINPID=0 -test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$ +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$MAINPID" # Try to set it to a valid but non-existing PID, which should be ignored. (Note # that we set the PID to a value well above any known /proc/sys/kernel/pid_max, # which means we can be pretty sure it doesn't exist by coincidence) systemd-notify MAINPID=1073741824 -test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$ +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$MAINPID" # Change it again to the external PID, without privileges this time. This should be ignored, because the PID is from outside of our cgroup and we lack privileges. systemd-notify --uid=1000 MAINPID="$EXTERNALPID" -test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$ +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$MAINPID" # Change it again to the internal PID, without privileges this time. This should work, as the process is on our cgroup, and that's enough even if we lack privileges. systemd-notify --uid=1000 MAINPID="$INTERNALPID" -test "$(systemctl show -P MainPID testsuite-20.service)" -eq "$INTERNALPID" +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$INTERNALPID" # Update it back to our own PID, this should also work -systemd-notify --uid=1000 MAINPID=$$ -test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$ +systemd-notify --uid=1000 MAINPID="$MAINPID" +test "$(systemctl show -P MainPID testsuite-07.service)" -eq "$MAINPID" -cat >/tmp/test-mainpid.sh <<EOF +cat >/tmp/test-mainpid.sh <<\EOF #!/usr/bin/env bash set -eux @@ -65,20 +69,26 @@ sleep infinity & disown sleep infinity & -MAINPID=\$! +MAINPID=$! disown sleep infinity & disown -echo \$MAINPID >/run/mainpidsh/pid +echo $MAINPID >/run/mainpidsh/pid EOF chmod +x /tmp/test-mainpid.sh -systemd-run --unit=test-mainpidsh.service -p StandardOutput=tty -p StandardError=tty -p Type=forking -p RuntimeDirectory=mainpidsh -p PIDFile=/run/mainpidsh/pid /tmp/test-mainpid.sh +systemd-run --unit=test-mainpidsh.service \ + -p StandardOutput=tty \ + -p StandardError=tty \ + -p Type=forking \ + -p RuntimeDirectory=mainpidsh \ + -p PIDFile=/run/mainpidsh/pid \ + /tmp/test-mainpid.sh test "$(systemctl show -P MainPID test-mainpidsh.service)" -eq "$(cat /run/mainpidsh/pid)" -cat >/tmp/test-mainpid2.sh <<EOF +cat >/tmp/test-mainpid2.sh <<\EOF #!/usr/bin/env bash set -eux @@ -89,18 +99,24 @@ sleep infinity & disown sleep infinity & -MAINPID=\$! +MAINPID=$! disown sleep infinity & disown -echo \$MAINPID >/run/mainpidsh2/pid +echo $MAINPID >/run/mainpidsh2/pid chown 1001:1001 /run/mainpidsh2/pid EOF chmod +x /tmp/test-mainpid2.sh -systemd-run --unit=test-mainpidsh2.service -p StandardOutput=tty -p StandardError=tty -p Type=forking -p RuntimeDirectory=mainpidsh2 -p PIDFile=/run/mainpidsh2/pid /tmp/test-mainpid2.sh +systemd-run --unit=test-mainpidsh2.service \ + -p StandardOutput=tty \ + -p StandardError=tty \ + -p Type=forking \ + -p RuntimeDirectory=mainpidsh2 \ + -p PIDFile=/run/mainpidsh2/pid \ + /tmp/test-mainpid2.sh test "$(systemctl show -P MainPID test-mainpidsh2.service)" -eq "$(cat /run/mainpidsh2/pid)" cat >/dev/shm/test-mainpid3.sh <<EOF @@ -136,6 +152,8 @@ chmod 755 /dev/shm/test-mainpid3.sh -p RuntimeDirectory=mainpidsh3 \ -p PIDFile=/run/mainpidsh3/pid \ -p DynamicUser=1 \ + `# Make sanitizers happy when DynamicUser=1 pulls in instrumented systemd NSS modules` \ + -p EnvironmentFile=-/usr/lib/systemd/systemd-asan-env \ -p TimeoutStartSec=2s \ /dev/shm/test-mainpid3.sh) @@ -159,7 +177,3 @@ runas testuser systemd-run --scope --user --unit test-true.scope /bin/true test "$(systemctl show -P Result test-true.scope)" = success systemd-analyze log-level info - -echo OK >/testok - -exit 0 diff --git a/test/units/testsuite-07.service b/test/units/testsuite-07.service index f45b9c7c5b..cc0a747a88 100644 --- a/test/units/testsuite-07.service +++ b/test/units/testsuite-07.service @@ -6,6 +6,7 @@ Description=TEST-07-ISSUE-1981 Type=oneshot ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +NotifyAccess=all # Issue: https://github.com/systemd/systemd/issues/2691 ExecStop=sh -c 'kill -SEGV $$$$' RemainAfterExit=yes diff --git a/test/units/testsuite-20.service b/test/units/testsuite-20.service deleted file mode 100644 index 4228d0b875..0000000000 --- a/test/units/testsuite-20.service +++ /dev/null @@ -1,11 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=TEST-20-MAINPIDGAMES -Before=getty-pre.target -Wants=getty-pre.target - -[Service] -ExecStartPre=rm -f /failed /testok -ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh -Type=oneshot -NotifyAccess=all |