Skip to content

Commit

Permalink
add missing kvs functionality (bug1119770)
Browse files Browse the repository at this point in the history
add list_projects
mod list_groups, list_domains, get_project_users to match sql response
not adding list_user_projects

fix list_projects to return refs
drop get_projects and get_all_projects

Change-Id: Ifa1433918b8770cd7d59f36f71f2e6b935625ae5
  • Loading branch information
Gordon Chung committed Feb 14, 2013
1 parent 901d079 commit 0fb017a
Show file tree
Hide file tree
Showing 10 changed files with 28 additions and 66 deletions.
14 changes: 9 additions & 5 deletions keystone/identity/backends/kvs.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@ def get_project(self, tenant_id):
except exception.NotFound:
raise exception.ProjectNotFound(project_id=tenant_id)

def get_projects(self):
tenant_keys = filter(lambda x: x.startswith("tenant-"), self.db.keys())
def list_projects(self):
tenant_keys = filter(lambda x: x.startswith("tenant-"),
self.db.keys())
return [self.db.get(key) for key in tenant_keys]

def get_project_by_name(self, tenant_name, domain_id):
Expand All @@ -77,7 +78,8 @@ def get_project_users(self, tenant_id):
self.get_project(tenant_id)
user_keys = filter(lambda x: x.startswith("user-"), self.db.keys())
user_refs = [self.db.get(key) for key in user_keys]
return filter(lambda x: tenant_id in x['tenants'], user_refs)
user_refs = filter(lambda x: tenant_id in x['tenants'], user_refs)
return [identity.filter_user(user_ref) for user_ref in user_refs]

def _get_user(self, user_id):
try:
Expand Down Expand Up @@ -539,7 +541,8 @@ def create_domain(self, domain_id, domain):
return domain

def list_domains(self):
return self.db.get('domain_list', [])
domain_ids = self.db.get('domain_list', [])
return [self.get_domain(x) for x in domain_ids]

def get_domain(self, domain_id):
try:
Expand Down Expand Up @@ -580,7 +583,8 @@ def create_group(self, group_id, group):
return group

def list_groups(self):
return self.db.get('group_list', [])
group_ids = self.db.get('group_list', [])
return [self.get_group(x) for x in group_ids]

def get_group(self, group_id):
try:
Expand Down
2 changes: 1 addition & 1 deletion keystone/identity/backends/ldap/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def get_project(self, tenant_id):
except exception.NotFound:
raise exception.ProjectNotFound(project_id=tenant_id)

def get_projects(self):
def list_projects(self):
return self.project.get_all()

def get_project_by_name(self, tenant_name, domain_id):
Expand Down
3 changes: 0 additions & 3 deletions keystone/identity/backends/pam.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,6 @@ def add_user_to_project(self, tenant_id, user_id):
def remove_user_from_project(self, tenant_id, user_id):
pass

def get_all_projects(self):
raise NotImplementedError()

def get_projects_for_user(self, user_id):
return [user_id]

Expand Down
5 changes: 1 addition & 4 deletions keystone/identity/backends/sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,14 +406,11 @@ def remove_user_from_project(self, tenant_id, user_id):
session.delete(membership_ref)
session.flush()

def get_projects(self):
def list_projects(self):
session = self.get_session()
tenant_refs = session.query(Project).all()
return [tenant_ref.to_dict() for tenant_ref in tenant_refs]

def list_projects(self):
return self.get_projects()

def get_projects_for_user(self, user_id):
session = self.get_session()
self.get_user(user_id)
Expand Down
2 changes: 1 addition & 1 deletion keystone/identity/controllers.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def get_all_projects(self, context, **kw):
context, context['query_string'].get('name'))

self.assert_admin(context)
tenant_refs = self.identity_api.get_projects(context)
tenant_refs = self.identity_api.list_projects(context)
for tenant_ref in tenant_refs:
tenant_ref = self._filter_domain_id(tenant_ref)
params = {
Expand Down
25 changes: 10 additions & 15 deletions keystone/identity/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,23 +119,10 @@ def remove_user_from_project(self, tenant_id, user_id):
"""
raise exception.NotImplemented()

def get_all_projects(self):
"""FIXME(dolph): Lists all tenants in the system? I'm not sure how this
is different from get_projects, why get_projects isn't
documented as part of the driver, or why it's called
get_projects instead of list_projects (i.e. list_roles
and list_users)...
:returns: a list of ... FIXME(dolph): tenant_refs or tenant_id's?
"""
raise exception.NotImplemented()

def get_project_users(self, tenant_id):
"""FIXME(dolph): Lists all users with a relationship to the specified
tenant?
"""Lists all users with a relationship to the specified project.
:returns: a list of ... FIXME(dolph): user_refs or user_id's?
:returns: a list of user_refs or an empty set.
:raises: keystone.exception.ProjectNotFound
"""
Expand Down Expand Up @@ -303,6 +290,14 @@ def list_projects(self):
"""
raise exception.NotImplemented()

def list_user_projects(self, user_id):
"""List all projects associated with a given user.
:returns: a list of project_refs or an empty list.
"""
raise exception.NotImplemented()

def get_project(self):
"""Get a project by ID.
Expand Down
6 changes: 0 additions & 6 deletions tests/test_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -1397,12 +1397,6 @@ def test_list_roles(self):
for test_role in default_fixtures.ROLES:
self.assertTrue(x for x in roles if x['id'] == test_role['id'])

def test_get_projects(self):
tenants = self.identity_api.get_projects()
for test_project in default_fixtures.TENANTS:
self.assertTrue(x for x in tenants
if x['id'] == test_project['id'])

def test_delete_project_with_role_assignments(self):
tenant = {'id': uuid.uuid4().hex, 'name': uuid.uuid4().hex,
'domain_id': DEFAULT_DOMAIN_ID}
Expand Down
13 changes: 1 addition & 12 deletions tests/test_backend_kvs.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,7 @@ def setUp(self):
self.load_fixtures(default_fixtures)

def test_list_user_projects(self):
raise nose.exc.SkipTest('Blocked by bug 1119770')

def test_list_projects(self):
raise nose.exc.SkipTest('Blocked by bug 1119770')

def test_list_groups(self):
raise nose.exc.SkipTest('Blocked by bug 1119770')

def test_list_domains(self):
raise nose.exc.SkipTest('Blocked by bug 1119770')

def test_get_project_users(self):
# NOTE(chungg): not implemented
raise nose.exc.SkipTest('Blocked by bug 1119770')


Expand Down
22 changes: 4 additions & 18 deletions tests/test_backend_ldap.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,6 @@ def setUp(self):
self.identity_api = identity_ldap.Identity()
self.load_fixtures(default_fixtures)

def test_role_crud(self):
role = {'id': uuid.uuid4().hex, 'name': uuid.uuid4().hex}
self.identity_api.create_role(role['id'], role)
role_ref = self.identity_api.get_role(role['id'])
role_ref_dict = dict((x, role_ref[x]) for x in role_ref)
self.assertDictEqual(role_ref_dict, role)
self.identity_api.delete_role(role['id'])
self.assertRaises(exception.RoleNotFound,
self.identity_api.get_role,
role['id'])

def test_build_tree(self):
"""Regression test for building the tree names
"""
Expand Down Expand Up @@ -494,16 +483,13 @@ def test_delete_group_with_user_project_domain_links(self):
raise nose.exc.SkipTest('Blocked by bug 1101287')

def test_list_groups(self):
raise nose.exc.SkipTest('Blocked by bug 1122354')
raise nose.exc.SkipTest('Blocked by bug 1092187')

def test_list_domains(self):
raise nose.exc.SkipTest('Blocked by bug 1122354')

def test_list_projects(self):
raise nose.exc.SkipTest('Blocked by bug 1122354')
raise nose.exc.SkipTest('Blocked by bug 1101276')

def test_list_user_projects(self):
raise nose.exc.SkipTest('Blocked by bug 1122354')
raise nose.exc.SkipTest('Blocked by bug 1101287')

def test_get_project_users(self):
raise nose.exc.SkipTest('Blocked by bug 1122354')
raise nose.exc.SkipTest('Blocked by bug 1101287')
2 changes: 1 addition & 1 deletion tests/test_content_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -509,7 +509,7 @@ def test_error_response(self):
def test_invalid_parameter_error_response(self):
token = self.get_scoped_token()
bad_body = {
'OS-KSADM:serviceBAD': {
'OS-KSADM:service%s' % uuid.uuid4().hex: {
'name': uuid.uuid4().hex,
'type': uuid.uuid4().hex,
},
Expand Down

0 comments on commit 0fb017a

Please sign in to comment.