blob: 12fa94bccd7aae047b34bddbbe77803aac0d87d6 [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')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400235 def test_delete_keypair_of_alt_account_fails(self):
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530236 """A DELETE request for another user's keypair should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400237 self.alt_keypairs_client.delete_keypair(self.keypairname)
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530238
239 @raises(exceptions.NotFound)
240 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400241 def test_get_image_for_alt_account_fails(self):
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530242 """A GET request for an image on another user's account should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400243 self.alt_images_client.get_image(self.image['id'])
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530244
245 @raises(exceptions.NotFound)
246 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400247 def test_delete_image_for_alt_account_fails(self):
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530248 """A DELETE request for another user's image should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400249 self.alt_images_client.delete_image(self.image['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530250
251 @raises(exceptions.BadRequest)
252 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400253 def test_create_security_group_in_analt_user_tenant(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530254 """
255 A create security group request should fail if the tenant id does not
256 match the current user
257 """
258 #POST security group with other user tenant
259 s_name = rand_name('security-')
260 s_description = rand_name('security')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400261 self.saved_base_url = self.alt_security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530262 try:
263 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400264 self.alt_security_client.base_url = self.security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530265 resp = {}
266 resp['status'] = None
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800267 resp, body = self.alt_security_client.create_security_group(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530268 s_name,
269 s_description)
270 finally:
271 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400272 self.alt_security_client.base_url = self.saved_base_url
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800273 if resp['status'] is not None:
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530274 resp, _ = \
Jay Pipesf38eaac2012-06-21 13:37:35 -0400275 self.alt_security_client.delete_security_group(body['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530276 self.fail("Create Security Group request should not happen if"
277 "the tenant id does not match the current user")
278
279 @raises(exceptions.NotFound)
280 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400281 def test_get_security_group_of_alt_account_fails(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530282 """A GET request for another user's security group should fail"""
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800283 self.alt_security_client.get_security_group(self.security_group['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530284
285 @raises(exceptions.NotFound)
286 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400287 def test_delete_security_group_of_alt_account_fails(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530288 """A DELETE request for another user's security group should fail"""
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800289 self.alt_security_client.delete_security_group(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530290 self.security_group['id'])
291
292 @raises(exceptions.BadRequest)
293 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400294 def test_create_security_group_rule_in_analt_user_tenant(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530295 """
296 A create security group rule request should fail if the tenant id
297 does not match the current user
298 """
299 #POST security group rule with other user tenant
300 parent_group_id = self.security_group['id']
301 ip_protocol = 'icmp'
302 from_port = -1
303 to_port = -1
Jay Pipesf38eaac2012-06-21 13:37:35 -0400304 self.saved_base_url = self.alt_security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530305 try:
306 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400307 self.alt_security_client.base_url = self.security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530308 resp = {}
309 resp['status'] = None
310 resp, body = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800311 self.alt_security_client.create_security_group_rule(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530312 parent_group_id,
313 ip_protocol, from_port,
314 to_port)
315 finally:
316 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400317 self.alt_security_client.base_url = self.saved_base_url
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800318 if resp['status'] is not None:
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530319 resp, _ = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800320 self.alt_security_client.delete_security_group_rule(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530321 body['id'])
322 self.fail("Create security group rule request should not "
323 "happen if the tenant id does not match the"
324 " current user")
325
326 @unittest.skip("Skipped until the Bug #1001118 is resolved")
327 @raises(exceptions.NotFound)
328 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400329 def test_delete_security_group_rule_of_alt_account_fails(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530330 """
331 A DELETE request for another user's security group rule
332 should fail
333 """
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800334 self.alt_security_client.delete_security_group_rule(self.rule['id'])
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530335
336 @raises(exceptions.NotFound)
337 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400338 def test_set_metadata_of_alt_account_server_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530339 """ A set metadata for another user's server should fail """
340 req_metadata = {'meta1': 'data1', 'meta2': 'data2'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800341 self.alt_client.set_server_metadata(self.server['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530342
343 @raises(exceptions.NotFound)
344 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400345 def test_set_metadata_of_alt_account_image_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530346 """ A set metadata for another user's image should fail """
347 req_metadata = {'meta1': 'value1', 'meta2': 'value2'}
Jay Pipesf38eaac2012-06-21 13:37:35 -0400348 self.alt_images_client.set_image_metadata(self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800349 req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530350
351 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400352 def test_get_metadata_of_alt_account_server_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530353 """ A get metadata for another user's server should fail """
354 req_metadata = {'meta1': 'data1'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800355 self.client.set_server_metadata(self.server['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530356 try:
357 resp, meta = \
Jay Pipesf38eaac2012-06-21 13:37:35 -0400358 self.alt_client.get_server_metadata_item(self.server['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800359 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530360 except exceptions.NotFound:
361 pass
362 finally:
363 resp, body = \
364 self.client.delete_server_metadata_item(self.server['id'], 'meta1')
365
366 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400367 def test_get_metadata_of_alt_account_image_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530368 """ A get metadata for another user's image should fail """
369 req_metadata = {'meta1': 'value1'}
370 self.images_client.set_image_metadata(self.image['id'],
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800371 req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530372 try:
373 resp, meta = \
Jay Pipesf38eaac2012-06-21 13:37:35 -0400374 self.alt_images_client.get_image_metadata_item(self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800375 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530376 except exceptions.NotFound:
377 pass
378 finally:
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800379 resp, body = self.images_client.delete_image_metadata_item(
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530380 self.image['id'], 'meta1')
381
382 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400383 def test_delete_metadata_of_alt_account_server_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530384 """ A delete metadata for another user's server should fail """
385 req_metadata = {'meta1': 'data1'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800386 self.client.set_server_metadata(self.server['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530387 try:
388 resp, body = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800389 self.alt_client.delete_server_metadata_item(self.server['id'],
390 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530391 except exceptions.NotFound:
392 pass
393 finally:
394 resp, body = \
395 self.client.delete_server_metadata_item(self.server['id'], 'meta1')
396
397 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400398 def test_delete_metadata_of_alt_account_image_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530399 """ A delete metadata for another user's image should fail """
400 req_metadata = {'meta1': 'data1'}
401 self.images_client.set_image_metadata(self.image['id'],
402 req_metadata)
403 try:
404 resp, body = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800405 self.alt_images_client.delete_image_metadata_item(self.image['id'],
406 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530407 except exceptions.NotFound:
408 pass
409 finally:
410 resp, body = \
411 self.images_client.delete_image_metadata_item(self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800412 'meta1')
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530413
414 @raises(exceptions.NotFound)
415 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400416 def test_get_console_output_of_alt_account_server_fails(self):
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530417 """
418 A Get Console Output for another user's server should fail
419 """
Jay Pipesf38eaac2012-06-21 13:37:35 -0400420 self.alt_console_outputs_client.get_console_output(self.server['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800421 10)