diff --git a/libvirt/tests/cfg/guest_os_booting/boot_order/boot_from_cdrom_device.cfg b/libvirt/tests/cfg/guest_os_booting/boot_order/boot_from_cdrom_device.cfg index 0b820f8dad..0ea5c8705c 100644 --- a/libvirt/tests/cfg/guest_os_booting/boot_order/boot_from_cdrom_device.cfg +++ b/libvirt/tests/cfg/guest_os_booting/boot_order/boot_from_cdrom_device.cfg @@ -7,6 +7,7 @@ - without_cdrom: only os_dev - with_cdrom_with_no_src: + no s390-virtio cdrom1_attrs = {'target': {'dev': 'sda', 'bus': 'sata'}, **${cdrom_attrs}} aarch64: cdrom1_attrs = {'target': {'dev': 'sda', 'bus': 'scsi'}, **${cdrom_attrs}} @@ -14,19 +15,20 @@ - with_cdrom: check_bootable_iso = "yes" cdrom1_attrs = {'source': {'attrs': {'file': boot_img_path}}, 'target': {'dev': 'sda', 'bus': 'scsi'}, **${cdrom_attrs}} - bootable_patterns = ["begin the installation process|Install Red Hat Enterprise"] + bootable_patterns = ["begin the installation process|Install Red Hat Enterprise|Starting installer"] - multi_cdroms: cdrom1_attrs = {'target': {'dev': 'sda', 'bus': 'scsi'}, **${cdrom_attrs}} cdrom2_attrs = {'source': {'attrs': {'file': boot_img_path}}, 'target': {'dev': 'sdb', 'bus': 'sata'}, **${cdrom_attrs}} - aarch64: + aarch64, s390-virtio: cdrom2_attrs = {'source': {'attrs': {'file': boot_img_path}}, 'target': {'dev': 'sdb', 'bus': 'scsi'}, **${cdrom_attrs}} cdrom_boot_order: check_bootable_iso = "yes" - bootable_patterns = ["begin the installation process|Install Red Hat Enterprise"] + bootable_patterns = ["begin the installation process|Install Red Hat Enterprise|Starting installer"] os_dev: status_error = "yes" variants: - os_dev: + no s390-virtio os_attrs_boots = ['cdrom'] - cdrom_boot_order: variants firmware_type: @@ -36,3 +38,4 @@ status_error = "yes" - ovmf: only q35, aarch64 + - default: diff --git a/libvirt/tests/cfg/guest_os_booting/boot_order/boot_from_disk_device.cfg b/libvirt/tests/cfg/guest_os_booting/boot_order/boot_from_disk_device.cfg index 0f913912b4..97b9b4f158 100644 --- a/libvirt/tests/cfg/guest_os_booting/boot_order/boot_from_disk_device.cfg +++ b/libvirt/tests/cfg/guest_os_booting/boot_order/boot_from_disk_device.cfg @@ -4,6 +4,7 @@ disk1_attrs_target = {'dev': 'vda', 'bus': 'virtio'} variants: - os_dev: + no s390-virtio os_attrs_boots = ['hd'] disk1_attrs = {'target': ${disk1_attrs_target}} variants: @@ -24,8 +25,13 @@ disk2_attrs = {'target': {'dev': 'sda', 'bus': 'scsi'}} seabios: status_error = "yes" + - multi_disks_bootable: + disk1_img = "copied_original.qcow2" + disk1_attrs = {'target': ${disk1_attrs_target}} + disk2_attrs = {'target': {'dev': 'sda', 'bus': 'scsi'}} variants firmware_type: - seabios: only x86_64 - ovmf: only q35, aarch64 + - default: diff --git a/libvirt/tests/cfg/guest_os_booting/boot_order/boot_with_multiple_boot_dev.cfg b/libvirt/tests/cfg/guest_os_booting/boot_order/boot_with_multiple_boot_dev.cfg index ad60e5d8c9..32a76da370 100644 --- a/libvirt/tests/cfg/guest_os_booting/boot_order/boot_with_multiple_boot_dev.cfg +++ b/libvirt/tests/cfg/guest_os_booting/boot_order/boot_with_multiple_boot_dev.cfg @@ -8,6 +8,7 @@ os_dict = {'boots': ['%s', '%s'], 'bootmenu_enable': 'yes'} cdrom_dict = {'source': {'attrs': {'file': '%s'}}, 'type_name': 'file', 'device': 'cdrom', 'driver': {'name': 'qemu', 'type': 'raw'}, 'target': {'dev': 'sda', 'bus': '${target_bus}'}} check_prompt = ["begin the installation process|Install Red Hat Enterprise"] + no s390-virtio variants first_dev: - hd: variants second_dev: diff --git a/libvirt/tests/cfg/guest_os_booting/boot_order/boot_with_multiple_boot_order.cfg b/libvirt/tests/cfg/guest_os_booting/boot_order/boot_with_multiple_boot_order.cfg index 8821b5f6f6..e1f3c2e69c 100644 --- a/libvirt/tests/cfg/guest_os_booting/boot_order/boot_with_multiple_boot_order.cfg +++ b/libvirt/tests/cfg/guest_os_booting/boot_order/boot_with_multiple_boot_order.cfg @@ -6,8 +6,11 @@ aarch64: os_dict = {'bootmenu_enable': 'yes'} target_bus = 'scsi' + s390-virtio: + os_dict = {'bootmenu_enable': 'no'} + target_bus = 'scsi' cdrom_dict = {'source': {'attrs': {'file': '%s'}}, 'type_name': 'file', 'device': 'cdrom', 'driver': {'name': 'qemu', 'type': 'raw'}, 'target': {'dev': 'sda', 'bus': '${target_bus}'}} - check_prompt = ["begin the installation process|Install Red Hat Enterprise"] + check_prompt = ["begin the installation process|Install Red Hat Enterprise|Starting installer"] variants first_dev: - hd: disk_order = {'boot': '1'} @@ -16,13 +19,20 @@ cdrom_order = {'boot': '2'} variants bootable_device: - hd_bootable: + variants: + - @default: + - with_loadparm: + only s390-virtio + disk_order = {'boot': '1', 'loadparm': '1'} + test_cmd = "lsreipl" + expected_output = Loadparm:\s+"1" - cdrom_bootable: - network: network_order = {'boot': '2'} variants bootable_device: - hd_bootable: - network_bootable: - check_prompt = ["iPXE initialising devices|Start PXE over IPv4"] + check_prompt = ["iPXE initialising devices|Start PXE over IPv4|Trying pxelinux.cfg files"] - cdrom: cdrom_order = {'boot': '1'} variants second_dev: @@ -30,13 +40,20 @@ disk_order = {'boot': '2'} variants bootable_device: - hd_bootable: + variants: + - @default: + - with_loadparm: + only s390-virtio + disk_order = {'boot': '2', 'loadparm': '2'} + test_cmd = "lsreipl" + expected_output = Loadparm:\s+"2" - cdrom_bootable: - network: network_order = {'boot': '2'} variants bootable_device: - cdrom_bootable: - network_bootable: - check_prompt = ["iPXE initialising devices|Start PXE over IPv4"] + check_prompt = ["iPXE initialising devices|Start PXE over IPv4|Trying pxelinux.cfg files"] - network: network_order = {'boot': '1'} variants second_dev: @@ -44,11 +61,18 @@ disk_order = {'boot': '2'} variants bootable_device: - hd_bootable: + variants: + - @default: + - with_loadparm: + only s390-virtio + disk_order = {'boot': '2', 'loadparm': '2'} + test_cmd = "lsreipl" + expected_output = Loadparm:\s+"2" - network_bootable: - check_prompt = ["iPXE initialising devices|Start PXE over IPv4"] + check_prompt = ["iPXE initialising devices|Start PXE over IPv4|Trying pxelinux.cfg files"] - cdrom: cdrom_order = {'boot': '2'} variants bootable_device: - cdrom_bootable: - network_bootable: - check_prompt = ["iPXE initialising devices|Start PXE over IPv4"] + check_prompt = ["iPXE initialising devices|Start PXE over IPv4|Trying pxelinux.cfg files"] diff --git a/libvirt/tests/cfg/guest_os_booting/boot_order/hotplug_device_with_boot_order.cfg b/libvirt/tests/cfg/guest_os_booting/boot_order/hotplug_device_with_boot_order.cfg index 2722ca402f..9dfa260751 100644 --- a/libvirt/tests/cfg/guest_os_booting/boot_order/hotplug_device_with_boot_order.cfg +++ b/libvirt/tests/cfg/guest_os_booting/boot_order/hotplug_device_with_boot_order.cfg @@ -13,6 +13,8 @@ bus_type = "usb" target_disk = "sda" device_dict = {"type_name":"file", "target":{"dev": "${target_disk}", "bus": "${bus_type}"}, 'boot': '2'} + s390-virtio: + expected_error = unsupported configuration: This QEMU doesn't support - filesystem_device: target_dir = "mount_tag" source_dir = "/tmp" diff --git a/libvirt/tests/cfg/guest_os_booting/direct_kernel_boot/direct_kernel_boot.cfg b/libvirt/tests/cfg/guest_os_booting/direct_kernel_boot/direct_kernel_boot.cfg index 563c252244..4d4a51340c 100644 --- a/libvirt/tests/cfg/guest_os_booting/direct_kernel_boot/direct_kernel_boot.cfg +++ b/libvirt/tests/cfg/guest_os_booting/direct_kernel_boot/direct_kernel_boot.cfg @@ -6,6 +6,8 @@ initrd_url = "${repo_url}/images/pxeboot/initrd.img" vmlinuz_url = "${repo_url}/images/pxeboot/vmlinuz" direct_kernel_dict = {'cmdline': 'console=ttyS0 inst.repo=${repo_url}', 'initrd': '%s', 'kernel': '%s'} + s390-virtio: + direct_kernel_dict = {'cmdline': 'console=ttysclp0 inst.repo=${repo_url}', 'initrd': '%s', 'kernel': '%s'} variants: - start_guest: check_prompt = "Starting installer" diff --git a/libvirt/tests/cfg/guest_os_booting/firmware_configuration/os_acpi.cfg b/libvirt/tests/cfg/guest_os_booting/firmware_configuration/os_acpi.cfg index 20d6384228..8cf656f467 100644 --- a/libvirt/tests/cfg/guest_os_booting/firmware_configuration/os_acpi.cfg +++ b/libvirt/tests/cfg/guest_os_booting/firmware_configuration/os_acpi.cfg @@ -4,7 +4,7 @@ acpi_url = "EXAMPLE_ACPI_URL" acpi_file = "slic.dat" acpi_dict = {'acpi': {'table_type': 'slic', 'table': '%s'}} - no aarch64 + no aarch64, s390-virtio variants: - start_guest: cmd_in_guest = "acpidump" diff --git a/libvirt/tests/cfg/guest_os_booting/firmware_configuration/smbios_mode.cfg b/libvirt/tests/cfg/guest_os_booting/firmware_configuration/smbios_mode.cfg index 88eda2e886..e0a034ed82 100644 --- a/libvirt/tests/cfg/guest_os_booting/firmware_configuration/smbios_mode.cfg +++ b/libvirt/tests/cfg/guest_os_booting/firmware_configuration/smbios_mode.cfg @@ -1,6 +1,7 @@ - guest_os_booting.smbios_mode: type = smbios_mode start_vm = no + no s390-virtio variants: - positive_test: variants smbios_mode: diff --git a/libvirt/tests/cfg/guest_os_booting/firmware_configuration/sysinfo_fwcfg.cfg b/libvirt/tests/cfg/guest_os_booting/firmware_configuration/sysinfo_fwcfg.cfg index a9d57e5fe1..32970c35e2 100644 --- a/libvirt/tests/cfg/guest_os_booting/firmware_configuration/sysinfo_fwcfg.cfg +++ b/libvirt/tests/cfg/guest_os_booting/firmware_configuration/sysinfo_fwcfg.cfg @@ -2,6 +2,7 @@ type = sysinfo_fwcfg start_vm = no entry_value = "example value" + no s390-virtio variants: - positive_test: variants: diff --git a/libvirt/tests/cfg/guest_os_booting/migration/migration_boot.cfg b/libvirt/tests/cfg/guest_os_booting/migration/migration_boot.cfg index 58e0e2895f..7fd79d42f7 100644 --- a/libvirt/tests/cfg/guest_os_booting/migration/migration_boot.cfg +++ b/libvirt/tests/cfg/guest_os_booting/migration/migration_boot.cfg @@ -25,6 +25,7 @@ virsh_migrate_connect_uri = "qemu:///system" variants: - os_dev: + no s390-virtio os_attrs_boots = ['hd', 'cdrom', 'network'] - boot_order: disk_boot_idx = 1 diff --git a/libvirt/tests/src/guest_os_booting/boot_order/boot_from_cdrom_device.py b/libvirt/tests/src/guest_os_booting/boot_order/boot_from_cdrom_device.py index d9f7572f3b..4473f5ac1c 100644 --- a/libvirt/tests/src/guest_os_booting/boot_order/boot_from_cdrom_device.py +++ b/libvirt/tests/src/guest_os_booting/boot_order/boot_from_cdrom_device.py @@ -56,9 +56,7 @@ def update_vm_xml(vm, params, cdrom_attrs_list): os_attrs = {'boots': os_attrs_boots} vmxml.setup_attrs(os=os_attrs) else: - vm_os = vmxml.os - vm_os.del_boots() - vmxml.os = vm_os + vmxml.remove_all_boots() if "yes" == params.get("check_bootable_iso", "no"): os_attrs.update({'bootmenu_enable': 'yes', 'bootmenu_timeout': '3000'}) diff --git a/libvirt/tests/src/guest_os_booting/boot_order/boot_from_disk_device.py b/libvirt/tests/src/guest_os_booting/boot_order/boot_from_disk_device.py index d6fecf2f7a..7ef8e19ddd 100644 --- a/libvirt/tests/src/guest_os_booting/boot_order/boot_from_disk_device.py +++ b/libvirt/tests/src/guest_os_booting/boot_order/boot_from_disk_device.py @@ -6,17 +6,19 @@ from virttest.libvirt_xml import vm_xml from virttest.libvirt_xml.devices import disk +from virttest.utils_misc import cmd_status_output from virttest.utils_libvirt import libvirt_disk from virttest.utils_libvirt import libvirt_vmxml from provider.guest_os_booting import guest_os_booting_base -def parse_disks_attrs(vmxml, params): +def parse_disks_attrs(vmxml, test, params): """ Parse disk devices' attrs :param vmxml: The vmxml object + :param test: The test object :param params: Dictionary with the test parameters :return: (Newly created disk image path, list of disk devices' attrs) """ @@ -28,7 +30,14 @@ def parse_disks_attrs(vmxml, params): if disk1_img: disk1_img_path = os.path.join(data_dir.get_data_dir(), 'images', disk1_img) - libvirt_disk.create_disk('file', disk1_img_path, disk_format='qcow2') + if disk1_img == "copied_original.qcow2": + org_source_file = disk_org_attrs['source']['attrs']['file'] + cmd_status_output("qemu-img convert " + "-f qcow2 -O qcow2 -o lazy_refcounts=on " + f"{org_source_file} {disk1_img_path}") + else: + libvirt_disk.create_disk('file', disk1_img_path, disk_format='qcow2') + disk1_attrs = copy.deepcopy(disk_org_attrs) disk1_attrs['source'] = {'attrs': {'file': disk1_img_path}} disk_attrs_list.append(disk1_attrs) @@ -84,15 +93,19 @@ def run(test, params, env): vm = env.get_vm(vm_name) vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm.name) bkxml = vmxml.copy() + session = None try: - disk1_img_path, disk_attrs_list = parse_disks_attrs(vmxml, params) + disk1_img_path, disk_attrs_list = parse_disks_attrs(vmxml, test, params) update_vm_xml(vm, params, disk_attrs_list) test.log.debug(vm_xml.VMXML.new_from_dumpxml(vm.name)) vm.start() try: - vm.wait_for_serial_login().close() + #vm.wait_for_serial_login(timeout=120).close() + session = vm.wait_for_serial_login() + if 'emergency mode' in session.get_output(): + test.fail("Couldn't boot correctly") except remote.LoginTimeoutError as detail: if status_error: test.log.debug("Found the expected error: %s", detail) @@ -100,6 +113,8 @@ def run(test, params, env): test.fail(detail) finally: + if session: + session.close() bkxml.sync() if disk1_img_path and os.path.isfile(disk1_img_path): test.log.debug(f"removing {disk1_img_path}") diff --git a/libvirt/tests/src/guest_os_booting/boot_order/boot_with_multiple_boot_order.py b/libvirt/tests/src/guest_os_booting/boot_order/boot_with_multiple_boot_order.py index b3469f6bdd..ac9f35fa02 100644 --- a/libvirt/tests/src/guest_os_booting/boot_order/boot_with_multiple_boot_order.py +++ b/libvirt/tests/src/guest_os_booting/boot_order/boot_with_multiple_boot_order.py @@ -3,6 +3,7 @@ # Author: Meina Li import os +import re from avocado.utils import process @@ -74,10 +75,13 @@ def run(test, params, env): check_prompt = eval(params.get("check_prompt", "[]")) bootable_device = params.get("bootable_device") os_dict = eval(params.get("os_dict")) + test_cmd = params.get("test_cmd", None) + expected_output = params.get("expected_output", None) vm = env.get_vm(vm_name) vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm.name) bkxml = vmxml.copy() + session = None try: test.log.info("TEST_SETUP: prepare a guest with necessary attributes.") @@ -89,12 +93,20 @@ def run(test, params, env): test.log.debug(f"The current guest xml is: {vmxml}") test.log.info("TEST_STEP2: check the guest boot from expected device.") if bootable_device == "hd_bootable": - vm.wait_for_login(timeout=360).close() + session = vm.wait_for_login(timeout=360) test.log.debug("Succeed to boot %s", vm_name) + if test_cmd is not None: + output = session.cmd(test_cmd) + if not re.search(expected_output, output): + test.fail(f"Couldn't get {expected_output}, got instead {output}") + test.log.debug("Succeed to set %s", expected_output) + session.close() else: vm.serial_console.read_until_output_matches(check_prompt, timeout=300, internal_timeout=0.5) finally: + if session: + session.close() bkxml.sync() for file in file_list: if os.path.exists(file): diff --git a/libvirt/tests/src/guest_os_booting/direct_kernel_boot/direct_kernel_boot.py b/libvirt/tests/src/guest_os_booting/direct_kernel_boot/direct_kernel_boot.py index 90124677cd..77a70401e6 100644 --- a/libvirt/tests/src/guest_os_booting/direct_kernel_boot/direct_kernel_boot.py +++ b/libvirt/tests/src/guest_os_booting/direct_kernel_boot/direct_kernel_boot.py @@ -35,8 +35,8 @@ def run(test, params, env): bkxml = vmxml.copy() try: - boot_initrd = os.path.join(data_dir.get_data_dir(), "initrd.img") - boot_vmlinuz = os.path.join(data_dir.get_data_dir(), "vmlinuz") + boot_initrd = os.path.join(data_dir.get_data_dir(), initrd_url.split("/")[-1]) + boot_vmlinuz = os.path.join(data_dir.get_data_dir(), vmlinuz_url.split("/")[-1]) url_download(initrd_url, boot_initrd) url_download(vmlinuz_url, boot_vmlinuz) direct_kernel_dict = eval(params.get("direct_kernel_dict") diff --git a/provider/guest_os_booting/guest_os_booting_base.py b/provider/guest_os_booting/guest_os_booting_base.py index 90c64d6217..9e637c2727 100644 --- a/provider/guest_os_booting/guest_os_booting_base.py +++ b/provider/guest_os_booting/guest_os_booting_base.py @@ -1,4 +1,5 @@ import logging +import platform from avocado.core import exceptions from avocado.utils import distro @@ -25,6 +26,9 @@ def get_vm(params): firmware_type = params.get('firmware_type') detected_distro = distro.detect() os_type_dict = {} + if platform.machine() == "s390x": + return vms[0] + for _vm in vms: if os_type_dict.get("seabios") and os_type_dict.get("ovmf"): break