blob: 226c40e96b410eb83ce2331ee45e4d5191688c4a [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.
17
Rohit Karajgidc300b22012-05-04 08:11:00 -070018import sys
Jay Pipes13b479b2012-06-11 14:52:27 -040019
Sean Dague1937d092013-05-17 16:36:38 -040020from tempest.api.compute import base
Matthew Treinish481466b2012-12-20 17:16:01 -050021from tempest import clients
Matthew Treinisha83a16e2012-12-07 13:44:02 -050022from tempest.common.utils.data_utils import rand_name
Daryl Wallecked8bef32011-12-05 23:02:08 -060023from tempest import exceptions
Chris Yeoh9465b0b2013-02-09 22:19:15 +103024from tempest.test import attr
Daryl Walleckadea1fa2011-11-15 18:36:39 -060025
26
Xiao Hanyuab61c072013-06-26 15:33:42 +080027class ServersNegativeTestJSON(base.BaseComputeTest):
donald-ngo18edb812013-02-22 11:37:15 -080028 _interface = 'json'
Daryl Walleckadea1fa2011-11-15 18:36:39 -060029
30 @classmethod
31 def setUpClass(cls):
Xiao Hanyuab61c072013-06-26 15:33:42 +080032 super(ServersNegativeTestJSON, cls).setUpClass()
Daryl Walleckc7251962012-03-12 17:26:54 -050033 cls.client = cls.servers_client
Rohit Karajgidc300b22012-05-04 08:11:00 -070034 cls.img_client = cls.images_client
Matthew Treinish481466b2012-12-20 17:16:01 -050035 cls.alt_os = clients.AltManager()
Rohit Karajgidc300b22012-05-04 08:11:00 -070036 cls.alt_client = cls.alt_os.servers_client
Daryl Walleckadea1fa2011-11-15 18:36:39 -060037
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040038 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060039 def test_server_name_blank(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050040 # Create a server with name parameter empty
donald-ngo18edb812013-02-22 11:37:15 -080041
42 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050043 self.create_server,
44 name='')
Daryl Walleckadea1fa2011-11-15 18:36:39 -060045
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040046 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060047 def test_personality_file_contents_not_encoded(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050048 # Use an unencoded file when creating a server with personality
donald-ngo18edb812013-02-22 11:37:15 -080049
Daryl Walleckadea1fa2011-11-15 18:36:39 -060050 file_contents = 'This is a test file.'
Sean Dague9b669e32012-12-13 18:40:08 -050051 person = [{'path': '/etc/testfile.txt',
52 'contents': file_contents}]
Daryl Walleckadea1fa2011-11-15 18:36:39 -060053
donald-ngo18edb812013-02-22 11:37:15 -080054 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050055 self.create_server,
donald-ngo18edb812013-02-22 11:37:15 -080056 personality=person)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060057
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040058 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060059 def test_create_with_invalid_image(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050060 # Create a server with an unknown image
donald-ngo18edb812013-02-22 11:37:15 -080061
62 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050063 self.create_server,
64 image_id=-1)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060065
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040066 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060067 def test_create_with_invalid_flavor(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050068 # Create a server with an unknown flavor
donald-ngo18edb812013-02-22 11:37:15 -080069
70 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050071 self.create_server,
72 flavor=-1,)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060073
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040074 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060075 def test_invalid_access_ip_v4_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050076 # An access IPv4 address must match a valid address pattern
donald-ngo18edb812013-02-22 11:37:15 -080077
Sean Dague9b669e32012-12-13 18:40:08 -050078 IPv4 = '1.1.1.1.1.1'
donald-ngo18edb812013-02-22 11:37:15 -080079 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050080 self.create_server, accessIPv4=IPv4)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060081
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040082 @attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060083 def test_invalid_ip_v6_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050084 # An access IPv6 address must match a valid address pattern
donald-ngo18edb812013-02-22 11:37:15 -080085
Sean Dague9b669e32012-12-13 18:40:08 -050086 IPv6 = 'notvalid'
donald-ngo18edb812013-02-22 11:37:15 -080087
88 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -050089 self.create_server, accessIPv6=IPv6)
ravikumar-venkatesan36892e12012-05-11 18:01:41 +000090
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040091 @attr(type=['negative', 'gate'])
ravikumar-venkatesan36892e12012-05-11 18:01:41 +000092 def test_reboot_deleted_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050093 # Reboot a deleted server
Sean Dague22897e12013-02-25 17:54:09 -050094 resp, server = self.create_server()
95 self.server_id = server['id']
ravikumar-venkatesan36892e12012-05-11 18:01:41 +000096 self.client.delete_server(self.server_id)
David Kranz1b39dd42012-05-30 17:04:09 -040097 self.client.wait_for_server_termination(self.server_id)
donald-ngo18edb812013-02-22 11:37:15 -080098 self.assertRaises(exceptions.NotFound, self.client.reboot,
99 self.server_id, 'SOFT')
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000100
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400101 @attr(type=['negative', 'gate'])
Anju Tiwari8c789762013-07-22 11:02:05 +0530102 def test_pause_paused_server(self):
103 # Pause a paused server.
104 resp, server = self.create_server(wait_until='ACTIVE')
105 self.server_id = server['id']
106 self.client.pause_server(self.server_id)
107 self.client.wait_for_server_status(self.server_id, 'PAUSED')
108 self.assertRaises(exceptions.Duplicate,
109 self.client.pause_server,
110 self.server_id)
111
112 @attr(type=['negative', 'gate'])
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000113 def test_rebuild_deleted_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500114 # Rebuild a deleted server
donald-ngo18edb812013-02-22 11:37:15 -0800115
Sean Dague22897e12013-02-25 17:54:09 -0500116 resp, server = self.create_server()
117 self.server_id = server['id']
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000118 self.client.delete_server(self.server_id)
David Kranz1b39dd42012-05-30 17:04:09 -0400119 self.client.wait_for_server_termination(self.server_id)
donald-ngo18edb812013-02-22 11:37:15 -0800120
121 self.assertRaises(exceptions.NotFound,
122 self.client.rebuild,
123 self.server_id, self.image_ref_alt)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700124
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400125 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700126 def test_create_numeric_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500127 # Create a server with a numeric name
Sean Daguee623f752013-02-27 14:52:15 -0500128 if self.__class__._interface == "xml":
129 raise self.skipException("Not testable in XML")
Rohit Karajgidc300b22012-05-04 08:11:00 -0700130
131 server_name = 12345
Sean Dague9b669e32012-12-13 18:40:08 -0500132 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500133 self.create_server,
134 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700135
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400136 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700137 def test_create_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500138 # Create a server with name length exceeding 256 characters
Rohit Karajgidc300b22012-05-04 08:11:00 -0700139
140 server_name = 'a' * 256
Sean Dague9b669e32012-12-13 18:40:08 -0500141 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500142 self.create_server,
143 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700144
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400145 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700146 def test_create_with_invalid_network_uuid(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500147 # Pass invalid network uuid while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700148
Chris Yeohfc9e3332013-01-21 09:28:13 +1030149 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 -0700150
Sean Dague9b669e32012-12-13 18:40:08 -0500151 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500152 self.create_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800153 networks=networks)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700154
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400155 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700156 def test_create_with_non_existant_keypair(self):
Chang Bo Guof099f802013-09-13 19:01:46 -0700157 # Pass a non-existent keypair while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700158
159 key_name = rand_name('key')
Sean Dague9b669e32012-12-13 18:40:08 -0500160 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500161 self.create_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800162 key_name=key_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700163
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400164 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700165 def test_create_server_metadata_exceeds_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500166 # Pass really long metadata while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700167
Rohit Karajgidc300b22012-05-04 08:11:00 -0700168 metadata = {'a': 'b' * 260}
Sean Dague9b669e32012-12-13 18:40:08 -0500169 self.assertRaises(exceptions.OverLimit,
Sean Dague22897e12013-02-25 17:54:09 -0500170 self.create_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800171 meta=metadata)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700172
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400173 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700174 def test_update_name_of_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500175 # Update name of a non-existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700176
177 server_name = rand_name('server')
178 new_name = rand_name('server') + '_updated'
179
180 self.assertRaises(exceptions.NotFound, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800181 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700182
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400183 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700184 def test_update_server_set_empty_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500185 # Update name of the server to an empty string
Rohit Karajgidc300b22012-05-04 08:11:00 -0700186
187 server_name = rand_name('server')
188 new_name = ''
189
190 self.assertRaises(exceptions.BadRequest, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800191 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700192
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400193 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700194 def test_update_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500195 # Update name of a server that belongs to another tenant
Rohit Karajgidc300b22012-05-04 08:11:00 -0700196
Sean Daguee623f752013-02-27 14:52:15 -0500197 resp, server = self.create_server(wait_until='ACTIVE')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700198 new_name = server['id'] + '_new'
199 self.assertRaises(exceptions.NotFound,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800200 self.alt_client.update_server, server['id'],
201 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700202
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400203 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700204 def test_update_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500205 # Update name of server exceed the name length limit
Rohit Karajgidc300b22012-05-04 08:11:00 -0700206
Sean Daguee623f752013-02-27 14:52:15 -0500207 resp, server = self.create_server(wait_until='ACTIVE')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700208 new_name = 'a' * 256
209 self.assertRaises(exceptions.BadRequest,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800210 self.client.update_server,
211 server['id'],
212 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700213
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400214 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700215 def test_delete_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500216 # Delete a non existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700217
218 self.assertRaises(exceptions.NotFound, self.client.delete_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800219 '999erra43')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700220
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400221 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700222 def test_delete_a_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500223 # Delete a server that belongs to another tenant
Matthew Treinish38c4dc42013-07-30 14:30:07 -0400224 resp, server = self.create_server(wait_until='ACTIVE')
225 self.assertRaises(exceptions.NotFound,
226 self.alt_client.delete_server,
227 server['id'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700228
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400229 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700230 def test_delete_server_pass_negative_id(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500231 # Pass an invalid string parameter to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700232
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800233 self.assertRaises(exceptions.NotFound, self.client.delete_server, -1)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700234
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400235 @attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700236 def test_delete_server_pass_id_exceeding_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500237 # Pass a server ID that exceeds length limit to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700238
239 self.assertRaises(exceptions.NotFound, self.client.delete_server,
240 sys.maxint + 1)
donald-ngo78bd7f52013-02-08 14:35:16 -0800241
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400242 @attr(type=['negative', 'gate'])
donald-ngo78bd7f52013-02-08 14:35:16 -0800243 def test_create_with_nonexistent_security_group(self):
244 # Create a server with a nonexistent security group
donald-ngo18edb812013-02-22 11:37:15 -0800245
246 security_groups = [{'name': 'does_not_exist'}]
Jordan Pittierce89f632013-06-25 16:04:39 +0000247 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500248 self.create_server,
donald-ngo18edb812013-02-22 11:37:15 -0800249 security_groups=security_groups)
hi2suresh063acbc2013-02-20 09:32:03 +0000250
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400251 @attr(type=['negative', 'gate'])
hi2suresh063acbc2013-02-20 09:32:03 +0000252 def test_get_non_existent_server(self):
253 # Get a non existent server details
donald-ngo18edb812013-02-22 11:37:15 -0800254
hi2suresh063acbc2013-02-20 09:32:03 +0000255 self.assertRaises(exceptions.NotFound, self.client.get_server,
256 '999erra43')
Sean Daguee623f752013-02-27 14:52:15 -0500257
Anju Tiwari6c336162013-08-08 12:21:02 +0530258 @attr(type=['negative', 'gate'])
259 def test_stop_non_existent_server(self):
260 # Stop a non existent server
261 non_exist_id = rand_name('non-existent-server')
262 self.assertRaises(exceptions.NotFound, self.servers_client.stop,
263 non_exist_id)
264
265 @attr(type=['negative', 'gate'])
266 def test_pause_non_existent_server(self):
267 # pause a non existent server
268 non_exist_id = rand_name('non-existent-server')
269 self.assertRaises(exceptions.NotFound, self.client.pause_server,
270 non_exist_id)
271
Sean Daguee623f752013-02-27 14:52:15 -0500272
Xiao Hanyuab61c072013-06-26 15:33:42 +0800273class ServersNegativeTestXML(ServersNegativeTestJSON):
Sean Daguee623f752013-02-27 14:52:15 -0500274 _interface = 'xml'