1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
summary: Check snap refresh hold and unhold
details: |
Check that running `snap refresh --hold` without specifying snaps prevents
auto-refreshes for a configurable amount of time (even indefinitely) but not
general refreshes (i.e., refreshes triggered by a `snap refresh` without
specifying arguments). Check that holding refreshes for specific snaps
prevents general refreshes as well as auto-refreshes but not specific snap
refreshes.
prepare: |
snap install test-snapd-tools
snap set system experimental.parallel-instances=true
snap install test-snapd-tools_instance
restore: |
snap refresh --unhold || true
snap refresh --unhold test-snapd-tools || true
snap remove --purge test-snapd-tools || true
debug: |
snap changes
# show last 3 changes in detail
snap changes | tail -n 4 | awk '{ if (NF != 0) system("snap change " $1) }'
execute: |
reset() {
snap refresh --channel=latest/stable test-snapd-tools
snap refresh --channel=latest/stable test-snapd-tools_instance
snap refresh --unhold test-snapd-tools
snap refresh --unhold
}
echo "No snaps auto-refresh in an all-snaps hold"
snap refresh --hold=forever
systemctl stop snapd.{service,socket}
"$TESTSTOOLS"/snapd-state change-snap-channel test-snapd-tools edge
"$TESTSTOOLS"/snapd-state force-autorefresh
systemctl start snapd.{socket,service}
if retry -n 15 --quiet sh -c 'snap changes | tail -2 | grep "(Done|Doing).*Auto-refresh"'; then
echo "expected 'snap refresh --hold' to prevent auto-refresh"
exit 1
fi
echo "Snap doesn't auto-refresh with a specific hold"
reset
snap refresh --hold test-snapd-tools
CHANGE_ID=$(snap changes | tail -n 2 | head -n 1 | awk '{print $1}')
systemctl stop snapd.{service,socket}
"$TESTSTOOLS"/snapd-state change-snap-channel test-snapd-tools edge
"$TESTSTOOLS"/snapd-state change-snap-channel test-snapd-tools_instance edge
"$TESTSTOOLS"/snapd-state force-autorefresh
systemctl start snapd.{socket,service}
if ! "$TESTSTOOLS"/snapd-state wait-for-snap-autorefresh test-snapd-tools_instance "$CHANGE_ID"; then
echo 'expected "test-snapd-tools_instance" to have been auto-refreshed'
exit 1
fi
# check that "test-snapd-tools" wasn't auto-refreshed before "test-snapd-tools_instance"
snap changes | tail -3 | NOMATCH 'Auto-refresh snap "test-snapd-tools"'
echo "Snaps auto-refresh without holds"
reset
CHANGE_ID=$(snap changes | tail -2 | grep "Done.*Remove auto-refresh hold on all snaps" | awk '{print $1}')
systemctl stop snapd.{service,socket}
"$TESTSTOOLS"/snapd-state change-snap-channel test-snapd-tools edge
"$TESTSTOOLS"/snapd-state force-autorefresh
systemctl start snapd.{socket,service}
"$TESTSTOOLS"/snapd-state wait-for-autorefresh "$CHANGE_ID"
echo "Held snaps don't refresh in general refreshes"
reset
snap refresh --hold=forever test-snapd-tools
snap switch --edge test-snapd-tools_instance
snap refresh 2>&1 | MATCH "test-snapd-tools_instance .* refreshed"
echo "Held snaps are refreshed in specific refreshes"
reset
snap refresh --hold test-snapd-tools
snap refresh --channel=latest/edge test-snapd-tools 2>&1 | MATCH "test-snapd-tools .* refreshed"
echo "Generic refreshes ignore holds on all snaps"
reset
snap refresh --hold
systemctl stop snapd.{service,socket}
"$TESTSTOOLS"/snapd-state change-snap-channel test-snapd-tools edge
systemctl start snapd.{socket,service}
snap refresh 2>&1 | MATCH "test-snapd-tools .* refreshed"
|