diff options
| author | Maciej Borzecki <maciej.borzecki@rndity.com> | 2017-03-21 12:35:05 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-03-22 11:35:22 +0000 |
| commit | 19090446da4184ef5cdd442c5c640593e1bc46e1 (patch) | |
| tree | 2b15389f26c452b8267d9dfbd8ead01a11c60b86 | |
| parent | 17fe3eb453a4fda54eb320e3c69a3dbf3f306e87 (diff) | |
| download | poky-19090446da4184ef5cdd442c5c640593e1bc46e1.tar.gz | |
wic: selftest: add tests for --fixed-size partition flags
wic has a new flag for setting a fixed parition size --fixed-size. Add
tests that verify if partition is indeed sized properly and that errors
are signaled when there is not enough space to fit partition data.
(From OE-Core rev: 84c2184546779ece3eb23c5628e4c9d177568043)
Signed-off-by: Maciej Borzecki <maciej.borzecki@rndity.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | meta/lib/oeqa/selftest/wic.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/meta/lib/oeqa/selftest/wic.py b/meta/lib/oeqa/selftest/wic.py index 776e44aac4..4aacd86085 100644 --- a/meta/lib/oeqa/selftest/wic.py +++ b/meta/lib/oeqa/selftest/wic.py | |||
| @@ -29,6 +29,7 @@ import unittest | |||
| 29 | from glob import glob | 29 | from glob import glob |
| 30 | from shutil import rmtree | 30 | from shutil import rmtree |
| 31 | from functools import wraps, lru_cache | 31 | from functools import wraps, lru_cache |
| 32 | from tempfile import NamedTemporaryFile | ||
| 32 | 33 | ||
| 33 | from oeqa.selftest.base import oeSelfTest | 34 | from oeqa.selftest.base import oeSelfTest |
| 34 | from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars, runqemu | 35 | from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars, runqemu |
| @@ -64,10 +65,13 @@ class Wic(oeSelfTest): | |||
| 64 | 65 | ||
| 65 | resultdir = "/var/tmp/wic.oe-selftest/" | 66 | resultdir = "/var/tmp/wic.oe-selftest/" |
| 66 | image_is_ready = False | 67 | image_is_ready = False |
| 68 | native_sysroot = None | ||
| 67 | wicenv_cache = {} | 69 | wicenv_cache = {} |
| 68 | 70 | ||
| 69 | def setUpLocal(self): | 71 | def setUpLocal(self): |
| 70 | """This code is executed before each test method.""" | 72 | """This code is executed before each test method.""" |
| 73 | if not self.native_sysroot: | ||
| 74 | Wic.native_sysroot = get_bb_var('STAGING_DIR_NATIVE', 'wic-tools') | ||
| 71 | 75 | ||
| 72 | # Do this here instead of in setUpClass as the base setUp does some | 76 | # Do this here instead of in setUpClass as the base setUp does some |
| 73 | # clean up which can result in the native tools built earlier in | 77 | # clean up which can result in the native tools built earlier in |
| @@ -618,3 +622,62 @@ part /etc --source rootfs --ondisk mmcblk0 --fstype=ext4 --exclude-path bin/ --r | |||
| 618 | status, output = qemu.run_serial(cmd) | 622 | status, output = qemu.run_serial(cmd) |
| 619 | self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output)) | 623 | self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output)) |
| 620 | self.assertEqual(output, '3') | 624 | self.assertEqual(output, '3') |
| 625 | |||
| 626 | @staticmethod | ||
| 627 | def _make_fixed_size_wks(size): | ||
| 628 | """ | ||
| 629 | Create a wks of an image with a single partition. Size of the partition is set | ||
| 630 | using --fixed-size flag. Returns a tuple: (path to wks file, wks image name) | ||
| 631 | """ | ||
| 632 | with NamedTemporaryFile("w", suffix=".wks", delete=False) as tempf: | ||
| 633 | wkspath = tempf.name | ||
| 634 | tempf.write("part " \ | ||
| 635 | "--source rootfs --ondisk hda --align 4 --fixed-size %d " | ||
| 636 | "--fstype=ext4\n" % size) | ||
| 637 | wksname = os.path.splitext(os.path.basename(wkspath))[0] | ||
| 638 | |||
| 639 | return wkspath, wksname | ||
| 640 | |||
| 641 | def test_fixed_size(self): | ||
| 642 | """ | ||
| 643 | Test creation of a simple image with partition size controlled through | ||
| 644 | --fixed-size flag | ||
| 645 | """ | ||
| 646 | wkspath, wksname = Wic._make_fixed_size_wks(200) | ||
| 647 | |||
| 648 | self.assertEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \ | ||
| 649 | % (wkspath, self.resultdir)).status) | ||
| 650 | os.remove(wkspath) | ||
| 651 | wicout = glob(self.resultdir + "%s-*direct" % wksname) | ||
| 652 | self.assertEqual(1, len(wicout)) | ||
| 653 | |||
| 654 | wicimg = wicout[0] | ||
| 655 | |||
| 656 | # verify partition size with wic | ||
| 657 | res = runCmd("parted -m %s unit mib p 2>/dev/null" % wicimg, | ||
| 658 | ignore_status=True, | ||
| 659 | native_sysroot=self.native_sysroot) | ||
| 660 | self.assertEqual(0, res.status) | ||
| 661 | |||
| 662 | # parse parted output which looks like this: | ||
| 663 | # BYT;\n | ||
| 664 | # /var/tmp/wic/build/tmpfwvjjkf_-201611101222-hda.direct:200MiB:file:512:512:msdos::;\n | ||
| 665 | # 1:0.00MiB:200MiB:200MiB:ext4::;\n | ||
| 666 | partlns = res.output.splitlines()[2:] | ||
| 667 | |||
| 668 | self.assertEqual(1, len(partlns)) | ||
| 669 | self.assertEqual("1:0.00MiB:200MiB:200MiB:ext4::;", partlns[0]) | ||
| 670 | |||
| 671 | def test_fixed_size_error(self): | ||
| 672 | """ | ||
| 673 | Test creation of a simple image with partition size controlled through | ||
| 674 | --fixed-size flag. The size of partition is intentionally set to 1MiB | ||
| 675 | in order to trigger an error in wic. | ||
| 676 | """ | ||
| 677 | wkspath, wksname = Wic._make_fixed_size_wks(1) | ||
| 678 | |||
| 679 | self.assertEqual(1, runCmd("wic create %s -e core-image-minimal -o %s" \ | ||
| 680 | % (wkspath, self.resultdir), ignore_status=True).status) | ||
| 681 | os.remove(wkspath) | ||
| 682 | wicout = glob(self.resultdir + "%s-*direct" % wksname) | ||
| 683 | self.assertEqual(0, len(wicout)) | ||
