blob: bee77df60e854254f6fbaca2a5886aaebbda0ef8 [file] [log] [blame]
Nayna Patele6331362013-08-12 06:59:48 +00001# Copyright 2013 OpenStack, LLC
2# 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
Rodrigo Duarte4ee6b912016-02-26 17:52:25 -030016import testtools
17
Nayna Patele6331362013-08-12 06:59:48 +000018from tempest.api.identity import base
Fei Long Wangd39431f2015-05-14 11:30:48 +120019from tempest.common.utils import data_utils
Rodrigo Duarte4ee6b912016-02-26 17:52:25 -030020from tempest import config
YuikoTakada414526b2014-02-12 19:09:43 +000021from tempest import test
Nayna Patele6331362013-08-12 06:59:48 +000022
Rodrigo Duarte4ee6b912016-02-26 17:52:25 -030023CONF = config.CONF
24
Nayna Patele6331362013-08-12 06:59:48 +000025
Matthew Treinishdb2c5972014-01-31 22:18:59 +000026class ProjectsTestJSON(base.BaseIdentityV3AdminTest):
Nayna Patele6331362013-08-12 06:59:48 +000027
Chris Hoge7579c1a2015-02-26 14:12:15 -080028 @test.idempotent_id('0ecf465c-0dc4-4532-ab53-91ffeb74d12d')
Nayna Patele6331362013-08-12 06:59:48 +000029 def test_project_create_with_description(self):
30 # Create project with a description
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000031 project_name = data_utils.rand_name('project')
32 project_desc = data_utils.rand_name('desc')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -060033 project = self.projects_client.create_project(
John Warren56317e02015-08-12 20:48:32 +000034 project_name, description=project_desc)['project']
Matthew Treinishdb2c5972014-01-31 22:18:59 +000035 self.data.projects.append(project)
Nayna Patele6331362013-08-12 06:59:48 +000036 project_id = project['id']
37 desc1 = project['description']
Nayna Patele6331362013-08-12 06:59:48 +000038 self.assertEqual(desc1, project_desc, 'Description should have '
39 'been sent in response for create')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -060040 body = self.projects_client.show_project(project_id)['project']
Nayna Patele6331362013-08-12 06:59:48 +000041 desc2 = body['description']
42 self.assertEqual(desc2, project_desc, 'Description does not appear'
43 'to be set')
44
Chris Hoge7579c1a2015-02-26 14:12:15 -080045 @test.idempotent_id('5f50fe07-8166-430b-a882-3b2ee0abe26f')
nayna-patel153e9dd2014-05-16 09:00:05 +000046 def test_project_create_with_domain(self):
47 # Create project with a domain
48 self.data.setup_test_domain()
49 project_name = data_utils.rand_name('project')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -060050 project = self.projects_client.create_project(
John Warren56317e02015-08-12 20:48:32 +000051 project_name, domain_id=self.data.domain['id'])['project']
nayna-patel153e9dd2014-05-16 09:00:05 +000052 self.data.projects.append(project)
53 project_id = project['id']
54 self.assertEqual(project_name, project['name'])
55 self.assertEqual(self.data.domain['id'], project['domain_id'])
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -060056 body = self.projects_client.show_project(project_id)['project']
nayna-patel153e9dd2014-05-16 09:00:05 +000057 self.assertEqual(project_name, body['name'])
58 self.assertEqual(self.data.domain['id'], body['domain_id'])
59
Rodrigo Duarte4ee6b912016-02-26 17:52:25 -030060 @testtools.skipUnless(CONF.identity_feature_enabled.reseller,
61 'Reseller not available.')
62 @test.idempotent_id('1854f9c0-70bc-4d11-a08a-1c789d339e3d')
63 def test_project_create_with_parent(self):
64 # Create root project without providing a parent_id
65 self.data.setup_test_domain()
66 domain_id = self.data.domain['id']
67
68 root_project_name = data_utils.rand_name('root_project')
69 root_project = self.projects_client.create_project(
70 root_project_name, domain_id=domain_id)['project']
71 self.addCleanup(
72 self.projects_client.delete_project, root_project['id'])
73
74 root_project_id = root_project['id']
75 parent_id = root_project['parent_id']
76 self.assertEqual(root_project_name, root_project['name'])
77 # If not provided, the parent_id must point to the top level
78 # project in the hierarchy, i.e. its domain
79 self.assertEqual(domain_id, parent_id)
80
81 # Create a project using root_project_id as parent_id
82 project_name = data_utils.rand_name('project')
83 project = self.projects_client.create_project(
84 project_name, domain_id=domain_id,
85 parent_id=root_project_id)['project']
Rodrigo Duarte49b387a2016-07-04 17:14:57 -030086 self.addCleanup(self.projects_client.delete_project, project['id'])
Rodrigo Duarte4ee6b912016-02-26 17:52:25 -030087 parent_id = project['parent_id']
88 self.assertEqual(project_name, project['name'])
89 self.assertEqual(root_project_id, parent_id)
90
Chris Hoge7579c1a2015-02-26 14:12:15 -080091 @test.idempotent_id('1f66dc76-50cc-4741-a200-af984509e480')
Nayna Patele6331362013-08-12 06:59:48 +000092 def test_project_create_enabled(self):
93 # Create a project that is enabled
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +000094 project_name = data_utils.rand_name('project')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -060095 project = self.projects_client.create_project(
John Warren56317e02015-08-12 20:48:32 +000096 project_name, enabled=True)['project']
Matthew Treinishdb2c5972014-01-31 22:18:59 +000097 self.data.projects.append(project)
Nayna Patele6331362013-08-12 06:59:48 +000098 project_id = project['id']
Nayna Patele6331362013-08-12 06:59:48 +000099 en1 = project['enabled']
Nayna Patele6331362013-08-12 06:59:48 +0000100 self.assertTrue(en1, 'Enable should be True in response')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600101 body = self.projects_client.show_project(project_id)['project']
Nayna Patele6331362013-08-12 06:59:48 +0000102 en2 = body['enabled']
103 self.assertTrue(en2, 'Enable should be True in lookup')
104
Chris Hoge7579c1a2015-02-26 14:12:15 -0800105 @test.idempotent_id('78f96a9c-e0e0-4ee6-a3ba-fbf6dfd03207')
Nayna Patele6331362013-08-12 06:59:48 +0000106 def test_project_create_not_enabled(self):
107 # Create a project that is not enabled
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000108 project_name = data_utils.rand_name('project')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600109 project = self.projects_client.create_project(
John Warren56317e02015-08-12 20:48:32 +0000110 project_name, enabled=False)['project']
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000111 self.data.projects.append(project)
Nayna Patele6331362013-08-12 06:59:48 +0000112 en1 = project['enabled']
Nayna Patele6331362013-08-12 06:59:48 +0000113 self.assertEqual('false', str(en1).lower(),
114 'Enable should be False in response')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600115 body = self.projects_client.show_project(project['id'])['project']
Nayna Patele6331362013-08-12 06:59:48 +0000116 en2 = body['enabled']
117 self.assertEqual('false', str(en2).lower(),
118 'Enable should be False in lookup')
119
Chris Hoge7579c1a2015-02-26 14:12:15 -0800120 @test.idempotent_id('f608f368-048c-496b-ad63-d286c26dab6b')
Nayna Patele6331362013-08-12 06:59:48 +0000121 def test_project_update_name(self):
122 # Update name attribute of a project
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000123 p_name1 = data_utils.rand_name('project')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600124 project = self.projects_client.create_project(p_name1)['project']
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000125 self.data.projects.append(project)
Nayna Patele6331362013-08-12 06:59:48 +0000126
127 resp1_name = project['name']
128
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000129 p_name2 = data_utils.rand_name('project2')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600130 body = self.projects_client.update_project(project['id'],
131 name=p_name2)['project']
Nayna Patele6331362013-08-12 06:59:48 +0000132 resp2_name = body['name']
Nayna Patele6331362013-08-12 06:59:48 +0000133 self.assertNotEqual(resp1_name, resp2_name)
134
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600135 body = self.projects_client.show_project(project['id'])['project']
Nayna Patele6331362013-08-12 06:59:48 +0000136 resp3_name = body['name']
137
138 self.assertNotEqual(resp1_name, resp3_name)
139 self.assertEqual(p_name1, resp1_name)
140 self.assertEqual(resp2_name, resp3_name)
141
Chris Hoge7579c1a2015-02-26 14:12:15 -0800142 @test.idempotent_id('f138b715-255e-4a7d-871d-351e1ef2e153')
Nayna Patele6331362013-08-12 06:59:48 +0000143 def test_project_update_desc(self):
144 # Update description attribute of a project
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000145 p_name = data_utils.rand_name('project')
146 p_desc = data_utils.rand_name('desc')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600147 project = self.projects_client.create_project(
John Warren56317e02015-08-12 20:48:32 +0000148 p_name, description=p_desc)['project']
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000149 self.data.projects.append(project)
Nayna Patele6331362013-08-12 06:59:48 +0000150 resp1_desc = project['description']
151
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000152 p_desc2 = data_utils.rand_name('desc2')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600153 body = self.projects_client.update_project(
John Warren56317e02015-08-12 20:48:32 +0000154 project['id'], description=p_desc2)['project']
Nayna Patele6331362013-08-12 06:59:48 +0000155 resp2_desc = body['description']
Nayna Patele6331362013-08-12 06:59:48 +0000156 self.assertNotEqual(resp1_desc, resp2_desc)
157
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600158 body = self.projects_client.show_project(project['id'])['project']
Nayna Patele6331362013-08-12 06:59:48 +0000159 resp3_desc = body['description']
160
161 self.assertNotEqual(resp1_desc, resp3_desc)
162 self.assertEqual(p_desc, resp1_desc)
163 self.assertEqual(resp2_desc, resp3_desc)
164
Chris Hoge7579c1a2015-02-26 14:12:15 -0800165 @test.idempotent_id('b6b25683-c97f-474d-a595-55d410b68100')
Nayna Patele6331362013-08-12 06:59:48 +0000166 def test_project_update_enable(self):
167 # Update the enabled attribute of a project
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000168 p_name = data_utils.rand_name('project')
Nayna Patele6331362013-08-12 06:59:48 +0000169 p_en = False
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600170 project = self.projects_client.create_project(p_name,
171 enabled=p_en)['project']
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000172 self.data.projects.append(project)
Nayna Patele6331362013-08-12 06:59:48 +0000173
174 resp1_en = project['enabled']
175
176 p_en2 = True
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600177 body = self.projects_client.update_project(project['id'],
178 enabled=p_en2)['project']
Nayna Patele6331362013-08-12 06:59:48 +0000179 resp2_en = body['enabled']
Nayna Patele6331362013-08-12 06:59:48 +0000180 self.assertNotEqual(resp1_en, resp2_en)
181
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600182 body = self.projects_client.show_project(project['id'])['project']
Nayna Patele6331362013-08-12 06:59:48 +0000183 resp3_en = body['enabled']
184
185 self.assertNotEqual(resp1_en, resp3_en)
186 self.assertEqual('false', str(resp1_en).lower())
187 self.assertEqual(resp2_en, resp3_en)
188
Chris Hoge7579c1a2015-02-26 14:12:15 -0800189 @test.idempotent_id('59398d4a-5dc5-4f86-9a4c-c26cc804d6c6')
Nayna Patele6331362013-08-12 06:59:48 +0000190 def test_associate_user_to_project(self):
Matthew Treinish57160582014-06-09 17:13:48 -0400191 # Associate a user to a project
192 # Create a Project
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000193 p_name = data_utils.rand_name('project')
Yaroslav Lobankov47a93ab2016-02-07 16:32:49 -0600194 project = self.projects_client.create_project(p_name)['project']
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000195 self.data.projects.append(project)
Nayna Patele6331362013-08-12 06:59:48 +0000196
Matthew Treinish57160582014-06-09 17:13:48 -0400197 # Create a User
Ken'ichi Ohmichi96508472015-03-23 01:43:42 +0000198 u_name = data_utils.rand_name('user')
Nayna Patele6331362013-08-12 06:59:48 +0000199 u_desc = u_name + 'description'
200 u_email = u_name + '@testmail.tm'
Zack Feldsteind8c5f7a2015-12-14 10:44:07 -0600201 u_password = data_utils.rand_password()
Daniel Mellado7aea5342016-02-09 09:10:12 +0000202 user = self.users_client.create_user(
Nayna Patele6331362013-08-12 06:59:48 +0000203 u_name, description=u_desc, password=u_password,
John Warren56317e02015-08-12 20:48:32 +0000204 email=u_email, project_id=project['id'])['user']
Nayna Patele6331362013-08-12 06:59:48 +0000205 # Delete the User at the end of this method
Daniel Mellado7aea5342016-02-09 09:10:12 +0000206 self.addCleanup(self.users_client.delete_user, user['id'])
Nayna Patele6331362013-08-12 06:59:48 +0000207
208 # Get User To validate the user details
Daniel Mellado7aea5342016-02-09 09:10:12 +0000209 new_user_get = self.users_client.show_user(user['id'])['user']
Matthew Treinish57160582014-06-09 17:13:48 -0400210 # Assert response body of GET
Nayna Patele6331362013-08-12 06:59:48 +0000211 self.assertEqual(u_name, new_user_get['name'])
212 self.assertEqual(u_desc, new_user_get['description'])
213 self.assertEqual(project['id'],
214 new_user_get['project_id'])
215 self.assertEqual(u_email, new_user_get['email'])