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
|
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}
skip:
- reason: This test needs test keys to be trusted using fakestore
if: |
[ "$STORE_TYPE" = "fake" ] && [ "$TRUST_TEST_KEYS" = "false" ]
- reason: Classic snaps are not supported in this system
if: |
[[ "$SNAP_NAME" =~ classic && "$SPREAD_SYSTEM" =~ ^(fedora-|arch-|centos-) ]]
prepare: |
flags=
if [[ "$SNAP_NAME" =~ classic ]]; then
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: |
"$TESTSTOOLS"/store-state teardown-fake-store "$BLOB_DIR"
if [[ "$SPREAD_VARIANT" =~ parallel ]]; then
snap set system experimental.parallel-instances=null
fi
execute: |
# 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'
|