blob: 3f2feec842ab76d850f12e2b4966027099112c65 [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
Jay Pipes13b479b2012-06-11 14:52:27 -040020import unittest2 as unittest
Daryl Walleckced8eb82012-03-19 13:52:37 -050021
22from tempest import openstack
Rohit Karajgiaeddf632012-05-04 05:39:13 -070023from tempest.common.utils.data_utils import rand_name, parse_image_id
Daryl Walleckdc9e0c42012-04-02 16:51:26 -050024from tempest import exceptions
Jay Pipesf38eaac2012-06-21 13:37:35 -040025from tempest.tests.compute.base import BaseComputeTest
26from tempest.tests import compute
Daryl Walleckced8eb82012-03-19 13:52:37 -050027
28
Jay Pipesf38eaac2012-06-21 13:37:35 -040029class AuthorizationTest(BaseComputeTest):
Daryl Walleckced8eb82012-03-19 13:52:37 -050030
31 @classmethod
32 def setUpClass(cls):
Jay Pipesf38eaac2012-06-21 13:37:35 -040033 if not compute.MULTI_USER:
34 msg = "Need >1 user"
35 raise nose.SkipTest(msg)
36
37 super(AuthorizationTest, cls).setUpClass()
38
Daryl Walleckced8eb82012-03-19 13:52:37 -050039 cls.client = cls.os.servers_client
40 cls.images_client = cls.os.images_client
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053041 cls.keypairs_client = cls.os.keypairs_client
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +053042 cls.security_client = cls.os.security_groups_client
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +053043 cls.console_outputs_client = cls.os.console_outputs_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050044
Jay Pipesf38eaac2012-06-21 13:37:35 -040045 if cls.config.compute.allow_tenant_isolation:
46 creds = cls._get_isolated_creds()
47 username, tenant_name, password = creds
48 cls.alt_manager = openstack.Manager(username=username,
49 password=password,
50 tenant_name=tenant_name)
51 else:
52 # Use the alt_XXX credentials in the config file
53 cls.alt_manager = openstack.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
59 cls.alt_console_outputs_client = cls.alt_manager.console_outputs_client
Daryl Walleckced8eb82012-03-19 13:52:37 -050060
Jay Pipesf38eaac2012-06-21 13:37:35 -040061 cls.alt_security_client._set_auth()
62 name = rand_name('server')
63 resp, server = cls.client.create_server(name, cls.image_ref,
64 cls.flavor_ref)
65 cls.client.wait_for_server_status(server['id'], 'ACTIVE')
66 resp, cls.server = cls.client.get_server(server['id'])
Jay Pipes3f981df2012-03-27 18:59:44 -040067
Jay Pipesf38eaac2012-06-21 13:37:35 -040068 name = rand_name('image')
69 resp, body = cls.client.create_image(server['id'], name)
70 image_id = parse_image_id(resp['location'])
71 cls.images_client.wait_for_image_resp_code(image_id, 200)
72 cls.images_client.wait_for_image_status(image_id, 'ACTIVE')
73 resp, cls.image = cls.images_client.get_image(image_id)
Daryl Walleckced8eb82012-03-19 13:52:37 -050074
Jay Pipesf38eaac2012-06-21 13:37:35 -040075 cls.keypairname = rand_name('keypair')
76 resp, keypair = \
77 cls.keypairs_client.create_keypair(cls.keypairname)
Daryl Walleckced8eb82012-03-19 13:52:37 -050078
Jay Pipesf38eaac2012-06-21 13:37:35 -040079 name = rand_name('security')
80 description = rand_name('description')
81 resp, cls.security_group = \
82 cls.security_client.create_security_group(name, description)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053083
Jay Pipesf38eaac2012-06-21 13:37:35 -040084 parent_group_id = cls.security_group['id']
85 ip_protocol = 'tcp'
86 from_port = 22
87 to_port = 22
88 resp, cls.rule =\
Zhongyue Luoe6321ef2012-09-17 16:45:50 +080089 cls.security_client.create_security_group_rule(
Jay Pipesf38eaac2012-06-21 13:37:35 -040090 parent_group_id,
91 ip_protocol, from_port,
92 to_port)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +053093
Daryl Walleckced8eb82012-03-19 13:52:37 -050094 @classmethod
95 def tearDownClass(cls):
Jay Pipesf38eaac2012-06-21 13:37:35 -040096 if compute.MULTI_USER:
Daryl Walleckced8eb82012-03-19 13:52:37 -050097 cls.client.delete_server(cls.server['id'])
98 cls.images_client.delete_image(cls.image['id'])
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +053099 cls.keypairs_client.delete_keypair(cls.keypairname)
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530100 cls.security_client.delete_security_group(cls.security_group['id'])
Jay Pipesf38eaac2012-06-21 13:37:35 -0400101 super(AuthorizationTest, cls).tearDownClass()
Daryl Walleckced8eb82012-03-19 13:52:37 -0500102
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500103 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500104 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400105 def test_get_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500106 """A GET request for a server on another user's account should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400107 self.alt_client.get_server(self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500108
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500109 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500110 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400111 def test_delete_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500112 """A DELETE request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400113 self.alt_client.delete_server(self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500114
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500115 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500116 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400117 def test_update_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500118 """An update server request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400119 self.alt_client.update_server(self.server['id'], name='test')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500120
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500121 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500122 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400123 def test_list_server_addresses_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500124 """A list addresses request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400125 self.alt_client.list_addresses(self.server['id'])
Daryl Walleckced8eb82012-03-19 13:52:37 -0500126
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500127 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500128 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400129 def test_list_server_addresses_by_network_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500130 """
131 A list address/network request for another user's server should fail
132 """
133 server_id = self.server['id']
Jay Pipesf38eaac2012-06-21 13:37:35 -0400134 self.alt_client.list_addresses_by_network(server_id, 'public')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500135
sapan-kona37939762012-06-28 20:22:43 +0530136 def test_list_servers_with_alternate_tenant(self):
137 """
138 A list on servers from one tenant should not
139 show on alternate tenant
140 """
141 #Listing servers from alternate tenant
142 alt_server_ids = []
143 resp, body = self.alt_client.list_servers()
144 alt_server_ids = [s['id'] for s in body['servers']]
145 self.assertNotIn(self.server['id'], alt_server_ids)
146
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500147 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500148 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400149 def test_change_password_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500150 """A change password request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400151 self.alt_client.change_password(self.server['id'], 'newpass')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500152
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500153 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500154 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400155 def test_reboot_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500156 """A reboot request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400157 self.alt_client.reboot(self.server['id'], 'HARD')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500158
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500159 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500160 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400161 def test_rebuild_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500162 """A rebuild request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400163 self.alt_client.rebuild(self.server['id'], self.image_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500164
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500165 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500166 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400167 def test_resize_server_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500168 """A resize request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400169 self.alt_client.resize(self.server['id'], self.flavor_ref_alt)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500170
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500171 @raises(exceptions.NotFound)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500172 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400173 def test_create_image_for_alt_account_fails(self):
Daryl Walleckced8eb82012-03-19 13:52:37 -0500174 """A create image request for another user's server should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400175 self.alt_images_client.create_image(self.server['id'], 'testImage')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500176
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500177 @raises(exceptions.BadRequest)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500178 @attr(type='negative')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500179 def test_create_server_with_unauthorized_image(self):
180 """Server creation with another user's image should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400181 self.alt_client.create_server('test', self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800182 self.flavor_ref)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500183
Daryl Walleckdc9e0c42012-04-02 16:51:26 -0500184 @raises(exceptions.BadRequest)
Daryl Walleckced8eb82012-03-19 13:52:37 -0500185 @attr(type='negative')
Daryl Walleckced8eb82012-03-19 13:52:37 -0500186 def test_create_server_fails_when_tenant_incorrect(self):
187 """
188 A create server request should fail if the tenant id does not match
189 the current user
190 """
Jay Pipesf38eaac2012-06-21 13:37:35 -0400191 saved_base_url = self.alt_client.base_url
Jay Pipesff10d552012-04-06 14:18:50 -0400192 try:
Jay Pipesff10d552012-04-06 14:18:50 -0400193 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400194 self.alt_client.base_url = self.client.base_url
195 self.alt_client.create_server('test', self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800196 self.flavor_ref)
Jay Pipesff10d552012-04-06 14:18:50 -0400197 finally:
198 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400199 self.alt_client.base_url = saved_base_url
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530200
201 @raises(exceptions.BadRequest)
202 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400203 def test_create_keypair_in_analt_user_tenant(self):
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530204 """
205 A create keypair request should fail if the tenant id does not match
206 the current user
207 """
208 #POST keypair with other user tenant
209 k_name = rand_name('keypair-')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400210 self.alt_keypairs_client._set_auth()
211 self.saved_base_url = self.alt_keypairs_client.base_url
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530212 try:
213 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400214 self.alt_keypairs_client.base_url = self.keypairs_client.base_url
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530215 resp = {}
216 resp['status'] = None
Jay Pipesf38eaac2012-06-21 13:37:35 -0400217 resp, _ = self.alt_keypairs_client.create_keypair(k_name)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530218 finally:
219 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400220 self.alt_keypairs_client.base_url = self.saved_base_url
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800221 if (resp['status'] is not None):
Jay Pipesf38eaac2012-06-21 13:37:35 -0400222 resp, _ = self.alt_keypairs_client.delete_keypair(k_name)
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800223 self.fail("Create keypair request should not happen "
224 "if the tenant id does not match the current user")
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530225
226 @raises(exceptions.NotFound)
227 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400228 def test_get_keypair_of_alt_account_fails(self):
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530229 """A GET request for another user's keypair should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400230 self.alt_keypairs_client.get_keypair(self.keypairname)
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530231
232 @raises(exceptions.NotFound)
233 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400234 def test_delete_keypair_of_alt_account_fails(self):
rajalakshmi-ganesanb74a11a2012-05-16 10:37:58 +0530235 """A DELETE request for another user's keypair should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400236 self.alt_keypairs_client.delete_keypair(self.keypairname)
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530237
238 @raises(exceptions.NotFound)
239 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400240 def test_get_image_for_alt_account_fails(self):
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530241 """A GET request for an image on another user's account should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400242 self.alt_images_client.get_image(self.image['id'])
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530243
244 @raises(exceptions.NotFound)
245 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400246 def test_delete_image_for_alt_account_fails(self):
rajalakshmi-ganesan32f8db62012-05-18 19:13:40 +0530247 """A DELETE request for another user's image should fail"""
Jay Pipesf38eaac2012-06-21 13:37:35 -0400248 self.alt_images_client.delete_image(self.image['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530249
250 @raises(exceptions.BadRequest)
251 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400252 def test_create_security_group_in_analt_user_tenant(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530253 """
254 A create security group request should fail if the tenant id does not
255 match the current user
256 """
257 #POST security group with other user tenant
258 s_name = rand_name('security-')
259 s_description = rand_name('security')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400260 self.saved_base_url = self.alt_security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530261 try:
262 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400263 self.alt_security_client.base_url = self.security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530264 resp = {}
265 resp['status'] = None
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800266 resp, body = self.alt_security_client.create_security_group(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530267 s_name,
268 s_description)
269 finally:
270 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400271 self.alt_security_client.base_url = self.saved_base_url
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800272 if resp['status'] is not None:
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530273 resp, _ = \
Jay Pipesf38eaac2012-06-21 13:37:35 -0400274 self.alt_security_client.delete_security_group(body['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530275 self.fail("Create Security Group request should not happen if"
276 "the tenant id does not match the current user")
277
278 @raises(exceptions.NotFound)
279 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400280 def test_get_security_group_of_alt_account_fails(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530281 """A GET request for another user's security group should fail"""
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800282 self.alt_security_client.get_security_group(self.security_group['id'])
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530283
284 @raises(exceptions.NotFound)
285 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400286 def test_delete_security_group_of_alt_account_fails(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530287 """A DELETE request for another user's security group should fail"""
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800288 self.alt_security_client.delete_security_group(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530289 self.security_group['id'])
290
291 @raises(exceptions.BadRequest)
292 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400293 def test_create_security_group_rule_in_analt_user_tenant(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530294 """
295 A create security group rule request should fail if the tenant id
296 does not match the current user
297 """
298 #POST security group rule with other user tenant
299 parent_group_id = self.security_group['id']
300 ip_protocol = 'icmp'
301 from_port = -1
302 to_port = -1
Jay Pipesf38eaac2012-06-21 13:37:35 -0400303 self.saved_base_url = self.alt_security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530304 try:
305 # Change the base URL to impersonate another user
Jay Pipesf38eaac2012-06-21 13:37:35 -0400306 self.alt_security_client.base_url = self.security_client.base_url
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530307 resp = {}
308 resp['status'] = None
309 resp, body = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800310 self.alt_security_client.create_security_group_rule(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530311 parent_group_id,
312 ip_protocol, from_port,
313 to_port)
314 finally:
315 # Reset the base_url...
Jay Pipesf38eaac2012-06-21 13:37:35 -0400316 self.alt_security_client.base_url = self.saved_base_url
Zhongyue Luoe471d6e2012-09-17 17:02:43 +0800317 if resp['status'] is not None:
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530318 resp, _ = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800319 self.alt_security_client.delete_security_group_rule(
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530320 body['id'])
321 self.fail("Create security group rule request should not "
322 "happen if the tenant id does not match the"
323 " current user")
324
325 @unittest.skip("Skipped until the Bug #1001118 is resolved")
326 @raises(exceptions.NotFound)
327 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400328 def test_delete_security_group_rule_of_alt_account_fails(self):
rajalakshmi-ganesan184daad2012-05-18 14:47:38 +0530329 """
330 A DELETE request for another user's security group rule
331 should fail
332 """
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800333 self.alt_security_client.delete_security_group_rule(self.rule['id'])
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530334
335 @raises(exceptions.NotFound)
336 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400337 def test_set_metadata_of_alt_account_server_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530338 """ A set metadata for another user's server should fail """
339 req_metadata = {'meta1': 'data1', 'meta2': 'data2'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800340 self.alt_client.set_server_metadata(self.server['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530341
342 @raises(exceptions.NotFound)
343 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400344 def test_set_metadata_of_alt_account_image_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530345 """ A set metadata for another user's image should fail """
346 req_metadata = {'meta1': 'value1', 'meta2': 'value2'}
Jay Pipesf38eaac2012-06-21 13:37:35 -0400347 self.alt_images_client.set_image_metadata(self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800348 req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530349
350 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400351 def test_get_metadata_of_alt_account_server_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530352 """ A get metadata for another user's server should fail """
353 req_metadata = {'meta1': 'data1'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800354 self.client.set_server_metadata(self.server['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530355 try:
356 resp, meta = \
Jay Pipesf38eaac2012-06-21 13:37:35 -0400357 self.alt_client.get_server_metadata_item(self.server['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800358 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530359 except exceptions.NotFound:
360 pass
361 finally:
362 resp, body = \
363 self.client.delete_server_metadata_item(self.server['id'], 'meta1')
364
365 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400366 def test_get_metadata_of_alt_account_image_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530367 """ A get metadata for another user's image should fail """
368 req_metadata = {'meta1': 'value1'}
369 self.images_client.set_image_metadata(self.image['id'],
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800370 req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530371 try:
372 resp, meta = \
Jay Pipesf38eaac2012-06-21 13:37:35 -0400373 self.alt_images_client.get_image_metadata_item(self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800374 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530375 except exceptions.NotFound:
376 pass
377 finally:
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800378 resp, body = self.images_client.delete_image_metadata_item(
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530379 self.image['id'], 'meta1')
380
381 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400382 def test_delete_metadata_of_alt_account_server_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530383 """ A delete metadata for another user's server should fail """
384 req_metadata = {'meta1': 'data1'}
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800385 self.client.set_server_metadata(self.server['id'], req_metadata)
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530386 try:
387 resp, body = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800388 self.alt_client.delete_server_metadata_item(self.server['id'],
389 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530390 except exceptions.NotFound:
391 pass
392 finally:
393 resp, body = \
394 self.client.delete_server_metadata_item(self.server['id'], 'meta1')
395
396 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400397 def test_delete_metadata_of_alt_account_image_fails(self):
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530398 """ A delete metadata for another user's image should fail """
399 req_metadata = {'meta1': 'data1'}
400 self.images_client.set_image_metadata(self.image['id'],
401 req_metadata)
402 try:
403 resp, body = \
Zhongyue Luoe6321ef2012-09-17 16:45:50 +0800404 self.alt_images_client.delete_image_metadata_item(self.image['id'],
405 'meta1')
rajalakshmi-ganesan929a32a2012-05-29 18:00:25 +0530406 except exceptions.NotFound:
407 pass
408 finally:
409 resp, body = \
410 self.images_client.delete_image_metadata_item(self.image['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800411 'meta1')
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530412
413 @raises(exceptions.NotFound)
414 @attr(type='negative')
Jay Pipesf38eaac2012-06-21 13:37:35 -0400415 def test_get_console_output_of_alt_account_server_fails(self):
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530416 """
417 A Get Console Output for another user's server should fail
418 """
Jay Pipesf38eaac2012-06-21 13:37:35 -0400419 self.alt_console_outputs_client.get_console_output(self.server['id'],
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800420 10)