Pierrick Bouvier <[email protected]> writes: > On 2/26/26 10:53 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. >> Message-ID: <[email protected]> >> Signed-off-by: Alex Bennée <[email protected]> >> --- >> v2 >> - use the VBSA prebuilt shell >> - fail the test if we see FAILED in the console stream >> --- >> 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..3da06904ea9 >> --- /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 <[email protected]> >> +# >> +# 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='FAILED', >> + 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/sysarch-acs/raw/refs/heads/main' >> + >> '/prebuilt_images/VBSA/v25.12_VBSA_0.7.0/Shell.efi', >> + >> 'e526604f0d329b481c6a1f62f7a0db8ea24ce8178b2c6abda8e247425f38775c') >> + >> + 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.') >> + > > Same comment than on v1: > https://lore.kernel.org/qemu-devel/[email protected]/ > > In case a failing output would not contain any string easy to > identify, I'm fine with current patch, but since I didn't receive any > answer on previous series, I'm not sure if it has been tried.
That's why I added the FAILED catch. > > Regards, > Pierrick -- Alex Bennée Virtualisation Tech Lead @ Linaro
