blob: 588981323a770f1133e894ef1489248419b7649c [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipesf38eaac2012-06-21 13:37:35 -04002# 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
Yaroslav Lobankovcbcb6112016-03-08 12:30:01 -060016import time
17
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090018from testtools import matchers
Sean Dague1937d092013-05-17 16:36:38 -040019
20from tempest.api.identity import base
Fei Long Wangd39431f2015-05-14 11:30:48 +120021from tempest.common.utils import data_utils
Castulo J. Martineze3adee42016-07-14 10:40:08 -070022from tempest.lib.common.utils import test_utils
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080023from tempest.lib import decorators
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090024from tempest import test
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070025
26
Matthew Treinishdb2c5972014-01-31 22:18:59 +000027class UsersTestJSON(base.BaseIdentityV2AdminTest):
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070028
Adalberto Medeiros081464b2013-08-16 09:41:29 -040029 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010030 def resource_setup(cls):
31 super(UsersTestJSON, cls).resource_setup()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000032 cls.alt_user = data_utils.rand_name('test_user')
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -060033 cls.alt_password = data_utils.rand_password()
Adalberto Medeiros081464b2013-08-16 09:41:29 -040034 cls.alt_email = cls.alt_user + '@testmail.tm'
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070035
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090036 @test.attr(type='smoke')
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080037 @decorators.idempotent_id('2d55a71e-da1d-4b43-9c03-d269fd93d905')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070038 def test_create_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050039 # Create a user
Castulo J. Martineze3adee42016-07-14 10:40:08 -070040 tenant = self.setup_test_tenant()
ghanshyame1c6c1c2016-06-15 14:50:41 +090041 user = self.users_client.create_user(name=self.alt_user,
42 password=self.alt_password,
Castulo J. Martineze3adee42016-07-14 10:40:08 -070043 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +090044 email=self.alt_email)['user']
Castulo J. Martineze3adee42016-07-14 10:40:08 -070045 # Delete the User at the end of the test
46 self.addCleanup(self.users_client.delete_user, user['id'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070047 self.assertEqual(self.alt_user, user['name'])
48
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080049 @decorators.idempotent_id('89d9fdb8-15c2-4304-a429-48715d0af33d')
huangtianhuafc8db4f2013-10-08 12:05:58 +080050 def test_create_user_with_enabled(self):
51 # Create a user with enabled : False
Castulo J. Martineze3adee42016-07-14 10:40:08 -070052 tenant = self.setup_test_tenant()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000053 name = data_utils.rand_name('test_user')
ghanshyame1c6c1c2016-06-15 14:50:41 +090054 user = self.users_client.create_user(name=name,
55 password=self.alt_password,
Castulo J. Martineze3adee42016-07-14 10:40:08 -070056 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +090057 email=self.alt_email,
Daniel Mellado82c83a52015-12-09 15:16:49 +000058 enabled=False)['user']
Castulo J. Martineze3adee42016-07-14 10:40:08 -070059 # Delete the User at the end of the test
60 self.addCleanup(self.users_client.delete_user, user['id'])
huangtianhuafc8db4f2013-10-08 12:05:58 +080061 self.assertEqual(name, user['name'])
Ken'ichi Ohmichi73cb70b2015-04-17 02:31:12 +000062 self.assertEqual(False, user['enabled'])
huangtianhuafc8db4f2013-10-08 12:05:58 +080063 self.assertEqual(self.alt_email, user['email'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070064
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080065 @decorators.idempotent_id('39d05857-e8a5-4ed4-ba83-0b52d3ab97ee')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070066 def test_update_user(self):
67 # Test case to check if updating of user attributes is successful.
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000068 test_user = data_utils.rand_name('test_user')
Castulo J. Martineze3adee42016-07-14 10:40:08 -070069 tenant = self.setup_test_tenant()
ghanshyame1c6c1c2016-06-15 14:50:41 +090070 user = self.users_client.create_user(name=test_user,
71 password=self.alt_password,
Castulo J. Martineze3adee42016-07-14 10:40:08 -070072 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +090073 email=self.alt_email)['user']
Chang Bo Guob36b2f12013-09-13 04:52:00 -070074 # Delete the User at the end of this method
Daniel Mellado82c83a52015-12-09 15:16:49 +000075 self.addCleanup(self.users_client.delete_user, user['id'])
Chang Bo Guob36b2f12013-09-13 04:52:00 -070076 # Updating user details with new values
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000077 u_name2 = data_utils.rand_name('user2')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070078 u_email2 = u_name2 + '@testmail.tm'
Daniel Mellado82c83a52015-12-09 15:16:49 +000079 update_user = self.users_client.update_user(user['id'], name=u_name2,
80 email=u_email2,
81 enabled=False)['user']
Chang Bo Guob36b2f12013-09-13 04:52:00 -070082 self.assertEqual(u_name2, update_user['name'])
83 self.assertEqual(u_email2, update_user['email'])
Ken'ichi Ohmichi73cb70b2015-04-17 02:31:12 +000084 self.assertEqual(False, update_user['enabled'])
Chang Bo Guob36b2f12013-09-13 04:52:00 -070085 # GET by id after updating
Daniel Mellado82c83a52015-12-09 15:16:49 +000086 updated_user = self.users_client.show_user(user['id'])['user']
Chang Bo Guob36b2f12013-09-13 04:52:00 -070087 # Assert response body of GET after updating
88 self.assertEqual(u_name2, updated_user['name'])
89 self.assertEqual(u_email2, updated_user['email'])
Ken'ichi Ohmichi73cb70b2015-04-17 02:31:12 +000090 self.assertEqual(False, update_user['enabled'])
Chang Bo Guob36b2f12013-09-13 04:52:00 -070091
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080092 @decorators.idempotent_id('29ed26f4-a74e-4425-9a85-fdb49fa269d2')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070093 def test_delete_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050094 # Delete a user
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000095 test_user = data_utils.rand_name('test_user')
Castulo J. Martineze3adee42016-07-14 10:40:08 -070096 tenant = self.setup_test_tenant()
ghanshyame1c6c1c2016-06-15 14:50:41 +090097 user = self.users_client.create_user(name=test_user,
98 password=self.alt_password,
Castulo J. Martineze3adee42016-07-14 10:40:08 -070099 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +0900100 email=self.alt_email)['user']
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700101 # Delete the User at the end of the test
102 self.addCleanup(test_utils.call_and_ignore_notfound_exc,
103 self.users_client.delete_user, user['id'])
Daniel Mellado82c83a52015-12-09 15:16:49 +0000104 self.users_client.delete_user(user['id'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700105
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800106 @decorators.idempotent_id('aca696c3-d645-4f45-b728-63646045beb1')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700107 def test_user_authentication(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500108 # Valid user's token is authenticated
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700109 password = data_utils.rand_password()
110 user = self.setup_test_user(password)
111 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700112 # Get a token
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700113 self.token_client.auth(user['name'],
114 password,
115 tenant['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700116 # Re-auth
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700117 self.token_client.auth(user['name'],
118 password,
119 tenant['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700120
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800121 @decorators.idempotent_id('5d1fa498-4c2d-4732-a8fe-2b054598cfdd')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700122 def test_authentication_request_without_token(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500123 # Request for token authentication with a valid token in header
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700124 password = data_utils.rand_password()
125 user = self.setup_test_user(password)
126 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
127 self.token_client.auth(user['name'],
128 password,
129 tenant['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700130 # Get the token of the current client
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000131 token = self.client.auth_provider.get_token()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700132 # Delete the token from database
133 self.client.delete_token(token)
134 # Re-auth
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700135 self.token_client.auth(user['name'],
136 password,
137 tenant['name'])
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000138 self.client.auth_provider.clear_auth()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700139
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800140 @decorators.idempotent_id('a149c02e-e5e0-4b89-809e-7e8faf33ccda')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700141 def test_get_users(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500142 # Get a list of users and find the test user
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700143 user = self.setup_test_user()
Daniel Mellado82c83a52015-12-09 15:16:49 +0000144 users = self.users_client.list_users()['users']
ivan-zhu1feeb382013-01-24 10:14:39 +0800145 self.assertThat([u['name'] for u in users],
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700146 matchers.Contains(user['name']),
147 "Could not find %s" % user['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700148
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800149 @decorators.idempotent_id('6e317209-383a-4bed-9f10-075b7c82c79a')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530150 def test_list_users_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500151 # Return a list of all users for a tenant
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700152 tenant = self.setup_test_tenant()
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530153 user_ids = list()
154 fetched_user_ids = list()
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600155 password1 = data_utils.rand_password()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000156 alt_tenant_user1 = data_utils.rand_name('tenant_user1')
ghanshyame1c6c1c2016-06-15 14:50:41 +0900157 user1 = self.users_client.create_user(name=alt_tenant_user1,
158 password=password1,
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700159 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +0900160 email='user1@123')['user']
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530161 user_ids.append(user1['id'])
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700162 # Delete the User at the end of the test
163 self.addCleanup(self.users_client.delete_user, user1['id'])
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600164 password2 = data_utils.rand_password()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000165 alt_tenant_user2 = data_utils.rand_name('tenant_user2')
ghanshyame1c6c1c2016-06-15 14:50:41 +0900166 user2 = self.users_client.create_user(name=alt_tenant_user2,
167 password=password2,
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700168 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +0900169 email='user2@123')['user']
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530170 user_ids.append(user2['id'])
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700171 # Delete the User at the end of the test
172 self.addCleanup(self.users_client.delete_user, user2['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200173 # List of users for the respective tenant ID
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700174 body = (self.tenants_client.list_tenant_users(tenant['id'])
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530175 ['users'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530176 for i in body:
177 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200178 # verifying the user Id in the list
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530179 missing_users =\
180 [user for user in user_ids if user not in fetched_user_ids]
181 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800182 "Failed to find user %s in fetched list" %
183 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530184
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800185 @decorators.idempotent_id('a8b54974-40e1-41c0-b812-50fc90827971')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530186 def test_list_users_with_roles_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500187 # Return list of users on tenant when roles are assigned to users
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700188 user = self.setup_test_user()
189 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
190 role = self.setup_test_role()
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200191 # Assigning roles to two users
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530192 user_ids = list()
193 fetched_user_ids = list()
194 user_ids.append(user['id'])
ghanshyam50894fc2016-06-17 13:20:25 +0900195 role = self.roles_client.create_user_role_on_project(
196 tenant['id'], user['id'], role['id'])['role']
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400197
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000198 alt_user2 = data_utils.rand_name('second_user')
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600199 alt_password2 = data_utils.rand_password()
ghanshyame1c6c1c2016-06-15 14:50:41 +0900200 second_user = self.users_client.create_user(
201 name=alt_user2,
202 password=alt_password2,
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700203 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +0900204 email='user2@123')['user']
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530205 user_ids.append(second_user['id'])
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700206 # Delete the User at the end of the test
207 self.addCleanup(self.users_client.delete_user, second_user['id'])
ghanshyam50894fc2016-06-17 13:20:25 +0900208 role = self.roles_client.create_user_role_on_project(
209 tenant['id'], second_user['id'], role['id'])['role']
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200210 # List of users with roles for the respective tenant ID
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700211 body = (self.tenants_client.list_tenant_users(tenant['id'])['users'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530212 for i in body:
213 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200214 # verifying the user Id in the list
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700215 missing_users = [missing_user for missing_user in user_ids
216 if missing_user not in fetched_user_ids]
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530217 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800218 "Failed to find user %s in fetched list" %
219 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530220
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800221 @decorators.idempotent_id('1aeb25ac-6ec5-4d8b-97cb-7ac3567a989f')
Abhijeet.Jainff5c3542014-05-06 16:07:30 +0530222 def test_update_user_password(self):
223 # Test case to check if updating of user password is successful.
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700224 user = self.setup_test_user()
225 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
Abhijeet.Jainff5c3542014-05-06 16:07:30 +0530226 # Updating the user with new password
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600227 new_pass = data_utils.rand_password()
Daniel Mellado82c83a52015-12-09 15:16:49 +0000228 update_user = self.users_client.update_user_password(
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700229 user['id'], password=new_pass)['user']
230 self.assertEqual(update_user['id'], user['id'])
Yaroslav Lobankovcbcb6112016-03-08 12:30:01 -0600231 # NOTE(morganfainberg): Fernet tokens are not subsecond aware and
232 # Keystone should only be precise to the second. Sleep to ensure
233 # we are passing the second boundary.
234 time.sleep(1)
235 # Validate the updated password through getting a token.
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700236 body = self.token_client.auth(user['name'], new_pass,
237 tenant['name'])
melissaml37503dd2016-09-14 13:10:49 +0800238 self.assertIn('id', body['token'])