blob: 3fa4a89c4f68f5c9f58dbc8a58e0738338ba3e7d [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
Adam Gandelman85f5bed2014-06-19 16:48:17 -070016import StringIO
17
Sean Dague1937d092013-05-17 16:36:38 -040018from tempest.api.compute import base
Matthew Treinish481466b2012-12-20 17:16:01 -050019from tempest import clients
Masayuki Igawa259c1132013-10-31 17:48:44 +090020from tempest.common.utils import data_utils
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000021from tempest import config
Daryl Walleckdc9e0c42012-04-02 16:51:26 -050022from tempest import exceptions
Giulio Fidente92f77192013-08-26 17:13:28 +020023from tempest.openstack.common import log as logging
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):
Daryl Walleckced8eb82012-03-19 13:52:37 -050032 @classmethod
33 def setUpClass(cls):
Adam Gandelman85f5bed2014-06-19 16:48:17 -070034 if not CONF.service_available.glance:
35 raise cls.skipException('Glance is not available.')
Salvatore Orlando5a337242014-01-15 22:49:22 +000036 # No network resources required for this test
37 cls.set_network_resources()
Matthew Treinishf7fca6a2013-12-09 16:27:23 +000038 super(AuthorizationTestJSON, cls).setUpClass()
39 if not cls.multi_user:
Jay Pipesf38eaac2012-06-21 13:37:35 -040040 msg = "Need >1 user"
ivan-zhu1feeb382013-01-24 10:14:39 +080041 raise cls.skipException(msg)
Daryl Walleckced8eb82012-03-19 13:52:37 -050042 cls.client = cls.os.servers_client
43 cls.images_client = cls.os.images_client
Adam Gandelman85f5bed2014-06-19 16:48:17 -070044 cls.glance_client = cls.os.image_client
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053045 cls.keypairs_client = cls.os.keypairs_client
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +053046 cls.security_client = cls.os.security_groups_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050047
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000048 if CONF.compute.allow_tenant_isolation:
Matthew Treinishb86cda92013-07-29 11:22:23 -040049 creds = cls.isolated_creds.get_alt_creds()
Andrea Frittoli422fbdf2014-03-20 10:05:18 +000050 cls.alt_manager = clients.Manager(credentials=creds)
Jay Pipesf38eaac2012-06-21 13:37:35 -040051 else:
52 # Use the alt_XXX credentials in the config file
Matthew Treinish481466b2012-12-20 17:16:01 -050053 cls.alt_manager = clients.AltManager()
Daryl Walleckced8eb82012-03-19 13:52:37 -050054
Jay Pipesf38eaac2012-06-21 13:37:35 -040055 cls.alt_client = cls.alt_manager.servers_client
56 cls.alt_images_client = cls.alt_manager.images_client
57 cls.alt_keypairs_client = cls.alt_manager.keypairs_client
58 cls.alt_security_client = cls.alt_manager.security_groups_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050059
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090060 resp, server = cls.create_test_server(wait_until='ACTIVE')
Jay Pipesf38eaac2012-06-21 13:37:35 -040061 resp, cls.server = cls.client.get_server(server['id'])
Jay Pipes3f981df2012-03-27 18:59:44 -040062
Masayuki Igawa259c1132013-10-31 17:48:44 +090063 name = data_utils.rand_name('image')
Adam Gandelman85f5bed2014-06-19 16:48:17 -070064 resp, body = cls.glance_client.create_image(name=name,
Matthew Treinish1d14c542014-06-17 20:25:40 -040065 container_format='bare',
66 disk_format='raw',
67 is_public=False)
Adam Gandelman85f5bed2014-06-19 16:48:17 -070068 image_id = body['id']
69 image_file = StringIO.StringIO(('*' * 1024))
70 resp, body = cls.glance_client.update_image(image_id, data=image_file)
71 cls.glance_client.wait_for_image_status(image_id, 'active')
Jay Pipesf38eaac2012-06-21 13:37:35 -040072 resp, cls.image = cls.images_client.get_image(image_id)
Daryl Walleckced8eb82012-03-19 13:52:37 -050073
Masayuki Igawa259c1132013-10-31 17:48:44 +090074 cls.keypairname = data_utils.rand_name('keypair')
Jay Pipesf38eaac2012-06-21 13:37:35 -040075 resp, keypair = \
76 cls.keypairs_client.create_keypair(cls.keypairname)
Daryl Walleckced8eb82012-03-19 13:52:37 -050077
Masayuki Igawa259c1132013-10-31 17:48:44 +090078 name = data_utils.rand_name('security')
79 description = data_utils.rand_name('description')
nayna-pateleda1d122013-03-20 14:44:31 +000080 resp, cls.security_group = cls.security_client.create_security_group(
81 name, description)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053082
Jay Pipesf38eaac2012-06-21 13:37:35 -040083 parent_group_id = cls.security_group['id']
84 ip_protocol = 'tcp'
85 from_port = 22
86 to_port = 22
nayna-pateleda1d122013-03-20 14:44:31 +000087 resp, cls.rule = cls.security_client.create_security_group_rule(
88 parent_group_id, ip_protocol, from_port, to_port)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +053089
Daryl Walleckced8eb82012-03-19 13:52:37 -050090 @classmethod
91 def tearDownClass(cls):
Matthew Treinishf7fca6a2013-12-09 16:27:23 +000092 if cls.multi_user:
Daryl Walleckced8eb82012-03-19 13:52:37 -050093 cls.images_client.delete_image(cls.image['id'])
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053094 cls.keypairs_client.delete_keypair(cls.keypairname)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +053095 cls.security_client.delete_security_group(cls.security_group['id'])
nayna-pateleda1d122013-03-20 14:44:31 +000096 super(AuthorizationTestJSON, cls).tearDownClass()
Daryl Walleckced8eb82012-03-19 13:52:37 -050097
Yuiko Takadae9999d62014-03-06 09:22:54 +000098 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -040099 def test_get_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500100 # A GET request for a server on another user's account should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030101 self.assertRaises(exceptions.NotFound, self.alt_client.get_server,
102 self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500103
Yuiko Takadae9999d62014-03-06 09:22:54 +0000104 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400105 def test_delete_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500106 # A DELETE request for another user's server should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030107 self.assertRaises(exceptions.NotFound, self.alt_client.delete_server,
108 self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500109
Yuiko Takadae9999d62014-03-06 09:22:54 +0000110 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400111 def test_update_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500112 # An update server request for another user's server should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030113 self.assertRaises(exceptions.NotFound, self.alt_client.update_server,
114 self.server['id'], name='test')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500115
Yuiko Takadae9999d62014-03-06 09:22:54 +0000116 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400117 def test_list_server_addresses_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500118 # A list addresses request for another user's server should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030119 self.assertRaises(exceptions.NotFound, self.alt_client.list_addresses,
120 self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500121
Yuiko Takadae9999d62014-03-06 09:22:54 +0000122 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400123 def test_list_server_addresses_by_network_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500124 # A list address/network request for another user's server should fail
Daryl Walleckced8eb82012-03-19 13:52:37 -0500125 server_id = self.server['id']
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030126 self.assertRaises(exceptions.NotFound,
127 self.alt_client.list_addresses_by_network, server_id,
128 'public')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500129
Yuiko Takadae9999d62014-03-06 09:22:54 +0000130 @test.attr(type='gate')
sapan-kona37939762012-06-28 20:22:43 +0530131 def test_list_servers_with_alternate_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500132 # A list on servers from one tenant should not
133 # show on alternate tenant
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200134 # Listing servers from alternate tenant
sapan-kona37939762012-06-28 20:22:43 +0530135 alt_server_ids = []
136 resp, body = self.alt_client.list_servers()
137 alt_server_ids = [s['id'] for s in body['servers']]
138 self.assertNotIn(self.server['id'], alt_server_ids)
139
Yuiko Takadae9999d62014-03-06 09:22:54 +0000140 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400141 def test_change_password_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500142 # A change password request for another user's server should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030143 self.assertRaises(exceptions.NotFound, self.alt_client.change_password,
144 self.server['id'], 'newpass')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500145
Yuiko Takadae9999d62014-03-06 09:22:54 +0000146 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400147 def test_reboot_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500148 # A reboot request for another user's server should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030149 self.assertRaises(exceptions.NotFound, self.alt_client.reboot,
150 self.server['id'], 'HARD')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500151
Yuiko Takadae9999d62014-03-06 09:22:54 +0000152 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400153 def test_rebuild_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500154 # A rebuild request for another user's server should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030155 self.assertRaises(exceptions.NotFound, self.alt_client.rebuild,
156 self.server['id'], self.image_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500157
Yuiko Takadae9999d62014-03-06 09:22:54 +0000158 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400159 def test_resize_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500160 # A resize request for another user's server should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030161 self.assertRaises(exceptions.NotFound, self.alt_client.resize,
162 self.server['id'], self.flavor_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500163
Yuiko Takadae9999d62014-03-06 09:22:54 +0000164 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400165 def test_create_image_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500166 # A create image request for another user's server should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030167 self.assertRaises(exceptions.NotFound,
168 self.alt_images_client.create_image,
169 self.server['id'], 'testImage')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500170
Yuiko Takadae9999d62014-03-06 09:22:54 +0000171 @test.attr(type='gate')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500172 def test_create_server_with_unauthorized_image(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500173 # Server creation with another user's image should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030174 self.assertRaises(exceptions.BadRequest, self.alt_client.create_server,
175 'test', self.image['id'], self.flavor_ref)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500176
Yuiko Takadae9999d62014-03-06 09:22:54 +0000177 @test.attr(type='gate')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500178 def test_create_server_fails_when_tenant_incorrect(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500179 # A create server request should fail if the tenant id does not match
180 # the current user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000181 # Change the base URL to impersonate another user
182 self.alt_client.auth_provider.set_alt_auth_data(
183 request_part='url',
184 auth_data=self.client.auth_provider.auth_data
185 )
186 self.assertRaises(exceptions.BadRequest,
187 self.alt_client.create_server, 'test',
188 self.image['id'], self.flavor_ref)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530189
Yuiko Takadae9999d62014-03-06 09:22:54 +0000190 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400191 def test_create_keypair_in_analt_user_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500192 # A create keypair request should fail if the tenant id does not match
193 # the current user
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200194 # POST keypair with other user tenant
Masayuki Igawa259c1132013-10-31 17:48:44 +0900195 k_name = data_utils.rand_name('keypair-')
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530196 try:
197 # Change the base URL to impersonate another user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000198 self.alt_keypairs_client.auth_provider.set_alt_auth_data(
199 request_part='url',
200 auth_data=self.keypairs_client.auth_provider.auth_data
201 )
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530202 resp = {}
203 resp['status'] = None
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030204 self.assertRaises(exceptions.BadRequest,
205 self.alt_keypairs_client.create_keypair, k_name)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530206 finally:
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000207 # Next request the base_url is back to normal
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800208 if (resp['status'] is not None):
Jay Pipesf38eaac2012-06-21 13:37:35 -0400209 resp, _ = self.alt_keypairs_client.delete_keypair(k_name)
Giulio Fidente92f77192013-08-26 17:13:28 +0200210 LOG.error("Create keypair request should not happen "
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800211 "if the tenant id does not match the current user")
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530212
Yuiko Takadae9999d62014-03-06 09:22:54 +0000213 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400214 def test_get_keypair_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500215 # A GET request for another user's keypair should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030216 self.assertRaises(exceptions.NotFound,
217 self.alt_keypairs_client.get_keypair,
218 self.keypairname)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530219
Yuiko Takadae9999d62014-03-06 09:22:54 +0000220 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400221 def test_delete_keypair_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500222 # A DELETE request for another user's keypair should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030223 self.assertRaises(exceptions.NotFound,
224 self.alt_keypairs_client.delete_keypair,
225 self.keypairname)
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530226
Yuiko Takadae9999d62014-03-06 09:22:54 +0000227 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400228 def test_get_image_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500229 # A GET request for an image on another user's account should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030230 self.assertRaises(exceptions.NotFound,
231 self.alt_images_client.get_image, self.image['id'])
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530232
Yuiko Takadae9999d62014-03-06 09:22:54 +0000233 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400234 def test_delete_image_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500235 # A DELETE request for another user's image should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030236 self.assertRaises(exceptions.NotFound,
237 self.alt_images_client.delete_image,
238 self.image['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530239
Yuiko Takadae9999d62014-03-06 09:22:54 +0000240 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400241 def test_create_security_group_in_analt_user_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500242 # A create security group request should fail if the tenant id does not
243 # match the current user
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200244 # POST security group with other user tenant
Masayuki Igawa259c1132013-10-31 17:48:44 +0900245 s_name = data_utils.rand_name('security-')
246 s_description = data_utils.rand_name('security')
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530247 try:
248 # Change the base URL to impersonate another user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000249 self.alt_security_client.auth_provider.set_alt_auth_data(
250 request_part='url',
251 auth_data=self.security_client.auth_provider.auth_data
252 )
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530253 resp = {}
254 resp['status'] = None
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030255 self.assertRaises(exceptions.BadRequest,
256 self.alt_security_client.create_security_group,
257 s_name, s_description)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530258 finally:
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000259 # Next request the base_url is back to normal
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800260 if resp['status'] is not None:
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700261 self.alt_security_client.delete_security_group(resp['id'])
Giulio Fidente92f77192013-08-26 17:13:28 +0200262 LOG.error("Create Security Group request should not happen if"
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530263 "the tenant id does not match the current user")
264
Yuiko Takadae9999d62014-03-06 09:22:54 +0000265 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400266 def test_get_security_group_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500267 # A GET request for another user's security group should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030268 self.assertRaises(exceptions.NotFound,
269 self.alt_security_client.get_security_group,
270 self.security_group['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530271
Yuiko Takadae9999d62014-03-06 09:22:54 +0000272 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400273 def test_delete_security_group_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500274 # A DELETE request for another user's security group should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030275 self.assertRaises(exceptions.NotFound,
276 self.alt_security_client.delete_security_group,
277 self.security_group['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530278
Yuiko Takadae9999d62014-03-06 09:22:54 +0000279 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400280 def test_create_security_group_rule_in_analt_user_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500281 # A create security group rule request should fail if the tenant id
282 # does not match the current user
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200283 # POST security group rule with other user tenant
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530284 parent_group_id = self.security_group['id']
285 ip_protocol = 'icmp'
286 from_port = -1
287 to_port = -1
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530288 try:
289 # Change the base URL to impersonate another user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000290 self.alt_security_client.auth_provider.set_alt_auth_data(
291 request_part='url',
292 auth_data=self.security_client.auth_provider.auth_data
293 )
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530294 resp = {}
295 resp['status'] = None
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030296 self.assertRaises(exceptions.BadRequest,
297 self.alt_security_client.
298 create_security_group_rule,
299 parent_group_id, ip_protocol, from_port,
300 to_port)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530301 finally:
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000302 # Next request the base_url is back to normal
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800303 if resp['status'] is not None:
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700304 self.alt_security_client.delete_security_group_rule(resp['id'])
Giulio Fidente92f77192013-08-26 17:13:28 +0200305 LOG.error("Create security group rule request should not "
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530306 "happen if the tenant id does not match the"
307 " current user")
308
Yuiko Takadae9999d62014-03-06 09:22:54 +0000309 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400310 def test_delete_security_group_rule_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500311 # A DELETE request for another user's security group rule
312 # should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030313 self.assertRaises(exceptions.NotFound,
314 self.alt_security_client.delete_security_group_rule,
315 self.rule['id'])
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530316
Yuiko Takadae9999d62014-03-06 09:22:54 +0000317 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400318 def test_set_metadata_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500319 # A set metadata for another user's server should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530320 req_metadata = {'meta1': 'data1', 'meta2': 'data2'}
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030321 self.assertRaises(exceptions.NotFound,
322 self.alt_client.set_server_metadata,
323 self.server['id'],
324 req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530325
Yuiko Takadae9999d62014-03-06 09:22:54 +0000326 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400327 def test_set_metadata_of_alt_account_image_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500328 # A set metadata for another user's image should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530329 req_metadata = {'meta1': 'value1', 'meta2': 'value2'}
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030330 self.assertRaises(exceptions.NotFound,
331 self.alt_images_client.set_image_metadata,
332 self.image['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530333
Yuiko Takadae9999d62014-03-06 09:22:54 +0000334 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400335 def test_get_metadata_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500336 # A get metadata for another user's server should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530337 req_metadata = {'meta1': 'data1'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800338 self.client.set_server_metadata(self.server['id'], req_metadata)
hi2suresh31bb7cb2013-03-14 04:53:49 +0000339 self.addCleanup(self.client.delete_server_metadata_item,
340 self.server['id'], 'meta1')
341 self.assertRaises(exceptions.NotFound,
342 self.alt_client.get_server_metadata_item,
343 self.server['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530344
Yuiko Takadae9999d62014-03-06 09:22:54 +0000345 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400346 def test_get_metadata_of_alt_account_image_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500347 # A get metadata for another user's image should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530348 req_metadata = {'meta1': 'value1'}
hi2sureshd0e24122013-03-15 03:06:53 +0000349 self.addCleanup(self.images_client.delete_image_metadata_item,
350 self.image['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530351 self.images_client.set_image_metadata(self.image['id'],
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800352 req_metadata)
hi2sureshd0e24122013-03-15 03:06:53 +0000353 self.assertRaises(exceptions.NotFound,
354 self.alt_images_client.get_image_metadata_item,
355 self.image['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530356
Yuiko Takadae9999d62014-03-06 09:22:54 +0000357 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400358 def test_delete_metadata_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500359 # A delete metadata for another user's server should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530360 req_metadata = {'meta1': 'data1'}
hi2sureshd0e24122013-03-15 03:06:53 +0000361 self.addCleanup(self.client.delete_server_metadata_item,
362 self.server['id'], 'meta1')
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800363 self.client.set_server_metadata(self.server['id'], req_metadata)
hi2sureshd0e24122013-03-15 03:06:53 +0000364 self.assertRaises(exceptions.NotFound,
365 self.alt_client.delete_server_metadata_item,
366 self.server['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530367
Yuiko Takadae9999d62014-03-06 09:22:54 +0000368 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400369 def test_delete_metadata_of_alt_account_image_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500370 # A delete metadata for another user's image should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530371 req_metadata = {'meta1': 'data1'}
hi2sureshd0e24122013-03-15 03:06:53 +0000372 self.addCleanup(self.images_client.delete_image_metadata_item,
373 self.image['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530374 self.images_client.set_image_metadata(self.image['id'],
375 req_metadata)
hi2sureshd0e24122013-03-15 03:06:53 +0000376 self.assertRaises(exceptions.NotFound,
377 self.alt_images_client.delete_image_metadata_item,
378 self.image['id'], 'meta1')
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530379
Yuiko Takadae9999d62014-03-06 09:22:54 +0000380 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400381 def test_get_console_output_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500382 # A Get Console Output for another user's server should fail
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030383 self.assertRaises(exceptions.NotFound,
384 self.alt_client.get_console_output,
385 self.server['id'], 10)
nayna-pateleda1d122013-03-20 14:44:31 +0000386
387
388class AuthorizationTestXML(AuthorizationTestJSON):
389 _interface = 'xml'