Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 1 | # 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 | |
| 16 | from tempest.api.identity import base |
Leticia Wanderley | 9cafd3d | 2017-08-04 00:22:34 -0300 | [diff] [blame] | 17 | from tempest import config |
Ken'ichi Ohmichi | 7bd2575 | 2017-03-10 10:45:39 -0800 | [diff] [blame] | 18 | from tempest.lib.common.utils import data_utils |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 19 | from tempest.lib import decorators |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 20 | |
Leticia Wanderley | 9cafd3d | 2017-08-04 00:22:34 -0300 | [diff] [blame] | 21 | CONF = config.CONF |
| 22 | |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 23 | |
Matthew Treinish | db2c597 | 2014-01-31 22:18:59 +0000 | [diff] [blame] | 24 | class GroupsV3TestJSON(base.BaseIdentityV3AdminTest): |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 25 | |
Steve Martinelli | bdc16bf | 2016-03-21 16:12:14 -0400 | [diff] [blame] | 26 | @classmethod |
| 27 | def resource_setup(cls): |
| 28 | super(GroupsV3TestJSON, cls).resource_setup() |
Castulo J. Martinez | 19b81b2 | 2016-07-15 08:58:25 -0700 | [diff] [blame] | 29 | cls.domain = cls.create_domain() |
| 30 | |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 31 | @decorators.idempotent_id('2e80343b-6c81-4ac3-88c7-452f3e9d5129') |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 32 | def test_group_create_update_get(self): |
Felipe Monteiro | 5972362 | 2018-07-03 14:18:49 -0400 | [diff] [blame] | 33 | # Verify group creation works. |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 34 | name = data_utils.rand_name('Group') |
| 35 | description = data_utils.rand_name('Description') |
Felipe Monteiro | d441507 | 2018-07-03 14:09:02 -0400 | [diff] [blame] | 36 | group = self.setup_test_group(name=name, domain_id=self.domain['id'], |
| 37 | description=description) |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 38 | self.assertEqual(group['name'], name) |
| 39 | self.assertEqual(group['description'], description) |
Felipe Monteiro | 5972362 | 2018-07-03 14:18:49 -0400 | [diff] [blame] | 40 | self.assertEqual(self.domain['id'], group['domain_id']) |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 41 | |
Felipe Monteiro | 5972362 | 2018-07-03 14:18:49 -0400 | [diff] [blame] | 42 | # 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 Lobankov | 997a145 | 2015-11-19 17:11:37 +0300 | [diff] [blame] | 45 | updated_group = self.groups_client.update_group( |
Felipe Monteiro | 5972362 | 2018-07-03 14:18:49 -0400 | [diff] [blame] | 46 | 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 Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 50 | |
Felipe Monteiro | 5972362 | 2018-07-03 14:18:49 -0400 | [diff] [blame] | 51 | # Verify that the updated values are reflected after performing show. |
Yaroslav Lobankov | 937438c | 2015-11-20 11:21:11 +0300 | [diff] [blame] | 52 | new_group = self.groups_client.show_group(group['id'])['group'] |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 53 | self.assertEqual(group['id'], new_group['id']) |
Felipe Monteiro | 5972362 | 2018-07-03 14:18:49 -0400 | [diff] [blame] | 54 | self.assertEqual(first_name_update, new_group['name']) |
| 55 | self.assertEqual(first_desc_update, new_group['description']) |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 56 | |
Felipe Monteiro | 5972362 | 2018-07-03 14:18:49 -0400 | [diff] [blame] | 57 | # 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') |
ghanshyam | d48cd7b | 2015-11-26 19:53:57 +0900 | [diff] [blame] | 61 | updated_group = self.groups_client.update_group( |
Felipe Monteiro | 5972362 | 2018-07-03 14:18:49 -0400 | [diff] [blame] | 62 | 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']) |
ghanshyam | d48cd7b | 2015-11-26 19:53:57 +0900 | [diff] [blame] | 68 | |
Jordan Pittier | 3b46d27 | 2017-04-12 16:17:28 +0200 | [diff] [blame] | 69 | @decorators.attr(type='smoke') |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 70 | @decorators.idempotent_id('1598521a-2f36-4606-8df9-30772bd51339') |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 71 | def test_group_users_add_list_delete(self): |
Felipe Monteiro | d441507 | 2018-07-03 14:09:02 -0400 | [diff] [blame] | 72 | group = self.setup_test_group(domain_id=self.domain['id']) |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 73 | # add user into group |
| 74 | users = [] |
zhufl | 8e9a073 | 2017-01-26 16:15:21 +0800 | [diff] [blame] | 75 | for _ in range(3): |
zhufl | 75d51a9 | 2017-04-11 16:02:39 +0800 | [diff] [blame] | 76 | user = self.create_test_user() |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 77 | users.append(user) |
Yaroslav Lobankov | 997a145 | 2015-11-19 17:11:37 +0300 | [diff] [blame] | 78 | self.groups_client.add_group_user(group['id'], user['id']) |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 79 | |
| 80 | # list users in group |
Yaroslav Lobankov | 997a145 | 2015-11-19 17:11:37 +0300 | [diff] [blame] | 81 | group_users = self.groups_client.list_group_users(group['id'])['users'] |
Sirushti Murugesan | 12dc973 | 2016-07-13 22:49:17 +0530 | [diff] [blame] | 82 | self.assertEqual(sorted(users, key=lambda k: k['name']), |
| 83 | sorted(group_users, key=lambda k: k['name'])) |
Maho Koshiya | b6fa2e4 | 2015-12-07 16:52:53 +0900 | [diff] [blame] | 84 | # check and delete user in group |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 85 | for user in users: |
Maho Koshiya | b6fa2e4 | 2015-12-07 16:52:53 +0900 | [diff] [blame] | 86 | self.groups_client.check_group_user_existence( |
| 87 | group['id'], user['id']) |
Yaroslav Lobankov | 997a145 | 2015-11-19 17:11:37 +0300 | [diff] [blame] | 88 | self.groups_client.delete_group_user(group['id'], user['id']) |
| 89 | group_users = self.groups_client.list_group_users(group['id'])['users'] |
Zhi Kun Liu | e8136f0 | 2014-01-07 18:56:28 +0800 | [diff] [blame] | 90 | self.assertEqual(len(group_users), 0) |
| 91 | |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 92 | @decorators.idempotent_id('64573281-d26a-4a52-b899-503cb0f4e4ec') |
wanglianmin | 29b0f4c | 2014-03-06 19:09:16 +0800 | [diff] [blame] | 93 | def test_list_user_groups(self): |
| 94 | # create a user |
zhufl | 75d51a9 | 2017-04-11 16:02:39 +0800 | [diff] [blame] | 95 | user = self.create_test_user() |
wanglianmin | 29b0f4c | 2014-03-06 19:09:16 +0800 | [diff] [blame] | 96 | # create two groups, and add user into them |
| 97 | groups = [] |
zhufl | 8e9a073 | 2017-01-26 16:15:21 +0800 | [diff] [blame] | 98 | for _ in range(2): |
Felipe Monteiro | d441507 | 2018-07-03 14:09:02 -0400 | [diff] [blame] | 99 | group = self.setup_test_group(domain_id=self.domain['id']) |
wanglianmin | 29b0f4c | 2014-03-06 19:09:16 +0800 | [diff] [blame] | 100 | groups.append(group) |
Yaroslav Lobankov | 997a145 | 2015-11-19 17:11:37 +0300 | [diff] [blame] | 101 | self.groups_client.add_group_user(group['id'], user['id']) |
wanglianmin | 29b0f4c | 2014-03-06 19:09:16 +0800 | [diff] [blame] | 102 | # list groups which user belongs to |
Daniel Mellado | 7aea534 | 2016-02-09 09:10:12 +0000 | [diff] [blame] | 103 | user_groups = self.users_client.list_user_groups(user['id'])['groups'] |
Sirushti Murugesan | 12dc973 | 2016-07-13 22:49:17 +0530 | [diff] [blame] | 104 | self.assertEqual(sorted(groups, key=lambda k: k['name']), |
| 105 | sorted(user_groups, key=lambda k: k['name'])) |
wanglianmin | 29b0f4c | 2014-03-06 19:09:16 +0800 | [diff] [blame] | 106 | self.assertEqual(2, len(user_groups)) |
ravikumar-venkatesan | a000370 | 2015-02-04 10:31:17 +0000 | [diff] [blame] | 107 | |
Ken'ichi Ohmichi | eeabdd2 | 2017-01-27 17:46:00 -0800 | [diff] [blame] | 108 | @decorators.idempotent_id('cc9a57a5-a9ed-4f2d-a29f-4f979a06ec71') |
ravikumar-venkatesan | a000370 | 2015-02-04 10:31:17 +0000 | [diff] [blame] | 109 | def test_list_groups(self): |
| 110 | # Test to list groups |
| 111 | group_ids = list() |
| 112 | fetched_ids = list() |
| 113 | for _ in range(3): |
Felipe Monteiro | d441507 | 2018-07-03 14:09:02 -0400 | [diff] [blame] | 114 | group = self.setup_test_group(domain_id=self.domain['id']) |
ravikumar-venkatesan | a000370 | 2015-02-04 10:31:17 +0000 | [diff] [blame] | 115 | group_ids.append(group['id']) |
| 116 | # List and Verify Groups |
Leticia Wanderley | 9cafd3d | 2017-08-04 00:22:34 -0300 | [diff] [blame] | 117 | # 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-venkatesan | a000370 | 2015-02-04 10:31:17 +0000 | [diff] [blame] | 125 | 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.zhang | 48b235f | 2017-05-16 14:53:05 +0800 | [diff] [blame] | 128 | self.assertEmpty(missing_groups) |