diff --git a/qemu/tests/boot_order_check.py b/qemu/tests/boot_order_check.py index 56ff728e2a0fb6e8b94689fc20524d4c6952b684..4f5233f9a9e6871a1c7b916dfbbcd71b3558f68c 100644 --- a/qemu/tests/boot_order_check.py +++ b/qemu/tests/boot_order_check.py @@ -5,6 +5,7 @@ import time from avocado.utils import process from virttest import error_context +from virttest import utils_misc @error_context.context_aware @@ -29,13 +30,16 @@ def run(test, params, env): device_found = dev break elif dev['class_info']['desc'] == 'PCI bridge': - device_found = _get_device(dev['pci_bridge']['devices'], + pci_bridge_devices = dev['pci_bridge'].get('devices') + if not pci_bridge_devices: + continue + device_found = _get_device(pci_bridge_devices, dev_id) if device_found: break return device_found - def _get_pci_addr_by_devid(vm, dev_id): + def _get_pci_addr_by_devid(dev_id): dev_addr = '' dev_addr_fmt = '%02d:%02d.%d' pci_info = vm.monitor.info('pci', debug=False) @@ -71,6 +75,7 @@ def run(test, params, env): process.system("ifconfig %s down" % nic.ifname) vm.resume() + devices_load_timeout = int(params.get("devices_load_timeout", 10)) timeout = int(params.get("login_timeout", 240)) bootorder_type = params.get("bootorder_type") @@ -83,7 +88,8 @@ def run(test, params, env): for nic in vm.virtnet: boot_index = params['bootindex_%s' % nic.nic_name] - pci_addr = _get_pci_addr_by_devid(vm, nic.device_id) + pci_addr = utils_misc.wait_for(lambda: _get_pci_addr_by_devid(nic.device_id), + timeout=devices_load_timeout) if not pci_addr: test.fail("Cannot get the pci address of %s." % nic.nic_name) list_nic_addr.append((pci_addr, boot_index)) diff --git a/qemu/tests/cfg/boot_order_check.cfg b/qemu/tests/cfg/boot_order_check.cfg index bee4b6b0365679fd1aa9d8d944b50c03ddb43bfc..6c20cb3917481cc9a5d53182cdc5976c4c5b49c7 100644 --- a/qemu/tests/cfg/boot_order_check.cfg +++ b/qemu/tests/cfg/boot_order_check.cfg @@ -6,6 +6,7 @@ kill_vm = yes boot_menu = on enable_sga = yes + devices_load_timeout = 10 # we have QEMU machine with three NICs (virtio, e1000, rtl8139) # and two disks (default, IDE). firmware should try to boot from the bootindex=1 # first. If this fails, it should try the bootindex=2 next, and so on.