Merge ~alfonsosanchezbeato/snappy-hwe-snaps/+git/modem-manager:move-to-mm-1.6 into ~snappy-hwe-team/snappy-hwe-snaps/+git/modem-manager:master
- Git
- lp:~alfonsosanchezbeato/snappy-hwe-snaps/+git/modem-manager
- move-to-mm-1.6
- Merge into master
Status: | Merged |
---|---|
Approved by: | Simon Fels |
Approved revision: | 4b2b29f6baaf6452d5f28ba2fd2fe8e6fcf35099 |
Merged at revision: | ab97434adef3adf88ce9b095fa4c32e6f84c9407 |
Proposed branch: | ~alfonsosanchezbeato/snappy-hwe-snaps/+git/modem-manager:move-to-mm-1.6 |
Merge into: | ~snappy-hwe-team/snappy-hwe-snaps/+git/modem-manager:master |
Diff against target: |
737 lines (+593/-8) 16 files modified
run-tests.sh (+84/-0) snapcraft.yaml (+73/-8) spread.yaml (+50/-0) tests/image/README.md (+7/-0) tests/image/create-image.sh (+157/-0) tests/image/pc-model.json (+11/-0) tests/image/pc.model (+21/-0) tests/image/test-user-assertion.json (+13/-0) tests/image/test-user.assertion (+25/-0) tests/lib/prepare-all.sh (+25/-0) tests/lib/prepare.sh (+49/-0) tests/lib/restore-each.sh (+31/-0) tests/lib/snap-names.sh (+7/-0) tests/lib/utilities.sh (+14/-0) tests/main/installation/task.yaml (+13/-0) tests/main/network-manager-autoconn/task.yaml (+13/-0) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Simon Fels | Approve | ||
System Enablement Bot | continuous-integration | Approve | |
Konrad Zapałowicz (community) | code | Approve | |
Review via email: mp+310532@code.launchpad.net |
Commit message
Update to modem-manager upstream 1.6.2
Description of the change
Update to modem-manager upstream 1.6.2
Alfonso Sanchez-Beato (alfonsosanchezbeato) wrote : | # |
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:ce38705a18b
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Simon Fels (morphis) wrote : | # |
See comments inline.
Alfonso Sanchez-Beato (alfonsosanchezbeato) : | # |
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:1139799d008
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:1139799d008
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:df7522d5c40
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:df7522d5c40
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Konrad Zapałowicz (kzapalowicz) wrote : | # |
lgtm
Matteo Croce (teknoraver) wrote : | # |
use #!/bin/sh if a script is POSIX
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:ef2538d4310
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Alfonso Sanchez-Beato (alfonsosanchezbeato) wrote : | # |
@matteo, comments addressed.
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:ef2538d4310
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Simon Fels (morphis) wrote : | # |
See comments inline
Alfonso Sanchez-Beato (alfonsosanchezbeato) wrote : | # |
@morphis, comments addressed.
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:4b2b29f6baa
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
System Enablement Bot (system-enablement-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:4b2b29f6baa
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Preview Diff
1 | diff --git a/run-tests.sh b/run-tests.sh | |||
2 | 0 | new file mode 100755 | 0 | new file mode 100755 |
3 | index 0000000..f2e9079 | |||
4 | --- /dev/null | |||
5 | +++ b/run-tests.sh | |||
6 | @@ -0,0 +1,84 @@ | |||
7 | 1 | #!/bin/sh | ||
8 | 2 | # | ||
9 | 3 | # Copyright (C) 2016 Canonical Ltd | ||
10 | 4 | # | ||
11 | 5 | # This program is free software: you can redistribute it and/or modify | ||
12 | 6 | # it under the terms of the GNU General Public License version 3 as | ||
13 | 7 | # published by the Free Software Foundation. | ||
14 | 8 | # | ||
15 | 9 | # This program is distributed in the hope that it will be useful, | ||
16 | 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | 12 | # GNU General Public License for more details. | ||
19 | 13 | # | ||
20 | 14 | # You should have received a copy of the GNU General Public License | ||
21 | 15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
22 | 16 | |||
23 | 17 | set -ex | ||
24 | 18 | |||
25 | 19 | image_name=ubuntu-core-16.img | ||
26 | 20 | channel=candidate | ||
27 | 21 | spread_opts= | ||
28 | 22 | force_new_image=0 | ||
29 | 23 | test_from_channel=0 | ||
30 | 24 | |||
31 | 25 | show_help() { | ||
32 | 26 | echo "Usage: run-tests.sh [OPTIONS]" | ||
33 | 27 | echo | ||
34 | 28 | echo "optional arguments:" | ||
35 | 29 | echo " --help Show this help message and exit" | ||
36 | 30 | echo " --channel=<channel> Select another channel to build the base image from (default: $channel)" | ||
37 | 31 | echo " --debug Enable verbose debugging output" | ||
38 | 32 | echo " --test-from-channel Pull snap from the specified channel instead of building it from source" | ||
39 | 33 | echo " --force-new-image Force generating a new image used for testing" | ||
40 | 34 | } | ||
41 | 35 | |||
42 | 36 | while [ -n "$1" ]; do | ||
43 | 37 | case "$1" in | ||
44 | 38 | --help) | ||
45 | 39 | show_help | ||
46 | 40 | exit | ||
47 | 41 | ;; | ||
48 | 42 | --channel=*) | ||
49 | 43 | channel=${1#*=} | ||
50 | 44 | shift | ||
51 | 45 | ;; | ||
52 | 46 | --test-from-channel) | ||
53 | 47 | test_from_channel=1 | ||
54 | 48 | shift | ||
55 | 49 | ;; | ||
56 | 50 | --debug) | ||
57 | 51 | spread_opts="$spread_opts -vv -debug" | ||
58 | 52 | shift | ||
59 | 53 | ;; | ||
60 | 54 | --force-new-image) | ||
61 | 55 | force_new_image=1 | ||
62 | 56 | shift | ||
63 | 57 | ;; | ||
64 | 58 | *) | ||
65 | 59 | echo "Unknown command: $1" | ||
66 | 60 | exit 1 | ||
67 | 61 | ;; | ||
68 | 62 | esac | ||
69 | 63 | done | ||
70 | 64 | |||
71 | 65 | SPREAD_QEMU_PATH="$HOME/.spread/qemu" | ||
72 | 66 | if [ `which spread` = /snap/bin/spread ] ; then | ||
73 | 67 | current_version=`readlink /snap/spread/current` | ||
74 | 68 | SPREAD_QEMU_PATH="$HOME/snap/spread/$current_version/.spread/qemu/" | ||
75 | 69 | fi | ||
76 | 70 | |||
77 | 71 | # Make sure we have a base image we use for testing | ||
78 | 72 | if [ ! -e $SPREAD_QEMU_PATH/$image_name ] || [ $force_new_image -eq 1 ] ; then | ||
79 | 73 | echo "INFO: Creating new qemu test image ..." | ||
80 | 74 | (cd tests/image ; sudo ./create-image.sh $channel) | ||
81 | 75 | mkdir -p $SPREAD_QEMU_PATH | ||
82 | 76 | mv tests/image/ubuntu-core-16.img $SPREAD_QEMU_PATH/$image_name | ||
83 | 77 | fi | ||
84 | 78 | |||
85 | 79 | # We currently only run spread tests but we could do other things | ||
86 | 80 | # here as well like running our snap-lintian tool etc. | ||
87 | 81 | if [ $test_from_channel -eq 1 ] ; then | ||
88 | 82 | export SNAP_CHANNEL=$channel | ||
89 | 83 | fi | ||
90 | 84 | spread $spread_opts | ||
91 | diff --git a/snapcraft.yaml b/snapcraft.yaml | |||
92 | index aa73a6e..f8dfd22 100644 | |||
93 | --- a/snapcraft.yaml | |||
94 | +++ b/snapcraft.yaml | |||
95 | @@ -1,5 +1,5 @@ | |||
96 | 1 | name: modem-manager | 1 | name: modem-manager |
98 | 2 | version: 1.4.0-1 | 2 | version: 1.6.2-1 |
99 | 3 | summary: ModemManager is a service which controls mobile broadband | 3 | summary: ModemManager is a service which controls mobile broadband |
100 | 4 | description: | | 4 | description: | |
101 | 5 | ModemManager is a DBus-activated daemon which controls mobile broadband | 5 | ModemManager is a DBus-activated daemon which controls mobile broadband |
102 | @@ -31,12 +31,58 @@ parts: | |||
103 | 31 | bin/modemmanager: bin/modemmanager | 31 | bin/modemmanager: bin/modemmanager |
104 | 32 | data/copyright: usr/share/doc/modem-manager/copyright | 32 | data/copyright: usr/share/doc/modem-manager/copyright |
105 | 33 | 33 | ||
106 | 34 | libmbim: | ||
107 | 35 | plugin: autotools | ||
108 | 36 | |||
109 | 37 | source: https://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/modem-manager | ||
110 | 38 | source-type: git | ||
111 | 39 | source-branch: libmbim/xenial/1.14.0 | ||
112 | 40 | |||
113 | 41 | configflags: | ||
114 | 42 | - --with-udev | ||
115 | 43 | - --libexecdir=/usr/lib/libmbim | ||
116 | 44 | |||
117 | 45 | build-packages: | ||
118 | 46 | - libglib2.0-dev | ||
119 | 47 | - libgudev-1.0-dev | ||
120 | 48 | |||
121 | 49 | filesets: | ||
122 | 50 | wanted: | ||
123 | 51 | - lib/libmbim-glib.so* | ||
124 | 52 | |||
125 | 53 | snap: | ||
126 | 54 | - $wanted | ||
127 | 55 | |||
128 | 56 | libqmi: | ||
129 | 57 | after: [ libmbim ] | ||
130 | 58 | plugin: autotools | ||
131 | 59 | |||
132 | 60 | source: https://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/modem-manager | ||
133 | 61 | source-type: git | ||
134 | 62 | source-branch: libqmi/xenial/1.16.2 | ||
135 | 63 | |||
136 | 64 | configflags: | ||
137 | 65 | - --enable-mbim-qmux | ||
138 | 66 | - --libexecdir=/usr/lib/libqmi | ||
139 | 67 | |||
140 | 68 | build-packages: | ||
141 | 69 | - intltool | ||
142 | 70 | - libglib2.0-dev | ||
143 | 71 | |||
144 | 72 | filesets: | ||
145 | 73 | wanted: | ||
146 | 74 | - lib/libqmi-glib.so* | ||
147 | 75 | |||
148 | 76 | snap: | ||
149 | 77 | - $wanted | ||
150 | 78 | |||
151 | 34 | modemmanager: | 79 | modemmanager: |
152 | 80 | after: [ libmbim, libqmi ] | ||
153 | 35 | plugin: autotools | 81 | plugin: autotools |
154 | 36 | 82 | ||
155 | 37 | source: https://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/modem-manager | 83 | source: https://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/modem-manager |
156 | 38 | source-type: git | 84 | source-type: git |
158 | 39 | source-branch: modem-manager/1.4.0 | 85 | source-branch: modem-manager/xenial/1.6.2 |
159 | 40 | 86 | ||
160 | 41 | configflags: | 87 | configflags: |
161 | 42 | - --prefix=/usr | 88 | - --prefix=/usr |
162 | @@ -44,7 +90,7 @@ parts: | |||
163 | 44 | - --libexecdir=/usr/lib/ModemManager | 90 | - --libexecdir=/usr/lib/ModemManager |
164 | 45 | - --sysconfdir=/etc | 91 | - --sysconfdir=/etc |
165 | 46 | - --enable-gtk-doc=no | 92 | - --enable-gtk-doc=no |
167 | 47 | - --with-polkit=none | 93 | - --with-polkit=no |
168 | 48 | - --enable-vala=no | 94 | - --enable-vala=no |
169 | 49 | 95 | ||
170 | 50 | build-packages: | 96 | build-packages: |
171 | @@ -54,14 +100,12 @@ parts: | |||
172 | 54 | - libdbus-1-dev | 100 | - libdbus-1-dev |
173 | 55 | - libiw-dev | 101 | - libiw-dev |
174 | 56 | - libglib2.0-dev | 102 | - libglib2.0-dev |
175 | 57 | - libmbim-glib-dev | ||
176 | 58 | - libnl-3-dev | 103 | - libnl-3-dev |
177 | 59 | - libnl-route-3-dev | 104 | - libnl-route-3-dev |
178 | 60 | - libnl-genl-3-dev | 105 | - libnl-genl-3-dev |
179 | 61 | - libnss3-dev | 106 | - libnss3-dev |
180 | 62 | - libgnutls28-dev | 107 | - libgnutls28-dev |
181 | 63 | - libgcrypt11-dev | 108 | - libgcrypt11-dev |
182 | 64 | - libqmi-glib-dev | ||
183 | 65 | - libxml-parser-perl | 109 | - libxml-parser-perl |
184 | 66 | - uuid-dev | 110 | - uuid-dev |
185 | 67 | - libsystemd-dev | 111 | - libsystemd-dev |
186 | @@ -89,7 +133,28 @@ parts: | |||
187 | 89 | - libgirepository1.0-dev | 133 | - libgirepository1.0-dev |
188 | 90 | - libglib2.0-dev | 134 | - libglib2.0-dev |
189 | 91 | - libgudev-1.0-dev | 135 | - libgudev-1.0-dev |
190 | 92 | - libqmi-glib-dev | ||
191 | 93 | - libmbim-glib-dev | ||
192 | 94 | - libglib2.0-doc | 136 | - libglib2.0-doc |
194 | 95 | - libqmi-utils | 137 | |
195 | 138 | filesets: | ||
196 | 139 | wanted: | ||
197 | 140 | - usr/bin/mmcli | ||
198 | 141 | - usr/sbin/ModemManager | ||
199 | 142 | - usr/lib/ModemManager/ | ||
200 | 143 | - usr/lib/x86_64-linux-gnu/libgudev-1.0.so* | ||
201 | 144 | - usr/lib/libmm-glib.so* | ||
202 | 145 | - usr/share/doc/libgudev-1.0-0/ | ||
203 | 146 | # Following libraries could also be pulled from core | ||
204 | 147 | - usr/lib/x86_64-linux-gnu/libgmodule-2.0.so* | ||
205 | 148 | - usr/lib/x86_64-linux-gnu/libgio-2.0.so* | ||
206 | 149 | - usr/lib/x86_64-linux-gnu/libgobject-2.0.so* | ||
207 | 150 | - usr/lib/x86_64-linux-gnu/libglib-2.0.so* | ||
208 | 151 | - usr/lib/x86_64-linux-gnu/libffi.so* | ||
209 | 152 | - usr/lib/x86_64-linux-gnu/libpcre.so* | ||
210 | 153 | - lib/x86_64-linux-gnu/libglib-2.0.so* | ||
211 | 154 | - lib/x86_64-linux-gnu/libpcre.so* | ||
212 | 155 | - usr/share/doc/libglib2.0-* | ||
213 | 156 | - usr/share/doc/libffi6/ | ||
214 | 157 | - usr/share/doc/libpcre* | ||
215 | 158 | |||
216 | 159 | snap: | ||
217 | 160 | - $wanted | ||
218 | diff --git a/spread.yaml b/spread.yaml | |||
219 | 96 | new file mode 100644 | 161 | new file mode 100644 |
220 | index 0000000..8cc5661 | |||
221 | --- /dev/null | |||
222 | +++ b/spread.yaml | |||
223 | @@ -0,0 +1,50 @@ | |||
224 | 1 | # | ||
225 | 2 | # Copyright (C) 2016 Canonical Ltd | ||
226 | 3 | # | ||
227 | 4 | # This program is free software: you can redistribute it and/or modify | ||
228 | 5 | # it under the terms of the GNU General Public License version 3 as | ||
229 | 6 | # published by the Free Software Foundation. | ||
230 | 7 | # | ||
231 | 8 | # This program is distributed in the hope that it will be useful, | ||
232 | 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
233 | 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
234 | 11 | # GNU General Public License for more details. | ||
235 | 12 | # | ||
236 | 13 | # You should have received a copy of the GNU General Public License | ||
237 | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
238 | 15 | |||
239 | 16 | |||
240 | 17 | project: modem-manager | ||
241 | 18 | |||
242 | 19 | environment: | ||
243 | 20 | PROJECT_PATH: /home/modem-manager | ||
244 | 21 | TESTSLIB: $PROJECT_PATH/tests/lib | ||
245 | 22 | SNAP_NAME: modem-manager | ||
246 | 23 | # Allow the host to pass the channel to use for the test run | ||
247 | 24 | SNAP_CHANNEL: $(HOST:echo $SNAP_CHANNEL) | ||
248 | 25 | |||
249 | 26 | backends: | ||
250 | 27 | qemu: | ||
251 | 28 | systems: | ||
252 | 29 | - ubuntu-core-16: | ||
253 | 30 | username: test | ||
254 | 31 | password: test | ||
255 | 32 | |||
256 | 33 | # Put this somewhere where we have read-write access | ||
257 | 34 | path: /home/modem-manager | ||
258 | 35 | |||
259 | 36 | exclude: | ||
260 | 37 | - .git | ||
261 | 38 | |||
262 | 39 | prepare: | | ||
263 | 40 | . $TESTSLIB/prepare-all.sh | ||
264 | 41 | |||
265 | 42 | suites: | ||
266 | 43 | tests/main/: | ||
267 | 44 | summary: Full-system tests for ModemManager | ||
268 | 45 | systems: | ||
269 | 46 | - ubuntu-core-16 | ||
270 | 47 | prepare: | | ||
271 | 48 | . $TESTSLIB/prepare.sh | ||
272 | 49 | restore-each: | | ||
273 | 50 | . $TESTSLIB/restore-each.sh | ||
274 | diff --git a/tests/image/README.md b/tests/image/README.md | |||
275 | 0 | new file mode 100644 | 51 | new file mode 100644 |
276 | index 0000000..b75b66e | |||
277 | --- /dev/null | |||
278 | +++ b/tests/image/README.md | |||
279 | @@ -0,0 +1,7 @@ | |||
280 | 1 | # Generate user password | ||
281 | 2 | |||
282 | 3 | You can generate the password for the system user assertion via | ||
283 | 4 | |||
284 | 5 | ``` | ||
285 | 6 | $ python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))' | ||
286 | 7 | ``` | ||
287 | diff --git a/tests/image/create-image.sh b/tests/image/create-image.sh | |||
288 | 0 | new file mode 100755 | 8 | new file mode 100755 |
289 | index 0000000..4e81fc7 | |||
290 | --- /dev/null | |||
291 | +++ b/tests/image/create-image.sh | |||
292 | @@ -0,0 +1,157 @@ | |||
293 | 1 | #!/bin/sh | ||
294 | 2 | # | ||
295 | 3 | # Copyright (C) 2016 Canonical Ltd | ||
296 | 4 | # | ||
297 | 5 | # This program is free software: you can redistribute it and/or modify | ||
298 | 6 | # it under the terms of the GNU General Public License version 3 as | ||
299 | 7 | # published by the Free Software Foundation. | ||
300 | 8 | # | ||
301 | 9 | # This program is distributed in the hope that it will be useful, | ||
302 | 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
303 | 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
304 | 12 | # GNU General Public License for more details. | ||
305 | 13 | # | ||
306 | 14 | # You should have received a copy of the GNU General Public License | ||
307 | 15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
308 | 16 | |||
309 | 17 | set -e | ||
310 | 18 | |||
311 | 19 | if [ $UID -ne 0 ] ; then | ||
312 | 20 | echo "ERROR: needs to be executed as root" | ||
313 | 21 | exit 1 | ||
314 | 22 | fi | ||
315 | 23 | |||
316 | 24 | channel=candidate | ||
317 | 25 | if [ ! -z "$1" ] ; then | ||
318 | 26 | channel=$1 | ||
319 | 27 | fi | ||
320 | 28 | |||
321 | 29 | snap= | ||
322 | 30 | if [ ! -z "$2" ] ; then | ||
323 | 31 | snap=$2 | ||
324 | 32 | fi | ||
325 | 33 | |||
326 | 34 | model=pc | ||
327 | 35 | arch=amd64 | ||
328 | 36 | image_name=ubuntu-core-16.img | ||
329 | 37 | ubuntu_image_extra_args= | ||
330 | 38 | |||
331 | 39 | if [ ! -z "$snap" ] ; then | ||
332 | 40 | ubuntu_image_extra_args="--extra-snaps $snap" | ||
333 | 41 | fi | ||
334 | 42 | |||
335 | 43 | ubuntu-image \ | ||
336 | 44 | --channel $channel \ | ||
337 | 45 | -o $image_name \ | ||
338 | 46 | --image-size 4G \ | ||
339 | 47 | $ubuntu_image_extra_args \ | ||
340 | 48 | $model.model | ||
341 | 49 | |||
342 | 50 | kpartx -a $image_name | ||
343 | 51 | sleep 0.5 | ||
344 | 52 | |||
345 | 53 | loop_path=`findfs LABEL=writable` | ||
346 | 54 | tmp_mount=`mktemp -d` | ||
347 | 55 | |||
348 | 56 | mount $loop_path $tmp_mount | ||
349 | 57 | |||
350 | 58 | # Migrate all systemd units from core snap into the writable area. This | ||
351 | 59 | # would be normally done on firstboot by the initramfs but we can't rely | ||
352 | 60 | # on that because we are adding another file in there and that will | ||
353 | 61 | # prevent the initramfs from transitioning any files. | ||
354 | 62 | core_snap=$(find $tmp_mount/system-data/var/lib/snapd/snaps -name "core_*.snap") | ||
355 | 63 | tmp_core=`mktemp -d` | ||
356 | 64 | mount $core_snap $tmp_core | ||
357 | 65 | mkdir -p $tmp_mount/system-data/etc/systemd | ||
358 | 66 | cp -rav $tmp_core/etc/systemd/* \ | ||
359 | 67 | $tmp_mount/system-data/etc/systemd/ | ||
360 | 68 | umount $tmp_core | ||
361 | 69 | rm -rf $tmp_core | ||
362 | 70 | |||
363 | 71 | # system-user assertion which gives us our test:test user we use to | ||
364 | 72 | # log into the system | ||
365 | 73 | mkdir -p $tmp_mount/system-data/var/lib/snapd/seed/assertions | ||
366 | 74 | cp test-user.assertion $tmp_mount/system-data/var/lib/snapd/seed/assertions | ||
367 | 75 | |||
368 | 76 | # Disable console-conf for the first boot | ||
369 | 77 | mkdir -p $tmp_mount/system-data/var/lib/console-conf/ | ||
370 | 78 | touch $tmp_mount/system-data/var/lib/console-conf/complete | ||
371 | 79 | |||
372 | 80 | # Create systemd service which is running on firstboot and sets up | ||
373 | 81 | # various things for us. | ||
374 | 82 | mkdir -p $tmp_mount/system-data/etc/systemd/system | ||
375 | 83 | cat << 'EOF' > $tmp_mount/system-data/etc/systemd/system/devmode-firstboot.service | ||
376 | 84 | [Unit] | ||
377 | 85 | Description=Run devmode firstboot setup | ||
378 | 86 | After=snapd.service snapd.socket | ||
379 | 87 | |||
380 | 88 | [Service] | ||
381 | 89 | Type=oneshot | ||
382 | 90 | ExecStart=/writable/system-data/var/lib/devmode-firstboot/run.sh | ||
383 | 91 | RemainAfterExit=yes | ||
384 | 92 | TimeoutSec=3min | ||
385 | 93 | EOF | ||
386 | 94 | |||
387 | 95 | mkdir -p $tmp_mount/system-data/etc/systemd/system/multi-user.target.wants | ||
388 | 96 | ln -sf /etc/systemd/system/devmode-firstboot.service \ | ||
389 | 97 | $tmp_mount/system-data/etc/systemd/system/multi-user.target.wants/devmode-firstboot.service | ||
390 | 98 | |||
391 | 99 | mkdir $tmp_mount/system-data/var/lib/devmode-firstboot | ||
392 | 100 | cat << EOF > $tmp_mount/system-data/var/lib/devmode-firstboot/00-snapd-config.yaml | ||
393 | 101 | network: | ||
394 | 102 | version: 2 | ||
395 | 103 | ethernets: | ||
396 | 104 | eth0: | ||
397 | 105 | dhcp4: true | ||
398 | 106 | EOF | ||
399 | 107 | |||
400 | 108 | cat << 'EOF' > $tmp_mount/system-data/var/lib/devmode-firstboot/run.sh | ||
401 | 109 | #!/bin/sh | ||
402 | 110 | |||
403 | 111 | set -e | ||
404 | 112 | |||
405 | 113 | # Don't start again if we're already done | ||
406 | 114 | if [ -e /writable/system-data/var/lib/devmode-firstboot/complete ] ; then | ||
407 | 115 | exit 0 | ||
408 | 116 | fi | ||
409 | 117 | |||
410 | 118 | echo "Start devmode-firstboot $(date -Iseconds --utc)" | ||
411 | 119 | |||
412 | 120 | if [ "$(snap managed)" = "true" ]; then | ||
413 | 121 | echo "System already managed, exiting" | ||
414 | 122 | exit 0 | ||
415 | 123 | fi | ||
416 | 124 | |||
417 | 125 | # no changes at all | ||
418 | 126 | while ! snap changes ; do | ||
419 | 127 | echo "No changes yet, waiting" | ||
420 | 128 | sleep 1 | ||
421 | 129 | done | ||
422 | 130 | |||
423 | 131 | while snap changes | grep -qE '(Do|Doing) .*Initialize system state' ; do | ||
424 | 132 | echo "Initialize system state is in progress, waiting" | ||
425 | 133 | sleep 1 | ||
426 | 134 | done | ||
427 | 135 | |||
428 | 136 | if [ -n "$(snap known system-user)" ]; then | ||
429 | 137 | echo "Trying to create known user" | ||
430 | 138 | snap create-user --known --sudoer | ||
431 | 139 | fi | ||
432 | 140 | |||
433 | 141 | cp /writable/system-data/var/lib/devmode-firstboot/00-snapd-config.yaml /writable/system-data/etc/netplan | ||
434 | 142 | |||
435 | 143 | # Enable console-conf again | ||
436 | 144 | rm /writable/system-data/var/lib/console-conf/complete | ||
437 | 145 | |||
438 | 146 | # Mark us done | ||
439 | 147 | touch /writable/system-data/var/lib/devmode-firstboot/complete | ||
440 | 148 | |||
441 | 149 | # Reboot the system as its now prepared for the user | ||
442 | 150 | reboot | ||
443 | 151 | EOF | ||
444 | 152 | |||
445 | 153 | chmod +x $tmp_mount/system-data/var/lib/devmode-firstboot/run.sh | ||
446 | 154 | |||
447 | 155 | umount $tmp_mount | ||
448 | 156 | kpartx -d $image_name | ||
449 | 157 | rm -rf $tmp_mount | ||
450 | diff --git a/tests/image/pc-model.json b/tests/image/pc-model.json | |||
451 | 0 | new file mode 100644 | 158 | new file mode 100644 |
452 | index 0000000..2eb1411 | |||
453 | --- /dev/null | |||
454 | +++ b/tests/image/pc-model.json | |||
455 | @@ -0,0 +1,11 @@ | |||
456 | 1 | { | ||
457 | 2 | "type": "model", | ||
458 | 3 | "authority-id": "4BKZlf4WMNBKgQfij0rftmp5BzDdVhlf", | ||
459 | 4 | "brand-id": "4BKZlf4WMNBKgQfij0rftmp5BzDdVhlf", | ||
460 | 5 | "series": "16", | ||
461 | 6 | "model": "pc", | ||
462 | 7 | "architecture": "amd64", | ||
463 | 8 | "gadget": "pc", | ||
464 | 9 | "kernel": "pc-kernel", | ||
465 | 10 | "timestamp": "2016-09-09T08:27:36+00:00" | ||
466 | 11 | } | ||
467 | diff --git a/tests/image/pc.model b/tests/image/pc.model | |||
468 | 0 | new file mode 100644 | 12 | new file mode 100644 |
469 | index 0000000..345b7e4 | |||
470 | --- /dev/null | |||
471 | +++ b/tests/image/pc.model | |||
472 | @@ -0,0 +1,21 @@ | |||
473 | 1 | type: model | ||
474 | 2 | authority-id: 4BKZlf4WMNBKgQfij0rftmp5BzDdVhlf | ||
475 | 3 | series: 16 | ||
476 | 4 | brand-id: 4BKZlf4WMNBKgQfij0rftmp5BzDdVhlf | ||
477 | 5 | model: pc | ||
478 | 6 | architecture: amd64 | ||
479 | 7 | gadget: pc | ||
480 | 8 | kernel: pc-kernel | ||
481 | 9 | timestamp: 2016-09-09T08:27:36+00:00 | ||
482 | 10 | sign-key-sha3-384: a4qX7md6GQGNcZc_cmWPBStTq4RNCnGTzF-4usF5wFylQ-xZQej-SD6prx8Yl89O | ||
483 | 11 | |||
484 | 12 | AcLBXAQAAQoABgUCWBBNTwAKCRAVoE002xqmOPH/EACWLf1UeZgICjNbzLI5bO/84LExS8iUjarG | ||
485 | 13 | S7DRn8Ln5zu44pxz7UXJNjULgnU8yuKVPVWg0ij7DRvaj8tGxOMMAls1fjSRtEYR8oJFsI3jXDGw | ||
486 | 14 | cLjvJG/crUxV8DgdZFlF02Kb5VtmNDXs1OE3zpPeniG19JYHaf2hDz4SRmWZe4c2MFrAt2UwI/VC | ||
487 | 15 | o/209Fl3qA8p8x5EYOBycgHooHm3924NTF9mXbKSfLRgGS7YzmN4FXFyiGOTY6CRsp37XnkxGcA1 | ||
488 | 16 | +lyZz1X97qT/fOGVUFqHDqUZmuCs5sC3+DNonytTgKt5+7S+V+Ai45HEayD5f4gS9uscnTMTwEEJ | ||
489 | 17 | VgSZRU0My+iJwFlXHaGWQe9eC37YCZ3ahBxc2SpkFffXjYhEMtTtr1vDIYCAhbc2k8aa3hPE2GUg | ||
490 | 18 | 3pv8zs1AuZzSVX+Rp4ysMBqU23UUVP6Bmvr7ZD3E8aEUxE6O/BEA10Km5oZPqpmBfcEVO8a0yZjn | ||
491 | 19 | YQxn4XzY1Nwq1d0sJIV7FEDsq9dXH9QCa4qsCH3KG3jHv32GapvLf8mpr6HSH+JmPM5kNeVugLVy | ||
492 | 20 | /RUAFNu+Y4hqhpRNC8fc+UDkVBXsLDqHb5gfXnhbFIH8LvpVFR20SSkg9/Km5xC+7wcey0h8SD6/ | ||
493 | 21 | Eh70OPLxDkzitEn/1L/0V987dlJnhS4WpqrYfbHYwQ== | ||
494 | diff --git a/tests/image/test-user-assertion.json b/tests/image/test-user-assertion.json | |||
495 | 0 | new file mode 100644 | 22 | new file mode 100644 |
496 | index 0000000..81f6beb | |||
497 | --- /dev/null | |||
498 | +++ b/tests/image/test-user-assertion.json | |||
499 | @@ -0,0 +1,13 @@ | |||
500 | 1 | { | ||
501 | 2 | "type": "system-user", | ||
502 | 3 | "authority-id": "4BKZlf4WMNBKgQfij0rftmp5BzDdVhlf", | ||
503 | 4 | "brand-id": "4BKZlf4WMNBKgQfij0rftmp5BzDdVhlf", | ||
504 | 5 | "series": ["16"], | ||
505 | 6 | "models": ["pc"], | ||
506 | 7 | "name": "Default Test User", | ||
507 | 8 | "username": "test", | ||
508 | 9 | "email": "test@localhost", | ||
509 | 10 | "password": "$6$OCvKy4w/Ppxp7IvC$WPzWiIW.4y18h9htjbOuxLZ.sjQ5M2hoSiEu3FpMU0PMdHQuQdBOqvk8p6DMdS/R/nU/rXidClD23CbSkSgp30", | ||
510 | 11 | "since": "2016-10-24T07:12:10+00:00", | ||
511 | 12 | "until": "2017-10-24T07:12:10+00:00" | ||
512 | 13 | } | ||
513 | diff --git a/tests/image/test-user.assertion b/tests/image/test-user.assertion | |||
514 | 0 | new file mode 100644 | 14 | new file mode 100644 |
515 | index 0000000..7ebb667 | |||
516 | --- /dev/null | |||
517 | +++ b/tests/image/test-user.assertion | |||
518 | @@ -0,0 +1,25 @@ | |||
519 | 1 | type: system-user | ||
520 | 2 | authority-id: 4BKZlf4WMNBKgQfij0rftmp5BzDdVhlf | ||
521 | 3 | brand-id: 4BKZlf4WMNBKgQfij0rftmp5BzDdVhlf | ||
522 | 4 | email: test@localhost | ||
523 | 5 | models: | ||
524 | 6 | - pc | ||
525 | 7 | name: Default Test User | ||
526 | 8 | password: $6$OCvKy4w/Ppxp7IvC$WPzWiIW.4y18h9htjbOuxLZ.sjQ5M2hoSiEu3FpMU0PMdHQuQdBOqvk8p6DMdS/R/nU/rXidClD23CbSkSgp30 | ||
527 | 9 | series: | ||
528 | 10 | - 16 | ||
529 | 11 | since: 2016-10-24T07:12:10+00:00 | ||
530 | 12 | until: 2017-10-24T07:12:10+00:00 | ||
531 | 13 | username: test | ||
532 | 14 | sign-key-sha3-384: a4qX7md6GQGNcZc_cmWPBStTq4RNCnGTzF-4usF5wFylQ-xZQej-SD6prx8Yl89O | ||
533 | 15 | |||
534 | 16 | AcLBXAQAAQoABgUCWBBOJAAKCRAVoE002xqmOKaRD/0cEKWb2nbwhk+BTgOrYZHrwzjbIWTZznDh | ||
535 | 17 | xCD6JWF/yr9br1vEmRz2zCNPPWZgFH9HaJ+mT/lktWIs7VVMIdwMDWYOR8P9rdWM/Jx6iyB3z0OI | ||
536 | 18 | YO31zaU4XLyolv/YSj/nFXMMD+jIeE4l8j4AtCSJwd7ZS9Jz8F/RfrD8EpG0JU1F55lq8MC0mjZ4 | ||
537 | 19 | ul5ws8k9UiP8nA5IAG30NvvReiUGYqtdkO43eQmy88WABL95MbFsbfEk4/VduG0Gt3y/T8vDDcF6 | ||
538 | 20 | NJEm8L+O9IXnPBAje0Ve0NX3YtOE3CDTkYRKR7xFFJq2cJVCSvf9CsorREg4KyfagIdMKDSa5Tiq | ||
539 | 21 | FzoAJTfI0ltq5cAnLImtxFKulJ+AnGUNMLrKFr1H0FGtqTZBfs/PcIxy0qY0YDXSF4/9F2PUBdQS | ||
540 | 22 | tSmN6pT9t1FCGy2Rf5n3QV4e0R2JzS6Kx+vdbPMYqhssQosLU5GwlWj8UbevtphAGf8u8nLBDYWs | ||
541 | 23 | MNIPi0IrPmzIewZBD05A6a8T+oHZ9dIg5SAnJ4gmz0sCzNDKarvYqLpcU1rZzu78/UypbHXDvBAt | ||
542 | 24 | gnxYpD6WHR2aHSeyx3WvOp130jFco2/55M0RTEm50isO1uv2DqTn9ULkBdCrG/zOqEmZgY18ds3P | ||
543 | 25 | yTaAbaIAqUe7scpAHY0a31tfnXq8cRyEX03e9g2Mrg== | ||
544 | diff --git a/tests/lib/prepare-all.sh b/tests/lib/prepare-all.sh | |||
545 | 0 | new file mode 100644 | 26 | new file mode 100644 |
546 | index 0000000..38bfb5b | |||
547 | --- /dev/null | |||
548 | +++ b/tests/lib/prepare-all.sh | |||
549 | @@ -0,0 +1,25 @@ | |||
550 | 1 | #!/bin/sh | ||
551 | 2 | |||
552 | 3 | # We don't have to build a snap when we should use one from a | ||
553 | 4 | # channel | ||
554 | 5 | if [ -n "$SNAP_CHANNEL" ] ; then | ||
555 | 6 | exit 0 | ||
556 | 7 | fi | ||
557 | 8 | |||
558 | 9 | # Setup classic snap and build the modem-manager snap in there | ||
559 | 10 | snap install --devmode --beta classic | ||
560 | 11 | cat <<-EOF > /home/test/build-snap.sh | ||
561 | 12 | #!/bin/sh | ||
562 | 13 | set -ex | ||
563 | 14 | apt update | ||
564 | 15 | apt install -y --force-yes snapcraft | ||
565 | 16 | cd /home/modem-manager | ||
566 | 17 | snapcraft clean | ||
567 | 18 | snapcraft | ||
568 | 19 | EOF | ||
569 | 20 | chmod +x /home/test/build-snap.sh | ||
570 | 21 | sudo classic /home/test/build-snap.sh | ||
571 | 22 | snap remove classic | ||
572 | 23 | |||
573 | 24 | # Make sure we have a snap build | ||
574 | 25 | test -e /home/modem-manager/modem-manager_*_amd64.snap | ||
575 | diff --git a/tests/lib/prepare.sh b/tests/lib/prepare.sh | |||
576 | 0 | new file mode 100644 | 26 | new file mode 100644 |
577 | index 0000000..8956644 | |||
578 | --- /dev/null | |||
579 | +++ b/tests/lib/prepare.sh | |||
580 | @@ -0,0 +1,49 @@ | |||
581 | 1 | #!/bin/sh | ||
582 | 2 | |||
583 | 3 | echo "Wait for firstboot change to be ready" | ||
584 | 4 | while ! snap changes | grep -q "Done"; do | ||
585 | 5 | snap changes || true | ||
586 | 6 | snap change 1 || true | ||
587 | 7 | sleep 1 | ||
588 | 8 | done | ||
589 | 9 | |||
590 | 10 | echo "Ensure fundamental snaps are still present" | ||
591 | 11 | . $TESTSLIB/snap-names.sh | ||
592 | 12 | for name in $gadget_name $kernel_name $core_name; do | ||
593 | 13 | if ! snap list | grep -q $name ; then | ||
594 | 14 | echo "Not all fundamental snaps are available, all-snap image not valid" | ||
595 | 15 | echo "Currently installed snaps:" | ||
596 | 16 | snap list | ||
597 | 17 | exit 1 | ||
598 | 18 | fi | ||
599 | 19 | done | ||
600 | 20 | |||
601 | 21 | echo "Kernel has a store revision" | ||
602 | 22 | snap list | grep ^${kernel_name} | grep -E " [0-9]+\s+canonical" | ||
603 | 23 | |||
604 | 24 | # If we don't install modem-manager here we get a system | ||
605 | 25 | # without any network connectivity after reboot. | ||
606 | 26 | if [ -n "$SNAP_CHANNEL" ] ; then | ||
607 | 27 | # Don't reinstall if we have it installed already | ||
608 | 28 | if ! snap list | grep modem-manager ; then | ||
609 | 29 | snap install --$SNAP_CHANNEL modem-manager | ||
610 | 30 | fi | ||
611 | 31 | else | ||
612 | 32 | # Install prebuilt modem-manager snap | ||
613 | 33 | snap install --dangerous /home/modem-manager/modem-manager_*_amd64.snap | ||
614 | 34 | # As we have a snap which we build locally its unasserted and therefore | ||
615 | 35 | # we don't have any snap-declarations in place and need to manually | ||
616 | 36 | # connect all plugs. | ||
617 | 37 | sudo snap connect modem-manager:mmcli modem-manager:service | ||
618 | 38 | fi | ||
619 | 39 | |||
620 | 40 | # Snapshot of the current snapd state for a later restore | ||
621 | 41 | if [ ! -f $SPREAD_PATH/snapd-state.tar.gz ] ; then | ||
622 | 42 | systemctl stop snapd.service snapd.socket | ||
623 | 43 | tar czf $SPREAD_PATH/snapd-state.tar.gz /var/lib/snapd /etc/netplan | ||
624 | 44 | systemctl start snapd.socket | ||
625 | 45 | fi | ||
626 | 46 | |||
627 | 47 | # For debugging dump all snaps and connected slots/plugs | ||
628 | 48 | snap list | ||
629 | 49 | snap interfaces | ||
630 | diff --git a/tests/lib/restore-each.sh b/tests/lib/restore-each.sh | |||
631 | 0 | new file mode 100644 | 50 | new file mode 100644 |
632 | index 0000000..a7662cc | |||
633 | --- /dev/null | |||
634 | +++ b/tests/lib/restore-each.sh | |||
635 | @@ -0,0 +1,31 @@ | |||
636 | 1 | #!/bin/sh | ||
637 | 2 | |||
638 | 3 | . $TESTSLIB/snap-names.sh | ||
639 | 4 | |||
640 | 5 | # Remove all snaps not being the core, gadget, kernel or snap we're testing | ||
641 | 6 | for snap in /snap/*; do | ||
642 | 7 | snap="${snap:6}" | ||
643 | 8 | case "$snap" in | ||
644 | 9 | "bin" | "$gadget_name" | "$kernel_name" | "$core_name" | "$SNAP_NAME" ) | ||
645 | 10 | ;; | ||
646 | 11 | *) | ||
647 | 12 | snap remove "$snap" | ||
648 | 13 | ;; | ||
649 | 14 | esac | ||
650 | 15 | done | ||
651 | 16 | |||
652 | 17 | # Cleanup all configuration files from ModemManager so that we have | ||
653 | 18 | # a fresh start for the next test | ||
654 | 19 | rm -rf /var/snap/modem-manager/common/* | ||
655 | 20 | rm -rf /var/snap/modem-manager/current/* | ||
656 | 21 | systemctl stop snap.modem-manager.modemmanager | ||
657 | 22 | |||
658 | 23 | # Ensure we have the same state for snapd as we had before | ||
659 | 24 | systemctl stop snapd.service snapd.socket | ||
660 | 25 | rm -rf /var/lib/snapd/* | ||
661 | 26 | $(cd / && tar xzf $SPREAD_PATH/snapd-state.tar.gz) | ||
662 | 27 | rm -rf /root/.snap | ||
663 | 28 | systemctl start snapd.service snapd.socket | ||
664 | 29 | |||
665 | 30 | # Bringup ModemManager again now that the system is restored | ||
666 | 31 | systemctl start snap.modem-manager.modemmanager | ||
667 | diff --git a/tests/lib/snap-names.sh b/tests/lib/snap-names.sh | |||
668 | 0 | new file mode 100644 | 32 | new file mode 100644 |
669 | index 0000000..71c9628 | |||
670 | --- /dev/null | |||
671 | +++ b/tests/lib/snap-names.sh | |||
672 | @@ -0,0 +1,7 @@ | |||
673 | 1 | #!/bin/sh | ||
674 | 2 | gadget_name=$(snap list | sed -n 's/^\(pc\|pi[23]\|dragonboard\) .*/\1/p') | ||
675 | 3 | kernel_name=$gadget_name-kernel | ||
676 | 4 | core_name=$(snap list | awk '/^(ubuntu-)?core / {print $1; exit}') | ||
677 | 5 | if [ "$kernel_name" = "pi3-kernel" ] ; then | ||
678 | 6 | kernel_name=pi2-kernel | ||
679 | 7 | fi | ||
680 | diff --git a/tests/lib/utilities.sh b/tests/lib/utilities.sh | |||
681 | 0 | new file mode 100644 | 8 | new file mode 100644 |
682 | index 0000000..aaf51f0 | |||
683 | --- /dev/null | |||
684 | +++ b/tests/lib/utilities.sh | |||
685 | @@ -0,0 +1,14 @@ | |||
686 | 1 | #!/bin/sh | ||
687 | 2 | |||
688 | 3 | wait_for_modem_manager() { | ||
689 | 4 | while ! systemctl status snap.modem-manager.modemmanager ; do | ||
690 | 5 | sleep 1 | ||
691 | 6 | done | ||
692 | 7 | sleep 1 | ||
693 | 8 | } | ||
694 | 9 | |||
695 | 10 | stop_after_first_reboot() { | ||
696 | 11 | if [ $SPREAD_REBOOT -eq 1 ] ; then | ||
697 | 12 | exit 0 | ||
698 | 13 | fi | ||
699 | 14 | } | ||
700 | diff --git a/tests/main/installation/task.yaml b/tests/main/installation/task.yaml | |||
701 | 0 | new file mode 100644 | 15 | new file mode 100644 |
702 | index 0000000..ae90c54 | |||
703 | --- /dev/null | |||
704 | +++ b/tests/main/installation/task.yaml | |||
705 | @@ -0,0 +1,13 @@ | |||
706 | 1 | summary: Test modem-manager snap installation was successful | ||
707 | 2 | |||
708 | 3 | execute: | | ||
709 | 4 | . $TESTSLIB/utilities.sh | ||
710 | 5 | |||
711 | 6 | # Service should be up an running | ||
712 | 7 | wait_for_modem_manager | ||
713 | 8 | |||
714 | 9 | # .. and mmcli should be able to reach ModemManager | ||
715 | 10 | /snap/bin/modem-manager.mmcli -L | ||
716 | 11 | |||
717 | 12 | # Ensure all necessary plugs/slots are connected | ||
718 | 13 | snap interfaces | grep -Pzq "modem-manager:service +modem-manager:mmcli" | ||
719 | diff --git a/tests/main/network-manager-autoconn/task.yaml b/tests/main/network-manager-autoconn/task.yaml | |||
720 | 0 | new file mode 100644 | 14 | new file mode 100644 |
721 | index 0000000..7092b7f | |||
722 | --- /dev/null | |||
723 | +++ b/tests/main/network-manager-autoconn/task.yaml | |||
724 | @@ -0,0 +1,13 @@ | |||
725 | 1 | summary: Test modem-manager snap installation was successful | ||
726 | 2 | |||
727 | 3 | execute: | | ||
728 | 4 | . $TESTSLIB/utilities.sh | ||
729 | 5 | |||
730 | 6 | # Service should be up an running | ||
731 | 7 | wait_for_modem_manager | ||
732 | 8 | |||
733 | 9 | snap install network-manager | ||
734 | 10 | |||
735 | 11 | # Ensure all necessary plugs/slots are connected | ||
736 | 12 | snap interfaces | grep -Ezq "modem-manager:service .*modem-manager:mmcli" | ||
737 | 13 | snap interfaces | grep -Ezq "modem-manager:service .*network-manager:modem-manager" |
PLEASE DO NOT MERGE YET (not until A release)