diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index 168c5b971236..03e8a59fa567 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -1318,9 +1318,12 @@ class LibvirtConnTestCase(test.NoDBTestCase): self.assertRaises(exception.PciDeviceDetachFailed, drvr._detach_pci_devices, None, pci_devices) - def test_detach_pci_devices(self): + @mock.patch.object(host.Host, + 'has_min_version', return_value=True) + @mock.patch.object(nova.virt.libvirt.guest.Guest, 'get_xml_desc') + def test_detach_pci_devices(self, mocked_get_xml_desc, *args): - fake_domXML1 =\ + fake_domXML1_with_pci = ( """ @@ -1332,84 +1335,68 @@ class LibvirtConnTestCase(test.NoDBTestCase): -
- """ + """) - pci_devices = [dict(hypervisor_name='xxx', - id='id1', - instance_uuid='uuid', - address="0001:04:10:1")] + fake_domXML1_without_pci = ( + """ + + + + + +
+ """) + + pci_device_info = {'compute_node_id': 1, + 'instance_uuid': 'uuid', + 'address': '0001:04:10.1'} + pci_device = objects.PciDevice(**pci_device_info) + pci_devices = [pci_device] + mocked_get_xml_desc.return_value = fake_domXML1_without_pci drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) - self.mox.StubOutWithMock(host.Host, - 'has_min_version') - host.Host.has_min_version = lambda x, y: True - - self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, - '_get_guest_pci_device') - - class FakeDev(object): - def to_xml(self): - pass - - libvirt_driver.LibvirtDriver._get_guest_pci_device =\ - lambda x, y: FakeDev() - - class FakeDomain(object): - def detachDeviceFlags(self, xml, flags): - pci_devices[0]['hypervisor_name'] = 'marked' - pass - - def XMLDesc(self, flags): - return fake_domXML1 - - guest = libvirt_guest.Guest(FakeDomain()) + dom = fakelibvirt.Domain( + drvr._get_connection(), fake_domXML1_with_pci, False) + guest = libvirt_guest.Guest(dom) drvr._detach_pci_devices(guest, pci_devices) - self.assertEqual(pci_devices[0]['hypervisor_name'], 'marked') - def test_detach_pci_devices_timeout(self): + @mock.patch.object(host.Host, + 'has_min_version', return_value=True) + @mock.patch.object(nova.virt.libvirt.guest.Guest, 'get_xml_desc') + def test_detach_pci_devices_timeout(self, mocked_get_xml_desc, *args): - fake_domXML1 =\ - """ - - - -
- - - - """ + fake_domXML1_with_pci = ( + """ + + + + + +
+ + + +
+ + """) - pci_devices = [dict(hypervisor_name='xxx', - id='id1', - instance_uuid='uuid', - address="0000:04:10:1")] + pci_device_info = {'compute_node_id': 1, + 'instance_uuid': 'uuid', + 'address': '0001:04:10.1'} + pci_device = objects.PciDevice(**pci_device_info) + pci_devices = [pci_device] + mocked_get_xml_desc.return_value = fake_domXML1_with_pci drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) - self.mox.StubOutWithMock(host.Host, - 'has_min_version') - host.Host.has_min_version = lambda x, y: True - - self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, - '_get_guest_pci_device') - - class FakeDev(object): - def to_xml(self): - pass - - libvirt_driver.LibvirtDriver._get_guest_pci_device =\ - lambda x, y: FakeDev() - - class FakeDomain(object): - def detachDeviceFlags(self, xml, flags): - pass - - def XMLDesc(self, flags): - return fake_domXML1 - - guest = libvirt_guest.Guest(FakeDomain()) + dom = fakelibvirt.Domain( + drvr._get_connection(), fake_domXML1_with_pci, False) + guest = libvirt_guest.Guest(dom) self.assertRaises(exception.PciDeviceDetachFailed, drvr._detach_pci_devices, guest, pci_devices) diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 1a9ab5d39c98..f536697efeff 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -3341,7 +3341,7 @@ class LibvirtDriver(driver.ComputeDriver): for hdev in [d for d in guest_config.devices if isinstance(d, vconfig.LibvirtConfigGuestHostdevPCI)]: hdbsf = [hdev.domain, hdev.bus, hdev.slot, hdev.function] - dbsf = pci_utils.parse_address(dev['address']) + dbsf = pci_utils.parse_address(dev.address) if [int(x, 16) for x in hdbsf] ==\ [int(x, 16) for x in dbsf]: raise exception.PciDeviceDetachFailed(reason=