blob: b3691796a29d384f571e3b9801c193874844a627 [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
donald-ngo18edb812013-02-22 11:37:15 -080027class ServersNegativeTest(base.BaseComputeTest):
28 _interface = 'json'
Daryl Walleckadea1fa2011-11-15 18:36:39 -060029
30 @classmethod
31 def setUpClass(cls):
Jay Pipesf38eaac2012-06-21 13:37:35 -040032 super(ServersNegativeTest, 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
Rohit Karajgidc300b22012-05-04 08:11:00 -070038 @attr(type='negative')
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
Rohit Karajgidc300b22012-05-04 08:11:00 -070046 @attr(type='negative')
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
Rohit Karajgidc300b22012-05-04 08:11:00 -070058 @attr(type='negative')
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
Rohit Karajgidc300b22012-05-04 08:11:00 -070066 @attr(type='negative')
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
Rohit Karajgidc300b22012-05-04 08:11:00 -070074 @attr(type='negative')
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
Rohit Karajgidc300b22012-05-04 08:11:00 -070082 @attr(type='negative')
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
Rohit Karajgidc300b22012-05-04 08:11:00 -070091 @attr(type='negative')
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
Rohit Karajgidc300b22012-05-04 08:11:00 -0700101 @attr(type='negative')
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000102 def test_rebuild_deleted_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500103 # Rebuild a deleted server
donald-ngo18edb812013-02-22 11:37:15 -0800104
Sean Dague22897e12013-02-25 17:54:09 -0500105 resp, server = self.create_server()
106 self.server_id = server['id']
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000107 self.client.delete_server(self.server_id)
David Kranz1b39dd42012-05-30 17:04:09 -0400108 self.client.wait_for_server_termination(self.server_id)
donald-ngo18edb812013-02-22 11:37:15 -0800109
110 self.assertRaises(exceptions.NotFound,
111 self.client.rebuild,
112 self.server_id, self.image_ref_alt)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700113
114 @attr(type='negative')
115 def test_create_numeric_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500116 # Create a server with a numeric name
Sean Daguee623f752013-02-27 14:52:15 -0500117 if self.__class__._interface == "xml":
118 raise self.skipException("Not testable in XML")
Rohit Karajgidc300b22012-05-04 08:11:00 -0700119
120 server_name = 12345
Sean Dague9b669e32012-12-13 18:40:08 -0500121 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500122 self.create_server,
123 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700124
125 @attr(type='negative')
126 def test_create_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500127 # Create a server with name length exceeding 256 characters
Rohit Karajgidc300b22012-05-04 08:11:00 -0700128
129 server_name = 'a' * 256
Sean Dague9b669e32012-12-13 18:40:08 -0500130 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500131 self.create_server,
132 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700133
134 @attr(type='negative')
135 def test_create_with_invalid_network_uuid(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500136 # Pass invalid network uuid while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700137
Chris Yeohfc9e3332013-01-21 09:28:13 +1030138 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 -0700139
Sean Dague9b669e32012-12-13 18:40:08 -0500140 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500141 self.create_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800142 networks=networks)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700143
144 @attr(type='negative')
145 def test_create_with_non_existant_keypair(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500146 # Pass a non existant keypair while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700147
148 key_name = rand_name('key')
Sean Dague9b669e32012-12-13 18:40:08 -0500149 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500150 self.create_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800151 key_name=key_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700152
Rohit Karajgidc300b22012-05-04 08:11:00 -0700153 @attr(type='negative')
154 def test_create_server_metadata_exceeds_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500155 # Pass really long metadata while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700156
Rohit Karajgidc300b22012-05-04 08:11:00 -0700157 metadata = {'a': 'b' * 260}
Sean Dague9b669e32012-12-13 18:40:08 -0500158 self.assertRaises(exceptions.OverLimit,
Sean Dague22897e12013-02-25 17:54:09 -0500159 self.create_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800160 meta=metadata)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700161
162 @attr(type='negative')
163 def test_update_name_of_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500164 # Update name of a non-existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700165
166 server_name = rand_name('server')
167 new_name = rand_name('server') + '_updated'
168
169 self.assertRaises(exceptions.NotFound, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800170 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700171
172 @attr(type='negative')
173 def test_update_server_set_empty_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500174 # Update name of the server to an empty string
Rohit Karajgidc300b22012-05-04 08:11:00 -0700175
176 server_name = rand_name('server')
177 new_name = ''
178
179 self.assertRaises(exceptions.BadRequest, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800180 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700181
182 @attr(type='negative')
183 def test_update_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500184 # Update name of a server that belongs to another tenant
Rohit Karajgidc300b22012-05-04 08:11:00 -0700185
Sean Daguee623f752013-02-27 14:52:15 -0500186 resp, server = self.create_server(wait_until='ACTIVE')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700187 new_name = server['id'] + '_new'
188 self.assertRaises(exceptions.NotFound,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800189 self.alt_client.update_server, server['id'],
190 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700191
192 @attr(type='negative')
193 def test_update_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500194 # Update name of server exceed the name length limit
Rohit Karajgidc300b22012-05-04 08:11:00 -0700195
Sean Daguee623f752013-02-27 14:52:15 -0500196 resp, server = self.create_server(wait_until='ACTIVE')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700197 new_name = 'a' * 256
198 self.assertRaises(exceptions.BadRequest,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800199 self.client.update_server,
200 server['id'],
201 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700202
203 @attr(type='negative')
204 def test_delete_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500205 # Delete a non existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700206
207 self.assertRaises(exceptions.NotFound, self.client.delete_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800208 '999erra43')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700209
210 @attr(type='negative')
211 def test_delete_a_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500212 # Delete a server that belongs to another tenant
rajalakshmi-ganesan6a863a82012-07-18 15:58:07 +0530213 try:
Sean Daguee623f752013-02-27 14:52:15 -0500214 resp, server = self.create_server(wait_until='ACTIVE')
rajalakshmi-ganesan6a863a82012-07-18 15:58:07 +0530215 self.assertRaises(exceptions.NotFound,
216 self.alt_client.delete_server,
217 server['id'])
218 finally:
219 self.client.delete_server(server['id'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700220
221 @attr(type='negative')
222 def test_delete_server_pass_negative_id(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500223 # Pass an invalid string parameter to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700224
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800225 self.assertRaises(exceptions.NotFound, self.client.delete_server, -1)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700226
227 @attr(type='negative')
228 def test_delete_server_pass_id_exceeding_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500229 # Pass a server ID that exceeds length limit to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700230
231 self.assertRaises(exceptions.NotFound, self.client.delete_server,
232 sys.maxint + 1)
donald-ngo78bd7f52013-02-08 14:35:16 -0800233
234 @attr(type='negative')
235 def test_create_with_nonexistent_security_group(self):
236 # Create a server with a nonexistent security group
donald-ngo18edb812013-02-22 11:37:15 -0800237
238 security_groups = [{'name': 'does_not_exist'}]
239 self.assertRaises(exceptions.BadRequest,
Sean Dague22897e12013-02-25 17:54:09 -0500240 self.create_server,
donald-ngo18edb812013-02-22 11:37:15 -0800241 security_groups=security_groups)
hi2suresh063acbc2013-02-20 09:32:03 +0000242
243 @attr(type='negative')
244 def test_get_non_existent_server(self):
245 # Get a non existent server details
donald-ngo18edb812013-02-22 11:37:15 -0800246
hi2suresh063acbc2013-02-20 09:32:03 +0000247 self.assertRaises(exceptions.NotFound, self.client.get_server,
248 '999erra43')
Sean Daguee623f752013-02-27 14:52:15 -0500249
250
251class ServersNegativeTestXML(ServersNegativeTest):
252 _interface = 'xml'