blob: 2711a2dea7db4fdbea36ca3f4dcda0d01783730e [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
Ken'ichi Ohmichi7bd25752017-03-10 10:45:39 -080021from tempest.lib.common.utils import data_utils
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080022from tempest.lib import decorators
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070023
24
Matthew Treinishdb2c5972014-01-31 22:18:59 +000025class UsersTestJSON(base.BaseIdentityV2AdminTest):
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070026
Adalberto Medeiros081464b2013-08-16 09:41:29 -040027 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010028 def resource_setup(cls):
29 super(UsersTestJSON, cls).resource_setup()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000030 cls.alt_user = data_utils.rand_name('test_user')
Adalberto Medeiros081464b2013-08-16 09:41:29 -040031 cls.alt_email = cls.alt_user + '@testmail.tm'
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070032
Jordan Pittier3b46d272017-04-12 16:17:28 +020033 @decorators.attr(type='smoke')
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080034 @decorators.idempotent_id('2d55a71e-da1d-4b43-9c03-d269fd93d905')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070035 def test_create_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050036 # Create a user
Castulo J. Martineze3adee42016-07-14 10:40:08 -070037 tenant = self.setup_test_tenant()
zhufl75d51a92017-04-11 16:02:39 +080038 user = self.create_test_user(name=self.alt_user, tenantId=tenant['id'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070039 self.assertEqual(self.alt_user, user['name'])
40
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080041 @decorators.idempotent_id('89d9fdb8-15c2-4304-a429-48715d0af33d')
huangtianhuafc8db4f2013-10-08 12:05:58 +080042 def test_create_user_with_enabled(self):
43 # Create a user with enabled : False
Castulo J. Martineze3adee42016-07-14 10:40:08 -070044 tenant = self.setup_test_tenant()
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000045 name = data_utils.rand_name('test_user')
zhufl75d51a92017-04-11 16:02:39 +080046 user = self.create_test_user(name=name,
47 tenantId=tenant['id'],
48 email=self.alt_email,
49 enabled=False)
huangtianhuafc8db4f2013-10-08 12:05:58 +080050 self.assertEqual(name, user['name'])
Ken'ichi Ohmichi73cb70b2015-04-17 02:31:12 +000051 self.assertEqual(False, user['enabled'])
huangtianhuafc8db4f2013-10-08 12:05:58 +080052 self.assertEqual(self.alt_email, user['email'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070053
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080054 @decorators.idempotent_id('39d05857-e8a5-4ed4-ba83-0b52d3ab97ee')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070055 def test_update_user(self):
56 # Test case to check if updating of user attributes is successful.
Castulo J. Martineze3adee42016-07-14 10:40:08 -070057 tenant = self.setup_test_tenant()
zhufl75d51a92017-04-11 16:02:39 +080058 user = self.create_test_user(tenantId=tenant['id'])
59
Chang Bo Guob36b2f12013-09-13 04:52:00 -070060 # Updating user details with new values
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000061 u_name2 = data_utils.rand_name('user2')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070062 u_email2 = u_name2 + '@testmail.tm'
Daniel Mellado82c83a52015-12-09 15:16:49 +000063 update_user = self.users_client.update_user(user['id'], name=u_name2,
64 email=u_email2,
65 enabled=False)['user']
Chang Bo Guob36b2f12013-09-13 04:52:00 -070066 self.assertEqual(u_name2, update_user['name'])
67 self.assertEqual(u_email2, update_user['email'])
Ken'ichi Ohmichi73cb70b2015-04-17 02:31:12 +000068 self.assertEqual(False, update_user['enabled'])
Chang Bo Guob36b2f12013-09-13 04:52:00 -070069 # GET by id after updating
Daniel Mellado82c83a52015-12-09 15:16:49 +000070 updated_user = self.users_client.show_user(user['id'])['user']
Chang Bo Guob36b2f12013-09-13 04:52:00 -070071 # Assert response body of GET after updating
72 self.assertEqual(u_name2, updated_user['name'])
73 self.assertEqual(u_email2, updated_user['email'])
Ken'ichi Ohmichi73cb70b2015-04-17 02:31:12 +000074 self.assertEqual(False, update_user['enabled'])
Chang Bo Guob36b2f12013-09-13 04:52:00 -070075
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080076 @decorators.idempotent_id('29ed26f4-a74e-4425-9a85-fdb49fa269d2')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070077 def test_delete_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050078 # Delete a user
Castulo J. Martineze3adee42016-07-14 10:40:08 -070079 tenant = self.setup_test_tenant()
zhufl75d51a92017-04-11 16:02:39 +080080 user = self.create_test_user(tenantId=tenant['id'])
Daniel Mellado82c83a52015-12-09 15:16:49 +000081 self.users_client.delete_user(user['id'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070082
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080083 @decorators.idempotent_id('aca696c3-d645-4f45-b728-63646045beb1')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070084 def test_user_authentication(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050085 # Valid user's token is authenticated
Castulo J. Martineze3adee42016-07-14 10:40:08 -070086 password = data_utils.rand_password()
87 user = self.setup_test_user(password)
88 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070089 # Get a token
Castulo J. Martineze3adee42016-07-14 10:40:08 -070090 self.token_client.auth(user['name'],
91 password,
92 tenant['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070093 # Re-auth
Castulo J. Martineze3adee42016-07-14 10:40:08 -070094 self.token_client.auth(user['name'],
95 password,
96 tenant['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070097
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -080098 @decorators.idempotent_id('5d1fa498-4c2d-4732-a8fe-2b054598cfdd')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070099 def test_authentication_request_without_token(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500100 # Request for token authentication with a valid token in header
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700101 password = data_utils.rand_password()
102 user = self.setup_test_user(password)
103 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
104 self.token_client.auth(user['name'],
105 password,
106 tenant['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700107 # Get the token of the current client
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000108 token = self.client.auth_provider.get_token()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700109 # Delete the token from database
110 self.client.delete_token(token)
111 # Re-auth
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700112 self.token_client.auth(user['name'],
113 password,
114 tenant['name'])
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000115 self.client.auth_provider.clear_auth()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700116
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800117 @decorators.idempotent_id('a149c02e-e5e0-4b89-809e-7e8faf33ccda')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700118 def test_get_users(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500119 # Get a list of users and find the test user
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700120 user = self.setup_test_user()
Daniel Mellado82c83a52015-12-09 15:16:49 +0000121 users = self.users_client.list_users()['users']
ivan-zhu1feeb382013-01-24 10:14:39 +0800122 self.assertThat([u['name'] for u in users],
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700123 matchers.Contains(user['name']),
124 "Could not find %s" % user['name'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700125
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800126 @decorators.idempotent_id('6e317209-383a-4bed-9f10-075b7c82c79a')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530127 def test_list_users_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500128 # Return a list of all users for a tenant
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700129 tenant = self.setup_test_tenant()
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530130 user_ids = list()
131 fetched_user_ids = list()
zhufl75d51a92017-04-11 16:02:39 +0800132 user1 = self.create_test_user(tenantId=tenant['id'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530133 user_ids.append(user1['id'])
zhufl75d51a92017-04-11 16:02:39 +0800134 user2 = self.create_test_user(tenantId=tenant['id'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530135 user_ids.append(user2['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200136 # List of users for the respective tenant ID
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700137 body = (self.tenants_client.list_tenant_users(tenant['id'])
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530138 ['users'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530139 for i in body:
140 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200141 # verifying the user Id in the list
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530142 missing_users =\
143 [user for user in user_ids if user not in fetched_user_ids]
144 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800145 "Failed to find user %s in fetched list" %
146 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530147
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800148 @decorators.idempotent_id('a8b54974-40e1-41c0-b812-50fc90827971')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530149 def test_list_users_with_roles_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500150 # Return list of users on tenant when roles are assigned to users
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700151 user = self.setup_test_user()
152 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
153 role = self.setup_test_role()
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200154 # Assigning roles to two users
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530155 user_ids = list()
156 fetched_user_ids = list()
157 user_ids.append(user['id'])
ghanshyam50894fc2016-06-17 13:20:25 +0900158 role = self.roles_client.create_user_role_on_project(
159 tenant['id'], user['id'], role['id'])['role']
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400160
zhufl75d51a92017-04-11 16:02:39 +0800161 second_user = self.create_test_user(tenantId=tenant['id'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530162 user_ids.append(second_user['id'])
ghanshyam50894fc2016-06-17 13:20:25 +0900163 role = self.roles_client.create_user_role_on_project(
164 tenant['id'], second_user['id'], role['id'])['role']
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200165 # List of users with roles for the respective tenant ID
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700166 body = (self.tenants_client.list_tenant_users(tenant['id'])['users'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530167 for i in body:
168 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200169 # verifying the user Id in the list
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700170 missing_users = [missing_user for missing_user in user_ids
171 if missing_user not in fetched_user_ids]
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530172 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800173 "Failed to find user %s in fetched list" %
174 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530175
Ken'ichi Ohmichieeabdd22017-01-27 17:46:00 -0800176 @decorators.idempotent_id('1aeb25ac-6ec5-4d8b-97cb-7ac3567a989f')
Abhijeet.Jainff5c3542014-05-06 16:07:30 +0530177 def test_update_user_password(self):
178 # Test case to check if updating of user password is successful.
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700179 user = self.setup_test_user()
180 tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
Abhijeet.Jainff5c3542014-05-06 16:07:30 +0530181 # Updating the user with new password
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600182 new_pass = data_utils.rand_password()
Daniel Mellado82c83a52015-12-09 15:16:49 +0000183 update_user = self.users_client.update_user_password(
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700184 user['id'], password=new_pass)['user']
185 self.assertEqual(update_user['id'], user['id'])
Yaroslav Lobankovcbcb6112016-03-08 12:30:01 -0600186 # NOTE(morganfainberg): Fernet tokens are not subsecond aware and
187 # Keystone should only be precise to the second. Sleep to ensure
188 # we are passing the second boundary.
189 time.sleep(1)
190 # Validate the updated password through getting a token.
Castulo J. Martineze3adee42016-07-14 10:40:08 -0700191 body = self.token_client.auth(user['name'], new_pass,
192 tenant['name'])
melissaml37503dd2016-09-14 13:10:49 +0800193 self.assertIn('id', body['token'])