blob: 5d5a814c2564ae079e0ea412f0d43cb711798342 [file] [log] [blame]
Jay Pipesf38eaac2012-06-21 13:37:35 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
ZhiQiang Fan39f97222013-09-20 04:49:44 +08003# Copyright 2012 OpenStack Foundation
Jay Pipesf38eaac2012-06-21 13:37:35 -04004# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
Attila Fazekas4ecef7d2013-08-16 14:20:27 +020018from testtools.matchers import Contains
Sean Dague1937d092013-05-17 16:36:38 -040019
20from tempest.api.identity import base
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090021from tempest.common.utils import data_utils
Chris Yeoh01cb2792013-02-09 22:25:37 +103022from tempest.test import attr
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070023
24
Attila Fazekas0d0c6162013-02-24 09:14:23 +010025class UsersTestJSON(base.BaseIdentityAdminTest):
26 _interface = 'json'
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070027
Adalberto Medeiros081464b2013-08-16 09:41:29 -040028 @classmethod
29 def setUpClass(cls):
30 super(UsersTestJSON, cls).setUpClass()
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090031 cls.alt_user = data_utils.rand_name('test_user_')
32 cls.alt_password = data_utils.rand_name('pass_')
Adalberto Medeiros081464b2013-08-16 09:41:29 -040033 cls.alt_email = cls.alt_user + '@testmail.tm'
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070034
Giulio Fidenteba3985a2013-05-29 01:46:36 +020035 @attr(type='smoke')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070036 def test_create_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050037 # Create a user
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070038 self.data.setup_test_tenant()
39 resp, user = self.client.create_user(self.alt_user, self.alt_password,
Zhongyue Luo79d8d362012-09-25 13:49:27 +080040 self.data.tenant['id'],
41 self.alt_email)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070042 self.data.users.append(user)
43 self.assertEqual('200', resp['status'])
44 self.assertEqual(self.alt_user, user['name'])
45
huangtianhuafc8db4f2013-10-08 12:05:58 +080046 @attr(type='smoke')
47 def test_create_user_with_enabled(self):
48 # Create a user with enabled : False
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070049 self.data.setup_test_tenant()
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090050 name = data_utils.rand_name('test_user_')
huangtianhuafc8db4f2013-10-08 12:05:58 +080051 resp, user = self.client.create_user(name, self.alt_password,
52 self.data.tenant['id'],
53 self.alt_email, enabled=False)
54 self.data.users.append(user)
55 self.assertEqual('200', resp['status'])
56 self.assertEqual(name, user['name'])
57 self.assertEqual('false', str(user['enabled']).lower())
58 self.assertEqual(self.alt_email, user['email'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070059
Giulio Fidenteba3985a2013-05-29 01:46:36 +020060 @attr(type='smoke')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070061 def test_update_user(self):
62 # Test case to check if updating of user attributes is successful.
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090063 test_user = data_utils.rand_name('test_user_')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070064 self.data.setup_test_tenant()
65 resp, user = self.client.create_user(test_user, self.alt_password,
66 self.data.tenant['id'],
67 self.alt_email)
68 # Delete the User at the end of this method
69 self.addCleanup(self.client.delete_user, user['id'])
70 # Updating user details with new values
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090071 u_name2 = data_utils.rand_name('user2-')
Chang Bo Guob36b2f12013-09-13 04:52:00 -070072 u_email2 = u_name2 + '@testmail.tm'
73 resp, update_user = self.client.update_user(user['id'], name=u_name2,
74 email=u_email2,
75 enabled=False)
76 # Assert response body of update user.
77 self.assertEqual(200, resp.status)
78 self.assertEqual(u_name2, update_user['name'])
79 self.assertEqual(u_email2, update_user['email'])
80 self.assertEqual('false', str(update_user['enabled']).lower())
81 # GET by id after updating
82 resp, updated_user = self.client.get_user(user['id'])
83 # Assert response body of GET after updating
84 self.assertEqual(u_name2, updated_user['name'])
85 self.assertEqual(u_email2, updated_user['email'])
86 self.assertEqual('false', str(updated_user['enabled']).lower())
87
88 @attr(type='smoke')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070089 def test_delete_user(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -050090 # Delete a user
Masayuki Igawaa2ccca02013-09-17 15:32:46 +090091 test_user = data_utils.rand_name('test_user_')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070092 self.data.setup_test_tenant()
Chang Bo Guob36b2f12013-09-13 04:52:00 -070093 resp, user = self.client.create_user(test_user, self.alt_password,
Zhongyue Luo79d8d362012-09-25 13:49:27 +080094 self.data.tenant['id'],
95 self.alt_email)
Chang Bo Guofc77e932013-09-16 17:38:26 -070096 self.assertEqual('200', resp['status'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070097 resp, body = self.client.delete_user(user['id'])
Chang Bo Guofc77e932013-09-16 17:38:26 -070098 self.assertEqual('204', resp['status'])
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070099
Giulio Fidenteba3985a2013-05-29 01:46:36 +0200100 @attr(type='smoke')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700101 def test_user_authentication(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500102 # Valid user's token is authenticated
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700103 self.data.setup_test_user()
104 # Get a token
105 self.token_client.auth(self.data.test_user, self.data.test_password,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800106 self.data.test_tenant)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700107 # Re-auth
108 resp, body = self.token_client.auth(self.data.test_user,
109 self.data.test_password,
110 self.data.test_tenant)
111 self.assertEqual('200', resp['status'])
112
Giampaolo Lauriaea294952013-05-15 08:52:04 -0400113 @attr(type='gate')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700114 def test_authentication_request_without_token(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500115 # Request for token authentication with a valid token in header
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700116 self.data.setup_test_user()
117 self.token_client.auth(self.data.test_user, self.data.test_password,
118 self.data.test_tenant)
119 # Get the token of the current client
120 token = self.client.get_auth()
121 # Delete the token from database
122 self.client.delete_token(token)
123 # Re-auth
124 resp, body = self.token_client.auth(self.data.test_user,
125 self.data.test_password,
126 self.data.test_tenant)
127 self.assertEqual('200', resp['status'])
128 self.client.clear_auth()
129
Giulio Fidenteba3985a2013-05-29 01:46:36 +0200130 @attr(type='smoke')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700131 def test_get_users(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500132 # Get a list of users and find the test user
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700133 self.data.setup_test_user()
134 resp, users = self.client.get_users()
ivan-zhu1feeb382013-01-24 10:14:39 +0800135 self.assertThat([u['name'] for u in users],
136 Contains(self.data.test_user),
137 "Could not find %s" % self.data.test_user)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700138
Giampaolo Lauriaea294952013-05-15 08:52:04 -0400139 @attr(type='gate')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530140 def test_list_users_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500141 # Return a list of all users for a tenant
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530142 self.data.setup_test_tenant()
143 user_ids = list()
144 fetched_user_ids = list()
Masayuki Igawaa2ccca02013-09-17 15:32:46 +0900145 alt_tenant_user1 = data_utils.rand_name('tenant_user1_')
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400146 resp, user1 = self.client.create_user(alt_tenant_user1, 'password1',
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800147 self.data.tenant['id'],
148 'user1@123')
Chang Bo Guofc77e932013-09-16 17:38:26 -0700149 self.assertEqual('200', resp['status'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530150 user_ids.append(user1['id'])
151 self.data.users.append(user1)
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400152
Masayuki Igawaa2ccca02013-09-17 15:32:46 +0900153 alt_tenant_user2 = data_utils.rand_name('tenant_user2_')
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400154 resp, user2 = self.client.create_user(alt_tenant_user2, 'password2',
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800155 self.data.tenant['id'],
156 'user2@123')
Chang Bo Guofc77e932013-09-16 17:38:26 -0700157 self.assertEqual('200', resp['status'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530158 user_ids.append(user2['id'])
159 self.data.users.append(user2)
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200160 # List of users for the respective tenant ID
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530161 resp, body = self.client.list_users_for_tenant(self.data.tenant['id'])
Attila Fazekase191cb12013-07-29 06:41:52 +0200162 self.assertIn(resp['status'], ('200', '203'))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530163 for i in body:
164 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200165 # verifying the user Id in the list
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530166 missing_users =\
167 [user for user in user_ids if user not in fetched_user_ids]
168 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800169 "Failed to find user %s in fetched list" %
170 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530171
Giampaolo Lauriaea294952013-05-15 08:52:04 -0400172 @attr(type='gate')
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530173 def test_list_users_with_roles_for_tenant(self):
Sean Dague46c4a2b2013-01-03 17:54:17 -0500174 # Return list of users on tenant when roles are assigned to users
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530175 self.data.setup_test_user()
176 self.data.setup_test_role()
177 user = self.get_user_by_name(self.data.test_user)
178 tenant = self.get_tenant_by_name(self.data.test_tenant)
179 role = self.get_role_by_name(self.data.test_role)
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200180 # Assigning roles to two users
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530181 user_ids = list()
182 fetched_user_ids = list()
183 user_ids.append(user['id'])
Chris Yeoh7ed62072013-02-22 11:08:14 +1030184 resp, role = self.client.assign_user_role(tenant['id'], user['id'],
185 role['id'])
Chang Bo Guofc77e932013-09-16 17:38:26 -0700186 self.assertEqual('200', resp['status'])
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400187
Masayuki Igawaa2ccca02013-09-17 15:32:46 +0900188 alt_user2 = data_utils.rand_name('second_user_')
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400189 resp, second_user = self.client.create_user(alt_user2, 'password1',
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800190 self.data.tenant['id'],
Adalberto Medeiros081464b2013-08-16 09:41:29 -0400191 'user2@123')
Chang Bo Guofc77e932013-09-16 17:38:26 -0700192 self.assertEqual('200', resp['status'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530193 user_ids.append(second_user['id'])
194 self.data.users.append(second_user)
Chris Yeoh7ed62072013-02-22 11:08:14 +1030195 resp, role = self.client.assign_user_role(tenant['id'],
196 second_user['id'],
197 role['id'])
Chang Bo Guofc77e932013-09-16 17:38:26 -0700198 self.assertEqual('200', resp['status'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200199 # List of users with roles for the respective tenant ID
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530200 resp, body = self.client.list_users_for_tenant(self.data.tenant['id'])
Chang Bo Guofc77e932013-09-16 17:38:26 -0700201 self.assertEqual('200', resp['status'])
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530202 for i in body:
203 fetched_user_ids.append(i['id'])
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200204 # verifying the user Id in the list
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700205 missing_users = [missing_user for missing_user in user_ids
206 if missing_user not in fetched_user_ids]
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530207 self.assertEqual(0, len(missing_users),
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800208 "Failed to find user %s in fetched list" %
209 ', '.join(m_user for m_user in missing_users))
rajalakshmi-ganesanefc8bd72012-05-30 17:52:11 +0530210
Vincent Hou6b8a7b72012-08-25 01:24:33 +0800211
Attila Fazekas0d0c6162013-02-24 09:14:23 +0100212class UsersTestXML(UsersTestJSON):
213 _interface = 'xml'