Add list user groups api to identity v3
Identity v3 lack of list user groups, so I do the addition.
To test the addition, I add a test :
- test_list_user_groups
Change-Id: I5924b7c6c9dfe61cb4089ad9a09d2da0c0bd18c4
diff --git a/tempest/api/identity/admin/v3/test_groups.py b/tempest/api/identity/admin/v3/test_groups.py
index 6e898b2..056f713 100644
--- a/tempest/api/identity/admin/v3/test_groups.py
+++ b/tempest/api/identity/admin/v3/test_groups.py
@@ -68,7 +68,7 @@
# list users in group
resp, group_users = self.client.list_group_users(group['id'])
self.assertEqual(resp['status'], '200')
- self.assertEqual(users.sort(), group_users.sort())
+ self.assertEqual(sorted(users), sorted(group_users))
# delete user in group
for user in users:
resp, body = self.client.delete_group_user(group['id'],
@@ -77,6 +77,27 @@
resp, group_users = self.client.list_group_users(group['id'])
self.assertEqual(len(group_users), 0)
+ @test.attr(type='smoke')
+ def test_list_user_groups(self):
+ # create a user
+ resp, user = self.client.create_user(
+ data_utils.rand_name('User-'),
+ password=data_utils.rand_name('Pass-'))
+ self.addCleanup(self.client.delete_user, user['id'])
+ # create two groups, and add user into them
+ groups = []
+ for i in range(2):
+ name = data_utils.rand_name('Group-')
+ resp, group = self.client.create_group(name)
+ groups.append(group)
+ self.addCleanup(self.client.delete_group, group['id'])
+ self.client.add_group_user(group['id'], user['id'])
+ # list groups which user belongs to
+ resp, user_groups = self.client.list_user_groups(user['id'])
+ self.assertEqual('200', resp['status'])
+ self.assertEqual(sorted(groups), sorted(user_groups))
+ self.assertEqual(2, len(user_groups))
+
class GroupsV3TestXML(GroupsV3TestJSON):
_interface = 'xml'
diff --git a/tempest/services/identity/v3/json/identity_client.py b/tempest/services/identity/v3/json/identity_client.py
index 65f3355..285feb3 100644
--- a/tempest/services/identity/v3/json/identity_client.py
+++ b/tempest/services/identity/v3/json/identity_client.py
@@ -297,6 +297,12 @@
body = json.loads(body)
return resp, body['users']
+ def list_user_groups(self, user_id):
+ """Lists groups which a user belongs to."""
+ resp, body = self.get('users/%s/groups' % user_id)
+ body = json.loads(body)
+ return resp, body['groups']
+
def delete_group_user(self, group_id, user_id):
"""Delete user in group."""
resp, body = self.delete('groups/%s/users/%s' % (group_id, user_id))
diff --git a/tempest/services/identity/v3/xml/identity_client.py b/tempest/services/identity/v3/xml/identity_client.py
index 6ff6d56..d6c5bc1 100644
--- a/tempest/services/identity/v3/xml/identity_client.py
+++ b/tempest/services/identity/v3/xml/identity_client.py
@@ -52,6 +52,14 @@
array.append(common.xml_to_json(child))
return array
+ def _parse_groups(self, node):
+ array = []
+ for child in node.getchildren():
+ tag_list = child.tag.split('}', 1)
+ if tag_list[1] == "group":
+ array.append(common.xml_to_json(child))
+ return array
+
def _parse_group_users(self, node):
array = []
for child in node.getchildren():
@@ -342,6 +350,12 @@
body = self._parse_group_users(etree.fromstring(body))
return resp, body
+ def list_user_groups(self, user_id):
+ """Lists the groups which a user belongs to."""
+ resp, body = self.get('users/%s/groups' % user_id)
+ body = self._parse_groups(etree.fromstring(body))
+ return resp, body
+
def delete_group_user(self, group_id, user_id):
"""Delete user in group."""
resp, body = self.delete('groups/%s/users/%s' % (group_id, user_id))