Files
systemd/test/units/TEST-19-CGROUP.ExitType-cgroup.sh
T
Yu Watanabe 5c60d3011f integration tests: do not adjust log level in the test script
We passes log level through kernel command line. It is not necessary to
set to debug level at the beginning, and set to info at the end.
This is important when a test has several subtests. If a subtest sets
log level to info at the end, then subsequent tests may not generate any
useful logs.
2025-09-26 07:20:04 +09:00

99 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eux
# Test ExitType=cgroup
# shellcheck source=test/units/util.sh
. "$(dirname "$0")"/util.sh
if [[ "$(get_cgroup_hierarchy)" != unified ]]; then
echo "Skipping $0 as we're not running with the unified cgroup hierarchy"
exit 0
fi
# Multiple level process tree, parent process stays up
cat >/tmp/test19-exit-cgroup.sh <<EOF
#!/usr/bin/env bash
set -eux
# process tree: systemd -> sleep
sleep infinity &
disown
# process tree: systemd -> bash -> bash -> sleep
((sleep infinity); true) &
systemd-notify --ready
# Run the stop/kill command, but sleep a bit to make the sleep infinity
# below actually started before stopping/killing the service.
(sleep 1; \$1) &
# process tree: systemd -> bash -> sleep
sleep infinity
EOF
chmod +x /tmp/test19-exit-cgroup.sh
# service should be stopped cleanly
systemd-run --wait \
--unit=one \
--property="Type=notify" \
--property="ExitType=cgroup" \
/tmp/test19-exit-cgroup.sh 'systemctl stop one'
# same thing with a truthy exec condition
systemd-run --wait \
--unit=two \
--property="Type=notify" \
--property="ExitType=cgroup" \
--property="ExecCondition=true" \
/tmp/test19-exit-cgroup.sh 'systemctl stop two'
# false exec condition: systemd-run should exit immediately with status code: 1
(! systemd-run --wait \
--unit=three \
--property="Type=notify" \
--property="ExitType=cgroup" \
--property="ExecCondition=false" \
/tmp/test19-exit-cgroup.sh)
# service should exit uncleanly (main process exits with SIGKILL)
(! systemd-run --wait \
--unit=four \
--property="Type=notify" \
--property="ExitType=cgroup" \
/tmp/test19-exit-cgroup.sh 'systemctl kill --signal 9 four')
# Multiple level process tree, parent process exits quickly
cat >/tmp/test19-exit-cgroup-parentless.sh <<EOF
#!/usr/bin/env bash
set -eux
# process tree: systemd -> sleep
sleep infinity &
# process tree: systemd -> bash -> sleep
((sleep infinity); true) &
systemd-notify --ready
# Run the stop/kill command after this bash process exits
(sleep 1; \$1) &
EOF
chmod +x /tmp/test19-exit-cgroup-parentless.sh
# service should be stopped cleanly
systemd-run --wait \
--unit=five \
--property="Type=notify" \
--property="ExitType=cgroup" \
/tmp/test19-exit-cgroup-parentless.sh 'systemctl stop five'
# service should still exit cleanly despite SIGKILL (the main process already exited cleanly)
systemd-run --wait \
--unit=six \
--property="Type=notify" \
--property="ExitType=cgroup" \
/tmp/test19-exit-cgroup-parentless.sh 'systemctl kill --signal 9 six'