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=