def test_spawn_container_start_fail(self, neutron_failure=None): def container_get(*args, **kwargs): raise lxdcore_exceptions.LXDAPIException(MockResponse(404)) def side_effect(*args, **kwargs): raise lxdcore_exceptions.LXDAPIException(MockResponse(200)) self.client.containers.get.side_effect = container_get container = mock.Mock() ctx = context.get_admin_context() instance = fake_instance.fake_instance_obj( ctx, name='test', memory_mb=0) image_meta = mock.Mock() injected_files = mock.Mock() admin_password = mock.Mock() network_info = [_VIF] block_device_info = mock.Mock() virtapi = manager.ComputeVirtAPI(mock.MagicMock()) lxd_driver = driver.LXDDriver(virtapi) lxd_driver.init_host(None) lxd_driver.cleanup = mock.Mock() lxd_driver.client.containers.create = mock.Mock( side_effect=side_effect) container.start.side_effect = side_effect self.assertRaises( lxdcore_exceptions.LXDAPIException, lxd_driver.spawn, ctx, instance, image_meta, injected_files, admin_password, network_info, block_device_info) lxd_driver.cleanup.assert_called_once_with( ctx, instance, network_info, block_device_info)
def test_spawn_profile_fail(self, configdrive, neutron_failure=None): """Cleanup is called when profile creation fails.""" def container_get(*args, **kwargs): raise lxdcore_exceptions.LXDAPIException(MockResponse(404)) def profile_create(*args, **kwargs): raise lxdcore_exceptions.LXDAPIException(MockResponse(500)) self.client.containers.get.side_effect = container_get self.client.profiles.create.side_effect = profile_create configdrive.return_value = False ctx = context.get_admin_context() instance = fake_instance.fake_instance_obj( ctx, name='test', memory_mb=0) image_meta = mock.Mock() injected_files = mock.Mock() admin_password = mock.Mock() network_info = [_VIF] block_device_info = mock.Mock() virtapi = manager.ComputeVirtAPI(mock.MagicMock()) lxd_driver = driver.LXDDriver(virtapi) lxd_driver.init_host(None) lxd_driver.cleanup = mock.Mock() self.assertRaises( lxdcore_exceptions.LXDAPIException, lxd_driver.spawn, ctx, instance, image_meta, injected_files, admin_password, network_info, block_device_info) lxd_driver.cleanup.assert_called_once_with( ctx, instance, network_info, block_device_info)
def test_spawn_with_configdrive(self, configdrive): def container_get(*args, **kwargs): raise lxdcore_exceptions.LXDAPIException(MockResponse(404)) self.client.containers.get.side_effect = container_get configdrive.return_value = True ctx = context.get_admin_context() instance = fake_instance.fake_instance_obj( ctx, name='test', memory_mb=0) image_meta = mock.Mock() injected_files = mock.Mock() admin_password = mock.Mock() network_info = [_VIF] block_device_info = mock.Mock() virtapi = manager.ComputeVirtAPI(mock.MagicMock()) lxd_driver = driver.LXDDriver(virtapi) lxd_driver.init_host(None) # XXX: rockstar (6 Jul 2016) - There are a number of XXX comments # related to these calls in spawn. They require some work before we # can take out these mocks and follow the real codepaths. lxd_driver.firewall_driver = mock.Mock() lxd_driver._add_configdrive = mock.Mock() lxd_driver.spawn( ctx, instance, image_meta, injected_files, admin_password, network_info, block_device_info) self.vif_driver.plug.assert_called_once_with( instance, network_info[0]) fd = lxd_driver.firewall_driver fd.setup_basic_filtering.assert_called_once_with( instance, network_info) fd.apply_instance_filter.assert_called_once_with( instance, network_info) configdrive.assert_called_once_with(instance) lxd_driver.client.profiles.get.assert_called_once_with(instance.name)
def _test_spawn_instance_with_network_events(self, neutron_failure=None): generated_events = [] def wait_timeout(): event = mock.MagicMock() if neutron_failure == 'timeout': raise eventlet.timeout.Timeout() elif neutron_failure == 'error': event.status = 'failed' else: event.status = 'completed' return event def fake_prepare(instance, event_name): m = mock.MagicMock() m.instance = instance m.event_name = event_name m.wait.side_effect = wait_timeout generated_events.append(m) return m virtapi = manager.ComputeVirtAPI(mock.MagicMock()) prepare = virtapi._compute.instance_events.prepare_for_instance_event prepare.side_effect = fake_prepare drv = driver.LXDDriver(virtapi) instance_href = fake_instance.fake_instance_obj( context.get_admin_context(), name='test', memory_mb=0) @mock.patch.object(drv, 'plug_vifs') @mock.patch('nova.virt.configdrive.required_by') def test_spawn(configdrive, plug_vifs): def container_get(*args, **kwargs): raise lxdcore_exceptions.LXDAPIException(MockResponse(404)) self.client.containers.get.side_effect = container_get configdrive.return_value = False ctx = context.get_admin_context() instance = fake_instance.fake_instance_obj( ctx, name='test', memory_mb=0) image_meta = mock.Mock() injected_files = mock.Mock() admin_password = mock.Mock() network_info = [_VIF] block_device_info = mock.Mock() drv.init_host(None) drv.spawn( ctx, instance, image_meta, injected_files, admin_password, network_info, block_device_info) test_spawn() if cfg.CONF.vif_plugging_timeout and utils.is_neutron(): prepare.assert_has_calls([ mock.call(instance_href, 'network-vif-plugged-vif1'), mock.call(instance_href, 'network-vif-plugged-vif2')]) for event in generated_events: if neutron_failure and generated_events.index(event) != 0: self.assertEqual(0, event.call_count) else: self.assertEqual(0, prepare.call_count)
def set_up_virtapi(self): self.compute = FakeCompute() self.virtapi = compute_manager.ComputeVirtAPI(self.compute)
def _test_start_container_with_network_events(self, neutron_failure=None): generated_events = [] def wait_timeout(): event = mock.MagicMock() if neutron_failure == 'timeout': raise eventlet.timeout.Timeout() elif neutron_failure == 'error': event.status = 'failed' else: event.status = 'completed' return event def fake_prepare(instance, event_name): m = mock.MagicMock() m.instance = instance m.event_name = event_name m.wait.side_effect = wait_timeout generated_events.append(m) return m virtapi = manager.ComputeVirtAPI(mock.MagicMock()) prepare = virtapi._compute.instance_events.prepare_for_instance_event prepare.side_effect = fake_prepare drvr = novadocker.virt.docker.driver.DockerDriver(virtapi) instance_href = utils.get_test_instance() container_id = self.connection._find_container_by_uuid( instance_href['uuid']).get('id') vifs = [{'id': 'vif1', 'active': False}, {'id': 'vif2', 'active': False}] @mock.patch.object(drvr, '_extract_dns_entries') @mock.patch.object(drvr, 'plug_vifs') @mock.patch.object(drvr, '_attach_vifs') @mock.patch.object(self.mock_client, 'start') @mock.patch.object(self.mock_client, 'kill') @mock.patch.object(self.mock_client, 'remove_container') def test_start(remove_container, kill, start, attach_vif, plug_vifs, extract_dns_entries): drvr._start_container(container_id, instance_href, vifs) plug_vifs.assert_called_with(instance_href, vifs) attach_vif.assert_called_with(instance_href, vifs) if neutron_failure and cfg.CONF.vif_plugging_is_fatal: kill.assert_called_once_with(container_id) remove_container.assert_called_once_with(container_id, Force=True) test_start() if nova.utils.is_neutron() and cfg.CONF.vif_plugging_timeout: prepare.assert_has_calls([ mock.call(instance_href, 'network-vif-plugged-vif1'), mock.call(instance_href, 'network-vif-plugged-vif2')]) for event in generated_events: if neutron_failure and generated_events.index(event) != 0: self.assertEqual(0, event.call_count) else: self.assertEqual(0, prepare.call_count)