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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
summary: Check that the refresh command works.
details: |
These tests exercise the refresh command using different store backends.
The concrete store to be used is controlled with the STORE_TYPE variant,
the defined values are fake, for a local store, or remote, for the currently
configured remote store.
When executing against the remote stores the tests rely in the existence of
a given snap with an updatable version (version string like 2.0+fake1) in the
edge channel.
# ubuntu-14.04: systemd-run not supported
systems: [-ubuntu-core-*, -ubuntu-14.04*]
environment:
SNAP_NAME/parallel_strict_fake,parallel_strict_remote: test-snapd-tools_instance
SNAP_NAME/strict_fake,strict_remote: test-snapd-tools
SNAP_NAME/classic_fake,classic_remote: test-snapd-classic-confinement
SNAP_VERSION_PATTERN: \d+\.\d+\+fake1
BLOB_DIR: $(pwd)/fake-store-blobdir
STORE_TYPE/parallel_strict_fake,strict_fake,classic_fake: fake
STORE_TYPE/parallel_strict_remote,strict_remote,classic_remote: ${REMOTE_STORE}
prepare: |
if [ "$STORE_TYPE" = "fake" ]; then
if os.query is-core; then
exit
fi
if [ "$TRUST_TEST_KEYS" = "false" ]; then
echo "This test needs test keys to be trusted"
exit
fi
fi
flags=
if [[ "$SNAP_NAME" =~ classic ]]; then
case "$SPREAD_SYSTEM" in
ubuntu-core-*|fedora-*|arch-*|centos-*)
exit
;;
esac
flags=--classic
fi
if [[ "$SPREAD_VARIANT" =~ parallel ]]; then
snap set system experimental.parallel-instances=true
fi
echo "Given a snap is installed"
snap install $flags "$SNAP_NAME"
if [ "$STORE_TYPE" = "fake" ]; then
"$TESTSTOOLS"/store-state setup-fake-store "$BLOB_DIR"
echo "And a new version of that snap put in the controlled store"
"$TESTSTOOLS"/store-state init-fake-refreshes "$BLOB_DIR" "$SNAP_NAME"
fi
restore: |
if [ "$STORE_TYPE" = "fake" ]; then
if os.query is-core; then
exit
fi
if [ "$TRUST_TEST_KEYS" = "false" ]; then
echo "This test needs test keys to be trusted"
exit
fi
if [[ "$SNAP_NAME" =~ classic ]]; then
case "$SPREAD_SYSTEM" in
ubuntu-core-*|fedora-*|arch-*|centos-*)
exit
;;
esac
fi
"$TESTSTOOLS"/store-state teardown-fake-store "$BLOB_DIR"
fi
if [[ "$SPREAD_VARIANT" =~ parallel ]]; then
snap set system experimental.parallel-instances=null
fi
execute: |
if [ "$STORE_TYPE" = "fake" ]; then
if os.query is-core; then
exit
fi
if [ "$TRUST_TEST_KEYS" = "false" ]; then
echo "This test needs test keys to be trusted"
exit
fi
fi
if [[ "$SNAP_NAME" =~ classic ]]; then
case "$SPREAD_SYSTEM" in
ubuntu-core-*|fedora-*|arch-*|centos-*)
exit
;;
esac
fi
# FIXME: currently the --list from channel doesn't work
# echo "Then the new version is available for the snap to be refreshed"
# expected="$SNAP_NAME +$SNAP_VERSION_PATTERN"
# snap refresh --list | grep -Pzq "$expected"
#
# echo "================================="
#shellcheck source=tests/lib/pkgdb.sh
if os.query is-classic && not os.query is-trusty && not os.query is-amazon-linux && not os.query is-centos 9; then
tests.pkgs install --no-install-recommends inotify-tools
tests.cleanup defer "tests.pkgs remove inotify-tools"
systemd-run \
--unit test-snapd-watch-inhibit.service \
-- \
"$(command -v inotifywait)" \
--monitor \
--recursive \
--outfile /tmp/inhibit.events \
/var/lib/snapd/inhibit
tests.cleanup defer systemctl stop test-snapd-watch-inhibit.service
fi
echo "When the snap is refreshed"
snap refresh --channel=edge "$SNAP_NAME"
if [ -f /tmp/inhibit.events ]; then
echo "During the refresh process, the inhibition lock was established and released"
MATCH "/var/lib/snapd/inhibit/ OPEN $SNAP_NAME.lock" /tmp/inhibit.events
MATCH "/var/lib/snapd/inhibit/ MODIFY $SNAP_NAME.lock" /tmp/inhibit.events
MATCH "/var/lib/snapd/inhibit/ CLOSE_WRITE,CLOSE $SNAP_NAME.lock" /tmp/inhibit.events
MATCH "/var/lib/snapd/inhibit/ CREATE $SNAP_NAME.refresh" /tmp/inhibit.events
MATCH "/var/lib/snapd/inhibit/ OPEN $SNAP_NAME.refresh" /tmp/inhibit.events
MATCH "/var/lib/snapd/inhibit/ MODIFY $SNAP_NAME.refresh" /tmp/inhibit.events
MATCH "/var/lib/snapd/inhibit/ CLOSE_WRITE,CLOSE $SNAP_NAME.refresh" /tmp/inhibit.events
MATCH "/var/lib/snapd/inhibit/ DELETE $SNAP_NAME.refresh" /tmp/inhibit.events
tests.cleanup pop # stop the inotifywait unit
tests.cleanup pop # remove inotify-tools
fi
echo "Then the new version is listed"
expected="$SNAP_NAME +$SNAP_VERSION_PATTERN"
snap list | grep -Pzq "$expected"
echo "When a snap is refreshed and has no update it exit 0"
snap refresh "$SNAP_NAME" 2>stderr.out
MATCH "snap \"$SNAP_NAME\" has no updates available" < stderr.out
echo "classic snaps "
echo "When multiple snaps have no update we have a good message"
"$TESTSTOOLS"/snaps-state install-local basic
snap refresh "$SNAP_NAME" basic 2>&1 | MATCH "All snaps up to date."
echo "When moving to stable"
snap refresh --stable "$SNAP_NAME"
snap info "$SNAP_NAME" | MATCH "tracking: +latest/stable"
snap refresh --candidate "$SNAP_NAME" 2>&1 | MATCH "$SNAP_NAME \\(candidate\\).*"
snap info "$SNAP_NAME" | MATCH "tracking: +latest/candidate"
echo "When multiple snaps are refreshed we error if we have unknown names"
if snap refresh core invälid-snap-name 2> out.err; then
echo "snap refresh invalid-snap-name should fail but it did not?"
exit 1
fi
tr '\n' ' ' < out.err | tr -s ' ' | MATCH 'cannot refresh .* is not installed'
|