diff mbox series

[v3] oe-selftest.wic: add native sysroot handling

Message ID 20250501023515.12949-1-twoerner@gmail.com
State Accepted, archived
Commit 306e4831f07d4a8db6ab880487813a6abd0ffa08
Headers show
Series [v3] oe-selftest.wic: add native sysroot handling | expand

Commit Message

Trevor Woerner May 1, 2025, 2:35 a.m. UTC
The wic test_exclude_path_with_extra_space does not succeed on debian-based
AB workers since they, by default, do not install the 'parted' utility. This
test installs the 'wic-tools' package, which includes the 'parted' utility,
but it is not being found/used for some unknown reason.

In the previous patch it was believed that doing some extra PATH handling
(as performed by some other tests with a python try...finally block) would
solve the issue. That turned out to not be the case. This patch starts by
reverting that change, since it has no benefit.

In order to use the native tools from the 'wic-tools' package, wic's
'--native-sysroot' can be used (as demonstrated in other tests). In fact
the wic help message explaining the purpose of this flag states that it is
for passing "...the path to the native sysroot containing the tools(parted
and mtools) to use"[sic].

Removing the host's 'parted' utility better simulates the situation found
on the debian workers for testing. This patch is seen to make this test pass
with no host 'parted' utility in place.

Signed-off-by: Trevor Woerner <twoerner@gmail.com>
---
changes in v3:
- re-format the patch based on top of v1 being applied

changes in v2:
- switch to using the -n flag instead of PATH manipulation
- this version was created assuming v1 was not applied
---
 meta/lib/oeqa/selftest/cases/wic.py | 64 +++++++++++++----------------
 1 file changed, 29 insertions(+), 35 deletions(-)
diff mbox series

Patch

diff --git a/meta/lib/oeqa/selftest/cases/wic.py b/meta/lib/oeqa/selftest/cases/wic.py
index 60dce33911e9..267c7105c5ec 100644
--- a/meta/lib/oeqa/selftest/cases/wic.py
+++ b/meta/lib/oeqa/selftest/cases/wic.py
@@ -538,42 +538,36 @@  part /mnt --source rootfs --ondisk mmcblk0 --fstype=ext4 --exclude-path bin/whoa
     def test_exclude_path_with_extra_space(self):
         """Test having --exclude-path with IMAGE_ROOTFS_EXTRA_SPACE. [Yocto #15555]"""
 
-        oldpath = os.environ['PATH']
-        os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
-
-        try:
-            with NamedTemporaryFile("w", suffix=".wks") as wks:
-                wks.writelines(
-                    ['bootloader --ptable gpt\n',
-                     'part /boot --size=100M --active --fstype=ext4 --label boot\n',
-                     'part /     --source rootfs      --fstype=ext4 --label root --exclude-path boot/\n'])
-                wks.flush()
-                config = 'IMAGE_ROOTFS_EXTRA_SPACE = "500000"\n'\
-                         'DEPENDS:pn-core-image-minimal += "wic-tools"\n'\
-                         'IMAGE_FSTYPES += "wic"\n'\
-                         'WKS_FILE = "%s"\n' % wks.name
-                self.append_config(config)
-                bitbake('core-image-minimal')
-
-            """
-            the output of "wic ls <image>.wic" will look something like:
-                Num     Start        End          Size      Fstype
-                 1         17408    136332287    136314880  ext4
-                 2     136332288    171464703     35132416  ext4
-            we are looking for the size of partition 2
-            i.e. in this case the number 35,132,416
-            without the fix the size will be around 85,403,648
-            with the fix the size should be around 799,960,064
-            """
-            bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'MACHINE'], 'core-image-minimal')
-            deploy_dir = bb_vars['DEPLOY_DIR_IMAGE']
-            machine = bb_vars['MACHINE']
-            wicout = glob(os.path.join(deploy_dir, "core-image-minimal-%s.rootfs-*.wic" % machine))[0]
-            size_of_root_partition = int(runCmd("wic ls %s" % wicout).output.split('\n')[2].split()[3])
-            self.assertGreater(size_of_root_partition, 500000000)
+        with NamedTemporaryFile("w", suffix=".wks") as wks:
+            wks.writelines(
+                ['bootloader --ptable gpt\n',
+                 'part /boot --size=100M --active --fstype=ext4 --label boot\n',
+                 'part /     --source rootfs      --fstype=ext4 --label root --exclude-path boot/\n'])
+            wks.flush()
+            config = 'IMAGE_ROOTFS_EXTRA_SPACE = "500000"\n'\
+                     'DEPENDS:pn-core-image-minimal += "wic-tools"\n'\
+                     'IMAGE_FSTYPES += "wic"\n'\
+                     'WKS_FILE = "%s"\n' % wks.name
+            self.append_config(config)
+            bitbake('core-image-minimal')
 
-        finally:
-            os.environ['PATH'] = oldpath
+        """
+        the output of "wic ls <image>.wic" will look something like:
+            Num     Start        End          Size      Fstype
+             1         17408    136332287    136314880  ext4
+             2     136332288    171464703     35132416  ext4
+        we are looking for the size of partition 2
+        i.e. in this case the number 35,132,416
+        without the fix the size will be around 85,403,648
+        with the fix the size should be around 799,960,064
+        """
+        bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'MACHINE'], 'core-image-minimal')
+        deploy_dir = bb_vars['DEPLOY_DIR_IMAGE']
+        machine = bb_vars['MACHINE']
+        nativesysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+        wicout = glob(os.path.join(deploy_dir, "core-image-minimal-%s.rootfs-*.wic" % machine))[0]
+        size_of_root_partition = int(runCmd("wic ls %s --native-sysroot %s" % (wicout, nativesysroot)).output.split('\n')[2].split()[3])
+        self.assertGreater(size_of_root_partition, 500000000)
 
     def test_include_path(self):
         """Test --include-path wks option."""