Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Arnout Vandecappelle via buildroot <buildroot@buildroot.org>
To: Julien Olivain <ju.o@free.fr>
Cc: Arnout Vandecappelle <arnout@rnout.be>, buildroot@buildroot.org
Subject: Re: [Buildroot] [PATCH 3/3] support/testing: new kvmtool runtime test
Date: Wed,  7 Jan 2026 18:49:34 +0100	[thread overview]
Message-ID: <20260107174934.225366-1-arnout@rnout.be> (raw)
In-Reply-To: <20251216231456.347739-3-ju.o@free.fr>

In reply of:
> Signed-off-by: Julien Olivain <ju.o@free.fr>

Applied to 2025.02.x and 2025.11.x. Thanks

> ---
> Patch series tested in:
> https://gitlab.com/jolivain/buildroot/-/jobs/12462463585
> ---
>  DEVELOPERS                                    |  2 +
>  support/testing/tests/package/test_kvmtool.py | 97 +++++++++++++++++++
>  .../package/test_kvmtool/linux-kvm.fragment   |  6 ++
>  .../rootfs-overlay/etc/profile.d/stty-raw.sh  |  3 +
>  4 files changed, 108 insertions(+)
>  create mode 100644 support/testing/tests/package/test_kvmtool.py
>  create mode 100644 support/testing/tests/package/test_kvmtool/linux-kvm.fragment
>  create mode 100644 support/testing/tests/package/test_kvmtool/rootfs-overlay/etc/profile.d/stty-raw.sh
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 1b27df9beb..ca2cb44b87 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -1926,6 +1926,8 @@ F:	support/testing/tests/package/test_kmod.py
>  F:	support/testing/tests/package/test_kmod/
>  F:	support/testing/tests/package/test_kmscube.py
>  F:	support/testing/tests/package/test_kmscube/
> +F:	support/testing/tests/package/test_kvmtool.py
> +F:	support/testing/tests/package/test_kvmtool/
>  F:	support/testing/tests/package/test_lame.py
>  F:	support/testing/tests/package/test_less.py
>  F:	support/testing/tests/package/test_libcamera.py
> diff --git a/support/testing/tests/package/test_kvmtool.py b/support/testing/tests/package/test_kvmtool.py
> new file mode 100644
> index 0000000000..d6859172bd
> --- /dev/null
> +++ b/support/testing/tests/package/test_kvmtool.py
> @@ -0,0 +1,97 @@
> +import os
> +
> +import infra.basetest
> +
> +
> +class TestKvmTool(infra.basetest.BRTest):
> +    # This test passes the Buildroot image directory to the emulated
> +    # guest using the 9p virtiofs. This guest enables the
> +    # virtualization support. It will start a nested KVM virtual
> +    # machine, using the same Kernel/initramfs images. For these
> +    # reasons, we need a specific kernel configuration that enables
> +    # KVM and 9P.
> +    kern_frag = \
> +        infra.filepath("tests/package/test_kvmtool/linux-kvm.fragment")
> +    rootfs_overlay = \
> +        infra.filepath("tests/package/test_kvmtool/rootfs-overlay")
> +    config = \
> +        f"""
> +        BR2_aarch64=y
> +        BR2_TOOLCHAIN_EXTERNAL=y
> +        BR2_LINUX_KERNEL=y
> +        BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> +        BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.1"
> +        BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
> +        BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
> +        BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{kern_frag}"
> +        BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
> +        BR2_PACKAGE_KVMTOOL=y
> +        BR2_ROOTFS_OVERLAY="{rootfs_overlay}"
> +        BR2_TARGET_ROOTFS_CPIO=y
> +        # BR2_TARGET_ROOTFS_TAR is not set
> +        """
> +
> +    def test_run(self):
> +        img = os.path.join(self.builddir, "images", "rootfs.cpio")
> +        kern = os.path.join(self.builddir, "images", "Image")
> +        img_dir = os.path.join(self.builddir, "images")
> +        virtfs_tag = "br-imgs"
> +        virtfs_opts = [
> +            f"local,path={img_dir}",
> +            f"mount_tag={virtfs_tag}",
> +            "security_model=mapped-xattr",
> +            "readonly"
> +        ]
> +        qemu_opts = ["-M", "virt,gic-version=3,virtualization=on",
> +                     "-cpu", "cortex-a57",
> +                     "-smp", "4",
> +                     "-m", "1G",
> +                     "-virtfs", ','.join(virtfs_opts),
> +                     "-initrd", img]
> +        self.emulator.boot(arch="aarch64",
> +                           kernel=kern,
> +                           options=qemu_opts)
> +        self.emulator.login()
> +
> +        # Test the program can execute.
> +        self.assertRunOk("lkvm --version")
> +
> +        # We mount the virtfs to get the Kernel and initramfs from the
> +        # test host.
> +        self.assertRunOk(f"mount -t 9p {virtfs_tag} /mnt/")
> +
> +        # We define an arbitrary kernel command line argument that we
> +        # will use to detect we are in our virtual machine.
> +        kvm_karg = "br-kvm"
> +
> +        # The number of CPU of our virtual machine
> +        kvm_nproc = 2
> +
> +        # We run the KVM virtual machine
> +        cmd = "lkvm run"
> +        cmd += " --kernel /mnt/Image"
> +        cmd += " --initrd /mnt/rootfs.cpio"
> +        cmd += f" --cpus {kvm_nproc}"
> +        cmd += " --mem 320M"
> +        cmd += " --console virtio"
> +        cmd += " --irqchip gicv3"
> +        cmd += f" --params {kvm_karg}"
> +
> +        # We use qemu.sendline() to run the command because the
> +        # program will not return an exit code. The command "lkvm run"
> +        # will spawn the new virtual machine console. The login is
> +        # expected to be reached after the command is issued.
> +        self.emulator.qemu.sendline(cmd)
> +
> +        # We login in the virtual machine.
> +        self.emulator.login()
> +
> +        # We check we can see our kernel argument.
> +        out, ret = self.emulator.run("cat /proc/cmdline")
> +        self.assertEqual(ret, 0)
> +        self.assertIn(kvm_karg, out[0])
> +
> +        # We check the virtual machine has the expected number of CPU.
> +        out, ret = self.emulator.run("nproc")
> +        self.assertEqual(ret, 0)
> +        self.assertEqual(int(out[0]), kvm_nproc)
> diff --git a/support/testing/tests/package/test_kvmtool/linux-kvm.fragment b/support/testing/tests/package/test_kvmtool/linux-kvm.fragment
> new file mode 100644
> index 0000000000..8058ac41c3
> --- /dev/null
> +++ b/support/testing/tests/package/test_kvmtool/linux-kvm.fragment
> @@ -0,0 +1,6 @@
> +CONFIG_VIRTUALIZATION=y
> +CONFIG_KVM=y
> +CONFIG_NET_9P=y
> +CONFIG_NET_9P_VIRTIO=y
> +CONFIG_9P_FS=y
> +CONFIG_9P_FS_POSIX_ACL=y
> diff --git a/support/testing/tests/package/test_kvmtool/rootfs-overlay/etc/profile.d/stty-raw.sh b/support/testing/tests/package/test_kvmtool/rootfs-overlay/etc/profile.d/stty-raw.sh
> new file mode 100644
> index 0000000000..24d72995e6
> --- /dev/null
> +++ b/support/testing/tests/package/test_kvmtool/rootfs-overlay/etc/profile.d/stty-raw.sh
> @@ -0,0 +1,3 @@
> +# Avoid double-cooking the terminal, otherwise the test infrastructure
> +# would not be able to retrieve return codes properly.
> +grep -Fq br-kvm /proc/cmdline && stty raw
> -- 
> 2.52.0
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  reply	other threads:[~2026-01-07 17:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-16 23:14 [Buildroot] [PATCH 1/3] package/kvmtool: remove unneeded KVMTOOL_EXTRA_LDFLAGS Julien Olivain via buildroot
2025-12-16 23:14 ` [Buildroot] [PATCH 2/3] package/kvmtool: bump to git version 7ad32e5514 Julien Olivain via buildroot
2025-12-16 23:14 ` [Buildroot] [PATCH 3/3] support/testing: new kvmtool runtime test Julien Olivain via buildroot
2026-01-07 17:49   ` Arnout Vandecappelle via buildroot [this message]
2025-12-28 22:23 ` [Buildroot] [PATCH 1/3] package/kvmtool: remove unneeded KVMTOOL_EXTRA_LDFLAGS Thomas Petazzoni via buildroot
2026-01-07 17:49 ` Arnout Vandecappelle via buildroot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260107174934.225366-1-arnout@rnout.be \
    --to=buildroot@buildroot.org \
    --cc=arnout@rnout.be \
    --cc=ju.o@free.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox