def test_upgrade_cluster_as_admin(self): token_info = { 'token': { 'project': { 'id': 'fake_project_1' }, 'user': { 'id': 'fake_user_1' } } } user_context = magnum_context.RequestContext( auth_token_info=token_info, project_id='fake_project_1', user_id='fake_user_1', is_admin=False) cluster_uuid = uuidutils.generate_uuid() cluster_template_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster_template(user_context, public=True, uuid=cluster_template_uuid) obj_utils.create_test_cluster( user_context, uuid=cluster_uuid, cluster_template_id=cluster_template_uuid) cluster_upgrade_req = {"cluster_template": "test_2"} self.context.is_admin = True response = self.post_json( '/clusters/%s/actions/upgrade' % cluster_uuid, cluster_upgrade_req, headers={"Openstack-Api-Version": "container-infra 1.8"}) self.assertEqual(202, response.status_int)
def setUp(self): super(TestListNodegroups, self).setUp() obj_utils.create_test_cluster_template(self.context) self.cluster_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=self.cluster_uuid) self.cluster = objects.Cluster.get_by_uuid(self.context, self.cluster_uuid)
def test_delete_cluster_as_admin(self, mock_context, mock_policy): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=temp_uuid) self.context.is_admin = True response = self.delete('/clusters/%s' % temp_uuid, expect_errors=True) self.assertEqual(204, response.status_int)
def test_delete_cluster_as_admin(self, mock_context, mock_policy): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=temp_uuid) self.context.is_admin = True response = self.delete('/clusters/%s' % temp_uuid, expect_errors=True) self.assertEqual(204, response.status_int)
def test_get_invalid_type_stats(self): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') self.assertRaises(AppError, self.get_json, '/stats?project_id=123&type=invalid', headers=self.base_headers)
def setUp(self): super(TestListNodegroups, self).setUp() obj_utils.create_test_cluster_template(self.context) self.cluster_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster( self.context, uuid=self.cluster_uuid) self.cluster = objects.Cluster.get_by_uuid(self.context, self.cluster_uuid)
def test_get_invalid_type_stats(self): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') self.assertRaises(AppError, self.get_json, '/stats?project_id=123&type=invalid', headers=self.base_headers)
def test_get_one_by_uuid_admin(self, mock_context, mock_policy): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=temp_uuid, project_id=temp_uuid) self.context.is_admin = True response = self.get_json( '/clusters/%s' % temp_uuid) self.assertEqual(temp_uuid, response['uuid'])
def test_get_one_by_uuid_admin(self, mock_context, mock_policy): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=temp_uuid, project_id=temp_uuid) self.context.is_admin = True response = self.get_json( '/clusters/%s' % temp_uuid) self.assertEqual(temp_uuid, response['uuid'])
def test_get_all_as_admin(self, mock_context, mock_policy): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=temp_uuid, project_id=temp_uuid) self.context.is_admin = True self.context.all_tenants = True cluster = objects.Cluster.get_by_uuid(self.context, temp_uuid) expected = [ng.uuid for ng in cluster.nodegroups] self._test_list_nodegroups(cluster.uuid, expected=expected)
def test_get_all_as_admin(self, mock_context, mock_policy): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=temp_uuid, project_id=temp_uuid) self.context.is_admin = True self.context.all_tenants = True cluster = objects.Cluster.get_by_uuid(self.context, temp_uuid) expected = [ng.uuid for ng in cluster.nodegroups] self._test_list_nodegroups(cluster.uuid, expected=expected)
def test_collection_links(self): for id_ in range(5): obj_utils.create_test_cluster(self.context, id=id_, uuid=uuidutils.generate_uuid()) response = self.get_json('/clusters/?limit=3') self.assertEqual(3, len(response['clusters'])) next_marker = response['clusters'][-1]['uuid'] self.assertIn(next_marker, response['next'])
def test_delete_multiple_cluster_by_name(self): obj_utils.create_test_cluster(self.context, name='test_cluster', uuid=uuidutils.generate_uuid()) obj_utils.create_test_cluster(self.context, name='test_cluster', uuid=uuidutils.generate_uuid()) response = self.delete('/clusters/test_cluster', expect_errors=True) self.assertEqual(409, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['errors'])
def test_collection_links(self): for id_ in range(5): obj_utils.create_test_cluster(self.context, id=id_, uuid=uuidutils.generate_uuid()) response = self.get_json('/clusters/?limit=3') self.assertEqual(3, len(response['clusters'])) next_marker = response['clusters'][-1]['uuid'] self.assertIn(next_marker, response['next'])
def test_delete_multiple_cluster_by_name(self): obj_utils.create_test_cluster(self.context, name='test_cluster', uuid=uuidutils.generate_uuid()) obj_utils.create_test_cluster(self.context, name='test_cluster', uuid=uuidutils.generate_uuid()) response = self.delete('/clusters/test_cluster', expect_errors=True) self.assertEqual(409, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['errors'])
def test_get_all_with_all_projects(self, mock_context, mock_policy): for id_ in range(4): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, id=id_, uuid=temp_uuid, project_id=id_) self.context.is_admin = True response = self.get_json('/clusters') self.assertEqual(4, len(response['clusters']))
def test_collection_links_default_limit(self): cfg.CONF.set_override('max_limit', 3, 'api') for id_ in range(5): obj_utils.create_test_cluster(self.context, id=id_, uuid=uuidutils.generate_uuid()) response = self.get_json('/clusters') self.assertEqual(3, len(response['clusters'])) next_marker = response['clusters'][-1]['uuid'] self.assertIn(next_marker, response['next'])
def test_update_cluster_as_admin(self, mock_context, mock_policy): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=temp_uuid) self.context.is_admin = True response = self.patch_json('/clusters/%s' % temp_uuid, [{'path': '/node_count', 'value': 4, 'op': 'replace'}]) self.assertEqual('application/json', response.content_type) self.assertEqual(202, response.status_code)
def test_admin_get_all_stats(self, mock_context, mock_policy): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') obj_utils.create_test_cluster(self.context, project_id=234, uuid='uuid2') response = self.get_json('/stats', headers=self.base_headers) expected = {u'clusters': 2, u'nodes': 12} self.assertEqual(expected, response)
def test_get_all_with_all_projects(self, mock_context, mock_policy): for id_ in range(4): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, id=id_, uuid=temp_uuid, project_id=id_) self.context.is_admin = True response = self.get_json('/clusters') self.assertEqual(4, len(response['clusters']))
def test_admin_get_all_stats(self, mock_context, mock_policy): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') obj_utils.create_test_cluster(self.context, project_id=234, uuid='uuid2') response = self.get_json('/stats', headers=self.base_headers) expected = {u'clusters': 2, u'nodes': 12} self.assertEqual(expected, response)
def test_collection_links_default_limit(self): cfg.CONF.set_override('max_limit', 3, 'api') for id_ in range(5): obj_utils.create_test_cluster(self.context, id=id_, uuid=uuidutils.generate_uuid()) response = self.get_json('/clusters') self.assertEqual(3, len(response['clusters'])) next_marker = response['clusters'][-1]['uuid'] self.assertIn(next_marker, response['next'])
def test_links(self): uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, id=1, uuid=uuid) response = self.get_json('/bays/%s' % uuid) self.assertIn('links', response.keys()) self.assertEqual(2, len(response['links'])) self.assertIn(uuid, response['links'][0]['href']) for l in response['links']: bookmark = l['rel'] == 'bookmark' self.assertTrue(self.validate_link(l['href'], bookmark=bookmark))
def test_links(self): uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, id=1, uuid=uuid) response = self.get_json('/bays/%s' % uuid) self.assertIn('links', response.keys()) self.assertEqual(2, len(response['links'])) self.assertIn(uuid, response['links'][0]['href']) for l in response['links']: bookmark = l['rel'] == 'bookmark' self.assertTrue(self.validate_link(l['href'], bookmark=bookmark))
def test_admin_get_invalid_tenant_stats(self, mock_context, mock_policy): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') obj_utils.create_test_cluster(self.context, project_id=234, uuid='uuid2') self.context.is_admin = True response = self.get_json('/stats?project_id=34', headers=self.base_headers) expected = {u'clusters': 0, u'nodes': 0} self.assertEqual(expected, response)
def test_admin_get_invalid_tenant_stats(self, mock_context, mock_policy): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') obj_utils.create_test_cluster(self.context, project_id=234, uuid='uuid2') self.context.is_admin = True response = self.get_json('/stats?project_id=34', headers=self.base_headers) expected = {u'clusters': 0, u'nodes': 0} self.assertEqual(expected, response)
def test_get_one_by_name_multiple_cluster(self): obj_utils.create_test_cluster(self.context, name='test_cluster', uuid=uuidutils.generate_uuid()) obj_utils.create_test_cluster(self.context, name='test_cluster', uuid=uuidutils.generate_uuid()) response = self.get_json('/certificates/test_cluster', expect_errors=True, headers=HEADERS) self.assertEqual(409, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['errors'])
def test_get_one_as_admin(self, mock_context, mock_policy): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=temp_uuid, project_id=temp_uuid) self.context.is_admin = True self.context.all_tenants = True cluster = objects.Cluster.get_by_uuid(self.context, temp_uuid) worker = cluster.default_ng_worker url = '/clusters/%s/nodegroups/%s' % (cluster.uuid, worker.uuid) response = self.get_json(url) self.assertEqual(worker.name, response['name']) self._verify_attrs(self._nodegroup_attrs, response) self._verify_attrs(self._expanded_attrs, response)
def test_delete_nodegroup_as_admin(self, mock_context, mock_policy): cluster_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=cluster_uuid, project_id='fake', name='test-fake') ng_uuid = uuidutils.generate_uuid() obj_utils.create_test_nodegroup(self.context, uuid=ng_uuid, cluster_id=cluster_uuid, is_default=False, project_id='fake', id=50) self.context.is_admin = True url = '/clusters/%s/nodegroups/%s' % (cluster_uuid, ng_uuid) response = self.delete(url) self.assertEqual(204, response.status_int)
def test_get_one_as_admin(self, mock_context, mock_policy): temp_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=temp_uuid, project_id=temp_uuid) self.context.is_admin = True self.context.all_tenants = True cluster = objects.Cluster.get_by_uuid(self.context, temp_uuid) worker = cluster.default_ng_worker url = '/clusters/%s/nodegroups/%s' % (cluster.uuid, worker.uuid) response = self.get_json(url) self.assertEqual(worker.name, response['name']) self._verify_attrs(self._nodegroup_attrs, response) self._verify_attrs(self._expanded_attrs, response)
def test_get_self_stats_without_param(self): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') obj_utils.create_test_cluster(self.context, project_id=234, uuid='uuid2', node_count=5, master_count=1) headers = self.base_headers.copy() headers['X-Project-Id'] = '234' response = self.get_json('/stats', headers=headers) expected = {u'clusters': 1, u'nodes': 6} self.assertEqual(expected, response)
def test_get_some_other_user_stats(self): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') obj_utils.create_test_cluster(self.context, project_id=234, uuid='uuid2', node_count=5) headers = self.base_headers.copy() headers['X-Project-Id'] = '234' self.assertRaises(AppError, self.get_json, '/stats?project_id=123', headers=headers)
def test_get_some_other_user_stats(self): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') obj_utils.create_test_cluster(self.context, project_id=234, uuid='uuid2', node_count=5) headers = self.base_headers.copy() headers['X-Project-Id'] = '234' self.assertRaises(AppError, self.get_json, '/stats?project_id=123', headers=headers)
def test_replace_ok_by_name_multiple_bay(self, mock_utcnow): test_time = datetime.datetime(2000, 1, 1, 0, 0) mock_utcnow.return_value = test_time obj_utils.create_test_cluster(self.context, name='test_bay', uuid=uuidutils.generate_uuid()) obj_utils.create_test_cluster(self.context, name='test_bay', uuid=uuidutils.generate_uuid()) response = self.patch_json('/bays/test_bay', [{'path': '/name', 'value': 'test_bay', 'op': 'replace'}], expect_errors=True) self.assertEqual('application/json', response.content_type) self.assertEqual(409, response.status_code)
def test_get_self_stats_without_param(self): obj_utils.create_test_cluster(self.context, project_id=123, uuid='uuid1') obj_utils.create_test_cluster(self.context, project_id=234, uuid='uuid2', node_count=5, master_count=1) headers = self.base_headers.copy() headers['X-Project-Id'] = '234' response = self.get_json('/stats', headers=headers) expected = {u'clusters': 1, u'nodes': 6} self.assertEqual(expected, response)
def test_replace_ok_by_name_multiple_bay(self, mock_utcnow): test_time = datetime.datetime(2000, 1, 1, 0, 0) mock_utcnow.return_value = test_time obj_utils.create_test_cluster(self.context, name='test_bay', uuid=uuidutils.generate_uuid()) obj_utils.create_test_cluster(self.context, name='test_bay', uuid=uuidutils.generate_uuid()) response = self.patch_json('/bays/test_bay', [{'path': '/name', 'value': 'test_bay', 'op': 'replace'}], expect_errors=True) self.assertEqual('application/json', response.content_type) self.assertEqual(409, response.status_code)
def test_get_one_failed_cluster_heatclient_exception(self, mock_heat): mock_heat.resources.list.side_effect = Exception('fake') cluster = obj_utils.create_test_cluster(self.context, status='CREATE_FAILED') response = self.get_json('/clusters/%s' % cluster['uuid']) self.assertEqual(cluster.uuid, response['uuid']) self.assertEqual({}, response['faults'])
def test_get_one_failed_cluster_heatclient_exception(self, mock_heat): mock_heat.resources.list.side_effect = Exception('fake') cluster = obj_utils.create_test_cluster(self.context, status='CREATE_FAILED') response = self.get_json('/clusters/%s' % cluster['uuid']) self.assertEqual(cluster.uuid, response['uuid']) self.assertEqual({}, response['faults'])
def test_policy_only_owner_delete(self): cluster = obj_utils.create_test_cluster(self.context, user_id='another') self._owner_check("cluster:delete", self.delete, '/clusters/%s' % cluster.uuid, expect_errors=True)
def setUp(self): super(TestClusterUpgrade, self).setUp() self.cluster_template1 = obj_utils.create_test_cluster_template( self.context, uuid='94889766-e686-11e9-81b4-2a2ae2dbcce4', name='test_1', id=1) self.cluster_template2 = obj_utils.create_test_cluster_template( self.context, uuid='94889aa4-e686-11e9-81b4-2a2ae2dbcce4', name='test_2', id=2) self.cluster_obj = obj_utils.create_test_cluster( self.context, name='cluster_example_A', cluster_template_id=self.cluster_template1.uuid) self.nodegroup_obj = obj_utils.create_test_nodegroup( self.context, name='test_ng', cluster_id=self.cluster_obj.uuid, uuid='27e3153e-d5bf-4b7e-b517-fb518e17f34c', project_id=self.cluster_obj.project_id, is_default=False) p = mock.patch.object(rpcapi.API, 'cluster_upgrade') self.mock_cluster_upgrade = p.start() self.mock_cluster_upgrade.side_effect = self._sim_rpc_cluster_upgrade self.addCleanup(p.stop)
def setUp(self): super(TestPost, self).setUp() p = mock.patch.object(rpcapi.API, 'federation_create_async') self.mock_fed_create = p.start() self.mock_fed_create.side_effect = self._simulate_federation_create self.addCleanup(p.stop) self.hostcluster = obj_utils.create_test_cluster(self.context)
def test_policy_disallow_get_one(self): cluster = obj_utils.create_test_cluster(self.context) self._common_policy_check("certificate:get", self.get_json, '/certificates/%s' % cluster.uuid, expect_errors=True, headers=HEADERS)
def test_policy_disallow_create(self): cluster = obj_utils.create_test_cluster(self.context) cert = api_utils.cert_post_data(cluster_uuid=cluster.uuid) self._common_policy_check("certificate:create", self.post_json, '/certificates', cert, expect_errors=True)
def test_policy_disallow_update(self): self.bay = obj_utils.create_test_cluster(self.context, name='bay_example_A', node_count=3) self._common_policy_check( "bay:update", self.patch_json, '/bays/%s' % self.bay.name, [{'path': '/name', 'value': "new_name", 'op': 'replace'}], expect_errors=True)
def test_update_nodegroup_as_admin(self, mock_context, mock_policy): cluster_uuid = uuidutils.generate_uuid() obj_utils.create_test_cluster(self.context, uuid=cluster_uuid, project_id='fake', name='test-fake') ng_uuid = uuidutils.generate_uuid() obj_utils.create_test_nodegroup(self.context, uuid=ng_uuid, cluster_id=cluster_uuid, is_default=False, project_id='fake', id=50) self.context.is_admin = True url = '/clusters/%s/nodegroups/%s' % (cluster_uuid, ng_uuid) response = self.patch_json(url, [{'path': '/max_node_count', 'value': 4, 'op': 'replace'}]) self.assertEqual('application/json', response.content_type) self.assertEqual(202, response.status_code)
def test_policy_disallow_update(self): self.bay = obj_utils.create_test_cluster(self.context, name='bay_example_A', node_count=3) self._common_policy_check( "bay:update", self.patch_json, '/bays/%s' % self.bay.name, [{'path': '/name', 'value': "new_name", 'op': 'replace'}], expect_errors=True)
def test_policy_only_owner_update(self): cluster = obj_utils.create_test_cluster(self.context, user_id='another') self._owner_check( "cluster:update", self.patch_json, '/clusters/%s' % cluster.uuid, [{'path': '/name', 'value': "new_name", 'op': 'replace'}], expect_errors=True)
def test_policy_disallow_rotate(self): cluster = obj_utils.create_test_cluster(self.context) self._common_policy_check("certificate:rotate_ca", self.patch_json, '/certificates/%s' % cluster.uuid, params={}, expect_errors=True, headers=HEADERS)
def setUp(self): super(TestClusterActions, self).setUp() self.cluster_obj = obj_utils.create_test_cluster( self.context, name='cluster_example_A', node_count=3) p = mock.patch.object(rpcapi.API, 'cluster_resize_async') self.mock_cluster_resize = p.start() self.mock_cluster_resize.side_effect = self._sim_rpc_cluster_resize self.addCleanup(p.stop)
def test_policy_only_owner_update(self): cluster = obj_utils.create_test_cluster(self.context, user_id='another') self._owner_check( "cluster:update", self.patch_json, '/clusters/%s' % cluster.uuid, [{'path': '/name', 'value': "new_name", 'op': 'replace'}], expect_errors=True)
def setUp(self): super(TestClusterResize, self).setUp() self.cluster_obj = obj_utils.create_test_cluster( self.context, name='cluster_example_A', node_count=3) p = mock.patch.object(rpcapi.API, 'cluster_resize_async') self.mock_cluster_resize = p.start() self.mock_cluster_resize.side_effect = self._sim_rpc_cluster_resize self.addCleanup(p.stop)
def setUp(self): super(TestDelete, self).setUp() self.cluster_template = obj_utils.create_test_cluster_template( self.context) self.cluster = obj_utils.create_test_cluster(self.context) p = mock.patch.object(rpcapi.API, 'cluster_delete_async') self.mock_cluster_delete = p.start() self.mock_cluster_delete.side_effect = self._simulate_cluster_delete self.addCleanup(p.stop)
def test_one(self): bay = obj_utils.create_test_cluster(self.context) response = self.get_json('/bays') self.assertEqual(bay.uuid, response['bays'][0]["uuid"]) self._verify_attrs(self._bay_attrs, response['bays'][0]) # Verify atts that should not appear from bay's get_all response none_attrs = set(self._expand_bay_attrs) - set(self._bay_attrs) self._verify_attrs(none_attrs, response['bays'][0], positive=False)
def test_policy_disallow_delete(self): p = mock.patch.object(rpcapi.API, 'cluster_delete') self.mock_bay_delete = p.start() self.mock_bay_delete.side_effect = self._simulate_rpc_bay_delete self.addCleanup(p.stop) self.bay = obj_utils.create_test_cluster(self.context) self._common_policy_check( "bay:delete", self.delete, '/bays/%s' % self.bay.uuid, expect_errors=True)
def setUp(self): super(TestGetCertificate, self).setUp() self.cluster = obj_utils.create_test_cluster(self.context) conductor_api_patcher = mock.patch('magnum.conductor.api.API') self.conductor_api_class = conductor_api_patcher.start() self.conductor_api = mock.MagicMock() self.conductor_api_class.return_value = self.conductor_api self.addCleanup(conductor_api_patcher.stop)
def setUp(self): super(TestPatch, self).setUp() self.cluster_template_obj = obj_utils.create_test_cluster_template( self.context) self.cluster_obj = obj_utils.create_test_cluster( self.context, name='cluster_example_A', node_count=3) p = mock.patch.object(rpcapi.API, 'bay_update_async') self.mock_bay_update = p.start() self.mock_bay_update.side_effect = self._simulate_rpc_bay_update self.addCleanup(p.stop)
def test_many(self): bm_list = [] for id_ in range(5): bay = obj_utils.create_test_cluster(self.context, id=id_, uuid=uuidutils.generate_uuid()) bm_list.append(bay.uuid) response = self.get_json('/bays') self.assertEqual(len(bm_list), len(response['bays'])) uuids = [b['uuid'] for b in response['bays']] self.assertEqual(sorted(bm_list), sorted(uuids))
def test_get_all_with_pagination_marker(self): bay_list = [] for id_ in range(4): bay = obj_utils.create_test_cluster(self.context, id=id_, uuid=uuidutils.generate_uuid()) bay_list.append(bay) response = self.get_json('/bays?limit=3&marker=%s' % bay_list[2].uuid) self.assertEqual(1, len(response['bays'])) self.assertEqual(bay_list[-1].uuid, response['bays'][0]['uuid'])
def test_one(self): cluster = obj_utils.create_test_cluster(self.context) response = self.get_json('/clusters') self.assertEqual(cluster.uuid, response['clusters'][0]["uuid"]) self._verify_attrs(self._cluster_attrs, response['clusters'][0]) # Verify attrs do not appear from cluster's get_all response none_attrs = \ set(self._expand_cluster_attrs) - set(self._cluster_attrs) self._verify_attrs(none_attrs, response['clusters'][0], positive=False)
def test_get_one_failed_cluster(self, mock_heat): fake_resources = mock.MagicMock() fake_resources.resource_name = 'fake_name' fake_resources.resource_status_reason = 'fake_reason' ht = mock.MagicMock() ht.resources.list.return_value = [fake_resources] mock_heat.return_value = ht cluster = obj_utils.create_test_cluster(self.context, status='CREATE_FAILED') response = self.get_json('/clusters/%s' % cluster['uuid']) self.assertEqual(cluster.uuid, response['uuid']) self.assertEqual({'fake_name': 'fake_reason'}, response['faults'])