* [PATCH] meta/lib/oeqa/selftest/cases/wic: Add tests for kernel
2023-02-07 19:03 [PATCH] wic/plugins/source/bootimg-efi: Configure installation of Kareem Zarka
@ 2023-02-07 19:03 ` Kareem Zarka
2023-02-08 22:20 ` [OE-core] [PATCH] wic/plugins/source/bootimg-efi: Configure installation of Luca Ceresoli
1 sibling, 0 replies; 3+ messages in thread
From: Kareem Zarka @ 2023-02-07 19:03 UTC (permalink / raw)
To: openembedded-core; +Cc: Kareem Zarka, Stefan Schmidt, Kareem Zarka
This commit adds two tests for the WIC plugin:
- test_skip_kernel_install: This test verifies that the kernel is not
installed in the boot partition when the 'install-kernel-into-boot-dir'
parameter is set to false.
- test_kernel_install: This test verifies that the kernel is installed
in the boot partition when the 'install-kernel-into-boot-dir' parameter
is set to true.
Both tests use a WKS (Kickstart) file to specify the desired
configuration, build a disk image using WIC,
and extract the disk image to a temporary directory to verify the
results.
Signed-off-by: Kareem Zarka <kareem.zarka@huawei.com>
---
meta/lib/oeqa/selftest/cases/wic.py | 67 +++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/meta/lib/oeqa/selftest/cases/wic.py b/meta/lib/oeqa/selftest/cases/wic.py
index ca1abb970a..251b61fa67 100644
--- a/meta/lib/oeqa/selftest/cases/wic.py
+++ b/meta/lib/oeqa/selftest/cases/wic.py
@@ -16,6 +16,7 @@ import hashlib
from glob import glob
from shutil import rmtree, copy
from tempfile import NamedTemporaryFile
+from tempfile import TemporaryDirectory
from oeqa.selftest.case import OESelftestTestCase
from oeqa.core.decorator import OETestTag
@@ -228,6 +229,72 @@ class Wic(WicTestCase):
runCmd(cmd)
self.assertEqual(1, len(glob(os.path.join(self.resultdir, "sdimage-bootpart-*direct"))))
+ def test_skip_kernel_install(self):
+ """Test the functionality of not installing the kernel in the boot directory using the wic plugin"""
+ # create a temporary file for the WKS content
+ with NamedTemporaryFile("w", suffix=".wks") as wks:
+ wks.write(
+ 'part --source bootimg-efi '
+ '--sourceparams="loader=grub-efi,install-kernel-into-boot-dir=false" '
+ '--label boot --active\n'
+ )
+ wks.flush()
+ # create a temporary directory to extract the disk image to
+ with TemporaryDirectory() as tmpdir:
+ img = 'core-image-minimal'
+ # build the image using the WKS file
+ cmd = "wic create %s -e %s -o %s" % (
+ wks.name, img, self.resultdir)
+ runCmd(cmd)
+ wksname = os.path.splitext(os.path.basename(wks.name))[0]
+ out = glob(os.path.join(
+ self.resultdir, "%s-*.direct" % wksname))
+ self.assertEqual(1, len(out))
+ # extract the content of the disk image to the temporary directory
+ cmd = "wic cp %s:1 %s" % (out[0], tmpdir)
+ runCmd(cmd)
+ # check if the kernel is installed or not
+ kimgtype = get_bb_var('KERNEL_IMAGETYPE', img)
+ for file in os.listdir(tmpdir):
+ if file == kimgtype:
+ raise AssertionError(
+ "The kernel image '{}' was found in\
+ the partition".format(kimgtype)
+ )
+
+ def test_kernel_install(self):
+ """Test the installation of the kernel to the boot directory in the wic plugin"""
+ # create a temporary file for the WKS content
+ with NamedTemporaryFile("w", suffix=".wks") as wks:
+ wks.write(
+ 'part --source bootimg-efi '
+ '--sourceparams="loader=grub-efi,install-kernel-into-boot-dir=true" '
+ '--label boot --active\n'
+ )
+ wks.flush()
+ # create a temporary directory to extract the disk image to
+ with TemporaryDirectory() as tmpdir:
+ img = 'core-image-minimal'
+ # build the image using the WKS file
+ cmd = "wic create %s -e %s -o %s" % (wks.name, img, self.resultdir)
+ runCmd(cmd)
+ wksname = os.path.splitext(os.path.basename(wks.name))[0]
+ out = glob(os.path.join(self.resultdir, "%s-*.direct" % wksname))
+ self.assertEqual(1, len(out))
+ # extract the content of the disk image to the temporary directory
+ cmd = "wic cp %s:1 %s" % (out[0], tmpdir)
+ runCmd(cmd)
+ # check if the kernel is installed or not
+ kimgtype = get_bb_var('KERNEL_IMAGETYPE', img)
+ found = False
+ for file in os.listdir(tmpdir):
+ if file == kimgtype:
+ found = True
+ break
+ self.assertTrue(
+ found, "The kernel image was not found in the boot partition"
+ )
+
# TODO this doesn't have to be x86-specific
@skipIfNotArch(['i586', 'i686', 'x86_64'])
def test_default_output_dir(self):
--
2.25.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [OE-core] [PATCH] wic/plugins/source/bootimg-efi: Configure installation of
2023-02-07 19:03 [PATCH] wic/plugins/source/bootimg-efi: Configure installation of Kareem Zarka
2023-02-07 19:03 ` [PATCH] meta/lib/oeqa/selftest/cases/wic: Add tests for kernel Kareem Zarka
@ 2023-02-08 22:20 ` Luca Ceresoli
1 sibling, 0 replies; 3+ messages in thread
From: Luca Ceresoli @ 2023-02-08 22:20 UTC (permalink / raw)
To: Kareem Zarka; +Cc: openembedded-core, Stefan Schmidt, Kareem Zarka
Hi Kareem,
On Tue, 7 Feb 2023 20:03:04 +0100
"Kareem Zarka" <zarkakareem@gmail.com> wrote:
> The issue with installing the kernel image to both rootfs
> and boot partition is that some systems rely on the kernel image in
> rootfs and not in the boot partition.
> This leads to duplication of the kernel image, which can cause
> unnecessary storage usage.
>
> This patch provides a solution to the problem by adding a new parameter
> "install-kernel-into-boot-dir" to the wic kickstart file.
> If this parameter is set to 'true', the plugin will install the
> kernel image to the boot partition. If the parameter is set to 'false',
> the plugin will skip installing the kernel image, avoiding duplication.
>
> Tests for this functionality will be added in the next patch.
>
> Signed-off-by: Kareem Zarka <kareem.zarka@huawei.com>
I think your subject line is missing something: "Configure installation
of.. what?"
About the content, testing on the autobuilders with these patches
revealed this error:
AssertionError: Command 'wic cp /home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-3401455/wic-tmp/tmp7rdi3u6g-202302081514-sda.direct:1 /tmp/tmpenbv64e3' returned non-zero exit status 1:
ERROR: Can't find executable 'mcopy'
Can you check that?
Here are some logs:
https://autobuilder.yoctoproject.org/typhoon/#/builders/127/builds/929/steps/14/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/4726/steps/14/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/86/builds/4778/steps/14/logs/stdio
Best regards,
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 3+ messages in thread