diff options
-rw-r--r-- | meta/lib/oeqa/selftest/wic.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/meta/lib/oeqa/selftest/wic.py b/meta/lib/oeqa/selftest/wic.py index 417ba3d26f..0144d77a6f 100644 --- a/meta/lib/oeqa/selftest/wic.py +++ b/meta/lib/oeqa/selftest/wic.py | |||
@@ -339,6 +339,110 @@ class Wic(oeSelfTest): | |||
339 | self.assertEqual(0, status) | 339 | self.assertEqual(0, status) |
340 | self.assertEqual(1, len(glob(self.resultdir + "%(wks)s-*.direct" % bbvars))) | 340 | self.assertEqual(1, len(glob(self.resultdir + "%(wks)s-*.direct" % bbvars))) |
341 | 341 | ||
342 | def test_exclude_path(self): | ||
343 | """Test --exclude-path wks option.""" | ||
344 | |||
345 | oldpath = os.environ['PATH'] | ||
346 | os.environ['PATH'] = get_bb_var("PATH", "wic-tools") | ||
347 | |||
348 | try: | ||
349 | wks_file = 'temp.wks' | ||
350 | with open(wks_file, 'w') as wks: | ||
351 | rootfs_dir = get_bb_var('IMAGE_ROOTFS', 'core-image-minimal') | ||
352 | wks.write("""part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --exclude-path usr | ||
353 | part /usr --source rootfs --ondisk mmcblk0 --fstype=ext4 --rootfs-dir %s/usr | ||
354 | part /etc --source rootfs --ondisk mmcblk0 --fstype=ext4 --exclude-path bin/ --rootfs-dir %s/usr""" | ||
355 | % (rootfs_dir, rootfs_dir)) | ||
356 | self.assertEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \ | ||
357 | % (wks_file, self.resultdir)).status) | ||
358 | |||
359 | os.remove(wks_file) | ||
360 | wicout = glob(self.resultdir + "%s-*direct" % 'temp') | ||
361 | self.assertEqual(1, len(wicout)) | ||
362 | |||
363 | wicimg = wicout[0] | ||
364 | |||
365 | # verify partition size with wic | ||
366 | res = runCmd("parted -m %s unit b p 2>/dev/null" % wicimg) | ||
367 | self.assertEqual(0, res.status) | ||
368 | |||
369 | # parse parted output which looks like this: | ||
370 | # BYT;\n | ||
371 | # /var/tmp/wic/build/tmpfwvjjkf_-201611101222-hda.direct:200MiB:file:512:512:msdos::;\n | ||
372 | # 1:0.00MiB:200MiB:200MiB:ext4::;\n | ||
373 | partlns = res.output.splitlines()[2:] | ||
374 | |||
375 | self.assertEqual(3, len(partlns)) | ||
376 | |||
377 | for part in [1, 2, 3]: | ||
378 | part_file = os.path.join(self.resultdir, "selftest_img.part%d" % part) | ||
379 | partln = partlns[part-1].split(":") | ||
380 | self.assertEqual(7, len(partln)) | ||
381 | start = int(partln[1].rstrip("B")) / 512 | ||
382 | length = int(partln[3].rstrip("B")) / 512 | ||
383 | self.assertEqual(0, runCmd("dd if=%s of=%s skip=%d count=%d" % | ||
384 | (wicimg, part_file, start, length)).status) | ||
385 | |||
386 | # Test partition 1, should contain the normal root directories, except | ||
387 | # /usr. | ||
388 | res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % os.path.join(self.resultdir, "selftest_img.part1")) | ||
389 | self.assertEqual(0, res.status) | ||
390 | files = [line.split('/')[5] for line in res.output.split('\n')] | ||
391 | self.assertIn("etc", files) | ||
392 | self.assertNotIn("usr", files) | ||
393 | |||
394 | # Partition 2, should contain common directories for /usr, not root | ||
395 | # directories. | ||
396 | res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % os.path.join(self.resultdir, "selftest_img.part2")) | ||
397 | self.assertEqual(0, res.status) | ||
398 | files = [line.split('/')[5] for line in res.output.split('\n')] | ||
399 | self.assertNotIn("etc", files) | ||
400 | self.assertNotIn("usr", files) | ||
401 | self.assertIn("share", files) | ||
402 | |||
403 | # Partition 3, should contain the same as partition 2, including the bin | ||
404 | # directory, but not the files inside it. | ||
405 | res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % os.path.join(self.resultdir, "selftest_img.part3")) | ||
406 | self.assertEqual(0, res.status) | ||
407 | files = [line.split('/')[5] for line in res.output.split('\n')] | ||
408 | self.assertNotIn("etc", files) | ||
409 | self.assertNotIn("usr", files) | ||
410 | self.assertIn("share", files) | ||
411 | self.assertIn("bin", files) | ||
412 | res = runCmd("debugfs -R 'ls -p bin' %s 2>/dev/null" % os.path.join(self.resultdir, "selftest_img.part3")) | ||
413 | self.assertEqual(0, res.status) | ||
414 | files = [line.split('/')[5] for line in res.output.split('\n')] | ||
415 | self.assertIn(".", files) | ||
416 | self.assertIn("..", files) | ||
417 | self.assertEqual(2, len(files)) | ||
418 | |||
419 | for part in [1, 2, 3]: | ||
420 | part_file = os.path.join(self.resultdir, "selftest_img.part%d" % part) | ||
421 | os.remove(part_file) | ||
422 | |||
423 | finally: | ||
424 | os.environ['PATH'] = oldpath | ||
425 | |||
426 | def test_exclude_path_errors(self): | ||
427 | """Test --exclude-path wks option error handling.""" | ||
428 | wks_file = 'temp.wks' | ||
429 | |||
430 | rootfs_dir = get_bb_var('IMAGE_ROOTFS', 'core-image-minimal') | ||
431 | |||
432 | # Absolute argument. | ||
433 | with open(wks_file, 'w') as wks: | ||
434 | wks.write("part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --exclude-path /usr") | ||
435 | self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \ | ||
436 | % (wks_file, self.resultdir), ignore_status=True).status) | ||
437 | os.remove(wks_file) | ||
438 | |||
439 | # Argument pointing to parent directory. | ||
440 | with open(wks_file, 'w') as wks: | ||
441 | wks.write("part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --exclude-path ././..") | ||
442 | self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \ | ||
443 | % (wks_file, self.resultdir), ignore_status=True).status) | ||
444 | os.remove(wks_file) | ||
445 | |||
342 | @testcase(1496) | 446 | @testcase(1496) |
343 | def test_bmap_short(self): | 447 | def test_bmap_short(self): |
344 | """Test generation of .bmap file -m option""" | 448 | """Test generation of .bmap file -m option""" |