diff --git a/tempest/api/identity/admin/v2/test_tenant_negative.py b/tempest/api/identity/admin/v2/test_tenant_negative.py index 5169daeb1..d1e021733 100644 --- a/tempest/api/identity/admin/v2/test_tenant_negative.py +++ b/tempest/api/identity/admin/v2/test_tenant_negative.py @@ -43,7 +43,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest): def test_tenant_delete_by_unauthorized_user(self): # Non-administrator user should not be able to delete a tenant tenant_name = data_utils.rand_name(name='tenant') - tenant = self.tenants_client.create_tenant(tenant_name)['tenant'] + tenant = self.tenants_client.create_tenant(name=tenant_name)['tenant'] self.data.tenants.append(tenant) self.assertRaises(lib_exc.Forbidden, self.non_admin_tenants_client.delete_tenant, @@ -54,7 +54,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest): def test_tenant_delete_request_without_token(self): # Request to delete a tenant without a valid token should fail tenant_name = data_utils.rand_name(name='tenant') - tenant = self.tenants_client.create_tenant(tenant_name)['tenant'] + tenant = self.tenants_client.create_tenant(name=tenant_name)['tenant'] self.data.tenants.append(tenant) token = self.client.auth_provider.get_token() self.client.delete_token(token) @@ -75,7 +75,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest): def test_tenant_create_duplicate(self): # Tenant names should be unique tenant_name = data_utils.rand_name(name='tenant') - body = self.tenants_client.create_tenant(tenant_name)['tenant'] + body = self.tenants_client.create_tenant(name=tenant_name)['tenant'] tenant = body self.data.tenants.append(tenant) tenant1_id = body.get('id') @@ -83,7 +83,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest): self.addCleanup(self.tenants_client.delete_tenant, tenant1_id) self.addCleanup(self.data.tenants.remove, tenant) self.assertRaises(lib_exc.Conflict, self.tenants_client.create_tenant, - tenant_name) + name=tenant_name) @test.attr(type=['negative']) @test.idempotent_id('d26b278a-6389-4702-8d6e-5980d80137e0') @@ -92,7 +92,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest): tenant_name = data_utils.rand_name(name='tenant') self.assertRaises(lib_exc.Forbidden, self.non_admin_tenants_client.create_tenant, - tenant_name) + name=tenant_name) @test.attr(type=['negative']) @test.idempotent_id('a3ee9d7e-6920-4dd5-9321-d4b2b7f0a638') @@ -103,7 +103,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest): self.client.delete_token(token) self.assertRaises(lib_exc.Unauthorized, self.tenants_client.create_tenant, - tenant_name) + name=tenant_name) self.client.auth_provider.clear_auth() @test.attr(type=['negative']) @@ -121,7 +121,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest): tenant_name = 'a' * 65 self.assertRaises(lib_exc.BadRequest, self.tenants_client.create_tenant, - tenant_name) + name=tenant_name) @test.attr(type=['negative']) @test.idempotent_id('bd20dc2a-9557-4db7-b755-f48d952ad706') @@ -135,7 +135,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest): def test_tenant_update_by_unauthorized_user(self): # Non-administrator user should not be able to update a tenant tenant_name = data_utils.rand_name(name='tenant') - tenant = self.tenants_client.create_tenant(tenant_name)['tenant'] + tenant = self.tenants_client.create_tenant(name=tenant_name)['tenant'] self.data.tenants.append(tenant) self.assertRaises(lib_exc.Forbidden, self.non_admin_tenants_client.update_tenant, @@ -146,7 +146,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest): def test_tenant_update_request_without_token(self): # Request to update a tenant without a valid token should fail tenant_name = data_utils.rand_name(name='tenant') - tenant = self.tenants_client.create_tenant(tenant_name)['tenant'] + tenant = self.tenants_client.create_tenant(name=tenant_name)['tenant'] self.data.tenants.append(tenant) token = self.client.auth_provider.get_token() self.client.delete_token(token) diff --git a/tempest/api/identity/admin/v2/test_tenants.py b/tempest/api/identity/admin/v2/test_tenants.py index 8d0b9b1af..1aa80df55 100644 --- a/tempest/api/identity/admin/v2/test_tenants.py +++ b/tempest/api/identity/admin/v2/test_tenants.py @@ -28,7 +28,8 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): tenants = [] for _ in moves.xrange(3): tenant_name = data_utils.rand_name(name='tenant-new') - tenant = self.tenants_client.create_tenant(tenant_name)['tenant'] + tenant = self.tenants_client.create_tenant( + name=tenant_name)['tenant'] self.data.tenants.append(tenant) tenants.append(tenant) tenant_ids = map(lambda x: x['id'], tenants) @@ -49,7 +50,7 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): # Create tenant with a description tenant_name = data_utils.rand_name(name='tenant') tenant_desc = data_utils.rand_name(name='desc') - body = self.tenants_client.create_tenant(tenant_name, + body = self.tenants_client.create_tenant(name=tenant_name, description=tenant_desc) tenant = body['tenant'] self.data.tenants.append(tenant) @@ -68,7 +69,8 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): def test_tenant_create_enabled(self): # Create a tenant that is enabled tenant_name = data_utils.rand_name(name='tenant') - body = self.tenants_client.create_tenant(tenant_name, enabled=True) + body = self.tenants_client.create_tenant(name=tenant_name, + enabled=True) tenant = body['tenant'] self.data.tenants.append(tenant) tenant_id = tenant['id'] @@ -84,7 +86,8 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): def test_tenant_create_not_enabled(self): # Create a tenant that is not enabled tenant_name = data_utils.rand_name(name='tenant') - body = self.tenants_client.create_tenant(tenant_name, enabled=False) + body = self.tenants_client.create_tenant(name=tenant_name, + enabled=False) tenant = body['tenant'] self.data.tenants.append(tenant) tenant_id = tenant['id'] @@ -102,7 +105,7 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): def test_tenant_update_name(self): # Update name attribute of a tenant t_name1 = data_utils.rand_name(name='tenant') - body = self.tenants_client.create_tenant(t_name1)['tenant'] + body = self.tenants_client.create_tenant(name=t_name1)['tenant'] tenant = body self.data.tenants.append(tenant) @@ -129,7 +132,8 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): # Update description attribute of a tenant t_name = data_utils.rand_name(name='tenant') t_desc = data_utils.rand_name(name='desc') - body = self.tenants_client.create_tenant(t_name, description=t_desc) + body = self.tenants_client.create_tenant(name=t_name, + description=t_desc) tenant = body['tenant'] self.data.tenants.append(tenant) @@ -157,7 +161,7 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): # Update the enabled attribute of a tenant t_name = data_utils.rand_name(name='tenant') t_en = False - body = self.tenants_client.create_tenant(t_name, enabled=t_en) + body = self.tenants_client.create_tenant(name=t_name, enabled=t_en) tenant = body['tenant'] self.data.tenants.append(tenant) diff --git a/tempest/api/identity/admin/v2/test_tokens.py b/tempest/api/identity/admin/v2/test_tokens.py index 2297a9de8..167512658 100644 --- a/tempest/api/identity/admin/v2/test_tokens.py +++ b/tempest/api/identity/admin/v2/test_tokens.py @@ -27,7 +27,7 @@ class TokensTestJSON(base.BaseIdentityV2AdminTest): user_password = data_utils.rand_password() # first:create a tenant tenant_name = data_utils.rand_name(name='tenant') - tenant = self.tenants_client.create_tenant(tenant_name)['tenant'] + tenant = self.tenants_client.create_tenant(name=tenant_name)['tenant'] self.data.tenants.append(tenant) # second:create a user user = self.users_client.create_user(name=user_name, @@ -72,11 +72,13 @@ class TokensTestJSON(base.BaseIdentityV2AdminTest): # Create a couple tenants. tenant1_name = data_utils.rand_name(name='tenant') - tenant1 = self.tenants_client.create_tenant(tenant1_name)['tenant'] + tenant1 = self.tenants_client.create_tenant( + name=tenant1_name)['tenant'] self.data.tenants.append(tenant1) tenant2_name = data_utils.rand_name(name='tenant') - tenant2 = self.tenants_client.create_tenant(tenant2_name)['tenant'] + tenant2 = self.tenants_client.create_tenant( + name=tenant2_name)['tenant'] self.data.tenants.append(tenant2) # Create a role diff --git a/tempest/cmd/javelin.py b/tempest/cmd/javelin.py index 7ce62250f..3d57c3574 100755 --- a/tempest/cmd/javelin.py +++ b/tempest/cmd/javelin.py @@ -319,7 +319,7 @@ def create_tenants(tenants): existing = [x['name'] for x in body] for tenant in tenants: if tenant not in existing: - admin.tenants.create_tenant(tenant)['tenant'] + admin.tenants.create_tenant(name=tenant)['tenant'] else: LOG.warning("Tenant '%s' already exists in this environment" % tenant) diff --git a/tempest/services/identity/v2/json/tenants_client.py b/tempest/services/identity/v2/json/tenants_client.py index 97e5c1114..77ddaa5d3 100644 --- a/tempest/services/identity/v2/json/tenants_client.py +++ b/tempest/services/identity/v2/json/tenants_client.py @@ -13,6 +13,7 @@ # limitations under the License. from oslo_serialization import jsonutils as json +from six.moves.urllib import parse as urllib from tempest.lib.common import rest_client @@ -20,40 +21,50 @@ from tempest.lib.common import rest_client class TenantsClient(rest_client.RestClient): api_version = "v2.0" - def create_tenant(self, name, **kwargs): + def create_tenant(self, **kwargs): """Create a tenant - name (required): New tenant name - description: Description of new tenant (default is none) - enabled : Initial tenant status (default is true) + Available params: see http://developer.openstack.org/ + api-ref-identity-v2-ext.html#createTenant """ - post_body = { - 'name': name, - 'description': kwargs.get('description', ''), - 'enabled': kwargs.get('enabled', True), - } - post_body = json.dumps({'tenant': post_body}) + post_body = json.dumps({'tenant': kwargs}) resp, body = self.post('tenants', post_body) self.expected_success(200, resp.status) body = json.loads(body) return rest_client.ResponseBody(resp, body) def delete_tenant(self, tenant_id): - """Delete a tenant.""" + """Delete a tenant. + + Available params: see http://developer.openstack.org/ + api-ref-identity-v2-ext.html#deleteTenant + """ resp, body = self.delete('tenants/%s' % str(tenant_id)) self.expected_success(204, resp.status) return rest_client.ResponseBody(resp, body) def show_tenant(self, tenant_id): - """Get tenant details.""" + """Get tenant details. + + Available params: see + http://developer.openstack.org/ + api-ref-identity-v2-ext.html#admin-showTenantById + """ resp, body = self.get('tenants/%s' % str(tenant_id)) self.expected_success(200, resp.status) body = json.loads(body) return rest_client.ResponseBody(resp, body) - def list_tenants(self): - """Returns tenants.""" - resp, body = self.get('tenants') + def list_tenants(self, **params): + """Returns tenants. + + Available params: see http://developer.openstack.org/ + api-ref-identity-v2-ext.html#admin-listTenants + """ + url = 'tenants' + if params: + url += '?%s' % urllib.urlencode(params) + resp, body = self.get(url) self.expected_success(200, resp.status) body = json.loads(body) return rest_client.ResponseBody(resp, body) @@ -64,25 +75,24 @@ class TenantsClient(rest_client.RestClient): Available params: see http://developer.openstack.org/ api-ref-identity-v2-ext.html#updateTenant """ - body = self.show_tenant(tenant_id)['tenant'] - name = kwargs.get('name', body['name']) - desc = kwargs.get('description', body['description']) - en = kwargs.get('enabled', body['enabled']) - post_body = { - 'id': tenant_id, - 'name': name, - 'description': desc, - 'enabled': en, - } - post_body = json.dumps({'tenant': post_body}) + if 'id' not in kwargs: + kwargs['id'] = tenant_id + post_body = json.dumps({'tenant': kwargs}) resp, body = self.post('tenants/%s' % tenant_id, post_body) self.expected_success(200, resp.status) body = json.loads(body) return rest_client.ResponseBody(resp, body) - def list_tenant_users(self, tenant_id): - """List users for a Tenant.""" - resp, body = self.get('/tenants/%s/users' % tenant_id) + def list_tenant_users(self, tenant_id, **params): + """List users for a Tenant. + + Available params: see http://developer.openstack.org/ + api-ref-identity-v2-ext.html#listUsersForTenant + """ + url = '/tenants/%s/users' % tenant_id + if params: + url += '?%s' % urllib.urlencode(params) + resp, body = self.get(url) self.expected_success(200, resp.status) body = json.loads(body) return rest_client.ResponseBody(resp, body) diff --git a/tempest/tests/cmd/test_javelin.py b/tempest/tests/cmd/test_javelin.py index 50660ff9e..5ec9720c1 100644 --- a/tempest/tests/cmd/test_javelin.py +++ b/tempest/tests/cmd/test_javelin.py @@ -92,7 +92,7 @@ class TestCreateResources(JavelinUnitTest): javelin.create_tenants([self.fake_object['name']]) mocked_function = self.fake_client.tenants.create_tenant - mocked_function.assert_called_once_with(self.fake_object['name']) + mocked_function.assert_called_once_with(name=self.fake_object['name']) def test_create_duplicate_tenant(self): self.fake_client.tenants.list_tenants.return_value = {'tenants': [