mirror of
https://github.com/systemd/systemd.git
synced 2025-03-28 02:50:16 +03:00
test: check reloading notify-reload service refreshes vpick extensions
In TEST-50-DISSECT.dissect, this adds the following cases: - testservice-50g: vpick extension in ExtensionDirectories - testservice-50h: vpick extension in ExtensionImages - testservice-50i: ExtensionDirectories + RootImage - testservice-50j: ExtensionDirectories + RootDirectory
This commit is contained in:
parent
21e4aba967
commit
b2e8ef2a2d
@ -558,6 +558,118 @@ rm -rf "$VDIR" "$EMPTY_VDIR"
|
||||
systemd-dissect --umount "$IMAGE_DIR/app0"
|
||||
systemd-dissect --umount "$IMAGE_DIR/app1"
|
||||
|
||||
# Check reloading refreshes vpick extensions
|
||||
VBASE="vtest$RANDOM"
|
||||
VDIR="/tmp/${VBASE}.v"
|
||||
mkdir "$VDIR"
|
||||
rm -rf /tmp/markers/
|
||||
mkdir /tmp/markers/
|
||||
cat >/run/systemd/system/testservice-50g.service <<EOF
|
||||
[Service]
|
||||
Type=notify-reload
|
||||
EnvironmentFile=-/usr/lib/systemd/systemd-asan-env
|
||||
PrivateTmp=disconnected
|
||||
BindPaths=/tmp/markers/
|
||||
ExtensionDirectories=-${VDIR}
|
||||
ExecStart=bash -c ' \\
|
||||
trap "{ \\
|
||||
systemd-notify --reloading; \\
|
||||
(ls /etc | grep marker || echo no-marker) >/tmp/markers/50g; \\
|
||||
systemd-notify --ready; \\
|
||||
}" SIGHUP; \\
|
||||
systemd-notify --ready; \\
|
||||
while true; do sleep 1; done; \\
|
||||
'
|
||||
EOF
|
||||
mkdir -p "$VDIR/${VBASE}_1/etc/extension-release.d/"
|
||||
echo "ID=_any" >"$VDIR/${VBASE}_1/etc/extension-release.d/extension-release.${VBASE}_1"
|
||||
touch "$VDIR/${VBASE}_1/etc/${VBASE}_1.marker"
|
||||
systemctl start testservice-50g.service
|
||||
systemctl is-active testservice-50g.service
|
||||
# First reload; at reload time, the marker file in /etc should be picked up.
|
||||
systemctl try-reload-or-restart testservice-50g.service
|
||||
grep -q -F "${VBASE}_1.marker" /tmp/markers/50g
|
||||
# Make a version 2 and reload again; this time we should see the v2 marker
|
||||
mkdir -p "$VDIR/${VBASE}_2/etc/extension-release.d/"
|
||||
echo "ID=_any" >"$VDIR/${VBASE}_2/etc/extension-release.d/extension-release.${VBASE}_2"
|
||||
touch "$VDIR/${VBASE}_2/etc/${VBASE}_2.marker"
|
||||
systemctl try-reload-or-restart testservice-50g.service
|
||||
grep -q -F "${VBASE}_2.marker" /tmp/markers/50g
|
||||
# Do it for a couple more times (to make sure we're tearing down old overlays)
|
||||
for _ in {1..5}; do systemctl reload testservice-50g.service; done
|
||||
systemctl stop testservice-50g.service
|
||||
|
||||
# Repeat the same vpick notify-reload test with ExtensionImages= (keeping the
|
||||
# same VBASE and reusing VDIR files for convenience, but using .raw extensions
|
||||
# this time)
|
||||
VDIR2="/tmp/${VBASE}.raw.v"
|
||||
mkdir "$VDIR2"
|
||||
cp /run/systemd/system/testservice-50g.service /run/systemd/system/testservice-50h.service
|
||||
sed -i -e "s%ExtensionDirectories=.*%ExtensionImages=-$VDIR2%g" -e "s/50g/50h/g" \
|
||||
/run/systemd/system/testservice-50h.service
|
||||
mksquashfs "$VDIR/${VBASE}_1" "$VDIR2/${VBASE}_1.raw"
|
||||
systemctl start testservice-50h.service
|
||||
systemctl is-active testservice-50h.service
|
||||
# First reload should pick up the v1 marker
|
||||
systemctl try-reload-or-restart testservice-50h.service
|
||||
grep -q -F "${VBASE}_1.marker" /tmp/markers/50h
|
||||
# Second reload should pick up the v2 marker
|
||||
mksquashfs "$VDIR/${VBASE}_2" "$VDIR2/${VBASE}_2.raw"
|
||||
systemctl try-reload-or-restart testservice-50h.service
|
||||
grep -q -F "${VBASE}_2.marker" /tmp/markers/50h
|
||||
# Test that removing all the extensions don't cause any issues
|
||||
rm -rf "${VDIR2:?}"/*
|
||||
systemctl try-reload-or-restart testservice-50h.service
|
||||
systemctl is-active testservice-50h.service
|
||||
grep -q -F "no-marker" /tmp/markers/50h
|
||||
systemctl stop testservice-50h.service
|
||||
|
||||
# Test combining vpick reload/restart with RootDirectory= & RootImage=
|
||||
cat >/run/systemd/system/testservice-50i.service <<EOF
|
||||
[Service]
|
||||
Type=notify-reload
|
||||
EnvironmentFile=-/usr/lib/systemd/systemd-asan-env
|
||||
PrivateTmp=disconnected
|
||||
BindPaths=/tmp/markers/
|
||||
RootImage=$MINIMAL_IMAGE.raw
|
||||
ExtensionDirectories=-${VDIR}
|
||||
NotifyAccess=all
|
||||
ExecStart=bash -c ' \
|
||||
trap '"'"' \
|
||||
printf "RELOADING=1\\nMONOTONIC_USEC=\$\${EPOCHREALTIME/[^0-9]/}" | socat -t 5 - UNIX-SENDTO:\$\$NOTIFY_SOCKET; \
|
||||
(ls /etc | grep marker) >/tmp/markers/50i; \
|
||||
(cat /usr/lib/os-release) >>/tmp/markers/50i; \
|
||||
echo -n "READY=1" | socat -t 5 - UNIX-SENDTO:\$\$NOTIFY_SOCKET; \
|
||||
'"'"' SIGHUP; \
|
||||
echo -n "READY=1" | socat -t 5 - UNIX-SENDTO:\$\$NOTIFY_SOCKET; \
|
||||
while true; do sleep 1; done; \
|
||||
'
|
||||
EOF
|
||||
# Move away the v2 extension for now
|
||||
mv "$VDIR/${VBASE}_2/" "$VDIR/.${VBASE}_2"
|
||||
systemctl start testservice-50i.service
|
||||
systemctl is-active testservice-50i.service
|
||||
# Move the v2 extension back and reload
|
||||
mv "$VDIR/.${VBASE}_2" "$VDIR/${VBASE}_2/"
|
||||
systemctl try-reload-or-restart testservice-50i.service
|
||||
grep -q -F "${VBASE}_2.marker" /tmp/markers/50i
|
||||
# Ensure that we are also still seeing files exclusive to the root image
|
||||
grep -q -F "MARKER=1" /tmp/markers/50i
|
||||
systemctl stop testservice-50i.service
|
||||
|
||||
unsquashfs -no-xattrs -d /tmp/vpickminimg "$MINIMAL_IMAGE.raw"
|
||||
cp /run/systemd/system/testservice-50i.service /run/systemd/system/testservice-50j.service
|
||||
sed -i -e "s%RootImage=.*%RootDirectory=/tmp/vpickminimg%g" -e "s/50i/50j/g" \
|
||||
/run/systemd/system/testservice-50j.service
|
||||
systemctl start testservice-50j.service
|
||||
systemctl is-active testservice-50j.service
|
||||
systemctl try-reload-or-restart testservice-50j.service
|
||||
grep -q -F "${VBASE}_2.marker" /tmp/markers/50j
|
||||
grep -q -F "MARKER=1" /tmp/markers/50j
|
||||
systemctl stop testservice-50j.service
|
||||
|
||||
rm -rf "$VDIR" "$VDIR2" /tmp/vpickminimg /tmp/markers/
|
||||
|
||||
# Test that an extension consisting of an empty directory under /etc/extensions/ takes precedence
|
||||
mkdir -p /var/lib/extensions/
|
||||
ln -s /tmp/app-nodistro.raw /var/lib/extensions/app-nodistro.raw
|
||||
|
Loading…
x
Reference in New Issue
Block a user