* [PATCH v1 0/2] add x86 acceptance test for the "host" cpu bug
@ 2021-06-04 18:09 Claudio Fontana
2021-06-04 18:09 ` [PATCH v1 1/2] tests/acceptance: move pkg extraction to avocado_qemu/ Claudio Fontana
2021-06-04 18:09 ` [PATCH v1 2/2] tests/acceptance: add OVMF firmware test to cover x86_64 "host" cpu bug Claudio Fontana
0 siblings, 2 replies; 7+ messages in thread
From: Claudio Fontana @ 2021-06-04 18:09 UTC (permalink / raw)
To: Philippe Mathieu-Daudé,
Wainer dos Santos Moschetta, Cleber Rosa Junior
Cc: Paolo Bonzini, Claudio Fontana, qemu-devel
This is a new acceptance test that verifies the ability to boot the OVMF
"sec" binaries, that were previously broken by the i386 refactoring,
due to improper ordering of x86_64 cpu initialization and realization.
Claudio Fontana (2):
tests/acceptance: move pkg extraction to avocado_qemu/
tests/acceptance: add OVMF firmware test to cover x86_64 "host" cpu bug
tests/acceptance/avocado_qemu/__init__.py | 38 ++++++++
tests/acceptance/boot_linux_console.py | 104 +++++++---------------
tests/acceptance/boot_ovmf_fc33.py | 75 ++++++++++++++++
tests/acceptance/boot_xen.py | 7 +-
tests/acceptance/replay_kernel.py | 23 ++---
tests/acceptance/tcg_plugins.py | 5 +-
6 files changed, 166 insertions(+), 86 deletions(-)
create mode 100644 tests/acceptance/boot_ovmf_fc33.py
--
2.26.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 1/2] tests/acceptance: move pkg extraction to avocado_qemu/
2021-06-04 18:09 [PATCH v1 0/2] add x86 acceptance test for the "host" cpu bug Claudio Fontana
@ 2021-06-04 18:09 ` Claudio Fontana
2021-07-13 18:05 ` Cleber Rosa
2021-06-04 18:09 ` [PATCH v1 2/2] tests/acceptance: add OVMF firmware test to cover x86_64 "host" cpu bug Claudio Fontana
1 sibling, 1 reply; 7+ messages in thread
From: Claudio Fontana @ 2021-06-04 18:09 UTC (permalink / raw)
To: Philippe Mathieu-Daudé,
Wainer dos Santos Moschetta, Cleber Rosa Junior
Cc: Paolo Bonzini, Claudio Fontana, qemu-devel
currently these utility functions are present only in boot_linux_console.py,
but they are useful in general, not just for linux.
In order to reuse them for a firmware test with OVMF, make these functions
general utility functions inside avocado_qemu/ , from where we will
punctually import them.
Signed-off-by: Claudio Fontana <cfontana@suse.de>
---
tests/acceptance/avocado_qemu/__init__.py | 38 ++++++++
tests/acceptance/boot_linux_console.py | 104 +++++++---------------
tests/acceptance/boot_xen.py | 7 +-
tests/acceptance/replay_kernel.py | 23 ++---
tests/acceptance/tcg_plugins.py | 5 +-
5 files changed, 91 insertions(+), 86 deletions(-)
diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
index 83b1741ec8..f625eb1ab7 100644
--- a/tests/acceptance/avocado_qemu/__init__.py
+++ b/tests/acceptance/avocado_qemu/__init__.py
@@ -21,6 +21,7 @@
from avocado.utils import datadrainer
from avocado.utils import network
from avocado.utils import vmimage
+from avocado.utils import process
from avocado.utils.path import find_command
@@ -140,6 +141,43 @@ def wait_for_console_pattern(test, success_message, failure_message=None,
"""
_console_interaction(test, success_message, failure_message, None, vm=vm)
+def extract_from_deb(test, deb, path):
+ """
+ Extracts a file from a deb package into the test workdir
+
+ :param deb: path to the deb archive
+ :param path: path within the deb archive of the file to be extracted
+ :returns: path of the extracted file
+ """
+ cwd = os.getcwd()
+ os.chdir(test.workdir)
+ file_path = process.run("ar t %s" % deb).stdout_text.split()[2]
+ process.run("ar x %s %s" % (deb, file_path))
+ archive.extract(file_path, test.workdir)
+ os.chdir(cwd)
+ # Return complete path to extracted file. Because callers to
+ # extract_from_deb() specify 'path' with a leading slash, it is
+ # necessary to use os.path.relpath() as otherwise os.path.join()
+ # interprets it as an absolute path and drops the test.workdir part.
+ return os.path.normpath(os.path.join(test.workdir,
+ os.path.relpath(path, '/')))
+
+def extract_from_rpm(test, rpm, path):
+ """
+ Extracts a file from an RPM package into the test workdir.
+
+ :param rpm: path to the rpm archive
+ :param path: path within the rpm archive of the file to be extracted
+ needs to be a relative path (starting with './') because
+ cpio(1), which is used to extract the file, expects that.
+ :returns: path of the extracted file
+ """
+ cwd = os.getcwd()
+ os.chdir(test.workdir)
+ process.run("rpm2cpio %s | cpio -id %s" % (rpm, path), shell=True)
+ os.chdir(cwd)
+ return os.path.normpath(os.path.join(test.workdir, path))
+
def exec_command(test, command):
"""
Send a command to a console (appending CRLF characters), while logging
diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
index 276a53f146..81fb1d796d 100644
--- a/tests/acceptance/boot_linux_console.py
+++ b/tests/acceptance/boot_linux_console.py
@@ -19,6 +19,7 @@
from avocado_qemu import exec_command_and_wait_for_pattern
from avocado_qemu import interrupt_interactive_console_until_pattern
from avocado_qemu import wait_for_console_pattern
+from avocado_qemu import extract_from_deb
from avocado.utils import process
from avocado.utils import archive
from avocado.utils.path import find_command, CmdNotFoundError
@@ -53,43 +54,6 @@ def wait_for_console_pattern(self, success_message, vm=None):
failure_message='Kernel panic - not syncing',
vm=vm)
- def extract_from_deb(self, deb, path):
- """
- Extracts a file from a deb package into the test workdir
-
- :param deb: path to the deb archive
- :param path: path within the deb archive of the file to be extracted
- :returns: path of the extracted file
- """
- cwd = os.getcwd()
- os.chdir(self.workdir)
- file_path = process.run("ar t %s" % deb).stdout_text.split()[2]
- process.run("ar x %s %s" % (deb, file_path))
- archive.extract(file_path, self.workdir)
- os.chdir(cwd)
- # Return complete path to extracted file. Because callers to
- # extract_from_deb() specify 'path' with a leading slash, it is
- # necessary to use os.path.relpath() as otherwise os.path.join()
- # interprets it as an absolute path and drops the self.workdir part.
- return os.path.normpath(os.path.join(self.workdir,
- os.path.relpath(path, '/')))
-
- def extract_from_rpm(self, rpm, path):
- """
- Extracts a file from an RPM package into the test workdir.
-
- :param rpm: path to the rpm archive
- :param path: path within the rpm archive of the file to be extracted
- needs to be a relative path (starting with './') because
- cpio(1), which is used to extract the file, expects that.
- :returns: path of the extracted file
- """
- cwd = os.getcwd()
- os.chdir(self.workdir)
- process.run("rpm2cpio %s | cpio -id %s" % (rpm, path), shell=True)
- os.chdir(cwd)
- return os.path.normpath(os.path.join(self.workdir, path))
-
class BootLinuxConsole(LinuxKernelTest):
"""
Boots a Linux kernel and checks that the console is operational and the
@@ -127,8 +91,8 @@ def test_mips_malta(self):
'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb')
deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinux-2.6.32-5-4kc-malta')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinux-2.6.32-5-4kc-malta')
self.vm.set_console()
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
@@ -159,8 +123,8 @@ def test_mips64el_malta(self):
'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb')
deb_hash = '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinux-2.6.32-5-5kc-malta')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinux-2.6.32-5-5kc-malta')
self.vm.set_console()
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
@@ -180,8 +144,8 @@ def test_mips64el_fuloong2e(self):
'linux-image-3.16.0-6-loongson-2e_3.16.56-1+deb8u1_mipsel.deb')
deb_hash = 'd04d446045deecf7b755ef576551de0c4184dd44'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinux-3.16.0-6-loongson-2e')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinux-3.16.0-6-loongson-2e')
self.vm.set_console()
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
@@ -202,8 +166,8 @@ def test_mips_malta_cpio(self):
'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb')
deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinux-4.5.0-2-4kc-malta')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinux-4.5.0-2-4kc-malta')
initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
'8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/'
'mips/rootfs.cpio.gz')
@@ -441,8 +405,8 @@ def do_test_arm_raspi2(self, uart_id):
'raspberrypi-kernel_1.20190215-1_armhf.deb')
deb_hash = 'cd284220b32128c5084037553db3c482426f3972'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img')
- dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb')
+ kernel_path = extract_from_deb(deb_path, '/boot/kernel7.img')
+ dtb_path = extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb')
self.vm.set_console()
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
@@ -477,10 +441,10 @@ def test_arm_exynos4210_initrd(self):
'linux-image-4.19.0-6-armmp_4.19.67-2+deb10u1_armhf.deb')
deb_hash = 'fa9df4a0d38936cb50084838f2cb933f570d7d82'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-4.19.0-6-armmp')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinuz-4.19.0-6-armmp')
dtb_path = '/usr/lib/linux-image-4.19.0-6-armmp/exynos4210-smdkv310.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ dtb_path = extract_from_deb(deb_path, dtb_path)
initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
'2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
@@ -516,10 +480,10 @@ def test_arm_cubieboard_initrd(self):
'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-5.10.16-sunxi')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinuz-5.10.16-sunxi')
dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ dtb_path = extract_from_deb(deb_path, dtb_path)
initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
'2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
'arm/rootfs-armv5.cpio.gz')
@@ -556,10 +520,10 @@ def test_arm_cubieboard_sata(self):
'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-5.10.16-sunxi')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinuz-5.10.16-sunxi')
dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ dtb_path = extract_from_deb(deb_path, dtb_path)
rootfs_url = ('https://github.com/groeck/linux-build-test/raw/'
'2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
'arm/rootfs-armv5.ext2.gz')
@@ -683,10 +647,10 @@ def test_arm_orangepi(self):
'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-5.10.16-sunxi')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinuz-5.10.16-sunxi')
dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ dtb_path = extract_from_deb(deb_path, dtb_path)
self.vm.set_console()
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
@@ -708,10 +672,10 @@ def test_arm_orangepi_initrd(self):
'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-5.10.16-sunxi')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinuz-5.10.16-sunxi')
dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ dtb_path = extract_from_deb(deb_path, dtb_path)
initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
'2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
'arm/rootfs-armv7a.cpio.gz')
@@ -751,10 +715,10 @@ def test_arm_orangepi_sd(self):
'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-5.10.16-sunxi')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinuz-5.10.16-sunxi')
dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ dtb_path = extract_from_deb(deb_path, dtb_path)
rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/'
'kci-2019.02/armel/base/rootfs.ext2.xz')
rootfs_hash = '692510cb625efda31640d1de0a8d60e26040f061'
@@ -856,7 +820,7 @@ def test_arm_orangepi_uboot_netbsd9(self):
# OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt,
# before to boot NetBSD.
uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin'
- uboot_path = self.extract_from_deb(deb_path, uboot_path)
+ uboot_path = extract_from_deb(deb_path, uboot_path)
image_url = ('https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/'
'evbarm-earmv7hf/binary/gzimg/armv7.img.gz')
image_hash = '2babb29d36d8360adcb39c09e31060945259917a'
@@ -976,8 +940,8 @@ def test_m68k_q800(self):
'/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb')
deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinux-5.3.0-1-m68k')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinux-5.3.0-1-m68k')
self.vm.set_console()
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
@@ -1065,8 +1029,8 @@ def test_arm_ast2600_debian(self):
deb_hash = 'db40d32fe39255d05482bea48d72467b67d6225bb2a2a4d6f618cb8976f1e09e'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash,
algorithm='sha256')
- kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-5.10.0-3-armmp')
- dtb_path = self.extract_from_deb(deb_path,
+ kernel_path = extract_from_deb(deb_path, '/boot/vmlinuz-5.10.0-3-armmp')
+ dtb_path = extract_from_deb(deb_path,
'/usr/lib/linux-image-5.10.0-3-armmp/aspeed-bmc-opp-tacoma.dtb')
self.vm.set_console()
diff --git a/tests/acceptance/boot_xen.py b/tests/acceptance/boot_xen.py
index 75c2d44492..44ee809247 100644
--- a/tests/acceptance/boot_xen.py
+++ b/tests/acceptance/boot_xen.py
@@ -15,6 +15,7 @@
from avocado import skipIf
from avocado_qemu import wait_for_console_pattern
+from avocado_qemu import extract_from_deb
from boot_linux_console import LinuxKernelTest
@@ -78,7 +79,7 @@ def test_arm64_xen_411_and_dom0(self):
'xen-hypervisor-4.11-arm64_4.11.4%2B37-g3263f257ca-1_arm64.deb')
xen_sha1 = '034e634d4416adbad1212d59b62bccdcda63e62a'
xen_deb = self.fetch_asset(xen_url, asset_hash=xen_sha1)
- xen_path = self.extract_from_deb(xen_deb, "/boot/xen-4.11-arm64")
+ xen_path = extract_from_deb(xen_deb, "/boot/xen-4.11-arm64")
self.launch_xen(xen_path)
@@ -96,7 +97,7 @@ def test_arm64_xen_414_and_dom0(self):
'xen-hypervisor-4.14-arm64_4.14.0%2B80-gd101b417b7-1_arm64.deb')
xen_sha1 = 'b9d209dd689ed2b393e625303a225badefec1160'
xen_deb = self.fetch_asset(xen_url, asset_hash=xen_sha1)
- xen_path = self.extract_from_deb(xen_deb, "/boot/xen-4.14-arm64")
+ xen_path = extract_from_deb(xen_deb, "/boot/xen-4.14-arm64")
self.launch_xen(xen_path)
@@ -113,6 +114,6 @@ def test_arm64_xen_415_and_dom0(self):
'?path=%2F&files=xen-upstream-4.15-unstable.deb')
xen_sha1 = 'fc191172b85cf355abb95d275a24cc0f6d6579d8'
xen_deb = self.fetch_asset(xen_url, asset_hash=xen_sha1)
- xen_path = self.extract_from_deb(xen_deb, "/boot/xen-4.15-unstable")
+ xen_path = extract_from_deb(xen_deb, "/boot/xen-4.15-unstable")
self.launch_xen(xen_path)
diff --git a/tests/acceptance/replay_kernel.py b/tests/acceptance/replay_kernel.py
index 71facdaa75..a8990952cc 100644
--- a/tests/acceptance/replay_kernel.py
+++ b/tests/acceptance/replay_kernel.py
@@ -18,6 +18,7 @@
from avocado import skipIf
from avocado import skipUnless
from avocado_qemu import wait_for_console_pattern
+from avocado_qemu import extract_from_deb
from avocado.utils import archive
from avocado.utils import process
from boot_linux_console import LinuxKernelTest
@@ -106,8 +107,8 @@ def test_mips_malta(self):
'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb')
deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinux-2.6.32-5-4kc-malta')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinux-2.6.32-5-4kc-malta')
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
console_pattern = 'Kernel command line: %s' % kernel_command_line
@@ -134,8 +135,8 @@ def test_mips64el_malta(self):
'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb')
deb_hash = '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinux-2.6.32-5-5kc-malta')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinux-2.6.32-5-5kc-malta')
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
console_pattern = 'Kernel command line: %s' % kernel_command_line
self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
@@ -186,10 +187,10 @@ def test_arm_cubieboard_initrd(self):
'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-5.10.16-sunxi')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinuz-5.10.16-sunxi')
dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ dtb_path = extract_from_deb(deb_path, dtb_path)
initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
'2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
'arm/rootfs-armv5.cpio.gz')
@@ -234,8 +235,8 @@ def test_m68k_q800(self):
'/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb')
deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinux-5.3.0-1-m68k')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinux-5.3.0-1-m68k')
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
'console=ttyS0 vga=off')
@@ -370,8 +371,8 @@ def test_mips_malta_cpio(self):
'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb')
deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinux-4.5.0-2-4kc-malta')
+ kernel_path = extract_from_deb(deb_path,
+ '/boot/vmlinux-4.5.0-2-4kc-malta')
initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
'8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/'
'mips/rootfs.cpio.gz')
diff --git a/tests/acceptance/tcg_plugins.py b/tests/acceptance/tcg_plugins.py
index c21bf9e52a..ed70e069a4 100644
--- a/tests/acceptance/tcg_plugins.py
+++ b/tests/acceptance/tcg_plugins.py
@@ -14,6 +14,7 @@
import re
from boot_linux_console import LinuxKernelTest
+from avocado_qemu import extract_from_deb
class PluginKernelBase(LinuxKernelTest):
@@ -59,8 +60,8 @@ def _grab_aarch64_kernel(self):
'linux-image-4.19.0-12-arm64_4.19.152-1_arm64.deb')
kernel_sha1 = '2036c2792f80ac9c4ccaae742b2e0a28385b6010'
kernel_deb = self.fetch_asset(kernel_url, asset_hash=kernel_sha1)
- kernel_path = self.extract_from_deb(kernel_deb,
- "/boot/vmlinuz-4.19.0-12-arm64")
+ kernel_path = extract_from_deb(kernel_deb,
+ "/boot/vmlinuz-4.19.0-12-arm64")
return kernel_path
def test_aarch64_virt_insn(self):
--
2.26.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 2/2] tests/acceptance: add OVMF firmware test to cover x86_64 "host" cpu bug
2021-06-04 18:09 [PATCH v1 0/2] add x86 acceptance test for the "host" cpu bug Claudio Fontana
2021-06-04 18:09 ` [PATCH v1 1/2] tests/acceptance: move pkg extraction to avocado_qemu/ Claudio Fontana
@ 2021-06-04 18:09 ` Claudio Fontana
2021-06-04 19:12 ` Eduardo Habkost
1 sibling, 1 reply; 7+ messages in thread
From: Claudio Fontana @ 2021-06-04 18:09 UTC (permalink / raw)
To: Philippe Mathieu-Daudé,
Wainer dos Santos Moschetta, Cleber Rosa Junior
Cc: Paolo Bonzini, Vitaly Kuznetsov, Claudio Fontana,
Eduardo Habkost, qemu-devel
recent refactoring of i386 broke OVMF firmware with a wrong initialization
order for host cpu. This test covers this issue for potential regressions.
For the actual fixes, see:
commit ("i386: run accel_cpu_instance_init as post_init"),
commit ("i386: reorder call to cpu_exec_realizefn"),
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Claudio Fontana <cfontana@suse.de>
---
tests/acceptance/boot_ovmf_fc33.py | 75 ++++++++++++++++++++++++++++++
1 file changed, 75 insertions(+)
create mode 100644 tests/acceptance/boot_ovmf_fc33.py
diff --git a/tests/acceptance/boot_ovmf_fc33.py b/tests/acceptance/boot_ovmf_fc33.py
new file mode 100644
index 0000000000..c0c4e0e394
--- /dev/null
+++ b/tests/acceptance/boot_ovmf_fc33.py
@@ -0,0 +1,75 @@
+# Functional test that boots OVMF firmware with cpu host.
+#
+# This test was added to capture x86 "host" cpu initialization and realization
+# ordering problems.
+#
+# Copyright (c) 2021 SUSE LLC
+#
+# Author:
+# Claudio Fontana <cfontana@suse.de>
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or
+# later. See the COPYING file in the top-level directory.
+
+import os
+import time
+
+from avocado_qemu import Test
+from avocado_qemu import extract_from_rpm
+from avocado_qemu import wait_for_console_pattern
+from avocado.utils import process
+from avocado.utils.path import find_command, CmdNotFoundError
+
+class FirmwareTest(Test):
+ def wait_for_firmware_message(self, success_message):
+ wait_for_console_pattern(self, success_message, failure_message=None)
+
+class BootOVMF(FirmwareTest):
+ """
+ Boots OVMF secureboot and checks for a specific message.
+ If we do not see the message, it's an ERROR that we express via a timeout.
+ """
+ timeout = 10
+
+ def test_cpu_host_x86(self):
+ """
+ :avocado: tags=arch:x86_64
+ :avocado: tags=machine:q35
+ :avocado: tags=cpu:host
+ :avocado: tags=accel:kvm
+ """
+ self.require_accelerator("kvm")
+
+ rpm_url = ('https://download-ib01.fedoraproject.org/'
+ 'pub/fedora/linux/updates/33/Everything/x86_64/Packages/e/'
+ 'edk2-ovmf-20200801stable-3.fc33.noarch.rpm')
+ rpm_hash = '45e1001313dc2deed9b41a532ef090682a11ccd1'
+ rpm_path = self.fetch_asset(rpm_url, asset_hash=rpm_hash)
+
+ # Note the use of "./" at the beginning of the paths in the rpm,
+ # it is not an accident, see extract_from_rpm in avocado_qemu/
+
+ ovmf_code_sec = extract_from_rpm(self, rpm_path,
+ './usr/share/edk2/ovmf/OVMF_CODE.secboot.fd')
+ ovmf_vars_sec = extract_from_rpm(self, rpm_path,
+ './usr/share/edk2/ovmf/OVMF_VARS.secboot.fd')
+
+ # at this point the ovmf code should be reachable in the tmp dir; we
+ # can use this sleep to debug issues with the extraction above.
+ #time.sleep(3600)
+
+ self.vm.set_console()
+ self.vm.add_args(
+ '-accel', 'kvm',
+ '-cpu', 'host',
+ '-machine', 'q35,smm=on',
+ '-m', '4G',
+ '-drive',
+ 'if=pflash,format=raw,readonly=on,unit=0,file=' + ovmf_code_sec,
+ '-drive',
+ 'if=pflash,format=raw,unit=1,file=' + ovmf_vars_sec,
+ '-display', 'none',
+ '-serial', 'stdio')
+ self.vm.launch()
+ console_pattern = 'BdsDxe: failed to load Boot0001'
+ self.wait_for_firmware_message(success_message=console_pattern);
--
2.26.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 2/2] tests/acceptance: add OVMF firmware test to cover x86_64 "host" cpu bug
2021-06-04 18:09 ` [PATCH v1 2/2] tests/acceptance: add OVMF firmware test to cover x86_64 "host" cpu bug Claudio Fontana
@ 2021-06-04 19:12 ` Eduardo Habkost
2021-06-22 6:47 ` Claudio Fontana
0 siblings, 1 reply; 7+ messages in thread
From: Eduardo Habkost @ 2021-06-04 19:12 UTC (permalink / raw)
To: Claudio Fontana
Cc: qemu-devel, Wainer dos Santos Moschetta, Cleber Rosa Junior,
Paolo Bonzini, Vitaly Kuznetsov, Philippe Mathieu-Daudé
On Fri, Jun 04, 2021 at 08:09:45PM +0200, Claudio Fontana wrote:
> recent refactoring of i386 broke OVMF firmware with a wrong initialization
> order for host cpu. This test covers this issue for potential regressions.
>
> For the actual fixes, see:
> commit ("i386: run accel_cpu_instance_init as post_init"),
> commit ("i386: reorder call to cpu_exec_realizefn"),
>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Claudio Fontana <cfontana@suse.de>
I think basic OVMF boot regression testing is still welcome, but
would we be able to detect this specific bug more quickly and
easily by just looking at the VCPU CPUID data?
We could use the proposed query-kvm-cpuid command for that:
https://lore.kernel.org/qemu-devel/20210603090753.11688-1-valeriy.vdovin@virtuozzo.com
> ---
> tests/acceptance/boot_ovmf_fc33.py | 75 ++++++++++++++++++++++++++++++
> 1 file changed, 75 insertions(+)
> create mode 100644 tests/acceptance/boot_ovmf_fc33.py
>
> diff --git a/tests/acceptance/boot_ovmf_fc33.py b/tests/acceptance/boot_ovmf_fc33.py
> new file mode 100644
> index 0000000000..c0c4e0e394
> --- /dev/null
> +++ b/tests/acceptance/boot_ovmf_fc33.py
> @@ -0,0 +1,75 @@
> +# Functional test that boots OVMF firmware with cpu host.
> +#
> +# This test was added to capture x86 "host" cpu initialization and realization
> +# ordering problems.
> +#
> +# Copyright (c) 2021 SUSE LLC
> +#
> +# Author:
> +# Claudio Fontana <cfontana@suse.de>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2 or
> +# later. See the COPYING file in the top-level directory.
> +
> +import os
> +import time
> +
> +from avocado_qemu import Test
> +from avocado_qemu import extract_from_rpm
> +from avocado_qemu import wait_for_console_pattern
> +from avocado.utils import process
> +from avocado.utils.path import find_command, CmdNotFoundError
> +
> +class FirmwareTest(Test):
> + def wait_for_firmware_message(self, success_message):
> + wait_for_console_pattern(self, success_message, failure_message=None)
> +
> +class BootOVMF(FirmwareTest):
> + """
> + Boots OVMF secureboot and checks for a specific message.
> + If we do not see the message, it's an ERROR that we express via a timeout.
> + """
> + timeout = 10
> +
> + def test_cpu_host_x86(self):
> + """
> + :avocado: tags=arch:x86_64
> + :avocado: tags=machine:q35
> + :avocado: tags=cpu:host
> + :avocado: tags=accel:kvm
> + """
> + self.require_accelerator("kvm")
> +
> + rpm_url = ('https://download-ib01.fedoraproject.org/'
> + 'pub/fedora/linux/updates/33/Everything/x86_64/Packages/e/'
> + 'edk2-ovmf-20200801stable-3.fc33.noarch.rpm')
> + rpm_hash = '45e1001313dc2deed9b41a532ef090682a11ccd1'
> + rpm_path = self.fetch_asset(rpm_url, asset_hash=rpm_hash)
> +
> + # Note the use of "./" at the beginning of the paths in the rpm,
> + # it is not an accident, see extract_from_rpm in avocado_qemu/
> +
> + ovmf_code_sec = extract_from_rpm(self, rpm_path,
> + './usr/share/edk2/ovmf/OVMF_CODE.secboot.fd')
> + ovmf_vars_sec = extract_from_rpm(self, rpm_path,
> + './usr/share/edk2/ovmf/OVMF_VARS.secboot.fd')
> +
> + # at this point the ovmf code should be reachable in the tmp dir; we
> + # can use this sleep to debug issues with the extraction above.
> + #time.sleep(3600)
> +
> + self.vm.set_console()
> + self.vm.add_args(
> + '-accel', 'kvm',
> + '-cpu', 'host',
> + '-machine', 'q35,smm=on',
> + '-m', '4G',
> + '-drive',
> + 'if=pflash,format=raw,readonly=on,unit=0,file=' + ovmf_code_sec,
> + '-drive',
> + 'if=pflash,format=raw,unit=1,file=' + ovmf_vars_sec,
> + '-display', 'none',
> + '-serial', 'stdio')
> + self.vm.launch()
> + console_pattern = 'BdsDxe: failed to load Boot0001'
> + self.wait_for_firmware_message(success_message=console_pattern);
> --
> 2.26.2
>
--
Eduardo
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 2/2] tests/acceptance: add OVMF firmware test to cover x86_64 "host" cpu bug
2021-06-04 19:12 ` Eduardo Habkost
@ 2021-06-22 6:47 ` Claudio Fontana
0 siblings, 0 replies; 7+ messages in thread
From: Claudio Fontana @ 2021-06-22 6:47 UTC (permalink / raw)
To: Eduardo Habkost
Cc: qemu-devel, Wainer dos Santos Moschetta, Cleber Rosa Junior,
Paolo Bonzini, Vitaly Kuznetsov, Philippe Mathieu-Daudé
On 6/4/21 9:12 PM, Eduardo Habkost wrote:
> On Fri, Jun 04, 2021 at 08:09:45PM +0200, Claudio Fontana wrote:
>> recent refactoring of i386 broke OVMF firmware with a wrong initialization
>> order for host cpu. This test covers this issue for potential regressions.
>>
>> For the actual fixes, see:
>> commit ("i386: run accel_cpu_instance_init as post_init"),
>> commit ("i386: reorder call to cpu_exec_realizefn"),
>>
>> Cc: Eduardo Habkost <ehabkost@redhat.com>
>> Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>> Signed-off-by: Claudio Fontana <cfontana@suse.de>
>
> I think basic OVMF boot regression testing is still welcome, but
> would we be able to detect this specific bug more quickly and
> easily by just looking at the VCPU CPUID data?
The current proposal to get the cpuid as seen by the guest would detect the wrong order of features expansion
for sure, but I am not sure about the other issues.
Should we add this basic OVMF boot regression testing still?
I would say it is simple and useful.
Thanks,
Claudio
>
> We could use the proposed query-kvm-cpuid command for that:
> https://lore.kernel.org/qemu-devel/20210603090753.11688-1-valeriy.vdovin@virtuozzo.com
>
>
>> ---
>> tests/acceptance/boot_ovmf_fc33.py | 75 ++++++++++++++++++++++++++++++
>> 1 file changed, 75 insertions(+)
>> create mode 100644 tests/acceptance/boot_ovmf_fc33.py
>>
>> diff --git a/tests/acceptance/boot_ovmf_fc33.py b/tests/acceptance/boot_ovmf_fc33.py
>> new file mode 100644
>> index 0000000000..c0c4e0e394
>> --- /dev/null
>> +++ b/tests/acceptance/boot_ovmf_fc33.py
>> @@ -0,0 +1,75 @@
>> +# Functional test that boots OVMF firmware with cpu host.
>> +#
>> +# This test was added to capture x86 "host" cpu initialization and realization
>> +# ordering problems.
>> +#
>> +# Copyright (c) 2021 SUSE LLC
>> +#
>> +# Author:
>> +# Claudio Fontana <cfontana@suse.de>
>> +#
>> +# This work is licensed under the terms of the GNU GPL, version 2 or
>> +# later. See the COPYING file in the top-level directory.
>> +
>> +import os
>> +import time
>> +
>> +from avocado_qemu import Test
>> +from avocado_qemu import extract_from_rpm
>> +from avocado_qemu import wait_for_console_pattern
>> +from avocado.utils import process
>> +from avocado.utils.path import find_command, CmdNotFoundError
>> +
>> +class FirmwareTest(Test):
>> + def wait_for_firmware_message(self, success_message):
>> + wait_for_console_pattern(self, success_message, failure_message=None)
>> +
>> +class BootOVMF(FirmwareTest):
>> + """
>> + Boots OVMF secureboot and checks for a specific message.
>> + If we do not see the message, it's an ERROR that we express via a timeout.
>> + """
>> + timeout = 10
>> +
>> + def test_cpu_host_x86(self):
>> + """
>> + :avocado: tags=arch:x86_64
>> + :avocado: tags=machine:q35
>> + :avocado: tags=cpu:host
>> + :avocado: tags=accel:kvm
>> + """
>> + self.require_accelerator("kvm")
>> +
>> + rpm_url = ('https://download-ib01.fedoraproject.org/'
>> + 'pub/fedora/linux/updates/33/Everything/x86_64/Packages/e/'
>> + 'edk2-ovmf-20200801stable-3.fc33.noarch.rpm')
>> + rpm_hash = '45e1001313dc2deed9b41a532ef090682a11ccd1'
>> + rpm_path = self.fetch_asset(rpm_url, asset_hash=rpm_hash)
>> +
>> + # Note the use of "./" at the beginning of the paths in the rpm,
>> + # it is not an accident, see extract_from_rpm in avocado_qemu/
>> +
>> + ovmf_code_sec = extract_from_rpm(self, rpm_path,
>> + './usr/share/edk2/ovmf/OVMF_CODE.secboot.fd')
>> + ovmf_vars_sec = extract_from_rpm(self, rpm_path,
>> + './usr/share/edk2/ovmf/OVMF_VARS.secboot.fd')
>> +
>> + # at this point the ovmf code should be reachable in the tmp dir; we
>> + # can use this sleep to debug issues with the extraction above.
>> + #time.sleep(3600)
>> +
>> + self.vm.set_console()
>> + self.vm.add_args(
>> + '-accel', 'kvm',
>> + '-cpu', 'host',
>> + '-machine', 'q35,smm=on',
>> + '-m', '4G',
>> + '-drive',
>> + 'if=pflash,format=raw,readonly=on,unit=0,file=' + ovmf_code_sec,
>> + '-drive',
>> + 'if=pflash,format=raw,unit=1,file=' + ovmf_vars_sec,
>> + '-display', 'none',
>> + '-serial', 'stdio')
>> + self.vm.launch()
>> + console_pattern = 'BdsDxe: failed to load Boot0001'
>> + self.wait_for_firmware_message(success_message=console_pattern);
>> --
>> 2.26.2
>>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] tests/acceptance: move pkg extraction to avocado_qemu/
2021-06-04 18:09 ` [PATCH v1 1/2] tests/acceptance: move pkg extraction to avocado_qemu/ Claudio Fontana
@ 2021-07-13 18:05 ` Cleber Rosa
2021-07-14 7:39 ` Claudio Fontana
0 siblings, 1 reply; 7+ messages in thread
From: Cleber Rosa @ 2021-07-13 18:05 UTC (permalink / raw)
To: Claudio Fontana
Cc: Paolo Bonzini, Philippe Mathieu-Daudé,
qemu-devel, Wainer dos Santos Moschetta
Claudio Fontana writes:
> currently these utility functions are present only in boot_linux_console.py,
> but they are useful in general, not just for linux.
>
> In order to reuse them for a firmware test with OVMF, make these functions
> general utility functions inside avocado_qemu/ , from where we will
> punctually import them.
>
> Signed-off-by: Claudio Fontana <cfontana@suse.de>
> ---
> tests/acceptance/avocado_qemu/__init__.py | 38 ++++++++
> tests/acceptance/boot_linux_console.py | 104 +++++++---------------
> tests/acceptance/boot_xen.py | 7 +-
> tests/acceptance/replay_kernel.py | 23 ++---
> tests/acceptance/tcg_plugins.py | 5 +-
> 5 files changed, 91 insertions(+), 86 deletions(-)
>
> diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
> index 83b1741ec8..f625eb1ab7 100644
> --- a/tests/acceptance/avocado_qemu/__init__.py
> +++ b/tests/acceptance/avocado_qemu/__init__.py
> @@ -21,6 +21,7 @@
> from avocado.utils import datadrainer
> from avocado.utils import network
> from avocado.utils import vmimage
> +from avocado.utils import process
It's also missing:
from avocado.utils import archive
Because it's used...
> from avocado.utils.path import find_command
>
>
> @@ -140,6 +141,43 @@ def wait_for_console_pattern(test, success_message, failure_message=None,
> """
> _console_interaction(test, success_message, failure_message, None, vm=vm)
>
> +def extract_from_deb(test, deb, path):
> + """
> + Extracts a file from a deb package into the test workdir
> +
> + :param deb: path to the deb archive
> + :param path: path within the deb archive of the file to be extracted
> + :returns: path of the extracted file
> + """
> + cwd = os.getcwd()
> + os.chdir(test.workdir)
> + file_path = process.run("ar t %s" % deb).stdout_text.split()[2]
> + process.run("ar x %s %s" % (deb, file_path))
> + archive.extract(file_path, test.workdir)
... here.
Also there are some missing changes for other tests using
extract_from_(deb|rpm), such as:
diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
index 55ce7a5870..1caea29d27 100644
--- a/tests/acceptance/boot_linux_console.py
+++ b/tests/acceptance/boot_linux_console.py
@@ -92,7 +92,7 @@ def test_mips_malta(self):
'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb')
deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04'
deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = extract_from_deb(deb_path,
+ kernel_path = extract_from_deb(self, deb_path,
'/boot/vmlinux-2.6.32-5-4kc-malta')
self.vm.set_console()
I've seen the same or similar problems for other tests:
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips_malta: ERROR: extract_from_deb() missing 1 required positional argument: 'path' (0.03 s)
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips64el_malta: ERROR: extract_from_deb() missing 1 required positional argument: 'path' (0.03 s)
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips64el_fuloong2e: ERROR: extract_from_deb() missing 1 required positional argument: 'path' (0.03 s)
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips_malta_cpio: ERROR: extract_from_deb() missing 1 required positional argument: 'path' (0.03 s)
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_arm_raspi2_initrd:
ERROR: 'BootLinuxConsole' object has no attribute 'extract_from_deb'
(0.03 s)
Having said that, since Avocado 89.0[1] there is a new API[2] that
should be able to handle both deb and rpm extractions.
I'll try to post a suggestion based on that API here... unless you beat
me to it. :)
Thanks,
- Cleber.
[1] - https://avocado-framework.readthedocs.io/en/89.0/releases/89_0.html#utility-apis
[2] - https://avocado-framework.readthedocs.io/en/89.0/api/utils/avocado.utils.software_manager.html#avocado.utils.software_manager.SoftwareManager.extract_from_package
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] tests/acceptance: move pkg extraction to avocado_qemu/
2021-07-13 18:05 ` Cleber Rosa
@ 2021-07-14 7:39 ` Claudio Fontana
0 siblings, 0 replies; 7+ messages in thread
From: Claudio Fontana @ 2021-07-14 7:39 UTC (permalink / raw)
To: Cleber Rosa
Cc: Paolo Bonzini, Philippe Mathieu-Daudé,
qemu-devel, Wainer dos Santos Moschetta
On 7/13/21 8:05 PM, Cleber Rosa wrote:
>
> Claudio Fontana writes:
>
>> currently these utility functions are present only in boot_linux_console.py,
>> but they are useful in general, not just for linux.
>>
>> In order to reuse them for a firmware test with OVMF, make these functions
>> general utility functions inside avocado_qemu/ , from where we will
>> punctually import them.
>>
>> Signed-off-by: Claudio Fontana <cfontana@suse.de>
>> ---
>> tests/acceptance/avocado_qemu/__init__.py | 38 ++++++++
>> tests/acceptance/boot_linux_console.py | 104 +++++++---------------
>> tests/acceptance/boot_xen.py | 7 +-
>> tests/acceptance/replay_kernel.py | 23 ++---
>> tests/acceptance/tcg_plugins.py | 5 +-
>> 5 files changed, 91 insertions(+), 86 deletions(-)
>>
>> diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
>> index 83b1741ec8..f625eb1ab7 100644
>> --- a/tests/acceptance/avocado_qemu/__init__.py
>> +++ b/tests/acceptance/avocado_qemu/__init__.py
>> @@ -21,6 +21,7 @@
>> from avocado.utils import datadrainer
>> from avocado.utils import network
>> from avocado.utils import vmimage
>> +from avocado.utils import process
>
> It's also missing:
>
> from avocado.utils import archive
>
> Because it's used...
>
>> from avocado.utils.path import find_command
>>
>>
>> @@ -140,6 +141,43 @@ def wait_for_console_pattern(test, success_message, failure_message=None,
>> """
>> _console_interaction(test, success_message, failure_message, None, vm=vm)
>>
>> +def extract_from_deb(test, deb, path):
>> + """
>> + Extracts a file from a deb package into the test workdir
>> +
>> + :param deb: path to the deb archive
>> + :param path: path within the deb archive of the file to be extracted
>> + :returns: path of the extracted file
>> + """
>> + cwd = os.getcwd()
>> + os.chdir(test.workdir)
>> + file_path = process.run("ar t %s" % deb).stdout_text.split()[2]
>> + process.run("ar x %s %s" % (deb, file_path))
>> + archive.extract(file_path, test.workdir)
>
> ... here.
>
> Also there are some missing changes for other tests using
> extract_from_(deb|rpm), such as:
>
> diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
> index 55ce7a5870..1caea29d27 100644
> --- a/tests/acceptance/boot_linux_console.py
> +++ b/tests/acceptance/boot_linux_console.py
> @@ -92,7 +92,7 @@ def test_mips_malta(self):
> 'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb')
> deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04'
> deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
> - kernel_path = extract_from_deb(deb_path,
> + kernel_path = extract_from_deb(self, deb_path,
> '/boot/vmlinux-2.6.32-5-4kc-malta')
>
> self.vm.set_console()
>
> I've seen the same or similar problems for other tests:
>
> tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips_malta: ERROR: extract_from_deb() missing 1 required positional argument: 'path' (0.03 s)
> tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips64el_malta: ERROR: extract_from_deb() missing 1 required positional argument: 'path' (0.03 s)
> tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips64el_fuloong2e: ERROR: extract_from_deb() missing 1 required positional argument: 'path' (0.03 s)
> tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips_malta_cpio: ERROR: extract_from_deb() missing 1 required positional argument: 'path' (0.03 s)
> tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_arm_raspi2_initrd:
> ERROR: 'BootLinuxConsole' object has no attribute 'extract_from_deb'
> (0.03 s)
>
>
> Having said that, since Avocado 89.0[1] there is a new API[2] that
> should be able to handle both deb and rpm extractions.
>
> I'll try to post a suggestion based on that API here... unless you beat
> me to it. :)
Go ahead, I am very unlikely to be able to beat you to it :-)
Ciao,
Claudio
>
> Thanks,
> - Cleber.
>
> [1] - https://avocado-framework.readthedocs.io/en/89.0/releases/89_0.html#utility-apis
> [2] - https://avocado-framework.readthedocs.io/en/89.0/api/utils/avocado.utils.software_manager.html#avocado.utils.software_manager.SoftwareManager.extract_from_package
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-07-14 7:40 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-04 18:09 [PATCH v1 0/2] add x86 acceptance test for the "host" cpu bug Claudio Fontana
2021-06-04 18:09 ` [PATCH v1 1/2] tests/acceptance: move pkg extraction to avocado_qemu/ Claudio Fontana
2021-07-13 18:05 ` Cleber Rosa
2021-07-14 7:39 ` Claudio Fontana
2021-06-04 18:09 ` [PATCH v1 2/2] tests/acceptance: add OVMF firmware test to cover x86_64 "host" cpu bug Claudio Fontana
2021-06-04 19:12 ` Eduardo Habkost
2021-06-22 6:47 ` Claudio Fontana
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.