aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2025-01-12 10:43:01 -0500
committerStefan Hajnoczi <stefanha@redhat.com>2025-01-12 10:43:01 -0500
commitdc26a2cd9cb68152d8528fa907346370d28bd240 (patch)
treefbfaad54aebc7e75b03ca02113c44c4cece86659
parent3214bec13d8d4c40f707d21d8350d04e4123ae97 (diff)
parentae0aef5e761ad6425c634f3d83b8cc5b52d1ce0a (diff)
downloadqemu-dc26a2cd9cb68152d8528fa907346370d28bd240.zip
qemu-dc26a2cd9cb68152d8528fa907346370d28bd240.tar.gz
qemu-dc26a2cd9cb68152d8528fa907346370d28bd240.tar.bz2
Merge tag 'pull-10.0-testing-updates-110125-1' of https://gitlab.com/stsquad/qemu into staging
Testing updates for 10.0 - update the tuxrun images to the latest baseline - add the m68k tuxrun test - ensure qtest checks the result of clock_step operations - introduce new ztsd helper to functional tests - ensure aarch64_virt test exits early when no TCG - add new test to exercise virtio-vulkan - bump libvirt-ci to latest version - move riscv64 cross container from sid to trixie - remove workaround from mips containers now upstream updated - fix VM tests to use correct path for local QEMU binary - add ability to get a root debug shell on VM images - add keymap dependency to vnc tests - remove retiring maintainers from avocado and dockerfiles # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmeCYB4ACgkQ+9DbCVqe # KkRS5Qf/V0rQ1OAxjK+/xrUPB84AYA4gwgInPzcENbQ0Oqkn2rnkEkyMlxC6AMd0 # H8AmARy/mkSivm6ZaKqhz0Xhw0rblU2ZtGMUp3Xw47fwVDJZY1Pvr8vXxPySiHGW # 7GmiHJzOh+tDcY0TO2biCNFmiJJ2az2STIQDS6YX4QRJOU26qsfbIMXOoqDnUACo # 2e5MDgRtVFuD3/6J1SpQxGnBE79mPMkCN0gqqfn0x6W9EqsVlqB3MfHEIp5/b+Tt # Gfx8gi8HrKHUua01rjnxXyZPqrrAZ2zRo4bN1vLSJmqLN1X+yPYNEXCjOtM4f9uk # g3PA76X1kX1MFMLMPkCefKFCxI5nsQ== # =+yCJ # -----END PGP SIGNATURE----- # gpg: Signature made Sat 11 Jan 2025 07:12:14 EST # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * tag 'pull-10.0-testing-updates-110125-1' of https://gitlab.com/stsquad/qemu: (32 commits) MAINTAINERS: Remove myself from reviewers dockerfiles: Remove 'MAINTAINER' entry in debian-tricore-cross.docker pc-bios: ensure keymaps dependencies set vnc tests tests/vm: allow interactive login as root tests/vm: partially un-tabify help output tests/vm: fix build_path based path tests/lcitool: remove temp workaround for debian mips64el tests/docker: move riscv64 cross container from sid to trixie tests/lcitool: bump to latest version of libvirt-ci tests/functional: extend test_aarch64_virt with vulkan test tests/functional: bail aarch64_virt tests early if missing TCG tests/functional: remove unused kernel_command_line tests/functional: update tuxruntest to use uncompress utility tests/functional: add zstd support to uncompress utility tests/functional: remove hacky sleep from the tests system/qtest: properly feedback results of clock_[step|set] tests/qtest: remove clock_steps from virtio tests tests/functional/aarch64: add tests for FEAT_RME tests/functional: update the x86_64 tuxrun tests tests/functional: update the sparc64 tuxrun tests ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
-rw-r--r--.gitlab-ci.d/cirrus/freebsd-14.vars2
-rw-r--r--MAINTAINERS3
-rw-r--r--pc-bios/keymaps/meson.build17
-rw-r--r--system/qtest.c23
-rw-r--r--tests/docker/dockerfiles/debian-mips64el-cross.docker9
-rw-r--r--tests/docker/dockerfiles/debian-riscv64-cross.docker4
-rw-r--r--tests/docker/dockerfiles/debian-tricore-cross.docker2
-rw-r--r--tests/functional/meson.build5
-rw-r--r--tests/functional/qemu_test/tuxruntest.py12
-rw-r--r--tests/functional/qemu_test/uncompress.py24
-rwxr-xr-xtests/functional/test_aarch64_rme_sbsaref.py69
-rwxr-xr-xtests/functional/test_aarch64_rme_virt.py98
-rwxr-xr-xtests/functional/test_aarch64_virt.py119
-rwxr-xr-xtests/functional/test_arm_tuxrun.py28
-rwxr-xr-xtests/functional/test_i386_tuxrun.py8
-rwxr-xr-xtests/functional/test_m68k_tuxrun.py34
-rwxr-xr-xtests/functional/test_mips64_tuxrun.py8
-rwxr-xr-xtests/functional/test_mips64el_tuxrun.py8
-rwxr-xr-xtests/functional/test_mips_tuxrun.py8
-rwxr-xr-xtests/functional/test_mipsel_tuxrun.py8
-rwxr-xr-xtests/functional/test_ppc64_tuxrun.py16
-rwxr-xr-xtests/functional/test_ppc_tuxrun.py8
-rwxr-xr-xtests/functional/test_riscv32_tuxrun.py8
-rwxr-xr-xtests/functional/test_riscv64_tuxrun.py16
-rwxr-xr-xtests/functional/test_s390x_tuxrun.py8
-rwxr-xr-xtests/functional/test_sparc64_tuxrun.py8
-rwxr-xr-xtests/functional/test_x86_64_tuxrun.py8
m---------tests/lcitool/libvirt-ci0
-rw-r--r--tests/lcitool/mappings.yml29
-rwxr-xr-xtests/lcitool/refresh4
-rw-r--r--tests/qtest/libqos/virtio.c4
-rw-r--r--tests/qtest/meson.build2
-rw-r--r--tests/vm/Makefile.include29
-rw-r--r--tests/vm/basevm.py12
-rw-r--r--tests/vm/generated/freebsd.json2
35 files changed, 462 insertions, 181 deletions
diff --git a/.gitlab-ci.d/cirrus/freebsd-14.vars b/.gitlab-ci.d/cirrus/freebsd-14.vars
index 0a7ac5e..0997c47 100644
--- a/.gitlab-ci.d/cirrus/freebsd-14.vars
+++ b/.gitlab-ci.d/cirrus/freebsd-14.vars
@@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
NINJA='/usr/local/bin/ninja'
PACKAGING_COMMAND='pkg'
PIP3='/usr/local/bin/pip'
-PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk-vnc gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson mtools ncurses nettle ninja opencv pixman pkgconf png py311-numpy py311-pillow py311-pip py311-pyyaml py311-sphinx py311-sphinx_rtd_theme py311-tomli python3 rpm2cpio rust rust-bindgen-cli sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 xorriso zstd'
+PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache4 cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk-vnc gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson mtools ncurses nettle ninja opencv pixman pkgconf png py311-numpy py311-pillow py311-pip py311-pyyaml py311-sphinx py311-sphinx_rtd_theme py311-tomli python3 rpm2cpio rust rust-bindgen-cli sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 xorriso zstd'
PYPI_PKGS=''
PYTHON='/usr/local/bin/python3'
diff --git a/MAINTAINERS b/MAINTAINERS
index 2101b51..c1d954c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1288,6 +1288,7 @@ F: include/hw/intc/goldfish_pic.h
F: include/hw/intc/m68k_irqc.h
F: include/hw/misc/virt_ctrl.h
F: docs/specs/virt-ctlr.rst
+F: tests/functional/test_m68k_tuxrun.py
MicroBlaze Machines
-------------------
@@ -4151,7 +4152,6 @@ M: Alex Bennée <alex.bennee@linaro.org>
T: git https://gitlab.com/stsquad/qemu testing/next
M: Philippe Mathieu-Daudé <philmd@linaro.org>
M: Thomas Huth <thuth@redhat.com>
-R: Wainer dos Santos Moschetta <wainersm@redhat.com>
S: Maintained
F: .github/workflows/lockdown.yml
F: .gitlab-ci.yml
@@ -4197,7 +4197,6 @@ Integration Testing with the Avocado framework
W: https://trello.com/b/6Qi1pxVn/avocado-qemu
R: Cleber Rosa <crosa@redhat.com>
R: Philippe Mathieu-Daudé <philmd@linaro.org>
-R: Wainer dos Santos Moschetta <wainersm@redhat.com>
S: Odd Fixes
F: tests/avocado/
diff --git a/pc-bios/keymaps/meson.build b/pc-bios/keymaps/meson.build
index 0bd8ce0..a79a09b 100644
--- a/pc-bios/keymaps/meson.build
+++ b/pc-bios/keymaps/meson.build
@@ -39,19 +39,18 @@ else
native_qemu_keymap = qemu_keymap
endif
+keymap_targets = []
if native_qemu_keymap.found()
- t = []
foreach km, args: keymaps
# generate with qemu-kvm
- t += custom_target(km,
- build_by_default: true,
- output: km,
- command: [native_qemu_keymap, '-f', '@OUTPUT@', args.split()],
- install: have_system,
- install_dir: qemu_datadir / 'keymaps')
+ keymap_targets += custom_target(km,
+ build_by_default: true,
+ output: km,
+ command: [native_qemu_keymap, '-f', '@OUTPUT@', args.split()],
+ install: have_system,
+ install_dir: qemu_datadir / 'keymaps')
endforeach
-
- alias_target('update-keymaps', t)
+ alias_target('update-keymaps', keymap_targets)
else
install_data(keymaps.keys(), install_dir: qemu_datadir / 'keymaps')
endif
diff --git a/system/qtest.c b/system/qtest.c
index 99ef204..e68ed0f 100644
--- a/system/qtest.c
+++ b/system/qtest.c
@@ -78,6 +78,11 @@ static void *qtest_server_send_opaque;
* let you adjust the value of the clock (monotonically). All the commands
* return the current value of the clock in nanoseconds.
*
+ * If the commands FAIL then time wasn't advanced which is likely
+ * because the machine was in a paused state or no timer events exist
+ * in the future. This will cause qtest to abort and the test will
+ * need to check its assumptions.
+ *
* .. code-block:: none
*
* > clock_step
@@ -710,7 +715,8 @@ static void qtest_process_command(CharBackend *chr, gchar **words)
qtest_sendf(chr, "OK little\n");
}
} else if (qtest_enabled() && strcmp(words[0], "clock_step") == 0) {
- int64_t ns;
+ int64_t old_ns = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
+ int64_t ns, new_ns;
if (words[1]) {
int ret = qemu_strtoi64(words[1], NULL, 0, &ns);
@@ -719,11 +725,10 @@ static void qtest_process_command(CharBackend *chr, gchar **words)
ns = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL,
QEMU_TIMER_ATTR_ALL);
}
- qemu_clock_advance_virtual_time(
- qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + ns);
+ new_ns = qemu_clock_advance_virtual_time(old_ns + ns);
qtest_send_prefix(chr);
- qtest_sendf(chr, "OK %"PRIi64"\n",
- (int64_t)qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL));
+ qtest_sendf(chr, "%s %"PRIi64"\n",
+ new_ns > old_ns ? "OK" : "FAIL", new_ns);
} else if (strcmp(words[0], "module_load") == 0) {
Error *local_err = NULL;
int rv;
@@ -740,16 +745,16 @@ static void qtest_process_command(CharBackend *chr, gchar **words)
qtest_sendf(chr, "FAIL\n");
}
} else if (qtest_enabled() && strcmp(words[0], "clock_set") == 0) {
- int64_t ns;
+ int64_t ns, new_ns;
int ret;
g_assert(words[1]);
ret = qemu_strtoi64(words[1], NULL, 0, &ns);
g_assert(ret == 0);
- qemu_clock_advance_virtual_time(ns);
+ new_ns = qemu_clock_advance_virtual_time(ns);
qtest_send_prefix(chr);
- qtest_sendf(chr, "OK %"PRIi64"\n",
- (int64_t)qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL));
+ qtest_sendf(chr, "%s %"PRIi64"\n",
+ new_ns == ns ? "OK" : "FAIL", new_ns);
} else if (process_command_cb && process_command_cb(chr, words)) {
/* Command got consumed by the callback handler */
} else {
diff --git a/tests/docker/dockerfiles/debian-mips64el-cross.docker b/tests/docker/dockerfiles/debian-mips64el-cross.docker
index c09a8da..9f6c476 100644
--- a/tests/docker/dockerfiles/debian-mips64el-cross.docker
+++ b/tests/docker/dockerfiles/debian-mips64el-cross.docker
@@ -93,13 +93,18 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcmocka-dev:mips64el \
libcurl4-gnutls-dev:mips64el \
libdaxctl-dev:mips64el \
+ libdrm-dev:mips64el \
+ libepoxy-dev:mips64el \
libfdt-dev:mips64el \
libffi-dev:mips64el \
libfuse3-dev:mips64el \
+ libgbm-dev:mips64el \
libgcrypt20-dev:mips64el \
libglib2.0-dev:mips64el \
libglusterfs-dev:mips64el \
libgnutls28-dev:mips64el \
+ libgtk-3-dev:mips64el \
+ libgtk-vnc-2.0-dev:mips64el \
libibverbs-dev:mips64el \
libiscsi-dev:mips64el \
libjemalloc-dev:mips64el \
@@ -119,6 +124,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
librbd-dev:mips64el \
librdmacm-dev:mips64el \
libsasl2-dev:mips64el \
+ libsdl2-dev:mips64el \
+ libsdl2-image-dev:mips64el \
libseccomp-dev:mips64el \
libselinux1-dev:mips64el \
libslirp-dev:mips64el \
@@ -134,6 +141,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libusb-1.0-0-dev:mips64el \
libusbredirhost-dev:mips64el \
libvdeplug-dev:mips64el \
+ libvirglrenderer-dev:mips64el \
+ libvte-2.91-dev:mips64el \
libxdp-dev:mips64el \
libzstd-dev:mips64el \
nettle-dev:mips64el \
diff --git a/tests/docker/dockerfiles/debian-riscv64-cross.docker b/tests/docker/dockerfiles/debian-riscv64-cross.docker
index 4d8ca83..b0386cd 100644
--- a/tests/docker/dockerfiles/debian-riscv64-cross.docker
+++ b/tests/docker/dockerfiles/debian-riscv64-cross.docker
@@ -1,10 +1,10 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile --layers all --cross-arch riscv64 debian-sid qemu-minimal
+# $ lcitool dockerfile --layers all --cross-arch riscv64 debian-13 qemu-minimal
#
# https://gitlab.com/libvirt/libvirt-ci
-FROM docker.io/library/debian:sid-slim
+FROM docker.io/library/debian:trixie-slim
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
diff --git a/tests/docker/dockerfiles/debian-tricore-cross.docker b/tests/docker/dockerfiles/debian-tricore-cross.docker
index 479b4d6..7e00e87 100644
--- a/tests/docker/dockerfiles/debian-tricore-cross.docker
+++ b/tests/docker/dockerfiles/debian-tricore-cross.docker
@@ -11,8 +11,6 @@
#
FROM docker.io/library/debian:11-slim
-MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org>
-
RUN apt update && \
DEBIAN_FRONTEND=noninteractive apt install -yy eatmydata && \
DEBIAN_FRONTEND=noninteractive eatmydata apt install -yy \
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index a5087fc..bd3d903 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -13,6 +13,8 @@ endif
test_timeouts = {
'aarch64_aspeed' : 600,
'aarch64_raspi4' : 480,
+ 'aarch64_rme_virt' : 1200,
+ 'aarch64_rme_sbsaref' : 1200,
'aarch64_sbsaref_alpine' : 720,
'aarch64_sbsaref_freebsd' : 720,
'aarch64_tuxrun' : 240,
@@ -60,6 +62,8 @@ tests_aarch64_system_thorough = [
'aarch64_aspeed',
'aarch64_raspi3',
'aarch64_raspi4',
+ 'aarch64_rme_virt',
+ 'aarch64_rme_sbsaref',
'aarch64_sbsaref',
'aarch64_sbsaref_alpine',
'aarch64_sbsaref_freebsd',
@@ -116,6 +120,7 @@ tests_m68k_system_thorough = [
'm68k_mcf5208evb',
'm68k_nextcube',
'm68k_q800',
+ 'm68k_tuxrun',
]
tests_microblaze_system_thorough = [
diff --git a/tests/functional/qemu_test/tuxruntest.py b/tests/functional/qemu_test/tuxruntest.py
index 7227a83..41a4945 100644
--- a/tests/functional/qemu_test/tuxruntest.py
+++ b/tests/functional/qemu_test/tuxruntest.py
@@ -73,17 +73,7 @@ class TuxRunBaselineTest(QemuSystemTest):
Fetch the TuxBoot assets.
"""
kernel_image = kernel_asset.fetch()
- disk_image_zst = rootfs_asset.fetch()
-
- disk_image = self.scratch_file("rootfs.ext4")
-
- check_call(['zstd', "-f", "-d", disk_image_zst,
- "-o", disk_image],
- stdout=DEVNULL, stderr=DEVNULL)
- # zstd copies source archive permissions for the output
- # file, so must make this writable for QEMU
- os.chmod(disk_image, stat.S_IRUSR | stat.S_IWUSR)
-
+ disk_image = self.uncompress(rootfs_asset)
dtb = dtb_asset.fetch() if dtb_asset is not None else None
return (kernel_image, disk_image, dtb)
diff --git a/tests/functional/qemu_test/uncompress.py b/tests/functional/qemu_test/uncompress.py
index 6d02ded..76dcf22 100644
--- a/tests/functional/qemu_test/uncompress.py
+++ b/tests/functional/qemu_test/uncompress.py
@@ -10,8 +10,10 @@
import gzip
import lzma
import os
+import stat
import shutil
from urllib.parse import urlparse
+from subprocess import check_call, CalledProcessError
from .asset import Asset
@@ -38,6 +40,24 @@ def lzma_uncompress(xz_path, output_path):
os.remove(output_path)
raise
+
+def zstd_uncompress(zstd_path, output_path):
+ if os.path.exists(output_path):
+ return
+
+ try:
+ check_call(['zstd', "-f", "-d", zstd_path,
+ "-o", output_path])
+ except CalledProcessError as e:
+ os.remove(output_path)
+ raise Exception(
+ f"Unable to decompress zstd file {zstd_path} with {e}") from e
+
+ # zstd copies source archive permissions for the output
+ # file, so must make this writable for QEMU
+ os.chmod(output_path, stat.S_IRUSR | stat.S_IWUSR)
+
+
'''
@params compressed: filename, Asset, or file-like object to uncompress
@params uncompressed: filename to uncompress into
@@ -59,6 +79,8 @@ def uncompress(compressed, uncompressed, format=None):
lzma_uncompress(str(compressed), uncompressed)
elif format == "gz":
gzip_uncompress(str(compressed), uncompressed)
+ elif format == "zstd":
+ zstd_uncompress(str(compressed), uncompressed)
else:
raise Exception(f"Unknown compression format {format}")
@@ -79,5 +101,7 @@ def guess_uncompress_format(compressed):
return "xz"
elif ext == ".gz":
return "gz"
+ elif ext in [".zstd", ".zst"]:
+ return 'zstd'
else:
raise Exception(f"Unknown compression format for {compressed}")
diff --git a/tests/functional/test_aarch64_rme_sbsaref.py b/tests/functional/test_aarch64_rme_sbsaref.py
new file mode 100755
index 0000000..93bb528
--- /dev/null
+++ b/tests/functional/test_aarch64_rme_sbsaref.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python3
+#
+# Functional test that boots a Realms environment on sbsa-ref machine and a
+# nested guest VM using it.
+#
+# Copyright (c) 2024 Linaro Ltd.
+#
+# Author: Pierrick Bouvier <pierrick.bouvier@linaro.org>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import time
+import os
+import logging
+
+from qemu_test import QemuSystemTest, Asset
+from qemu_test import exec_command, wait_for_console_pattern
+from qemu_test import exec_command_and_wait_for_pattern
+from test_aarch64_rme_virt import test_realms_guest
+
+class Aarch64RMESbsaRefMachine(QemuSystemTest):
+
+ # Stack is built with OP-TEE build environment from those instructions:
+ # https://linaro.atlassian.net/wiki/spaces/QEMU/pages/29051027459/
+ # https://github.com/pbo-linaro/qemu-rme-stack
+ ASSET_RME_STACK_SBSA = Asset(
+ ('https://fileserver.linaro.org/s/KJyeBxL82mz2r7F/'
+ 'download/rme-stack-op-tee-4.2.0-cca-v4-sbsa.tar.gz'),
+ 'dd9ab28ec869bdf3b5376116cb3689103b43433fd5c4bca0f4a8d8b3c104999e')
+
+ # This tests the FEAT_RME cpu implementation, by booting a VM supporting it,
+ # and launching a nested VM using it.
+ def test_aarch64_rme_sbsaref(self):
+ self.set_machine('sbsa-ref')
+ self.require_accelerator('tcg')
+
+ self.vm.set_console()
+
+ stack_path_tar_gz = self.ASSET_RME_STACK_SBSA.fetch()
+ self.archive_extract(stack_path_tar_gz, format="tar")
+
+ rme_stack = self.scratch_file('rme-stack-op-tee-4.2.0-cca-v4-sbsa')
+ pflash0 = os.path.join(rme_stack, 'images', 'SBSA_FLASH0.fd')
+ pflash1 = os.path.join(rme_stack, 'images', 'SBSA_FLASH1.fd')
+ virtual = os.path.join(rme_stack, 'images', 'disks', 'virtual')
+ drive = os.path.join(rme_stack, 'out-br', 'images', 'rootfs.ext4')
+
+ self.vm.add_args('-cpu', 'max,x-rme=on,pauth-impdef=on')
+ self.vm.add_args('-m', '2G')
+ self.vm.add_args('-M', 'sbsa-ref')
+ self.vm.add_args('-drive', f'file={pflash0},format=raw,if=pflash')
+ self.vm.add_args('-drive', f'file={pflash1},format=raw,if=pflash')
+ self.vm.add_args('-drive', f'file=fat:rw:{virtual},format=raw')
+ self.vm.add_args('-drive', f'format=raw,if=none,file={drive},id=hd0')
+ self.vm.add_args('-device', 'virtio-blk-pci,drive=hd0')
+ self.vm.add_args('-device', 'virtio-9p-pci,fsdev=shr0,mount_tag=shr0')
+ self.vm.add_args('-fsdev', f'local,security_model=none,path={rme_stack},id=shr0')
+ self.vm.add_args('-device', 'virtio-net-pci,netdev=net0')
+ self.vm.add_args('-netdev', 'user,id=net0')
+
+ self.vm.launch()
+ # Wait for host VM boot to complete.
+ wait_for_console_pattern(self, 'Welcome to Buildroot')
+ exec_command_and_wait_for_pattern(self, 'root', '#')
+
+ test_realms_guest(self)
+
+if __name__ == '__main__':
+ QemuSystemTest.main()
diff --git a/tests/functional/test_aarch64_rme_virt.py b/tests/functional/test_aarch64_rme_virt.py
new file mode 100755
index 0000000..42b9229
--- /dev/null
+++ b/tests/functional/test_aarch64_rme_virt.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python3
+#
+# Functional test that boots a Realms environment on virt machine and a nested
+# guest VM using it.
+#
+# Copyright (c) 2024 Linaro Ltd.
+#
+# Author: Pierrick Bouvier <pierrick.bouvier@linaro.org>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import time
+import os
+import logging
+
+from qemu_test import QemuSystemTest, Asset
+from qemu_test import exec_command, wait_for_console_pattern
+from qemu_test import exec_command_and_wait_for_pattern
+
+def test_realms_guest(test_rme_instance):
+
+ # Boot the (nested) guest VM
+ exec_command(test_rme_instance,
+ 'qemu-system-aarch64 -M virt,gic-version=3 '
+ '-cpu host -enable-kvm -m 512M '
+ '-M confidential-guest-support=rme0 '
+ '-object rme-guest,id=rme0 '
+ '-device virtio-net-pci,netdev=net0,romfile= '
+ '-netdev user,id=net0 '
+ '-kernel /mnt/out/bin/Image '
+ '-initrd /mnt/out-br/images/rootfs.cpio '
+ '-serial stdio')
+ # Detect Realm activation during (nested) guest boot.
+ wait_for_console_pattern(test_rme_instance,
+ 'SMC_RMI_REALM_ACTIVATE')
+ # Wait for (nested) guest boot to complete.
+ wait_for_console_pattern(test_rme_instance,
+ 'Welcome to Buildroot')
+ exec_command_and_wait_for_pattern(test_rme_instance, 'root', '#')
+ # query (nested) guest cca report
+ exec_command(test_rme_instance, 'cca-workload-attestation report')
+ wait_for_console_pattern(test_rme_instance,
+ '"cca-platform-hash-algo-id": "sha-256"')
+ wait_for_console_pattern(test_rme_instance,
+ '"cca-realm-hash-algo-id": "sha-512"')
+ wait_for_console_pattern(test_rme_instance,
+ '"cca-realm-public-key-hash-algo-id": "sha-256"')
+
+class Aarch64RMEVirtMachine(QemuSystemTest):
+
+ # Stack is built with OP-TEE build environment from those instructions:
+ # https://linaro.atlassian.net/wiki/spaces/QEMU/pages/29051027459/
+ # https://github.com/pbo-linaro/qemu-rme-stack
+ ASSET_RME_STACK_VIRT = Asset(
+ ('https://fileserver.linaro.org/s/iaRsNDJp2CXHMSJ/'
+ 'download/rme-stack-op-tee-4.2.0-cca-v4-qemu_v8.tar.gz'),
+ '1851adc232b094384d8b879b9a2cfff07ef3d6205032b85e9b3a4a9ae6b0b7ad')
+
+ # This tests the FEAT_RME cpu implementation, by booting a VM supporting it,
+ # and launching a nested VM using it.
+ def test_aarch64_rme_virt(self):
+ self.set_machine('virt')
+ self.vm.set_console()
+ self.require_accelerator('tcg')
+
+ stack_path_tar_gz = self.ASSET_RME_STACK_VIRT.fetch()
+ self.archive_extract(stack_path_tar_gz, format="tar")
+
+ rme_stack = self.scratch_file('rme-stack-op-tee-4.2.0-cca-v4-qemu_v8')
+ kernel = os.path.join(rme_stack, 'out', 'bin', 'Image')
+ bios = os.path.join(rme_stack, 'out', 'bin', 'flash.bin')
+ drive = os.path.join(rme_stack, 'out-br', 'images', 'rootfs.ext4')
+
+ self.vm.add_args('-cpu', 'max,x-rme=on,pauth-impdef=on')
+ self.vm.add_args('-m', '2G')
+ self.vm.add_args('-M', 'virt,acpi=off,'
+ 'virtualization=on,'
+ 'secure=on,'
+ 'gic-version=3')
+ self.vm.add_args('-bios', bios)
+ self.vm.add_args('-kernel', kernel)
+ self.vm.add_args('-drive', f'format=raw,if=none,file={drive},id=hd0')
+ self.vm.add_args('-device', 'virtio-blk-pci,drive=hd0')
+ self.vm.add_args('-device', 'virtio-9p-device,fsdev=shr0,mount_tag=shr0')
+ self.vm.add_args('-fsdev', f'local,security_model=none,path={rme_stack},id=shr0')
+ self.vm.add_args('-device', 'virtio-net-pci,netdev=net0')
+ self.vm.add_args('-netdev', 'user,id=net0')
+ self.vm.add_args('-append', 'root=/dev/vda')
+
+ self.vm.launch()
+ # Wait for host VM boot to complete.
+ wait_for_console_pattern(self, 'Welcome to Buildroot')
+ exec_command_and_wait_for_pattern(self, 'root', '#')
+
+ test_realms_guest(self)
+
+if __name__ == '__main__':
+ QemuSystemTest.main()
diff --git a/tests/functional/test_aarch64_virt.py b/tests/functional/test_aarch64_virt.py
index 08576b0..07c1c13 100755
--- a/tests/functional/test_aarch64_virt.py
+++ b/tests/functional/test_aarch64_virt.py
@@ -10,13 +10,15 @@
#
# SPDX-License-Identifier: GPL-2.0-or-later
-import time
import logging
from subprocess import check_call, DEVNULL
+from qemu.machine.machine import VMLaunchFailure
+
from qemu_test import QemuSystemTest, Asset
-from qemu_test import exec_command, wait_for_console_pattern
-from qemu_test import get_qemu_img
+from qemu_test import exec_command, exec_command_and_wait_for_pattern
+from qemu_test import wait_for_console_pattern
+from qemu_test import skipIfMissingCommands, get_qemu_img
class Aarch64VirtMachine(QemuSystemTest):
@@ -40,11 +42,9 @@ class Aarch64VirtMachine(QemuSystemTest):
iso_path = self.ASSET_ALPINE_ISO.fetch()
self.set_machine('virt')
- self.vm.set_console()
- kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
- 'console=ttyAMA0')
self.require_accelerator("tcg")
+ self.vm.set_console()
self.vm.add_args("-accel", "tcg")
self.vm.add_args("-cpu", "max,pauth-impdef=on")
self.vm.add_args("-machine",
@@ -73,15 +73,16 @@ class Aarch64VirtMachine(QemuSystemTest):
Common code to launch basic virt machine with kernel+initrd
and a scratch disk.
"""
+ self.set_machine('virt')
+ self.require_accelerator("tcg")
+
logger = logging.getLogger('aarch64_virt')
kernel_path = self.ASSET_KERNEL.fetch()
- self.set_machine('virt')
self.vm.set_console()
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
'console=ttyAMA0')
- self.require_accelerator("tcg")
self.vm.add_args('-cpu', 'max,pauth-impdef=on',
'-machine', machine,
'-accel', 'tcg',
@@ -102,23 +103,29 @@ class Aarch64VirtMachine(QemuSystemTest):
# Add the device
self.vm.add_args('-blockdev',
- f"driver=qcow2,file.driver=file,file.filename={image_path},node-name=scratch")
+ "driver=qcow2,"
+ "file.driver=file,"
+ f"file.filename={image_path},node-name=scratch")
self.vm.add_args('-device',
'virtio-blk-device,drive=scratch')
self.vm.launch()
- self.wait_for_console_pattern('Welcome to Buildroot')
- time.sleep(0.1)
- exec_command(self, 'root')
- time.sleep(0.1)
- exec_command(self, 'dd if=/dev/hwrng of=/dev/vda bs=512 count=4')
- time.sleep(0.1)
- exec_command(self, 'md5sum /dev/vda')
- time.sleep(0.1)
- exec_command(self, 'cat /proc/interrupts')
- time.sleep(0.1)
- exec_command(self, 'cat /proc/self/maps')
- time.sleep(0.1)
+
+ ps1='#'
+ self.wait_for_console_pattern('login:')
+
+ commands = [
+ ('root', ps1),
+ ('cat /proc/interrupts', ps1),
+ ('cat /proc/self/maps', ps1),
+ ('uname -a', ps1),
+ ('dd if=/dev/hwrng of=/dev/vda bs=512 count=4', ps1),
+ ('md5sum /dev/vda', ps1),
+ ('halt -n', 'reboot: System halted')
+ ]
+
+ for cmd, pattern in commands:
+ exec_command_and_wait_for_pattern(self, cmd, pattern)
def test_aarch64_virt_gicv3(self):
self.common_aarch64_virt("virt,gic_version=3")
@@ -127,5 +134,75 @@ class Aarch64VirtMachine(QemuSystemTest):
self.common_aarch64_virt("virt,gic-version=2")
+ ASSET_VIRT_GPU_KERNEL = Asset(
+ 'https://fileserver.linaro.org/s/ce5jXBFinPxtEdx/'
+ 'download?path=%2F&files='
+ 'Image',
+ '89e5099d26166204cc5ca4bb6d1a11b92c217e1f82ec67e3ba363d09157462f6')
+
+ ASSET_VIRT_GPU_ROOTFS = Asset(
+ 'https://fileserver.linaro.org/s/ce5jXBFinPxtEdx/'
+ 'download?path=%2F&files='
+ 'rootfs.ext4.zstd',
+ '792da7573f5dc2913ddb7c638151d4a6b2d028a4cb2afb38add513c1924bdad4')
+
+ @skipIfMissingCommands('zstd')
+ def test_aarch64_virt_with_gpu(self):
+ # This tests boots with a buildroot test image that contains
+ # vkmark and other GPU exercising tools. We run a headless
+ # weston that nevertheless still exercises the virtio-gpu
+ # backend.
+
+ self.set_machine('virt')
+ self.require_accelerator("tcg")
+
+ kernel_path = self.ASSET_VIRT_GPU_KERNEL.fetch()
+ image_path = self.uncompress(self.ASSET_VIRT_GPU_ROOTFS, format="zstd")
+
+ self.vm.set_console()
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'console=ttyAMA0 root=/dev/vda')
+
+ self.vm.add_args("-accel", "tcg")
+ self.vm.add_args("-cpu", "neoverse-v1,pauth-impdef=on")
+ self.vm.add_args("-machine", "virt,gic-version=max",
+ '-kernel', kernel_path,
+ '-append', kernel_command_line)
+ self.vm.add_args("-smp", "2", "-m", "2048")
+ self.vm.add_args("-device",
+ "virtio-gpu-gl-pci,hostmem=4G,blob=on,venus=on")
+ self.vm.add_args("-display", "egl-headless")
+ self.vm.add_args("-display", "dbus,gl=on")
+ self.vm.add_args("-device", "virtio-blk-device,drive=hd0")
+ self.vm.add_args("-blockdev",
+ "driver=raw,file.driver=file,"
+ "node-name=hd0,read-only=on,"
+ f"file.filename={image_path}")
+ self.vm.add_args("-snapshot")
+
+ try:
+ self.vm.launch()
+ except VMLaunchFailure as excp:
+ if "old virglrenderer, blob resources unsupported" in excp.output:
+ self.skipTest("No blob support for virtio-gpu")
+ elif "old virglrenderer, venus unsupported" in excp.output:
+ self.skipTest("No venus support for virtio-gpu")
+ elif "egl: no drm render node available" in excp.output:
+ self.skipTest("Can't access host DRM render node")
+ else:
+ self.log.info(f"unhandled launch failure: {excp.output}")
+ raise excp
+
+ self.wait_for_console_pattern('buildroot login:')
+ exec_command(self, 'root')
+ exec_command(self, 'export XDG_RUNTIME_DIR=/tmp')
+ exec_command_and_wait_for_pattern(self,
+ "weston -B headless "
+ "--renderer gl "
+ "--shell kiosk "
+ "-- vkmark -b:duration=1.0",
+ "vkmark Score")
+
+
if __name__ == '__main__':
QemuSystemTest.main()
diff --git a/tests/functional/test_arm_tuxrun.py b/tests/functional/test_arm_tuxrun.py
index 944f075..4ac85f4 100755
--- a/tests/functional/test_arm_tuxrun.py
+++ b/tests/functional/test_arm_tuxrun.py
@@ -17,14 +17,14 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunArmTest(TuxRunBaselineTest):
ASSET_ARMV5_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/armv5/zImage',
- 'c95af2f27647c12265d75e9df44c22ff5228c59855f54aaa70f41ec2842e3a4d')
+ 'https://storage.tuxboot.com/buildroot/20241119/armv5/zImage',
+ '3931a3908dbcf0ec0fe292d035ffc4dfed95f797dedd4a59ccfcf7a46e6f92d4')
ASSET_ARMV5_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/armv5/rootfs.ext4.zst',
- '17177afa74e7294da0642861f08c88ca3c836764299a54bf6d1ce276cb9712a5')
+ 'https://storage.tuxboot.com/buildroot/20241119/armv5/rootfs.ext4.zst',
+ '60ff78b68c7021df378e4fc2d66d3b016484d1acc7e07fb8920c1d8e30f4571f')
ASSET_ARMV5_DTB = Asset(
- 'https://storage.tuxboot.com/20230331/armv5/versatile-pb.dtb',
- '0bc0c0b0858cefd3c32b385c0d66d97142ded29472a496f4f490e42fc7615b25')
+ 'https://storage.tuxboot.com/buildroot/20241119/armv5/versatile-pb.dtb',
+ '50988e69ef3f3b08bfb9146e8fe414129990029e8dfbed444953b7e14809530a')
def test_armv5(self):
self.set_machine('versatilepb')
@@ -37,11 +37,11 @@ class TuxRunArmTest(TuxRunBaselineTest):
drive="virtio-blk-pci")
ASSET_ARMV7_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/armv7/zImage',
- '4c7a22e9f15875bec06bd2a29d822496571eb297d4f22694099ffcdb19077572')
+ 'https://storage.tuxboot.com/buildroot/20241119/armv7/zImage',
+ '1377bc3d90de5ce57ab17cd67429fe8b15c2e9964248c775c682b67e6299b991')
ASSET_ARMV7_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/armv7/rootfs.ext4.zst',
- 'ab1fbbeaddda1ffdd45c9405a28cd5370c20f23a7cbc809cc90dc9f243a8eb5a')
+ 'https://storage.tuxboot.com/buildroot/20241119/armv7/rootfs.ext4.zst',
+ 'ed2cbc69bd6b3fbd5cafb5ee961393c7cfbe726446f14301c67d6b1f28bfdb51')
def test_armv7(self):
self.set_machine('virt')
@@ -52,11 +52,11 @@ class TuxRunArmTest(TuxRunBaselineTest):
rootfs_asset=self.ASSET_ARMV7_ROOTFS)
ASSET_ARMV7BE_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/armv7be/zImage',
- '7facc62082b57af12015b08f7fdbaf2f123ba07a478367853ae12b219afc9f2f')
+ 'https://storage.tuxboot.com/buildroot/20241119/armv7be/zImage',
+ 'a244e6da99f1bbd254827ec7681bd4aac9eb1aa05aaebc6b15e5d289ebb683f3')
ASSET_ARMV7BE_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/armv7be/rootfs.ext4.zst',
- '42ed46dd2d59986206c5b1f6cf35eab58fe3fd20c96b41aaa16b32f3f90a9835')
+ 'https://storage.tuxboot.com/buildroot/20241119/armv7be/rootfs.ext4.zst',
+ 'd4f9c57860a512163f30ecc69b2174d1a1bdeb853a43dc49a09cfcfe84e428ea')
def test_armv7be(self):
self.set_machine('virt')
diff --git a/tests/functional/test_i386_tuxrun.py b/tests/functional/test_i386_tuxrun.py
index c593ffb..f3ccf11 100755
--- a/tests/functional/test_i386_tuxrun.py
+++ b/tests/functional/test_i386_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunI386Test(TuxRunBaselineTest):
ASSET_I386_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/i386/bzImage',
- 'a3e5b32a354729e65910f5a1ffcda7c14a6c12a55e8213fb86e277f1b76ed956')
+ 'https://storage.tuxboot.com/buildroot/20241119/i386/bzImage',
+ '47fb44e38e34101eb0f71a2a01742b959d40ed5fd67cefb5608a39be11d3b74e')
ASSET_I386_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/i386/rootfs.ext4.zst',
- 'f15e66b2bf673a210ec2a4b2e744a80530b36289e04f5388aab812b97f69754a')
+ 'https://storage.tuxboot.com/buildroot/20241119/i386/rootfs.ext4.zst',
+ 'a1a3b3b4c9dccd6475b58db95c107b468b736b700f6620985a8ed050a73d51c8')
def test_i386(self):
self.set_machine('q35')
diff --git a/tests/functional/test_m68k_tuxrun.py b/tests/functional/test_m68k_tuxrun.py
new file mode 100755
index 0000000..7eacba1
--- /dev/null
+++ b/tests/functional/test_m68k_tuxrun.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python3
+#
+# Functional test that boots known good tuxboot images the same way
+# that tuxrun (www.tuxrun.org) does. This tool is used by things like
+# the LKFT project to run regression tests on kernels.
+#
+# Copyright (c) 2024 Linaro Ltd.
+#
+# Author:
+# Alex Bennée <alex.bennee@linaro.org>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+from qemu_test import Asset
+from qemu_test.tuxruntest import TuxRunBaselineTest
+
+class TuxRunM68KTest(TuxRunBaselineTest):
+
+ ASSET_M68K_KERNEL = Asset(
+ 'https://storage.tuxboot.com/buildroot/20241119/m68k/vmlinux',
+ '7754e1d5cec753ccf1dc6894729a7f54c1a4965631ebf56df8e4ce1163ad19d8')
+ ASSET_M68K_ROOTFS = Asset(
+ 'https://storage.tuxboot.com/buildroot/20241119/m68k/rootfs.ext4.zst',
+ '557962ffff265607912e82232cf21adbe0e4e5a88e1e1d411ce848c37f0213e9')
+
+ def test_m68k(self):
+ self.set_machine('virt')
+ self.cpu="m68040"
+ self.common_tuxrun(kernel_asset=self.ASSET_M68K_KERNEL,
+ rootfs_asset=self.ASSET_M68K_ROOTFS,
+ drive="virtio-blk-device")
+
+if __name__ == '__main__':
+ TuxRunBaselineTest.main()
diff --git a/tests/functional/test_mips64_tuxrun.py b/tests/functional/test_mips64_tuxrun.py
index 54af1ae..0e4c659 100755
--- a/tests/functional/test_mips64_tuxrun.py
+++ b/tests/functional/test_mips64_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunMips64Test(TuxRunBaselineTest):
ASSET_MIPS64_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/mips64/vmlinux',
- '09010e51e4b8bcbbd2494786ffb48eca78f228e96e5c5438344b0eac4029dc61')
+ 'https://storage.tuxboot.com/buildroot/20241119/mips64/vmlinux',
+ 'fe2882d216898ba2c56b49ba59f46ad392f36871f7fe325373cd926848b9dbdc')
ASSET_MIPS64_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/mips64/rootfs.ext4.zst',
- '69d91eeb04df3d8d172922c6993bb37d4deeb6496def75d8580f6f9de3e431da')
+ 'https://storage.tuxboot.com/buildroot/20241119/mips64/rootfs.ext4.zst',
+ 'b8c98400216b6d4fb3b3ff05e9929aa015948b596cf0b82234813c84a4f7f4d5')
def test_mips64(self):
self.set_machine('malta')
diff --git a/tests/functional/test_mips64el_tuxrun.py b/tests/functional/test_mips64el_tuxrun.py
index 819549a..0a24757 100755
--- a/tests/functional/test_mips64el_tuxrun.py
+++ b/tests/functional/test_mips64el_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunMips64ELTest(TuxRunBaselineTest):
ASSET_MIPS64EL_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/mips64el/vmlinux',
- 'd4e08965e2155c4cccce7c5f34d18fe34c636cda2f2c9844387d614950155266')
+ 'https://storage.tuxboot.com/buildroot/20241119/mips64el/vmlinux',
+ '0d2829a96f005229839c4cd586d4d8a136ea4b488d29821611c8e97f2266bfa9')
ASSET_MIPS64EL_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/mips64el/rootfs.ext4.zst',
- 'fba585368f5915b1498ed081863474b2d7ec4e97cdd46d21bdcb2f9698f83de4')
+ 'https://storage.tuxboot.com/buildroot/20241119/mips64el/rootfs.ext4.zst',
+ '69c8b69a4f1582ce4c6f01a994968f5d73bffb2fc99cbeeeb26c8b5a28eaeb84')
def test_mips64el(self):
self.set_machine('malta')
diff --git a/tests/functional/test_mips_tuxrun.py b/tests/functional/test_mips_tuxrun.py
index 6fec44c..6771dbd 100755
--- a/tests/functional/test_mips_tuxrun.py
+++ b/tests/functional/test_mips_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunMipsTest(TuxRunBaselineTest):
ASSET_MIPS_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/mips32/vmlinux',
- 'bfd2172f8b17fb32970ca0c8c58f59c5a4ca38aa5855d920be3a69b5d16e52f0')
+ 'https://storage.tuxboot.com/buildroot/20241119/mips32/vmlinux',
+ 'b6f97fc698ae8c96456ad8c996c7454228074df0d7520dedd0a15e2913700a19')
ASSET_MIPS_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/mips32/rootfs.ext4.zst',
- 'fc3da0b4c2f38d74c6d705123bb0f633c76ed953128f9d0859378c328a6d11a0')
+ 'https://storage.tuxboot.com/buildroot/20241119/mips32/rootfs.ext4.zst',
+ '87055cf3cbde3fd134e5039e7b87feb03231d8c4b21ee712b8ba3308dfa72f50')
def test_mips32(self):
self.set_machine('malta')
diff --git a/tests/functional/test_mipsel_tuxrun.py b/tests/functional/test_mipsel_tuxrun.py
index 2965bbd..d4b39ba 100755
--- a/tests/functional/test_mipsel_tuxrun.py
+++ b/tests/functional/test_mipsel_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunMipsELTest(TuxRunBaselineTest):
ASSET_MIPSEL_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/mips32el/vmlinux',
- '8573867c68a8443db8de6d08bb33fb291c189ca2ca671471d3973a3e712096a3')
+ 'https://storage.tuxboot.com/buildroot/20241119/mips32el/vmlinux',
+ '660dd8c7a6ca7a32d37b4e6348865532ab0edb66802e8cc07869338444cf4929')
ASSET_MIPSEL_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/mips32el/rootfs.ext4.zst',
- 'e799768e289fd69209c21f4dacffa11baea7543d5db101e8ce27e3bc2c41d90e')
+ 'https://storage.tuxboot.com/buildroot/20241119/mips32el/rootfs.ext4.zst',
+ 'c5d69542bcaed54a4f34671671eb4be5c608ee02671d4d0436544367816a73b1')
def test_mips32el(self):
self.set_machine('malta')
diff --git a/tests/functional/test_ppc64_tuxrun.py b/tests/functional/test_ppc64_tuxrun.py
index 8a98d18..05c6162 100755
--- a/tests/functional/test_ppc64_tuxrun.py
+++ b/tests/functional/test_ppc64_tuxrun.py
@@ -85,11 +85,11 @@ class TuxRunPPC64Test(TuxRunBaselineTest):
drive="scsi-hd")
ASSET_PPC64_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/ppc64/vmlinux',
- 'f22a9b9e924174a4c199f4c7e5d91a2339fcfe51c6eafd0907dc3e09b64ab728')
+ 'https://storage.tuxboot.com/buildroot/20241119/ppc64/vmlinux',
+ '8219d5cb26e7654ad7826fe8aee6290f7c01eef44f2cd6d26c15fe8f99e1c17c')
ASSET_PPC64_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/ppc64/rootfs.ext4.zst',
- '1d953e81a4379e537fc8e41e05a0a59d9b453eef97aa03d47866c6c45b00bdff')
+ 'https://storage.tuxboot.com/buildroot/20241119/ppc64/rootfs.ext4.zst',
+ 'b68e12314303c5dd0fef37ae98021299a206085ae591893e73557af99a02d373')
def test_ppc64(self):
self.ppc64_common_tuxrun(kernel_asset=self.ASSET_PPC64_KERNEL,
@@ -97,11 +97,11 @@ class TuxRunPPC64Test(TuxRunBaselineTest):
prefix='tuxrun_ppc64_')
ASSET_PPC64LE_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/ppc64le/vmlinux',
- '979eb61b445a010fb13e2b927126991f8ceef9c590fa2be0996c00e293e80cf2')
+ 'https://storage.tuxboot.com/buildroot/20241119/ppc64le/vmlinux',
+ '21aea1fbc18bf6fa7d8ca4ea48d4940b2c8363c077acd564eb47d769b7495279')
ASSET_PPC64LE_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/ppc64le/rootfs.ext4.zst',
- 'b442678c93fb8abe1f7d3bfa20556488de6b475c22c8fed363f42cf81a0a3906')
+ 'https://storage.tuxboot.com/buildroot/20241119/ppc64le/rootfs.ext4.zst',
+ '67d36a3f9597b738e8b7359bdf04500f4d9bb82fc35eaa65aa439d888b2392f4')
def test_ppc64le(self):
self.ppc64_common_tuxrun(kernel_asset=self.ASSET_PPC64LE_KERNEL,
diff --git a/tests/functional/test_ppc_tuxrun.py b/tests/functional/test_ppc_tuxrun.py
index 50b7694..5458a7f 100755
--- a/tests/functional/test_ppc_tuxrun.py
+++ b/tests/functional/test_ppc_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunPPC32Test(TuxRunBaselineTest):
ASSET_PPC32_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/ppc32/uImage',
- '1a68f74b860fda022fb12e03c5efece8c2b8b590d96cca37a8481a3ae0b3f81f')
+ 'https://storage.tuxboot.com/buildroot/20241119/ppc32/uImage',
+ 'aa5d81deabdb255a318c4bc5ffd6fdd2b5da1ef39f1955dcc35b671d258b68e9')
ASSET_PPC32_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/ppc32/rootfs.ext4.zst',
- '8885b9d999cc24d679542a02e9b6aaf48f718f2050ece6b8347074b6ee41dd09')
+ 'https://storage.tuxboot.com/buildroot/20241119/ppc32/rootfs.ext4.zst',
+ '67554f830269d6bf53b67c7dd206bcc821e463993d526b1644066fea8117019b')
def test_ppc32(self):
self.set_machine('ppce500')
diff --git a/tests/functional/test_riscv32_tuxrun.py b/tests/functional/test_riscv32_tuxrun.py
index 49b57cd..3c57020 100755
--- a/tests/functional/test_riscv32_tuxrun.py
+++ b/tests/functional/test_riscv32_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunRiscV32Test(TuxRunBaselineTest):
ASSET_RISCV32_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/riscv32/Image',
- '89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5')
+ 'https://storage.tuxboot.com/buildroot/20241119/riscv32/Image',
+ '872bc8f8e0d4661825d5f47f7bec64988e9d0a8bd5db8917d57e16f66d83b329')
ASSET_RISCV32_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/riscv32/rootfs.ext4.zst',
- '7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba')
+ 'https://storage.tuxboot.com/buildroot/20241119/riscv32/rootfs.ext4.zst',
+ '511ad34e63222db08d6c1da16fad224970de36517a784110956ba6a24a0ee5f6')
def test_riscv32(self):
self.set_machine('virt')
diff --git a/tests/functional/test_riscv64_tuxrun.py b/tests/functional/test_riscv64_tuxrun.py
index 4e24495..0d8de36 100755
--- a/tests/functional/test_riscv64_tuxrun.py
+++ b/tests/functional/test_riscv64_tuxrun.py
@@ -17,18 +17,18 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunRiscV64Test(TuxRunBaselineTest):
ASSET_RISCV64_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/riscv64/Image',
- 'cd634badc65e52fb63465ec99e309c0de0369f0841b7d9486f9729e119bac25e')
+ 'https://storage.tuxboot.com/buildroot/20241119/riscv64/Image',
+ '2bd8132a3bf21570290042324fff48c987f42f2a00c08de979f43f0662ebadba')
ASSET_RISCV64_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/riscv64/rootfs.ext4.zst',
- 'b18e3a3bdf27be03da0b285e84cb71bf09eca071c3a087b42884b6982ed679eb')
+ 'https://storage.tuxboot.com/buildroot/20241119/riscv64/rootfs.ext4.zst',
+ 'aa4736a9872651dfc0d95e709465eedf1134fd19d42b8cb305bfd776f9801004')
ASSET_RISCV32_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/riscv32/Image',
- '89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5')
+ 'https://storage.tuxboot.com/buildroot/20241119/riscv32/Image',
+ '872bc8f8e0d4661825d5f47f7bec64988e9d0a8bd5db8917d57e16f66d83b329')
ASSET_RISCV32_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/riscv32/rootfs.ext4.zst',
- '7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba')
+ 'https://storage.tuxboot.com/buildroot/20241119/riscv32/rootfs.ext4.zst',
+ '511ad34e63222db08d6c1da16fad224970de36517a784110956ba6a24a0ee5f6')
def test_riscv64(self):
self.set_machine('virt')
diff --git a/tests/functional/test_s390x_tuxrun.py b/tests/functional/test_s390x_tuxrun.py
index dcab17c..a7db4bf 100755
--- a/tests/functional/test_s390x_tuxrun.py
+++ b/tests/functional/test_s390x_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunS390xTest(TuxRunBaselineTest):
ASSET_S390X_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/s390/bzImage',
- '0414e98dd1c3dafff8496c9cd9c28a5f8d04553bb5ba37e906a812b48d442ef0')
+ 'https://storage.tuxboot.com/buildroot/20241119/s390/bzImage',
+ 'ee67e91db52a2aed104a7c72b2a08987c678f8179c029626789c35d6dd0fedf1')
ASSET_S390X_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/s390/rootfs.ext4.zst',
- '88c37c32276677f873a25ab9ec6247895b8e3e6f8259134de2a616080b8ab3fc')
+ 'https://storage.tuxboot.com/buildroot/20241119/s390/rootfs.ext4.zst',
+ 'bff7971fc2fef56372d98afe4557b82fd0a785a241e44c29b058e577ad1bbb44')
def test_s390(self):
self.wait_for_shutdown=False
diff --git a/tests/functional/test_sparc64_tuxrun.py b/tests/functional/test_sparc64_tuxrun.py
index 1c2c005..3be08d6 100755
--- a/tests/functional/test_sparc64_tuxrun.py
+++ b/tests/functional/test_sparc64_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunSparc64Test(TuxRunBaselineTest):
ASSET_SPARC64_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/sparc64/vmlinux',
- 'e34313e4325ff21deaa3d38a502aa09a373ef62b9bd4d7f8f29388b688225c55')
+ 'https://storage.tuxboot.com/buildroot/20241119/sparc64/vmlinux',
+ 'a04cfb2e70a264051d161fdd93aabf4b2a9472f2e435c14ed18c5848c5fed261')
ASSET_SPARC64_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/sparc64/rootfs.ext4.zst',
- 'ad2f1dc436ab51583543d25d2c210cab478645d47078d30d129a66ab0e281d76')
+ 'https://storage.tuxboot.com/buildroot/20241119/sparc64/rootfs.ext4.zst',
+ '479c3dc104c82b68be55e2c0c5c38cd473d0b37ad4badccde4775bb88ce34611')
def test_sparc64(self):
self.root='sda'
diff --git a/tests/functional/test_x86_64_tuxrun.py b/tests/functional/test_x86_64_tuxrun.py
index 4f96139..fcbc62b 100755
--- a/tests/functional/test_x86_64_tuxrun.py
+++ b/tests/functional/test_x86_64_tuxrun.py
@@ -17,11 +17,11 @@ from qemu_test.tuxruntest import TuxRunBaselineTest
class TuxRunX86Test(TuxRunBaselineTest):
ASSET_X86_64_KERNEL = Asset(
- 'https://storage.tuxboot.com/20230331/x86_64/bzImage',
- '2bc7480a669ee9b6b82500a236aba0c54233debe98cb968268fa230f52f03461')
+ 'https://storage.tuxboot.com/buildroot/20241119/x86_64/bzImage',
+ 'f57bfc6553bcd6e0a54aab86095bf642b33b5571d14e3af1731b18c87ed5aef8')
ASSET_X86_64_ROOTFS = Asset(
- 'https://storage.tuxboot.com/20230331/x86_64/rootfs.ext4.zst',
- 'b72ac729769b8f51c6dffb221113c9a063c774dbe1d66af30eb593c4e9999b4b')
+ 'https://storage.tuxboot.com/buildroot/20241119/x86_64/rootfs.ext4.zst',
+ '4b8b2a99117519c5290e1202cb36eb6c7aaba92b357b5160f5970cf5fb78a751')
def test_x86_64(self):
self.set_machine('q35')
diff --git a/tests/lcitool/libvirt-ci b/tests/lcitool/libvirt-ci
-Subproject 9ad3f70bde9865d5ad18f36d256d472e72b5cbf
+Subproject b6a65806bc9b2b56985f5e97c936b77c7e7a99f
diff --git a/tests/lcitool/mappings.yml b/tests/lcitool/mappings.yml
index f8186b0..74eb13d 100644
--- a/tests/lcitool/mappings.yml
+++ b/tests/lcitool/mappings.yml
@@ -6,23 +6,6 @@ mappings:
flake8:
OpenSUSELeap15:
- # Due to https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1081535 we
- # have to disable all packages that depend on libgl1-mesa-dri:mips64el
- gtk3:
- mips64el-deb:
-
- libdrm:
- mips64el-deb:
-
- libepoxy:
- mips64el-deb:
-
- gtk-vnc:
- mips64el-deb:
-
- mesa-libgbm:
- mips64el-deb:
-
meson:
OpenSUSELeap15:
@@ -81,18 +64,6 @@ mappings:
python3-wheel:
OpenSUSELeap15: python311-pip
- sdl2:
- mips64el-deb:
-
- sdl2-image:
- mips64el-deb:
-
- virglrenderer:
- mips64el-deb:
-
- vte:
- mips64el-deb:
-
pypi_mappings:
# Request more recent version
meson:
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index 6720516..53f8d25 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -220,7 +220,9 @@ try:
trailer=cross_build("powerpc64le-linux-gnu-",
"ppc64-softmmu,ppc64-linux-user"))
- generate_dockerfile("debian-riscv64-cross", "debian-sid",
+ # while not yet a release architecture the packages are still
+ # build while part of testing
+ generate_dockerfile("debian-riscv64-cross", "debian-13",
project="qemu-minimal",
cross="riscv64",
trailer=cross_build("riscv64-linux-gnu-",
diff --git a/tests/qtest/libqos/virtio.c b/tests/qtest/libqos/virtio.c
index a21b6ee..2e79796 100644
--- a/tests/qtest/libqos/virtio.c
+++ b/tests/qtest/libqos/virtio.c
@@ -170,7 +170,6 @@ void qvirtio_wait_queue_isr(QTestState *qts, QVirtioDevice *d,
gint64 start_time = g_get_monotonic_time();
for (;;) {
- qtest_clock_step(qts, 100);
if (d->bus->get_queue_isr_status(d, vq)) {
return;
}
@@ -192,7 +191,6 @@ uint8_t qvirtio_wait_status_byte_no_isr(QTestState *qts, QVirtioDevice *d,
uint8_t val;
while ((val = qtest_readb(qts, addr)) == 0xff) {
- qtest_clock_step(qts, 100);
g_assert(!d->bus->get_queue_isr_status(d, vq));
g_assert(g_get_monotonic_time() - start_time <= timeout_us);
}
@@ -219,14 +217,12 @@ void qvirtio_wait_used_elem(QTestState *qts, QVirtioDevice *d,
for (;;) {
uint32_t got_desc_idx;
- qtest_clock_step(qts, 100);
if (d->bus->get_queue_isr_status(d, vq) &&
qvirtqueue_get_buf(qts, vq, &got_desc_idx, len)) {
g_assert_cmpint(got_desc_idx, ==, desc_idx);
return;
}
-
g_assert(g_get_monotonic_time() - start_time <= timeout_us);
}
}
diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
index c5a7002..f75c105 100644
--- a/tests/qtest/meson.build
+++ b/tests/qtest/meson.build
@@ -383,7 +383,7 @@ qtests = {
if vnc.found()
gvnc = dependency('gvnc-1.0', method: 'pkg-config', required: false)
if gvnc.found()
- qtests += {'vnc-display-test': [gvnc]}
+ qtests += {'vnc-display-test': [gvnc, keymap_targets]}
qtests_generic += [ 'vnc-display-test' ]
endif
endif
diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
index 13ed80f..14188bb 100644
--- a/tests/vm/Makefile.include
+++ b/tests/vm/Makefile.include
@@ -64,23 +64,24 @@ endif
@echo " vm-boot-ssh-<guest> - Boot guest and login via ssh"
@echo
@echo "Special variables:"
- @echo " BUILD_TARGET=foo - Override the build target"
- @echo " DEBUG=1 - Enable verbose output on host and interactive debugging"
- @echo ' EXTRA_CONFIGURE_OPTS="..." - Pass to configure step'
- @echo " J=[0..9]* - Override the -jN parameter for make commands"
- @echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm "
- @echo " USE_TCG=1 - Use TCG for cross-arch images"
- @echo " QEMU=/path/to/qemu - Change path to QEMU binary"
+ @echo " BUILD_TARGET=foo - Override the build target"
+ @echo " DEBUG=1 - Enable verbose output on host and interactive debugging"
+ @echo " ROOT_USER=1 - Login as root user for interactive shell"
+ @echo ' EXTRA_CONFIGURE_OPTS="..." - Pass to configure step'
+ @echo " J=[0..9]* - Override the -jN parameter for make commands"
+ @echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm "
+ @echo " USE_TCG=1 - Use TCG for cross-arch images"
+ @echo " QEMU=/path/to/qemu - Change path to QEMU binary"
ifeq ($(HAVE_PYTHON_YAML),yes)
- @echo " QEMU_CONFIG=/path/conf.yml - Change path to VM configuration .yml file."
+ @echo " QEMU_CONFIG=/path/conf.yml - Change path to VM configuration .yml file."
else
@echo " (install python3-yaml to enable support for yaml file to configure a VM.)"
endif
- @echo " See conf_example_*.yml for file format details."
- @echo " QEMU_IMG=/path/to/qemu-img - Change path to qemu-img tool"
- @echo " QEMU_LOCAL=1 - Use QEMU binary local to this build."
- @echo " TARGET_LIST=a,b,c - Override target list in builds"
- @echo " V=1 - Enable verbose output on host and guest commands"
+ @echo " See conf_example_*.yml for file format details."
+ @echo " QEMU_IMG=/path/to/qemu-img - Change path to qemu-img tool"
+ @echo " QEMU_LOCAL=1 - Use QEMU binary local to this build."
+ @echo " TARGET_LIST=a,b,c - Override target list in builds"
+ @echo " V=1 - Enable verbose output on host and guest commands"
vm-build-all: $(addprefix vm-build-, $(IMAGES))
@@ -141,6 +142,6 @@ vm-boot-ssh-%: $(IMAGES_DIR)/%.img $(VM_VENV)
$(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \
$(if $(LOG_CONSOLE),--log-console) \
--image "$<" \
- --interactive \
+ $(if $(ROOT_USER),--interactive-root,-interactive) \
false, \
" VM-BOOT-SSH $*") || true
diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 4a1af04..6d41ac7 100644
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -520,8 +520,7 @@ def get_qemu_path(arch, build_path=None):
if "QEMU" in os.environ:
qemu_path = os.environ["QEMU"]
elif build_path:
- qemu_path = os.path.join(build_path, arch + "-softmmu")
- qemu_path = os.path.join(qemu_path, "qemu-system-" + arch)
+ qemu_path = os.path.join(build_path, "qemu-system-" + arch)
else:
# Default is to use system path for qemu.
qemu_path = "qemu-system-" + arch
@@ -613,8 +612,11 @@ def parse_args(vmcls):
parser.add_argument("--source-path", default=None,
help="Path of source directory, "\
"for finding additional files. ")
- parser.add_argument("--interactive", "-I", action="store_true",
- help="Interactively run command")
+ int_ops = parser.add_mutually_exclusive_group()
+ int_ops.add_argument("--interactive", "-I", action="store_true",
+ help="Interactively run command")
+ int_ops.add_argument("--interactive-root", action="store_true",
+ help="Interactively run command as root")
parser.add_argument("--snapshot", "-s", action="store_true",
help="run tests with a snapshot")
parser.add_argument("--genisoimage", default="genisoimage",
@@ -676,6 +678,8 @@ def main(vmcls, config=None):
exitcode = 3
if args.interactive:
vm.ssh()
+ elif args.interactive_root:
+ vm.ssh_root()
if not args.snapshot:
vm.graceful_shutdown()
diff --git a/tests/vm/generated/freebsd.json b/tests/vm/generated/freebsd.json
index 3cb7fb7..81fc38d 100644
--- a/tests/vm/generated/freebsd.json
+++ b/tests/vm/generated/freebsd.json
@@ -13,7 +13,7 @@
"bzip2",
"ca_root_nss",
"capstone4",
- "ccache",
+ "ccache4",
"cmocka",
"ctags",
"curl",