File: task.yaml

package info (click to toggle)
snapd 2.74.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 81,428 kB
  • sloc: sh: 16,966; ansic: 16,788; python: 11,332; makefile: 1,897; exp: 190; awk: 58; xml: 22
file content (126 lines) | stat: -rw-r--r-- 5,160 bytes parent folder | download
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'