blob: cc801b5be244e6ef05ee09727796633c2104b86c [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipes13b479b2012-06-11 14:52:27 -04002# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +090016import base64
Rohit Karajgidc300b22012-05-04 08:11:00 -070017import sys
Jay Pipes13b479b2012-06-11 14:52:27 -040018
Eric Windischb5538072014-03-09 23:47:35 -040019import testtools
20
Sean Dague1937d092013-05-17 16:36:38 -040021from tempest.api.compute import base
Matthew Treinish481466b2012-12-20 17:16:01 -050022from tempest import clients
Masayuki Igawa259c1132013-10-31 17:48:44 +090023from tempest.common.utils import data_utils
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000024from tempest import config
Daryl Wallecked8bef32011-12-05 23:02:08 -060025from tempest import exceptions
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090026from tempest import test
Daryl Walleckadea1fa2011-11-15 18:36:39 -060027
Matthew Treinishb0a78fc2014-01-29 16:49:12 +000028CONF = config.CONF
29
Daryl Walleckadea1fa2011-11-15 18:36:39 -060030
ivan-zhuf2b00502013-10-18 10:06:52 +080031class ServersNegativeTestJSON(base.BaseV2ComputeTest):
Daryl Walleckadea1fa2011-11-15 18:36:39 -060032
Ken'ichi Ohmichida306502013-10-08 23:44:55 +090033 def setUp(self):
34 super(ServersNegativeTestJSON, self).setUp()
35 try:
36 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
37 except Exception:
Ken'ichi Ohmichi122cdf52013-12-11 21:32:25 +090038 self.__class__.server_id = self.rebuild_server(self.server_id)
Ken'ichi Ohmichida306502013-10-08 23:44:55 +090039
Daryl Walleckadea1fa2011-11-15 18:36:39 -060040 @classmethod
41 def setUpClass(cls):
Xiao Hanyuab61c072013-06-26 15:33:42 +080042 super(ServersNegativeTestJSON, cls).setUpClass()
Daryl Walleckc7251962012-03-12 17:26:54 -050043 cls.client = cls.servers_client
Matthew Treinish481466b2012-12-20 17:16:01 -050044 cls.alt_os = clients.AltManager()
Rohit Karajgidc300b22012-05-04 08:11:00 -070045 cls.alt_client = cls.alt_os.servers_client
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090046 resp, server = cls.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichida306502013-10-08 23:44:55 +090047 cls.server_id = server['id']
Daryl Walleckadea1fa2011-11-15 18:36:39 -060048
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090049 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060050 def test_server_name_blank(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050051 # Create a server with name parameter empty
donald-ngo18edb812013-02-22 11:37:15 -080052
53 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090054 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -050055 name='')
Daryl Walleckadea1fa2011-11-15 18:36:39 -060056
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090057 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060058 def test_personality_file_contents_not_encoded(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050059 # Use an unencoded file when creating a server with personality
donald-ngo18edb812013-02-22 11:37:15 -080060
Daryl Walleckadea1fa2011-11-15 18:36:39 -060061 file_contents = 'This is a test file.'
Sean Dague9b669e32012-12-13 18:40:08 -050062 person = [{'path': '/etc/testfile.txt',
63 'contents': file_contents}]
Daryl Walleckadea1fa2011-11-15 18:36:39 -060064
donald-ngo18edb812013-02-22 11:37:15 -080065 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090066 self.create_test_server,
donald-ngo18edb812013-02-22 11:37:15 -080067 personality=person)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060068
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090069 @test.attr(type=['negative', 'gate'])
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
donald-ngo18edb812013-02-22 11:37:15 -080072
73 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090074 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -050075 image_id=-1)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060076
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090077 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060078 def test_create_with_invalid_flavor(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050079 # Create a server with an unknown flavor
donald-ngo18edb812013-02-22 11:37:15 -080080
81 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090082 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -050083 flavor=-1,)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060084
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090085 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060086 def test_invalid_access_ip_v4_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050087 # An access IPv4 address must match a valid address pattern
donald-ngo18edb812013-02-22 11:37:15 -080088
Sean Dague9b669e32012-12-13 18:40:08 -050089 IPv4 = '1.1.1.1.1.1'
donald-ngo18edb812013-02-22 11:37:15 -080090 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090091 self.create_test_server, accessIPv4=IPv4)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060092
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090093 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060094 def test_invalid_ip_v6_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050095 # An access IPv6 address must match a valid address pattern
donald-ngo18edb812013-02-22 11:37:15 -080096
Sean Dague9b669e32012-12-13 18:40:08 -050097 IPv6 = 'notvalid'
donald-ngo18edb812013-02-22 11:37:15 -080098
99 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900100 self.create_test_server, accessIPv6=IPv6)
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000101
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900102 @test.attr(type=['negative', 'gate'])
Hoisaleshwara Madan V Sf49bf182013-10-21 10:19:43 +0530103 def test_resize_nonexistent_server(self):
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900104 # Resize a non-existent server
105 nonexistent_server = data_utils.rand_uuid()
Hoisaleshwara Madan V Sf49bf182013-10-21 10:19:43 +0530106 self.assertRaises(exceptions.NotFound,
107 self.client.resize,
108 nonexistent_server, self.flavor_ref)
109
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900110 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900111 def test_resize_server_with_non_existent_flavor(self):
112 # Resize a server with non-existent flavor
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900113 nonexistent_flavor = data_utils.rand_uuid()
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900114 self.assertRaises(exceptions.BadRequest, self.client.resize,
115 self.server_id, flavor_ref=nonexistent_flavor)
116
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900117 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900118 def test_resize_server_with_null_flavor(self):
119 # Resize a server with null flavor
120 self.assertRaises(exceptions.BadRequest, self.client.resize,
121 self.server_id, flavor_ref="")
122
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900123 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900124 def test_reboot_non_existent_server(self):
125 # Reboot a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900126 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900127 self.assertRaises(exceptions.NotFound, self.client.reboot,
128 nonexistent_server, 'SOFT')
129
Matt Riedemann992162e2014-03-24 09:11:06 -0700130 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
131 'Pause is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900132 @test.attr(type=['negative', 'gate'])
Anju Tiwari8c789762013-07-22 11:02:05 +0530133 def test_pause_paused_server(self):
134 # Pause a paused server.
Anju Tiwari8c789762013-07-22 11:02:05 +0530135 self.client.pause_server(self.server_id)
Attila Fazekas6fab1a12013-10-17 17:38:54 +0200136 self.addCleanup(self.client.unpause_server,
137 self.server_id)
Anju Tiwari8c789762013-07-22 11:02:05 +0530138 self.client.wait_for_server_status(self.server_id, 'PAUSED')
Anju5c3e510c2013-10-18 06:40:29 +0530139 self.assertRaises(exceptions.Conflict,
Anju Tiwari8c789762013-07-22 11:02:05 +0530140 self.client.pause_server,
141 self.server_id)
142
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900143 @test.attr(type=['negative', 'gate'])
Attila Fazekas6fab1a12013-10-17 17:38:54 +0200144 def test_rebuild_reboot_deleted_server(self):
145 # Rebuild and Reboot a deleted server
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900146 _, server = self.create_test_server()
Attila Fazekas6fab1a12013-10-17 17:38:54 +0200147 self.client.delete_server(server['id'])
148 self.client.wait_for_server_termination(server['id'])
donald-ngo18edb812013-02-22 11:37:15 -0800149
150 self.assertRaises(exceptions.NotFound,
151 self.client.rebuild,
Attila Fazekas6fab1a12013-10-17 17:38:54 +0200152 server['id'], self.image_ref_alt)
153 self.assertRaises(exceptions.NotFound, self.client.reboot,
154 server['id'], 'SOFT')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700155
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900156 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900157 def test_rebuild_non_existent_server(self):
158 # Rebuild a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900159 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900160 meta = {'rebuild': 'server'}
Masayuki Igawa259c1132013-10-31 17:48:44 +0900161 new_name = data_utils.rand_name('server')
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900162 file_contents = 'Test server rebuild.'
163 personality = [{'path': '/etc/rebuild.txt',
164 'contents': base64.b64encode(file_contents)}]
165 self.assertRaises(exceptions.NotFound,
166 self.client.rebuild,
167 nonexistent_server,
168 self.image_ref_alt,
169 name=new_name, meta=meta,
170 personality=personality,
171 adminPass='rebuild')
172
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900173 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700174 def test_create_numeric_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500175 # Create a server with a numeric name
Sean Daguee623f752013-02-27 14:52:15 -0500176 if self.__class__._interface == "xml":
177 raise self.skipException("Not testable in XML")
Rohit Karajgidc300b22012-05-04 08:11:00 -0700178
179 server_name = 12345
Sean Dague9b669e32012-12-13 18:40:08 -0500180 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900181 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -0500182 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700183
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900184 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700185 def test_create_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500186 # Create a server with name length exceeding 256 characters
Rohit Karajgidc300b22012-05-04 08:11:00 -0700187
188 server_name = 'a' * 256
Sean Dague9b669e32012-12-13 18:40:08 -0500189 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900190 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -0500191 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700192
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900193 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700194 def test_create_with_invalid_network_uuid(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500195 # Pass invalid network uuid while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700196
Chris Yeohfc9e3332013-01-21 09:28:13 +1030197 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 -0700198
Sean Dague9b669e32012-12-13 18:40:08 -0500199 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900200 self.create_test_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800201 networks=networks)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700202
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900203 @test.attr(type=['negative', 'gate'])
nayna-patel179077c2014-01-15 12:27:16 +0000204 def test_create_with_non_existent_keypair(self):
Chang Bo Guof099f802013-09-13 19:01:46 -0700205 # Pass a non-existent keypair while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700206
Masayuki Igawa259c1132013-10-31 17:48:44 +0900207 key_name = data_utils.rand_name('key')
Sean Dague9b669e32012-12-13 18:40:08 -0500208 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900209 self.create_test_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800210 key_name=key_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700211
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900212 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700213 def test_create_server_metadata_exceeds_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500214 # Pass really long metadata while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700215
Rohit Karajgidc300b22012-05-04 08:11:00 -0700216 metadata = {'a': 'b' * 260}
Sean Dague9b669e32012-12-13 18:40:08 -0500217 self.assertRaises(exceptions.OverLimit,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900218 self.create_test_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800219 meta=metadata)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700220
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900221 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700222 def test_update_name_of_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500223 # Update name of a non-existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700224
Masayuki Igawa259c1132013-10-31 17:48:44 +0900225 server_name = data_utils.rand_name('server')
226 new_name = data_utils.rand_name('server') + '_updated'
Rohit Karajgidc300b22012-05-04 08:11:00 -0700227
228 self.assertRaises(exceptions.NotFound, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800229 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700230
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900231 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700232 def test_update_server_set_empty_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500233 # Update name of the server to an empty string
Rohit Karajgidc300b22012-05-04 08:11:00 -0700234
Masayuki Igawa259c1132013-10-31 17:48:44 +0900235 server_name = data_utils.rand_name('server')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700236 new_name = ''
237
238 self.assertRaises(exceptions.BadRequest, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800239 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700240
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900241 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700242 def test_update_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500243 # Update name of a server that belongs to another tenant
Rohit Karajgidc300b22012-05-04 08:11:00 -0700244
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900245 new_name = self.server_id + '_new'
Rohit Karajgidc300b22012-05-04 08:11:00 -0700246 self.assertRaises(exceptions.NotFound,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900247 self.alt_client.update_server, self.server_id,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800248 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700249
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900250 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700251 def test_update_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500252 # Update name of server exceed the name length limit
Rohit Karajgidc300b22012-05-04 08:11:00 -0700253
Rohit Karajgidc300b22012-05-04 08:11:00 -0700254 new_name = 'a' * 256
255 self.assertRaises(exceptions.BadRequest,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800256 self.client.update_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900257 self.server_id,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800258 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700259
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900260 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700261 def test_delete_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500262 # Delete a non existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700263
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900264 nonexistent_server = data_utils.rand_uuid()
Rohit Karajgidc300b22012-05-04 08:11:00 -0700265 self.assertRaises(exceptions.NotFound, self.client.delete_server,
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900266 nonexistent_server)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700267
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900268 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700269 def test_delete_a_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500270 # Delete a server that belongs to another tenant
Matthew Treinish38c4dc42013-07-30 14:30:07 -0400271 self.assertRaises(exceptions.NotFound,
272 self.alt_client.delete_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900273 self.server_id)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700274
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900275 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700276 def test_delete_server_pass_negative_id(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500277 # Pass an invalid string parameter to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700278
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800279 self.assertRaises(exceptions.NotFound, self.client.delete_server, -1)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700280
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900281 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700282 def test_delete_server_pass_id_exceeding_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500283 # Pass a server ID that exceeds length limit to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700284
285 self.assertRaises(exceptions.NotFound, self.client.delete_server,
286 sys.maxint + 1)
donald-ngo78bd7f52013-02-08 14:35:16 -0800287
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900288 @test.attr(type=['negative', 'gate'])
donald-ngo78bd7f52013-02-08 14:35:16 -0800289 def test_create_with_nonexistent_security_group(self):
290 # Create a server with a nonexistent security group
donald-ngo18edb812013-02-22 11:37:15 -0800291
292 security_groups = [{'name': 'does_not_exist'}]
Jordan Pittierce89f632013-06-25 16:04:39 +0000293 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900294 self.create_test_server,
donald-ngo18edb812013-02-22 11:37:15 -0800295 security_groups=security_groups)
hi2suresh063acbc2013-02-20 09:32:03 +0000296
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900297 @test.attr(type=['negative', 'gate'])
hi2suresh063acbc2013-02-20 09:32:03 +0000298 def test_get_non_existent_server(self):
299 # Get a non existent server details
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900300 nonexistent_server = data_utils.rand_uuid()
hi2suresh063acbc2013-02-20 09:32:03 +0000301 self.assertRaises(exceptions.NotFound, self.client.get_server,
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900302 nonexistent_server)
Sean Daguee623f752013-02-27 14:52:15 -0500303
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900304 @test.attr(type=['negative', 'gate'])
Anju Tiwari6c336162013-08-08 12:21:02 +0530305 def test_stop_non_existent_server(self):
306 # Stop a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900307 nonexistent_server = data_utils.rand_uuid()
Anju Tiwari6c336162013-08-08 12:21:02 +0530308 self.assertRaises(exceptions.NotFound, self.servers_client.stop,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900309 nonexistent_server)
Anju Tiwari6c336162013-08-08 12:21:02 +0530310
Matt Riedemann992162e2014-03-24 09:11:06 -0700311 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
312 'Pause is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900313 @test.attr(type=['negative', 'gate'])
Anju Tiwari6c336162013-08-08 12:21:02 +0530314 def test_pause_non_existent_server(self):
315 # pause a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900316 nonexistent_server = data_utils.rand_uuid()
Anju Tiwari6c336162013-08-08 12:21:02 +0530317 self.assertRaises(exceptions.NotFound, self.client.pause_server,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900318 nonexistent_server)
LingxianKongb2ca96f2013-09-28 23:09:30 +0800319
Matt Riedemann992162e2014-03-24 09:11:06 -0700320 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
321 'Pause is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900322 @test.attr(type=['negative', 'gate'])
LingxianKongb2ca96f2013-09-28 23:09:30 +0800323 def test_unpause_non_existent_server(self):
324 # unpause a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900325 nonexistent_server = data_utils.rand_uuid()
LingxianKongb2ca96f2013-09-28 23:09:30 +0800326 self.assertRaises(exceptions.NotFound, self.client.unpause_server,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900327 nonexistent_server)
LingxianKongb2ca96f2013-09-28 23:09:30 +0800328
Matt Riedemann992162e2014-03-24 09:11:06 -0700329 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
330 'Pause is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900331 @test.attr(type=['negative', 'gate'])
LingxianKongb2ca96f2013-09-28 23:09:30 +0800332 def test_unpause_server_invalid_state(self):
333 # unpause an active server.
Anju5c3e510c2013-10-18 06:40:29 +0530334 self.assertRaises(exceptions.Conflict,
LingxianKongb2ca96f2013-09-28 23:09:30 +0800335 self.client.unpause_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900336 self.server_id)
Anju Tiwari6c336162013-08-08 12:21:02 +0530337
Matt Riedemannf0cf6952014-03-24 09:08:52 -0700338 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
339 'Suspend is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900340 @test.attr(type=['negative', 'gate'])
LingxianKong691a5702013-09-29 11:43:45 +0800341 def test_suspend_non_existent_server(self):
342 # suspend a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900343 nonexistent_server = data_utils.rand_uuid()
LingxianKong691a5702013-09-29 11:43:45 +0800344 self.assertRaises(exceptions.NotFound, self.client.suspend_server,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900345 nonexistent_server)
LingxianKong691a5702013-09-29 11:43:45 +0800346
Matt Riedemannf0cf6952014-03-24 09:08:52 -0700347 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
348 'Suspend is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900349 @test.attr(type=['negative', 'gate'])
LingxianKong691a5702013-09-29 11:43:45 +0800350 def test_suspend_server_invalid_state(self):
LingxianKong691a5702013-09-29 11:43:45 +0800351 # suspend a suspended server.
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900352 resp, _ = self.client.suspend_server(self.server_id)
Attila Fazekas6fab1a12013-10-17 17:38:54 +0200353 self.addCleanup(self.client.resume_server,
354 self.server_id)
LingxianKong691a5702013-09-29 11:43:45 +0800355 self.assertEqual(202, resp.status)
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900356 self.client.wait_for_server_status(self.server_id, 'SUSPENDED')
Anju5c3e510c2013-10-18 06:40:29 +0530357 self.assertRaises(exceptions.Conflict,
LingxianKong691a5702013-09-29 11:43:45 +0800358 self.client.suspend_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900359 self.server_id)
LingxianKong691a5702013-09-29 11:43:45 +0800360
Matt Riedemannf0cf6952014-03-24 09:08:52 -0700361 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
362 'Suspend is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900363 @test.attr(type=['negative', 'gate'])
LingxianKong691a5702013-09-29 11:43:45 +0800364 def test_resume_non_existent_server(self):
365 # resume a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900366 nonexistent_server = data_utils.rand_uuid()
LingxianKong691a5702013-09-29 11:43:45 +0800367 self.assertRaises(exceptions.NotFound, self.client.resume_server,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900368 nonexistent_server)
LingxianKong691a5702013-09-29 11:43:45 +0800369
Matt Riedemannf0cf6952014-03-24 09:08:52 -0700370 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
371 'Suspend is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900372 @test.attr(type=['negative', 'gate'])
LingxianKong691a5702013-09-29 11:43:45 +0800373 def test_resume_server_invalid_state(self):
LingxianKong691a5702013-09-29 11:43:45 +0800374 # resume an active server.
Anju5c3e510c2013-10-18 06:40:29 +0530375 self.assertRaises(exceptions.Conflict,
LingxianKong691a5702013-09-29 11:43:45 +0800376 self.client.resume_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900377 self.server_id)
LingxianKong691a5702013-09-29 11:43:45 +0800378
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900379 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900380 def test_get_console_output_of_non_existent_server(self):
381 # get the console output for a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900382 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900383 self.assertRaises(exceptions.NotFound,
384 self.client.get_console_output,
385 nonexistent_server, 10)
386
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900387 @test.attr(type=['negative', 'gate'])
Lingxian Kongaecc1092013-10-03 16:18:46 +0800388 def test_force_delete_nonexistent_server_id(self):
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900389 # force-delete a non existent server
390 nonexistent_server = data_utils.rand_uuid()
Lingxian Kongaecc1092013-10-03 16:18:46 +0800391 self.assertRaises(exceptions.NotFound,
392 self.client.force_delete_server,
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900393 nonexistent_server)
Lingxian Kongaecc1092013-10-03 16:18:46 +0800394
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900395 @test.attr(type=['negative', 'gate'])
Lingxian Kongaecc1092013-10-03 16:18:46 +0800396 def test_force_delete_server_invalid_state(self):
397 # we can only force-delete a server in 'soft-delete' state
398 self.assertRaises(exceptions.Conflict,
399 self.client.force_delete_server,
400 self.server_id)
401
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900402 @test.attr(type=['negative', 'gate'])
Lingxian Kongaecc1092013-10-03 16:18:46 +0800403 def test_restore_nonexistent_server_id(self):
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900404 # restore-delete a non existent server
405 nonexistent_server = data_utils.rand_uuid()
Lingxian Kongaecc1092013-10-03 16:18:46 +0800406 self.assertRaises(exceptions.NotFound,
407 self.client.restore_soft_deleted_server,
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900408 nonexistent_server)
Lingxian Kongaecc1092013-10-03 16:18:46 +0800409
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900410 @test.attr(type=['negative', 'gate'])
Lingxian Kongaecc1092013-10-03 16:18:46 +0800411 def test_restore_server_invalid_state(self):
412 # we can only restore-delete a server in 'soft-delete' state
413 self.assertRaises(exceptions.Conflict,
414 self.client.restore_soft_deleted_server,
415 self.server_id)
416
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900417 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900418 def test_shelve_non_existent_server(self):
419 # shelve a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900420 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900421 self.assertRaises(exceptions.NotFound, self.client.shelve_server,
422 nonexistent_server)
423
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900424 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900425 def test_shelve_shelved_server(self):
426 # shelve a shelved server.
427 resp, server = self.client.shelve_server(self.server_id)
428 self.assertEqual(202, resp.status)
429 self.addCleanup(self.client.unshelve_server, self.server_id)
430
Matthew Treinishb0a78fc2014-01-29 16:49:12 +0000431 offload_time = CONF.compute.shelved_offload_time
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900432 if offload_time >= 0:
433 self.client.wait_for_server_status(self.server_id,
434 'SHELVED_OFFLOADED',
435 extra_timeout=offload_time)
436 else:
437 self.client.wait_for_server_status(self.server_id,
438 'SHELVED')
439
440 resp, server = self.client.get_server(self.server_id)
441 image_name = server['name'] + '-shelved'
442 params = {'name': image_name}
443 resp, images = self.images_client.list_images(params)
444 self.assertEqual(1, len(images))
445 self.assertEqual(image_name, images[0]['name'])
446
447 self.assertRaises(exceptions.Conflict,
448 self.client.shelve_server,
449 self.server_id)
450
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900451 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900452 def test_unshelve_non_existent_server(self):
453 # unshelve a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900454 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900455 self.assertRaises(exceptions.NotFound, self.client.unshelve_server,
456 nonexistent_server)
457
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900458 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900459 def test_unshelve_server_invalid_state(self):
460 # unshelve an active server.
461 self.assertRaises(exceptions.Conflict,
462 self.client.unshelve_server,
463 self.server_id)
464
Sean Daguee623f752013-02-27 14:52:15 -0500465
Xiao Hanyuab61c072013-06-26 15:33:42 +0800466class ServersNegativeTestXML(ServersNegativeTestJSON):
Sean Daguee623f752013-02-27 14:52:15 -0500467 _interface = 'xml'