blob: 55d95819723d2337e65af51acbd4258e3b1cdae8 [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
ivan-zhu1feeb382013-01-24 10:14:39 +080020import testtools
Jay Pipes13b479b2012-06-11 14:52:27 -040021
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
James E. Blaire6d8ee12013-01-18 21:33:45 +000026from tempest.tests.compute.base import BaseComputeTest
Daryl Walleckadea1fa2011-11-15 18:36:39 -060027
28
James E. Blaire6d8ee12013-01-18 21:33:45 +000029class ServersNegativeTest(BaseComputeTest):
Daryl Walleckadea1fa2011-11-15 18:36:39 -060030
31 @classmethod
32 def setUpClass(cls):
ivan-zhu1feeb382013-01-24 10:14:39 +080033 raise cls.skipException("Until Bug 1046870 is fixed")
Jay Pipesf38eaac2012-06-21 13:37:35 -040034 super(ServersNegativeTest, cls).setUpClass()
Daryl Walleckc7251962012-03-12 17:26:54 -050035 cls.client = cls.servers_client
Rohit Karajgidc300b22012-05-04 08:11:00 -070036 cls.img_client = cls.images_client
Matthew Treinish481466b2012-12-20 17:16:01 -050037 cls.alt_os = clients.AltManager()
Rohit Karajgidc300b22012-05-04 08:11:00 -070038 cls.alt_client = cls.alt_os.servers_client
Daryl Walleckadea1fa2011-11-15 18:36:39 -060039
Rohit Karajgidc300b22012-05-04 08:11:00 -070040 @attr(type='negative')
Daryl Walleckadea1fa2011-11-15 18:36:39 -060041 def test_server_name_blank(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050042 # Create a server with name parameter empty
Daryl Walleckadea1fa2011-11-15 18:36:39 -060043 try:
Sean Dague9b669e32012-12-13 18:40:08 -050044 resp, server = self.create_server_with_extras('',
45 self.image_ref,
46 self.flavor_ref)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060047 except exceptions.BadRequest:
48 pass
49 else:
50 self.fail('Server name cannot be blank')
51
Rohit Karajgidc300b22012-05-04 08:11:00 -070052 @attr(type='negative')
Daryl Walleckadea1fa2011-11-15 18:36:39 -060053 def test_personality_file_contents_not_encoded(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050054 # Use an unencoded file when creating a server with personality
Daryl Walleckadea1fa2011-11-15 18:36:39 -060055 file_contents = 'This is a test file.'
Sean Dague9b669e32012-12-13 18:40:08 -050056 person = [{'path': '/etc/testfile.txt',
57 'contents': file_contents}]
Daryl Walleckadea1fa2011-11-15 18:36:39 -060058
59 try:
Sean Dague9b669e32012-12-13 18:40:08 -050060 resp, server = self.create_server_with_extras('test',
61 self.image_ref,
62 self.flavor_ref,
63 personality=person)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060064 except exceptions.BadRequest:
65 pass
66 else:
67 self.fail('Unencoded file contents should not be accepted')
68
Rohit Karajgidc300b22012-05-04 08:11:00 -070069 @attr(type='negative')
Daryl Walleckadea1fa2011-11-15 18:36:39 -060070 def test_create_with_invalid_image(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050071 # Create a server with an unknown image
Daryl Walleckadea1fa2011-11-15 18:36:39 -060072 try:
Sean Dague9b669e32012-12-13 18:40:08 -050073 resp, server = self.create_server_with_extras('fail', -1,
74 self.flavor_ref)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060075 except exceptions.BadRequest:
76 pass
77 else:
78 self.fail('Cannot create a server with an invalid image')
79
Rohit Karajgidc300b22012-05-04 08:11:00 -070080 @attr(type='negative')
Daryl Walleckadea1fa2011-11-15 18:36:39 -060081 def test_create_with_invalid_flavor(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050082 # Create a server with an unknown flavor
Daryl Walleckadea1fa2011-11-15 18:36:39 -060083 try:
Sean Dague9b669e32012-12-13 18:40:08 -050084 self.create_server_with_extras('fail', self.image_ref, -1)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060085 except exceptions.BadRequest:
86 pass
87 else:
88 self.fail('Cannot create a server with an invalid flavor')
89
Rohit Karajgidc300b22012-05-04 08:11:00 -070090 @attr(type='negative')
Daryl Walleckadea1fa2011-11-15 18:36:39 -060091 def test_invalid_access_ip_v4_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050092 # An access IPv4 address must match a valid address pattern
Sean Dague9b669e32012-12-13 18:40:08 -050093 IPv4 = '1.1.1.1.1.1'
Daryl Walleckadea1fa2011-11-15 18:36:39 -060094 name = rand_name('server')
95 try:
Sean Dague9b669e32012-12-13 18:40:08 -050096 resp, server = self.create_server_with_extras(name,
97 self.image_ref,
98 self.flavor_ref,
99 accessIPv4=IPv4)
Daryl Walleckadea1fa2011-11-15 18:36:39 -0600100 except exceptions.BadRequest:
101 pass
102 else:
103 self.fail('Access IPv4 address must match the correct format')
104
Rohit Karajgidc300b22012-05-04 08:11:00 -0700105 @attr(type='negative')
Daryl Walleckadea1fa2011-11-15 18:36:39 -0600106 def test_invalid_ip_v6_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500107 # An access IPv6 address must match a valid address pattern
Sean Dague9b669e32012-12-13 18:40:08 -0500108 IPv6 = 'notvalid'
Daryl Walleckadea1fa2011-11-15 18:36:39 -0600109 name = rand_name('server')
110 try:
Sean Dague9b669e32012-12-13 18:40:08 -0500111 resp, server = self.create_server_with_extras(name,
112 self.image_ref,
113 self.flavor_ref,
114 accessIPv6=IPv6)
Daryl Walleckadea1fa2011-11-15 18:36:39 -0600115 except exceptions.BadRequest:
116 pass
117 else:
118 self.fail('Access IPv6 address must match the correct format')
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000119
Rohit Karajgidc300b22012-05-04 08:11:00 -0700120 @attr(type='negative')
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000121 def test_reboot_deleted_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500122 # Reboot a deleted server
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000123 self.name = rand_name('server')
Sean Dague9b669e32012-12-13 18:40:08 -0500124 resp, create_server = self.create_server_with_extras(self.name,
125 self.image_ref,
126 self.flavor_ref)
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000127 self.server_id = create_server['id']
128 self.client.delete_server(self.server_id)
David Kranz1b39dd42012-05-30 17:04:09 -0400129 self.client.wait_for_server_termination(self.server_id)
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000130 try:
131 resp1, reboot_server = self.client.reboot(self.server_id, 'SOFT')
132 except exceptions.NotFound:
133 pass
134 else:
135 self.fail('Should not be able to reboot a deleted server')
136
Rohit Karajgidc300b22012-05-04 08:11:00 -0700137 @attr(type='negative')
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000138 def test_rebuild_deleted_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500139 # Rebuild a deleted server
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000140 self.name = rand_name('server')
Sean Dague9b669e32012-12-13 18:40:08 -0500141 resp, create_server = self.create_server_with_extras(self.name,
142 self.image_ref,
143 self.flavor_ref)
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000144 self.server_id = create_server['id']
145 self.client.delete_server(self.server_id)
David Kranz1b39dd42012-05-30 17:04:09 -0400146 self.client.wait_for_server_termination(self.server_id)
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000147 try:
148 resp1, rebuild_server = self.client.rebuild(self.server_id,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800149 self.image_ref_alt)
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000150 except exceptions.NotFound:
151 pass
152 else:
153 self.fail('Should not be able to rebuild a deleted server')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700154
155 @attr(type='negative')
156 def test_create_numeric_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500157 # Create a server with a numeric name
Rohit Karajgidc300b22012-05-04 08:11:00 -0700158
159 server_name = 12345
Sean Dague9b669e32012-12-13 18:40:08 -0500160 self.assertRaises(exceptions.BadRequest,
161 self.create_server_with_extras,
Rohit Karajgidc300b22012-05-04 08:11:00 -0700162 server_name, self.image_ref, self.flavor_ref)
163
164 @attr(type='negative')
165 def test_create_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500166 # Create a server with name length exceeding 256 characters
Rohit Karajgidc300b22012-05-04 08:11:00 -0700167
168 server_name = 'a' * 256
Sean Dague9b669e32012-12-13 18:40:08 -0500169 self.assertRaises(exceptions.BadRequest,
170 self.create_server_with_extras,
Rohit Karajgidc300b22012-05-04 08:11:00 -0700171 server_name, self.image_ref, self.flavor_ref)
172
173 @attr(type='negative')
174 def test_create_with_invalid_network_uuid(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500175 # Pass invalid network uuid while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700176
177 server_name = rand_name('server')
Chris Yeohfc9e3332013-01-21 09:28:13 +1030178 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 -0700179
Sean Dague9b669e32012-12-13 18:40:08 -0500180 self.assertRaises(exceptions.BadRequest,
181 self.create_server_with_extras,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800182 server_name, self.image_ref, self.flavor_ref,
183 networks=networks)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700184
185 @attr(type='negative')
186 def test_create_with_non_existant_keypair(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500187 # Pass a non existant keypair while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700188
189 key_name = rand_name('key')
190 server_name = rand_name('server')
Sean Dague9b669e32012-12-13 18:40:08 -0500191 self.assertRaises(exceptions.BadRequest,
192 self.create_server_with_extras,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800193 server_name, self.image_ref, self.flavor_ref,
194 key_name=key_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700195
Rohit Karajgidc300b22012-05-04 08:11:00 -0700196 @attr(type='negative')
197 def test_create_server_metadata_exceeds_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500198 # Pass really long metadata while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700199
200 server_name = rand_name('server')
201 metadata = {'a': 'b' * 260}
Sean Dague9b669e32012-12-13 18:40:08 -0500202 self.assertRaises(exceptions.OverLimit,
203 self.create_server_with_extras,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800204 server_name, self.image_ref, self.flavor_ref,
205 meta=metadata)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700206
207 @attr(type='negative')
208 def test_update_name_of_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500209 # Update name of a non-existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700210
211 server_name = rand_name('server')
212 new_name = rand_name('server') + '_updated'
213
214 self.assertRaises(exceptions.NotFound, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800215 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700216
217 @attr(type='negative')
218 def test_update_server_set_empty_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500219 # Update name of the server to an empty string
Rohit Karajgidc300b22012-05-04 08:11:00 -0700220
221 server_name = rand_name('server')
222 new_name = ''
223
224 self.assertRaises(exceptions.BadRequest, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800225 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700226
227 @attr(type='negative')
228 def test_update_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500229 # Update name of a server that belongs to another tenant
Rohit Karajgidc300b22012-05-04 08:11:00 -0700230
231 server = self.create_server()
232 new_name = server['id'] + '_new'
233 self.assertRaises(exceptions.NotFound,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800234 self.alt_client.update_server, server['id'],
235 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700236
237 @attr(type='negative')
238 def test_update_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500239 # Update name of server exceed the name length limit
Rohit Karajgidc300b22012-05-04 08:11:00 -0700240
241 server = self.create_server()
242 new_name = 'a' * 256
243 self.assertRaises(exceptions.BadRequest,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800244 self.client.update_server,
245 server['id'],
246 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700247
248 @attr(type='negative')
249 def test_delete_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500250 # Delete a non existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700251
252 self.assertRaises(exceptions.NotFound, self.client.delete_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800253 '999erra43')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700254
255 @attr(type='negative')
256 def test_delete_a_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500257 # Delete a server that belongs to another tenant
rajalakshmi-ganesan6a863a82012-07-18 15:58:07 +0530258 try:
259 server = self.create_server()
260 self.assertRaises(exceptions.NotFound,
261 self.alt_client.delete_server,
262 server['id'])
263 finally:
264 self.client.delete_server(server['id'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700265
266 @attr(type='negative')
267 def test_delete_server_pass_negative_id(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500268 # Pass an invalid string parameter to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700269
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800270 self.assertRaises(exceptions.NotFound, self.client.delete_server, -1)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700271
272 @attr(type='negative')
273 def test_delete_server_pass_id_exceeding_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500274 # Pass a server ID that exceeds length limit to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700275
276 self.assertRaises(exceptions.NotFound, self.client.delete_server,
277 sys.maxint + 1)