diff options
author | Frantisek Sumsal <frantisek@sumsal.cz> | 2023-05-10 20:17:19 +0200 |
---|---|---|
committer | Frantisek Sumsal <frantisek@sumsal.cz> | 2023-05-10 21:26:26 +0200 |
commit | 3a4b86264eef6bd51e880386388e8b3f95cbaa33 (patch) | |
tree | d4e8ea0d03c6579fc7a8e66d944d8ccc4d6794d4 /test | |
parent | d8d8380a35c494b6cb7ec5ee12dbe93002bd2f2f (diff) | |
download | systemd-3a4b86264eef6bd51e880386388e8b3f95cbaa33.tar.gz |
test: merge TEST-20-MAINPIDGAMES into TEST-07-PID1
Diffstat (limited to 'test')
l--------- | test/TEST-20-MAINPIDGAMES/Makefile | 1 | ||||
-rwxr-xr-x | test/TEST-20-MAINPIDGAMES/test.sh | 10 | ||||
-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 |
5 files changed, 39 insertions, 46 deletions
diff --git a/test/TEST-20-MAINPIDGAMES/Makefile b/test/TEST-20-MAINPIDGAMES/Makefile deleted file mode 120000 index e9f93b1104..0000000000 --- a/test/TEST-20-MAINPIDGAMES/Makefile +++ /dev/null @@ -1 +0,0 @@ -../TEST-01-BASIC/Makefile
\ No newline at end of file diff --git a/test/TEST-20-MAINPIDGAMES/test.sh b/test/TEST-20-MAINPIDGAMES/test.sh deleted file mode 100755 index b663201efb..0000000000 --- a/test/TEST-20-MAINPIDGAMES/test.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -# SPDX-License-Identifier: LGPL-2.1-or-later -set -e - -TEST_DESCRIPTION="test changing main PID" - -# shellcheck source=test/test-functions -. "${TEST_BASE_DIR:?}/test-functions" - -do_test "$@" 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 |