From 47c057afd5e558c79764a2c742d5c29a6a048a5b Mon Sep 17 00:00:00 2001 From: Dean Troyer Date: Mon, 20 Feb 2012 10:57:06 -0600 Subject: [PATCH] Fix inconsistient method names and add tests Fixes bug 937104 https://review.openstack.org/3527 renamed methods in RoleManager: get_user_role_refs() -> roles_for_user() add_user_to_tenant() -> add_user_role() remove_user_from_tenant() -> remove_user_role() * Calls to old method names in Tenant and TenantManager are fixed. * Add tests for all renamed and affected methods. Change-Id: Idf569d7dd737c5ccc38b4ea8212d5336998ae0f1 --- keystoneclient/v2_0/roles.py | 2 +- keystoneclient/v2_0/tenants.py | 24 ++++----- tests/v2_0/test_roles.py | 94 ++++++++++++++++++++++++++++++++++ tests/v2_0/test_tenants.py | 78 ++++++++++++++++++++++++++++ 4 files changed, 185 insertions(+), 13 deletions(-) diff --git a/keystoneclient/v2_0/roles.py b/keystoneclient/v2_0/roles.py index 492562be5..aed2b2775 100644 --- a/keystoneclient/v2_0/roles.py +++ b/keystoneclient/v2_0/roles.py @@ -89,4 +89,4 @@ class RoleManager(base.ManagerWithFind): return self._delete(route % params) else: route = "/users/%s/roles/OS-KSADM/%s" - return self._delete(route % (user_id, role_id), "roles") + return self._delete(route % (user_id, role_id)) diff --git a/keystoneclient/v2_0/tenants.py b/keystoneclient/v2_0/tenants.py index 4d2a900ea..4ab1ee63d 100644 --- a/keystoneclient/v2_0/tenants.py +++ b/keystoneclient/v2_0/tenants.py @@ -42,14 +42,14 @@ class Tenant(base.Resource): return retval def add_user(self, user, role): - return self.manager.api.roles.add_user_to_tenant(self.id, - base.getid(user), - base.getid(role)) + return self.manager.api.roles.add_user_role(base.getid(user), + base.getid(role), + self.id) def remove_user(self, user, role): - return self.manager.api.roles.remove_user_from_tenant(self.id, - base.getid(user), - base.getid(role)) + return self.manager.api.roles.remove_user_role(base.getid(user), + base.getid(role), + self.id) def list_users(self): return self.manager.list_users(self.id) @@ -116,12 +116,12 @@ class TenantManager(base.ManagerWithFind): def add_user(self, tenant, user, role): """ Add a user to a tenant with the given role. """ - return self.api.roles.add_user_to_tenant(base.getid(tenant), - base.getid(user), - base.getid(role)) + return self.api.roles.add_user_role(base.getid(user), + base.getid(role), + base.getid(tenant)) def remove_user(self, tenant, user, role): """ Remove the specified role from the user on the tenant. """ - return self.api.roles.remove_user_from_tenant(base.getid(tenant), - base.getid(user), - base.getid(role)) + return self.api.roles.remove_user_role(base.getid(user), + base.getid(role), + base.getid(tenant)) diff --git a/tests/v2_0/test_roles.py b/tests/v2_0/test_roles.py index f051243f6..3f9419156 100644 --- a/tests/v2_0/test_roles.py +++ b/tests/v2_0/test_roles.py @@ -98,3 +98,97 @@ class RoleTests(utils.TestCase): role_list = self.client.roles.list() [self.assertTrue(isinstance(r, roles.Role)) for r in role_list] + + def test_roles_for_user(self): + resp = httplib2.Response({ + "status": 200, + "body": json.dumps(self.TEST_ROLES), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/users/foo/roles?fresh=1234'), + 'GET', + headers=self.TEST_REQUEST_HEADERS) \ + .AndReturn((resp, resp['body'])) + self.mox.ReplayAll() + + role_list = self.client.roles.roles_for_user('foo') + [self.assertTrue(isinstance(r, roles.Role)) for r in role_list] + + def test_roles_for_user_tenant(self): + resp = httplib2.Response({ + "status": 200, + "body": json.dumps(self.TEST_ROLES), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/tenants/barrr/users/foo/roles?fresh=1234'), + 'GET', + headers=self.TEST_REQUEST_HEADERS) \ + .AndReturn((resp, resp['body'])) + self.mox.ReplayAll() + + role_list = self.client.roles.roles_for_user('foo', 'barrr') + [self.assertTrue(isinstance(r, roles.Role)) for r in role_list] + + def test_add_user_role(self): + resp = httplib2.Response({ + "status": 200, + "body": json.dumps({}), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/users/foo/roles/OS-KSADM/barrr'), + 'PUT', + body='null', + headers=self.TEST_POST_HEADERS) \ + .AndReturn((resp, None)) + self.mox.ReplayAll() + + self.client.roles.add_user_role('foo', 'barrr') + + def test_add_user_role_tenant(self): + resp = httplib2.Response({ + "status": 200, + "body": json.dumps({}), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/tenants/4/users/foo/roles/OS-KSADM/barrr'), + 'PUT', + body='null', + headers=self.TEST_POST_HEADERS) \ + .AndReturn((resp, None)) + self.mox.ReplayAll() + + self.client.roles.add_user_role('foo', 'barrr', '4') + + def test_remove_user_role(self): + resp = httplib2.Response({ + "status": 200, + "body": json.dumps({}), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/users/foo/roles/OS-KSADM/barrr'), + 'DELETE', + headers=self.TEST_REQUEST_HEADERS) \ + .AndReturn((resp, None)) + self.mox.ReplayAll() + + self.client.roles.remove_user_role('foo', 'barrr') + + def test_remove_user_role_tenant(self): + resp = httplib2.Response({ + "status": 200, + "body": json.dumps({}), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/tenants/4/users/foo/roles/OS-KSADM/barrr'), + 'DELETE', + headers=self.TEST_REQUEST_HEADERS) \ + .AndReturn((resp, None)) + self.mox.ReplayAll() + + self.client.roles.remove_user_role('foo', 'barrr', '4') diff --git a/tests/v2_0/test_tenants.py b/tests/v2_0/test_tenants.py index a8e7add82..44dd9f1b6 100644 --- a/tests/v2_0/test_tenants.py +++ b/tests/v2_0/test_tenants.py @@ -195,3 +195,81 @@ class TenantTests(utils.TestCase): self.assertEqual(tenant.name, "tenantX") self.assertEqual(tenant.description, "I changed you!") self.assertFalse(tenant.enabled) + + def test_add_user(self): + resp = httplib2.Response({ + "status": 200, + "body": json.dumps({}), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/tenants/4/users/foo/roles/OS-KSADM/barrr'), + 'PUT', + body='null', + headers=self.TEST_POST_HEADERS) \ + .AndReturn((resp, None)) + self.mox.ReplayAll() + + self.client.tenants.add_user('4', 'foo', 'barrr') + + def test_remove_user(self): + resp = httplib2.Response({ + "status": 200, + "body": json.dumps({}), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/tenants/4/users/foo/roles/OS-KSADM/barrr'), + 'DELETE', + headers=self.TEST_REQUEST_HEADERS) \ + .AndReturn((resp, None)) + self.mox.ReplayAll() + + self.client.tenants.remove_user('4', 'foo', 'barrr') + + def test_tenant_add_user(self): + req_body = {"tenant": {"id": 4, + "name": "tenantX", + "description": "I changed you!", + "enabled": False}} + resp = httplib2.Response({ + "status": 200, + "body": json.dumps({}), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/tenants/4/users/foo/roles/OS-KSADM/barrr'), + 'PUT', + body='null', + headers=self.TEST_POST_HEADERS) \ + .AndReturn((resp, None)) + self.mox.ReplayAll() + + # make tenant object with manager + tenant = self.client.tenants.resource_class(self.client.tenants, + req_body['tenant']) + tenant.add_user('foo', 'barrr') + self.assertTrue(isinstance(tenant, tenants.Tenant)) + + def test_tenant_remove_user(self): + req_body = {"tenant": {"id": 4, + "name": "tenantX", + "description": "I changed you!", + "enabled": False}} + resp = httplib2.Response({ + "status": 200, + "body": json.dumps({}), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/tenants/4/users/foo/roles/OS-KSADM/barrr'), + 'DELETE', + headers=self.TEST_REQUEST_HEADERS) \ + .AndReturn((resp, None)) + self.mox.ReplayAll() + + # make tenant object with manager + tenant = self.client.tenants.resource_class(self.client.tenants, + req_body['tenant']) + tenant.remove_user('foo', 'barrr') + self.assertTrue(isinstance(tenant, tenants.Tenant))