blob: e363fc4920a7be63d1fb7312d2d5d688708bc602 [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipes13b479b2012-06-11 14:52:27 -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.
Daryl Walleckced8eb82012-03-19 13:52:37 -050015
Matthew Treinishb0c65f22015-04-23 09:09:41 -040016import six
Adam Gandelman85f5bed2014-06-19 16:48:17 -070017
Doug Hellmann583ce2c2015-03-11 14:55:46 +000018from oslo_log import log as logging
Masayuki Igawabfa07602015-01-20 18:47:17 +090019from tempest_lib import exceptions as lib_exc
20
Sean Dague1937d092013-05-17 16:36:38 -040021from tempest.api.compute import base
Fei Long Wangd39431f2015-05-14 11:30:48 +120022from tempest.common.utils import data_utils
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000023from tempest import config
Yuiko Takadae9999d62014-03-06 09:22:54 +000024from tempest import test
Daryl Walleckced8eb82012-03-19 13:52:37 -050025
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000026CONF = config.CONF
27
Giulio Fidente92f77192013-08-26 17:13:28 +020028LOG = logging.getLogger(__name__)
29
Daryl Walleckced8eb82012-03-19 13:52:37 -050030
ivan-zhuf2b00502013-10-18 10:06:52 +080031class AuthorizationTestJSON(base.BaseV2ComputeTest):
Emily Hugenbruche7991d92014-12-12 16:53:36 +000032
Andrea Frittolib21de6c2015-02-06 20:12:38 +000033 credentials = ['primary', 'alt']
34
Daryl Walleckced8eb82012-03-19 13:52:37 -050035 @classmethod
Emily Hugenbruche7991d92014-12-12 16:53:36 +000036 def skip_checks(cls):
37 super(AuthorizationTestJSON, cls).skip_checks()
Adam Gandelman85f5bed2014-06-19 16:48:17 -070038 if not CONF.service_available.glance:
39 raise cls.skipException('Glance is not available.')
Emily Hugenbruche7991d92014-12-12 16:53:36 +000040
41 @classmethod
42 def setup_credentials(cls):
Salvatore Orlando5a337242014-01-15 22:49:22 +000043 # No network resources required for this test
44 cls.set_network_resources()
Emily Hugenbruche7991d92014-12-12 16:53:36 +000045 super(AuthorizationTestJSON, cls).setup_credentials()
Emily Hugenbruche7991d92014-12-12 16:53:36 +000046
47 @classmethod
48 def setup_clients(cls):
49 super(AuthorizationTestJSON, cls).setup_clients()
Daryl Walleckced8eb82012-03-19 13:52:37 -050050 cls.client = cls.os.servers_client
51 cls.images_client = cls.os.images_client
Adam Gandelman85f5bed2014-06-19 16:48:17 -070052 cls.glance_client = cls.os.image_client
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053053 cls.keypairs_client = cls.os.keypairs_client
John Warrenf2345512015-12-10 13:39:30 -050054 cls.security_client = cls.os.compute_security_groups_client
Ken'ichi Ohmichi685cd172015-07-13 01:29:57 +000055 cls.rule_client = cls.os.security_group_rules_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050056
Jay Pipesf38eaac2012-06-21 13:37:35 -040057 cls.alt_client = cls.alt_manager.servers_client
58 cls.alt_images_client = cls.alt_manager.images_client
59 cls.alt_keypairs_client = cls.alt_manager.keypairs_client
John Warrenf2345512015-12-10 13:39:30 -050060 cls.alt_security_client = (
61 cls.alt_manager.compute_security_groups_client)
Ken'ichi Ohmichi685cd172015-07-13 01:29:57 +000062 cls.alt_rule_client = cls.alt_manager.security_group_rules_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050063
Emily Hugenbruche7991d92014-12-12 16:53:36 +000064 @classmethod
65 def resource_setup(cls):
66 super(AuthorizationTestJSON, cls).resource_setup()
David Kranz0fb14292015-02-11 15:55:20 -050067 server = cls.create_test_server(wait_until='ACTIVE')
ghanshyam0f825252015-08-25 16:02:50 +090068 cls.server = cls.client.show_server(server['id'])['server']
Jay Pipes3f981df2012-03-27 18:59:44 -040069
Masayuki Igawa259c1132013-10-31 17:48:44 +090070 name = data_utils.rand_name('image')
David Kranz34f18782015-01-06 13:43:55 -050071 body = cls.glance_client.create_image(name=name,
72 container_format='bare',
73 disk_format='raw',
John Warren66207252015-07-31 15:51:02 -040074 is_public=False)['image']
Adam Gandelman85f5bed2014-06-19 16:48:17 -070075 image_id = body['id']
Matthew Treinishb0c65f22015-04-23 09:09:41 -040076 image_file = six.StringIO(('*' * 1024))
John Warren66207252015-07-31 15:51:02 -040077 body = cls.glance_client.update_image(image_id,
78 data=image_file)['image']
Adam Gandelman85f5bed2014-06-19 16:48:17 -070079 cls.glance_client.wait_for_image_status(image_id, 'active')
ghanshyam1756e0b2015-08-18 19:19:05 +090080 cls.image = cls.images_client.show_image(image_id)['image']
Daryl Walleckced8eb82012-03-19 13:52:37 -050081
Masayuki Igawa259c1132013-10-31 17:48:44 +090082 cls.keypairname = data_utils.rand_name('keypair')
Ken'ichi Ohmichie364bce2015-07-17 10:27:59 +000083 cls.keypairs_client.create_keypair(name=cls.keypairname)
Daryl Walleckced8eb82012-03-19 13:52:37 -050084
Masayuki Igawa259c1132013-10-31 17:48:44 +090085 name = data_utils.rand_name('security')
86 description = data_utils.rand_name('description')
David Kranz9964b4e2015-02-06 15:45:29 -050087 cls.security_group = cls.security_client.create_security_group(
ghanshyamb610b772015-08-24 17:29:38 +090088 name=name, description=description)['security_group']
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053089
Jay Pipesf38eaac2012-06-21 13:37:35 -040090 parent_group_id = cls.security_group['id']
91 ip_protocol = 'tcp'
92 from_port = 22
93 to_port = 22
Ken'ichi Ohmichi685cd172015-07-13 01:29:57 +000094 cls.rule = cls.rule_client.create_security_group_rule(
Ken'ichi Ohmichieb7eeec2015-07-21 01:00:06 +000095 parent_group_id=parent_group_id, ip_protocol=ip_protocol,
ghanshyam0a5e1232015-08-24 16:59:59 +090096 from_port=from_port, to_port=to_port)['security_group_rule']
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +053097
Daryl Walleckced8eb82012-03-19 13:52:37 -050098 @classmethod
Andrea Frittoli50bb80d2014-09-15 12:34:27 +010099 def resource_cleanup(cls):
Andrea Frittoli (andreaf)1f342412015-05-12 16:37:19 +0100100 if hasattr(cls, 'image'):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500101 cls.images_client.delete_image(cls.image['id'])
Andrea Frittoli (andreaf)1f342412015-05-12 16:37:19 +0100102 if hasattr(cls, 'keypairname'):
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530103 cls.keypairs_client.delete_keypair(cls.keypairname)
Andrea Frittoli (andreaf)1f342412015-05-12 16:37:19 +0100104 if hasattr(cls, 'security_group'):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530105 cls.security_client.delete_security_group(cls.security_group['id'])
Andrea Frittoli50bb80d2014-09-15 12:34:27 +0100106 super(AuthorizationTestJSON, cls).resource_cleanup()
Daryl Walleckced8eb82012-03-19 13:52:37 -0500107
Chris Hoge7579c1a2015-02-26 14:12:15 -0800108 @test.idempotent_id('56816e4a-bd34-47b5-aee9-268c3efeb5d4')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400109 def test_get_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500110 # A GET request for a server on another user's account should fail
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +0000111 self.assertRaises(lib_exc.NotFound, self.alt_client.show_server,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030112 self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500113
Chris Hoge7579c1a2015-02-26 14:12:15 -0800114 @test.idempotent_id('fb8a4870-6d9d-44ad-8375-95d52e98d9f6')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400115 def test_delete_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500116 # A DELETE request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900117 self.assertRaises(lib_exc.NotFound, self.alt_client.delete_server,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030118 self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500119
Chris Hoge7579c1a2015-02-26 14:12:15 -0800120 @test.idempotent_id('d792f91f-1d49-4eb5-b1ff-b229c4b9dc64')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400121 def test_update_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500122 # An update server request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900123 self.assertRaises(lib_exc.NotFound, self.alt_client.update_server,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030124 self.server['id'], name='test')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500125
Chris Hoge7579c1a2015-02-26 14:12:15 -0800126 @test.idempotent_id('488f24df-d7f7-4207-949a-f17fcb8e8769')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400127 def test_list_server_addresses_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500128 # A list addresses request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900129 self.assertRaises(lib_exc.NotFound, self.alt_client.list_addresses,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030130 self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500131
Chris Hoge7579c1a2015-02-26 14:12:15 -0800132 @test.idempotent_id('00b442d0-2e72-40e7-9b1f-31772e36da01')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400133 def test_list_server_addresses_by_network_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500134 # A list address/network request for another user's server should fail
Daryl Walleckced8eb82012-03-19 13:52:37 -0500135 server_id = self.server['id']
Masayuki Igawabfa07602015-01-20 18:47:17 +0900136 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030137 self.alt_client.list_addresses_by_network, server_id,
138 'public')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500139
Chris Hoge7579c1a2015-02-26 14:12:15 -0800140 @test.idempotent_id('cc90b35a-19f0-45d2-b680-2aabf934aa22')
sapan-kona37939762012-06-28 20:22:43 +0530141 def test_list_servers_with_alternate_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500142 # A list on servers from one tenant should not
143 # show on alternate tenant
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200144 # Listing servers from alternate tenant
sapan-kona37939762012-06-28 20:22:43 +0530145 alt_server_ids = []
David Kranzae99b9a2015-02-16 13:37:01 -0500146 body = self.alt_client.list_servers()
sapan-kona37939762012-06-28 20:22:43 +0530147 alt_server_ids = [s['id'] for s in body['servers']]
148 self.assertNotIn(self.server['id'], alt_server_ids)
149
Chris Hoge7579c1a2015-02-26 14:12:15 -0800150 @test.idempotent_id('376dbc16-0779-4384-a723-752774799641')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400151 def test_change_password_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500152 # A change password request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900153 self.assertRaises(lib_exc.NotFound, self.alt_client.change_password,
Ken'ichi Ohmichie6349f32015-12-09 06:47:54 +0000154 self.server['id'], adminPass='newpass')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500155
Chris Hoge7579c1a2015-02-26 14:12:15 -0800156 @test.idempotent_id('14cb5ff5-f646-45ca-8f51-09081d6c0c24')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400157 def test_reboot_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500158 # A reboot request for another user's server should fail
Ken'ichi Ohmichi5271b0f2015-08-10 07:53:27 +0000159 self.assertRaises(lib_exc.NotFound, self.alt_client.reboot_server,
Ken'ichi Ohmichi36b714c2015-12-09 08:12:47 +0000160 self.server['id'], type='HARD')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500161
Chris Hoge7579c1a2015-02-26 14:12:15 -0800162 @test.idempotent_id('8a0bce51-cd00-480b-88ba-dbc7d8408a37')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400163 def test_rebuild_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500164 # A rebuild request for another user's server should fail
Ken'ichi Ohmichi5271b0f2015-08-10 07:53:27 +0000165 self.assertRaises(lib_exc.NotFound, self.alt_client.rebuild_server,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030166 self.server['id'], self.image_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500167
Chris Hoge7579c1a2015-02-26 14:12:15 -0800168 @test.idempotent_id('e4da647e-f982-4e61-9dad-1d1abebfb933')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400169 def test_resize_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500170 # A resize request for another user's server should fail
Ken'ichi Ohmichi5271b0f2015-08-10 07:53:27 +0000171 self.assertRaises(lib_exc.NotFound, self.alt_client.resize_server,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030172 self.server['id'], self.flavor_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500173
Chris Hoge7579c1a2015-02-26 14:12:15 -0800174 @test.idempotent_id('a9fe8112-0ffa-4902-b061-f892bd5fe0d3')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400175 def test_create_image_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500176 # A create image request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900177 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030178 self.alt_images_client.create_image,
Ken'ichi Ohmichi28f18672015-07-17 10:00:38 +0000179 self.server['id'], name='testImage')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500180
Chris Hoge7579c1a2015-02-26 14:12:15 -0800181 @test.idempotent_id('95d445f6-babc-4f2e-aea3-aa24ec5e7f0d')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500182 def test_create_server_with_unauthorized_image(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500183 # Server creation with another user's image should fail
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900184 self.assertRaises(lib_exc.BadRequest, self.alt_client.create_server,
Ken'ichi Ohmichif2d436e2015-09-03 01:13:16 +0000185 name='test', imageRef=self.image['id'],
186 flavorRef=self.flavor_ref)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500187
Chris Hoge7579c1a2015-02-26 14:12:15 -0800188 @test.idempotent_id('acf8724b-142b-4044-82c3-78d31a533f24')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500189 def test_create_server_fails_when_tenant_incorrect(self):
Sean Daguef749cd72015-10-14 08:21:59 -0400190 # BUG(sdague): this test should fail because of bad auth url,
191 # which means that when we run with a service catalog without
192 # project_id in the urls, it should fail to fail, and thus
193 # fail the test. It does not.
194 #
195 # The 400 BadRequest is clearly ambiguous, and something else
196 # is wrong about this request. This should be fixed.
197 #
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500198 # A create server request should fail if the tenant id does not match
199 # the current user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000200 # Change the base URL to impersonate another user
201 self.alt_client.auth_provider.set_alt_auth_data(
202 request_part='url',
203 auth_data=self.client.auth_provider.auth_data
204 )
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900205 self.assertRaises(lib_exc.BadRequest,
Ken'ichi Ohmichif2d436e2015-09-03 01:13:16 +0000206 self.alt_client.create_server, name='test',
207 imageRef=self.image['id'], flavorRef=self.flavor_ref)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530208
Chris Hoge7579c1a2015-02-26 14:12:15 -0800209 @test.idempotent_id('f03d1ded-7fd4-4d29-bc13-e2391f29c625')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400210 def test_create_keypair_in_analt_user_tenant(self):
Sean Daguef749cd72015-10-14 08:21:59 -0400211 """create keypair should not function for alternate tenant
212
213 POST {alt_service_url}/os-keypairs
214
215 Attempt to create a keypair against an alternate tenant by
216 changing using a different tenant's service url. This should
217 return a BadRequest. This tests basic tenant isolation protections.
218
219 NOTE(sdague): if the environment does not use project_id in
220 the service urls, this test is not valid. Skip under these
221 conditions.
222
223 """
224 if self.alt_keypairs_client.base_url == self.keypairs_client.base_url:
225 raise self.skipException("Service urls don't include project_id")
226
Ken'ichi Ohmichi4937f562015-03-23 00:15:01 +0000227 k_name = data_utils.rand_name('keypair')
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530228 try:
229 # Change the base URL to impersonate another user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000230 self.alt_keypairs_client.auth_provider.set_alt_auth_data(
231 request_part='url',
232 auth_data=self.keypairs_client.auth_provider.auth_data
233 )
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530234 resp = {}
235 resp['status'] = None
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900236 self.assertRaises(lib_exc.BadRequest,
Ken'ichi Ohmichie364bce2015-07-17 10:27:59 +0000237 self.alt_keypairs_client.create_keypair,
238 name=k_name)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530239 finally:
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000240 # Next request the base_url is back to normal
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800241 if (resp['status'] is not None):
David Kranz173f0e02015-02-06 13:47:57 -0500242 self.alt_keypairs_client.delete_keypair(k_name)
Giulio Fidente92f77192013-08-26 17:13:28 +0200243 LOG.error("Create keypair request should not happen "
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800244 "if the tenant id does not match the current user")
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530245
Chris Hoge7579c1a2015-02-26 14:12:15 -0800246 @test.idempotent_id('85bcdd8f-56b4-4868-ae56-63fbf6f7e405')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400247 def test_get_keypair_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500248 # A GET request for another user's keypair should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900249 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichi0943d9b2015-06-17 02:27:05 +0000250 self.alt_keypairs_client.show_keypair,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030251 self.keypairname)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530252
Chris Hoge7579c1a2015-02-26 14:12:15 -0800253 @test.idempotent_id('6d841683-a8e0-43da-a1b8-b339f7692b61')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400254 def test_delete_keypair_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500255 # A DELETE request for another user's keypair should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900256 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030257 self.alt_keypairs_client.delete_keypair,
258 self.keypairname)
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530259
Chris Hoge7579c1a2015-02-26 14:12:15 -0800260 @test.idempotent_id('fcb2e144-36e3-4dfb-9f9f-e72fcdec5656')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400261 def test_get_image_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500262 # A GET request for an image on another user's account should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900263 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichi5d410762015-05-22 01:10:03 +0000264 self.alt_images_client.show_image, self.image['id'])
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530265
Chris Hoge7579c1a2015-02-26 14:12:15 -0800266 @test.idempotent_id('9facb962-f043-4a9d-b9ee-166a32dea098')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400267 def test_delete_image_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500268 # A DELETE request for another user's image should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900269 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030270 self.alt_images_client.delete_image,
271 self.image['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530272
Chris Hoge7579c1a2015-02-26 14:12:15 -0800273 @test.idempotent_id('752c917e-83be-499d-a422-3559127f7d3c')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400274 def test_create_security_group_in_analt_user_tenant(self):
Sean Daguef749cd72015-10-14 08:21:59 -0400275 """create security group should not function for alternate tenant
276
277 POST {alt_service_url}/os-security-groups
278
279 Attempt to create a security group against an alternate tenant
280 by changing using a different tenant's service url. This
281 should return a BadRequest. This tests basic tenant isolation
282 protections.
283
284 NOTE(sdague): if the environment does not use project_id in
285 the service urls, this test is not valid. Skip under these
286 conditions.
287
288 """
289 if self.alt_security_client.base_url == self.security_client.base_url:
290 raise self.skipException("Service urls don't include project_id")
291
Ken'ichi Ohmichi4937f562015-03-23 00:15:01 +0000292 s_name = data_utils.rand_name('security')
Masayuki Igawa259c1132013-10-31 17:48:44 +0900293 s_description = data_utils.rand_name('security')
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530294 try:
295 # Change the base URL to impersonate another user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000296 self.alt_security_client.auth_provider.set_alt_auth_data(
297 request_part='url',
298 auth_data=self.security_client.auth_provider.auth_data
299 )
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530300 resp = {}
301 resp['status'] = None
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900302 self.assertRaises(lib_exc.BadRequest,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030303 self.alt_security_client.create_security_group,
Ken'ichi Ohmichi34563cc2015-07-21 00:53:17 +0000304 name=s_name, description=s_description)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530305 finally:
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000306 # Next request the base_url is back to normal
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800307 if resp['status'] is not None:
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700308 self.alt_security_client.delete_security_group(resp['id'])
Giulio Fidente92f77192013-08-26 17:13:28 +0200309 LOG.error("Create Security Group request should not happen if"
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530310 "the tenant id does not match the current user")
311
Chris Hoge7579c1a2015-02-26 14:12:15 -0800312 @test.idempotent_id('9db3590f-4d15-4e5f-985e-b28514919a6f')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400313 def test_get_security_group_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500314 # A GET request for another user's security group should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900315 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichi217f2f32015-06-17 02:52:44 +0000316 self.alt_security_client.show_security_group,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030317 self.security_group['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530318
Chris Hoge7579c1a2015-02-26 14:12:15 -0800319 @test.idempotent_id('155387a5-2bbc-4acf-ab06-698dae537ea5')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400320 def test_delete_security_group_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500321 # A DELETE request for another user's security group should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900322 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030323 self.alt_security_client.delete_security_group,
324 self.security_group['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530325
Chris Hoge7579c1a2015-02-26 14:12:15 -0800326 @test.idempotent_id('b2b76de0-210a-4089-b921-591c9ec552f6')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400327 def test_create_security_group_rule_in_analt_user_tenant(self):
Sean Daguef749cd72015-10-14 08:21:59 -0400328 """create security group rule should not function for alternate tenant
329
330 POST {alt_service_url}/os-security-group-rules
331
332 Attempt to create a security group rule against an alternate
333 tenant by changing using a different tenant's service
334 url. This should return a BadRequest. This tests basic tenant
335 isolation protections.
336
337 NOTE(sdague): if the environment does not use project_id in
338 the service urls, this test is not valid. Skip under these
339 conditions.
340
341 """
342 if self.alt_security_client.base_url == self.security_client.base_url:
343 raise self.skipException("Service urls don't include project_id")
344
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530345 parent_group_id = self.security_group['id']
346 ip_protocol = 'icmp'
347 from_port = -1
348 to_port = -1
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530349 try:
350 # Change the base URL to impersonate another user
Ken'ichi Ohmichi685cd172015-07-13 01:29:57 +0000351 self.alt_rule_client.auth_provider.set_alt_auth_data(
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000352 request_part='url',
Ken'ichi Ohmichi685cd172015-07-13 01:29:57 +0000353 auth_data=self.rule_client.auth_provider.auth_data
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000354 )
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530355 resp = {}
356 resp['status'] = None
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900357 self.assertRaises(lib_exc.BadRequest,
Ken'ichi Ohmichi685cd172015-07-13 01:29:57 +0000358 self.alt_rule_client.
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030359 create_security_group_rule,
Ken'ichi Ohmichieb7eeec2015-07-21 01:00:06 +0000360 parent_group_id=parent_group_id,
361 ip_protocol=ip_protocol,
362 from_port=from_port, to_port=to_port)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530363 finally:
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000364 # Next request the base_url is back to normal
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800365 if resp['status'] is not None:
Ken'ichi Ohmichi685cd172015-07-13 01:29:57 +0000366 self.alt_rule_client.delete_security_group_rule(resp['id'])
Giulio Fidente92f77192013-08-26 17:13:28 +0200367 LOG.error("Create security group rule request should not "
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530368 "happen if the tenant id does not match the"
369 " current user")
370
Chris Hoge7579c1a2015-02-26 14:12:15 -0800371 @test.idempotent_id('c6044177-37ef-4ce4-b12c-270ddf26d7da')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400372 def test_delete_security_group_rule_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500373 # A DELETE request for another user's security group rule
374 # should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900375 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichi685cd172015-07-13 01:29:57 +0000376 self.alt_rule_client.delete_security_group_rule,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030377 self.rule['id'])
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530378
Chris Hoge7579c1a2015-02-26 14:12:15 -0800379 @test.idempotent_id('c5f52351-53d9-4fc9-83e5-917f7f5e3d71')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400380 def test_set_metadata_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500381 # A set metadata for another user's server should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530382 req_metadata = {'meta1': 'data1', 'meta2': 'data2'}
Masayuki Igawabfa07602015-01-20 18:47:17 +0900383 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030384 self.alt_client.set_server_metadata,
385 self.server['id'],
386 req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530387
Chris Hoge7579c1a2015-02-26 14:12:15 -0800388 @test.idempotent_id('fb6f51e9-df15-4939-898d-1aca38c258f0')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400389 def test_set_metadata_of_alt_account_image_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500390 # A set metadata for another user's image should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530391 req_metadata = {'meta1': 'value1', 'meta2': 'value2'}
Masayuki Igawabfa07602015-01-20 18:47:17 +0900392 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030393 self.alt_images_client.set_image_metadata,
394 self.image['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530395
Chris Hoge7579c1a2015-02-26 14:12:15 -0800396 @test.idempotent_id('dea1936a-473d-49f2-92ad-97bb7aded22e')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400397 def test_get_metadata_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500398 # A get metadata for another user's server should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530399 req_metadata = {'meta1': 'data1'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800400 self.client.set_server_metadata(self.server['id'], req_metadata)
hi2suresh31bb7cb2013-03-14 04:53:49 +0000401 self.addCleanup(self.client.delete_server_metadata_item,
402 self.server['id'], 'meta1')
Masayuki Igawabfa07602015-01-20 18:47:17 +0900403 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichi277d1882015-11-20 00:44:06 +0000404 self.alt_client.show_server_metadata_item,
hi2suresh31bb7cb2013-03-14 04:53:49 +0000405 self.server['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530406
Chris Hoge7579c1a2015-02-26 14:12:15 -0800407 @test.idempotent_id('16b2d724-0d3b-4216-a9fa-97bd4d9cf670')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400408 def test_get_metadata_of_alt_account_image_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500409 # A get metadata for another user's image should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530410 req_metadata = {'meta1': 'value1'}
hi2sureshd0e24122013-03-15 03:06:53 +0000411 self.addCleanup(self.images_client.delete_image_metadata_item,
412 self.image['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530413 self.images_client.set_image_metadata(self.image['id'],
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800414 req_metadata)
Masayuki Igawabfa07602015-01-20 18:47:17 +0900415 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichi0943d9b2015-06-17 02:27:05 +0000416 self.alt_images_client.show_image_metadata_item,
hi2sureshd0e24122013-03-15 03:06:53 +0000417 self.image['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530418
Chris Hoge7579c1a2015-02-26 14:12:15 -0800419 @test.idempotent_id('79531e2e-e721-493c-8b30-a35db36fdaa6')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400420 def test_delete_metadata_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500421 # A delete metadata for another user's server should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530422 req_metadata = {'meta1': 'data1'}
hi2sureshd0e24122013-03-15 03:06:53 +0000423 self.addCleanup(self.client.delete_server_metadata_item,
424 self.server['id'], 'meta1')
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800425 self.client.set_server_metadata(self.server['id'], req_metadata)
Masayuki Igawabfa07602015-01-20 18:47:17 +0900426 self.assertRaises(lib_exc.NotFound,
hi2sureshd0e24122013-03-15 03:06:53 +0000427 self.alt_client.delete_server_metadata_item,
428 self.server['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530429
Chris Hoge7579c1a2015-02-26 14:12:15 -0800430 @test.idempotent_id('a5175dcf-cef8-43d6-9b77-3cb707d62e94')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400431 def test_delete_metadata_of_alt_account_image_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500432 # A delete metadata for another user's image should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530433 req_metadata = {'meta1': 'data1'}
hi2sureshd0e24122013-03-15 03:06:53 +0000434 self.addCleanup(self.images_client.delete_image_metadata_item,
435 self.image['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530436 self.images_client.set_image_metadata(self.image['id'],
437 req_metadata)
Masayuki Igawabfa07602015-01-20 18:47:17 +0900438 self.assertRaises(lib_exc.NotFound,
hi2sureshd0e24122013-03-15 03:06:53 +0000439 self.alt_images_client.delete_image_metadata_item,
440 self.image['id'], 'meta1')
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530441
Chris Hoge7579c1a2015-02-26 14:12:15 -0800442 @test.idempotent_id('b0c1e7a0-8853-40fd-8384-01f93d116cae')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400443 def test_get_console_output_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500444 # A Get Console Output for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900445 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030446 self.alt_client.get_console_output,
Ken'ichi Ohmichibf4766a2015-12-09 07:48:43 +0000447 self.server['id'], length=10)