File: task.yaml

package info (click to toggle)
snapd 2.71-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 79,536 kB
  • sloc: ansic: 16,114; sh: 16,105; python: 9,941; makefile: 1,890; exp: 190; awk: 40; xml: 22
file content (168 lines) | stat: -rw-r--r-- 6,129 bytes parent folder | download | duplicates (2)
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'