blob: e2c106696c20a2e4a6dd834de61d58103fd7e368 [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
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090016from testtools import matchers
Sean Dague1937d092013-05-17 16:36:38 -040017
18from tempest.api.identity import base
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090019from tempest.common.utils import data_utils
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090020from tempest import test
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070021
22
Matthew Treinishdb2c5972014-01-31 22:18:59 +000023class UsersTestJSON(base.BaseIdentityV2AdminTest):
Attila Fazekas0d0c6162013-02-24 09:14:23 +010024 _interface = 'json'
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070025
Adalberto Medeiros081464b2013-08-16 09:41:29 -040026 @classmethod
27 def setUpClass(cls):
28 super(UsersTestJSON, cls).setUpClass()
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090029 cls.alt_user = data_utils.rand_name('test_user_')
30 cls.alt_password = data_utils.rand_name('pass_')
Adalberto Medeiros081464b2013-08-16 09:41:29 -040031 cls.alt_email = cls.alt_user + '@testmail.tm'
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070032
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090033 @test.attr(type='smoke')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070034 def test_create_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050035 # Create a user
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070036 self.data.setup_test_tenant()
37 resp, user = self.client.create_user(self.alt_user, self.alt_password,
Zhongyue Luo79d8d362012-09-25 13:49:27 +080038 self.data.tenant['id'],
39 self.alt_email)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070040 self.data.users.append(user)
41 self.assertEqual('200', resp['status'])
42 self.assertEqual(self.alt_user, user['name'])
43
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090044 @test.attr(type='smoke')
huangtianhuafc8db4f2013-10-08 12:05:58 +080045 def test_create_user_with_enabled(self):
46 # Create a user with enabled : False
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070047 self.data.setup_test_tenant()
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090048 name = data_utils.rand_name('test_user_')
huangtianhuafc8db4f2013-10-08 12:05:58 +080049 resp, user = self.client.create_user(name, self.alt_password,
50 self.data.tenant['id'],
51 self.alt_email, enabled=False)
52 self.data.users.append(user)
53 self.assertEqual('200', resp['status'])
54 self.assertEqual(name, user['name'])
55 self.assertEqual('false', str(user['enabled']).lower())
56 self.assertEqual(self.alt_email, user['email'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070057
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090058 @test.attr(type='smoke')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070059 def test_update_user(self):
60 # Test case to check if updating of user attributes is successful.
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090061 test_user = data_utils.rand_name('test_user_')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070062 self.data.setup_test_tenant()
63 resp, user = self.client.create_user(test_user, self.alt_password,
64 self.data.tenant['id'],
65 self.alt_email)
66 # Delete the User at the end of this method
67 self.addCleanup(self.client.delete_user, user['id'])
68 # Updating user details with new values
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090069 u_name2 = data_utils.rand_name('user2-')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070070 u_email2 = u_name2 + '@testmail.tm'
71 resp, update_user = self.client.update_user(user['id'], name=u_name2,
72 email=u_email2,
73 enabled=False)
74 # Assert response body of update user.
75 self.assertEqual(200, resp.status)
76 self.assertEqual(u_name2, update_user['name'])
77 self.assertEqual(u_email2, update_user['email'])
78 self.assertEqual('false', str(update_user['enabled']).lower())
79 # GET by id after updating
80 resp, updated_user = self.client.get_user(user['id'])
81 # Assert response body of GET after updating
82 self.assertEqual(u_name2, updated_user['name'])
83 self.assertEqual(u_email2, updated_user['email'])
84 self.assertEqual('false', str(updated_user['enabled']).lower())
85
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090086 @test.attr(type='smoke')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070087 def test_delete_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050088 # Delete a user
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090089 test_user = data_utils.rand_name('test_user_')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070090 self.data.setup_test_tenant()
Chang Bo Guob36b2f12013-09-13 04:52:00 -070091 resp, user = self.client.create_user(test_user, self.alt_password,
Zhongyue Luo79d8d362012-09-25 13:49:27 +080092 self.data.tenant['id'],
93 self.alt_email)
Chang Bo Guofc77e932013-09-16 17:38:26 -070094 self.assertEqual('200', resp['status'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070095 resp, body = self.client.delete_user(user['id'])
Chang Bo Guofc77e932013-09-16 17:38:26 -070096 self.assertEqual('204', resp['status'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070097
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090098 @test.attr(type='smoke')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070099 def test_user_authentication(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500100 # Valid user's token is authenticated
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700101 self.data.setup_test_user()
102 # Get a token
103 self.token_client.auth(self.data.test_user, self.data.test_password,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800104 self.data.test_tenant)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700105 # Re-auth
106 resp, body = self.token_client.auth(self.data.test_user,
107 self.data.test_password,
108 self.data.test_tenant)
109 self.assertEqual('200', resp['status'])
110
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900111 @test.attr(type='gate')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700112 def test_authentication_request_without_token(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500113 # Request for token authentication with a valid token in header
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700114 self.data.setup_test_user()
115 self.token_client.auth(self.data.test_user, self.data.test_password,
116 self.data.test_tenant)
117 # Get the token of the current client
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000118 token = self.client.auth_provider.get_token()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700119 # Delete the token from database
120 self.client.delete_token(token)
121 # Re-auth
122 resp, body = self.token_client.auth(self.data.test_user,
123 self.data.test_password,
124 self.data.test_tenant)
125 self.assertEqual('200', resp['status'])
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000126 self.client.auth_provider.clear_auth()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700127
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900128 @test.attr(type='smoke')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700129 def test_get_users(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500130 # Get a list of users and find the test user
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700131 self.data.setup_test_user()
132 resp, users = self.client.get_users()
ivan-zhu1feeb382013-01-24 10:14:39 +0800133 self.assertThat([u['name'] for u in users],
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900134 matchers.Contains(self.data.test_user),
ivan-zhu1feeb382013-01-24 10:14:39 +0800135 "Could not find %s" % self.data.test_user)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700136
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900137 @test.attr(type='gate')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530138 def test_list_users_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500139 # Return a list of all users for a tenant
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530140 self.data.setup_test_tenant()
141 user_ids = list()
142 fetched_user_ids = list()
Masayuki Igawaa2ccca02013-09-17 15:32:46 +0900143 alt_tenant_user1 = data_utils.rand_name('tenant_user1_')
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400144 resp, user1 = self.client.create_user(alt_tenant_user1, 'password1',
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800145 self.data.tenant['id'],
146 'user1@123')
Chang Bo Guofc77e932013-09-16 17:38:26 -0700147 self.assertEqual('200', resp['status'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530148 user_ids.append(user1['id'])
149 self.data.users.append(user1)
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400150
Masayuki Igawaa2ccca02013-09-17 15:32:46 +0900151 alt_tenant_user2 = data_utils.rand_name('tenant_user2_')
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400152 resp, user2 = self.client.create_user(alt_tenant_user2, 'password2',
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800153 self.data.tenant['id'],
154 'user2@123')
Chang Bo Guofc77e932013-09-16 17:38:26 -0700155 self.assertEqual('200', resp['status'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530156 user_ids.append(user2['id'])
157 self.data.users.append(user2)
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200158 # List of users for the respective tenant ID
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530159 resp, body = self.client.list_users_for_tenant(self.data.tenant['id'])
Attila Fazekase191cb12013-07-29 06:41:52 +0200160 self.assertIn(resp['status'], ('200', '203'))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530161 for i in body:
162 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200163 # verifying the user Id in the list
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530164 missing_users =\
165 [user for user in user_ids if user not in fetched_user_ids]
166 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800167 "Failed to find user %s in fetched list" %
168 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530169
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900170 @test.attr(type='gate')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530171 def test_list_users_with_roles_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500172 # Return list of users on tenant when roles are assigned to users
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530173 self.data.setup_test_user()
174 self.data.setup_test_role()
175 user = self.get_user_by_name(self.data.test_user)
176 tenant = self.get_tenant_by_name(self.data.test_tenant)
177 role = self.get_role_by_name(self.data.test_role)
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200178 # Assigning roles to two users
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530179 user_ids = list()
180 fetched_user_ids = list()
181 user_ids.append(user['id'])
Chris Yeoh7ed62072013-02-22 11:08:14 +1030182 resp, role = self.client.assign_user_role(tenant['id'], user['id'],
183 role['id'])
Chang Bo Guofc77e932013-09-16 17:38:26 -0700184 self.assertEqual('200', resp['status'])
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400185
Masayuki Igawaa2ccca02013-09-17 15:32:46 +0900186 alt_user2 = data_utils.rand_name('second_user_')
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400187 resp, second_user = self.client.create_user(alt_user2, 'password1',
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800188 self.data.tenant['id'],
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400189 'user2@123')
Chang Bo Guofc77e932013-09-16 17:38:26 -0700190 self.assertEqual('200', resp['status'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530191 user_ids.append(second_user['id'])
192 self.data.users.append(second_user)
Chris Yeoh7ed62072013-02-22 11:08:14 +1030193 resp, role = self.client.assign_user_role(tenant['id'],
194 second_user['id'],
195 role['id'])
Chang Bo Guofc77e932013-09-16 17:38:26 -0700196 self.assertEqual('200', resp['status'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200197 # List of users with roles for the respective tenant ID
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530198 resp, body = self.client.list_users_for_tenant(self.data.tenant['id'])
Chang Bo Guofc77e932013-09-16 17:38:26 -0700199 self.assertEqual('200', resp['status'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530200 for i in body:
201 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200202 # verifying the user Id in the list
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700203 missing_users = [missing_user for missing_user in user_ids
204 if missing_user not in fetched_user_ids]
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530205 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800206 "Failed to find user %s in fetched list" %
207 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530208
Abhijeet.Jainff5c3542014-05-06 16:07:30 +0530209 @test.attr(type='smoke')
210 def test_update_user_password(self):
211 # Test case to check if updating of user password is successful.
212 self.data.setup_test_user()
213 # Updating the user with new password
214 new_pass = data_utils.rand_name('pass-')
215 resp, update_user = self.client.update_user_password(
216 self.data.user['id'], new_pass)
217 # Assert response body of update user.
218 self.assertEqual(200, resp.status)
219 self.assertEqual(update_user['id'], self.data.user['id'])
220
221 # Validate the updated password
222 # Get a token
223 resp, body = self.token_client.auth(self.data.test_user, new_pass,
224 self.data.test_tenant)
225 self.assertEqual('200', resp['status'])
226 self.assertTrue('id' in body['token'])
227
Vincent Hou6b8a7b72012-08-25 01:24:33 +0800228
Attila Fazekas0d0c6162013-02-24 09:14:23 +0100229class UsersTestXML(UsersTestJSON):
230 _interface = 'xml'