blob: 0d08c18452254c53837619bef8d871ec3416d8bc [file] [log] [blame]
Jay Pipes13b479b2012-06-11 14:52:27 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack, LLC
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
Daryl Walleckced8eb82012-03-19 13:52:37 -050017
18from nose.plugins.attrib import attr
19from nose.tools import raises
Wayne Vestal Weeksfa07a0e2012-10-05 14:34:40 -040020from nose import SkipTest
Jay Pipes13b479b2012-06-11 14:52:27 -040021import unittest2 as unittest
Daryl Walleckced8eb82012-03-19 13:52:37 -050022
23from tempest import openstack
Rohit Karajgiaeddf632012-05-04 05:39:13 -070024from tempest.common.utils.data_utils import rand_name, parse_image_id
Daryl Walleckdc9e0c42012-04-02 16:51:26 -050025from tempest import exceptions
Jay Pipesf38eaac2012-06-21 13:37:35 -040026from tempest.tests.compute.base import BaseComputeTest
27from tempest.tests import compute
Daryl Walleckced8eb82012-03-19 13:52:37 -050028
29
Jay Pipesf38eaac2012-06-21 13:37:35 -040030class AuthorizationTest(BaseComputeTest):
Daryl Walleckced8eb82012-03-19 13:52:37 -050031
32 @classmethod
33 def setUpClass(cls):
Jay Pipesf38eaac2012-06-21 13:37:35 -040034 if not compute.MULTI_USER:
35 msg = "Need >1 user"
Wayne Vestal Weeksfa07a0e2012-10-05 14:34:40 -040036 raise SkipTest(msg)
Jay Pipesf38eaac2012-06-21 13:37:35 -040037
38 super(AuthorizationTest, cls).setUpClass()
39
Daryl Walleckced8eb82012-03-19 13:52:37 -050040 cls.client = cls.os.servers_client
41 cls.images_client = cls.os.images_client
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053042 cls.keypairs_client = cls.os.keypairs_client
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +053043 cls.security_client = cls.os.security_groups_client
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +053044 cls.console_outputs_client = cls.os.console_outputs_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050045
Jay Pipesf38eaac2012-06-21 13:37:35 -040046 if cls.config.compute.allow_tenant_isolation:
47 creds = cls._get_isolated_creds()
48 username, tenant_name, password = creds
49 cls.alt_manager = openstack.Manager(username=username,
50 password=password,
51 tenant_name=tenant_name)
52 else:
53 # Use the alt_XXX credentials in the config file
54 cls.alt_manager = openstack.AltManager()
Daryl Walleckced8eb82012-03-19 13:52:37 -050055
Jay Pipesf38eaac2012-06-21 13:37:35 -040056 cls.alt_client = cls.alt_manager.servers_client
57 cls.alt_images_client = cls.alt_manager.images_client
58 cls.alt_keypairs_client = cls.alt_manager.keypairs_client
59 cls.alt_security_client = cls.alt_manager.security_groups_client
60 cls.alt_console_outputs_client = cls.alt_manager.console_outputs_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050061
Jay Pipesf38eaac2012-06-21 13:37:35 -040062 cls.alt_security_client._set_auth()
63 name = rand_name('server')
64 resp, server = cls.client.create_server(name, cls.image_ref,
65 cls.flavor_ref)
66 cls.client.wait_for_server_status(server['id'], 'ACTIVE')
67 resp, cls.server = cls.client.get_server(server['id'])
Jay Pipes3f981df2012-03-27 18:59:44 -040068
Jay Pipesf38eaac2012-06-21 13:37:35 -040069 name = rand_name('image')
70 resp, body = cls.client.create_image(server['id'], name)
71 image_id = parse_image_id(resp['location'])
72 cls.images_client.wait_for_image_resp_code(image_id, 200)
73 cls.images_client.wait_for_image_status(image_id, 'ACTIVE')
74 resp, cls.image = cls.images_client.get_image(image_id)
Daryl Walleckced8eb82012-03-19 13:52:37 -050075
Jay Pipesf38eaac2012-06-21 13:37:35 -040076 cls.keypairname = rand_name('keypair')
77 resp, keypair = \
78 cls.keypairs_client.create_keypair(cls.keypairname)
Daryl Walleckced8eb82012-03-19 13:52:37 -050079
Jay Pipesf38eaac2012-06-21 13:37:35 -040080 name = rand_name('security')
81 description = rand_name('description')
82 resp, cls.security_group = \
83 cls.security_client.create_security_group(name, description)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053084
Jay Pipesf38eaac2012-06-21 13:37:35 -040085 parent_group_id = cls.security_group['id']
86 ip_protocol = 'tcp'
87 from_port = 22
88 to_port = 22
89 resp, cls.rule =\
Zhongyue Luoe6321ef2012-09-17 16:45:50 +080090 cls.security_client.create_security_group_rule(
Jay Pipesf38eaac2012-06-21 13:37:35 -040091 parent_group_id,
92 ip_protocol, from_port,
93 to_port)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +053094
Daryl Walleckced8eb82012-03-19 13:52:37 -050095 @classmethod
96 def tearDownClass(cls):
Jay Pipesf38eaac2012-06-21 13:37:35 -040097 if compute.MULTI_USER:
Daryl Walleckced8eb82012-03-19 13:52:37 -050098 cls.client.delete_server(cls.server['id'])
99 cls.images_client.delete_image(cls.image['id'])
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530100 cls.keypairs_client.delete_keypair(cls.keypairname)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530101 cls.security_client.delete_security_group(cls.security_group['id'])
Jay Pipesf38eaac2012-06-21 13:37:35 -0400102 super(AuthorizationTest, cls).tearDownClass()
Daryl Walleckced8eb82012-03-19 13:52:37 -0500103
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500104 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500105 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400106 def test_get_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500107 """A GET request for a server on another user's account should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400108 self.alt_client.get_server(self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500109
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500110 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500111 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400112 def test_delete_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500113 """A DELETE request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400114 self.alt_client.delete_server(self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500115
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500116 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500117 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400118 def test_update_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500119 """An update server request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400120 self.alt_client.update_server(self.server['id'], name='test')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500121
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500122 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500123 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400124 def test_list_server_addresses_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500125 """A list addresses request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400126 self.alt_client.list_addresses(self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500127
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500128 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500129 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400130 def test_list_server_addresses_by_network_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500131 """
132 A list address/network request for another user's server should fail
133 """
134 server_id = self.server['id']
Jay Pipesf38eaac2012-06-21 13:37:35 -0400135 self.alt_client.list_addresses_by_network(server_id, 'public')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500136
sapan-kona37939762012-06-28 20:22:43 +0530137 def test_list_servers_with_alternate_tenant(self):
138 """
139 A list on servers from one tenant should not
140 show on alternate tenant
141 """
142 #Listing servers from alternate tenant
143 alt_server_ids = []
144 resp, body = self.alt_client.list_servers()
145 alt_server_ids = [s['id'] for s in body['servers']]
146 self.assertNotIn(self.server['id'], alt_server_ids)
147
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500148 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500149 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400150 def test_change_password_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500151 """A change password request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400152 self.alt_client.change_password(self.server['id'], 'newpass')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500153
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500154 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500155 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400156 def test_reboot_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500157 """A reboot request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400158 self.alt_client.reboot(self.server['id'], 'HARD')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500159
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500160 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500161 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400162 def test_rebuild_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500163 """A rebuild request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400164 self.alt_client.rebuild(self.server['id'], self.image_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500165
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500166 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500167 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400168 def test_resize_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500169 """A resize request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400170 self.alt_client.resize(self.server['id'], self.flavor_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500171
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500172 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500173 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400174 def test_create_image_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500175 """A create image request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400176 self.alt_images_client.create_image(self.server['id'], 'testImage')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500177
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500178 @raises(exceptions.BadRequest)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500179 @attr(type='negative')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500180 def test_create_server_with_unauthorized_image(self):
181 """Server creation with another user's image should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400182 self.alt_client.create_server('test', self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800183 self.flavor_ref)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500184
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500185 @raises(exceptions.BadRequest)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500186 @attr(type='negative')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500187 def test_create_server_fails_when_tenant_incorrect(self):
188 """
189 A create server request should fail if the tenant id does not match
190 the current user
191 """
Jay Pipesf38eaac2012-06-21 13:37:35 -0400192 saved_base_url = self.alt_client.base_url
Jay Pipesff10d552012-04-06 14:18:50 -0400193 try:
Jay Pipesff10d552012-04-06 14:18:50 -0400194 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400195 self.alt_client.base_url = self.client.base_url
196 self.alt_client.create_server('test', self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800197 self.flavor_ref)
Jay Pipesff10d552012-04-06 14:18:50 -0400198 finally:
199 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400200 self.alt_client.base_url = saved_base_url
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530201
202 @raises(exceptions.BadRequest)
203 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400204 def test_create_keypair_in_analt_user_tenant(self):
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530205 """
206 A create keypair request should fail if the tenant id does not match
207 the current user
208 """
209 #POST keypair with other user tenant
210 k_name = rand_name('keypair-')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400211 self.alt_keypairs_client._set_auth()
212 self.saved_base_url = self.alt_keypairs_client.base_url
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530213 try:
214 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400215 self.alt_keypairs_client.base_url = self.keypairs_client.base_url
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530216 resp = {}
217 resp['status'] = None
Jay Pipesf38eaac2012-06-21 13:37:35 -0400218 resp, _ = self.alt_keypairs_client.create_keypair(k_name)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530219 finally:
220 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400221 self.alt_keypairs_client.base_url = self.saved_base_url
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800222 if (resp['status'] is not None):
Jay Pipesf38eaac2012-06-21 13:37:35 -0400223 resp, _ = self.alt_keypairs_client.delete_keypair(k_name)
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800224 self.fail("Create keypair request should not happen "
225 "if the tenant id does not match the current user")
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530226
227 @raises(exceptions.NotFound)
228 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400229 def test_get_keypair_of_alt_account_fails(self):
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530230 """A GET request for another user's keypair should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400231 self.alt_keypairs_client.get_keypair(self.keypairname)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530232
233 @raises(exceptions.NotFound)
234 @attr(type='negative')
David Kranz084f2c12012-12-05 15:37:42 -0500235 @unittest.skip("Skipped until the Bug #1086980 is resolved")
Jay Pipesf38eaac2012-06-21 13:37:35 -0400236 def test_delete_keypair_of_alt_account_fails(self):
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530237 """A DELETE request for another user's keypair should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400238 self.alt_keypairs_client.delete_keypair(self.keypairname)
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530239
240 @raises(exceptions.NotFound)
241 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400242 def test_get_image_for_alt_account_fails(self):
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530243 """A GET request for an image on another user's account should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400244 self.alt_images_client.get_image(self.image['id'])
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530245
246 @raises(exceptions.NotFound)
247 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400248 def test_delete_image_for_alt_account_fails(self):
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530249 """A DELETE request for another user's image should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400250 self.alt_images_client.delete_image(self.image['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530251
252 @raises(exceptions.BadRequest)
253 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400254 def test_create_security_group_in_analt_user_tenant(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530255 """
256 A create security group request should fail if the tenant id does not
257 match the current user
258 """
259 #POST security group with other user tenant
260 s_name = rand_name('security-')
261 s_description = rand_name('security')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400262 self.saved_base_url = self.alt_security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530263 try:
264 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400265 self.alt_security_client.base_url = self.security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530266 resp = {}
267 resp['status'] = None
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800268 resp, body = self.alt_security_client.create_security_group(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530269 s_name,
270 s_description)
271 finally:
272 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400273 self.alt_security_client.base_url = self.saved_base_url
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800274 if resp['status'] is not None:
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530275 resp, _ = \
Jay Pipesf38eaac2012-06-21 13:37:35 -0400276 self.alt_security_client.delete_security_group(body['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530277 self.fail("Create Security Group request should not happen if"
278 "the tenant id does not match the current user")
279
280 @raises(exceptions.NotFound)
281 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400282 def test_get_security_group_of_alt_account_fails(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530283 """A GET request for another user's security group should fail"""
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800284 self.alt_security_client.get_security_group(self.security_group['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530285
286 @raises(exceptions.NotFound)
287 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400288 def test_delete_security_group_of_alt_account_fails(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530289 """A DELETE request for another user's security group should fail"""
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800290 self.alt_security_client.delete_security_group(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530291 self.security_group['id'])
292
293 @raises(exceptions.BadRequest)
294 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400295 def test_create_security_group_rule_in_analt_user_tenant(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530296 """
297 A create security group rule request should fail if the tenant id
298 does not match the current user
299 """
300 #POST security group rule with other user tenant
301 parent_group_id = self.security_group['id']
302 ip_protocol = 'icmp'
303 from_port = -1
304 to_port = -1
Jay Pipesf38eaac2012-06-21 13:37:35 -0400305 self.saved_base_url = self.alt_security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530306 try:
307 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400308 self.alt_security_client.base_url = self.security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530309 resp = {}
310 resp['status'] = None
311 resp, body = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800312 self.alt_security_client.create_security_group_rule(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530313 parent_group_id,
314 ip_protocol, from_port,
315 to_port)
316 finally:
317 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400318 self.alt_security_client.base_url = self.saved_base_url
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800319 if resp['status'] is not None:
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530320 resp, _ = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800321 self.alt_security_client.delete_security_group_rule(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530322 body['id'])
323 self.fail("Create security group rule request should not "
324 "happen if the tenant id does not match the"
325 " current user")
326
327 @unittest.skip("Skipped until the Bug #1001118 is resolved")
328 @raises(exceptions.NotFound)
329 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400330 def test_delete_security_group_rule_of_alt_account_fails(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530331 """
332 A DELETE request for another user's security group rule
333 should fail
334 """
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800335 self.alt_security_client.delete_security_group_rule(self.rule['id'])
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530336
337 @raises(exceptions.NotFound)
338 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400339 def test_set_metadata_of_alt_account_server_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530340 """ A set metadata for another user's server should fail """
341 req_metadata = {'meta1': 'data1', 'meta2': 'data2'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800342 self.alt_client.set_server_metadata(self.server['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530343
344 @raises(exceptions.NotFound)
345 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400346 def test_set_metadata_of_alt_account_image_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530347 """ A set metadata for another user's image should fail """
348 req_metadata = {'meta1': 'value1', 'meta2': 'value2'}
Jay Pipesf38eaac2012-06-21 13:37:35 -0400349 self.alt_images_client.set_image_metadata(self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800350 req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530351
352 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400353 def test_get_metadata_of_alt_account_server_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530354 """ A get metadata for another user's server should fail """
355 req_metadata = {'meta1': 'data1'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800356 self.client.set_server_metadata(self.server['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530357 try:
358 resp, meta = \
Jay Pipesf38eaac2012-06-21 13:37:35 -0400359 self.alt_client.get_server_metadata_item(self.server['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800360 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530361 except exceptions.NotFound:
362 pass
363 finally:
364 resp, body = \
365 self.client.delete_server_metadata_item(self.server['id'], 'meta1')
366
367 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400368 def test_get_metadata_of_alt_account_image_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530369 """ A get metadata for another user's image should fail """
370 req_metadata = {'meta1': 'value1'}
371 self.images_client.set_image_metadata(self.image['id'],
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800372 req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530373 try:
374 resp, meta = \
Jay Pipesf38eaac2012-06-21 13:37:35 -0400375 self.alt_images_client.get_image_metadata_item(self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800376 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530377 except exceptions.NotFound:
378 pass
379 finally:
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800380 resp, body = self.images_client.delete_image_metadata_item(
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530381 self.image['id'], 'meta1')
382
383 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400384 def test_delete_metadata_of_alt_account_server_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530385 """ A delete metadata for another user's server should fail """
386 req_metadata = {'meta1': 'data1'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800387 self.client.set_server_metadata(self.server['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530388 try:
389 resp, body = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800390 self.alt_client.delete_server_metadata_item(self.server['id'],
391 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530392 except exceptions.NotFound:
393 pass
394 finally:
395 resp, body = \
396 self.client.delete_server_metadata_item(self.server['id'], 'meta1')
397
398 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400399 def test_delete_metadata_of_alt_account_image_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530400 """ A delete metadata for another user's image should fail """
401 req_metadata = {'meta1': 'data1'}
402 self.images_client.set_image_metadata(self.image['id'],
403 req_metadata)
404 try:
405 resp, body = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800406 self.alt_images_client.delete_image_metadata_item(self.image['id'],
407 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530408 except exceptions.NotFound:
409 pass
410 finally:
411 resp, body = \
412 self.images_client.delete_image_metadata_item(self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800413 'meta1')
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530414
415 @raises(exceptions.NotFound)
416 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400417 def test_get_console_output_of_alt_account_server_fails(self):
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530418 """
419 A Get Console Output for another user's server should fail
420 """
Jay Pipesf38eaac2012-06-21 13:37:35 -0400421 self.alt_console_outputs_client.get_console_output(self.server['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800422 10)