blob: 507810b2f22dc2644e907eda67f81c1e99b5f5ae [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):
33 name = data_utils.rand_name('Group')
34 description = data_utils.rand_name('Description')
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030035 group = self.groups_client.create_group(
Castulo J. Martinez19b81b22016-07-15 08:58:25 -070036 name=name, domain_id=self.domain['id'],
Steve Martinellibdc16bf2016-03-21 16:12:14 -040037 description=description)['group']
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030038 self.addCleanup(self.groups_client.delete_group, group['id'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +080039 self.assertEqual(group['name'], name)
40 self.assertEqual(group['description'], description)
41
42 new_name = data_utils.rand_name('UpdateGroup')
43 new_desc = data_utils.rand_name('UpdateDescription')
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030044 updated_group = self.groups_client.update_group(
45 group['id'], name=new_name, description=new_desc)['group']
Zhi Kun Liue8136f02014-01-07 18:56:28 +080046 self.assertEqual(updated_group['name'], new_name)
47 self.assertEqual(updated_group['description'], new_desc)
48
Yaroslav Lobankov937438c2015-11-20 11:21:11 +030049 new_group = self.groups_client.show_group(group['id'])['group']
Zhi Kun Liue8136f02014-01-07 18:56:28 +080050 self.assertEqual(group['id'], new_group['id'])
51 self.assertEqual(new_name, new_group['name'])
52 self.assertEqual(new_desc, new_group['description'])
53
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080054 @decorators.idempotent_id('b66eb441-b08a-4a6d-81ab-fef71baeb26c')
ghanshyamd48cd7b2015-11-26 19:53:57 +090055 def test_group_update_with_few_fields(self):
56 name = data_utils.rand_name('Group')
57 old_description = data_utils.rand_name('Description')
58 group = self.groups_client.create_group(
Castulo J. Martinez19b81b22016-07-15 08:58:25 -070059 name=name, domain_id=self.domain['id'],
Steve Martinellibdc16bf2016-03-21 16:12:14 -040060 description=old_description)['group']
ghanshyamd48cd7b2015-11-26 19:53:57 +090061 self.addCleanup(self.groups_client.delete_group, group['id'])
62
63 new_name = data_utils.rand_name('UpdateGroup')
64 updated_group = self.groups_client.update_group(
65 group['id'], name=new_name)['group']
66 self.assertEqual(new_name, updated_group['name'])
67 # Verify that 'description' is not being updated or deleted.
68 self.assertEqual(old_description, updated_group['description'])
69
Jordan Pittier3b46d272017-04-12 16:17:28 +020070 @decorators.attr(type='smoke')
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080071 @decorators.idempotent_id('1598521a-2f36-4606-8df9-30772bd51339')
Zhi Kun Liue8136f02014-01-07 18:56:28 +080072 def test_group_users_add_list_delete(self):
73 name = data_utils.rand_name('Group')
Steve Martinellibdc16bf2016-03-21 16:12:14 -040074 group = self.groups_client.create_group(
Castulo J. Martinez19b81b22016-07-15 08:58:25 -070075 name=name, domain_id=self.domain['id'])['group']
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030076 self.addCleanup(self.groups_client.delete_group, group['id'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +080077 # add user into group
78 users = []
zhufl8e9a0732017-01-26 16:15:21 +080079 for _ in range(3):
zhufl75d51a92017-04-11 16:02:39 +080080 user = self.create_test_user()
Zhi Kun Liue8136f02014-01-07 18:56:28 +080081 users.append(user)
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030082 self.groups_client.add_group_user(group['id'], user['id'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +080083
84 # list users in group
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030085 group_users = self.groups_client.list_group_users(group['id'])['users']
Sirushti Murugesan12dc9732016-07-13 22:49:17 +053086 self.assertEqual(sorted(users, key=lambda k: k['name']),
87 sorted(group_users, key=lambda k: k['name']))
Maho Koshiyab6fa2e42015-12-07 16:52:53 +090088 # check and delete user in group
Zhi Kun Liue8136f02014-01-07 18:56:28 +080089 for user in users:
Maho Koshiyab6fa2e42015-12-07 16:52:53 +090090 self.groups_client.check_group_user_existence(
91 group['id'], user['id'])
Yaroslav Lobankov997a1452015-11-19 17:11:37 +030092 self.groups_client.delete_group_user(group['id'], user['id'])
93 group_users = self.groups_client.list_group_users(group['id'])['users']
Zhi Kun Liue8136f02014-01-07 18:56:28 +080094 self.assertEqual(len(group_users), 0)
95
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080096 @decorators.idempotent_id('64573281-d26a-4a52-b899-503cb0f4e4ec')
wanglianmin29b0f4c2014-03-06 19:09:16 +080097 def test_list_user_groups(self):
98 # create a user
zhufl75d51a92017-04-11 16:02:39 +080099 user = self.create_test_user()
wanglianmin29b0f4c2014-03-06 19:09:16 +0800100 # create two groups, and add user into them
101 groups = []
zhufl8e9a0732017-01-26 16:15:21 +0800102 for _ in range(2):
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000103 name = data_utils.rand_name('Group')
Steve Martinellibdc16bf2016-03-21 16:12:14 -0400104 group = self.groups_client.create_group(
Castulo J. Martinez19b81b22016-07-15 08:58:25 -0700105 name=name, domain_id=self.domain['id'])['group']
wanglianmin29b0f4c2014-03-06 19:09:16 +0800106 groups.append(group)
Yaroslav Lobankov997a1452015-11-19 17:11:37 +0300107 self.addCleanup(self.groups_client.delete_group, group['id'])
108 self.groups_client.add_group_user(group['id'], user['id'])
wanglianmin29b0f4c2014-03-06 19:09:16 +0800109 # list groups which user belongs to
Daniel Mellado7aea5342016-02-09 09:10:12 +0000110 user_groups = self.users_client.list_user_groups(user['id'])['groups']
Sirushti Murugesan12dc9732016-07-13 22:49:17 +0530111 self.assertEqual(sorted(groups, key=lambda k: k['name']),
112 sorted(user_groups, key=lambda k: k['name']))
wanglianmin29b0f4c2014-03-06 19:09:16 +0800113 self.assertEqual(2, len(user_groups))
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000114
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800115 @decorators.idempotent_id('cc9a57a5-a9ed-4f2d-a29f-4f979a06ec71')
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000116 def test_list_groups(self):
117 # Test to list groups
118 group_ids = list()
119 fetched_ids = list()
120 for _ in range(3):
121 name = data_utils.rand_name('Group')
122 description = data_utils.rand_name('Description')
Yaroslav Lobankov997a1452015-11-19 17:11:37 +0300123 group = self.groups_client.create_group(
Castulo J. Martinez19b81b22016-07-15 08:58:25 -0700124 name=name, domain_id=self.domain['id'],
Steve Martinellibdc16bf2016-03-21 16:12:14 -0400125 description=description)['group']
Yaroslav Lobankov997a1452015-11-19 17:11:37 +0300126 self.addCleanup(self.groups_client.delete_group, group['id'])
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000127 group_ids.append(group['id'])
128 # List and Verify Groups
Leticia Wanderley9cafd3d2017-08-04 00:22:34 -0300129 # When domain specific drivers are enabled the operations
130 # of listing all users and listing all groups are not supported,
131 # they need a domain filter to be specified
132 if CONF.identity_feature_enabled.domain_specific_drivers:
133 body = self.groups_client.list_groups(
134 domain_id=self.domain['id'])['groups']
135 else:
136 body = self.groups_client.list_groups()['groups']
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000137 for g in body:
138 fetched_ids.append(g['id'])
139 missing_groups = [g for g in group_ids if g not in fetched_ids]
jeremy.zhang48b235f2017-05-16 14:53:05 +0800140 self.assertEmpty(missing_groups)