diff --git a/nova/tests/unit/virt/libvirt/test_config.py b/nova/tests/unit/virt/libvirt/test_config.py index 8d959b6d3757..2d690e5dfc84 100644 --- a/nova/tests/unit/virt/libvirt/test_config.py +++ b/nova/tests/unit/virt/libvirt/test_config.py @@ -1604,6 +1604,24 @@ class LibvirtConfigGuestHostdevPCI(LibvirtConfigBaseTest): self.assertEqual(obj.mode, 'subsystem') self.assertEqual(obj.type, 'usb') + def test_config_alias_parse(self): + xml = """ + + + +
+ + +
+ """ + + xmldoc = etree.fromstring(xml) + obj = config.LibvirtConfigGuestHostdevPCI() + obj.parse_dom(xmldoc) + self.assertEqual('hostdev1', obj.alias) + class LibvirtConfigGuestHostdevMDEV(LibvirtConfigBaseTest): diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index 48259f0eb4fd..68779bd9f32f 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -23612,15 +23612,23 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin): # check that the internal event handling is cleaned up self.assertEqual(set(), drvr._device_event_handler._waiters) - @ddt.data(power_state.RUNNING, power_state.PAUSED) - def test__detach_with_retry_live_success(self, state): + @ddt.unpack + @ddt.data( + (power_state.RUNNING, vconfig.LibvirtConfigGuestDisk()), + (power_state.RUNNING, vconfig.LibvirtConfigGuestInterface()), + (power_state.RUNNING, vconfig.LibvirtConfigGuestHostdevPCI()), + (power_state.PAUSED, vconfig.LibvirtConfigGuestDisk()), + (power_state.PAUSED, vconfig.LibvirtConfigGuestInterface()), + (power_state.PAUSED, vconfig.LibvirtConfigGuestHostdevPCI()), + ) + def test__detach_with_retry_live_success(self, state, device_class): """Test detach only from the live domain""" drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) mock_guest = mock.Mock(spec=libvirt_guest.Guest) mock_guest.get_power_state.return_value = state mock_guest.has_persistent_configuration.return_value = False - mock_dev = mock.Mock(spec=vconfig.LibvirtConfigGuestDisk) + mock_dev = mock.Mock(spec_set=device_class) mock_dev.alias = 'virtio-disk1' mock_get_device_conf_func = mock.Mock( diff --git a/nova/virt/libvirt/config.py b/nova/virt/libvirt/config.py index c49c187d2d02..6dbb753eec63 100644 --- a/nova/virt/libvirt/config.py +++ b/nova/virt/libvirt/config.py @@ -2204,6 +2204,8 @@ class LibvirtConfigGuestHostdevPCI(LibvirtConfigGuestHostdev): self.slot = None self.function = None + self.alias = None + def __eq__(self, other): if not isinstance(other, LibvirtConfigGuestHostdevPCI): return False @@ -2243,6 +2245,8 @@ class LibvirtConfigGuestHostdevPCI(LibvirtConfigGuestHostdev): self.bus = sub.get('bus') self.slot = sub.get('slot') self.function = sub.get('function') + elif c.tag == 'alias': + self.alias = c.get('name') class LibvirtConfigGuestHostdevMDEV(LibvirtConfigGuestHostdev):