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:
		@@ -1833,6 +1833,8 @@ F: hw/isa/apm.c
 | 
			
		||||
F: include/hw/isa/apm.h
 | 
			
		||||
F: tests/unit/test-x86-topo.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
 | 
			
		||||
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/cpu/cluster.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
 | 
			
		||||
T: git https://gitlab.com/ehabkost/qemu.git machine-next
 | 
			
		||||
 | 
			
		||||
@@ -2238,6 +2242,7 @@ F: net/vhost-user.c
 | 
			
		||||
F: include/hw/virtio/
 | 
			
		||||
F: docs/devel/virtio*
 | 
			
		||||
F: docs/devel/migration/virtio.rst
 | 
			
		||||
F: tests/functional/test_virtio_version.py
 | 
			
		||||
 | 
			
		||||
virtio-balloon
 | 
			
		||||
M: Michael S. Tsirkin <mst@redhat.com>
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ test_timeouts = {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tests_generic_system = [
 | 
			
		||||
  'empty_cpu_model',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
tests_generic_linuxuser = [
 | 
			
		||||
@@ -23,6 +24,10 @@ tests_generic_bsduser = [
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
tests_x86_64_system_quick = [
 | 
			
		||||
  'cpu_queries',
 | 
			
		||||
  'mem_addr_space',
 | 
			
		||||
  'pc_cpu_hotplug_props',
 | 
			
		||||
  'virtio_version',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
tests_x86_64_system_thorough = [
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								tests/avocado/cpu_queries.py → tests/functional/test_cpu_queries.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										12
									
								
								tests/avocado/cpu_queries.py → tests/functional/test_cpu_queries.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,3 +1,5 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
#
 | 
			
		||||
# Sanity check of query-cpu-* results
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2019 Red Hat, Inc.
 | 
			
		||||
@@ -8,7 +10,7 @@
 | 
			
		||||
# This work is licensed under the terms of the GNU GPL, version 2 or
 | 
			
		||||
# later.  See the COPYING file in the top-level directory.
 | 
			
		||||
 | 
			
		||||
from avocado_qemu import QemuSystemTest
 | 
			
		||||
from qemu_test import QemuSystemTest
 | 
			
		||||
 | 
			
		||||
class QueryCPUModelExpansion(QemuSystemTest):
 | 
			
		||||
    """
 | 
			
		||||
@@ -16,10 +18,7 @@ class QueryCPUModelExpansion(QemuSystemTest):
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def test(self):
 | 
			
		||||
        """
 | 
			
		||||
        :avocado: tags=arch:x86_64
 | 
			
		||||
        :avocado: tags=machine:none
 | 
			
		||||
        """
 | 
			
		||||
        self.set_machine('none')
 | 
			
		||||
        self.vm.add_args('-S')
 | 
			
		||||
        self.vm.launch()
 | 
			
		||||
 | 
			
		||||
@@ -33,3 +32,6 @@ class QueryCPUModelExpansion(QemuSystemTest):
 | 
			
		||||
            e = self.vm.cmd('query-cpu-model-expansion', model=model,
 | 
			
		||||
                            type='full')
 | 
			
		||||
            self.assertEqual(e['model']['name'], c['name'])
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    QemuSystemTest.main()
 | 
			
		||||
							
								
								
									
										7
									
								
								tests/avocado/empty_cpu_model.py → tests/functional/test_empty_cpu_model.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										7
									
								
								tests/avocado/empty_cpu_model.py → tests/functional/test_empty_cpu_model.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,3 +1,5 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
#
 | 
			
		||||
# Check for crash when using empty -cpu option
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2019 Red Hat, Inc.
 | 
			
		||||
@@ -7,7 +9,7 @@
 | 
			
		||||
#
 | 
			
		||||
# This work is licensed under the terms of the GNU GPL, version 2 or
 | 
			
		||||
# later.  See the COPYING file in the top-level directory.
 | 
			
		||||
from avocado_qemu import QemuSystemTest
 | 
			
		||||
from qemu_test import QemuSystemTest
 | 
			
		||||
 | 
			
		||||
class EmptyCPUModel(QemuSystemTest):
 | 
			
		||||
    def test(self):
 | 
			
		||||
@@ -17,3 +19,6 @@ class EmptyCPUModel(QemuSystemTest):
 | 
			
		||||
        self.vm.wait()
 | 
			
		||||
        self.assertEqual(self.vm.exitcode(), 1, "QEMU exit code should be 1")
 | 
			
		||||
        self.assertRegex(self.vm.get_log(), r'-cpu option cannot be empty')
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    QemuSystemTest.main()
 | 
			
		||||
							
								
								
									
										52
									
								
								tests/avocado/mem-addr-space-check.py → tests/functional/test_mem_addr_space.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										52
									
								
								tests/avocado/mem-addr-space-check.py → tests/functional/test_mem_addr_space.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,3 +1,5 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
#
 | 
			
		||||
# Check for crash when using memory beyond the available guest processor
 | 
			
		||||
# address space.
 | 
			
		||||
#
 | 
			
		||||
@@ -8,7 +10,7 @@
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
from avocado_qemu import QemuSystemTest
 | 
			
		||||
from qemu_test import QemuSystemTest
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
@@ -22,9 +24,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
    # for all 32-bit cases, pci64_hole_size is 0.
 | 
			
		||||
    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
 | 
			
		||||
        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
 | 
			
		||||
@@ -52,9 +51,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        access up to a maximum of 64GiB of memory. Rest is the same as the case
 | 
			
		||||
        with pse36 above.
 | 
			
		||||
@@ -72,9 +68,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        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):
 | 
			
		||||
        """
 | 
			
		||||
        :avocado: tags=machine:q35
 | 
			
		||||
        :avocado: tags=arch:x86_64
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
        with the same options as the case above.
 | 
			
		||||
@@ -111,9 +101,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        with pse36 ON.
 | 
			
		||||
        """
 | 
			
		||||
@@ -130,9 +117,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        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"
 | 
			
		||||
@@ -153,9 +137,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
    # now lets test some 64-bit CPU cases.
 | 
			
		||||
    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
 | 
			
		||||
        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
 | 
			
		||||
@@ -182,9 +163,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        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
 | 
			
		||||
@@ -205,9 +183,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        successfully start when maxmem is < 988G.
 | 
			
		||||
        """
 | 
			
		||||
@@ -224,9 +199,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        successfully start when maxmem is < 976G.
 | 
			
		||||
        """
 | 
			
		||||
@@ -243,9 +215,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        Intel cpu instead. QEMU should start fine in this case as
 | 
			
		||||
        "above_4G" memory starts at 4G.
 | 
			
		||||
@@ -264,9 +233,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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.
 | 
			
		||||
        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
 | 
			
		||||
@@ -291,9 +257,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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.
 | 
			
		||||
        Same as above but by setting maxram between 976 GiB and 992 Gib,
 | 
			
		||||
        QEMU should start fine.
 | 
			
		||||
@@ -312,9 +275,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        of cxl window memory. 4G_mem end aligns at 4G. pci64_hole is 32 GiB and
 | 
			
		||||
        starts after the cxl memory window.
 | 
			
		||||
@@ -335,9 +295,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
 | 
			
		||||
    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,
 | 
			
		||||
        with the exact same parameters as above, QEMU should start fine even
 | 
			
		||||
        with cxl enabled.
 | 
			
		||||
@@ -352,3 +309,6 @@ class MemAddrCheck(QemuSystemTest):
 | 
			
		||||
        time.sleep(self.DELAY_Q35_BOOT_SEQUENCE)
 | 
			
		||||
        self.vm.shutdown()
 | 
			
		||||
        self.assertNotRegex(self.vm.get_log(), r'phys-bits too low')
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    QemuSystemTest.main()
 | 
			
		||||
							
								
								
									
										11
									
								
								tests/avocado/pc_cpu_hotplug_props.py → tests/functional/test_pc_cpu_hotplug_props.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										11
									
								
								tests/avocado/pc_cpu_hotplug_props.py → tests/functional/test_pc_cpu_hotplug_props.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,3 +1,4 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
#
 | 
			
		||||
# 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/>.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
from avocado_qemu import QemuSystemTest
 | 
			
		||||
from qemu_test import QemuSystemTest
 | 
			
		||||
 | 
			
		||||
class OmittedCPUProps(QemuSystemTest):
 | 
			
		||||
    """
 | 
			
		||||
    :avocado: tags=arch:x86_64
 | 
			
		||||
    :avocado: tags=cpu:qemu64
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def test_no_die_id(self):
 | 
			
		||||
        self.vm.add_args('-nodefaults', '-S')
 | 
			
		||||
        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.launch()
 | 
			
		||||
        self.assertEqual(len(self.vm.cmd('query-cpus-fast')), 2)
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    QemuSystemTest.main()
 | 
			
		||||
							
								
								
									
										8
									
								
								tests/avocado/virtio_version.py → tests/functional/test_virtio_version.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										8
									
								
								tests/avocado/virtio_version.py → tests/functional/test_virtio_version.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,3 +1,4 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
"""
 | 
			
		||||
Check compatibility of virtio device types
 | 
			
		||||
"""
 | 
			
		||||
@@ -12,7 +13,7 @@ import sys
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
from qemu.machine import QEMUMachine
 | 
			
		||||
from avocado_qemu import QemuSystemTest
 | 
			
		||||
from qemu_test import QemuSystemTest
 | 
			
		||||
 | 
			
		||||
# Virtio Device IDs:
 | 
			
		||||
VIRTIO_NET = 1
 | 
			
		||||
@@ -60,8 +61,6 @@ class VirtioVersionCheck(QemuSystemTest):
 | 
			
		||||
    Check if virtio-version-specific device types result in the
 | 
			
		||||
    same device tree created by `disable-modern` and
 | 
			
		||||
    `disable-legacy`.
 | 
			
		||||
 | 
			
		||||
    :avocado: tags=arch:x86_64
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    # 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-tablet-pci', VIRTIO_INPUT)
 | 
			
		||||
        self.check_modern_only('virtio-keyboard-pci', VIRTIO_INPUT)
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    QemuSystemTest.main()
 | 
			
		||||
		Reference in New Issue
	
	Block a user