* [PATCH 0/6] testing/next: libvirt-ci, tests/vm and vbsa functional test
@ 2026-02-13 15:48 Alex Bennée
2026-02-13 15:48 ` [PATCH 1/6] tests: bump libvirt-ci to latest state Alex Bennée
` (5 more replies)
0 siblings, 6 replies; 16+ messages in thread
From: Alex Bennée @ 2026-02-13 15:48 UTC (permalink / raw)
To: qemu-devel
Cc: Brad Smith, Alex Bennée, Warner Losh,
Philippe Mathieu-Daudé, Thomas Huth, Kyle Evans,
Peter Maydell, qemu-arm
While I was looking at Jon's python patches I noticed some failures
with getting OpenBSD up and running. In pulling that thread I found a
few other bits to fix and up revved the image and converted it to use
lci-tool data like FreeBSD does.
I've also added the VBSA conformance test for Arm virt machines to the
functional tests. This just adds the UEFI based tests as the full
suite needs kernel modules and a userspace app which I think I have to
build.
Alex.
Alex Bennée (6):
tests: bump libvirt-ci to latest state
tests/vm: bump OpenBSD to the current 7.8 release
tests/vm: remove unused import
tests/vm: fix interactive boot
tests/vm: build openbsd from lcitool data (!567)
tests/functional: add Arm VBSA uefi conformance test
tests/docker/dockerfiles/alpine.docker | 4 +-
tests/docker/dockerfiles/centos9.docker | 240 ++++++++--------
.../dockerfiles/fedora-rust-nightly.docker | 262 +++++++++---------
.../dockerfiles/fedora-win64-cross.docker | 162 +++++------
tests/docker/dockerfiles/fedora.docker | 262 +++++++++---------
tests/functional/aarch64/meson.build | 1 +
tests/functional/aarch64/test_virt_vbsa.py | 99 +++++++
tests/lcitool/libvirt-ci | 2 +-
tests/lcitool/refresh | 13 +-
tests/vm/Makefile.include | 2 +-
tests/vm/generated/openbsd.json | 27 ++
tests/vm/openbsd | 44 +--
12 files changed, 605 insertions(+), 513 deletions(-)
create mode 100755 tests/functional/aarch64/test_virt_vbsa.py
create mode 100644 tests/vm/generated/openbsd.json
--
2.47.3
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/6] tests: bump libvirt-ci to latest state
2026-02-13 15:48 [PATCH 0/6] testing/next: libvirt-ci, tests/vm and vbsa functional test Alex Bennée
@ 2026-02-13 15:48 ` Alex Bennée
2026-02-13 18:41 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 2/6] tests/vm: bump OpenBSD to the current 7.8 release Alex Bennée
` (4 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: Alex Bennée @ 2026-02-13 15:48 UTC (permalink / raw)
To: qemu-devel
Cc: Brad Smith, Alex Bennée, Warner Losh,
Philippe Mathieu-Daudé, Thomas Huth, Kyle Evans,
Peter Maydell, qemu-arm
This entails updating alpine and fedora images to more recent versions
as well as the missing macos-14.vars update missed from last time.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/docker/dockerfiles/alpine.docker | 4 +-
tests/docker/dockerfiles/centos9.docker | 240 ++++++++--------
.../dockerfiles/fedora-rust-nightly.docker | 262 +++++++++---------
.../dockerfiles/fedora-win64-cross.docker | 162 +++++------
tests/docker/dockerfiles/fedora.docker | 262 +++++++++---------
tests/lcitool/libvirt-ci | 2 +-
tests/lcitool/refresh | 8 +-
7 files changed, 470 insertions(+), 470 deletions(-)
diff --git a/tests/docker/dockerfiles/alpine.docker b/tests/docker/dockerfiles/alpine.docker
index 03dd6851f60..76d8dd8cfc7 100644
--- a/tests/docker/dockerfiles/alpine.docker
+++ b/tests/docker/dockerfiles/alpine.docker
@@ -1,10 +1,10 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile --layers all alpine-321 qemu
+# $ lcitool dockerfile --layers all alpine-323 qemu
#
# https://gitlab.com/libvirt/libvirt-ci
-FROM docker.io/library/alpine:3.21
+FROM docker.io/library/alpine:3.23
RUN apk update && \
apk upgrade && \
diff --git a/tests/docker/dockerfiles/centos9.docker b/tests/docker/dockerfiles/centos9.docker
index 670e22be5ad..90ac1f7fade 100644
--- a/tests/docker/dockerfiles/centos9.docker
+++ b/tests/docker/dockerfiles/centos9.docker
@@ -6,126 +6,126 @@
FROM quay.io/centos/centos:stream9
-RUN dnf distro-sync -y && \
- dnf install 'dnf-command(config-manager)' -y && \
- dnf config-manager --set-enabled -y crb && \
- dnf install -y epel-release && \
- dnf install -y epel-next-release && \
- dnf install -y \
- SDL2-devel \
- alsa-lib-devel \
- bash \
- bc \
- bindgen-cli \
- bison \
- brlapi-devel \
- bzip2 \
- bzip2-devel \
- ca-certificates \
- capstone-devel \
- ccache \
- clang \
- compiler-rt \
- coreutils-single \
- ctags \
- cyrus-sasl-devel \
- daxctl-devel \
- dbus-daemon \
- device-mapper-multipath-devel \
- diffutils \
- findutils \
- flex \
- fuse3-devel \
- gcc \
- gettext \
- git \
- glib2-devel \
- glib2-static \
- glibc-langpack-en \
- glibc-static \
- gnutls-devel \
- gtk3-devel \
- hostname \
- jemalloc-devel \
- json-c-devel \
- libaio-devel \
- libasan \
- libattr-devel \
- libbpf-devel \
- libcacard-devel \
- libcap-ng-devel \
- libcmocka-devel \
- libcurl-devel \
- libdrm-devel \
- libepoxy-devel \
- libfdt-devel \
- libffi-devel \
- libgcrypt-devel \
- libiscsi-devel \
- libjpeg-devel \
- libnfs-devel \
- libpmem-devel \
- libpng-devel \
- librbd-devel \
- libseccomp-devel \
- libselinux-devel \
- libslirp-devel \
- libssh-devel \
- libtasn1-devel \
- libubsan \
- liburing-devel \
- libusbx-devel \
- libxdp-devel \
- libzstd-devel \
- llvm \
- lttng-ust-devel \
- lzo-devel \
- make \
- mesa-libgbm-devel \
- meson \
- mtools \
- ncurses-devel \
- nettle-devel \
- ninja-build \
- nmap-ncat \
- numactl-devel \
- openssh-clients \
- pam-devel \
- pcre-static \
- pipewire-devel \
- pixman-devel \
- pkgconfig \
- pulseaudio-libs-devel \
- python3 \
- python3-PyYAML \
- python3-numpy \
- python3-pillow \
- python3-pip \
- python3-sphinx \
- python3-sphinx_rtd_theme \
- python3-tomli \
- rdma-core-devel \
- rust \
- rust-std-static \
- sed \
- snappy-devel \
- socat \
- spice-protocol \
- swtpm \
- systemd-devel \
- systemtap-sdt-devel \
- tar \
- usbredir-devel \
- util-linux \
- vte291-devel \
- vulkan-tools \
- which \
- xorriso \
- zlib-devel \
- zlib-static \
- zstd && \
- dnf autoremove -y && \
- dnf clean all -y && \
+RUN dnf --quiet distro-sync -y && \
+ dnf --quiet install 'dnf-command(config-manager)' -y && \
+ dnf --quiet config-manager --set-enabled -y crb && \
+ dnf --quiet install -y epel-release && \
+ dnf --quiet install -y epel-next-release && \
+ dnf --quiet install -y \
+ SDL2-devel \
+ alsa-lib-devel \
+ bash \
+ bc \
+ bindgen-cli \
+ bison \
+ brlapi-devel \
+ bzip2 \
+ bzip2-devel \
+ ca-certificates \
+ capstone-devel \
+ ccache \
+ clang \
+ compiler-rt \
+ coreutils-single \
+ ctags \
+ cyrus-sasl-devel \
+ daxctl-devel \
+ dbus-daemon \
+ device-mapper-multipath-devel \
+ diffutils \
+ findutils \
+ flex \
+ fuse3-devel \
+ gcc \
+ gettext \
+ git \
+ glib2-devel \
+ glib2-static \
+ glibc-langpack-en \
+ glibc-static \
+ gnutls-devel \
+ gtk3-devel \
+ hostname \
+ jemalloc-devel \
+ json-c-devel \
+ libaio-devel \
+ libasan \
+ libattr-devel \
+ libbpf-devel \
+ libcacard-devel \
+ libcap-ng-devel \
+ libcmocka-devel \
+ libcurl-devel \
+ libdrm-devel \
+ libepoxy-devel \
+ libfdt-devel \
+ libffi-devel \
+ libgcrypt-devel \
+ libiscsi-devel \
+ libjpeg-devel \
+ libnfs-devel \
+ libpmem-devel \
+ libpng-devel \
+ librbd-devel \
+ libseccomp-devel \
+ libselinux-devel \
+ libslirp-devel \
+ libssh-devel \
+ libtasn1-devel \
+ libubsan \
+ liburing-devel \
+ libusbx-devel \
+ libxdp-devel \
+ libzstd-devel \
+ llvm \
+ lttng-ust-devel \
+ lzo-devel \
+ make \
+ mesa-libgbm-devel \
+ meson \
+ mtools \
+ ncurses-devel \
+ nettle-devel \
+ ninja-build \
+ nmap-ncat \
+ numactl-devel \
+ openssh-clients \
+ pam-devel \
+ pcre-static \
+ pipewire-devel \
+ pixman-devel \
+ pkgconfig \
+ pulseaudio-libs-devel \
+ python3 \
+ python3-PyYAML \
+ python3-numpy \
+ python3-pillow \
+ python3-pip \
+ python3-sphinx \
+ python3-sphinx_rtd_theme \
+ python3-tomli \
+ rdma-core-devel \
+ rust \
+ rust-std-static \
+ sed \
+ snappy-devel \
+ socat \
+ spice-protocol \
+ swtpm \
+ systemd-devel \
+ systemtap-sdt-devel \
+ tar \
+ usbredir-devel \
+ util-linux \
+ vte291-devel \
+ vulkan-tools \
+ which \
+ xorriso \
+ zlib-devel \
+ zlib-static \
+ zstd && \
+ dnf --quiet autoremove -y && \
+ dnf --quiet clean all -y && \
rm -f /usr/lib*/python3*/EXTERNALLY-MANAGED && \
rpm -qa | sort > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
diff --git a/tests/docker/dockerfiles/fedora-rust-nightly.docker b/tests/docker/dockerfiles/fedora-rust-nightly.docker
index 8e3b3a9fd90..043b42a0a9b 100644
--- a/tests/docker/dockerfiles/fedora-rust-nightly.docker
+++ b/tests/docker/dockerfiles/fedora-rust-nightly.docker
@@ -1,12 +1,12 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile --layers all fedora-41 qemu
+# $ lcitool dockerfile --layers all fedora-43 qemu
#
# https://gitlab.com/libvirt/libvirt-ci
-FROM registry.fedoraproject.org/fedora:41
+FROM registry.fedoraproject.org/fedora:43
-RUN dnf install -y nosync && \
+RUN dnf --quiet install -y nosync && \
printf '#!/bin/sh\n\
if test -d /usr/lib64\n\
then\n\
@@ -16,134 +16,134 @@ else\n\
fi\n\
exec "$@"\n' > /usr/bin/nosync && \
chmod +x /usr/bin/nosync && \
- nosync dnf update -y && \
- nosync dnf install -y \
- SDL2-devel \
- SDL2_image-devel \
- alsa-lib-devel \
- bash \
- bc \
- bindgen-cli \
- bison \
- brlapi-devel \
- bzip2 \
- bzip2-devel \
- ca-certificates \
- capstone-devel \
- ccache \
- clang \
- compiler-rt \
- coreutils \
- ctags \
- cyrus-sasl-devel \
- daxctl-devel \
- dbus-daemon \
- device-mapper-multipath-devel \
- diffutils \
- findutils \
- flex \
- fuse3-devel \
- gcc \
- gcovr \
- gettext \
- git \
- glib2-devel \
- glib2-static \
- glibc-langpack-en \
- glibc-static \
- glusterfs-api-devel \
- gnutls-devel \
- gtk-vnc2-devel \
- gtk3-devel \
- hostname \
- jemalloc-devel \
- json-c-devel \
- libaio-devel \
- libasan \
- libattr-devel \
- libbpf-devel \
- libcacard-devel \
- libcap-ng-devel \
- libcbor-devel \
- libcmocka-devel \
- libcurl-devel \
- libdrm-devel \
- libepoxy-devel \
- libfdt-devel \
- libffi-devel \
- libgcrypt-devel \
- libiscsi-devel \
- libjpeg-devel \
- libnfs-devel \
- libpmem-devel \
- libpng-devel \
- librbd-devel \
- libseccomp-devel \
- libselinux-devel \
- libslirp-devel \
- libssh-devel \
- libtasn1-devel \
- libubsan \
- liburing-devel \
- libusbx-devel \
- libxdp-devel \
- libzstd-devel \
- llvm \
- lttng-ust-devel \
- lzo-devel \
- make \
- mesa-libgbm-devel \
- mtools \
- ncurses-devel \
- nettle-devel \
- ninja-build \
- nmap-ncat \
- numactl-devel \
- openssh-clients \
- pam-devel \
- pcre2-static \
- pipewire-devel \
- pixman-devel \
- pkgconfig \
- pulseaudio-libs-devel \
- python3 \
- python3-PyYAML \
- python3-numpy \
- python3-opencv \
- python3-pillow \
- python3-pip \
- python3-setuptools \
- python3-sphinx \
- python3-sphinx_rtd_theme \
- python3-wheel \
- rdma-core-devel \
- rust \
- rust-std-static \
- sed \
- snappy-devel \
- socat \
- sparse \
- spice-protocol \
- spice-server-devel \
- swtpm \
- systemd-devel \
- systemtap-sdt-dtrace \
- tar \
- tesseract \
- tesseract-langpack-eng \
- usbredir-devel \
- util-linux \
- virglrenderer-devel \
- vte291-devel \
- vulkan-tools \
- which \
- xen-devel \
- xorriso \
- zlib-devel \
- zlib-static \
- zstd && \
- nosync dnf autoremove -y && \
- nosync dnf clean all -y && \
+ nosync dnf --quiet update -y && \
+ nosync dnf --quiet install -y \
+ SDL2_image-devel \
+ alsa-lib-devel \
+ bash \
+ bc \
+ bindgen-cli \
+ bison \
+ brlapi-devel \
+ bzip2 \
+ bzip2-devel \
+ ca-certificates \
+ capstone-devel \
+ ccache \
+ clang \
+ compiler-rt \
+ coreutils \
+ ctags \
+ cyrus-sasl-devel \
+ daxctl-devel \
+ dbus-daemon \
+ device-mapper-multipath-devel \
+ diffutils \
+ findutils \
+ flex \
+ fuse3-devel \
+ gcc \
+ gcovr \
+ gettext \
+ git \
+ glib2-devel \
+ glib2-static \
+ glibc-langpack-en \
+ glibc-static \
+ glusterfs-api-devel \
+ gnutls-devel \
+ gtk-vnc2-devel \
+ gtk3-devel \
+ hostname \
+ jemalloc-devel \
+ json-c-devel \
+ libaio-devel \
+ libasan \
+ libattr-devel \
+ libbpf-devel \
+ libcacard-devel \
+ libcap-ng-devel \
+ libcbor-devel \
+ libcmocka-devel \
+ libcurl-devel \
+ libdrm-devel \
+ libepoxy-devel \
+ libfdt-devel \
+ libffi-devel \
+ libgcrypt-devel \
+ libiscsi-devel \
+ libjpeg-devel \
+ libnfs-devel \
+ libpmem-devel \
+ libpng-devel \
+ librbd-devel \
+ libseccomp-devel \
+ libselinux-devel \
+ libslirp-devel \
+ libssh-devel \
+ libtasn1-devel \
+ libubsan \
+ liburing-devel \
+ libusbx-devel \
+ libxdp-devel \
+ libzstd-devel \
+ llvm \
+ lttng-ust-devel \
+ lzo-devel \
+ make \
+ mesa-libgbm-devel \
+ mtools \
+ ncurses-devel \
+ nettle-devel \
+ ninja-build \
+ nmap-ncat \
+ numactl-devel \
+ openssh-clients \
+ pam-devel \
+ pcre2-static \
+ pipewire-devel \
+ pixman-devel \
+ pkgconfig \
+ pulseaudio-libs-devel \
+ python3 \
+ python3-PyYAML \
+ python3-numpy \
+ python3-opencv \
+ python3-pillow \
+ python3-pip \
+ python3-setuptools \
+ python3-sphinx \
+ python3-sphinx_rtd_theme \
+ python3-wheel \
+ rdma-core-devel \
+ rust \
+ rust-std-static \
+ sdl2-compat-devel \
+ sed \
+ snappy-devel \
+ socat \
+ sparse \
+ spice-protocol \
+ spice-server-devel \
+ swtpm \
+ systemd-devel \
+ systemtap-sdt-dtrace \
+ tar \
+ tesseract \
+ tesseract-langpack-eng \
+ usbredir-devel \
+ util-linux \
+ virglrenderer-devel \
+ vte291-devel \
+ vulkan-tools \
+ which \
+ xen-devel \
+ xorriso \
+ zlib-devel \
+ zlib-static \
+ zstd && \
+ nosync dnf --quiet autoremove -y && \
+ nosync dnf --quiet clean all -y && \
rm -f /usr/lib*/python3*/EXTERNALLY-MANAGED && \
rpm -qa | sort > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
diff --git a/tests/docker/dockerfiles/fedora-win64-cross.docker b/tests/docker/dockerfiles/fedora-win64-cross.docker
index c5e1fcebf51..818485c4ba2 100644
--- a/tests/docker/dockerfiles/fedora-win64-cross.docker
+++ b/tests/docker/dockerfiles/fedora-win64-cross.docker
@@ -1,12 +1,12 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile --layers all --cross-arch mingw64 fedora-41 qemu,qemu-win-installer
+# $ lcitool dockerfile --layers all --cross-arch mingw64 fedora-43 qemu,qemu-win-installer
#
# https://gitlab.com/libvirt/libvirt-ci
-FROM registry.fedoraproject.org/fedora:41
+FROM registry.fedoraproject.org/fedora:43
-RUN dnf install -y nosync && \
+RUN dnf --quiet install -y nosync && \
printf '#!/bin/sh\n\
if test -d /usr/lib64\n\
then\n\
@@ -16,59 +16,59 @@ else\n\
fi\n\
exec "$@"\n' > /usr/bin/nosync && \
chmod +x /usr/bin/nosync && \
- nosync dnf update -y && \
- nosync dnf install -y \
- bash \
- bc \
- bindgen-cli \
- bison \
- bzip2 \
- ca-certificates \
- ccache \
- compiler-rt \
- coreutils \
- ctags \
- dbus-daemon \
- diffutils \
- findutils \
- flex \
- gcc \
- gcovr \
- git \
- glib2-devel \
- glibc-langpack-en \
- hostname \
- llvm \
- make \
- mtools \
- ninja-build \
- nmap-ncat \
- openssh-clients \
- python3 \
- python3-PyYAML \
- python3-numpy \
- python3-opencv \
- python3-pillow \
- python3-pip \
- python3-setuptools \
- python3-sphinx \
- python3-sphinx_rtd_theme \
- python3-wheel \
- rust \
- sed \
- socat \
- sparse \
- swtpm \
- tar \
- tesseract \
- tesseract-langpack-eng \
- util-linux \
- vulkan-tools \
- which \
- xorriso \
- zstd && \
- nosync dnf autoremove -y && \
- nosync dnf clean all -y && \
+ nosync dnf --quiet update -y && \
+ nosync dnf --quiet install -y \
+ bash \
+ bc \
+ bindgen-cli \
+ bison \
+ bzip2 \
+ ca-certificates \
+ ccache \
+ compiler-rt \
+ coreutils \
+ ctags \
+ dbus-daemon \
+ diffutils \
+ findutils \
+ flex \
+ gcc \
+ gcovr \
+ git \
+ glib2-devel \
+ glibc-langpack-en \
+ hostname \
+ llvm \
+ make \
+ mtools \
+ ninja-build \
+ nmap-ncat \
+ openssh-clients \
+ python3 \
+ python3-PyYAML \
+ python3-numpy \
+ python3-opencv \
+ python3-pillow \
+ python3-pip \
+ python3-setuptools \
+ python3-sphinx \
+ python3-sphinx_rtd_theme \
+ python3-wheel \
+ rust \
+ sed \
+ socat \
+ sparse \
+ swtpm \
+ tar \
+ tesseract \
+ tesseract-langpack-eng \
+ util-linux \
+ vulkan-tools \
+ which \
+ xorriso \
+ zstd && \
+ nosync dnf --quiet autoremove -y && \
+ nosync dnf --quiet clean all -y && \
rm -f /usr/lib*/python3*/EXTERNALLY-MANAGED
RUN /usr/bin/pip3 install meson==1.8.1
@@ -79,31 +79,31 @@ ENV MAKE="/usr/bin/make"
ENV NINJA="/usr/bin/ninja"
ENV PYTHON="/usr/bin/python3"
-RUN nosync dnf install -y \
- mingw-w64-tools \
- mingw32-nsis \
- mingw64-SDL2 \
- mingw64-SDL2_image \
- mingw64-bzip2 \
- mingw64-curl \
- mingw64-gcc \
- mingw64-gcc-c++ \
- mingw64-gettext \
- mingw64-glib2 \
- mingw64-gnutls \
- mingw64-gtk-vnc2 \
- mingw64-gtk3 \
- mingw64-libepoxy \
- mingw64-libfdt \
- mingw64-libgcrypt \
- mingw64-libjpeg-turbo \
- mingw64-libpng \
- mingw64-libtasn1 \
- mingw64-nettle \
- mingw64-pixman \
- mingw64-pkg-config \
- rust-std-static-x86_64-pc-windows-gnu && \
- nosync dnf clean all -y && \
+RUN nosync dnf --quiet install -y \
+ mingw-w64-tools \
+ mingw32-nsis \
+ mingw64-SDL2 \
+ mingw64-SDL2_image \
+ mingw64-bzip2 \
+ mingw64-curl \
+ mingw64-gcc \
+ mingw64-gcc-c++ \
+ mingw64-gettext \
+ mingw64-glib2 \
+ mingw64-gnutls \
+ mingw64-gtk-vnc2 \
+ mingw64-gtk3 \
+ mingw64-libepoxy \
+ mingw64-libfdt \
+ mingw64-libgcrypt \
+ mingw64-libjpeg-turbo \
+ mingw64-libpng \
+ mingw64-libtasn1 \
+ mingw64-nettle \
+ mingw64-pixman \
+ mingw64-pkg-config \
+ rust-std-static-x86_64-pc-windows-gnu && \
+ nosync dnf --quiet clean all -y && \
rpm -qa | sort > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/x86_64-w64-mingw32-c++ && \
diff --git a/tests/docker/dockerfiles/fedora.docker b/tests/docker/dockerfiles/fedora.docker
index 9278d797693..32aaf01aff4 100644
--- a/tests/docker/dockerfiles/fedora.docker
+++ b/tests/docker/dockerfiles/fedora.docker
@@ -1,12 +1,12 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile --layers all fedora-41 qemu
+# $ lcitool dockerfile --layers all fedora-43 qemu
#
# https://gitlab.com/libvirt/libvirt-ci
-FROM registry.fedoraproject.org/fedora:41
+FROM registry.fedoraproject.org/fedora:43
-RUN dnf install -y nosync && \
+RUN dnf --quiet install -y nosync && \
printf '#!/bin/sh\n\
if test -d /usr/lib64\n\
then\n\
@@ -16,134 +16,134 @@ else\n\
fi\n\
exec "$@"\n' > /usr/bin/nosync && \
chmod +x /usr/bin/nosync && \
- nosync dnf update -y && \
- nosync dnf install -y \
- SDL2-devel \
- SDL2_image-devel \
- alsa-lib-devel \
- bash \
- bc \
- bindgen-cli \
- bison \
- brlapi-devel \
- bzip2 \
- bzip2-devel \
- ca-certificates \
- capstone-devel \
- ccache \
- clang \
- compiler-rt \
- coreutils \
- ctags \
- cyrus-sasl-devel \
- daxctl-devel \
- dbus-daemon \
- device-mapper-multipath-devel \
- diffutils \
- findutils \
- flex \
- fuse3-devel \
- gcc \
- gcovr \
- gettext \
- git \
- glib2-devel \
- glib2-static \
- glibc-langpack-en \
- glibc-static \
- glusterfs-api-devel \
- gnutls-devel \
- gtk-vnc2-devel \
- gtk3-devel \
- hostname \
- jemalloc-devel \
- json-c-devel \
- libaio-devel \
- libasan \
- libattr-devel \
- libbpf-devel \
- libcacard-devel \
- libcap-ng-devel \
- libcbor-devel \
- libcmocka-devel \
- libcurl-devel \
- libdrm-devel \
- libepoxy-devel \
- libfdt-devel \
- libffi-devel \
- libgcrypt-devel \
- libiscsi-devel \
- libjpeg-devel \
- libnfs-devel \
- libpmem-devel \
- libpng-devel \
- librbd-devel \
- libseccomp-devel \
- libselinux-devel \
- libslirp-devel \
- libssh-devel \
- libtasn1-devel \
- libubsan \
- liburing-devel \
- libusbx-devel \
- libxdp-devel \
- libzstd-devel \
- llvm \
- lttng-ust-devel \
- lzo-devel \
- make \
- mesa-libgbm-devel \
- mtools \
- ncurses-devel \
- nettle-devel \
- ninja-build \
- nmap-ncat \
- numactl-devel \
- openssh-clients \
- pam-devel \
- pcre2-static \
- pipewire-devel \
- pixman-devel \
- pkgconfig \
- pulseaudio-libs-devel \
- python3 \
- python3-PyYAML \
- python3-numpy \
- python3-opencv \
- python3-pillow \
- python3-pip \
- python3-setuptools \
- python3-sphinx \
- python3-sphinx_rtd_theme \
- python3-wheel \
- rdma-core-devel \
- rust \
- rust-std-static \
- sed \
- snappy-devel \
- socat \
- sparse \
- spice-protocol \
- spice-server-devel \
- swtpm \
- systemd-devel \
- systemtap-sdt-dtrace \
- tar \
- tesseract \
- tesseract-langpack-eng \
- usbredir-devel \
- util-linux \
- virglrenderer-devel \
- vte291-devel \
- vulkan-tools \
- which \
- xen-devel \
- xorriso \
- zlib-devel \
- zlib-static \
- zstd && \
- nosync dnf autoremove -y && \
- nosync dnf clean all -y && \
+ nosync dnf --quiet update -y && \
+ nosync dnf --quiet install -y \
+ SDL2_image-devel \
+ alsa-lib-devel \
+ bash \
+ bc \
+ bindgen-cli \
+ bison \
+ brlapi-devel \
+ bzip2 \
+ bzip2-devel \
+ ca-certificates \
+ capstone-devel \
+ ccache \
+ clang \
+ compiler-rt \
+ coreutils \
+ ctags \
+ cyrus-sasl-devel \
+ daxctl-devel \
+ dbus-daemon \
+ device-mapper-multipath-devel \
+ diffutils \
+ findutils \
+ flex \
+ fuse3-devel \
+ gcc \
+ gcovr \
+ gettext \
+ git \
+ glib2-devel \
+ glib2-static \
+ glibc-langpack-en \
+ glibc-static \
+ glusterfs-api-devel \
+ gnutls-devel \
+ gtk-vnc2-devel \
+ gtk3-devel \
+ hostname \
+ jemalloc-devel \
+ json-c-devel \
+ libaio-devel \
+ libasan \
+ libattr-devel \
+ libbpf-devel \
+ libcacard-devel \
+ libcap-ng-devel \
+ libcbor-devel \
+ libcmocka-devel \
+ libcurl-devel \
+ libdrm-devel \
+ libepoxy-devel \
+ libfdt-devel \
+ libffi-devel \
+ libgcrypt-devel \
+ libiscsi-devel \
+ libjpeg-devel \
+ libnfs-devel \
+ libpmem-devel \
+ libpng-devel \
+ librbd-devel \
+ libseccomp-devel \
+ libselinux-devel \
+ libslirp-devel \
+ libssh-devel \
+ libtasn1-devel \
+ libubsan \
+ liburing-devel \
+ libusbx-devel \
+ libxdp-devel \
+ libzstd-devel \
+ llvm \
+ lttng-ust-devel \
+ lzo-devel \
+ make \
+ mesa-libgbm-devel \
+ mtools \
+ ncurses-devel \
+ nettle-devel \
+ ninja-build \
+ nmap-ncat \
+ numactl-devel \
+ openssh-clients \
+ pam-devel \
+ pcre2-static \
+ pipewire-devel \
+ pixman-devel \
+ pkgconfig \
+ pulseaudio-libs-devel \
+ python3 \
+ python3-PyYAML \
+ python3-numpy \
+ python3-opencv \
+ python3-pillow \
+ python3-pip \
+ python3-setuptools \
+ python3-sphinx \
+ python3-sphinx_rtd_theme \
+ python3-wheel \
+ rdma-core-devel \
+ rust \
+ rust-std-static \
+ sdl2-compat-devel \
+ sed \
+ snappy-devel \
+ socat \
+ sparse \
+ spice-protocol \
+ spice-server-devel \
+ swtpm \
+ systemd-devel \
+ systemtap-sdt-dtrace \
+ tar \
+ tesseract \
+ tesseract-langpack-eng \
+ usbredir-devel \
+ util-linux \
+ virglrenderer-devel \
+ vte291-devel \
+ vulkan-tools \
+ which \
+ xen-devel \
+ xorriso \
+ zlib-devel \
+ zlib-static \
+ zstd && \
+ nosync dnf --quiet autoremove -y && \
+ nosync dnf --quiet clean all -y && \
rm -f /usr/lib*/python3*/EXTERNALLY-MANAGED && \
rpm -qa | sort > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
diff --git a/tests/lcitool/libvirt-ci b/tests/lcitool/libvirt-ci
index caed407a0f1..750455ce119 160000
--- a/tests/lcitool/libvirt-ci
+++ b/tests/lcitool/libvirt-ci
@@ -1 +1 @@
-Subproject commit caed407a0f1dfe3a3293a41c378c382deefbac36
+Subproject commit 750455ce1199db7e304a6b4feae5f290283dd52a
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index 01a71929542..8f0aa3fa343 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -215,12 +215,12 @@ try:
#
# Standard native builds
#
- generate_dockerfile("alpine", "alpine-321",
+ generate_dockerfile("alpine", "alpine-323",
trailer="".join(alpine_extras))
generate_dockerfile("centos9", "centos-stream-9")
generate_dockerfile("debian", "debian-13",
trailer="".join(debian13_extras))
- generate_dockerfile("fedora", "fedora-41")
+ generate_dockerfile("fedora", "fedora-43")
generate_dockerfile("opensuse-leap", "opensuse-leap-15")
generate_dockerfile("ubuntu2204", "ubuntu-2204",
trailer="".join(ubuntu2204_rust_extras),
@@ -230,7 +230,7 @@ try:
#
# Non-fatal Rust-enabled build
#
- generate_dockerfile("fedora-rust-nightly", "fedora-41",
+ generate_dockerfile("fedora-rust-nightly", "fedora-43",
trailer="".join(fedora_rustup_nightly_extras))
#
@@ -287,7 +287,7 @@ try:
trailer=cross_build("s390x-linux-gnu-",
"s390x-softmmu,s390x-linux-user"))
- generate_dockerfile("fedora-win64-cross", "fedora-41",
+ generate_dockerfile("fedora-win64-cross", "fedora-43",
project='qemu,qemu-win-installer',
cross="mingw64",
trailer=cross_build("x86_64-w64-mingw32-",
--
2.47.3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/6] tests/vm: bump OpenBSD to the current 7.8 release
2026-02-13 15:48 [PATCH 0/6] testing/next: libvirt-ci, tests/vm and vbsa functional test Alex Bennée
2026-02-13 15:48 ` [PATCH 1/6] tests: bump libvirt-ci to latest state Alex Bennée
@ 2026-02-13 15:48 ` Alex Bennée
2026-02-13 18:42 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 3/6] tests/vm: remove unused import Alex Bennée
` (3 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: Alex Bennée @ 2026-02-13 15:48 UTC (permalink / raw)
To: qemu-devel
Cc: Brad Smith, Alex Bennée, Warner Losh,
Philippe Mathieu-Daudé, Thomas Huth, Kyle Evans,
Peter Maydell, qemu-arm
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/vm/openbsd | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
index 2ea86a01bad..88b31dd9b59 100755
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -22,8 +22,8 @@ class OpenBSDVM(basevm.BaseVM):
name = "openbsd"
arch = "x86_64"
- link = "https://cdn.openbsd.org/pub/OpenBSD/7.7/amd64/install77.iso"
- csum = "da0106e39463f015524dca806f407c37a9bdd17e6dfffe533b06a2dd2edd8a27"
+ link = "https://cdn.openbsd.org/pub/OpenBSD/7.8/amd64/install78.iso"
+ csum = "a228d0a1ef558b4d9ec84c698f0d3ffd13cd38c64149487cba0f1ad873be07b2"
size = "20G"
pkgs = [
# tools
--
2.47.3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/6] tests/vm: remove unused import
2026-02-13 15:48 [PATCH 0/6] testing/next: libvirt-ci, tests/vm and vbsa functional test Alex Bennée
2026-02-13 15:48 ` [PATCH 1/6] tests: bump libvirt-ci to latest state Alex Bennée
2026-02-13 15:48 ` [PATCH 2/6] tests/vm: bump OpenBSD to the current 7.8 release Alex Bennée
@ 2026-02-13 15:48 ` Alex Bennée
2026-02-13 18:42 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 4/6] tests/vm: fix interactive boot Alex Bennée
` (2 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: Alex Bennée @ 2026-02-13 15:48 UTC (permalink / raw)
To: qemu-devel
Cc: Brad Smith, Alex Bennée, Warner Losh,
Philippe Mathieu-Daudé, Thomas Huth, Kyle Evans,
Peter Maydell, qemu-arm
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/vm/openbsd | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
index 88b31dd9b59..52565208965 100755
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -14,7 +14,6 @@
import os
import sys
-import socket
import subprocess
import basevm
--
2.47.3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 4/6] tests/vm: fix interactive boot
2026-02-13 15:48 [PATCH 0/6] testing/next: libvirt-ci, tests/vm and vbsa functional test Alex Bennée
` (2 preceding siblings ...)
2026-02-13 15:48 ` [PATCH 3/6] tests/vm: remove unused import Alex Bennée
@ 2026-02-13 15:48 ` Alex Bennée
2026-02-13 18:42 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 5/6] tests/vm: build openbsd from lcitool data (!567) Alex Bennée
2026-02-13 15:48 ` [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test Alex Bennée
5 siblings, 1 reply; 16+ messages in thread
From: Alex Bennée @ 2026-02-13 15:48 UTC (permalink / raw)
To: qemu-devel
Cc: Brad Smith, Alex Bennée, Warner Losh,
Philippe Mathieu-Daudé, Thomas Huth, Kyle Evans,
Peter Maydell, qemu-arm
For reasons still not clear to me passing the single dashed
-interactive would confuse the argument parsing enough we tried to
pass "nterative" as a string to the launch command causing failure and
head scratching.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/vm/Makefile.include | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
index 14188bba1c6..bf4b83d2a45 100644
--- a/tests/vm/Makefile.include
+++ b/tests/vm/Makefile.include
@@ -142,6 +142,6 @@ vm-boot-ssh-%: $(IMAGES_DIR)/%.img $(VM_VENV)
$(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \
$(if $(LOG_CONSOLE),--log-console) \
--image "$<" \
- $(if $(ROOT_USER),--interactive-root,-interactive) \
+ $(if $(ROOT_USER),--interactive-root,--interactive) \
false, \
" VM-BOOT-SSH $*") || true
--
2.47.3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 5/6] tests/vm: build openbsd from lcitool data (!567)
2026-02-13 15:48 [PATCH 0/6] testing/next: libvirt-ci, tests/vm and vbsa functional test Alex Bennée
` (3 preceding siblings ...)
2026-02-13 15:48 ` [PATCH 4/6] tests/vm: fix interactive boot Alex Bennée
@ 2026-02-13 15:48 ` Alex Bennée
2026-02-13 18:43 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test Alex Bennée
5 siblings, 1 reply; 16+ messages in thread
From: Alex Bennée @ 2026-02-13 15:48 UTC (permalink / raw)
To: qemu-devel
Cc: Brad Smith, Alex Bennée, Warner Losh,
Philippe Mathieu-Daudé, Thomas Huth, Kyle Evans,
Peter Maydell, qemu-arm
For now only use the minimal decadency set until all the OpenBSD
mappings can be divined.
Currently depends on: https://gitlab.com/libvirt/libvirt-ci/-/merge_requests/567
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/lcitool/libvirt-ci | 2 +-
tests/lcitool/refresh | 5 +++--
tests/vm/generated/openbsd.json | 27 +++++++++++++++++++++++
tests/vm/openbsd | 39 ++-------------------------------
4 files changed, 33 insertions(+), 40 deletions(-)
create mode 100644 tests/vm/generated/openbsd.json
diff --git a/tests/lcitool/libvirt-ci b/tests/lcitool/libvirt-ci
index 750455ce119..dedaa8ebb5d 160000
--- a/tests/lcitool/libvirt-ci
+++ b/tests/lcitool/libvirt-ci
@@ -1 +1 @@
-Subproject commit 750455ce1199db7e304a6b4feae5f290283dd52a
+Subproject commit dedaa8ebb5d743ba8906a87e623d90f33100aecd
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index 8f0aa3fa343..95344277c9a 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -87,9 +87,9 @@ def generate_cirrus(target, trailer=None):
generate(filename, cmd, trailer)
-def generate_pkglist(vm, target):
+def generate_pkglist(vm, target, project="qemu"):
filename = Path(src_dir, "tests", "vm", "generated", vm + ".json")
- cmd = lcitool_cmd + ["variables", "--format", "json", target, "qemu"]
+ cmd = lcitool_cmd + ["variables", "--format", "json", target, project]
generate(filename, cmd, None)
@@ -312,6 +312,7 @@ try:
# VM packages lists
#
generate_pkglist("freebsd", "freebsd-14")
+ generate_pkglist("openbsd", "openbsd-78", project="qemu-minimal")
#
# Ansible package lists
diff --git a/tests/vm/generated/openbsd.json b/tests/vm/generated/openbsd.json
new file mode 100644
index 00000000000..0886afd0d3d
--- /dev/null
+++ b/tests/vm/generated/openbsd.json
@@ -0,0 +1,27 @@
+{
+ "ccache": "/usr/local/bin/ccache",
+ "cpan_pkgs": [],
+ "cross_pkgs": [],
+ "make": "/usr/local/bin/gmake",
+ "ninja": "/usr/local/bin/ninja",
+ "packaging_command": "pkg_add",
+ "pip3": "/usr/local/bin/pip3",
+ "pkgs": [
+ "bash",
+ "bison",
+ "bzip2",
+ "ccache",
+ "dtc",
+ "git",
+ "glib2",
+ "gmake",
+ "gsed",
+ "libffi",
+ "meson",
+ "ninja",
+ "pkgconf",
+ "python3"
+ ],
+ "pypi_pkgs": [],
+ "python": "/usr/local/bin/python3"
+}
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
index 52565208965..4f8eeb28e24 100755
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -24,42 +24,6 @@ class OpenBSDVM(basevm.BaseVM):
link = "https://cdn.openbsd.org/pub/OpenBSD/7.8/amd64/install78.iso"
csum = "a228d0a1ef558b4d9ec84c698f0d3ffd13cd38c64149487cba0f1ad873be07b2"
size = "20G"
- pkgs = [
- # tools
- "dtc",
- "git",
- "pkgconf",
- "bzip2", "xz",
- "ninja",
-
- # gnu tools
- "bash",
- "gmake",
- "gsed",
- "gettext-tools",
-
- # libs: usb
- "libusb1--",
-
- # libs: crypto
- "gnutls",
-
- # libs: images
- "jpeg",
- "png",
-
- # libs: ui
- "capstone",
- "sdl2",
- "gtk+3",
- "libxkbcommon",
-
- # libs: migration
- "zstd",
-
- # libs: networking
- "libslirp",
- ]
BUILD_SCRIPT = """
set -e;
@@ -195,8 +159,9 @@ class OpenBSDVM(basevm.BaseVM):
self.console_wait("login:")
self.wait_ssh()
+ pkgs = self.get_qemu_packages_from_lcitool_json()
self.print_step("Installing packages")
- self.ssh_root_check("pkg_add %s\n" % " ".join(self.pkgs))
+ self.ssh_root_check("pkg_add %s\n" % " ".join(pkgs))
# shutdown
self.ssh_root(self.poweroff)
--
2.47.3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test
2026-02-13 15:48 [PATCH 0/6] testing/next: libvirt-ci, tests/vm and vbsa functional test Alex Bennée
` (4 preceding siblings ...)
2026-02-13 15:48 ` [PATCH 5/6] tests/vm: build openbsd from lcitool data (!567) Alex Bennée
@ 2026-02-13 15:48 ` Alex Bennée
2026-02-13 16:01 ` Alex Bennée
2026-02-13 18:49 ` Pierrick Bouvier
5 siblings, 2 replies; 16+ messages in thread
From: Alex Bennée @ 2026-02-13 15:48 UTC (permalink / raw)
To: qemu-devel
Cc: Brad Smith, Alex Bennée, Warner Losh,
Philippe Mathieu-Daudé, Thomas Huth, Kyle Evans,
Peter Maydell, qemu-arm
The VBSA test is a subset of the wider Arm architecture compliance
suites (ACS) which validate machines meet particular minimum set of
requirements. The VBSA is for virtual machines so it makes sense we
should check the -M virt machine is compliant.
Fortunately there are prebuilt binaries published via github so all we
need to do is build an EFI partition and place things in the right
place.
There are some additional Linux based tests which are left for later.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/functional/aarch64/meson.build | 1 +
tests/functional/aarch64/test_virt_vbsa.py | 99 ++++++++++++++++++++++
2 files changed, 100 insertions(+)
create mode 100755 tests/functional/aarch64/test_virt_vbsa.py
diff --git a/tests/functional/aarch64/meson.build b/tests/functional/aarch64/meson.build
index 49eca120589..7ea8c22b048 100644
--- a/tests/functional/aarch64/meson.build
+++ b/tests/functional/aarch64/meson.build
@@ -46,6 +46,7 @@ tests_aarch64_system_thorough = [
'tuxrun',
'virt',
'virt_gpu',
+ 'virt_vbsa',
'xen',
'xlnx_versal',
]
diff --git a/tests/functional/aarch64/test_virt_vbsa.py b/tests/functional/aarch64/test_virt_vbsa.py
new file mode 100755
index 00000000000..53cabf9d6c5
--- /dev/null
+++ b/tests/functional/aarch64/test_virt_vbsa.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python3
+#
+# Functional test that runs the Arm VBSA conformance tests.
+#
+# Copyright (c) 2026 Linaro Ltd.
+#
+# Author:
+# Alex Bennée <alex.bennee@linaro.org>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import shutil
+from subprocess import check_call, DEVNULL
+
+from qemu_test import QemuSystemTest, Asset
+from qemu_test import wait_for_console_pattern, get_qemu_img, skipIfMissingCommands
+from qemu_test import exec_command_and_wait_for_pattern as ec_and_wait
+
+
+@skipIfMissingCommands("mformat", "mcopy", "mmd")
+class Aarch64VirtMachine(QemuSystemTest):
+ KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
+ timeout = 360
+
+ def wait_for_console_pattern(self, success_message, vm=None):
+ wait_for_console_pattern(self, success_message,
+ failure_message='Kernel panic - not syncing',
+ vm=vm)
+
+ ASSET_VBSA_EFI = Asset('https://github.com/ARM-software/sysarch-acs/raw/refs/heads/main'
+ '/prebuilt_images/VBSA/v25.12_VBSA_0.7.0/Vbsa.efi',
+ '80f37d2fb86d152d95dec4d05ff099c9e47ee8a89314268e08056b0e1359e1fa')
+
+ ASSET_BSA_SHELL = Asset('https://github.com/ARM-software/bsa-acs/raw/refs/heads/main/'
+ 'prebuilt_images/BSA_DT/v20.05_05_ALPHA/Shell.efi',
+ '763e7b293fa9d1582153ea8fd0cf60e2a7a87d092d35d342cf9b3b697f47b588')
+
+ def test_aarch64_vbsa_uefi_tests(self):
+ """
+ Launch the UEFI based VBSA test from an EFI file-system
+ """
+
+ self.vm.set_console()
+
+ # virt machine wi
+ self.set_machine('virt')
+ self.vm.add_args('-M', 'virt,gic-version=max,virtualization=on')
+ self.vm.add_args('-cpu', 'max','-m', '1024')
+
+ # We will use the QEMU firmware blobs to boot
+ code_path = self.build_file('pc-bios', 'edk2-aarch64-code.fd')
+ vars_source = self.build_file('pc-bios', 'edk2-arm-vars.fd')
+ vars_path = self.scratch_file('vars.fd')
+ shutil.copy(vars_source, vars_path)
+
+ self.vm.add_args('-drive', f'if=pflash,format=raw,readonly=on,file={code_path}')
+ self.vm.add_args('-drive', f'if=pflash,format=raw,file={vars_path}')
+
+ # Build an EFI FAT32 file-system for the UEFI tests
+ vbsa_efi = self.ASSET_VBSA_EFI.fetch()
+ bsa_shell = self.ASSET_BSA_SHELL.fetch()
+
+ img_path = self.scratch_file('vbsa.img')
+ qemu_img = get_qemu_img(self)
+ check_call([qemu_img, 'create', '-f', 'raw', img_path, '64M'],
+ stdout=DEVNULL, stderr=DEVNULL)
+
+ check_call(['mformat', '-i', img_path, '-v', 'VBSA', '::'],
+ stdout=DEVNULL, stderr=DEVNULL)
+
+ check_call(['mmd', '-i', img_path, '::/EFI'],
+ stdout=DEVNULL, stderr=DEVNULL)
+
+ check_call(['mmd', '-i', img_path, '::/EFI/BOOT'],
+ stdout=DEVNULL, stderr=DEVNULL)
+
+ check_call(['mcopy', '-i', img_path, bsa_shell, '::/EFI/BOOT/BOOTAA64.EFI'],
+ stdout=DEVNULL, stderr=DEVNULL)
+
+ check_call(['mcopy', '-i', img_path, vbsa_efi, '::/Vbsa.efi'],
+ stdout=DEVNULL, stderr=DEVNULL)
+
+ self.vm.add_args('-drive', f'file={img_path},format=raw,if=none,id=drive0')
+ self.vm.add_args('-device', 'virtio-blk-pci,drive=drive0')
+
+ self.vm.launch()
+
+ # wait for EFI prompt
+ self.wait_for_console_pattern('Shell>')
+
+ # Start the VBSA tests
+ ec_and_wait(self, "FS0:Vbsa.efi", 'VBSA Architecture Compliance Suite')
+
+ # could we parse the summary somehow?
+
+ self.wait_for_console_pattern('VBSA tests complete. Reset the system.')
+
+if __name__ == '__main__':
+ QemuSystemTest.main()
--
2.47.3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test
2026-02-13 15:48 ` [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test Alex Bennée
@ 2026-02-13 16:01 ` Alex Bennée
2026-02-13 18:49 ` Pierrick Bouvier
1 sibling, 0 replies; 16+ messages in thread
From: Alex Bennée @ 2026-02-13 16:01 UTC (permalink / raw)
To: qemu-devel
Cc: Brad Smith, Warner Losh, Philippe Mathieu-Daudé, Thomas Huth,
Kyle Evans, Peter Maydell, qemu-arm
Alex Bennée <alex.bennee@linaro.org> writes:
> The VBSA test is a subset of the wider Arm architecture compliance
> suites (ACS) which validate machines meet particular minimum set of
> requirements. The VBSA is for virtual machines so it makes sense we
> should check the -M virt machine is compliant.
>
> Fortunately there are prebuilt binaries published via github so all we
> need to do is build an EFI partition and place things in the right
> place.
>
> There are some additional Linux based tests which are left for later.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/functional/aarch64/meson.build | 1 +
> tests/functional/aarch64/test_virt_vbsa.py | 99 ++++++++++++++++++++++
> 2 files changed, 100 insertions(+)
> create mode 100755 tests/functional/aarch64/test_virt_vbsa.py
>
> diff --git a/tests/functional/aarch64/meson.build b/tests/functional/aarch64/meson.build
> index 49eca120589..7ea8c22b048 100644
> --- a/tests/functional/aarch64/meson.build
> +++ b/tests/functional/aarch64/meson.build
> @@ -46,6 +46,7 @@ tests_aarch64_system_thorough = [
> 'tuxrun',
> 'virt',
> 'virt_gpu',
> + 'virt_vbsa',
> 'xen',
> 'xlnx_versal',
> ]
> diff --git a/tests/functional/aarch64/test_virt_vbsa.py b/tests/functional/aarch64/test_virt_vbsa.py
> new file mode 100755
> index 00000000000..53cabf9d6c5
> --- /dev/null
> +++ b/tests/functional/aarch64/test_virt_vbsa.py
> @@ -0,0 +1,99 @@
> +#!/usr/bin/env python3
> +#
> +# Functional test that runs the Arm VBSA conformance tests.
> +#
> +# Copyright (c) 2026 Linaro Ltd.
> +#
> +# Author:
> +# Alex Bennée <alex.bennee@linaro.org>
> +#
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +
> +import shutil
> +from subprocess import check_call, DEVNULL
> +
> +from qemu_test import QemuSystemTest, Asset
> +from qemu_test import wait_for_console_pattern, get_qemu_img, skipIfMissingCommands
> +from qemu_test import exec_command_and_wait_for_pattern as ec_and_wait
> +
> +
> +@skipIfMissingCommands("mformat", "mcopy", "mmd")
> +class Aarch64VirtMachine(QemuSystemTest):
> + KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
> + timeout = 360
> +
> + def wait_for_console_pattern(self, success_message, vm=None):
> + wait_for_console_pattern(self, success_message,
> + failure_message='Kernel panic - not syncing',
> + vm=vm)
> +
> + ASSET_VBSA_EFI = Asset('https://github.com/ARM-software/sysarch-acs/raw/refs/heads/main'
> + '/prebuilt_images/VBSA/v25.12_VBSA_0.7.0/Vbsa.efi',
> + '80f37d2fb86d152d95dec4d05ff099c9e47ee8a89314268e08056b0e1359e1fa')
> +
> + ASSET_BSA_SHELL = Asset('https://github.com/ARM-software/bsa-acs/raw/refs/heads/main/'
> + 'prebuilt_images/BSA_DT/v20.05_05_ALPHA/Shell.efi',
> + '763e7b293fa9d1582153ea8fd0cf60e2a7a87d092d35d342cf9b3b697f47b588')
> +
> + def test_aarch64_vbsa_uefi_tests(self):
> + """
> + Launch the UEFI based VBSA test from an EFI file-system
> + """
> +
> + self.vm.set_console()
> +
> + # virt machine wi
> + self.set_machine('virt')
> + self.vm.add_args('-M',
> 'virt,gic-version=max,virtualization=on')
We can drop the virtualization=on here so we run under KVM (or HVF?) as well.
> + self.vm.add_args('-cpu', 'max','-m', '1024')
> +
> + # We will use the QEMU firmware blobs to boot
> + code_path = self.build_file('pc-bios', 'edk2-aarch64-code.fd')
> + vars_source = self.build_file('pc-bios', 'edk2-arm-vars.fd')
> + vars_path = self.scratch_file('vars.fd')
> + shutil.copy(vars_source, vars_path)
> +
> + self.vm.add_args('-drive', f'if=pflash,format=raw,readonly=on,file={code_path}')
> + self.vm.add_args('-drive', f'if=pflash,format=raw,file={vars_path}')
> +
> + # Build an EFI FAT32 file-system for the UEFI tests
> + vbsa_efi = self.ASSET_VBSA_EFI.fetch()
> + bsa_shell = self.ASSET_BSA_SHELL.fetch()
> +
> + img_path = self.scratch_file('vbsa.img')
> + qemu_img = get_qemu_img(self)
> + check_call([qemu_img, 'create', '-f', 'raw', img_path, '64M'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mformat', '-i', img_path, '-v', 'VBSA', '::'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mmd', '-i', img_path, '::/EFI'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mmd', '-i', img_path, '::/EFI/BOOT'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mcopy', '-i', img_path, bsa_shell, '::/EFI/BOOT/BOOTAA64.EFI'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mcopy', '-i', img_path, vbsa_efi, '::/Vbsa.efi'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + self.vm.add_args('-drive', f'file={img_path},format=raw,if=none,id=drive0')
> + self.vm.add_args('-device', 'virtio-blk-pci,drive=drive0')
> +
> + self.vm.launch()
> +
> + # wait for EFI prompt
> + self.wait_for_console_pattern('Shell>')
> +
> + # Start the VBSA tests
> + ec_and_wait(self, "FS0:Vbsa.efi", 'VBSA Architecture Compliance Suite')
> +
> + # could we parse the summary somehow?
> +
> + self.wait_for_console_pattern('VBSA tests complete. Reset the system.')
> +
> +if __name__ == '__main__':
> + QemuSystemTest.main()
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/6] tests: bump libvirt-ci to latest state
2026-02-13 15:48 ` [PATCH 1/6] tests: bump libvirt-ci to latest state Alex Bennée
@ 2026-02-13 18:41 ` Pierrick Bouvier
0 siblings, 0 replies; 16+ messages in thread
From: Pierrick Bouvier @ 2026-02-13 18:41 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Brad Smith, Warner Losh, Philippe Mathieu-Daudé, Thomas Huth,
Kyle Evans, Peter Maydell, qemu-arm
On 2/13/26 7:48 AM, Alex Bennée wrote:
> This entails updating alpine and fedora images to more recent versions
> as well as the missing macos-14.vars update missed from last time.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/docker/dockerfiles/alpine.docker | 4 +-
> tests/docker/dockerfiles/centos9.docker | 240 ++++++++--------
> .../dockerfiles/fedora-rust-nightly.docker | 262 +++++++++---------
> .../dockerfiles/fedora-win64-cross.docker | 162 +++++------
> tests/docker/dockerfiles/fedora.docker | 262 +++++++++---------
> tests/lcitool/libvirt-ci | 2 +-
> tests/lcitool/refresh | 8 +-
> 7 files changed, 470 insertions(+), 470 deletions(-)
>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/6] tests/vm: bump OpenBSD to the current 7.8 release
2026-02-13 15:48 ` [PATCH 2/6] tests/vm: bump OpenBSD to the current 7.8 release Alex Bennée
@ 2026-02-13 18:42 ` Pierrick Bouvier
0 siblings, 0 replies; 16+ messages in thread
From: Pierrick Bouvier @ 2026-02-13 18:42 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Brad Smith, Warner Losh, Philippe Mathieu-Daudé, Thomas Huth,
Kyle Evans, Peter Maydell, qemu-arm
On 2/13/26 7:48 AM, Alex Bennée wrote:
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/vm/openbsd | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/6] tests/vm: remove unused import
2026-02-13 15:48 ` [PATCH 3/6] tests/vm: remove unused import Alex Bennée
@ 2026-02-13 18:42 ` Pierrick Bouvier
0 siblings, 0 replies; 16+ messages in thread
From: Pierrick Bouvier @ 2026-02-13 18:42 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Brad Smith, Warner Losh, Philippe Mathieu-Daudé, Thomas Huth,
Kyle Evans, Peter Maydell, qemu-arm
On 2/13/26 7:48 AM, Alex Bennée wrote:
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/vm/openbsd | 1 -
> 1 file changed, 1 deletion(-)
>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/6] tests/vm: fix interactive boot
2026-02-13 15:48 ` [PATCH 4/6] tests/vm: fix interactive boot Alex Bennée
@ 2026-02-13 18:42 ` Pierrick Bouvier
0 siblings, 0 replies; 16+ messages in thread
From: Pierrick Bouvier @ 2026-02-13 18:42 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Brad Smith, Warner Losh, Philippe Mathieu-Daudé, Thomas Huth,
Kyle Evans, Peter Maydell, qemu-arm
On 2/13/26 7:48 AM, Alex Bennée wrote:
> For reasons still not clear to me passing the single dashed
> -interactive would confuse the argument parsing enough we tried to
> pass "nterative" as a string to the launch command causing failure and
> head scratching.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/vm/Makefile.include | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 5/6] tests/vm: build openbsd from lcitool data (!567)
2026-02-13 15:48 ` [PATCH 5/6] tests/vm: build openbsd from lcitool data (!567) Alex Bennée
@ 2026-02-13 18:43 ` Pierrick Bouvier
0 siblings, 0 replies; 16+ messages in thread
From: Pierrick Bouvier @ 2026-02-13 18:43 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Brad Smith, Warner Losh, Philippe Mathieu-Daudé, Thomas Huth,
Kyle Evans, Peter Maydell, qemu-arm
On 2/13/26 7:48 AM, Alex Bennée wrote:
> For now only use the minimal decadency set until all the OpenBSD
> mappings can be divined.
>
> Currently depends on: https://gitlab.com/libvirt/libvirt-ci/-/merge_requests/567
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/lcitool/libvirt-ci | 2 +-
> tests/lcitool/refresh | 5 +++--
> tests/vm/generated/openbsd.json | 27 +++++++++++++++++++++++
> tests/vm/openbsd | 39 ++-------------------------------
> 4 files changed, 33 insertions(+), 40 deletions(-)
> create mode 100644 tests/vm/generated/openbsd.json
>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test
2026-02-13 15:48 ` [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test Alex Bennée
2026-02-13 16:01 ` Alex Bennée
@ 2026-02-13 18:49 ` Pierrick Bouvier
2026-02-19 10:38 ` Alex Bennée
1 sibling, 1 reply; 16+ messages in thread
From: Pierrick Bouvier @ 2026-02-13 18:49 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Brad Smith, Warner Losh, Philippe Mathieu-Daudé, Thomas Huth,
Kyle Evans, Peter Maydell, qemu-arm
On 2/13/26 7:48 AM, Alex Bennée wrote:
> The VBSA test is a subset of the wider Arm architecture compliance
> suites (ACS) which validate machines meet particular minimum set of
> requirements. The VBSA is for virtual machines so it makes sense we
> should check the -M virt machine is compliant.
>
> Fortunately there are prebuilt binaries published via github so all we
> need to do is build an EFI partition and place things in the right
> place.
>
> There are some additional Linux based tests which are left for later.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/functional/aarch64/meson.build | 1 +
> tests/functional/aarch64/test_virt_vbsa.py | 99 ++++++++++++++++++++++
> 2 files changed, 100 insertions(+)
> create mode 100755 tests/functional/aarch64/test_virt_vbsa.py
>
> diff --git a/tests/functional/aarch64/meson.build b/tests/functional/aarch64/meson.build
> index 49eca120589..7ea8c22b048 100644
> --- a/tests/functional/aarch64/meson.build
> +++ b/tests/functional/aarch64/meson.build
> @@ -46,6 +46,7 @@ tests_aarch64_system_thorough = [
> 'tuxrun',
> 'virt',
> 'virt_gpu',
> + 'virt_vbsa',
> 'xen',
> 'xlnx_versal',
> ]
> diff --git a/tests/functional/aarch64/test_virt_vbsa.py b/tests/functional/aarch64/test_virt_vbsa.py
> new file mode 100755
> index 00000000000..53cabf9d6c5
> --- /dev/null
> +++ b/tests/functional/aarch64/test_virt_vbsa.py
> @@ -0,0 +1,99 @@
> +#!/usr/bin/env python3
> +#
> +# Functional test that runs the Arm VBSA conformance tests.
> +#
> +# Copyright (c) 2026 Linaro Ltd.
> +#
> +# Author:
> +# Alex Bennée <alex.bennee@linaro.org>
> +#
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +
> +import shutil
> +from subprocess import check_call, DEVNULL
> +
> +from qemu_test import QemuSystemTest, Asset
> +from qemu_test import wait_for_console_pattern, get_qemu_img, skipIfMissingCommands
> +from qemu_test import exec_command_and_wait_for_pattern as ec_and_wait
> +
> +
> +@skipIfMissingCommands("mformat", "mcopy", "mmd")
> +class Aarch64VirtMachine(QemuSystemTest):
> + KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
> + timeout = 360
> +
> + def wait_for_console_pattern(self, success_message, vm=None):
> + wait_for_console_pattern(self, success_message,
> + failure_message='Kernel panic - not syncing',
> + vm=vm)
> +
May be worth adding a comment with README url:
https://github.com/ARM-software/sysarch-acs/blob/main/docs/vbsa/README.md
> + ASSET_VBSA_EFI = Asset('https://github.com/ARM-software/sysarch-acs/raw/refs/heads/main'
> + '/prebuilt_images/VBSA/v25.12_VBSA_0.7.0/Vbsa.efi',
> + '80f37d2fb86d152d95dec4d05ff099c9e47ee8a89314268e08056b0e1359e1fa')
> +
> + ASSET_BSA_SHELL = Asset('https://github.com/ARM-software/bsa-acs/raw/refs/heads/main/'
> + 'prebuilt_images/BSA_DT/v20.05_05_ALPHA/Shell.efi',
> + '763e7b293fa9d1582153ea8fd0cf60e2a7a87d092d35d342cf9b3b697f47b588')
> +
> + def test_aarch64_vbsa_uefi_tests(self):
> + """
> + Launch the UEFI based VBSA test from an EFI file-system
> + """
> +
> + self.vm.set_console()
> +
> + # virt machine wi
> + self.set_machine('virt')
> + self.vm.add_args('-M', 'virt,gic-version=max,virtualization=on')
> + self.vm.add_args('-cpu', 'max','-m', '1024')
> +
> + # We will use the QEMU firmware blobs to boot
> + code_path = self.build_file('pc-bios', 'edk2-aarch64-code.fd')
> + vars_source = self.build_file('pc-bios', 'edk2-arm-vars.fd')
> + vars_path = self.scratch_file('vars.fd')
> + shutil.copy(vars_source, vars_path)
> +
> + self.vm.add_args('-drive', f'if=pflash,format=raw,readonly=on,file={code_path}')
> + self.vm.add_args('-drive', f'if=pflash,format=raw,file={vars_path}')
> +
> + # Build an EFI FAT32 file-system for the UEFI tests
> + vbsa_efi = self.ASSET_VBSA_EFI.fetch()
> + bsa_shell = self.ASSET_BSA_SHELL.fetch()
> +
> + img_path = self.scratch_file('vbsa.img')
> + qemu_img = get_qemu_img(self)
> + check_call([qemu_img, 'create', '-f', 'raw', img_path, '64M'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mformat', '-i', img_path, '-v', 'VBSA', '::'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mmd', '-i', img_path, '::/EFI'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mmd', '-i', img_path, '::/EFI/BOOT'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mcopy', '-i', img_path, bsa_shell, '::/EFI/BOOT/BOOTAA64.EFI'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + check_call(['mcopy', '-i', img_path, vbsa_efi, '::/Vbsa.efi'],
> + stdout=DEVNULL, stderr=DEVNULL)
> +
> + self.vm.add_args('-drive', f'file={img_path},format=raw,if=none,id=drive0')
> + self.vm.add_args('-device', 'virtio-blk-pci,drive=drive0')
> +
> + self.vm.launch()
> +
> + # wait for EFI prompt
> + self.wait_for_console_pattern('Shell>')
> +
> + # Start the VBSA tests
> + ec_and_wait(self, "FS0:Vbsa.efi", 'VBSA Architecture Compliance Suite')
> +
> + # could we parse the summary somehow?
> +
> + self.wait_for_console_pattern('VBSA tests complete. Reset the system.')
> +
What happens in case there is an error, does the test app hangs, or
still exit with message under?
If it always exit with this message, whether we have an error or not,
then the test is not really checking anything.
> +if __name__ == '__main__':
> + QemuSystemTest.main()
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test
2026-02-13 18:49 ` Pierrick Bouvier
@ 2026-02-19 10:38 ` Alex Bennée
2026-02-19 16:39 ` Pierrick Bouvier
0 siblings, 1 reply; 16+ messages in thread
From: Alex Bennée @ 2026-02-19 10:38 UTC (permalink / raw)
To: Pierrick Bouvier
Cc: qemu-devel, Brad Smith, Warner Losh, Philippe Mathieu-Daudé,
Thomas Huth, Kyle Evans, Peter Maydell, qemu-arm
Pierrick Bouvier <pierrick.bouvier@linaro.org> writes:
> On 2/13/26 7:48 AM, Alex Bennée wrote:
>> The VBSA test is a subset of the wider Arm architecture compliance
>> suites (ACS) which validate machines meet particular minimum set of
>> requirements. The VBSA is for virtual machines so it makes sense we
>> should check the -M virt machine is compliant.
>> Fortunately there are prebuilt binaries published via github so all
>> we
>> need to do is build an EFI partition and place things in the right
>> place.
>> There are some additional Linux based tests which are left for
>> later.
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> ---
>> tests/functional/aarch64/meson.build | 1 +
>> tests/functional/aarch64/test_virt_vbsa.py | 99 ++++++++++++++++++++++
>> 2 files changed, 100 insertions(+)
>> create mode 100755 tests/functional/aarch64/test_virt_vbsa.py
>> diff --git a/tests/functional/aarch64/meson.build
>> b/tests/functional/aarch64/meson.build
>> index 49eca120589..7ea8c22b048 100644
>> --- a/tests/functional/aarch64/meson.build
>> +++ b/tests/functional/aarch64/meson.build
>> @@ -46,6 +46,7 @@ tests_aarch64_system_thorough = [
>> 'tuxrun',
>> 'virt',
>> 'virt_gpu',
>> + 'virt_vbsa',
>> 'xen',
>> 'xlnx_versal',
>> ]
>> diff --git a/tests/functional/aarch64/test_virt_vbsa.py b/tests/functional/aarch64/test_virt_vbsa.py
>> new file mode 100755
>> index 00000000000..53cabf9d6c5
>> --- /dev/null
>> +++ b/tests/functional/aarch64/test_virt_vbsa.py
>> @@ -0,0 +1,99 @@
>> +#!/usr/bin/env python3
>> +#
>> +# Functional test that runs the Arm VBSA conformance tests.
>> +#
>> +# Copyright (c) 2026 Linaro Ltd.
>> +#
>> +# Author:
>> +# Alex Bennée <alex.bennee@linaro.org>
>> +#
>> +# SPDX-License-Identifier: GPL-2.0-or-later
>> +
>> +import shutil
>> +from subprocess import check_call, DEVNULL
>> +
>> +from qemu_test import QemuSystemTest, Asset
>> +from qemu_test import wait_for_console_pattern, get_qemu_img, skipIfMissingCommands
>> +from qemu_test import exec_command_and_wait_for_pattern as ec_and_wait
>> +
>> +
>> +@skipIfMissingCommands("mformat", "mcopy", "mmd")
>> +class Aarch64VirtMachine(QemuSystemTest):
>> + KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
>> + timeout = 360
>> +
>> + def wait_for_console_pattern(self, success_message, vm=None):
>> + wait_for_console_pattern(self, success_message,
>> + failure_message='Kernel panic - not syncing',
>> + vm=vm)
>> +
>
> May be worth adding a comment with README url:
> https://github.com/ARM-software/sysarch-acs/blob/main/docs/vbsa/README.md
>
>> + ASSET_VBSA_EFI = Asset('https://github.com/ARM-software/sysarch-acs/raw/refs/heads/main'
>> + '/prebuilt_images/VBSA/v25.12_VBSA_0.7.0/Vbsa.efi',
>> + '80f37d2fb86d152d95dec4d05ff099c9e47ee8a89314268e08056b0e1359e1fa')
>> +
>> + ASSET_BSA_SHELL = Asset('https://github.com/ARM-software/bsa-acs/raw/refs/heads/main/'
>> + 'prebuilt_images/BSA_DT/v20.05_05_ALPHA/Shell.efi',
>> + '763e7b293fa9d1582153ea8fd0cf60e2a7a87d092d35d342cf9b3b697f47b588')
>> +
>> + def test_aarch64_vbsa_uefi_tests(self):
>> + """
>> + Launch the UEFI based VBSA test from an EFI file-system
>> + """
>> +
>> + self.vm.set_console()
>> +
>> + # virt machine wi
>> + self.set_machine('virt')
>> + self.vm.add_args('-M', 'virt,gic-version=max,virtualization=on')
>> + self.vm.add_args('-cpu', 'max','-m', '1024')
>> +
>> + # We will use the QEMU firmware blobs to boot
>> + code_path = self.build_file('pc-bios', 'edk2-aarch64-code.fd')
>> + vars_source = self.build_file('pc-bios', 'edk2-arm-vars.fd')
>> + vars_path = self.scratch_file('vars.fd')
>> + shutil.copy(vars_source, vars_path)
>> +
>> + self.vm.add_args('-drive', f'if=pflash,format=raw,readonly=on,file={code_path}')
>> + self.vm.add_args('-drive', f'if=pflash,format=raw,file={vars_path}')
>> +
>> + # Build an EFI FAT32 file-system for the UEFI tests
>> + vbsa_efi = self.ASSET_VBSA_EFI.fetch()
>> + bsa_shell = self.ASSET_BSA_SHELL.fetch()
>> +
>> + img_path = self.scratch_file('vbsa.img')
>> + qemu_img = get_qemu_img(self)
>> + check_call([qemu_img, 'create', '-f', 'raw', img_path, '64M'],
>> + stdout=DEVNULL, stderr=DEVNULL)
>> +
>> + check_call(['mformat', '-i', img_path, '-v', 'VBSA', '::'],
>> + stdout=DEVNULL, stderr=DEVNULL)
>> +
>> + check_call(['mmd', '-i', img_path, '::/EFI'],
>> + stdout=DEVNULL, stderr=DEVNULL)
>> +
>> + check_call(['mmd', '-i', img_path, '::/EFI/BOOT'],
>> + stdout=DEVNULL, stderr=DEVNULL)
>> +
>> + check_call(['mcopy', '-i', img_path, bsa_shell, '::/EFI/BOOT/BOOTAA64.EFI'],
>> + stdout=DEVNULL, stderr=DEVNULL)
>> +
>> + check_call(['mcopy', '-i', img_path, vbsa_efi, '::/Vbsa.efi'],
>> + stdout=DEVNULL, stderr=DEVNULL)
>> +
>> + self.vm.add_args('-drive', f'file={img_path},format=raw,if=none,id=drive0')
>> + self.vm.add_args('-device', 'virtio-blk-pci,drive=drive0')
>> +
>> + self.vm.launch()
>> +
>> + # wait for EFI prompt
>> + self.wait_for_console_pattern('Shell>')
>> +
>> + # Start the VBSA tests
>> + ec_and_wait(self, "FS0:Vbsa.efi", 'VBSA Architecture Compliance Suite')
>> +
>> + # could we parse the summary somehow?
>> +
>> + self.wait_for_console_pattern('VBSA tests complete. Reset the system.')
>> +
>
> What happens in case there is an error, does the test app hangs, or
> still exit with message under?
The failures I had were generally hangs but ideally we would parse the
the summary data and generate our response based on that. Unfortunately
that is at odds with the current send/wait for pass/fail message
infrastructure.
>
> If it always exit with this message, whether we have an error or not,
> then the test is not really checking anything.
>
>> +if __name__ == '__main__':
>> + QemuSystemTest.main()
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test
2026-02-19 10:38 ` Alex Bennée
@ 2026-02-19 16:39 ` Pierrick Bouvier
0 siblings, 0 replies; 16+ messages in thread
From: Pierrick Bouvier @ 2026-02-19 16:39 UTC (permalink / raw)
To: Alex Bennée
Cc: qemu-devel, Brad Smith, Warner Losh, Philippe Mathieu-Daudé,
Thomas Huth, Kyle Evans, Peter Maydell, qemu-arm
On 2/19/26 2:38 AM, Alex Bennée wrote:
> Pierrick Bouvier <pierrick.bouvier@linaro.org> writes:
>
>> On 2/13/26 7:48 AM, Alex Bennée wrote:
>>> The VBSA test is a subset of the wider Arm architecture compliance
>>> suites (ACS) which validate machines meet particular minimum set of
>>> requirements. The VBSA is for virtual machines so it makes sense we
>>> should check the -M virt machine is compliant.
>>> Fortunately there are prebuilt binaries published via github so all
>>> we
>>> need to do is build an EFI partition and place things in the right
>>> place.
>>> There are some additional Linux based tests which are left for
>>> later.
>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>> ---
>>> tests/functional/aarch64/meson.build | 1 +
>>> tests/functional/aarch64/test_virt_vbsa.py | 99 ++++++++++++++++++++++
>>> 2 files changed, 100 insertions(+)
>>> create mode 100755 tests/functional/aarch64/test_virt_vbsa.py
>>> diff --git a/tests/functional/aarch64/meson.build
>>> b/tests/functional/aarch64/meson.build
>>> index 49eca120589..7ea8c22b048 100644
>>> --- a/tests/functional/aarch64/meson.build
>>> +++ b/tests/functional/aarch64/meson.build
>>> @@ -46,6 +46,7 @@ tests_aarch64_system_thorough = [
>>> 'tuxrun',
>>> 'virt',
>>> 'virt_gpu',
>>> + 'virt_vbsa',
>>> 'xen',
>>> 'xlnx_versal',
>>> ]
>>> diff --git a/tests/functional/aarch64/test_virt_vbsa.py b/tests/functional/aarch64/test_virt_vbsa.py
>>> new file mode 100755
>>> index 00000000000..53cabf9d6c5
>>> --- /dev/null
>>> +++ b/tests/functional/aarch64/test_virt_vbsa.py
>>> @@ -0,0 +1,99 @@
>>> +#!/usr/bin/env python3
>>> +#
>>> +# Functional test that runs the Arm VBSA conformance tests.
>>> +#
>>> +# Copyright (c) 2026 Linaro Ltd.
>>> +#
>>> +# Author:
>>> +# Alex Bennée <alex.bennee@linaro.org>
>>> +#
>>> +# SPDX-License-Identifier: GPL-2.0-or-later
>>> +
>>> +import shutil
>>> +from subprocess import check_call, DEVNULL
>>> +
>>> +from qemu_test import QemuSystemTest, Asset
>>> +from qemu_test import wait_for_console_pattern, get_qemu_img, skipIfMissingCommands
>>> +from qemu_test import exec_command_and_wait_for_pattern as ec_and_wait
>>> +
>>> +
>>> +@skipIfMissingCommands("mformat", "mcopy", "mmd")
>>> +class Aarch64VirtMachine(QemuSystemTest):
>>> + KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
>>> + timeout = 360
>>> +
>>> + def wait_for_console_pattern(self, success_message, vm=None):
>>> + wait_for_console_pattern(self, success_message,
>>> + failure_message='Kernel panic - not syncing',
>>> + vm=vm)
>>> +
>>
>> May be worth adding a comment with README url:
>> https://github.com/ARM-software/sysarch-acs/blob/main/docs/vbsa/README.md
>>
>>> + ASSET_VBSA_EFI = Asset('https://github.com/ARM-software/sysarch-acs/raw/refs/heads/main'
>>> + '/prebuilt_images/VBSA/v25.12_VBSA_0.7.0/Vbsa.efi',
>>> + '80f37d2fb86d152d95dec4d05ff099c9e47ee8a89314268e08056b0e1359e1fa')
>>> +
>>> + ASSET_BSA_SHELL = Asset('https://github.com/ARM-software/bsa-acs/raw/refs/heads/main/'
>>> + 'prebuilt_images/BSA_DT/v20.05_05_ALPHA/Shell.efi',
>>> + '763e7b293fa9d1582153ea8fd0cf60e2a7a87d092d35d342cf9b3b697f47b588')
>>> +
>>> + def test_aarch64_vbsa_uefi_tests(self):
>>> + """
>>> + Launch the UEFI based VBSA test from an EFI file-system
>>> + """
>>> +
>>> + self.vm.set_console()
>>> +
>>> + # virt machine wi
>>> + self.set_machine('virt')
>>> + self.vm.add_args('-M', 'virt,gic-version=max,virtualization=on')
>>> + self.vm.add_args('-cpu', 'max','-m', '1024')
>>> +
>>> + # We will use the QEMU firmware blobs to boot
>>> + code_path = self.build_file('pc-bios', 'edk2-aarch64-code.fd')
>>> + vars_source = self.build_file('pc-bios', 'edk2-arm-vars.fd')
>>> + vars_path = self.scratch_file('vars.fd')
>>> + shutil.copy(vars_source, vars_path)
>>> +
>>> + self.vm.add_args('-drive', f'if=pflash,format=raw,readonly=on,file={code_path}')
>>> + self.vm.add_args('-drive', f'if=pflash,format=raw,file={vars_path}')
>>> +
>>> + # Build an EFI FAT32 file-system for the UEFI tests
>>> + vbsa_efi = self.ASSET_VBSA_EFI.fetch()
>>> + bsa_shell = self.ASSET_BSA_SHELL.fetch()
>>> +
>>> + img_path = self.scratch_file('vbsa.img')
>>> + qemu_img = get_qemu_img(self)
>>> + check_call([qemu_img, 'create', '-f', 'raw', img_path, '64M'],
>>> + stdout=DEVNULL, stderr=DEVNULL)
>>> +
>>> + check_call(['mformat', '-i', img_path, '-v', 'VBSA', '::'],
>>> + stdout=DEVNULL, stderr=DEVNULL)
>>> +
>>> + check_call(['mmd', '-i', img_path, '::/EFI'],
>>> + stdout=DEVNULL, stderr=DEVNULL)
>>> +
>>> + check_call(['mmd', '-i', img_path, '::/EFI/BOOT'],
>>> + stdout=DEVNULL, stderr=DEVNULL)
>>> +
>>> + check_call(['mcopy', '-i', img_path, bsa_shell, '::/EFI/BOOT/BOOTAA64.EFI'],
>>> + stdout=DEVNULL, stderr=DEVNULL)
>>> +
>>> + check_call(['mcopy', '-i', img_path, vbsa_efi, '::/Vbsa.efi'],
>>> + stdout=DEVNULL, stderr=DEVNULL)
>>> +
>>> + self.vm.add_args('-drive', f'file={img_path},format=raw,if=none,id=drive0')
>>> + self.vm.add_args('-device', 'virtio-blk-pci,drive=drive0')
>>> +
>>> + self.vm.launch()
>>> +
>>> + # wait for EFI prompt
>>> + self.wait_for_console_pattern('Shell>')
>>> +
>>> + # Start the VBSA tests
>>> + ec_and_wait(self, "FS0:Vbsa.efi", 'VBSA Architecture Compliance Suite')
>>> +
>>> + # could we parse the summary somehow?
>>> +
>>> + self.wait_for_console_pattern('VBSA tests complete. Reset the system.')
>>> +
>>
>> What happens in case there is an error, does the test app hangs, or
>> still exit with message under?
>
> The failures I had were generally hangs but ideally we would parse the
> the summary data and generate our response based on that. Unfortunately
> that is at odds with the current send/wait for pass/fail message
> infrastructure.
>
I'm not sure you need something so complicated, all we needed is to
return an error if any test is failing,(assuming they all pass now?).
I don't know the output format, but let's imagine a failure is reported
with "not ok ... details ...", all you need to modify is the final
wait_for_console_pattern:
wait_for_console_pattern(self, 'VBSA tests complete. Reset the system.',
failure_message='not ok')
So it will catch any failure without having to parse anything.
Regards,
Pierrick
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2026-02-19 16:40 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-13 15:48 [PATCH 0/6] testing/next: libvirt-ci, tests/vm and vbsa functional test Alex Bennée
2026-02-13 15:48 ` [PATCH 1/6] tests: bump libvirt-ci to latest state Alex Bennée
2026-02-13 18:41 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 2/6] tests/vm: bump OpenBSD to the current 7.8 release Alex Bennée
2026-02-13 18:42 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 3/6] tests/vm: remove unused import Alex Bennée
2026-02-13 18:42 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 4/6] tests/vm: fix interactive boot Alex Bennée
2026-02-13 18:42 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 5/6] tests/vm: build openbsd from lcitool data (!567) Alex Bennée
2026-02-13 18:43 ` Pierrick Bouvier
2026-02-13 15:48 ` [PATCH 6/6] tests/functional: add Arm VBSA uefi conformance test Alex Bennée
2026-02-13 16:01 ` Alex Bennée
2026-02-13 18:49 ` Pierrick Bouvier
2026-02-19 10:38 ` Alex Bennée
2026-02-19 16:39 ` Pierrick Bouvier
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.