Skip to content

Commit

Permalink
TEST-15: add test for transient units with drop-ins
Browse files Browse the repository at this point in the history
We want to test four things:
- that the transient units are successfully started when drop-ins exist
- that the transient setings override the defaults
- the drop-ins override the transient settings (the same as for a normal unit)
- that things are the same before and after a reload

To make things more fun, we start and stop units in two different ways: via
systemctl and via a direct busctl invocation. This gives us a bit more coverage
of different code paths.

(cherry picked from commit 6854434cfb5dda10c07d95835c38b75e5e71c2b5)

Related: #2156620
  • Loading branch information
keszybz authored and dtardon committed Apr 20, 2023
1 parent e0ef63a commit 2c6efa9
Showing 1 changed file with 56 additions and 6 deletions.
62 changes: 56 additions & 6 deletions test/TEST-15-DROPIN/test-dropin.sh
Original file line number Diff line number Diff line change
Expand Up @@ -132,19 +132,40 @@ test_hierarchical_service_dropins () {
echo "Testing hierarchical service dropins..."
echo "*** test service.d/ top level drop-in"
create_services a-b-c
check_ko a-b-c ExecCondition "/bin/echo service.d"
check_ko a-b-c ExecCondition "/bin/echo a-.service.d"
check_ko a-b-c ExecCondition "/bin/echo a-b-.service.d"
check_ko a-b-c ExecCondition "/bin/echo a-b-c.service.d"
check_ko a-b-c ExecCondition "echo service.d"
check_ko a-b-c ExecCondition "echo a-.service.d"
check_ko a-b-c ExecCondition "echo a-b-.service.d"
check_ko a-b-c ExecCondition "echo a-b-c.service.d"

for dropin in service.d a-.service.d a-b-.service.d a-b-c.service.d; do
mkdir -p /usr/lib/systemd/system/$dropin
echo "
[Service]
ExecCondition=/bin/echo $dropin
ExecCondition=echo $dropin
" >/usr/lib/systemd/system/$dropin/override.conf
systemctl daemon-reload
check_ok a-b-c ExecCondition "/bin/echo $dropin"
check_ok a-b-c ExecCondition "echo $dropin"

# Check that we can start a transient service in presence of the drop-ins
systemd-run --unit a-b-c2.service -p Description='sleepy' sleep infinity

# The transient setting replaces the default
check_ok a-b-c2.service Description "sleepy"

# The override takes precedence for ExecCondition
# (except the last iteration when it only applies to the other service)
if [ "$dropin" != "a-b-c.service.d" ]; then
check_ok a-b-c2.service ExecCondition "echo $dropin"
fi

# Check that things are the same after a reload
systemctl daemon-reload
check_ok a-b-c2.service Description "sleepy"
if [ "$dropin" != "a-b-c.service.d" ]; then
check_ok a-b-c2.service ExecCondition "echo $dropin"
fi

systemctl stop a-b-c2.service
done
for dropin in service.d a-.service.d a-b-.service.d a-b-c.service.d; do
rm -rf /usr/lib/systemd/system/$dropin
Expand All @@ -169,6 +190,35 @@ MemoryMax=1000000000
" >/usr/lib/systemd/system/$dropin/override.conf
systemctl daemon-reload
check_ok a-b-c.slice MemoryMax "1000000000"

busctl call \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1 \
org.freedesktop.systemd1.Manager \
StartTransientUnit 'ssa(sv)a(sa(sv))' \
'a-b-c.slice' 'replace' \
2 \
'Description' s 'slice too' \
'MemoryMax' t 1000000002 \
0

# The override takes precedence for MemoryMax
check_ok a-b-c.slice MemoryMax "1000000000"
# The transient setting replaces the default
check_ok a-b-c.slice Description "slice too"

# Check that things are the same after a reload
systemctl daemon-reload
check_ok a-b-c.slice MemoryMax "1000000000"
check_ok a-b-c.slice Description "slice too"

busctl call \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1 \
org.freedesktop.systemd1.Manager \
StopUnit 'ss' \
'a-b-c.slice' 'replace'

rm /usr/lib/systemd/system/$dropin/override.conf
done

Expand Down

0 comments on commit 2c6efa9

Please sign in to comment.