def test_deploy_docker_on_vm_swift(self, heat_clnt, mock_clients, mock_registry, mock_contrib, mock_get_templ, mock_ua, m_log): handler = heat_handler.Handler() mock_log = m_log.TenantLogger.return_value.log fake_assembly = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assembly fake_template = self._get_fake_template() img = "http://a.b.c/d?temp_url_sig=v&temp_url_expires=v" mock_contrib.return_value = "robust_file" get_file_dict = {} get_file_dict[self._get_key()] = "robust_file" cfg.CONF.api.image_format = "vm" cfg.CONF.worker.image_storage = "swift" cfg.CONF.deployer.flavor = "flavor" cfg.CONF.deployer.image = "coreos" mock_get_templ.return_value = fake_template handler._find_id_if_stack_exists = mock.MagicMock(return_value=(None)) created_stack = { "stack": { "id": "fake_id", "links": [{ "href": "http://fake.ref", "rel": "self" }] } } heat_clnt.return_value.stacks.create.return_value = created_stack handler._check_stack_status = mock.MagicMock() handler.deploy(self.ctx, 77, img, 'tenant-name-ts-commit', [80]) parameters = { 'name': fake_assembly.uuid, 'flavor': "flavor", 'image': "coreos", 'key_name': "mykey", 'location': img, 'du': 'tenant-name-ts-commit', 'publish_ports': '-p 80:80' } heat_clnt.return_value.stacks.create.assert_called_once_with( stack_name='faker-test_uuid', template=fake_template, parameters=parameters, files=get_file_dict) assign_and_create_mock = mock_registry.Component.assign_and_create comp_name = 'Heat_Stack_for_%s' % fake_assembly.name assign_and_create_mock.assert_called_once_with(self.ctx, fake_assembly, comp_name, 'heat_stack', 'Heat Stack test', 'http://fake.ref', 'fake_id') self.assertTrue(mock_log.called)
def test_deploy_docker(self, image_format, mock_clients, mock_registry, mock_get_templ): handler = heat_handler.Handler() image_format.return_value = "docker" fake_assembly = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assembly fake_template = json.dumps({'description': 'test'}) mock_get_templ.return_value = fake_template handler._find_id_if_stack_exists = mock.MagicMock(return_value=(None)) stacks = mock_clients.return_value.heat.return_value.stacks stacks.create.return_value = { "stack": { "id": "fake_id", "links": [{ "href": "http://fake.ref", "rel": "self" }] } } handler._update_assembly_status = mock.MagicMock() handler.deploy(self.ctx, 77, 'created_image_id') parameters = {'image': 'created_image_id', 'app_name': 'faker'} stacks.create.assert_called_once_with(stack_name='faker-test_uuid', template=fake_template, parameters=parameters) assign_and_create_mock = mock_registry.Component.assign_and_create comp_name = 'Heat_Stack_for_%s' % fake_assembly.name assign_and_create_mock.assert_called_once_with(self.ctx, fake_assembly, comp_name, 'Heat Stack', 'Heat Stack test', 'http://fake.ref', 'fake_id')
def test_successful_deploy_destroys_twins(self, heat_clnt, mock_client, mr): handler = heat_handler.Handler() old_app = fakes.FakeAssembly() old_app.name = 'old app' old_app.status = 'DEPLOYMENT_COMPLETE' new_app = fakes.FakeAssembly() new_app.id = 9 new_app.plan_id = old_app.plan_id new_app.name = 'new app' new_app.status = 'DEPLOYMENT_COMPLETE' cfg.CONF.set_override('wait_interval', 0, group='deployer') cfg.CONF.set_override('growth_factor', 0, group='deployer') cfg.CONF.set_override('max_attempts', 1, group='deployer') self.assertEqual(old_app.plan_id, new_app.plan_id) self.assertEqual(old_app.plan_uuid, new_app.plan_uuid) mr.AssemblyList.get_earlier.return_value = [old_app] mock_st_del = heat_clnt.return_value.stacks.delete mock_st_get = heat_clnt.return_value.stacks.get handler.destroy_assembly = mock.MagicMock() handler._destroy_other_assemblies(self.ctx, new_app.id, heat_clnt.return_value) self.assertTrue(mock_st_del.called) self.assertTrue(mock_st_get.called)
def test_get_template_vm_swift_error(self, mock_catalog_get, mock_ua): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() exc_obj = exception.ObjectNotFound() mock_catalog_get.side_effect = exc_obj template_getter = mock.MagicMock() template_getter.return_value = self._get_fake_template() handler._get_template_for_swift = template_getter image_format = 'vm' image_storage = 'swift' image_loc = 'abc' image_name = 'def' ports = [80] mock_logger = mock.MagicMock() template = handler._get_template(self.ctx, image_format, image_storage, image_loc, image_name, fake_assembly, ports, mock_logger) self.assertIsNone(template) mock_ua.assert_called_once_with(self.ctx, fake_assembly.id, {'status': STATES.ERROR}) assert not handler._get_template_for_swift.called
def test_destroy_stack_not_found(self, mock_client, mock_registry, m_log, mock_log_handler, mock_swift_delete): fake_assem = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assem fake_image = fakes.FakeImage() mock_registry.Image.get_by_id.return_value = fake_image handler = heat_handler.Handler() mock_log = m_log.TenantLogger.return_value.log mock_heat = mock_client.return_value.heat mock_del = mock_heat.return_value.stacks.delete mock_del.side_effect = exc.HTTPNotFound cfg.CONF.deployer.max_attempts = 1 cfg.CONF.deployer.wait_interval = 0 cfg.CONF.deployer.growth_factor = 1.2 with mock.patch.object(handler, "_find_id_if_stack_exists", return_value=42) as mock_find: handler.destroy_assembly(self.ctx, fake_assem.id) self.assertTrue(mock_find.called) self.assertTrue(mock_del.called) mock_registry.Image.get_by_id.assert_called_once_with( mock.ANY, fake_assem.image_id) docker_image_name = fake_image.docker_image_name img_filename = docker_image_name.split('-', 1)[1] mock_swift_delete.assert_called_once_with('solum_du', img_filename) log_handler = mock_log_handler.return_value log_handler.delete.assert_called_once_with(fake_assem.uuid) self.assertTrue(mock_log.called)
def test_find_id_if_stack_exists(self): handler = heat_handler.Handler() assem = mock.MagicMock assem.heat_stack_component = mock.MagicMock assem.heat_stack_component.heat_stack_id = '123' id = handler._find_id_if_stack_exists(assem) self.assertEqual(id, '123')
def test_deploy_docker_on_vm_with_dreg(self, mock_clients, mock_registry, mock_get_templ, mock_ua, m_log): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() m_log.TenantLogger.call.return_value = mock.MagicMock() mock_registry.Assembly.get_by_id.return_value = fake_assembly fake_template = self._get_fake_template() template = self._get_tmpl_for_docker_reg(fake_assembly, fake_template, 'created_image_id') cfg.CONF.api.image_format = "vm" cfg.CONF.worker.image_storage = "docker_registry" mock_get_templ.return_value = template handler._find_id_if_stack_exists = mock.MagicMock(return_value=(None)) stacks = mock_clients.return_value.heat.return_value.stacks stacks.create.return_value = {"stack": { "id": "fake_id", "links": [{"href": "http://fake.ref", "rel": "self"}]}} handler._check_stack_status = mock.MagicMock() handler.deploy(self.ctx, 77, 'created_image_id', 'image_name', [80]) stacks = mock_clients.return_value.heat.return_value.stacks self.assertTrue(stacks.create.called) assign_and_create_mock = mock_registry.Component.assign_and_create comp_name = 'Heat_Stack_for_%s' % fake_assembly.name assign_and_create_mock.assert_called_once_with(self.ctx, fake_assembly, comp_name, 'heat_stack', 'Heat Stack test', 'http://fake.ref', 'fake_id')
def test_destroy_error(self, mock_client, mock_registry, mua, m_log): fake_assem = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assem mock_heat = mock_client.return_value.heat mock_del = mock_heat.return_value.stacks.delete handler = heat_handler.Handler() handler._find_id_if_stack_exists = mock.MagicMock(return_value='42') cfg.CONF.deployer.max_attempts = 1 cfg.CONF.deployer.wait_interval = 0 cfg.CONF.deployer.growth_factor = 1.2 with mock.patch.object(handler, "_find_id_if_stack_exists", return_value="42"): handler.destroy_assembly(self.ctx, fake_assem.id) c1 = mock.call(self.ctx, fake_assem.id, {'status': STATES.DELETING}) c2 = mock.call(self.ctx, fake_assem.id, {'status': STATES.ERROR_STACK_DELETE_FAILED}) calls = [c1, c2] mua.assert_has_calls(calls, any_order=False) self.assertTrue(mock_del.called)
def test_destroy_absent(self, mock_client, mock_registry, mock_tlogger, mock_log_handler, mock_swift_delete): fake_assem = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assem fake_image = fakes.FakeImage() mock_registry.Image.get_by_id.return_value = fake_image mock_log = mock_tlogger.TenantLogger.return_value.log mock_upload = mock_tlogger.TenantLogger.return_value.upload mock_log_del = mock_log_handler.return_value.delete mock_heat = mock_client.return_value.heat mock_del = mock_heat.return_value.stacks.delete hh = heat_handler.Handler() with mock.patch.object(hh, "_find_id_if_stack_exists", return_value=None): hh.destroy_assembly(self.ctx, fake_assem.id) self.assertFalse(mock_del.called) self.assertTrue(fake_assem.destroy.called) mock_registry.Image.get_by_id.assert_called_once_with( mock.ANY, fake_assem.image_id) docker_image_name = fake_image.docker_image_name img_filename = docker_image_name.split('-', 1)[1] mock_swift_delete.assert_called_once_with('solum_du', img_filename) self.assertTrue(mock_log.called) self.assertTrue(mock_upload.called) self.assertEqual(1, mock_log_del.call_count) self.assertEqual(mock.call(fake_assem.uuid), mock_log_del.call_args)
def test_successful_deploy_preserves_others(self, mock_client, mr): handler = heat_handler.Handler() old_app = fakes.FakeAssembly() old_app.name = 'old app' old_app.plan_id = 1 old_app.id = 1 old_app.status = 'READY' new_app = fakes.FakeAssembly() new_app.id = 1 new_app.plan_id = 2 new_app.plan_uuid = 'new fake plan uuid' new_app.name = 'new app' new_app.status = 'READY' cfg.CONF.set_override('wait_interval', 0, group='deployer') cfg.CONF.set_override('growth_factor', 0, group='deployer') cfg.CONF.set_override('max_attempts', 1, group='deployer') self.assertNotEqual(old_app.plan_id, new_app.plan_id) self.assertNotEqual(old_app.plan_uuid, new_app.plan_uuid) mr.AssemblyList.get_earlier.return_value = [old_app] mr.Assembly.get_by_id.return_value = new_app mock_heat = mock_client.return_value.heat mock_st_del = mock_heat.return_value.stacks.delete mock_st_get = mock_heat.return_value.stacks.get handler.destroy_assembly = mock.MagicMock() handler._destroy_other_assemblies(self.ctx, new_app.id) self.assertFalse(mock_st_del.called) self.assertFalse(mock_st_get.called)
def test_update_assembly_status_multiple_ports(self, mock_http, mock_clients, mock_ua, mock_wf_app): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() stack = mock.MagicMock() stack.status = 'COMPLETE' mock_clients.heat().stacks.get.return_value = stack resp = {'status': '200'} conn = mock.MagicMock() conn.request.return_value = [resp, ''] mock_http.return_value = conn cfg.CONF.deployer.du_attempts = 1 mock_logger = mock.MagicMock() handler._parse_server_ip = mock.MagicMock(return_value=('xyz')) handler._check_stack_status(self.ctx, fake_assembly.id, mock_clients, 'fake_id', [80, 81], mock_logger) c1 = mock.call(self.ctx, fake_assembly.id, { 'status': STATES.STARTING_APP, 'application_uri': 'xyz:[80,81]' }) c2 = mock.call(self.ctx, fake_assembly.id, {'status': 'READY'}) calls = [c1, c2] mock_ua.assert_has_calls(calls, any_order=False)
def test_comp_name_error(self, mock_clients, mock_registry, mock_get_templ, mock_ua, m_log): handler = heat_handler.Handler() mock_log = m_log.TenantLogger.return_value.log fake_assembly = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assembly fake_template = json.dumps({'description': 'test'}) mock_get_templ.return_value = fake_template handler._find_id_if_stack_exists = mock.MagicMock(return_value=(None)) stacks = mock_clients.return_value.heat.return_value.stacks stacks.create.return_value = { "stack": { "id": "fake_id", "links": [{ "href": "http://fake.ref", "rel": "self" }] } } handler._check_stack_status = mock.MagicMock() handler.deploy(self.ctx, 77, 'created_image_id', 'image_name', [80]) assign_and_create_mock = mock_registry.Component.assign_and_create comp_name = 'Heat Stack for %s' % fake_assembly.name self.assertRaises(AssertionError, assign_and_create_mock.assert_called_once_with, comp_name) self.assertTrue(mock_log.called)
def test_delete_app_artifacts_from_swift_no_image(self, mock_log_handler, m_log, mock_registry, mock_swift_delete): fake_assembly = fakes.FakeAssembly() fake_assembly.image_id = None handler = heat_handler.Handler() handler._delete_app_artifacts_from_swift(self.ctx, mock_log_handler, fake_assembly) self.assertFalse(mock_registry.Image.get_by_id.called) self.assertFalse(mock_swift_delete.called)
def test_delete_heat_stack_absent(self, mock_client, mock_registry): fake_assem = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assem handler = heat_handler.Handler() handler._find_id_if_stack_exists = mock.MagicMock(return_value=None) handler.delete_heat_stack(self.ctx, fake_assem.id) assert not mock_client.heat.stacks.delete.called fake_assem.destroy.assert_called_once()
def test_update_assembly_status_failed(self, mock_clients): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() stack = mock.MagicMock() stack.status = 'FAILED' mock_clients.heat().stacks.get.return_value = stack handler._update_assembly_status(self.ctx, fake_assembly, mock_clients, 'fake_id') self.assertEqual(fake_assembly.status, 'ERROR') fake_assembly.save.assert_called_once_with(self.ctx)
def test_update_assembly_status(self, mock_clients): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() stack = mock.MagicMock() stack.status = 'COMPLETE' mock_clients.heat().stacks.get.return_value = stack handler._parse_server_url = mock.MagicMock(return_value=('xyz')) handler._update_assembly_status(self.ctx, fake_assembly, mock_clients, 'fake_id') self.assertEqual(fake_assembly.status, 'READY') fake_assembly.save.assert_called_once_with(self.ctx)
def test_delete_app_artifacts_from_swift_no_image(self, mock_log_handler, m_log, mock_registry, mock_swift_delete): fake_assembly = fakes.FakeAssembly() fake_assembly.image_id = None log_handler = mock_log_handler.return_value handler = heat_handler.Handler() handler._delete_app_artifacts_from_swift(self.ctx, mock_log_handler, 'fake_log_id', fake_assembly) self.assertFalse(mock_registry.Image.get_by_id.called) self.assertFalse(mock_swift_delete.called) log_handler.delete.assert_called_once_with('fake_log_id')
def test_update_assembly_status_failed(self, mock_clients, mock_ua): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() stack = mock.MagicMock() stack.status = 'FAILED' mock_clients.heat().stacks.get.return_value = stack mock_logger = mock.MagicMock() handler._check_stack_status(self.ctx, fake_assembly.id, mock_clients, 'fake_id', [80], mock_logger) mock_ua.assert_called_once_with( self.ctx, fake_assembly.id, {'status': STATES.ERROR_STACK_CREATE_FAILED})
def test_deploy_docker(self, heat_clnt, mock_clients, mock_registry, mock_get_contrib, mock_get_templ, mock_ua, m_log): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assembly m_log.TenantLogger.call.return_value = mock.MagicMock() cfg.CONF.api.image_format = "docker" mock_get_contrib.return_value = "robust_file" get_file_dict = {} get_file_dict[self._get_key()] = "robust_file" fake_template = self._get_fake_template() template = self._get_tmpl_for_docker_reg(fake_assembly, fake_template, 'created_image_id') mock_get_templ.return_value = template handler._find_id_if_stack_exists = mock.MagicMock(return_value=(None)) created_stack = { "stack": { "id": "fake_id", "links": [{ "href": "http://fake.ref", "rel": "self" }] } } heat_clnt.return_value.stacks.create.return_value = created_stack handler._check_stack_status = mock.MagicMock() handler.deploy(self.ctx, 77, 'created_image_id', 'image_name', [80]) parameters = { 'image': 'created_image_id', 'app_name': 'faker', 'port': 80 } heat_clnt.return_value.stacks.create.assert_called_once_with( stack_name='faker-test_uuid', template=template, parameters=parameters, files=get_file_dict) assign_and_create_mock = mock_registry.Component.assign_and_create comp_name = 'Heat_Stack_for_%s' % fake_assembly.name assign_and_create_mock.assert_called_once_with(self.ctx, fake_assembly, comp_name, 'heat_stack', 'Heat Stack test', 'http://fake.ref', 'fake_id')
def test_parse_server_ip(self): handler = heat_handler.Handler() heat_output = mock.MagicMock() heat_output._info = {"id": "fake_id", "outputs": [{"output_value": "192.168.78.21", "description": "IP", "output_key": "public_ip"}, {"output_value": "http://192.168.78.21:5000", "description": "URL", "output_key": "URL"}]} host_url = handler._parse_server_ip(heat_output) self.assertEqual(host_url, "192.168.78.21")
def test_delete_app_artifacts_from_swift(self, mock_log_handler, m_log, mock_registry, mock_swift_delete): fake_assembly = fakes.FakeAssembly() fake_image = fakes.FakeImage() mock_registry.Image.get_by_id.return_value = fake_image handler = heat_handler.Handler() handler._delete_app_artifacts_from_swift(self.ctx, mock_log_handler, fake_assembly) mock_registry.Image.get_by_id.assert_called_once_with( mock.ANY, fake_assembly.image_id) docker_image_name = fake_image.docker_image_name img_filename = docker_image_name.split('-', 1)[1] mock_swift_delete.assert_called_once_with('solum_du', img_filename)
def test_deploy(self, mock_clients, mock_registry, mock_get_templ): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assembly fake_template = json.dumps({'description': 'test'}) mock_get_templ.return_value = fake_template handler._find_id_if_stack_exists = mock.MagicMock(return_value=(None)) stacks = mock_clients.return_value.heat.return_value.stacks stacks.create.return_value = { "stack": { "id": "fake_id", "links": [{ "href": "http://fake.ref", "rel": "self" }] } } neutron = mock_clients.return_value.neutron neutron.return_value.list_networks.return_value = { "networks": [{ "router:external": True, "id": "public_net_id" }, { "router:external": False, "id": "private_net_id", "subnets": ["private_subnet_id"] }] } handler._update_assembly_status = mock.MagicMock() handler.deploy(self.ctx, 77, 'created_image_id') parameters = { 'image': 'created_image_id', 'app_name': 'faker', 'private_net': 'private_net_id', 'public_net': 'public_net_id', 'private_subnet': 'private_subnet_id' } stacks = mock_clients.return_value.heat.return_value.stacks stacks.create.assert_called_once_with(stack_name='faker-test_uuid', template=fake_template, parameters=parameters) neutron = mock_clients.return_value.neutron neutron.return_value.list_networks.assert_called_once_with() assign_and_create_mock = mock_registry.Component.assign_and_create comp_name = 'Heat_Stack_for_%s' % fake_assembly.name assign_and_create_mock.assert_called_once_with(self.ctx, fake_assembly, comp_name, 'Heat Stack', 'Heat Stack test', 'http://fake.ref', 'fake_id')
def test_delete_heat_stack_error(self, mock_client, mock_registry): fake_assem = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assem handler = heat_handler.Handler() handler._find_id_if_stack_exists = mock.MagicMock(return_value='42') cfg.CONF.deployer.max_attempts = 1 cfg.CONF.deployer.wait_interval = 0 cfg.CONF.deployer.growth_factor = 1.2 handler.delete_heat_stack(self.ctx, fake_assem.id) mock_client.heat.stacks.delete.assert_called_once() fake_assem.save.assert_called_once_with(self.ctx) self.assertEqual(STATES.ERROR_STACK_DELETE_FAILED, fake_assem.status)
def test_check_stack_status(self, mock_clients, mock_ua): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() mock_clients.heat().stacks.get.side_effect = Exception() cfg.CONF.set_override('wait_interval', 1, group='deployer') cfg.CONF.set_override('growth_factor', 1, group='deployer') cfg.CONF.set_override('max_attempts', 1, group='deployer') mock_logger = mock.MagicMock() handler._check_stack_status(self.ctx, fake_assembly.id, mock_clients, 'fake_id', [80], mock_logger) mock_ua.assert_called_once_with( self.ctx, fake_assembly.id, {'status': STATES.ERROR_STACK_CREATE_FAILED})
def test_get_template(self, mua): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() image_format = 'vm' image_storage = 'glance' image_loc = 'abc' image_name = 'def' ports = [80] mock_logger = mock.MagicMock() template = handler._get_template(self.ctx, image_format, image_storage, image_loc, image_name, fake_assembly, ports, mock_logger) self.assertIsNone(template) mua.assert_called_once_with(self.ctx, fake_assembly.id, {'status': STATES.ERROR})
def test_delete_heat_stack_success(self, mock_client, mock_registry): fake_assem = fakes.FakeAssembly() mock_registry.Assembly.get_by_id.return_value = fake_assem handler = heat_handler.Handler() handler._find_id_if_stack_exists = mock.MagicMock(return_value='42') handler._get_stack_id_from_heat = mock.MagicMock(return_value=None) cfg.CONF.deployer.max_attempts = 1 cfg.CONF.deployer.wait_interval = 0 cfg.CONF.deployer.growth_factor = 1.2 handler.delete_heat_stack(self.ctx, fake_assem.id) mock_client.heat.stacks.delete.assert_called_once() fake_assem.destroy.assert_called_once()
def test_unsuccessful_deploy_preserves_everyone(self, mr): handler = heat_handler.Handler() old_app = fakes.FakeAssembly() old_app.name = 'old app' old_app.status = 'READY' new_app = fakes.FakeAssembly() new_app.id = 9 new_app.plan_id = old_app.plan_id new_app.name = 'new app' new_app.status = 'ERROR' self.assertEqual(old_app.plan_id, new_app.plan_id) self.assertEqual(old_app.plan_uuid, new_app.plan_uuid) mr.AssemblyList.get_earlier.return_value = [] handler.destroy_assembly = mock.MagicMock() handler._destroy_other_assemblies(self.ctx, new_app.id) self.assertEqual(0, handler.destroy_assembly.call_count)
def test_update_assembly_status_failed(self, heat_clnt, mock_clients, mock_ua): cfg.CONF.set_override('wait_interval', 1, group='deployer') cfg.CONF.set_override('growth_factor', 1, group='deployer') cfg.CONF.set_override('max_attempts', 1, group='deployer') handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() stack = mock.MagicMock() stack.status = 'FAILED' heat_clnt.return_value.stacks.get.return_value = stack mock_logger = mock.MagicMock() handler._check_stack_status(self.ctx, fake_assembly.id, heat_clnt.return_value, 'fake_id', [80], mock_logger) mock_ua.assert_called_once_with( self.ctx, fake_assembly.id, {'status': STATES.ERROR_STACK_CREATE_FAILED})
def test_get_parameters_for_docker(self, mock_clients, mock_heat_utils): handler = heat_handler.Handler() fake_assembly = fakes.FakeAssembly() image_format = 'docker' image_loc = 'abc' image_name = 'abc' ports = [80] mock_logger = mock.MagicMock() params = handler._get_parameters(self.ctx, image_format, image_loc, image_name, fake_assembly, ports, mock_clients, mock_logger) self.assertEqual(params['app_name'], fake_assembly.name) self.assertEqual(params['image'], 'abc') self.assertEqual(params['port'], 80)
def test_successful_deploy_preserves_notreadies(self, heat_clnt, mr): handler = heat_handler.Handler() old_app = fakes.FakeAssembly() old_app.name = 'old app' old_app.status = 'BUILDING' new_app = fakes.FakeAssembly() new_app.id = 9 new_app.plan_id = old_app.plan_id new_app.name = 'new app' new_app.status = 'DEPLOYMENT_COMPLETE' self.assertEqual(old_app.plan_id, new_app.plan_id) self.assertEqual(old_app.plan_uuid, new_app.plan_uuid) mr.AssemblyList.get_earlier.return_value = [] handler.destroy_assembly = mock.MagicMock() handler._destroy_other_assemblies(self.ctx, new_app.id, heat_clnt) self.assertEqual(0, handler.destroy_assembly.call_count)