blob: 8e6349802fccf9e1f72497ec188f935b9f46f974 [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
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090023from tempest import test
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070024
25
Matthew Treinishdb2c5972014-01-31 22:18:59 +000026class UsersTestJSON(base.BaseIdentityV2AdminTest):
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070027
Adalberto Medeiros081464b2013-08-16 09:41:29 -040028 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010029 def resource_setup(cls):
30 super(UsersTestJSON, cls).resource_setup()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000031 cls.alt_user = data_utils.rand_name('test_user')
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -060032 cls.alt_password = data_utils.rand_password()
Adalberto Medeiros081464b2013-08-16 09:41:29 -040033 cls.alt_email = cls.alt_user + '@testmail.tm'
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070034
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090035 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080036 @test.idempotent_id('2d55a71e-da1d-4b43-9c03-d269fd93d905')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070037 def test_create_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050038 # Create a user
Castulo J. Martineze3adee42016-07-14 10:40:08 -070039 tenant = self.setup_test_tenant()
ghanshyame1c6c1c2016-06-15 14:50:41 +090040 user = self.users_client.create_user(name=self.alt_user,
41 password=self.alt_password,
Castulo J. Martineze3adee42016-07-14 10:40:08 -070042 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +090043 email=self.alt_email)['user']
Castulo J. Martineze3adee42016-07-14 10:40:08 -070044 # Delete the User at the end of the test
45 self.addCleanup(self.users_client.delete_user, user['id'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070046 self.assertEqual(self.alt_user, user['name'])
47
Chris Hoge7579c1a2015-02-26 14:12:15 -080048 @test.idempotent_id('89d9fdb8-15c2-4304-a429-48715d0af33d')
huangtianhuafc8db4f2013-10-08 12:05:58 +080049 def test_create_user_with_enabled(self):
50 # Create a user with enabled : False
Castulo J. Martineze3adee42016-07-14 10:40:08 -070051 tenant = self.setup_test_tenant()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000052 name = data_utils.rand_name('test_user')
ghanshyame1c6c1c2016-06-15 14:50:41 +090053 user = self.users_client.create_user(name=name,
54 password=self.alt_password,
Castulo J. Martineze3adee42016-07-14 10:40:08 -070055 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +090056 email=self.alt_email,
Daniel Mellado82c83a52015-12-09 15:16:49 +000057 enabled=False)['user']
Castulo J. Martineze3adee42016-07-14 10:40:08 -070058 # Delete the User at the end of the test
59 self.addCleanup(self.users_client.delete_user, user['id'])
huangtianhuafc8db4f2013-10-08 12:05:58 +080060 self.assertEqual(name, user['name'])
Ken'ichi Ohmichi73cb70b2015-04-17 02:31:12 +000061 self.assertEqual(False, user['enabled'])
huangtianhuafc8db4f2013-10-08 12:05:58 +080062 self.assertEqual(self.alt_email, user['email'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070063
Chris Hoge7579c1a2015-02-26 14:12:15 -080064 @test.idempotent_id('39d05857-e8a5-4ed4-ba83-0b52d3ab97ee')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070065 def test_update_user(self):
66 # Test case to check if updating of user attributes is successful.
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000067 test_user = data_utils.rand_name('test_user')
Castulo J. Martineze3adee42016-07-14 10:40:08 -070068 tenant = self.setup_test_tenant()
ghanshyame1c6c1c2016-06-15 14:50:41 +090069 user = self.users_client.create_user(name=test_user,
70 password=self.alt_password,
Castulo J. Martineze3adee42016-07-14 10:40:08 -070071 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +090072 email=self.alt_email)['user']
Chang Bo Guob36b2f12013-09-13 04:52:00 -070073 # Delete the User at the end of this method
Daniel Mellado82c83a52015-12-09 15:16:49 +000074 self.addCleanup(self.users_client.delete_user, user['id'])
Chang Bo Guob36b2f12013-09-13 04:52:00 -070075 # Updating user details with new values
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000076 u_name2 = data_utils.rand_name('user2')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070077 u_email2 = u_name2 + '@testmail.tm'
Daniel Mellado82c83a52015-12-09 15:16:49 +000078 update_user = self.users_client.update_user(user['id'], name=u_name2,
79 email=u_email2,
80 enabled=False)['user']
Chang Bo Guob36b2f12013-09-13 04:52:00 -070081 self.assertEqual(u_name2, update_user['name'])
82 self.assertEqual(u_email2, update_user['email'])
Ken'ichi Ohmichi73cb70b2015-04-17 02:31:12 +000083 self.assertEqual(False, update_user['enabled'])
Chang Bo Guob36b2f12013-09-13 04:52:00 -070084 # GET by id after updating
Daniel Mellado82c83a52015-12-09 15:16:49 +000085 updated_user = self.users_client.show_user(user['id'])['user']
Chang Bo Guob36b2f12013-09-13 04:52:00 -070086 # Assert response body of GET after updating
87 self.assertEqual(u_name2, updated_user['name'])
88 self.assertEqual(u_email2, updated_user['email'])
Ken'ichi Ohmichi73cb70b2015-04-17 02:31:12 +000089 self.assertEqual(False, update_user['enabled'])
Chang Bo Guob36b2f12013-09-13 04:52:00 -070090
Chris Hoge7579c1a2015-02-26 14:12:15 -080091 @test.idempotent_id('29ed26f4-a74e-4425-9a85-fdb49fa269d2')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070092 def test_delete_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050093 # Delete a user
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000094 test_user = data_utils.rand_name('test_user')
Castulo J. Martineze3adee42016-07-14 10:40:08 -070095 tenant = self.setup_test_tenant()
ghanshyame1c6c1c2016-06-15 14:50:41 +090096 user = self.users_client.create_user(name=test_user,
97 password=self.alt_password,
Castulo J. Martineze3adee42016-07-14 10:40:08 -070098 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +090099 email=self.alt_email)['user']
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700100 # Delete the User at the end of the test
101 self.addCleanup(test_utils.call_and_ignore_notfound_exc,
102 self.users_client.delete_user, user['id'])
Daniel Mellado82c83a52015-12-09 15:16:49 +0000103 self.users_client.delete_user(user['id'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700104
Chris Hoge7579c1a2015-02-26 14:12:15 -0800105 @test.idempotent_id('aca696c3-d645-4f45-b728-63646045beb1')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700106 def test_user_authentication(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500107 # Valid user's token is authenticated
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700108 password = data_utils.rand_password()
109 user = self.setup_test_user(password)
110 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700111 # Get a token
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700112 self.token_client.auth(user['name'],
113 password,
114 tenant['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700115 # Re-auth
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700116 self.token_client.auth(user['name'],
117 password,
118 tenant['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700119
Chris Hoge7579c1a2015-02-26 14:12:15 -0800120 @test.idempotent_id('5d1fa498-4c2d-4732-a8fe-2b054598cfdd')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700121 def test_authentication_request_without_token(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500122 # Request for token authentication with a valid token in header
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700123 password = data_utils.rand_password()
124 user = self.setup_test_user(password)
125 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
126 self.token_client.auth(user['name'],
127 password,
128 tenant['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700129 # Get the token of the current client
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000130 token = self.client.auth_provider.get_token()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700131 # Delete the token from database
132 self.client.delete_token(token)
133 # Re-auth
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700134 self.token_client.auth(user['name'],
135 password,
136 tenant['name'])
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000137 self.client.auth_provider.clear_auth()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700138
Chris Hoge7579c1a2015-02-26 14:12:15 -0800139 @test.idempotent_id('a149c02e-e5e0-4b89-809e-7e8faf33ccda')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700140 def test_get_users(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500141 # Get a list of users and find the test user
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700142 user = self.setup_test_user()
Daniel Mellado82c83a52015-12-09 15:16:49 +0000143 users = self.users_client.list_users()['users']
ivan-zhu1feeb382013-01-24 10:14:39 +0800144 self.assertThat([u['name'] for u in users],
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700145 matchers.Contains(user['name']),
146 "Could not find %s" % user['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700147
Chris Hoge7579c1a2015-02-26 14:12:15 -0800148 @test.idempotent_id('6e317209-383a-4bed-9f10-075b7c82c79a')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530149 def test_list_users_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500150 # Return a list of all users for a tenant
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700151 tenant = self.setup_test_tenant()
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530152 user_ids = list()
153 fetched_user_ids = list()
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600154 password1 = data_utils.rand_password()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000155 alt_tenant_user1 = data_utils.rand_name('tenant_user1')
ghanshyame1c6c1c2016-06-15 14:50:41 +0900156 user1 = self.users_client.create_user(name=alt_tenant_user1,
157 password=password1,
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700158 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +0900159 email='user1@123')['user']
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530160 user_ids.append(user1['id'])
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700161 # Delete the User at the end of the test
162 self.addCleanup(self.users_client.delete_user, user1['id'])
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600163 password2 = data_utils.rand_password()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000164 alt_tenant_user2 = data_utils.rand_name('tenant_user2')
ghanshyame1c6c1c2016-06-15 14:50:41 +0900165 user2 = self.users_client.create_user(name=alt_tenant_user2,
166 password=password2,
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700167 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +0900168 email='user2@123')['user']
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530169 user_ids.append(user2['id'])
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700170 # Delete the User at the end of the test
171 self.addCleanup(self.users_client.delete_user, user2['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200172 # List of users for the respective tenant ID
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700173 body = (self.tenants_client.list_tenant_users(tenant['id'])
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530174 ['users'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530175 for i in body:
176 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200177 # verifying the user Id in the list
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530178 missing_users =\
179 [user for user in user_ids if user not in fetched_user_ids]
180 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800181 "Failed to find user %s in fetched list" %
182 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530183
Chris Hoge7579c1a2015-02-26 14:12:15 -0800184 @test.idempotent_id('a8b54974-40e1-41c0-b812-50fc90827971')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530185 def test_list_users_with_roles_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500186 # Return list of users on tenant when roles are assigned to users
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700187 user = self.setup_test_user()
188 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
189 role = self.setup_test_role()
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200190 # Assigning roles to two users
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530191 user_ids = list()
192 fetched_user_ids = list()
193 user_ids.append(user['id'])
ghanshyam50894fc2016-06-17 13:20:25 +0900194 role = self.roles_client.create_user_role_on_project(
195 tenant['id'], user['id'], role['id'])['role']
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400196
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000197 alt_user2 = data_utils.rand_name('second_user')
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600198 alt_password2 = data_utils.rand_password()
ghanshyame1c6c1c2016-06-15 14:50:41 +0900199 second_user = self.users_client.create_user(
200 name=alt_user2,
201 password=alt_password2,
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700202 tenantId=tenant['id'],
ghanshyame1c6c1c2016-06-15 14:50:41 +0900203 email='user2@123')['user']
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530204 user_ids.append(second_user['id'])
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700205 # Delete the User at the end of the test
206 self.addCleanup(self.users_client.delete_user, second_user['id'])
ghanshyam50894fc2016-06-17 13:20:25 +0900207 role = self.roles_client.create_user_role_on_project(
208 tenant['id'], second_user['id'], role['id'])['role']
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200209 # List of users with roles for the respective tenant ID
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700210 body = (self.tenants_client.list_tenant_users(tenant['id'])['users'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530211 for i in body:
212 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200213 # verifying the user Id in the list
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700214 missing_users = [missing_user for missing_user in user_ids
215 if missing_user not in fetched_user_ids]
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530216 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800217 "Failed to find user %s in fetched list" %
218 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530219
Chris Hoge7579c1a2015-02-26 14:12:15 -0800220 @test.idempotent_id('1aeb25ac-6ec5-4d8b-97cb-7ac3567a989f')
Abhijeet.Jainff5c3542014-05-06 16:07:30 +0530221 def test_update_user_password(self):
222 # Test case to check if updating of user password is successful.
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700223 user = self.setup_test_user()
224 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
Abhijeet.Jainff5c3542014-05-06 16:07:30 +0530225 # Updating the user with new password
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600226 new_pass = data_utils.rand_password()
Daniel Mellado82c83a52015-12-09 15:16:49 +0000227 update_user = self.users_client.update_user_password(
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700228 user['id'], password=new_pass)['user']
229 self.assertEqual(update_user['id'], user['id'])
Yaroslav Lobankovcbcb6112016-03-08 12:30:01 -0600230 # NOTE(morganfainberg): Fernet tokens are not subsecond aware and
231 # Keystone should only be precise to the second. Sleep to ensure
232 # we are passing the second boundary.
233 time.sleep(1)
234 # Validate the updated password through getting a token.
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700235 body = self.token_client.auth(user['name'], new_pass,
236 tenant['name'])
Abhijeet.Jainff5c3542014-05-06 16:07:30 +0530237 self.assertTrue('id' in body['token'])