tests/functional: Convert simple avocado tests into standalone python tests

These test are rather simple and don't need any modifications apart
from adjusting the "from avocado_qemu" line. To ease debugging, make
the files executable and add a shebang line and Python '__main__'
handling, too, so that these tests can now be run by executing them
directly.

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240830133841.142644-13-thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Thomas Huth 2024-08-30 15:38:06 +02:00
parent 1497377857
commit cce85725f1
7 changed files with 40 additions and 60 deletions

View File

@ -1833,6 +1833,8 @@ F: hw/isa/apm.c
F: include/hw/isa/apm.h F: include/hw/isa/apm.h
F: tests/unit/test-x86-topo.c F: tests/unit/test-x86-topo.c
F: tests/qtest/test-x86-cpuid-compat.c F: tests/qtest/test-x86-cpuid-compat.c
F: tests/functional/test_mem_addr_space.py
F: tests/functional/test_pc_cpu_hotplug_props.py
PC Chipset PC Chipset
M: Michael S. Tsirkin <mst@redhat.com> M: Michael S. Tsirkin <mst@redhat.com>
@ -1899,6 +1901,8 @@ F: include/hw/boards.h
F: include/hw/core/cpu.h F: include/hw/core/cpu.h
F: include/hw/cpu/cluster.h F: include/hw/cpu/cluster.h
F: include/sysemu/numa.h F: include/sysemu/numa.h
F: tests/functional/test_cpu_queries.py
F: tests/functional/test_empty_cpu_model.py
F: tests/unit/test-smp-parse.c F: tests/unit/test-smp-parse.c
T: git https://gitlab.com/ehabkost/qemu.git machine-next T: git https://gitlab.com/ehabkost/qemu.git machine-next
@ -2238,6 +2242,7 @@ F: net/vhost-user.c
F: include/hw/virtio/ F: include/hw/virtio/
F: docs/devel/virtio* F: docs/devel/virtio*
F: docs/devel/migration/virtio.rst F: docs/devel/migration/virtio.rst
F: tests/functional/test_virtio_version.py
virtio-balloon virtio-balloon
M: Michael S. Tsirkin <mst@redhat.com> M: Michael S. Tsirkin <mst@redhat.com>

View File

@ -14,6 +14,7 @@ test_timeouts = {
} }
tests_generic_system = [ tests_generic_system = [
'empty_cpu_model',
] ]
tests_generic_linuxuser = [ tests_generic_linuxuser = [
@ -23,6 +24,10 @@ tests_generic_bsduser = [
] ]
tests_x86_64_system_quick = [ tests_x86_64_system_quick = [
'cpu_queries',
'mem_addr_space',
'pc_cpu_hotplug_props',
'virtio_version',
] ]
tests_x86_64_system_thorough = [ tests_x86_64_system_thorough = [

View File

@ -1,3 +1,5 @@
#!/usr/bin/env python3
#
# Sanity check of query-cpu-* results # Sanity check of query-cpu-* results
# #
# Copyright (c) 2019 Red Hat, Inc. # Copyright (c) 2019 Red Hat, Inc.
@ -8,7 +10,7 @@
# This work is licensed under the terms of the GNU GPL, version 2 or # This work is licensed under the terms of the GNU GPL, version 2 or
# later. See the COPYING file in the top-level directory. # later. See the COPYING file in the top-level directory.
from avocado_qemu import QemuSystemTest from qemu_test import QemuSystemTest
class QueryCPUModelExpansion(QemuSystemTest): class QueryCPUModelExpansion(QemuSystemTest):
""" """
@ -16,10 +18,7 @@ class QueryCPUModelExpansion(QemuSystemTest):
""" """
def test(self): def test(self):
""" self.set_machine('none')
:avocado: tags=arch:x86_64
:avocado: tags=machine:none
"""
self.vm.add_args('-S') self.vm.add_args('-S')
self.vm.launch() self.vm.launch()
@ -33,3 +32,6 @@ class QueryCPUModelExpansion(QemuSystemTest):
e = self.vm.cmd('query-cpu-model-expansion', model=model, e = self.vm.cmd('query-cpu-model-expansion', model=model,
type='full') type='full')
self.assertEqual(e['model']['name'], c['name']) self.assertEqual(e['model']['name'], c['name'])
if __name__ == '__main__':
QemuSystemTest.main()

View File

@ -1,3 +1,5 @@
#!/usr/bin/env python3
#
# Check for crash when using empty -cpu option # Check for crash when using empty -cpu option
# #
# Copyright (c) 2019 Red Hat, Inc. # Copyright (c) 2019 Red Hat, Inc.
@ -7,7 +9,7 @@
# #
# This work is licensed under the terms of the GNU GPL, version 2 or # This work is licensed under the terms of the GNU GPL, version 2 or
# later. See the COPYING file in the top-level directory. # later. See the COPYING file in the top-level directory.
from avocado_qemu import QemuSystemTest from qemu_test import QemuSystemTest
class EmptyCPUModel(QemuSystemTest): class EmptyCPUModel(QemuSystemTest):
def test(self): def test(self):
@ -17,3 +19,6 @@ class EmptyCPUModel(QemuSystemTest):
self.vm.wait() self.vm.wait()
self.assertEqual(self.vm.exitcode(), 1, "QEMU exit code should be 1") self.assertEqual(self.vm.exitcode(), 1, "QEMU exit code should be 1")
self.assertRegex(self.vm.get_log(), r'-cpu option cannot be empty') self.assertRegex(self.vm.get_log(), r'-cpu option cannot be empty')
if __name__ == '__main__':
QemuSystemTest.main()

View File

@ -1,3 +1,5 @@
#!/usr/bin/env python3
#
# Check for crash when using memory beyond the available guest processor # Check for crash when using memory beyond the available guest processor
# address space. # address space.
# #
@ -8,7 +10,7 @@
# #
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
from avocado_qemu import QemuSystemTest from qemu_test import QemuSystemTest
import time import time
class MemAddrCheck(QemuSystemTest): class MemAddrCheck(QemuSystemTest):
@ -22,9 +24,6 @@ class MemAddrCheck(QemuSystemTest):
# for all 32-bit cases, pci64_hole_size is 0. # for all 32-bit cases, pci64_hole_size is 0.
def test_phybits_low_pse36(self): def test_phybits_low_pse36(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
With pse36 feature ON, a processor has 36 bits of addressing. So it can With pse36 feature ON, a processor has 36 bits of addressing. So it can
access up to a maximum of 64GiB of memory. Memory hotplug region begins access up to a maximum of 64GiB of memory. Memory hotplug region begins
at 4 GiB boundary when "above_4g_mem_size" is 0 (this would be true when at 4 GiB boundary when "above_4g_mem_size" is 0 (this would be true when
@ -52,9 +51,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_low_pae(self): def test_phybits_low_pae(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
With pae feature ON, a processor has 36 bits of addressing. So it can With pae feature ON, a processor has 36 bits of addressing. So it can
access up to a maximum of 64GiB of memory. Rest is the same as the case access up to a maximum of 64GiB of memory. Rest is the same as the case
with pse36 above. with pse36 above.
@ -72,9 +68,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_ok_pentium_pse36(self): def test_phybits_ok_pentium_pse36(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
Setting maxmem to 59.5G and making sure that QEMU can start with the Setting maxmem to 59.5G and making sure that QEMU can start with the
same options as the failing case above with pse36 cpu feature. same options as the failing case above with pse36 cpu feature.
""" """
@ -91,9 +84,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_ok_pentium_pae(self): def test_phybits_ok_pentium_pae(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
Test is same as above but now with pae cpu feature turned on. Test is same as above but now with pae cpu feature turned on.
Setting maxmem to 59.5G and making sure that QEMU can start fine Setting maxmem to 59.5G and making sure that QEMU can start fine
with the same options as the case above. with the same options as the case above.
@ -111,9 +101,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_ok_pentium2(self): def test_phybits_ok_pentium2(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
Pentium2 has 36 bits of addressing, so its same as pentium Pentium2 has 36 bits of addressing, so its same as pentium
with pse36 ON. with pse36 ON.
""" """
@ -130,9 +117,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_low_nonpse36(self): def test_phybits_low_nonpse36(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
Pentium processor has 32 bits of addressing without pse36 or pae Pentium processor has 32 bits of addressing without pse36 or pae
so it can access physical address up to 4 GiB. Setting maxmem to so it can access physical address up to 4 GiB. Setting maxmem to
4 GiB should make QEMU fail to start with "phys-bits too low" 4 GiB should make QEMU fail to start with "phys-bits too low"
@ -153,9 +137,6 @@ class MemAddrCheck(QemuSystemTest):
# now lets test some 64-bit CPU cases. # now lets test some 64-bit CPU cases.
def test_phybits_low_tcg_q35_70_amd(self): def test_phybits_low_tcg_q35_70_amd(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
For q35 7.1 machines and above, there is a HT window that starts at For q35 7.1 machines and above, there is a HT window that starts at
1024 GiB and ends at 1 TiB - 1. If the max GPA falls in this range, 1024 GiB and ends at 1 TiB - 1. If the max GPA falls in this range,
"above_4G" memory is adjusted to start at 1 TiB boundary for AMD cpus "above_4G" memory is adjusted to start at 1 TiB boundary for AMD cpus
@ -182,9 +163,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_low_tcg_q35_71_amd(self): def test_phybits_low_tcg_q35_71_amd(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
AMD_HT_START is defined to be at 1012 GiB. So for q35 machines AMD_HT_START is defined to be at 1012 GiB. So for q35 machines
version > 7.0 and AMD cpus, instead of 1024 GiB limit for 40 bit version > 7.0 and AMD cpus, instead of 1024 GiB limit for 40 bit
processor address space, it has to be 1012 GiB , that is 12 GiB processor address space, it has to be 1012 GiB , that is 12 GiB
@ -205,9 +183,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_ok_tcg_q35_70_amd(self): def test_phybits_ok_tcg_q35_70_amd(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
Same as q35-7.0 AMD case except that here we check that QEMU can Same as q35-7.0 AMD case except that here we check that QEMU can
successfully start when maxmem is < 988G. successfully start when maxmem is < 988G.
""" """
@ -224,9 +199,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_ok_tcg_q35_71_amd(self): def test_phybits_ok_tcg_q35_71_amd(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
Same as q35-7.1 AMD case except that here we check that QEMU can Same as q35-7.1 AMD case except that here we check that QEMU can
successfully start when maxmem is < 976G. successfully start when maxmem is < 976G.
""" """
@ -243,9 +215,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_ok_tcg_q35_71_intel(self): def test_phybits_ok_tcg_q35_71_intel(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
Same parameters as test_phybits_low_tcg_q35_71_amd() but use Same parameters as test_phybits_low_tcg_q35_71_amd() but use
Intel cpu instead. QEMU should start fine in this case as Intel cpu instead. QEMU should start fine in this case as
"above_4G" memory starts at 4G. "above_4G" memory starts at 4G.
@ -264,9 +233,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_low_tcg_q35_71_amd_41bits(self): def test_phybits_low_tcg_q35_71_amd_41bits(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
AMD processor with 41 bits. Max cpu hw address = 2 TiB. AMD processor with 41 bits. Max cpu hw address = 2 TiB.
By setting maxram above 1012 GiB - 32 GiB - 4 GiB = 976 GiB, we can By setting maxram above 1012 GiB - 32 GiB - 4 GiB = 976 GiB, we can
force "above_4G" memory to start at 1 TiB for q35-7.1 machines force "above_4G" memory to start at 1 TiB for q35-7.1 machines
@ -291,9 +257,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_ok_tcg_q35_71_amd_41bits(self): def test_phybits_ok_tcg_q35_71_amd_41bits(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
AMD processor with 41 bits. Max cpu hw address = 2 TiB. AMD processor with 41 bits. Max cpu hw address = 2 TiB.
Same as above but by setting maxram between 976 GiB and 992 Gib, Same as above but by setting maxram between 976 GiB and 992 Gib,
QEMU should start fine. QEMU should start fine.
@ -312,9 +275,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_low_tcg_q35_intel_cxl(self): def test_phybits_low_tcg_q35_intel_cxl(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
cxl memory window starts after memory device range. Here, we use 1 GiB cxl memory window starts after memory device range. Here, we use 1 GiB
of cxl window memory. 4G_mem end aligns at 4G. pci64_hole is 32 GiB and of cxl window memory. 4G_mem end aligns at 4G. pci64_hole is 32 GiB and
starts after the cxl memory window. starts after the cxl memory window.
@ -335,9 +295,6 @@ class MemAddrCheck(QemuSystemTest):
def test_phybits_ok_tcg_q35_intel_cxl(self): def test_phybits_ok_tcg_q35_intel_cxl(self):
""" """
:avocado: tags=machine:q35
:avocado: tags=arch:x86_64
Same as above but here we do not reserve any cxl memory window. Hence, Same as above but here we do not reserve any cxl memory window. Hence,
with the exact same parameters as above, QEMU should start fine even with the exact same parameters as above, QEMU should start fine even
with cxl enabled. with cxl enabled.
@ -352,3 +309,6 @@ class MemAddrCheck(QemuSystemTest):
time.sleep(self.DELAY_Q35_BOOT_SEQUENCE) time.sleep(self.DELAY_Q35_BOOT_SEQUENCE)
self.vm.shutdown() self.vm.shutdown()
self.assertNotRegex(self.vm.get_log(), r'phys-bits too low') self.assertNotRegex(self.vm.get_log(), r'phys-bits too low')
if __name__ == '__main__':
QemuSystemTest.main()

View File

@ -1,3 +1,4 @@
#!/usr/bin/env python3
# #
# Ensure CPU die-id can be omitted on -device # Ensure CPU die-id can be omitted on -device
# #
@ -20,16 +21,16 @@
# License along with this library; if not, see <http://www.gnu.org/licenses/>. # License along with this library; if not, see <http://www.gnu.org/licenses/>.
# #
from avocado_qemu import QemuSystemTest from qemu_test import QemuSystemTest
class OmittedCPUProps(QemuSystemTest): class OmittedCPUProps(QemuSystemTest):
"""
:avocado: tags=arch:x86_64
:avocado: tags=cpu:qemu64
"""
def test_no_die_id(self): def test_no_die_id(self):
self.vm.add_args('-nodefaults', '-S') self.vm.add_args('-nodefaults', '-S')
self.vm.add_args('-smp', '1,sockets=2,cores=2,threads=2,maxcpus=8') self.vm.add_args('-smp', '1,sockets=2,cores=2,threads=2,maxcpus=8')
self.vm.add_args('-device', 'qemu64-x86_64-cpu,socket-id=1,core-id=0,thread-id=0') self.vm.add_args('-device', 'qemu64-x86_64-cpu,socket-id=1,core-id=0,thread-id=0')
self.vm.launch() self.vm.launch()
self.assertEqual(len(self.vm.cmd('query-cpus-fast')), 2) self.assertEqual(len(self.vm.cmd('query-cpus-fast')), 2)
if __name__ == '__main__':
QemuSystemTest.main()

View File

@ -1,3 +1,4 @@
#!/usr/bin/env python3
""" """
Check compatibility of virtio device types Check compatibility of virtio device types
""" """
@ -12,7 +13,7 @@ import sys
import os import os
from qemu.machine import QEMUMachine from qemu.machine import QEMUMachine
from avocado_qemu import QemuSystemTest from qemu_test import QemuSystemTest
# Virtio Device IDs: # Virtio Device IDs:
VIRTIO_NET = 1 VIRTIO_NET = 1
@ -60,8 +61,6 @@ class VirtioVersionCheck(QemuSystemTest):
Check if virtio-version-specific device types result in the Check if virtio-version-specific device types result in the
same device tree created by `disable-modern` and same device tree created by `disable-modern` and
`disable-legacy`. `disable-legacy`.
:avocado: tags=arch:x86_64
""" """
# just in case there are failures, show larger diff: # just in case there are failures, show larger diff:
@ -173,3 +172,6 @@ class VirtioVersionCheck(QemuSystemTest):
self.check_modern_only('virtio-mouse-pci', VIRTIO_INPUT) self.check_modern_only('virtio-mouse-pci', VIRTIO_INPUT)
self.check_modern_only('virtio-tablet-pci', VIRTIO_INPUT) self.check_modern_only('virtio-tablet-pci', VIRTIO_INPUT)
self.check_modern_only('virtio-keyboard-pci', VIRTIO_INPUT) self.check_modern_only('virtio-keyboard-pci', VIRTIO_INPUT)
if __name__ == '__main__':
QemuSystemTest.main()