blob: 5d9a5ce97dbf9f1dea6aa7bd03f844a6ba6d47f9 [file] [log] [blame]
Jay Pipes13b479b2012-06-11 14:52:27 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
ZhiQiang Fan39f97222013-09-20 04:49:44 +08003# Copyright 2012 OpenStack Foundation
Jay Pipes13b479b2012-06-11 14:52:27 -04004# 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.
17
Rohit Karajgidc300b22012-05-04 08:11:00 -070018import sys
LingxianKongb2ca96f2013-09-28 23:09:30 +080019import uuid
Jay Pipes13b479b2012-06-11 14:52:27 -040020
Sean Dague1937d092013-05-17 16:36:38 -040021from tempest.api.compute import base
Matthew Treinish481466b2012-12-20 17:16:01 -050022from tempest import clients
Matthew Treinisha83a16e2012-12-07 13:44:02 -050023from tempest.common.utils.data_utils import rand_name
Daryl Wallecked8bef32011-12-05 23:02:08 -060024from tempest import exceptions
Chris Yeoh9465b0b2013-02-09 22:19:15 +103025from tempest.test import attr
Daryl Walleckadea1fa2011-11-15 18:36:39 -060026
27
Xiao Hanyuab61c072013-06-26 15:33:42 +080028class ServersNegativeTestJSON(base.BaseComputeTest):
donald-ngo18edb812013-02-22 11:37:15 -080029 _interface = 'json'
Daryl Walleckadea1fa2011-11-15 18:36:39 -060030
31 @classmethod
32 def setUpClass(cls):
Xiao Hanyuab61c072013-06-26 15:33:42 +080033 super(ServersNegativeTestJSON, cls).setUpClass()
Daryl Walleckc7251962012-03-12 17:26:54 -050034 cls.client = cls.servers_client
Rohit Karajgidc300b22012-05-04 08:11:00 -070035 cls.img_client = cls.images_client
Matthew Treinish481466b2012-12-20 17:16:01 -050036 cls.alt_os = clients.AltManager()
Rohit Karajgidc300b22012-05-04 08:11:00 -070037 cls.alt_client = cls.alt_os.servers_client
Daryl Walleckadea1fa2011-11-15 18:36:39 -060038
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040039 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060040 def test_server_name_blank(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050041 # Create a server with name parameter empty
donald-ngo18edb812013-02-22 11:37:15 -080042
43 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050044 self.create_server,
45 name='')
Daryl Walleckadea1fa2011-11-15 18:36:39 -060046
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040047 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060048 def test_personality_file_contents_not_encoded(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050049 # Use an unencoded file when creating a server with personality
donald-ngo18edb812013-02-22 11:37:15 -080050
Daryl Walleckadea1fa2011-11-15 18:36:39 -060051 file_contents = 'This is a test file.'
Sean Dague9b669e32012-12-13 18:40:08 -050052 person = [{'path': '/etc/testfile.txt',
53 'contents': file_contents}]
Daryl Walleckadea1fa2011-11-15 18:36:39 -060054
donald-ngo18edb812013-02-22 11:37:15 -080055 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050056 self.create_server,
donald-ngo18edb812013-02-22 11:37:15 -080057 personality=person)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060058
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040059 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060060 def test_create_with_invalid_image(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050061 # Create a server with an unknown image
donald-ngo18edb812013-02-22 11:37:15 -080062
63 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050064 self.create_server,
65 image_id=-1)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060066
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040067 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060068 def test_create_with_invalid_flavor(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050069 # Create a server with an unknown flavor
donald-ngo18edb812013-02-22 11:37:15 -080070
71 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050072 self.create_server,
73 flavor=-1,)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060074
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040075 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060076 def test_invalid_access_ip_v4_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050077 # An access IPv4 address must match a valid address pattern
donald-ngo18edb812013-02-22 11:37:15 -080078
Sean Dague9b669e32012-12-13 18:40:08 -050079 IPv4 = '1.1.1.1.1.1'
donald-ngo18edb812013-02-22 11:37:15 -080080 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050081 self.create_server, accessIPv4=IPv4)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060082
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040083 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060084 def test_invalid_ip_v6_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050085 # An access IPv6 address must match a valid address pattern
donald-ngo18edb812013-02-22 11:37:15 -080086
Sean Dague9b669e32012-12-13 18:40:08 -050087 IPv6 = 'notvalid'
donald-ngo18edb812013-02-22 11:37:15 -080088
89 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050090 self.create_server, accessIPv6=IPv6)
ravikumar-venkatesan36892e12012-05-11 18:01:41 +000091
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040092 @attr(type=['negative', 'gate'])
ravikumar-venkatesan36892e12012-05-11 18:01:41 +000093 def test_reboot_deleted_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050094 # Reboot a deleted server
Sean Dague22897e12013-02-25 17:54:09 -050095 resp, server = self.create_server()
96 self.server_id = server['id']
ravikumar-venkatesan36892e12012-05-11 18:01:41 +000097 self.client.delete_server(self.server_id)
David Kranz1b39dd42012-05-30 17:04:09 -040098 self.client.wait_for_server_termination(self.server_id)
donald-ngo18edb812013-02-22 11:37:15 -080099 self.assertRaises(exceptions.NotFound, self.client.reboot,
100 self.server_id, 'SOFT')
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000101
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400102 @attr(type=['negative', 'gate'])
Anju Tiwari8c789762013-07-22 11:02:05 +0530103 def test_pause_paused_server(self):
104 # Pause a paused server.
105 resp, server = self.create_server(wait_until='ACTIVE')
106 self.server_id = server['id']
107 self.client.pause_server(self.server_id)
108 self.client.wait_for_server_status(self.server_id, 'PAUSED')
109 self.assertRaises(exceptions.Duplicate,
110 self.client.pause_server,
111 self.server_id)
112
113 @attr(type=['negative', 'gate'])
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000114 def test_rebuild_deleted_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500115 # Rebuild a deleted server
donald-ngo18edb812013-02-22 11:37:15 -0800116
Sean Dague22897e12013-02-25 17:54:09 -0500117 resp, server = self.create_server()
118 self.server_id = server['id']
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000119 self.client.delete_server(self.server_id)
David Kranz1b39dd42012-05-30 17:04:09 -0400120 self.client.wait_for_server_termination(self.server_id)
donald-ngo18edb812013-02-22 11:37:15 -0800121
122 self.assertRaises(exceptions.NotFound,
123 self.client.rebuild,
124 self.server_id, self.image_ref_alt)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700125
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400126 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700127 def test_create_numeric_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500128 # Create a server with a numeric name
Sean Daguee623f752013-02-27 14:52:15 -0500129 if self.__class__._interface == "xml":
130 raise self.skipException("Not testable in XML")
Rohit Karajgidc300b22012-05-04 08:11:00 -0700131
132 server_name = 12345
Sean Dague9b669e32012-12-13 18:40:08 -0500133 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500134 self.create_server,
135 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700136
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400137 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700138 def test_create_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500139 # Create a server with name length exceeding 256 characters
Rohit Karajgidc300b22012-05-04 08:11:00 -0700140
141 server_name = 'a' * 256
Sean Dague9b669e32012-12-13 18:40:08 -0500142 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500143 self.create_server,
144 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700145
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400146 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700147 def test_create_with_invalid_network_uuid(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500148 # Pass invalid network uuid while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700149
Chris Yeohfc9e3332013-01-21 09:28:13 +1030150 networks = [{'fixed_ip': '10.0.1.1', 'uuid': 'a-b-c-d-e-f-g-h-i-j'}]
Rohit Karajgidc300b22012-05-04 08:11:00 -0700151
Sean Dague9b669e32012-12-13 18:40:08 -0500152 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500153 self.create_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800154 networks=networks)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700155
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400156 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700157 def test_create_with_non_existant_keypair(self):
Chang Bo Guof099f802013-09-13 19:01:46 -0700158 # Pass a non-existent keypair while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700159
160 key_name = rand_name('key')
Sean Dague9b669e32012-12-13 18:40:08 -0500161 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500162 self.create_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800163 key_name=key_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700164
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400165 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700166 def test_create_server_metadata_exceeds_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500167 # Pass really long metadata while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700168
Rohit Karajgidc300b22012-05-04 08:11:00 -0700169 metadata = {'a': 'b' * 260}
Sean Dague9b669e32012-12-13 18:40:08 -0500170 self.assertRaises(exceptions.OverLimit,
Sean Dague22897e12013-02-25 17:54:09 -0500171 self.create_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800172 meta=metadata)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700173
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400174 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700175 def test_update_name_of_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500176 # Update name of a non-existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700177
178 server_name = rand_name('server')
179 new_name = rand_name('server') + '_updated'
180
181 self.assertRaises(exceptions.NotFound, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800182 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700183
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400184 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700185 def test_update_server_set_empty_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500186 # Update name of the server to an empty string
Rohit Karajgidc300b22012-05-04 08:11:00 -0700187
188 server_name = rand_name('server')
189 new_name = ''
190
191 self.assertRaises(exceptions.BadRequest, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800192 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700193
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400194 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700195 def test_update_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500196 # Update name of a server that belongs to another tenant
Rohit Karajgidc300b22012-05-04 08:11:00 -0700197
Sean Daguee623f752013-02-27 14:52:15 -0500198 resp, server = self.create_server(wait_until='ACTIVE')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700199 new_name = server['id'] + '_new'
200 self.assertRaises(exceptions.NotFound,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800201 self.alt_client.update_server, server['id'],
202 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700203
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400204 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700205 def test_update_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500206 # Update name of server exceed the name length limit
Rohit Karajgidc300b22012-05-04 08:11:00 -0700207
Sean Daguee623f752013-02-27 14:52:15 -0500208 resp, server = self.create_server(wait_until='ACTIVE')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700209 new_name = 'a' * 256
210 self.assertRaises(exceptions.BadRequest,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800211 self.client.update_server,
212 server['id'],
213 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700214
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400215 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700216 def test_delete_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500217 # Delete a non existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700218
219 self.assertRaises(exceptions.NotFound, self.client.delete_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800220 '999erra43')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700221
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400222 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700223 def test_delete_a_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500224 # Delete a server that belongs to another tenant
Matthew Treinish38c4dc42013-07-30 14:30:07 -0400225 resp, server = self.create_server(wait_until='ACTIVE')
226 self.assertRaises(exceptions.NotFound,
227 self.alt_client.delete_server,
228 server['id'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700229
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400230 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700231 def test_delete_server_pass_negative_id(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500232 # Pass an invalid string parameter to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700233
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800234 self.assertRaises(exceptions.NotFound, self.client.delete_server, -1)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700235
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400236 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700237 def test_delete_server_pass_id_exceeding_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500238 # Pass a server ID that exceeds length limit to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700239
240 self.assertRaises(exceptions.NotFound, self.client.delete_server,
241 sys.maxint + 1)
donald-ngo78bd7f52013-02-08 14:35:16 -0800242
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400243 @attr(type=['negative', 'gate'])
donald-ngo78bd7f52013-02-08 14:35:16 -0800244 def test_create_with_nonexistent_security_group(self):
245 # Create a server with a nonexistent security group
donald-ngo18edb812013-02-22 11:37:15 -0800246
247 security_groups = [{'name': 'does_not_exist'}]
Jordan Pittierce89f632013-06-25 16:04:39 +0000248 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500249 self.create_server,
donald-ngo18edb812013-02-22 11:37:15 -0800250 security_groups=security_groups)
hi2suresh063acbc2013-02-20 09:32:03 +0000251
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400252 @attr(type=['negative', 'gate'])
hi2suresh063acbc2013-02-20 09:32:03 +0000253 def test_get_non_existent_server(self):
254 # Get a non existent server details
donald-ngo18edb812013-02-22 11:37:15 -0800255
hi2suresh063acbc2013-02-20 09:32:03 +0000256 self.assertRaises(exceptions.NotFound, self.client.get_server,
257 '999erra43')
Sean Daguee623f752013-02-27 14:52:15 -0500258
Anju Tiwari6c336162013-08-08 12:21:02 +0530259 @attr(type=['negative', 'gate'])
260 def test_stop_non_existent_server(self):
261 # Stop a non existent server
Anju Tiwari6c336162013-08-08 12:21:02 +0530262 self.assertRaises(exceptions.NotFound, self.servers_client.stop,
LingxianKongb2ca96f2013-09-28 23:09:30 +0800263 str(uuid.uuid4()))
Anju Tiwari6c336162013-08-08 12:21:02 +0530264
265 @attr(type=['negative', 'gate'])
266 def test_pause_non_existent_server(self):
267 # pause a non existent server
Anju Tiwari6c336162013-08-08 12:21:02 +0530268 self.assertRaises(exceptions.NotFound, self.client.pause_server,
LingxianKongb2ca96f2013-09-28 23:09:30 +0800269 str(uuid.uuid4()))
270
271 @attr(type=['negative', 'gate'])
272 def test_unpause_non_existent_server(self):
273 # unpause a non existent server
274 self.assertRaises(exceptions.NotFound, self.client.unpause_server,
275 str(uuid.uuid4()))
276
277 @attr(type=['negative', 'gate'])
278 def test_unpause_server_invalid_state(self):
279 # unpause an active server.
280 resp, server = self.create_server(wait_until='ACTIVE')
281 server_id = server['id']
282 self.assertRaises(exceptions.Duplicate,
283 self.client.unpause_server,
284 server_id)
Anju Tiwari6c336162013-08-08 12:21:02 +0530285
LingxianKong691a5702013-09-29 11:43:45 +0800286 @attr(type=['negative', 'gate'])
287 def test_suspend_non_existent_server(self):
288 # suspend a non existent server
289 self.assertRaises(exceptions.NotFound, self.client.suspend_server,
290 str(uuid.uuid4()))
291
292 @attr(type=['negative', 'gate'])
293 def test_suspend_server_invalid_state(self):
294 # create server.
295 resp, server = self.create_server(wait_until='ACTIVE')
296 server_id = server['id']
297
298 # suspend a suspended server.
299 resp, _ = self.client.suspend_server(server_id)
300 self.assertEqual(202, resp.status)
301 self.client.wait_for_server_status(server_id, 'SUSPENDED')
302 self.assertRaises(exceptions.Duplicate,
303 self.client.suspend_server,
304 server_id)
305
306 @attr(type=['negative', 'gate'])
307 def test_resume_non_existent_server(self):
308 # resume a non existent server
309 self.assertRaises(exceptions.NotFound, self.client.resume_server,
310 str(uuid.uuid4()))
311
312 @attr(type=['negative', 'gate'])
313 def test_resume_server_invalid_state(self):
314 # create server.
315 resp, server = self.create_server(wait_until='ACTIVE')
316 server_id = server['id']
317
318 # resume an active server.
319 self.assertRaises(exceptions.Duplicate,
320 self.client.resume_server,
321 server_id)
322
Sean Daguee623f752013-02-27 14:52:15 -0500323
Xiao Hanyuab61c072013-06-26 15:33:42 +0800324class ServersNegativeTestXML(ServersNegativeTestJSON):
Sean Daguee623f752013-02-27 14:52:15 -0500325 _interface = 'xml'