blob: 37ce266c4e5b056c3dc7b955b7a68c68cab04a24 [file] [log] [blame]
Zhi Kun Liue8136f02014-01-07 18:56:28 +08001# Copyright 2013 IBM Corp.
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
16from tempest.api.identity import base
Leticia Wanderley9cafd3d2017-08-04 00:22:34 -030017from tempest import config
Ken'ichi Ohmichi7bd25752017-03-10 10:45:39 -080018from tempest.lib.common.utils import data_utils
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080019from tempest.lib import decorators
Zhi Kun Liue8136f02014-01-07 18:56:28 +080020
Leticia Wanderley9cafd3d2017-08-04 00:22:34 -030021CONF = config.CONF
22
Zhi Kun Liue8136f02014-01-07 18:56:28 +080023
Matthew Treinishdb2c5972014-01-31 22:18:59 +000024class GroupsV3TestJSON(base.BaseIdentityV3AdminTest):
Zhi Kun Liue8136f02014-01-07 18:56:28 +080025
Steve Martinellibdc16bf2016-03-21 16:12:14 -040026 @classmethod
27 def resource_setup(cls):
28 super(GroupsV3TestJSON, cls).resource_setup()
Castulo J. Martinez19b81b22016-07-15 08:58:25 -070029 cls.domain = cls.create_domain()
30
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080031 @decorators.idempotent_id('2e80343b-6c81-4ac3-88c7-452f3e9d5129')
Zhi Kun Liue8136f02014-01-07 18:56:28 +080032 def test_group_create_update_get(self):
Felipe Monteiro59723622018-07-03 14:18:49 -040033 # Verify group creation works.
Zhi Kun Liue8136f02014-01-07 18:56:28 +080034 name = data_utils.rand_name('Group')
35 description = data_utils.rand_name('Description')
Felipe Monteirod4415072018-07-03 14:09:02 -040036 group = self.setup_test_group(name=name, domain_id=self.domain['id'],
37 description=description)
Zhi Kun Liue8136f02014-01-07 18:56:28 +080038 self.assertEqual(group['name'], name)
39 self.assertEqual(group['description'], description)
Felipe Monteiro59723622018-07-03 14:18:49 -040040 self.assertEqual(self.domain['id'], group['domain_id'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +080041
Felipe Monteiro59723622018-07-03 14:18:49 -040042 # Verify updating name and description works.
43 first_name_update = data_utils.rand_name('UpdateGroup')
44 first_desc_update = data_utils.rand_name('UpdateDescription')
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030045 updated_group = self.groups_client.update_group(
Felipe Monteiro59723622018-07-03 14:18:49 -040046 group['id'], name=first_name_update,
47 description=first_desc_update)['group']
48 self.assertEqual(updated_group['name'], first_name_update)
49 self.assertEqual(updated_group['description'], first_desc_update)
Zhi Kun Liue8136f02014-01-07 18:56:28 +080050
Felipe Monteiro59723622018-07-03 14:18:49 -040051 # Verify that the updated values are reflected after performing show.
Yaroslav Lobankov937438c2015-11-20 11:21:11 +030052 new_group = self.groups_client.show_group(group['id'])['group']
Zhi Kun Liue8136f02014-01-07 18:56:28 +080053 self.assertEqual(group['id'], new_group['id'])
Felipe Monteiro59723622018-07-03 14:18:49 -040054 self.assertEqual(first_name_update, new_group['name'])
55 self.assertEqual(first_desc_update, new_group['description'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +080056
Felipe Monteiro59723622018-07-03 14:18:49 -040057 # Verify that updating a single field for a group (name) leaves the
58 # other fields (description, domain_id) unchanged.
59 second_name_update = data_utils.rand_name(
60 self.__class__.__name__ + 'UpdateGroup')
ghanshyamd48cd7b2015-11-26 19:53:57 +090061 updated_group = self.groups_client.update_group(
Felipe Monteiro59723622018-07-03 14:18:49 -040062 group['id'], name=second_name_update)['group']
63 self.assertEqual(second_name_update, updated_group['name'])
64 # Verify that 'description' and 'domain_id' were not updated or
65 # deleted.
66 self.assertEqual(first_desc_update, updated_group['description'])
67 self.assertEqual(self.domain['id'], updated_group['domain_id'])
ghanshyamd48cd7b2015-11-26 19:53:57 +090068
Jordan Pittier3b46d272017-04-12 16:17:28 +020069 @decorators.attr(type='smoke')
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080070 @decorators.idempotent_id('1598521a-2f36-4606-8df9-30772bd51339')
Zhi Kun Liue8136f02014-01-07 18:56:28 +080071 def test_group_users_add_list_delete(self):
Felipe Monteirod4415072018-07-03 14:09:02 -040072 group = self.setup_test_group(domain_id=self.domain['id'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +080073 # add user into group
74 users = []
zhufl8e9a0732017-01-26 16:15:21 +080075 for _ in range(3):
zhufl75d51a92017-04-11 16:02:39 +080076 user = self.create_test_user()
Zhi Kun Liue8136f02014-01-07 18:56:28 +080077 users.append(user)
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030078 self.groups_client.add_group_user(group['id'], user['id'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +080079
80 # list users in group
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030081 group_users = self.groups_client.list_group_users(group['id'])['users']
Sirushti Murugesan12dc9732016-07-13 22:49:17 +053082 self.assertEqual(sorted(users, key=lambda k: k['name']),
83 sorted(group_users, key=lambda k: k['name']))
Maho Koshiyab6fa2e42015-12-07 16:52:53 +090084 # check and delete user in group
Zhi Kun Liue8136f02014-01-07 18:56:28 +080085 for user in users:
Maho Koshiyab6fa2e42015-12-07 16:52:53 +090086 self.groups_client.check_group_user_existence(
87 group['id'], user['id'])
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030088 self.groups_client.delete_group_user(group['id'], user['id'])
89 group_users = self.groups_client.list_group_users(group['id'])['users']
Zhi Kun Liue8136f02014-01-07 18:56:28 +080090 self.assertEqual(len(group_users), 0)
91
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080092 @decorators.idempotent_id('64573281-d26a-4a52-b899-503cb0f4e4ec')
wanglianmin29b0f4c2014-03-06 19:09:16 +080093 def test_list_user_groups(self):
94 # create a user
zhufl75d51a92017-04-11 16:02:39 +080095 user = self.create_test_user()
wanglianmin29b0f4c2014-03-06 19:09:16 +080096 # create two groups, and add user into them
97 groups = []
zhufl8e9a0732017-01-26 16:15:21 +080098 for _ in range(2):
Felipe Monteirod4415072018-07-03 14:09:02 -040099 group = self.setup_test_group(domain_id=self.domain['id'])
wanglianmin29b0f4c2014-03-06 19:09:16 +0800100 groups.append(group)
Yaroslav Lobankov997a1452015-11-19 17:11:37 +0300101 self.groups_client.add_group_user(group['id'], user['id'])
wanglianmin29b0f4c2014-03-06 19:09:16 +0800102 # list groups which user belongs to
Daniel Mellado7aea5342016-02-09 09:10:12 +0000103 user_groups = self.users_client.list_user_groups(user['id'])['groups']
Sirushti Murugesan12dc9732016-07-13 22:49:17 +0530104 self.assertEqual(sorted(groups, key=lambda k: k['name']),
105 sorted(user_groups, key=lambda k: k['name']))
wanglianmin29b0f4c2014-03-06 19:09:16 +0800106 self.assertEqual(2, len(user_groups))
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000107
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800108 @decorators.idempotent_id('cc9a57a5-a9ed-4f2d-a29f-4f979a06ec71')
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000109 def test_list_groups(self):
110 # Test to list groups
111 group_ids = list()
112 fetched_ids = list()
113 for _ in range(3):
Felipe Monteirod4415072018-07-03 14:09:02 -0400114 group = self.setup_test_group(domain_id=self.domain['id'])
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000115 group_ids.append(group['id'])
116 # List and Verify Groups
Leticia Wanderley9cafd3d2017-08-04 00:22:34 -0300117 # When domain specific drivers are enabled the operations
118 # of listing all users and listing all groups are not supported,
119 # they need a domain filter to be specified
120 if CONF.identity_feature_enabled.domain_specific_drivers:
121 body = self.groups_client.list_groups(
122 domain_id=self.domain['id'])['groups']
123 else:
124 body = self.groups_client.list_groups()['groups']
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000125 for g in body:
126 fetched_ids.append(g['id'])
127 missing_groups = [g for g in group_ids if g not in fetched_ids]
jeremy.zhang48b235f2017-05-16 14:53:05 +0800128 self.assertEmpty(missing_groups)