blob: b64981f0cdaa59e733bfd79f092af2f99b68964d [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
Masayuki Igawabfa07602015-01-20 18:47:17 +090018from tempest_lib import exceptions as lib_exc
19
Sean Dague1937d092013-05-17 16:36:38 -040020from tempest.api.compute import base
Matthew Treinish481466b2012-12-20 17:16:01 -050021from tempest import clients
Masayuki Igawa259c1132013-10-31 17:48:44 +090022from tempest.common.utils import data_utils
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000023from tempest import config
Giulio Fidente92f77192013-08-26 17:13:28 +020024from tempest.openstack.common import log as logging
Yuiko Takadae9999d62014-03-06 09:22:54 +000025from tempest import test
Daryl Walleckced8eb82012-03-19 13:52:37 -050026
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000027CONF = config.CONF
28
Giulio Fidente92f77192013-08-26 17:13:28 +020029LOG = logging.getLogger(__name__)
30
Daryl Walleckced8eb82012-03-19 13:52:37 -050031
ivan-zhuf2b00502013-10-18 10:06:52 +080032class AuthorizationTestJSON(base.BaseV2ComputeTest):
Emily Hugenbruche7991d92014-12-12 16:53:36 +000033
Daryl Walleckced8eb82012-03-19 13:52:37 -050034 @classmethod
Emily Hugenbruche7991d92014-12-12 16:53:36 +000035 def skip_checks(cls):
36 super(AuthorizationTestJSON, cls).skip_checks()
Adam Gandelman85f5bed2014-06-19 16:48:17 -070037 if not CONF.service_available.glance:
38 raise cls.skipException('Glance is not available.')
Emily Hugenbruche7991d92014-12-12 16:53:36 +000039
40 @classmethod
41 def setup_credentials(cls):
Salvatore Orlando5a337242014-01-15 22:49:22 +000042 # No network resources required for this test
43 cls.set_network_resources()
Emily Hugenbruche7991d92014-12-12 16:53:36 +000044 super(AuthorizationTestJSON, cls).setup_credentials()
Matthew Treinishf7fca6a2013-12-09 16:27:23 +000045 if not cls.multi_user:
Jay Pipesf38eaac2012-06-21 13:37:35 -040046 msg = "Need >1 user"
ivan-zhu1feeb382013-01-24 10:14:39 +080047 raise cls.skipException(msg)
Emily Hugenbruche7991d92014-12-12 16:53:36 +000048
49 creds = cls.isolated_creds.get_alt_creds()
50 cls.alt_manager = clients.Manager(credentials=creds)
51
52 @classmethod
53 def setup_clients(cls):
54 super(AuthorizationTestJSON, cls).setup_clients()
Daryl Walleckced8eb82012-03-19 13:52:37 -050055 cls.client = cls.os.servers_client
56 cls.images_client = cls.os.images_client
Adam Gandelman85f5bed2014-06-19 16:48:17 -070057 cls.glance_client = cls.os.image_client
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053058 cls.keypairs_client = cls.os.keypairs_client
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +053059 cls.security_client = cls.os.security_groups_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050060
Jay Pipesf38eaac2012-06-21 13:37:35 -040061 cls.alt_client = cls.alt_manager.servers_client
62 cls.alt_images_client = cls.alt_manager.images_client
63 cls.alt_keypairs_client = cls.alt_manager.keypairs_client
64 cls.alt_security_client = cls.alt_manager.security_groups_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050065
Emily Hugenbruche7991d92014-12-12 16:53:36 +000066 @classmethod
67 def resource_setup(cls):
68 super(AuthorizationTestJSON, cls).resource_setup()
David Kranz0fb14292015-02-11 15:55:20 -050069 server = cls.create_test_server(wait_until='ACTIVE')
70 cls.server = cls.client.get_server(server['id'])
Jay Pipes3f981df2012-03-27 18:59:44 -040071
Masayuki Igawa259c1132013-10-31 17:48:44 +090072 name = data_utils.rand_name('image')
David Kranz34f18782015-01-06 13:43:55 -050073 body = cls.glance_client.create_image(name=name,
74 container_format='bare',
75 disk_format='raw',
76 is_public=False)
Adam Gandelman85f5bed2014-06-19 16:48:17 -070077 image_id = body['id']
78 image_file = StringIO.StringIO(('*' * 1024))
David Kranz34f18782015-01-06 13:43:55 -050079 body = cls.glance_client.update_image(image_id, data=image_file)
Adam Gandelman85f5bed2014-06-19 16:48:17 -070080 cls.glance_client.wait_for_image_status(image_id, 'active')
David Kranza5299eb2015-01-15 17:24:05 -050081 cls.image = cls.images_client.get_image(image_id)
Daryl Walleckced8eb82012-03-19 13:52:37 -050082
Masayuki Igawa259c1132013-10-31 17:48:44 +090083 cls.keypairname = data_utils.rand_name('keypair')
David Kranz173f0e02015-02-06 13:47:57 -050084 cls.keypairs_client.create_keypair(cls.keypairname)
Daryl Walleckced8eb82012-03-19 13:52:37 -050085
Masayuki Igawa259c1132013-10-31 17:48:44 +090086 name = data_utils.rand_name('security')
87 description = data_utils.rand_name('description')
David Kranz9964b4e2015-02-06 15:45:29 -050088 cls.security_group = cls.security_client.create_security_group(
nayna-pateleda1d122013-03-20 14:44:31 +000089 name, description)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053090
Jay Pipesf38eaac2012-06-21 13:37:35 -040091 parent_group_id = cls.security_group['id']
92 ip_protocol = 'tcp'
93 from_port = 22
94 to_port = 22
David Kranz9964b4e2015-02-06 15:45:29 -050095 cls.rule = cls.security_client.create_security_group_rule(
nayna-pateleda1d122013-03-20 14:44:31 +000096 parent_group_id, ip_protocol, from_port, to_port)
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):
Matthew Treinishf7fca6a2013-12-09 16:27:23 +0000100 if cls.multi_user:
Daryl Walleckced8eb82012-03-19 13:52:37 -0500101 cls.images_client.delete_image(cls.image['id'])
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530102 cls.keypairs_client.delete_keypair(cls.keypairname)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530103 cls.security_client.delete_security_group(cls.security_group['id'])
Andrea Frittoli50bb80d2014-09-15 12:34:27 +0100104 super(AuthorizationTestJSON, cls).resource_cleanup()
Daryl Walleckced8eb82012-03-19 13:52:37 -0500105
Yuiko Takadae9999d62014-03-06 09:22:54 +0000106 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400107 def test_get_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500108 # A GET request for a server on another user's account should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900109 self.assertRaises(lib_exc.NotFound, self.alt_client.get_server,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030110 self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500111
Yuiko Takadae9999d62014-03-06 09:22:54 +0000112 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400113 def test_delete_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500114 # A DELETE request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900115 self.assertRaises(lib_exc.NotFound, self.alt_client.delete_server,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030116 self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500117
Yuiko Takadae9999d62014-03-06 09:22:54 +0000118 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400119 def test_update_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500120 # An update server request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900121 self.assertRaises(lib_exc.NotFound, self.alt_client.update_server,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030122 self.server['id'], name='test')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500123
Yuiko Takadae9999d62014-03-06 09:22:54 +0000124 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400125 def test_list_server_addresses_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500126 # A list addresses request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900127 self.assertRaises(lib_exc.NotFound, self.alt_client.list_addresses,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030128 self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500129
Yuiko Takadae9999d62014-03-06 09:22:54 +0000130 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400131 def test_list_server_addresses_by_network_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500132 # A list address/network request for another user's server should fail
Daryl Walleckced8eb82012-03-19 13:52:37 -0500133 server_id = self.server['id']
Masayuki Igawabfa07602015-01-20 18:47:17 +0900134 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030135 self.alt_client.list_addresses_by_network, server_id,
136 'public')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500137
Yuiko Takadae9999d62014-03-06 09:22:54 +0000138 @test.attr(type='gate')
sapan-kona37939762012-06-28 20:22:43 +0530139 def test_list_servers_with_alternate_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500140 # A list on servers from one tenant should not
141 # show on alternate tenant
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200142 # Listing servers from alternate tenant
sapan-kona37939762012-06-28 20:22:43 +0530143 alt_server_ids = []
David Kranzae99b9a2015-02-16 13:37:01 -0500144 body = self.alt_client.list_servers()
sapan-kona37939762012-06-28 20:22:43 +0530145 alt_server_ids = [s['id'] for s in body['servers']]
146 self.assertNotIn(self.server['id'], alt_server_ids)
147
Yuiko Takadae9999d62014-03-06 09:22:54 +0000148 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400149 def test_change_password_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500150 # A change password request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900151 self.assertRaises(lib_exc.NotFound, self.alt_client.change_password,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030152 self.server['id'], 'newpass')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500153
Yuiko Takadae9999d62014-03-06 09:22:54 +0000154 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400155 def test_reboot_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500156 # A reboot request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900157 self.assertRaises(lib_exc.NotFound, self.alt_client.reboot,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030158 self.server['id'], 'HARD')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500159
Yuiko Takadae9999d62014-03-06 09:22:54 +0000160 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400161 def test_rebuild_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500162 # A rebuild request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900163 self.assertRaises(lib_exc.NotFound, self.alt_client.rebuild,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030164 self.server['id'], self.image_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500165
Yuiko Takadae9999d62014-03-06 09:22:54 +0000166 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400167 def test_resize_server_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500168 # A resize request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900169 self.assertRaises(lib_exc.NotFound, self.alt_client.resize,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030170 self.server['id'], self.flavor_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500171
Yuiko Takadae9999d62014-03-06 09:22:54 +0000172 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400173 def test_create_image_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500174 # A create image request for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900175 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030176 self.alt_images_client.create_image,
177 self.server['id'], 'testImage')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500178
Yuiko Takadae9999d62014-03-06 09:22:54 +0000179 @test.attr(type='gate')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500180 def test_create_server_with_unauthorized_image(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500181 # Server creation with another user's image should fail
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900182 self.assertRaises(lib_exc.BadRequest, self.alt_client.create_server,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030183 'test', self.image['id'], self.flavor_ref)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500184
Yuiko Takadae9999d62014-03-06 09:22:54 +0000185 @test.attr(type='gate')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500186 def test_create_server_fails_when_tenant_incorrect(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500187 # A create server request should fail if the tenant id does not match
188 # the current user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000189 # Change the base URL to impersonate another user
190 self.alt_client.auth_provider.set_alt_auth_data(
191 request_part='url',
192 auth_data=self.client.auth_provider.auth_data
193 )
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900194 self.assertRaises(lib_exc.BadRequest,
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000195 self.alt_client.create_server, 'test',
196 self.image['id'], self.flavor_ref)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530197
Yuiko Takadae9999d62014-03-06 09:22:54 +0000198 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400199 def test_create_keypair_in_analt_user_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500200 # A create keypair request should fail if the tenant id does not match
201 # the current user
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200202 # POST keypair with other user tenant
Masayuki Igawa259c1132013-10-31 17:48:44 +0900203 k_name = data_utils.rand_name('keypair-')
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530204 try:
205 # Change the base URL to impersonate another user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000206 self.alt_keypairs_client.auth_provider.set_alt_auth_data(
207 request_part='url',
208 auth_data=self.keypairs_client.auth_provider.auth_data
209 )
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530210 resp = {}
211 resp['status'] = None
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900212 self.assertRaises(lib_exc.BadRequest,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030213 self.alt_keypairs_client.create_keypair, k_name)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530214 finally:
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000215 # Next request the base_url is back to normal
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800216 if (resp['status'] is not None):
David Kranz173f0e02015-02-06 13:47:57 -0500217 self.alt_keypairs_client.delete_keypair(k_name)
Giulio Fidente92f77192013-08-26 17:13:28 +0200218 LOG.error("Create keypair request should not happen "
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800219 "if the tenant id does not match the current user")
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530220
Yuiko Takadae9999d62014-03-06 09:22:54 +0000221 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400222 def test_get_keypair_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500223 # A GET request for another user's keypair should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900224 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030225 self.alt_keypairs_client.get_keypair,
226 self.keypairname)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530227
Yuiko Takadae9999d62014-03-06 09:22:54 +0000228 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400229 def test_delete_keypair_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500230 # A DELETE request for another user's keypair should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900231 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030232 self.alt_keypairs_client.delete_keypair,
233 self.keypairname)
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530234
Yuiko Takadae9999d62014-03-06 09:22:54 +0000235 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400236 def test_get_image_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500237 # A GET request for an image on another user's account should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900238 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030239 self.alt_images_client.get_image, self.image['id'])
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530240
Yuiko Takadae9999d62014-03-06 09:22:54 +0000241 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400242 def test_delete_image_for_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500243 # A DELETE request for another user's image should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900244 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030245 self.alt_images_client.delete_image,
246 self.image['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530247
Yuiko Takadae9999d62014-03-06 09:22:54 +0000248 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400249 def test_create_security_group_in_analt_user_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500250 # A create security group request should fail if the tenant id does not
251 # match the current user
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200252 # POST security group with other user tenant
Masayuki Igawa259c1132013-10-31 17:48:44 +0900253 s_name = data_utils.rand_name('security-')
254 s_description = data_utils.rand_name('security')
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530255 try:
256 # Change the base URL to impersonate another user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000257 self.alt_security_client.auth_provider.set_alt_auth_data(
258 request_part='url',
259 auth_data=self.security_client.auth_provider.auth_data
260 )
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530261 resp = {}
262 resp['status'] = None
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900263 self.assertRaises(lib_exc.BadRequest,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030264 self.alt_security_client.create_security_group,
265 s_name, s_description)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530266 finally:
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000267 # Next request the base_url is back to normal
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800268 if resp['status'] is not None:
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700269 self.alt_security_client.delete_security_group(resp['id'])
Giulio Fidente92f77192013-08-26 17:13:28 +0200270 LOG.error("Create Security Group request should not happen if"
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530271 "the tenant id does not match the current user")
272
Yuiko Takadae9999d62014-03-06 09:22:54 +0000273 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400274 def test_get_security_group_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500275 # A GET request for another user's security group should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900276 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030277 self.alt_security_client.get_security_group,
278 self.security_group['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530279
Yuiko Takadae9999d62014-03-06 09:22:54 +0000280 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400281 def test_delete_security_group_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500282 # A DELETE request for another user's security group should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900283 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030284 self.alt_security_client.delete_security_group,
285 self.security_group['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530286
Yuiko Takadae9999d62014-03-06 09:22:54 +0000287 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400288 def test_create_security_group_rule_in_analt_user_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500289 # A create security group rule request should fail if the tenant id
290 # does not match the current user
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200291 # POST security group rule with other user tenant
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530292 parent_group_id = self.security_group['id']
293 ip_protocol = 'icmp'
294 from_port = -1
295 to_port = -1
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530296 try:
297 # Change the base URL to impersonate another user
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000298 self.alt_security_client.auth_provider.set_alt_auth_data(
299 request_part='url',
300 auth_data=self.security_client.auth_provider.auth_data
301 )
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530302 resp = {}
303 resp['status'] = None
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900304 self.assertRaises(lib_exc.BadRequest,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030305 self.alt_security_client.
306 create_security_group_rule,
307 parent_group_id, ip_protocol, from_port,
308 to_port)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530309 finally:
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000310 # Next request the base_url is back to normal
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800311 if resp['status'] is not None:
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700312 self.alt_security_client.delete_security_group_rule(resp['id'])
Giulio Fidente92f77192013-08-26 17:13:28 +0200313 LOG.error("Create security group rule request should not "
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530314 "happen if the tenant id does not match the"
315 " current user")
316
Yuiko Takadae9999d62014-03-06 09:22:54 +0000317 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400318 def test_delete_security_group_rule_of_alt_account_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500319 # A DELETE request for another user's security group rule
320 # should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900321 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030322 self.alt_security_client.delete_security_group_rule,
323 self.rule['id'])
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530324
Yuiko Takadae9999d62014-03-06 09:22:54 +0000325 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400326 def test_set_metadata_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500327 # A set metadata for another user's server should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530328 req_metadata = {'meta1': 'data1', 'meta2': 'data2'}
Masayuki Igawabfa07602015-01-20 18:47:17 +0900329 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030330 self.alt_client.set_server_metadata,
331 self.server['id'],
332 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_set_metadata_of_alt_account_image_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500336 # A set metadata for another user's image should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530337 req_metadata = {'meta1': 'value1', 'meta2': 'value2'}
Masayuki Igawabfa07602015-01-20 18:47:17 +0900338 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030339 self.alt_images_client.set_image_metadata,
340 self.image['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530341
Yuiko Takadae9999d62014-03-06 09:22:54 +0000342 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400343 def test_get_metadata_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500344 # A get metadata for another user's server should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530345 req_metadata = {'meta1': 'data1'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800346 self.client.set_server_metadata(self.server['id'], req_metadata)
hi2suresh31bb7cb2013-03-14 04:53:49 +0000347 self.addCleanup(self.client.delete_server_metadata_item,
348 self.server['id'], 'meta1')
Masayuki Igawabfa07602015-01-20 18:47:17 +0900349 self.assertRaises(lib_exc.NotFound,
hi2suresh31bb7cb2013-03-14 04:53:49 +0000350 self.alt_client.get_server_metadata_item,
351 self.server['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530352
Yuiko Takadae9999d62014-03-06 09:22:54 +0000353 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400354 def test_get_metadata_of_alt_account_image_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500355 # A get metadata for another user's image should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530356 req_metadata = {'meta1': 'value1'}
hi2sureshd0e24122013-03-15 03:06:53 +0000357 self.addCleanup(self.images_client.delete_image_metadata_item,
358 self.image['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530359 self.images_client.set_image_metadata(self.image['id'],
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800360 req_metadata)
Masayuki Igawabfa07602015-01-20 18:47:17 +0900361 self.assertRaises(lib_exc.NotFound,
hi2sureshd0e24122013-03-15 03:06:53 +0000362 self.alt_images_client.get_image_metadata_item,
363 self.image['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530364
Yuiko Takadae9999d62014-03-06 09:22:54 +0000365 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400366 def test_delete_metadata_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500367 # A delete metadata for another user's server should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530368 req_metadata = {'meta1': 'data1'}
hi2sureshd0e24122013-03-15 03:06:53 +0000369 self.addCleanup(self.client.delete_server_metadata_item,
370 self.server['id'], 'meta1')
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800371 self.client.set_server_metadata(self.server['id'], req_metadata)
Masayuki Igawabfa07602015-01-20 18:47:17 +0900372 self.assertRaises(lib_exc.NotFound,
hi2sureshd0e24122013-03-15 03:06:53 +0000373 self.alt_client.delete_server_metadata_item,
374 self.server['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530375
Yuiko Takadae9999d62014-03-06 09:22:54 +0000376 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400377 def test_delete_metadata_of_alt_account_image_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500378 # A delete metadata for another user's image should fail
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530379 req_metadata = {'meta1': 'data1'}
hi2sureshd0e24122013-03-15 03:06:53 +0000380 self.addCleanup(self.images_client.delete_image_metadata_item,
381 self.image['id'], 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530382 self.images_client.set_image_metadata(self.image['id'],
383 req_metadata)
Masayuki Igawabfa07602015-01-20 18:47:17 +0900384 self.assertRaises(lib_exc.NotFound,
hi2sureshd0e24122013-03-15 03:06:53 +0000385 self.alt_images_client.delete_image_metadata_item,
386 self.image['id'], 'meta1')
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530387
Yuiko Takadae9999d62014-03-06 09:22:54 +0000388 @test.attr(type='gate')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400389 def test_get_console_output_of_alt_account_server_fails(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500390 # A Get Console Output for another user's server should fail
Masayuki Igawabfa07602015-01-20 18:47:17 +0900391 self.assertRaises(lib_exc.NotFound,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030392 self.alt_client.get_console_output,
393 self.server['id'], 10)