Files
snapd/tests/core/system-snap-refresh/task.yaml
Sergio Cazzolato ae1b5b1bc3 tests: fix system-snap-refresh in uc20 (#13324)
* Fix system-snap-refresh in uc20

Simplify the test and validate the base snap during restore is the same
revision than the initial one (no need to remove).

Also it is included a new function to determine the revision of a snap
and the test is updated accordingly.

* fix shellcheck

* Update tests/core/system-snap-refresh/task.yaml

Co-authored-by: Andrew Phelps <136256549+andrewphelpsj@users.noreply.github.com>

* Fix spread error in MATCH

* make sure not extra output is displayed showing rev

---------

Co-authored-by: Andrew Phelps <136256549+andrewphelpsj@users.noreply.github.com>
2023-10-26 15:15:51 +02:00

77 lines
3.0 KiB
YAML

summary: Check that the ubuntu-core system is rebooted after the core snap is refreshed
details: |
This test checks that when invoking a manual refresh/revert for core or core18 snaps,
a reboot is triggered and the command would exit after the first phase of the installation
reporting "snapd is about to reboot the system" or "Change X waiting on external action to be completed"
systems: [ubuntu-core-*]
environment:
# uploading the core or otherwise large snap triggers OOM
SNAPD_NO_MEMORY_LIMIT: 1
prepare: |
# make sure that the snapd daemon gives us time for comms before
# closing the socket
echo "SNAPD_SHUTDOWN_DELAY=1" >> /etc/environment
systemctl restart snapd
TARGET_SNAP_NAME="$(snaps.name core)"
# Save initial revision
"$TESTSTOOLS"/snaps-state show-revision "$TARGET_SNAP_NAME" > initi_rev.log
restore: |
TARGET_SNAP_NAME="$(snaps.name core)"
# We need to make sure the base snap has the initial rev
test "$("$TESTSTOOLS"/snaps-state show-revision "$TARGET_SNAP_NAME")" == "$(cat initi_rev.log)"
# remove SNAPD_SHUTDOWN_DELAY from /etc/environment again
#shellcheck disable=SC2005
echo "$(grep -v 'SNAPD_SHUTDOWN_DELAY=1' /etc/environment)" > /etc/environment
systemctl restart snapd
execute: |
TARGET_SNAP_NAME="$(snaps.name core)"
# After installing a new version of the core/core18 snap the system is rebooted
if [ "$SPREAD_REBOOT" = 0 ]; then
currRev="$(readlink /snap/"${TARGET_SNAP_NAME}"/current)"
echo "$currRev" > initialRev
# use journalctl wrapper to grep only the logs collected while the test is running
if "$TESTSTOOLS"/journal-state get-log | MATCH "Waiting for system reboot"; then
echo "Already waiting for system reboot, exiting..."
exit 1
fi
# install new target snap
snap install --dangerous --no-wait /var/lib/snapd/snaps/"${TARGET_SNAP_NAME}"_"${currRev}".snap
# Detect in the logs when the reboot can been triggered
"$TESTSTOOLS"/journal-state match-log -n 50 --wait 2 "Waiting for system reboot"
REBOOT
elif [ "$SPREAD_REBOOT" = 1 ]; then
# Wait for the install to complete.
snap watch --last=install
# Check the current revision has changed
currRev="$(readlink /snap/"${TARGET_SNAP_NAME}"/current)"
[ "$(cat initialRev)" != "$currRev" ]
# revert the target snap
snap revert "$TARGET_SNAP_NAME" 2>&1 | MATCH "snapd is about to reboot the system|waiting on external action to be completed"
# Detect in the logs when the reboot can been triggered
"$TESTSTOOLS"/journal-state match-log -n 50 --wait 2 "Waiting for system reboot"
REBOOT
elif [ "$SPREAD_REBOOT" = 2 ]; then
# Wait for the revert to complete.
snap watch --last=revert-snap
# Check the current revision is the same than the original
currRev="$(readlink /snap/"${TARGET_SNAP_NAME}"/current)"
[ "$(cat initialRev)" == "$currRev" ]
fi