diff options
author | Patrick Vacek <patrickvacek@gmail.com> | 2018-03-02 09:39:39 +0100 |
---|---|---|
committer | Patrick Vacek <patrickvacek@gmail.com> | 2018-03-02 09:39:39 +0100 |
commit | 81b2fa6bf0b5d7d68dc81c83ecc1ba15cba2ac9b (patch) | |
tree | 994b32a2540546371993cf8a1c68b4f8b4962f1b | |
parent | 97ea268738bbacbe383d20f0ae9b1df7aff2b58a (diff) | |
download | meta-updater-81b2fa6bf0b5d7d68dc81c83ecc1ba15cba2ac9b.tar.gz |
Add a basic raspberry pi test.test/better-oe-selftest
There's not much we can do, since booting the device via a test is not
practical. Still, it's useful to make sure that we can build the image.
If trying to build the image in an environment designed for qemu, this
takes some trickery to set things up just right.
Also consistently set up layers before setting the MACHINE, since the
sanity checker sometimes complains otherwise.
-rw-r--r-- | lib/oeqa/selftest/cases/updater.py | 114 |
1 files changed, 98 insertions, 16 deletions
diff --git a/lib/oeqa/selftest/cases/updater.py b/lib/oeqa/selftest/cases/updater.py index a9c3206..adb4061 100644 --- a/lib/oeqa/selftest/cases/updater.py +++ b/lib/oeqa/selftest/cases/updater.py | |||
@@ -64,7 +64,6 @@ class GeneralTests(OESelftestTestCase): | |||
64 | "Java not found. Do you have a JDK installed on your host machine?") | 64 | "Java not found. Do you have a JDK installed on your host machine?") |
65 | 65 | ||
66 | def test_add_package(self): | 66 | def test_add_package(self): |
67 | print('') | ||
68 | deploydir = get_bb_var('DEPLOY_DIR_IMAGE') | 67 | deploydir = get_bb_var('DEPLOY_DIR_IMAGE') |
69 | imagename = get_bb_var('IMAGE_LINK_NAME', 'core-image-minimal') | 68 | imagename = get_bb_var('IMAGE_LINK_NAME', 'core-image-minimal') |
70 | image_path = deploydir + '/' + imagename + '.otaimg' | 69 | image_path = deploydir + '/' + imagename + '.otaimg' |
@@ -137,18 +136,20 @@ class AktualizrToolsTests(OESelftestTestCase): | |||
137 | class AutoProvTests(OESelftestTestCase): | 136 | class AutoProvTests(OESelftestTestCase): |
138 | 137 | ||
139 | def setUpLocal(self): | 138 | def setUpLocal(self): |
140 | self.append_config('MACHINE = "qemux86-64"') | ||
141 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-auto-prov "') | ||
142 | layer = "meta-updater-qemux86-64" | 139 | layer = "meta-updater-qemux86-64" |
143 | result = runCmd('bitbake-layers show-layers') | 140 | result = runCmd('bitbake-layers show-layers') |
144 | if re.search(layer, result.output) is None: | 141 | if re.search(layer, result.output) is None: |
145 | # This is a bit of a hack but I can't see a better option. | 142 | # Assume the directory layout for finding other layers. We could also |
143 | # make assumptions by using 'show-layers', but either way, if the | ||
144 | # layers we need aren't where we expect them, we are out of like. | ||
146 | path = os.path.abspath(os.path.dirname(__file__)) | 145 | path = os.path.abspath(os.path.dirname(__file__)) |
147 | metadir = path + "/../../../../../" | 146 | metadir = path + "/../../../../../" |
148 | self.meta_qemu = metadir + layer | 147 | self.meta_qemu = metadir + layer |
149 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 148 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
150 | else: | 149 | else: |
151 | self.meta_qemu = None | 150 | self.meta_qemu = None |
151 | self.append_config('MACHINE = "qemux86-64"') | ||
152 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-auto-prov "') | ||
152 | self.qemu, self.s = qemu_launch(machine='qemux86-64') | 153 | self.qemu, self.s = qemu_launch(machine='qemux86-64') |
153 | 154 | ||
154 | def tearDownLocal(self): | 155 | def tearDownLocal(self): |
@@ -184,16 +185,91 @@ class AutoProvTests(OESelftestTestCase): | |||
184 | verifyProvisioned(self, machine) | 185 | verifyProvisioned(self, machine) |
185 | 186 | ||
186 | 187 | ||
187 | class GrubTests(OESelftestTestCase): | 188 | class RpiTests(OESelftestTestCase): |
188 | 189 | ||
189 | def setUpLocal(self): | 190 | def setUpLocal(self): |
190 | self.append_config('MACHINE = "intel-corei7-64"') | 191 | # Add layers before changing the machine type, otherwise the sanity |
191 | self.append_config('OSTREE_BOOTLOADER = "grub"') | 192 | # checker complains loudly. |
193 | layer_python = "meta-openembedded/meta-python" | ||
194 | layer_rpi = "meta-raspberrypi" | ||
195 | layer_upd_rpi = "meta-updater-raspberrypi" | ||
196 | result = runCmd('bitbake-layers show-layers') | ||
197 | # Assume the directory layout for finding other layers. We could also | ||
198 | # make assumptions by using 'show-layers', but either way, if the | ||
199 | # layers we need aren't where we expect them, we are out of like. | ||
200 | path = os.path.abspath(os.path.dirname(__file__)) | ||
201 | metadir = path + "/../../../../../" | ||
202 | if re.search(layer_python, result.output) is None: | ||
203 | self.meta_python = metadir + layer_python | ||
204 | runCmd('bitbake-layers add-layer "%s"' % self.meta_python) | ||
205 | else: | ||
206 | self.meta_python = None | ||
207 | if re.search(layer_rpi, result.output) is None: | ||
208 | self.meta_rpi = metadir + layer_rpi | ||
209 | runCmd('bitbake-layers add-layer "%s"' % self.meta_rpi) | ||
210 | else: | ||
211 | self.meta_rpi = None | ||
212 | if re.search(layer_upd_rpi, result.output) is None: | ||
213 | self.meta_upd_rpi = metadir + layer_upd_rpi | ||
214 | runCmd('bitbake-layers add-layer "%s"' % self.meta_upd_rpi) | ||
215 | else: | ||
216 | self.meta_upd_rpi = None | ||
217 | |||
218 | # This is trickier that I would've thought. The fundamental problem is | ||
219 | # that the qemu layer changes the u-boot file extension to .rom, but | ||
220 | # raspberrypi still expects .bin. To prevent this, the qemu layer must | ||
221 | # be temporarily removed if it is present. It has to be removed by name | ||
222 | # without the complete path, but to add it back when we are done, we | ||
223 | # need the full path. | ||
224 | p = re.compile(r'meta-updater-qemux86-64\s*(\S*meta-updater-qemux86-64)\s') | ||
225 | m = p.search(result.output) | ||
226 | if m and m.lastindex > 0: | ||
227 | self.meta_qemu = m.group(1) | ||
228 | runCmd('bitbake-layers remove-layer meta-updater-qemux86-64') | ||
229 | else: | ||
230 | self.meta_qemu = None | ||
231 | |||
232 | self.append_config('MACHINE = "raspberrypi3"') | ||
192 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-auto-prov "') | 233 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-auto-prov "') |
234 | |||
235 | def tearDownLocal(self): | ||
236 | if self.meta_qemu: | ||
237 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu, ignore_status=True) | ||
238 | if self.meta_upd_rpi: | ||
239 | runCmd('bitbake-layers remove-layer "%s"' % self.meta_upd_rpi, ignore_status=True) | ||
240 | if self.meta_rpi: | ||
241 | runCmd('bitbake-layers remove-layer "%s"' % self.meta_rpi, ignore_status=True) | ||
242 | if self.meta_python: | ||
243 | runCmd('bitbake-layers remove-layer "%s"' % self.meta_python, ignore_status=True) | ||
244 | |||
245 | def test_rpi(self): | ||
246 | logger = logging.getLogger("selftest") | ||
247 | logger.info('Running bitbake to build rpi-basic-image') | ||
248 | self.append_config('SOTA_CLIENT_PROV = "aktualizr-auto-prov"') | ||
249 | bitbake('rpi-basic-image') | ||
250 | credentials = get_bb_var('SOTA_PACKED_CREDENTIALS') | ||
251 | # Skip the test if the variable SOTA_PACKED_CREDENTIALS is not set. | ||
252 | if credentials is None: | ||
253 | raise unittest.SkipTest("Variable 'SOTA_PACKED_CREDENTIALS' not set.") | ||
254 | # Check if the file exists. | ||
255 | self.assertTrue(os.path.isfile(credentials), "File %s does not exist" % credentials) | ||
256 | deploydir = get_bb_var('DEPLOY_DIR_IMAGE') | ||
257 | imagename = get_bb_var('IMAGE_LINK_NAME', 'rpi-basic-image') | ||
258 | # Check if the credentials are included in the output image. | ||
259 | result = runCmd('tar -jtvf %s/%s.tar.bz2 | grep sota_provisioning_credentials.zip' % | ||
260 | (deploydir, imagename), ignore_status=True) | ||
261 | self.assertEqual(result.status, 0, "Status not equal to 0. output: %s" % result.output) | ||
262 | |||
263 | |||
264 | class GrubTests(OESelftestTestCase): | ||
265 | |||
266 | def setUpLocal(self): | ||
193 | layer_intel = "meta-intel" | 267 | layer_intel = "meta-intel" |
194 | layer_minnow = "meta-updater-minnowboard" | 268 | layer_minnow = "meta-updater-minnowboard" |
195 | result = runCmd('bitbake-layers show-layers') | 269 | result = runCmd('bitbake-layers show-layers') |
196 | # This is a bit of a hack but I can't see a better option. | 270 | # Assume the directory layout for finding other layers. We could also |
271 | # make assumptions by using 'show-layers', but either way, if the | ||
272 | # layers we need aren't where we expect them, we are out of like. | ||
197 | path = os.path.abspath(os.path.dirname(__file__)) | 273 | path = os.path.abspath(os.path.dirname(__file__)) |
198 | metadir = path + "/../../../../../" | 274 | metadir = path + "/../../../../../" |
199 | if re.search(layer_intel, result.output) is None: | 275 | if re.search(layer_intel, result.output) is None: |
@@ -206,6 +282,9 @@ class GrubTests(OESelftestTestCase): | |||
206 | runCmd('bitbake-layers add-layer "%s"' % self.meta_minnow) | 282 | runCmd('bitbake-layers add-layer "%s"' % self.meta_minnow) |
207 | else: | 283 | else: |
208 | self.meta_minnow = None | 284 | self.meta_minnow = None |
285 | self.append_config('MACHINE = "intel-corei7-64"') | ||
286 | self.append_config('OSTREE_BOOTLOADER = "grub"') | ||
287 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-auto-prov "') | ||
209 | self.qemu, self.s = qemu_launch(efi=True, machine='intel-corei7-64') | 288 | self.qemu, self.s = qemu_launch(efi=True, machine='intel-corei7-64') |
210 | 289 | ||
211 | def tearDownLocal(self): | 290 | def tearDownLocal(self): |
@@ -219,7 +298,6 @@ class GrubTests(OESelftestTestCase): | |||
219 | return qemu_send_command(self.qemu.ssh_port, command) | 298 | return qemu_send_command(self.qemu.ssh_port, command) |
220 | 299 | ||
221 | def test_grub(self): | 300 | def test_grub(self): |
222 | print('') | ||
223 | print('Checking machine name (hostname) of device:') | 301 | print('Checking machine name (hostname) of device:') |
224 | stdout, stderr, retcode = self.qemu_command('hostname') | 302 | stdout, stderr, retcode = self.qemu_command('hostname') |
225 | self.assertEqual(retcode, 0, "Unable to check hostname. " + | 303 | self.assertEqual(retcode, 0, "Unable to check hostname. " + |
@@ -248,18 +326,20 @@ class GrubTests(OESelftestTestCase): | |||
248 | class ImplProvTests(OESelftestTestCase): | 326 | class ImplProvTests(OESelftestTestCase): |
249 | 327 | ||
250 | def setUpLocal(self): | 328 | def setUpLocal(self): |
251 | self.append_config('MACHINE = "qemux86-64"') | ||
252 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-implicit-prov "') | ||
253 | layer = "meta-updater-qemux86-64" | 329 | layer = "meta-updater-qemux86-64" |
254 | result = runCmd('bitbake-layers show-layers') | 330 | result = runCmd('bitbake-layers show-layers') |
255 | if re.search(layer, result.output) is None: | 331 | if re.search(layer, result.output) is None: |
256 | # This is a bit of a hack but I can't see a better option. | 332 | # Assume the directory layout for finding other layers. We could also |
333 | # make assumptions by using 'show-layers', but either way, if the | ||
334 | # layers we need aren't where we expect them, we are out of like. | ||
257 | path = os.path.abspath(os.path.dirname(__file__)) | 335 | path = os.path.abspath(os.path.dirname(__file__)) |
258 | metadir = path + "/../../../../../" | 336 | metadir = path + "/../../../../../" |
259 | self.meta_qemu = metadir + layer | 337 | self.meta_qemu = metadir + layer |
260 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 338 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
261 | else: | 339 | else: |
262 | self.meta_qemu = None | 340 | self.meta_qemu = None |
341 | self.append_config('MACHINE = "qemux86-64"') | ||
342 | self.append_config('SOTA_CLIENT_PROV = " aktualizr-implicit-prov "') | ||
263 | self.qemu, self.s = qemu_launch(machine='qemux86-64') | 343 | self.qemu, self.s = qemu_launch(machine='qemux86-64') |
264 | 344 | ||
265 | def tearDownLocal(self): | 345 | def tearDownLocal(self): |
@@ -315,19 +395,21 @@ class ImplProvTests(OESelftestTestCase): | |||
315 | class HsmTests(OESelftestTestCase): | 395 | class HsmTests(OESelftestTestCase): |
316 | 396 | ||
317 | def setUpLocal(self): | 397 | def setUpLocal(self): |
318 | self.append_config('MACHINE = "qemux86-64"') | ||
319 | self.append_config('SOTA_CLIENT_PROV = "aktualizr-hsm-prov"') | ||
320 | self.append_config('SOTA_CLIENT_FEATURES = "hsm"') | ||
321 | layer = "meta-updater-qemux86-64" | 398 | layer = "meta-updater-qemux86-64" |
322 | result = runCmd('bitbake-layers show-layers') | 399 | result = runCmd('bitbake-layers show-layers') |
323 | if re.search(layer, result.output) is None: | 400 | if re.search(layer, result.output) is None: |
324 | # This is a bit of a hack but I can't see a better option. | 401 | # Assume the directory layout for finding other layers. We could also |
402 | # make assumptions by using 'show-layers', but either way, if the | ||
403 | # layers we need aren't where we expect them, we are out of like. | ||
325 | path = os.path.abspath(os.path.dirname(__file__)) | 404 | path = os.path.abspath(os.path.dirname(__file__)) |
326 | metadir = path + "/../../../../../" | 405 | metadir = path + "/../../../../../" |
327 | self.meta_qemu = metadir + layer | 406 | self.meta_qemu = metadir + layer |
328 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) | 407 | runCmd('bitbake-layers add-layer "%s"' % self.meta_qemu) |
329 | else: | 408 | else: |
330 | self.meta_qemu = None | 409 | self.meta_qemu = None |
410 | self.append_config('MACHINE = "qemux86-64"') | ||
411 | self.append_config('SOTA_CLIENT_PROV = "aktualizr-hsm-prov"') | ||
412 | self.append_config('SOTA_CLIENT_FEATURES = "hsm"') | ||
331 | self.qemu, self.s = qemu_launch(machine='qemux86-64') | 413 | self.qemu, self.s = qemu_launch(machine='qemux86-64') |
332 | 414 | ||
333 | def tearDownLocal(self): | 415 | def tearDownLocal(self): |