diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py
index 874d6b553c9b..7ebf2e48ee82 100644
--- a/nova/tests/unit/virt/libvirt/test_driver.py
+++ b/nova/tests/unit/virt/libvirt/test_driver.py
@@ -375,14 +375,16 @@ def _concurrency(signal, wait, done, target, is_block_dev=False):
class FakeVirtDomain(object):
- def __init__(self, fake_xml=None, uuidstr=None, id=None, name=None):
+ def __init__(self, fake_xml=None, uuidstr=None, id=None, name=None,
+ info=None):
if uuidstr is None:
uuidstr = uuids.fake
self.uuidstr = uuidstr
self.id = id
self.domname = name
- self._info = [power_state.RUNNING, 2048 * units.Mi, 1234 * units.Mi,
- None, None]
+ self._info = info or (
+ [power_state.RUNNING, 2048 * units.Mi,
+ 1234 * units.Mi, None, None])
if fake_xml:
self._fake_dom_xml = fake_xml
else:
@@ -16545,8 +16547,7 @@ class LibvirtDriverTestCase(test.NoDBTestCase):
self._test_inject_data(instance, injection_info, "/fail/path",
disk_params, called=False)
- def _test_attach_detach_interface(self, method, power_state,
- expected_flags):
+ def _test_attach_interface(self, power_state, expected_flags):
instance = self._create_instance()
network_info = _fake_network_info(self, 1)
domain = FakeVirtDomain(fake_xml="""
@@ -16571,91 +16572,109 @@ class LibvirtDriverTestCase(test.NoDBTestCase):
host.Host.get_domain(instance).AndReturn(domain)
domain.info().AndReturn([power_state, 1, 2, 3, 4])
- if method == 'attach_interface':
- self.drvr.firewall_driver.setup_basic_filtering(
- instance, [network_info[0]])
- fake_image_meta = objects.ImageMeta.from_dict(
- {'id': instance.image_ref})
- expected = self.drvr.vif_driver.get_config(
- instance, network_info[0], fake_image_meta, instance.flavor,
- CONF.libvirt.virt_type, self.drvr._host)
- self.mox.StubOutWithMock(self.drvr.vif_driver,
- 'get_config')
- self.drvr.vif_driver.get_config(
- instance, network_info[0],
- mox.IsA(objects.ImageMeta),
- mox.IsA(objects.Flavor),
- CONF.libvirt.virt_type,
- self.drvr._host).AndReturn(expected)
- domain.attachDeviceFlags(expected.to_xml(), flags=expected_flags)
- elif method == 'detach_interface':
- expected = vconfig.LibvirtConfigGuestInterface()
- expected.parse_str("""
-
-
-
-
-
- """)
- self.mox.StubOutWithMock(self.drvr.vif_driver,
- 'get_config')
- self.drvr.vif_driver.get_config(
- instance, network_info[0],
- mox.IsA(objects.ImageMeta),
- mox.IsA(objects.Flavor),
- CONF.libvirt.virt_type,
- self.drvr._host).AndReturn(expected)
- domain.detachDeviceFlags("""
-
-
-
-
-
-
- """, expected_flags)
+ self.drvr.firewall_driver.setup_basic_filtering(
+ instance, [network_info[0]])
+ fake_image_meta = objects.ImageMeta.from_dict(
+ {'id': instance.image_ref})
+ expected = self.drvr.vif_driver.get_config(
+ instance, network_info[0], fake_image_meta, instance.flavor,
+ CONF.libvirt.virt_type, self.drvr._host)
+ self.mox.StubOutWithMock(self.drvr.vif_driver,
+ 'get_config')
+ self.drvr.vif_driver.get_config(
+ instance, network_info[0],
+ mox.IsA(objects.ImageMeta),
+ mox.IsA(objects.Flavor),
+ CONF.libvirt.virt_type,
+ self.drvr._host).AndReturn(expected)
+ domain.attachDeviceFlags(expected.to_xml(), flags=expected_flags)
self.mox.ReplayAll()
- if method == 'attach_interface':
- self.drvr.attach_interface(
- self.context, instance, fake_image_meta, network_info[0])
- elif method == 'detach_interface':
- self.drvr.detach_interface(
- self.context, instance, network_info[0])
+ self.drvr.attach_interface(
+ self.context, instance, fake_image_meta, network_info[0])
self.mox.VerifyAll()
def test_attach_interface_with_running_instance(self):
- self._test_attach_detach_interface(
- 'attach_interface', power_state.RUNNING,
+ self._test_attach_interface(
+ power_state.RUNNING,
expected_flags=(fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG |
fakelibvirt.VIR_DOMAIN_AFFECT_LIVE))
def test_attach_interface_with_pause_instance(self):
- self._test_attach_detach_interface(
- 'attach_interface', power_state.PAUSED,
+ self._test_attach_interface(
+ power_state.PAUSED,
expected_flags=(fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG |
fakelibvirt.VIR_DOMAIN_AFFECT_LIVE))
def test_attach_interface_with_shutdown_instance(self):
- self._test_attach_detach_interface(
- 'attach_interface', power_state.SHUTDOWN,
+ self._test_attach_interface(
+ power_state.SHUTDOWN,
expected_flags=(fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG))
+ def _test_detach_interface(self, power_state, expected_flags):
+ # setup some mocks
+ instance = self._create_instance()
+ network_info = _fake_network_info(self, 1)
+ domain = FakeVirtDomain(fake_xml="""
+
+
+
+
+
+
+
+
+
+
+ """,
+ info=[power_state, 1, 2, 3, 4])
+ guest = libvirt_guest.Guest(domain)
+
+ expected_cfg = vconfig.LibvirtConfigGuestInterface()
+ expected_cfg.parse_str("""
+
+
+
+
+
+ """)
+
+ with test.nested(
+ mock.patch.object(host.Host, 'get_guest', return_value=guest),
+ mock.patch.object(self.drvr.vif_driver, 'get_config',
+ return_value=expected_cfg),
+ mock.patch.object(domain, 'detachDeviceFlags')
+ ) as (
+ mock_get_guest, mock_get_config, mock_detach_device_flags
+ ):
+ # run the detach method
+ self.drvr.detach_interface(self.context, instance, network_info[0])
+
+ # make our assertions
+ mock_get_guest.assert_called_once_with(instance)
+ mock_get_config.assert_called_once_with(
+ instance, network_info[0], test.MatchType(objects.ImageMeta),
+ test.MatchType(objects.Flavor), CONF.libvirt.virt_type,
+ self.drvr._host)
+ mock_detach_device_flags.assert_called_once_with(
+ expected_cfg.to_xml(), flags=expected_flags)
+
def test_detach_interface_with_running_instance(self):
- self._test_attach_detach_interface(
- 'detach_interface', power_state.RUNNING,
+ self._test_detach_interface(
+ power_state.RUNNING,
expected_flags=(fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG |
fakelibvirt.VIR_DOMAIN_AFFECT_LIVE))
def test_detach_interface_with_pause_instance(self):
- self._test_attach_detach_interface(
- 'detach_interface', power_state.PAUSED,
+ self._test_detach_interface(
+ power_state.PAUSED,
expected_flags=(fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG |
fakelibvirt.VIR_DOMAIN_AFFECT_LIVE))
def test_detach_interface_with_shutdown_instance(self):
- self._test_attach_detach_interface(
- 'detach_interface', power_state.SHUTDOWN,
+ self._test_detach_interface(
+ power_state.SHUTDOWN,
expected_flags=(fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG))
@mock.patch('nova.virt.libvirt.driver.LOG')
@@ -16707,7 +16726,7 @@ class LibvirtDriverTestCase(test.NoDBTestCase):
self.mox.StubOutWithMock(host.Host, 'get_domain')
self.mox.StubOutWithMock(self.drvr.firewall_driver,
'setup_basic_filtering')
- self.mox.StubOutWithMock(domain, 'attachDeviceFlags')
+ self.mox.StubOutWithMock(domain, 'detachDeviceFlags')
self.mox.StubOutWithMock(domain, 'info')
host.Host.get_domain(instance).AndReturn(domain)
@@ -16729,15 +16748,7 @@ class LibvirtDriverTestCase(test.NoDBTestCase):
self.drvr._host).AndReturn(expected)
expected_flags = (fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG |
fakelibvirt.VIR_DOMAIN_AFFECT_LIVE)
- domain.detachDeviceFlags("""
-
-
-
-
-
-
- """, expected_flags)
+ domain.detachDeviceFlags(expected.to_xml(), flags=expected_flags)
self.mox.ReplayAll()
self.drvr.detach_interface(self.context, instance, network_info[0])
self.mox.VerifyAll()