wic: bugfixes & --fixed-size support, tests, oe-selftest: minor fixes
v5 cover wic: bugfixes & --fixed-size support, tests, oe-selftest: minor fixes
v5 of a patch series previously posted here [1].
Changes since v4:
* dropped wic: selftest: do not repeat core-image-minimal & rebased dependant patches
* minor formatting fix in wic: selftest: add tests for --fixed-size partition flags
[1]. http://lists.openembedded.org/pipermail/openembedded-core/2016-November/129103.html
Maciej Borzecki (6):
oe-selftest: enforce en_US.UTF-8 locale oeqa/utils/commands.py: allow use of binaries from native sysroot
wic: add --fixed-size wks option
wic: selftest: avoid COMPATIBLE_HOST issues
wic: selftest: do not assume bzImage kernel image
wic: selftest: add tests for --fixed-size partition flags
meta/lib/oeqa/selftest/wic.py | 123 +++++++++++++++++++++++++++++++-- meta/lib/oeqa/utils/commands.py | 9 ++- scripts/lib/wic/help.py | 14 +++- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 +++++++++-- scripts/lib/wic/partition.py | 88 ++++++++++++++--------- scripts/lib/wic/utils/partitionedfs.py | 2 +- scripts/oe-selftest | 3 + 8 files changed, 234 insertions(+), 48 deletions(-)
Signature · 1 line
2.5.0
PATCH v5 1/6 oe-selftest: enforce en_US.UTF-8 locale
Replicate bitbake and eforce en_US.UTF-8 locale so that ouptut of locale-aware tools remains stable.
--- scripts/oe-selftest | 3 +++ 1 file changed, 3 insertions(+)
scripts/oe-selftest +3 -0
@@ -468,6 +468,9 @@ def main(): sys.path.extend(layer_libdirs) imp.reload(oeqa.selftest) + # act like bitbake and enforce en_US.UTF-8 locale + os.environ["LC_ALL"] = "en_US.UTF-8" + if args.run_tests_by and len(args.run_tests_by) >= 2: valid_options = ['name', 'class', 'module', 'id', 'tag'] if args.run_tests_by[0] not in valid_options:
Signature · 1 line
2.5.0
PATCH v5 2/6 oeqa/utils/commands.py: allow use of binaries from native sysroot
In reply to Maciej BorzeckiTests may need to run a native tool that is not available on the host filesystem, but can be built using one of the *-native recipes. In such case, the tool will be available in native sysroot, and running in from that location will require adjustments to PATH.
runCmd() can now take a path to native sysroot as one of its arguments and setup PATH accordingly.
--- meta/lib/oeqa/utils/commands.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
meta/lib/oeqa/utils/commands.py +8 -1
@@ -97,9 +97,16 @@ class Result(object): pass -def runCmd(command, ignore_status=False, timeout=None, assert_error=True, **options): +def runCmd(command, ignore_status=False, timeout=None, assert_error=True, native_sysroot=None, **options): result = Result() + if native_sysroot: + extra_paths = "%s/sbin:%s/usr/sbin:%s/usr/bin" % \ + (native_sysroot, native_sysroot, native_sysroot) + nenv = dict(options.get('env', os.environ)) + nenv['PATH'] = extra_paths + ':' + nenv.get('PATH', '') + options['env'] = nenv + cmd = Command(command, timeout=timeout, **options) cmd.run()
Signature · 1 line
2.5.0
PATCH v5 3/6 wic: add --fixed-size wks option
In reply to Maciej BorzeckiAdded new option --fixed-size to wks. The option can be used to indicate the exact size of a partition. The option cannot be added together with --size, in which case an error will be raised. Other options that influence automatic partition size (--extra-space, --overhead-factor), if specifiec along with --fixed-size, will raise an error.
If it partition data is larger than the amount of space specified with --fixed-size option wic will raise an error.
--- scripts/lib/wic/help.py | 14 ++++-- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 ++++++++++++++-- scripts/lib/wic/partition.py | 88 +++++++++++++++++++++------------- scripts/lib/wic/utils/partitionedfs.py | 2 +- 5 files changed, 105 insertions(+), 42 deletions(-)
scripts/lib/wic/help.py +11 -3
@@ -646,6 +646,12 @@ DESCRIPTION not specified, the size is in MB. You do not need this option if you use --source. + --fixed-size: Exact partition size. Value format is the same + as for --size option. This option cannot be + specified along with --size. If partition data + is larger than --fixed-size and error will be + raised when assembling disk image. + --source: This option is a wic-specific option that names the source of the data that will populate the partition. The most common value for this option
@@ -719,13 +725,15 @@ DESCRIPTION space after the space filled by the content of the partition. The final size can go beyond the size specified by --size. - By default, 10MB. + By default, 10MB. This option cannot be used + with --fixed-size option. --overhead-factor: This option is specific to wic. The size of the partition is multiplied by this factor. It has to be greater than or - equal to 1. - The default value is 1.3. + equal to 1. The default value is 1.3. + This option cannot be used with --fixed-size + option. --part-type: This option is specific to wic. It specifies partition type GUID for GPT partitions.
scripts/lib/wic/imager/direct.py +1 -1
@@ -290,7 +290,7 @@ class DirectImageCreator(BaseImageCreator): self.bootimg_dir, self.kernel_dir, self.native_sysroot) - self.__image.add_partition(int(part.size), + self.__image.add_partition(part.disk_size, part.disk, part.mountpoint, part.source_file,
scripts/lib/wic/ksparser.py +37 -4
70 lines not on this page · raw message
scripts/lib/wic/partition.py +55 -33
161 lines not on this page · raw message
scripts/lib/wic/utils/partitionedfs.py +1 -1
@@ -209,7 +209,7 @@ class Image(): msger.debug("Assigned %s to %s%d, sectors range %d-%d size %d " "sectors (%d bytes)." \ % (part['mountpoint'], part['disk_name'], part['num'], - part['start'], part['start'] + part['size'] - 1, + part['start'], disk['offset'] - 1, part['size'], part['size'] * self.sector_size)) # Once all the partitions have been layed out, we can calculate the
Signature · 1 line
2.5.0
PATCH v5 4/6 wic: selftest: avoid COMPATIBLE_HOST issues
In reply to Maciej Borzeckiwic tests will unconditionally attempt to build syslinux and add configuration options that may not be compatible with current machine.
Resolve this by consulting HOST_ARCH (which defaults to TARGET_ARCH) and build recipes, add configuration options or skip tests conditionally.
A convenience decorator onlyForArch() can be used to skip test cases for specific architectures.
--- meta/lib/oeqa/selftest/wic.py | 51 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-)
meta/lib/oeqa/selftest/wic.py +47 -4
@@ -24,15 +24,33 @@ """Test cases for wic.""" import os +import unittest from glob import glob from shutil import rmtree +from functools import wraps from oeqa.selftest.base import oeSelfTest from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu from oeqa.utils.decorators import testcase +class onlyForArch(object): + + def __init__(self, *args): + self.archs = args + + def __call__(self,f): + @wraps(f) + def wrapped_f(*args, **kwargs): + arch = get_bb_var('HOST_ARCH', 'core-image-minimal') + if self.archs and arch not in self.archs : + raise unittest.SkipTest("Testcase arch dependency not met: %s" % arch) + return f(*args, **kwargs) + wrapped_f.__name__ = f.__name__ + return wrapped_f + + class Wic(oeSelfTest): """Wic test class."""
@@ -41,15 +59,22 @@ class Wic(oeSelfTest): def setUpLocal(self): """This code is executed before each test method.""" - self.write_config('IMAGE_FSTYPES += " hddimg"\n' - 'MACHINE_FEATURES_append = " efi"\n') + arch = get_bb_var('HOST_ARCH', 'core-image-minimal') + is_x86 = arch in ['i586', 'i686', 'x86_64'] + if is_x86: + self.write_config('IMAGE_FSTYPES += " hddimg"\n' \ + 'MACHINE_FEATURES_append = " efi"\n') # Do this here instead of in setUpClass as the base setUp does some # clean up which can result in the native tools built earlier in # setUpClass being unavailable. if not Wic.image_is_ready: - bitbake('syslinux syslinux-native parted-native gptfdisk-native ' - 'dosfstools-native mtools-native bmap-tools-native') + tools = 'parted-native gptfdisk-native ' \ + 'dosfstools-native mtools-native bmap-tools-native' + if is_x86: + tools += ' syslinux syslinux-native' + bitbake(tools) + bitbake('core-image-minimal') Wic.image_is_ready = True
@@ -71,6 +96,7 @@ class Wic(oeSelfTest): self.assertEqual(0, runCmd('wic list --help').status) @testcase(1211) + @onlyForArch('i586', 'i686', 'x86_64') def test_build_image_name(self): """Test wic create directdisk --image-name core-image-minimal""" self.assertEqual(0, runCmd("wic create directdisk "
@@ -78,6 +104,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "directdisk-*.direct"))) @testcase(1212) + @onlyForArch('i586', 'i686', 'x86_64') def test_build_artifacts(self): """Test wic create directdisk providing all artifacts.""" bbvars = dict((var.lower(), get_bb_var(var, 'core-image-minimal')) \
@@ -92,6 +119,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "directdisk-*.direct"))) @testcase(1157) + @onlyForArch('i586', 'i686', 'x86_64') def test_gpt_image(self): """Test creation of core-image-minimal with gpt table and UUID boot""" self.assertEqual(0, runCmd("wic create directdisk-gpt "
@@ -125,6 +153,7 @@ class Wic(oeSelfTest): self.assertEqual(0, runCmd('wic help kickstart').status) @testcase(1264) + @onlyForArch('i586', 'i686', 'x86_64') def test_compress_gzip(self): """Test compressing an image with gzip""" self.assertEqual(0, runCmd("wic create directdisk "
@@ -134,6 +163,7 @@ class Wic(oeSelfTest): "directdisk-*.direct.gz"))) @testcase(1265) + @onlyForArch('i586', 'i686', 'x86_64') def test_compress_bzip2(self): """Test compressing an image with bzip2""" self.assertEqual(0, runCmd("wic create directdisk "
@@ -143,6 +173,7 @@ class Wic(oeSelfTest): "directdisk-*.direct.bz2"))) @testcase(1266) + @onlyForArch('i586', 'i686', 'x86_64') def test_compress_xz(self): """Test compressing an image with xz""" self.assertEqual(0, runCmd("wic create directdisk "
@@ -152,6 +183,7 @@ class Wic(oeSelfTest): "directdisk-*.direct.xz"))) @testcase(1267) + @onlyForArch('i586', 'i686', 'x86_64') def test_wrong_compressor(self): """Test how wic breaks if wrong compressor is provided""" self.assertEqual(2, runCmd("wic create directdisk "
@@ -159,6 +191,7 @@ class Wic(oeSelfTest): "-c wrong", ignore_status=True).status) @testcase(1268) + @onlyForArch('i586', 'i686', 'x86_64') def test_rootfs_indirect_recipes(self): """Test usage of rootfs plugin with rootfs recipes""" wks = "directdisk-multi-rootfs"
@@ -170,6 +203,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s*.direct" % wks))) @testcase(1269) + @onlyForArch('i586', 'i686', 'x86_64') def test_rootfs_artifacts(self): """Test usage of rootfs plugin with rootfs paths""" bbvars = dict((var.lower(), get_bb_var(var, 'core-image-minimal')) \
@@ -188,6 +222,7 @@ class Wic(oeSelfTest): "%(wks)s-*.direct" % bbvars))) @testcase(1346) + @onlyForArch('i586', 'i686', 'x86_64') def test_iso_image(self): """Test creation of hybrid iso image with legacy and EFI boot""" self.assertEqual(0, runCmd("wic create mkhybridiso "
@@ -220,6 +255,7 @@ class Wic(oeSelfTest): self.assertTrue(content[var]) @testcase(1351) + @onlyForArch('i586', 'i686', 'x86_64') def test_wic_image_type(self): """Test building wic images by bitbake""" self.assertEqual(0, bitbake('wic-image-minimal').status)
@@ -235,6 +271,7 @@ class Wic(oeSelfTest): self.assertTrue(os.path.isfile(os.path.realpath(path))) @testcase(1348) + @onlyForArch('i586', 'i686', 'x86_64') def test_qemux86_directdisk(self): """Test creation of qemux-86-directdisk image""" image = "qemux86-directdisk"
@@ -243,6 +280,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) @testcase(1349) + @onlyForArch('i586', 'i686', 'x86_64') def test_mkgummidisk(self): """Test creation of mkgummidisk image""" image = "mkgummidisk"
@@ -251,6 +289,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) @testcase(1350) + @onlyForArch('i586', 'i686', 'x86_64') def test_mkefidisk(self): """Test creation of mkefidisk image""" image = "mkefidisk"
@@ -259,6 +298,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) @testcase(1385) + @onlyForArch('i586', 'i686', 'x86_64') def test_directdisk_bootloader_config(self): """Test creation of directdisk-bootloader-config image""" image = "directdisk-bootloader-config"
@@ -267,6 +307,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) @testcase(1422) + @onlyForArch('i586', 'i686', 'x86_64') def test_qemu(self): """Test wic-image-minimal under qemu""" self.assertEqual(0, bitbake('wic-image-minimal').status)
@@ -277,6 +318,7 @@ class Wic(oeSelfTest): self.assertEqual(1, status, 'Failed to run command "%s": %s' % (command, output)) self.assertEqual(output, '/dev/root /\r\n/dev/vda3 /mnt') + @onlyForArch('i586', 'i686', 'x86_64') def test_bmap(self): """Test generation of .bmap file""" image = "directdisk"
@@ -285,6 +327,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) self.assertEqual(1, len(glob(self.resultdir + "%s-*direct.bmap" % image))) + @onlyForArch('i586', 'i686', 'x86_64') def test_systemd_bootdisk(self): """Test creation of systemd-bootdisk image""" image = "systemd-bootdisk"
Signature · 1 line
2.5.0
PATCH v5 5/6 wic: selftest: do not assume bzImage kernel image
In reply to Maciej BorzeckiInstead of assuming that bzImage is available, query bitbake enviroment for KERNEL_IMAGETYPE.
--- meta/lib/oeqa/selftest/wic.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
meta/lib/oeqa/selftest/wic.py +2 -1
@@ -338,7 +338,8 @@ class Wic(oeSelfTest): def test_sdimage_bootpart(self): """Test creation of sdimage-bootpart image""" image = "sdimage-bootpart" - self.write_config('IMAGE_BOOT_FILES = "bzImage"\n') + kimgtype = get_bb_var('KERNEL_IMAGETYPE', 'core-image-minimal') + self.write_config('IMAGE_BOOT_FILES = "%s"\n' % kimgtype) self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \ % image).status) self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image)))
Signature · 1 line
2.5.0
PATCH v5 6/6 wic: selftest: add tests for --fixed-size partition flags
In reply to Maciej Borzeckiwic 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.
--- meta/lib/oeqa/selftest/wic.py | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+)
meta/lib/oeqa/selftest/wic.py +61 -0
@@ -29,6 +29,7 @@ import unittest from glob import glob from shutil import rmtree from functools import wraps +from tempfile import NamedTemporaryFile from oeqa.selftest.base import oeSelfTest from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu
@@ -59,6 +60,8 @@ class Wic(oeSelfTest): def setUpLocal(self): """This code is executed before each test method.""" + self.native_sysroot = get_bb_var('STAGING_DIR_NATIVE', 'core-image-minimal') + arch = get_bb_var('HOST_ARCH', 'core-image-minimal') is_x86 = arch in ['i586', 'i686', 'x86_64'] if is_x86:
@@ -343,3 +346,61 @@ class Wic(oeSelfTest): self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \ % image).status) self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) + + def _make_fixed_size_wks(self, size): + """ + Create a wks of an image with a single partition. Size of the partition is set + using --fixed-size flag. Returns a tuple: (path to wks file, wks image name) + """ + with NamedTemporaryFile("w", suffix=".wks", delete=False) as tf: + wkspath = tf.name + tf.write("part " \ + "--source rootfs --ondisk hda --align 4 --fixed-size %d " + "--fstype=ext4\n" % size) + wksname = os.path.splitext(os.path.basename(wkspath))[0] + + return wkspath, wksname + + def test_fixed_size(self): + """ + Test creation of a simple image with partition size controlled through + --fixed-size flag + """ + wkspath, wksname = self._make_fixed_size_wks(200) + + self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \ + % wkspath).status) + os.remove(wkspath) + wicout = glob(self.resultdir + "%s-*direct" % wksname) + self.assertEqual(1, len(wicout)) + + wicimg = wicout[0] + + # verify partition size with wic + res = runCmd("parted -m %s unit mib p 2>/dev/null" % wicimg, + ignore_status=True, + native_sysroot=self.native_sysroot) + self.assertEqual(0, res.status) + + # parse parted output which looks like this: + # BYT;\n + # /var/tmp/wic/build/tmpfwvjjkf_-201611101222-hda.direct:200MiB:file:512:512:msdos::;\n + # 1:0.00MiB:200MiB:200MiB:ext4::;\n + partlns = res.output.splitlines()[2:] + + self.assertEqual(1, len(partlns)) + self.assertEqual("1:0.00MiB:200MiB:200MiB:ext4::;", partlns[0]) + + def test_fixed_size_error(self): + """ + Test creation of a simple image with partition size controlled through + --fixed-size flag. The size of partition is intentionally set to 1MiB + in order to trigger an error in wic. + """ + wkspath, wksname = self._make_fixed_size_wks(1) + + self.assertEqual(1, runCmd("wic create %s -e core-image-minimal" \ + % wkspath, ignore_status=True).status) + os.remove(wkspath) + wicout = glob(self.resultdir + "%s-*direct" % wksname) + self.assertEqual(0, len(wicout))
Signature · 1 line
2.5.0
Quoted 20 lines · Maciej Borzecki
v5 of a patch series previously posted here [1].
Changes since v4:
* dropped
wic: selftest: do not repeat core-image-minimal& rebased dependant patches* minor formatting fix in
wic: selftest: add tests for --fixed-size partition flags[1]. http://lists.openembedded.org/pipermail/openembedded-core/2016-November/129103.html
Maciej Borzecki (6):
oe-selftest: enforce en_US.UTF-8 localeoeqa/utils/commands.py: allow use of binaries from native sysroot
wic: add --fixed-size wks option
wic: selftest: avoidCOMPATIBLE_HOSTissues
wic: selftest: do not assume bzImage kernel image
wic: selftest: add tests for --fixed-size partition flags
Quoted 9 lines
meta/lib/oeqa/selftest/wic.py | 123 +++++++++++++++++++++++++++++++-- meta/lib/oeqa/utils/commands.py | 9 ++- scripts/lib/wic/help.py | 14 +++- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 +++++++++-- scripts/lib/wic/partition.py | 88 ++++++++++++++--------- scripts/lib/wic/utils/partitionedfs.py | 2 +- scripts/oe-selftest | 3 + 8 files changed, 234 insertions(+), 48 deletions(-)
Is there any additional action needed from me at this point? A rebase or a resend perhaps?
Cheers,
Signature · 2 lines
Maciej Borzecki RnDity
Quoted 32 lines · Maciej Borzęcki
Quoted 20 lines · Maciej Borzecki
v5 of a patch series previously posted here [1].
Changes since v4:
* dropped
wic: selftest: do not repeat core-image-minimal& rebased dependant patches* minor formatting fix in
wic: selftest: add tests for --fixed-size partition flags[1]. http://lists.openembedded.org/pipermail/openembedded-core/2016-November/129103.html
Maciej Borzecki (6):
oe-selftest: enforce en_US.UTF-8 localeoeqa/utils/commands.py: allow use of binaries from native sysroot
wic: add --fixed-size wks option
wic: selftest: avoidCOMPATIBLE_HOSTissues
wic: selftest: do not assume bzImage kernel image
wic: selftest: add tests for --fixed-size partition flagsQuoted 9 lines
meta/lib/oeqa/selftest/wic.py | 123 +++++++++++++++++++++++++++++++-- meta/lib/oeqa/utils/commands.py | 9 ++- scripts/lib/wic/help.py | 14 +++- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 +++++++++-- scripts/lib/wic/partition.py | 88 ++++++++++++++--------- scripts/lib/wic/utils/partitionedfs.py | 2 +- scripts/oe-selftest | 3 + 8 files changed, 234 insertions(+), 48 deletions(-)
Quoted 3 lines
Is there any additional action needed from me at this point? A rebase or a resend perhaps?
Rebase&resend would be nice as at lest one patch from this patchset is already accepted.
--
Regards,
Ed
Quoted 33 lines · Ed Bartosh
Quoted 32 lines · Maciej Borzęcki
Quoted 29 lines · Maciej Borzecki
v5 of a patch series previously posted here [1].
Changes since v4:
* dropped
wic: selftest: do not repeat core-image-minimal& rebased dependant patches* minor formatting fix in
wic: selftest: add tests for --fixed-size partition flags[1]. http://lists.openembedded.org/pipermail/openembedded-core/2016-November/129103.html
Maciej Borzecki (6):
oe-selftest: enforce en_US.UTF-8 localeoeqa/utils/commands.py: allow use of binaries from native sysroot
wic: add --fixed-size wks option
wic: selftest: avoidCOMPATIBLE_HOSTissues
wic: selftest: do not assume bzImage kernel image
wic: selftest: add tests for --fixed-size partition flagsmeta/lib/oeqa/selftest/wic.py | 123 +++++++++++++++++++++++++++++++-- meta/lib/oeqa/utils/commands.py | 9 ++- scripts/lib/wic/help.py | 14 +++- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 +++++++++-- scripts/lib/wic/partition.py | 88 ++++++++++++++--------- scripts/lib/wic/utils/partitionedfs.py | 2 +- scripts/oe-selftest | 3 + 8 files changed, 234 insertions(+), 48 deletions(-)
Quoted 6 lines
Quoted 3 lines
Is there any additional action needed from me at this point? A rebase or a resend perhaps?
Rebase&resend would be nice as at lest one patch from this patchset is already accepted.
I will be posting a v6 later today or tomorrow.
Signature · 2 lines
Maciej Borzecki RnDity
v6 cover wic: bugfixes & --fixed-size support, tests, oeqa: enhancements
In reply to Ed Bartoshv6 of a patch series previously posted here [1].
Changes since v5:
* oe-selftest: enforce en_US.UTF-8 locale was merged to master, hence it's no longer part of this series
* rebased on top of master (d0d260b0b85790ceb136dd6b0445e8e33d038f5e)
[1]. http://lists.openembedded.org/pipermail/openembedded-core/2016-November/129187.html
Maciej Borzecki (5):
oeqa/utils/commands.py: allow use of binaries from native sysroot
wic: add --fixed-size wks option
wic: selftest: avoid COMPATIBLE_HOST issues
wic: selftest: do not assume bzImage kernel image
wic: selftest: add tests for --fixed-size partition flags
meta/lib/oeqa/selftest/wic.py | 117 +++++++++++++++++++++++++++++++-- meta/lib/oeqa/utils/commands.py | 9 ++- scripts/lib/wic/help.py | 14 +++- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 ++++++++++-- scripts/lib/wic/partition.py | 88 +++++++++++++++---------- scripts/lib/wic/utils/partitionedfs.py | 2 +- 7 files changed, 224 insertions(+), 49 deletions(-)
Signature · 1 line
2.5.5
PATCH v6 1/5 oeqa/utils/commands.py: allow use of binaries from native sysroot
Tests may need to run a native tool that is not available on the host filesystem, but can be built using one of the *-native recipes. In such case, the tool will be available in native sysroot, and running in from that location will require adjustments to PATH.
runCmd() can now take a path to native sysroot as one of its arguments and setup PATH accordingly.
--- meta/lib/oeqa/utils/commands.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
meta/lib/oeqa/utils/commands.py +8 -1
@@ -97,9 +97,16 @@ class Result(object): pass -def runCmd(command, ignore_status=False, timeout=None, assert_error=True, **options): +def runCmd(command, ignore_status=False, timeout=None, assert_error=True, native_sysroot=None, **options): result = Result() + if native_sysroot: + extra_paths = "%s/sbin:%s/usr/sbin:%s/usr/bin" % \ + (native_sysroot, native_sysroot, native_sysroot) + nenv = dict(options.get('env', os.environ)) + nenv['PATH'] = extra_paths + ':' + nenv.get('PATH', '') + options['env'] = nenv + cmd = Command(command, timeout=timeout, **options) cmd.run()
Signature · 1 line
2.5.5
PATCH v6 2/5 wic: add --fixed-size wks option
In reply to Maciej BorzeckiAdded new option --fixed-size to wks. The option can be used to indicate the exact size of a partition. The option cannot be added together with --size, in which case an error will be raised. Other options that influence automatic partition size (--extra-space, --overhead-factor), if specifiec along with --fixed-size, will raise an error.
If it partition data is larger than the amount of space specified with --fixed-size option wic will raise an error.
--- scripts/lib/wic/help.py | 14 ++++-- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 ++++++++++++++-- scripts/lib/wic/partition.py | 88 +++++++++++++++++++++------------- scripts/lib/wic/utils/partitionedfs.py | 2 +- 5 files changed, 105 insertions(+), 42 deletions(-)
scripts/lib/wic/help.py +11 -3
@@ -646,6 +646,12 @@ DESCRIPTION not specified, the size is in MB. You do not need this option if you use --source. + --fixed-size: Exact partition size. Value format is the same + as for --size option. This option cannot be + specified along with --size. If partition data + is larger than --fixed-size and error will be + raised when assembling disk image. + --source: This option is a wic-specific option that names the source of the data that will populate the partition. The most common value for this option
@@ -719,13 +725,15 @@ DESCRIPTION space after the space filled by the content of the partition. The final size can go beyond the size specified by --size. - By default, 10MB. + By default, 10MB. This option cannot be used + with --fixed-size option. --overhead-factor: This option is specific to wic. The size of the partition is multiplied by this factor. It has to be greater than or - equal to 1. - The default value is 1.3. + equal to 1. The default value is 1.3. + This option cannot be used with --fixed-size + option. --part-type: This option is specific to wic. It specifies partition type GUID for GPT partitions.
scripts/lib/wic/imager/direct.py +1 -1
@@ -290,7 +290,7 @@ class DirectImageCreator(BaseImageCreator): self.bootimg_dir, self.kernel_dir, self.native_sysroot) - self.__image.add_partition(int(part.size), + self.__image.add_partition(part.disk_size, part.disk, part.mountpoint, part.source_file,
scripts/lib/wic/ksparser.py +37 -4
70 lines not on this page · raw message
scripts/lib/wic/partition.py +55 -33
161 lines not on this page · raw message
scripts/lib/wic/utils/partitionedfs.py +1 -1
@@ -210,7 +210,7 @@ class Image(): msger.debug("Assigned %s to %s%d, sectors range %d-%d size %d " "sectors (%d bytes)." \ % (part['mountpoint'], part['disk_name'], part['num'], - part['start'], part['start'] + part['size'] - 1, + part['start'], disk['offset'] - 1, part['size'], part['size'] * self.sector_size)) # Once all the partitions have been layed out, we can calculate the
Signature · 1 line
2.5.5
PATCH v6 3/5 wic: selftest: avoid COMPATIBLE_HOST issues
In reply to Maciej Borzeckiwic tests will unconditionally attempt to build syslinux and add configuration options that may not be compatible with current machine.
Resolve this by consulting HOST_ARCH (which defaults to TARGET_ARCH) and build recipes, add configuration options or skip tests conditionally.
A convenience decorator onlyForArch() can be used to skip test cases for specific architectures.
--- meta/lib/oeqa/selftest/wic.py | 53 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 5 deletions(-)
meta/lib/oeqa/selftest/wic.py +48 -5
@@ -24,15 +24,33 @@ """Test cases for wic.""" import os +import unittest from glob import glob from shutil import rmtree +from functools import wraps from oeqa.selftest.base import oeSelfTest from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu from oeqa.utils.decorators import testcase +class onlyForArch(object): + + def __init__(self, *args): + self.archs = args + + def __call__(self,f): + @wraps(f) + def wrapped_f(*args, **kwargs): + arch = get_bb_var('HOST_ARCH', 'core-image-minimal') + if self.archs and arch not in self.archs : + raise unittest.SkipTest("Testcase arch dependency not met: %s" % arch) + return f(*args, **kwargs) + wrapped_f.__name__ = f.__name__ + return wrapped_f + + class Wic(oeSelfTest): """Wic test class."""
@@ -41,16 +59,23 @@ class Wic(oeSelfTest): def setUpLocal(self): """This code is executed before each test method.""" - self.write_config('IMAGE_FSTYPES += " hddimg"\n' - 'MACHINE_FEATURES_append = " efi"\n' - 'WKS_FILE = "wic-image-minimal"\n') + arch = get_bb_var('HOST_ARCH', 'core-image-minimal') + is_x86 = arch in ['i586', 'i686', 'x86_64'] + if is_x86: + self.write_config('IMAGE_FSTYPES += " hddimg"\n' \ + 'MACHINE_FEATURES_append = " efi"\n' + 'WKS_FILE = "wic-image-minimal"\n') # Do this here instead of in setUpClass as the base setUp does some # clean up which can result in the native tools built earlier in # setUpClass being unavailable. if not Wic.image_is_ready: - bitbake('syslinux syslinux-native parted-native gptfdisk-native ' - 'dosfstools-native mtools-native bmap-tools-native') + tools = 'parted-native gptfdisk-native ' \ + 'dosfstools-native mtools-native bmap-tools-native' + if is_x86: + tools += ' syslinux syslinux-native' + bitbake(tools) + bitbake('core-image-minimal') Wic.image_is_ready = True
@@ -72,6 +97,7 @@ class Wic(oeSelfTest): self.assertEqual(0, runCmd('wic list --help').status) @testcase(1211) + @onlyForArch('i586', 'i686', 'x86_64') def test_build_image_name(self): """Test wic create directdisk --image-name core-image-minimal""" self.assertEqual(0, runCmd("wic create directdisk "
@@ -79,6 +105,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "directdisk-*.direct"))) @testcase(1212) + @onlyForArch('i586', 'i686', 'x86_64') def test_build_artifacts(self): """Test wic create directdisk providing all artifacts.""" bbvars = dict((var.lower(), get_bb_var(var, 'core-image-minimal')) \
@@ -93,6 +120,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "directdisk-*.direct"))) @testcase(1157) + @onlyForArch('i586', 'i686', 'x86_64') def test_gpt_image(self): """Test creation of core-image-minimal with gpt table and UUID boot""" self.assertEqual(0, runCmd("wic create directdisk-gpt "
@@ -126,6 +154,7 @@ class Wic(oeSelfTest): self.assertEqual(0, runCmd('wic help kickstart').status) @testcase(1264) + @onlyForArch('i586', 'i686', 'x86_64') def test_compress_gzip(self): """Test compressing an image with gzip""" self.assertEqual(0, runCmd("wic create directdisk "
@@ -135,6 +164,7 @@ class Wic(oeSelfTest): "directdisk-*.direct.gz"))) @testcase(1265) + @onlyForArch('i586', 'i686', 'x86_64') def test_compress_bzip2(self): """Test compressing an image with bzip2""" self.assertEqual(0, runCmd("wic create directdisk "
@@ -144,6 +174,7 @@ class Wic(oeSelfTest): "directdisk-*.direct.bz2"))) @testcase(1266) + @onlyForArch('i586', 'i686', 'x86_64') def test_compress_xz(self): """Test compressing an image with xz""" self.assertEqual(0, runCmd("wic create directdisk "
@@ -153,6 +184,7 @@ class Wic(oeSelfTest): "directdisk-*.direct.xz"))) @testcase(1267) + @onlyForArch('i586', 'i686', 'x86_64') def test_wrong_compressor(self): """Test how wic breaks if wrong compressor is provided""" self.assertEqual(2, runCmd("wic create directdisk "
@@ -160,6 +192,7 @@ class Wic(oeSelfTest): "-c wrong", ignore_status=True).status) @testcase(1268) + @onlyForArch('i586', 'i686', 'x86_64') def test_rootfs_indirect_recipes(self): """Test usage of rootfs plugin with rootfs recipes""" wks = "directdisk-multi-rootfs"
@@ -171,6 +204,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s*.direct" % wks))) @testcase(1269) + @onlyForArch('i586', 'i686', 'x86_64') def test_rootfs_artifacts(self): """Test usage of rootfs plugin with rootfs paths""" bbvars = dict((var.lower(), get_bb_var(var, 'core-image-minimal')) \
@@ -189,6 +223,7 @@ class Wic(oeSelfTest): "%(wks)s-*.direct" % bbvars))) @testcase(1346) + @onlyForArch('i586', 'i686', 'x86_64') def test_iso_image(self): """Test creation of hybrid iso image with legacy and EFI boot""" self.assertEqual(0, runCmd("wic create mkhybridiso "
@@ -221,6 +256,7 @@ class Wic(oeSelfTest): self.assertTrue(content[var]) @testcase(1351) + @onlyForArch('i586', 'i686', 'x86_64') def test_wic_image_type(self): """Test building wic images by bitbake""" self.assertEqual(0, bitbake('wic-image-minimal').status)
@@ -236,6 +272,7 @@ class Wic(oeSelfTest): self.assertTrue(os.path.isfile(os.path.realpath(path))) @testcase(1348) + @onlyForArch('i586', 'i686', 'x86_64') def test_qemux86_directdisk(self): """Test creation of qemux-86-directdisk image""" image = "qemux86-directdisk"
@@ -244,6 +281,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) @testcase(1349) + @onlyForArch('i586', 'i686', 'x86_64') def test_mkgummidisk(self): """Test creation of mkgummidisk image""" image = "mkgummidisk"
@@ -252,6 +290,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) @testcase(1350) + @onlyForArch('i586', 'i686', 'x86_64') def test_mkefidisk(self): """Test creation of mkefidisk image""" image = "mkefidisk"
@@ -260,6 +299,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) @testcase(1385) + @onlyForArch('i586', 'i686', 'x86_64') def test_directdisk_bootloader_config(self): """Test creation of directdisk-bootloader-config image""" image = "directdisk-bootloader-config"
@@ -268,6 +308,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) @testcase(1422) + @onlyForArch('i586', 'i686', 'x86_64') def test_qemu(self): """Test wic-image-minimal under qemu""" self.assertEqual(0, bitbake('wic-image-minimal').status)
@@ -278,6 +319,7 @@ class Wic(oeSelfTest): self.assertEqual(1, status, 'Failed to run command "%s": %s' % (command, output)) self.assertEqual(output, '/dev/root /\r\n/dev/vda3 /mnt') + @onlyForArch('i586', 'i686', 'x86_64') def test_bmap(self): """Test generation of .bmap file""" image = "directdisk"
@@ -286,6 +328,7 @@ class Wic(oeSelfTest): self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) self.assertEqual(1, len(glob(self.resultdir + "%s-*direct.bmap" % image))) + @onlyForArch('i586', 'i686', 'x86_64') def test_systemd_bootdisk(self): """Test creation of systemd-bootdisk image""" image = "systemd-bootdisk"
Signature · 1 line
2.5.5
PATCH v6 4/5 wic: selftest: do not assume bzImage kernel image
In reply to Maciej BorzeckiInstead of assuming that bzImage is available, query bitbake enviroment for KERNEL_IMAGETYPE.
--- meta/lib/oeqa/selftest/wic.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
meta/lib/oeqa/selftest/wic.py +2 -1
@@ -339,7 +339,8 @@ class Wic(oeSelfTest): def test_sdimage_bootpart(self): """Test creation of sdimage-bootpart image""" image = "sdimage-bootpart" - self.write_config('IMAGE_BOOT_FILES = "bzImage"\n') + kimgtype = get_bb_var('KERNEL_IMAGETYPE', 'core-image-minimal') + self.write_config('IMAGE_BOOT_FILES = "%s"\n' % kimgtype) self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \ % image).status) self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image)))
Signature · 1 line
2.5.5
PATCH v6 5/5 wic: selftest: add tests for --fixed-size partition flags
In reply to Maciej Borzeckiwic 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.
--- meta/lib/oeqa/selftest/wic.py | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+)
meta/lib/oeqa/selftest/wic.py +61 -0
@@ -29,6 +29,7 @@ import unittest from glob import glob from shutil import rmtree from functools import wraps +from tempfile import NamedTemporaryFile from oeqa.selftest.base import oeSelfTest from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu
@@ -59,6 +60,8 @@ class Wic(oeSelfTest): def setUpLocal(self): """This code is executed before each test method.""" + self.native_sysroot = get_bb_var('STAGING_DIR_NATIVE', 'core-image-minimal') + arch = get_bb_var('HOST_ARCH', 'core-image-minimal') is_x86 = arch in ['i586', 'i686', 'x86_64'] if is_x86:
@@ -344,3 +347,61 @@ class Wic(oeSelfTest): self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \ % image).status) self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image))) + + def _make_fixed_size_wks(self, size): + """ + Create a wks of an image with a single partition. Size of the partition is set + using --fixed-size flag. Returns a tuple: (path to wks file, wks image name) + """ + with NamedTemporaryFile("w", suffix=".wks", delete=False) as tf: + wkspath = tf.name + tf.write("part " \ + "--source rootfs --ondisk hda --align 4 --fixed-size %d " + "--fstype=ext4\n" % size) + wksname = os.path.splitext(os.path.basename(wkspath))[0] + + return wkspath, wksname + + def test_fixed_size(self): + """ + Test creation of a simple image with partition size controlled through + --fixed-size flag + """ + wkspath, wksname = self._make_fixed_size_wks(200) + + self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \ + % wkspath).status) + os.remove(wkspath) + wicout = glob(self.resultdir + "%s-*direct" % wksname) + self.assertEqual(1, len(wicout)) + + wicimg = wicout[0] + + # verify partition size with wic + res = runCmd("parted -m %s unit mib p 2>/dev/null" % wicimg, + ignore_status=True, + native_sysroot=self.native_sysroot) + self.assertEqual(0, res.status) + + # parse parted output which looks like this: + # BYT;\n + # /var/tmp/wic/build/tmpfwvjjkf_-201611101222-hda.direct:200MiB:file:512:512:msdos::;\n + # 1:0.00MiB:200MiB:200MiB:ext4::;\n + partlns = res.output.splitlines()[2:] + + self.assertEqual(1, len(partlns)) + self.assertEqual("1:0.00MiB:200MiB:200MiB:ext4::;", partlns[0]) + + def test_fixed_size_error(self): + """ + Test creation of a simple image with partition size controlled through + --fixed-size flag. The size of partition is intentionally set to 1MiB + in order to trigger an error in wic. + """ + wkspath, wksname = self._make_fixed_size_wks(1) + + self.assertEqual(1, runCmd("wic create %s -e core-image-minimal" \ + % wkspath, ignore_status=True).status) + os.remove(wkspath) + wicout = glob(self.resultdir + "%s-*direct" % wksname) + self.assertEqual(0, len(wicout))
Signature · 1 line
2.5.5
Re: [PATCH v6 0/5] wic: bugfixes & --fixed-size support, tests, oeqa: enhancements
In reply to Maciej BorzeckiQuoted 9 lines · Maciej Borzecki
v6 of a patch series previously posted here [1].
Changes since v5:
*
oe-selftest: enforce en_US.UTF-8 localewas merged to master, hence it's no longer part of this series* rebased on top of master (
d0d260b0b85790ceb136dd6b0445e8e33d038f5e)
The patchset looks good to me. Thank you.
Couple of questions:
- did you test if Lars' change
https://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=db08ffee0ad1451f3bf710f4d1b623938ba9aefb
works with your patchset?
- Regarding oe-selftest fixes, wich machine did you run oe-selftest on? It looks to me that a lot of test cases can be run on your machine if we use another wks.
Quoted 9 lines
[1]. http://lists.openembedded.org/pipermail/openembedded-core/2016-November/129187.html
Maciej Borzecki (5):
oeqa/utils/commands.py: allow use of binaries from native sysroot
wic: add --fixed-size wks option
wic: selftest: avoidCOMPATIBLE_HOSTissues
wic: selftest: do not assume bzImage kernel image
wic: selftest: add tests for --fixed-size partition flags
Quoted 8 lines
meta/lib/oeqa/selftest/wic.py | 117 +++++++++++++++++++++++++++++++-- meta/lib/oeqa/utils/commands.py | 9 ++- scripts/lib/wic/help.py | 14 +++- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 ++++++++++-- scripts/lib/wic/partition.py | 88 +++++++++++++++---------- scripts/lib/wic/utils/partitionedfs.py | 2 +- 7 files changed, 224 insertions(+), 49 deletions(-)
--
Regards,
Ed
Re: [PATCH v6 0/5] wic: bugfixes & --fixed-size support, tests, oeqa: enhancements
Quoted 11 lines · Ed Bartosh
Quoted 9 lines · Maciej Borzecki
v6 of a patch series previously posted here [1].
Changes since v5:
*
oe-selftest: enforce en_US.UTF-8 localewas merged to master, hence it's no longer part of this series* rebased on top of master (
d0d260b0b85790ceb136dd6b0445e8e33d038f5e)
Quoted 6 lines
The patchset looks good to me. Thank you.
Couple of questions:
- did you test if Lars' change
https://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=db08ffee0ad1451f3bf710f4d1b623938ba9aefb
works with your patchset?
Yes. The series was rebased on top of d0d260b0b85790ceb136dd6b0445e8e33d038f5e, which includes Lars' patch. The tests passed on all MACHINES I've used (though I'm not sure if scenario addressed in that patch is covered by relevant test cases).
I believe I have also hit a weird bug in BitbakeVars._parse_line() while testing with this patch and meta-mender. I Hope you can confirm it.
From a quick investigation I have determined that _parse_line() may interpret arbitrary lines that are of 'key=value' format as legitimate bitbake variables. In my case, IMAGE_CMD_sdimg defined in mender-sdimg.bbclass includes the following piece:
IMAGE_CMD_sdimg() {
...
REMAINING_SIZE=$(expr ${MENDER_STORAGE_TOTAL_SIZE_MB} - \
${MENDER_BOOT_PART_SIZE_MB} - \
${MENDER_DATA_PART_SIZE_MB} - \
${MENDER_PARTITIONING_OVERHEAD_MB} - \
$boot_env_size_mb)
ROOTFS_SIZE=$(expr $REMAINING_SIZE / 2)
...
}This will obviously be seen in bitbake -e output. Looking at code here:
https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/scripts/lib/wic/utils/oe/misc.py?id=db08ffee0ad1451f3bf710f4d1b623938ba9aefb#n151
the line will be split at '=', then whitespace will be stripped from both key and value. So a line (taken from bitbake -e):
ROOTFS_SIZE=\$(expr \$REMAINING_SIZE / 2)
Will define a variable ROOTFS_SIZE with value '\\$(expr \\$REMAINING_SIZE / 2)'.
It's a pure coincidence that Lars' patch queries ROOTFS_SIZE which also appears in bitbake -e output under exactly the same name.
IMO, when parsing env output, we should expect variable name to start right at the beginning of a line, IOW skip the line if key[0].isspace() == True
Quoted 4 lines
- Regarding oe-selftest fixes, wich machine did you run oe-selftest on? It looks to me that a lot of test cases can be run on your machine if we use another wks.
I've run it on beaglebone, vexpress-qemu, qemux86 and qemuarm. Agree with your observation though. I think that at least these TCs could be made machine agnostic:
- test_build_artifacts
- test_build_image_name
- test_compress_*
- test_gpt_image
- test_wic_image_type
- test_wrong_compressor
- test_rootfs_*
Quoted 10 lines
Quoted 10 lines
[1]. http://lists.openembedded.org/pipermail/openembedded-core/2016-November/129187.html
Maciej Borzecki (5):
oeqa/utils/commands.py: allow use of binaries from native sysroot
wic: add --fixed-size wks option
wic: selftest: avoidCOMPATIBLE_HOSTissues
wic: selftest: do not assume bzImage kernel image
wic: selftest: add tests for --fixed-size partition flags
Quoted 9 lines
Quoted 8 lines
meta/lib/oeqa/selftest/wic.py | 117 +++++++++++++++++++++++++++++++-- meta/lib/oeqa/utils/commands.py | 9 ++- scripts/lib/wic/help.py | 14 +++- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 ++++++++++-- scripts/lib/wic/partition.py | 88 +++++++++++++++---------- scripts/lib/wic/utils/partitionedfs.py | 2 +- 7 files changed, 224 insertions(+), 49 deletions(-)
Regards,
Signature · 2 lines
Maciej Borzecki RnDity
Re: [PATCH v6 0/5] wic: bugfixes & --fixed-size support, tests, oeqa: enhancements
Quoted 14 lines · Maciej Borzęcki
Quoted 13 lines · Ed Bartosh
Quoted 9 lines · Maciej Borzecki
v6 of a patch series previously posted here [1].
Changes since v5:
*
oe-selftest: enforce en_US.UTF-8 localewas merged to master, hence it's no longer part of this series* rebased on top of master (
d0d260b0b85790ceb136dd6b0445e8e33d038f5e)The patchset looks good to me. Thank you.
Quoted 7 lines
Quoted 4 lines
Couple of questions:
- did you test if Lars' change
https://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=db08ffee0ad1451f3bf710f4d1b623938ba9aefb
works with your patchset?Yes. The series was rebased on top of
d0d260b0b85790ceb136dd6b0445e8e33d038f5e, which includes Lars' patch.
The series causes conflicts on the latest master. Can you check if it's really the case or it's just something wrong with my setup?
git-pw apply 3904
Applying series: wic: bugfixes & --fixed-size support, tests,
oe-selftest: minor fixes (rev 3)
Applying: oe-selftest: enforce en_US.UTF-8 locale
Using index info to reconstruct a base tree...
M scripts/oe-selftest
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.
Applying: oeqa/utils/commands.py: allow use of binaries from native sysroot
Applying: wic: add --fixed-size wks option
Applying: wic: selftest: avoid COMPATIBLE_HOST issues
Using index info to reconstruct a base tree...
M meta/lib/oeqa/selftest/wic.py
Falling back to patching base and 3-way merge...
Auto-merging meta/lib/oeqa/selftest/wic.py
CONFLICT (content): Merge conflict in meta/lib/oeqa/selftest/wic.py Failed to merge in the changes.
Patch failed at 0004 wic: selftest: avoid COMPATIBLE_HOST issues The copy of the patch that failed is found in:
/home/ed/git/yocto/patchtest/openembedded-core/.git/rebase-apply/patch
When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort".
Quoted 3 lines
The tests passed on all MACHINES I've used (though I'm not sure if scenario addressed in that patch is covered by relevant test cases).
I've asked Lars to add test case for that functionality.
Quoted 3 lines
I believe I have also hit a weird bug in
BitbakeVars._parse_line()while testing with this patch and meta-mender. I Hope you can confirm it.
Yes, I confirm this. Thanks for poining out to it. I'll fix it today.
Quoted 41 lines
From a quick investigation I have determined that
_parse_line()may interpret arbitrary lines that are of 'key=value' format as legitimate bitbake variables. In my case,IMAGE_CMD_sdimgdefined in mender-sdimg.bbclass includes the following piece:IMAGE_CMD_sdimg() { ... REMAINING_SIZE=$(expr ${MENDER_STORAGE_TOTAL_SIZE_MB} - \ ${MENDER_BOOT_PART_SIZE_MB} - \ ${MENDER_DATA_PART_SIZE_MB} - \ ${MENDER_PARTITIONING_OVERHEAD_MB} - \ $boot_env_size_mb) ROOTFS_SIZE=$(expr $REMAINING_SIZE / 2) ... }This will obviously be seen in
bitbake -e output. Looking at code here:
https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/scripts/lib/wic/utils/oe/misc.py?id=db08ffee0ad1451f3bf710f4d1b623938ba9aefb#n151
the line will be split at '=', then whitespace will be stripped from both key and value. So a line (taken from bitbake -e):ROOTFS_SIZE=\$(expr \$REMAINING_SIZE / 2)Will define a variable
ROOTFS_SIZEwith value '\\$(expr \\$REMAINING_SIZE / 2)'.It's a pure coincidence that Lars' patch queries
ROOTFS_SIZEwhich also appears in bitbake -e output under exactly the same name.IMO, when parsing env output, we should expect variable name to start right at the beginning of a line, IOW skip the line if key[0].isspace() == True
Quoted 4 lines
- Regarding oe-selftest fixes, wich machine did you run oe-selftest on? It looks to me that a lot of test cases can be run on your machine if we use another wks.
I've run it on beaglebone, vexpress-qemu, qemux86 and qemuarm. Agree with your observation though. I think that at least these TCs could be made machine agnostic:
Quoted 9 lines
-
test_build_artifacts
-test_build_image_name
- test_compress_*
-test_gpt_image
-test_wic_image_type
-test_wrong_compressor
- test_rootfs_*
Yes, that's exactly my point. We should make generic tests work on any machine.
Would you be willing to do this in a separate patchset together with your oe-selftest core fixes?
I'd suggest to only include new testcase that works on qemu-x86* into this patchset. It will make it faster to get merged.
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines
[1]. http://lists.openembedded.org/pipermail/openembedded-core/2016-November/129187.html
Maciej Borzecki (5):
oeqa/utils/commands.py: allow use of binaries from native sysroot
wic: add --fixed-size wks option
wic: selftest: avoidCOMPATIBLE_HOSTissues
wic: selftest: do not assume bzImage kernel image
wic: selftest: add tests for --fixed-size partition flags
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
meta/lib/oeqa/selftest/wic.py | 117 +++++++++++++++++++++++++++++++-- meta/lib/oeqa/utils/commands.py | 9 ++- scripts/lib/wic/help.py | 14 +++- scripts/lib/wic/imager/direct.py | 2 +- scripts/lib/wic/ksparser.py | 41 ++++++++++-- scripts/lib/wic/partition.py | 88 +++++++++++++++---------- scripts/lib/wic/utils/partitionedfs.py | 2 +- 7 files changed, 224 insertions(+), 49 deletions(-)
--
Regards,
Ed
Re: [PATCH v6 0/5] wic: bugfixes & --fixed-size support, tests, oeqa: enhancements
Quoted 20 lines · Ed Bartosh
Quoted 19 lines · Maciej Borzęcki
Quoted 17 lines · Ed Bartosh
Quoted 9 lines · Maciej Borzecki
v6 of a patch series previously posted here [1].
Changes since v5:
*
oe-selftest: enforce en_US.UTF-8 localewas merged to master, hence it's no longer part of this series* rebased on top of master (
d0d260b0b85790ceb136dd6b0445e8e33d038f5e)The patchset looks good to me. Thank you.
Couple of questions:
- did you test if Lars' change
https://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=db08ffee0ad1451f3bf710f4d1b623938ba9aefb
works with your patchset?
Quoted 5 lines
Quoted 2 lines
Yes. The series was rebased on top of
d0d260b0b85790ceb136dd6b0445e8e33d038f5e, which includes Lars' patch.The series causes conflicts on the latest master. Can you check if it's really the case or it's just something wrong with my setup?
Just rebased on top current master d41d2fd and pushed to
https://github.com/bboozzoo/poky branch bboozzoo/wic-fixed-size-v7 in case you want to test locally. I guess the conflict was with patch aa1c50a selftest/wic: extending test coverage for WIC script options, which has been reverted yesterday by RP.
Jair has posted a v2 yesterday and I expect it to be merged soon. So, I think I'll just wait a couple of days (actually more like until the beginning of January) before publishing a rebased version of my series.
<snip>
Quoted 16 lines
Quoted 6 lines
I've run it on beaglebone, vexpress-qemu, qemux86 and qemuarm. Agree with your observation though. I think that at least these TCs could be made machine agnostic:
Quoted 9 lines
-
test_build_artifacts
-test_build_image_name
- test_compress_*
-test_gpt_image
-test_wic_image_type
-test_wrong_compressor
- test_rootfs_*
Quoted 9 lines
Yes, that's exactly my point. We should make generic tests work on any machine.
Would you be willing to do this in a separate patchset together with your oe-selftest core fixes?
I'd suggest to only include new testcase that works on qemu-x86* into this patchset. It will make it faster to get merged.
I would prefer to post these changes as a separate patchset. It looks like there's already a couple of potentially conflicting patches floating on the mailing list, so I would prefer to get --fixed-size merged before starting another one.
Regards,
Signature · 2 lines
Maciej Borzecki RnDity