blob: 792b5232c94894dba0c0a12418dfe3e5016211ce [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
Attila Fazekas305e65b2013-10-29 13:23:07 +010040 def tearDown(self):
41 self.server_check_teardown()
42 super(ServersNegativeTestJSON, self).tearDown()
43
Daryl Walleckadea1fa2011-11-15 18:36:39 -060044 @classmethod
45 def setUpClass(cls):
Xiao Hanyuab61c072013-06-26 15:33:42 +080046 super(ServersNegativeTestJSON, cls).setUpClass()
Daryl Walleckc7251962012-03-12 17:26:54 -050047 cls.client = cls.servers_client
Andrey Pavlove8d3fd52014-06-02 08:17:02 +040048 if CONF.compute.allow_tenant_isolation:
49 cls.alt_os = clients.Manager(cls.isolated_creds.get_alt_creds())
50 else:
51 cls.alt_os = clients.AltManager()
Rohit Karajgidc300b22012-05-04 08:11:00 -070052 cls.alt_client = cls.alt_os.servers_client
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090053 resp, server = cls.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichida306502013-10-08 23:44:55 +090054 cls.server_id = server['id']
Daryl Walleckadea1fa2011-11-15 18:36:39 -060055
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090056 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060057 def test_server_name_blank(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050058 # Create a server with name parameter empty
donald-ngo18edb812013-02-22 11:37:15 -080059
60 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090061 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -050062 name='')
Daryl Walleckadea1fa2011-11-15 18:36:39 -060063
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090064 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060065 def test_personality_file_contents_not_encoded(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050066 # Use an unencoded file when creating a server with personality
donald-ngo18edb812013-02-22 11:37:15 -080067
Daryl Walleckadea1fa2011-11-15 18:36:39 -060068 file_contents = 'This is a test file.'
Sean Dague9b669e32012-12-13 18:40:08 -050069 person = [{'path': '/etc/testfile.txt',
70 'contents': file_contents}]
Daryl Walleckadea1fa2011-11-15 18:36:39 -060071
donald-ngo18edb812013-02-22 11:37:15 -080072 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090073 self.create_test_server,
donald-ngo18edb812013-02-22 11:37:15 -080074 personality=person)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060075
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090076 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060077 def test_create_with_invalid_image(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050078 # Create a server with an unknown image
donald-ngo18edb812013-02-22 11:37:15 -080079
80 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090081 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -050082 image_id=-1)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060083
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090084 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060085 def test_create_with_invalid_flavor(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050086 # Create a server with an unknown flavor
donald-ngo18edb812013-02-22 11:37:15 -080087
88 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090089 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -050090 flavor=-1,)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060091
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +090092 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -060093 def test_invalid_access_ip_v4_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050094 # An access IPv4 address must match a valid address pattern
donald-ngo18edb812013-02-22 11:37:15 -080095
Sean Dague9b669e32012-12-13 18:40:08 -050096 IPv4 = '1.1.1.1.1.1'
donald-ngo18edb812013-02-22 11:37:15 -080097 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090098 self.create_test_server, accessIPv4=IPv4)
Daryl Walleckadea1fa2011-11-15 18:36:39 -060099
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900100 @test.attr(type=['negative', 'gate'])
Daryl Walleckadea1fa2011-11-15 18:36:39 -0600101 def test_invalid_ip_v6_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500102 # An access IPv6 address must match a valid address pattern
donald-ngo18edb812013-02-22 11:37:15 -0800103
Sean Dague9b669e32012-12-13 18:40:08 -0500104 IPv6 = 'notvalid'
donald-ngo18edb812013-02-22 11:37:15 -0800105
106 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900107 self.create_test_server, accessIPv6=IPv6)
ravikumar-venkatesan36892e12012-05-11 18:01:41 +0000108
Joseph Lanouxb3d956f2014-06-25 14:45:24 +0000109 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
110 'Resize not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900111 @test.attr(type=['negative', 'gate'])
Hoisaleshwara Madan V Sf49bf182013-10-21 10:19:43 +0530112 def test_resize_nonexistent_server(self):
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900113 # Resize a non-existent server
114 nonexistent_server = data_utils.rand_uuid()
Hoisaleshwara Madan V Sf49bf182013-10-21 10:19:43 +0530115 self.assertRaises(exceptions.NotFound,
116 self.client.resize,
117 nonexistent_server, self.flavor_ref)
118
Joseph Lanouxb3d956f2014-06-25 14:45:24 +0000119 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
120 'Resize not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900121 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900122 def test_resize_server_with_non_existent_flavor(self):
123 # Resize a server with non-existent flavor
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900124 nonexistent_flavor = data_utils.rand_uuid()
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900125 self.assertRaises(exceptions.BadRequest, self.client.resize,
126 self.server_id, flavor_ref=nonexistent_flavor)
127
Joseph Lanouxb3d956f2014-06-25 14:45:24 +0000128 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
129 'Resize not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900130 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900131 def test_resize_server_with_null_flavor(self):
132 # Resize a server with null flavor
133 self.assertRaises(exceptions.BadRequest, self.client.resize,
134 self.server_id, flavor_ref="")
135
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900136 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900137 def test_reboot_non_existent_server(self):
138 # Reboot a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900139 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900140 self.assertRaises(exceptions.NotFound, self.client.reboot,
141 nonexistent_server, 'SOFT')
142
Matt Riedemann992162e2014-03-24 09:11:06 -0700143 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
144 'Pause is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900145 @test.attr(type=['negative', 'gate'])
Anju Tiwari8c789762013-07-22 11:02:05 +0530146 def test_pause_paused_server(self):
147 # Pause a paused server.
Anju Tiwari8c789762013-07-22 11:02:05 +0530148 self.client.pause_server(self.server_id)
149 self.client.wait_for_server_status(self.server_id, 'PAUSED')
Anju5c3e510c2013-10-18 06:40:29 +0530150 self.assertRaises(exceptions.Conflict,
Anju Tiwari8c789762013-07-22 11:02:05 +0530151 self.client.pause_server,
152 self.server_id)
Attila Fazekas305e65b2013-10-29 13:23:07 +0100153 self.client.unpause_server(self.server_id)
Anju Tiwari8c789762013-07-22 11:02:05 +0530154
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900155 @test.attr(type=['negative', 'gate'])
Attila Fazekas6fab1a12013-10-17 17:38:54 +0200156 def test_rebuild_reboot_deleted_server(self):
157 # Rebuild and Reboot a deleted server
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900158 _, server = self.create_test_server()
Attila Fazekas6fab1a12013-10-17 17:38:54 +0200159 self.client.delete_server(server['id'])
160 self.client.wait_for_server_termination(server['id'])
donald-ngo18edb812013-02-22 11:37:15 -0800161
162 self.assertRaises(exceptions.NotFound,
163 self.client.rebuild,
Attila Fazekas6fab1a12013-10-17 17:38:54 +0200164 server['id'], self.image_ref_alt)
165 self.assertRaises(exceptions.NotFound, self.client.reboot,
166 server['id'], 'SOFT')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700167
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900168 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900169 def test_rebuild_non_existent_server(self):
170 # Rebuild a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900171 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900172 meta = {'rebuild': 'server'}
Masayuki Igawa259c1132013-10-31 17:48:44 +0900173 new_name = data_utils.rand_name('server')
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900174 file_contents = 'Test server rebuild.'
175 personality = [{'path': '/etc/rebuild.txt',
176 'contents': base64.b64encode(file_contents)}]
177 self.assertRaises(exceptions.NotFound,
178 self.client.rebuild,
179 nonexistent_server,
180 self.image_ref_alt,
181 name=new_name, meta=meta,
182 personality=personality,
183 adminPass='rebuild')
184
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900185 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700186 def test_create_numeric_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500187 # Create a server with a numeric name
Sean Daguee623f752013-02-27 14:52:15 -0500188 if self.__class__._interface == "xml":
189 raise self.skipException("Not testable in XML")
Rohit Karajgidc300b22012-05-04 08:11:00 -0700190
191 server_name = 12345
Sean Dague9b669e32012-12-13 18:40:08 -0500192 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900193 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -0500194 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700195
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900196 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700197 def test_create_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500198 # Create a server with name length exceeding 256 characters
Rohit Karajgidc300b22012-05-04 08:11:00 -0700199
200 server_name = 'a' * 256
Sean Dague9b669e32012-12-13 18:40:08 -0500201 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900202 self.create_test_server,
Sean Dague22897e12013-02-25 17:54:09 -0500203 name=server_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700204
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900205 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700206 def test_create_with_invalid_network_uuid(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500207 # Pass invalid network uuid while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700208
Chris Yeohfc9e3332013-01-21 09:28:13 +1030209 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 -0700210
Sean Dague9b669e32012-12-13 18:40:08 -0500211 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900212 self.create_test_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800213 networks=networks)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700214
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900215 @test.attr(type=['negative', 'gate'])
nayna-patel179077c2014-01-15 12:27:16 +0000216 def test_create_with_non_existent_keypair(self):
Chang Bo Guof099f802013-09-13 19:01:46 -0700217 # Pass a non-existent keypair while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700218
Masayuki Igawa259c1132013-10-31 17:48:44 +0900219 key_name = data_utils.rand_name('key')
Sean Dague9b669e32012-12-13 18:40:08 -0500220 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900221 self.create_test_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800222 key_name=key_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700223
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900224 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700225 def test_create_server_metadata_exceeds_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500226 # Pass really long metadata while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700227
Rohit Karajgidc300b22012-05-04 08:11:00 -0700228 metadata = {'a': 'b' * 260}
Sean Dague9b669e32012-12-13 18:40:08 -0500229 self.assertRaises(exceptions.OverLimit,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900230 self.create_test_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800231 meta=metadata)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700232
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900233 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700234 def test_update_name_of_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500235 # Update name of a non-existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700236
Masayuki Igawa259c1132013-10-31 17:48:44 +0900237 server_name = data_utils.rand_name('server')
238 new_name = data_utils.rand_name('server') + '_updated'
Rohit Karajgidc300b22012-05-04 08:11:00 -0700239
240 self.assertRaises(exceptions.NotFound, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800241 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700242
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900243 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700244 def test_update_server_set_empty_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500245 # Update name of the server to an empty string
Rohit Karajgidc300b22012-05-04 08:11:00 -0700246
Masayuki Igawa259c1132013-10-31 17:48:44 +0900247 server_name = data_utils.rand_name('server')
Rohit Karajgidc300b22012-05-04 08:11:00 -0700248 new_name = ''
249
250 self.assertRaises(exceptions.BadRequest, self.client.update_server,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800251 server_name, name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700252
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900253 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700254 def test_update_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500255 # Update name of a server that belongs to another tenant
Rohit Karajgidc300b22012-05-04 08:11:00 -0700256
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900257 new_name = self.server_id + '_new'
Rohit Karajgidc300b22012-05-04 08:11:00 -0700258 self.assertRaises(exceptions.NotFound,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900259 self.alt_client.update_server, self.server_id,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800260 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700261
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900262 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700263 def test_update_server_name_length_exceeds_256(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500264 # Update name of server exceed the name length limit
Rohit Karajgidc300b22012-05-04 08:11:00 -0700265
Rohit Karajgidc300b22012-05-04 08:11:00 -0700266 new_name = 'a' * 256
267 self.assertRaises(exceptions.BadRequest,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800268 self.client.update_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900269 self.server_id,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800270 name=new_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700271
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900272 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700273 def test_delete_non_existent_server(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500274 # Delete a non existent server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700275
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900276 nonexistent_server = data_utils.rand_uuid()
Rohit Karajgidc300b22012-05-04 08:11:00 -0700277 self.assertRaises(exceptions.NotFound, self.client.delete_server,
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900278 nonexistent_server)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700279
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900280 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700281 def test_delete_a_server_of_another_tenant(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500282 # Delete a server that belongs to another tenant
Matthew Treinish38c4dc42013-07-30 14:30:07 -0400283 self.assertRaises(exceptions.NotFound,
284 self.alt_client.delete_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900285 self.server_id)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700286
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900287 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700288 def test_delete_server_pass_negative_id(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500289 # Pass an invalid string parameter to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700290
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800291 self.assertRaises(exceptions.NotFound, self.client.delete_server, -1)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700292
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900293 @test.attr(type=['negative', 'gate'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700294 def test_delete_server_pass_id_exceeding_length_limit(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500295 # Pass a server ID that exceeds length limit to delete server
Rohit Karajgidc300b22012-05-04 08:11:00 -0700296
297 self.assertRaises(exceptions.NotFound, self.client.delete_server,
298 sys.maxint + 1)
donald-ngo78bd7f52013-02-08 14:35:16 -0800299
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900300 @test.attr(type=['negative', 'gate'])
donald-ngo78bd7f52013-02-08 14:35:16 -0800301 def test_create_with_nonexistent_security_group(self):
302 # Create a server with a nonexistent security group
donald-ngo18edb812013-02-22 11:37:15 -0800303
304 security_groups = [{'name': 'does_not_exist'}]
Jordan Pittierce89f632013-06-25 16:04:39 +0000305 self.assertRaises(exceptions.BadRequest,
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900306 self.create_test_server,
donald-ngo18edb812013-02-22 11:37:15 -0800307 security_groups=security_groups)
hi2suresh063acbc2013-02-20 09:32:03 +0000308
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900309 @test.attr(type=['negative', 'gate'])
hi2suresh063acbc2013-02-20 09:32:03 +0000310 def test_get_non_existent_server(self):
311 # Get a non existent server details
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900312 nonexistent_server = data_utils.rand_uuid()
hi2suresh063acbc2013-02-20 09:32:03 +0000313 self.assertRaises(exceptions.NotFound, self.client.get_server,
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900314 nonexistent_server)
Sean Daguee623f752013-02-27 14:52:15 -0500315
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900316 @test.attr(type=['negative', 'gate'])
Anju Tiwari6c336162013-08-08 12:21:02 +0530317 def test_stop_non_existent_server(self):
318 # Stop a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900319 nonexistent_server = data_utils.rand_uuid()
Anju Tiwari6c336162013-08-08 12:21:02 +0530320 self.assertRaises(exceptions.NotFound, self.servers_client.stop,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900321 nonexistent_server)
Anju Tiwari6c336162013-08-08 12:21:02 +0530322
Matt Riedemann992162e2014-03-24 09:11:06 -0700323 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
324 'Pause is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900325 @test.attr(type=['negative', 'gate'])
Anju Tiwari6c336162013-08-08 12:21:02 +0530326 def test_pause_non_existent_server(self):
327 # pause a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900328 nonexistent_server = data_utils.rand_uuid()
Anju Tiwari6c336162013-08-08 12:21:02 +0530329 self.assertRaises(exceptions.NotFound, self.client.pause_server,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900330 nonexistent_server)
LingxianKongb2ca96f2013-09-28 23:09:30 +0800331
Matt Riedemann992162e2014-03-24 09:11:06 -0700332 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
333 'Pause is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900334 @test.attr(type=['negative', 'gate'])
LingxianKongb2ca96f2013-09-28 23:09:30 +0800335 def test_unpause_non_existent_server(self):
336 # unpause a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900337 nonexistent_server = data_utils.rand_uuid()
LingxianKongb2ca96f2013-09-28 23:09:30 +0800338 self.assertRaises(exceptions.NotFound, self.client.unpause_server,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900339 nonexistent_server)
LingxianKongb2ca96f2013-09-28 23:09:30 +0800340
Matt Riedemann992162e2014-03-24 09:11:06 -0700341 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
342 'Pause is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900343 @test.attr(type=['negative', 'gate'])
LingxianKongb2ca96f2013-09-28 23:09:30 +0800344 def test_unpause_server_invalid_state(self):
345 # unpause an active server.
Anju5c3e510c2013-10-18 06:40:29 +0530346 self.assertRaises(exceptions.Conflict,
LingxianKongb2ca96f2013-09-28 23:09:30 +0800347 self.client.unpause_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900348 self.server_id)
Anju Tiwari6c336162013-08-08 12:21:02 +0530349
Matt Riedemannf0cf6952014-03-24 09:08:52 -0700350 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
351 'Suspend is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900352 @test.attr(type=['negative', 'gate'])
LingxianKong691a5702013-09-29 11:43:45 +0800353 def test_suspend_non_existent_server(self):
354 # suspend a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900355 nonexistent_server = data_utils.rand_uuid()
LingxianKong691a5702013-09-29 11:43:45 +0800356 self.assertRaises(exceptions.NotFound, self.client.suspend_server,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900357 nonexistent_server)
LingxianKong691a5702013-09-29 11:43:45 +0800358
Matt Riedemannf0cf6952014-03-24 09:08:52 -0700359 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
360 'Suspend is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900361 @test.attr(type=['negative', 'gate'])
LingxianKong691a5702013-09-29 11:43:45 +0800362 def test_suspend_server_invalid_state(self):
LingxianKong691a5702013-09-29 11:43:45 +0800363 # suspend a suspended server.
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900364 resp, _ = self.client.suspend_server(self.server_id)
LingxianKong691a5702013-09-29 11:43:45 +0800365 self.assertEqual(202, resp.status)
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900366 self.client.wait_for_server_status(self.server_id, 'SUSPENDED')
Anju5c3e510c2013-10-18 06:40:29 +0530367 self.assertRaises(exceptions.Conflict,
LingxianKong691a5702013-09-29 11:43:45 +0800368 self.client.suspend_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900369 self.server_id)
Attila Fazekas305e65b2013-10-29 13:23:07 +0100370 self.client.resume_server(self.server_id)
LingxianKong691a5702013-09-29 11:43:45 +0800371
Matt Riedemannf0cf6952014-03-24 09:08:52 -0700372 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
373 'Suspend is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900374 @test.attr(type=['negative', 'gate'])
LingxianKong691a5702013-09-29 11:43:45 +0800375 def test_resume_non_existent_server(self):
376 # resume a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900377 nonexistent_server = data_utils.rand_uuid()
LingxianKong691a5702013-09-29 11:43:45 +0800378 self.assertRaises(exceptions.NotFound, self.client.resume_server,
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900379 nonexistent_server)
LingxianKong691a5702013-09-29 11:43:45 +0800380
Matt Riedemannf0cf6952014-03-24 09:08:52 -0700381 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
382 'Suspend is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900383 @test.attr(type=['negative', 'gate'])
LingxianKong691a5702013-09-29 11:43:45 +0800384 def test_resume_server_invalid_state(self):
LingxianKong691a5702013-09-29 11:43:45 +0800385 # resume an active server.
Anju5c3e510c2013-10-18 06:40:29 +0530386 self.assertRaises(exceptions.Conflict,
LingxianKong691a5702013-09-29 11:43:45 +0800387 self.client.resume_server,
Ken'ichi Ohmichida306502013-10-08 23:44:55 +0900388 self.server_id)
LingxianKong691a5702013-09-29 11:43:45 +0800389
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900390 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900391 def test_get_console_output_of_non_existent_server(self):
392 # get the console output for a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900393 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichid90c0102013-10-13 23:55:31 +0900394 self.assertRaises(exceptions.NotFound,
395 self.client.get_console_output,
396 nonexistent_server, 10)
397
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900398 @test.attr(type=['negative', 'gate'])
Lingxian Kongaecc1092013-10-03 16:18:46 +0800399 def test_force_delete_nonexistent_server_id(self):
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900400 # force-delete a non existent server
401 nonexistent_server = data_utils.rand_uuid()
Lingxian Kongaecc1092013-10-03 16:18:46 +0800402 self.assertRaises(exceptions.NotFound,
403 self.client.force_delete_server,
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900404 nonexistent_server)
Lingxian Kongaecc1092013-10-03 16:18:46 +0800405
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900406 @test.attr(type=['negative', 'gate'])
Lingxian Kongaecc1092013-10-03 16:18:46 +0800407 def test_force_delete_server_invalid_state(self):
408 # we can only force-delete a server in 'soft-delete' state
409 self.assertRaises(exceptions.Conflict,
410 self.client.force_delete_server,
411 self.server_id)
412
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900413 @test.attr(type=['negative', 'gate'])
Lingxian Kongaecc1092013-10-03 16:18:46 +0800414 def test_restore_nonexistent_server_id(self):
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900415 # restore-delete a non existent server
416 nonexistent_server = data_utils.rand_uuid()
Lingxian Kongaecc1092013-10-03 16:18:46 +0800417 self.assertRaises(exceptions.NotFound,
418 self.client.restore_soft_deleted_server,
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900419 nonexistent_server)
Lingxian Kongaecc1092013-10-03 16:18:46 +0800420
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900421 @test.attr(type=['negative', 'gate'])
Lingxian Kongaecc1092013-10-03 16:18:46 +0800422 def test_restore_server_invalid_state(self):
423 # we can only restore-delete a server in 'soft-delete' state
424 self.assertRaises(exceptions.Conflict,
425 self.client.restore_soft_deleted_server,
426 self.server_id)
427
David Shrewsbury25f666f2014-07-22 12:17:59 -0400428 @testtools.skipUnless(CONF.compute_feature_enabled.shelve,
429 'Shelve is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900430 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900431 def test_shelve_non_existent_server(self):
432 # shelve a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900433 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900434 self.assertRaises(exceptions.NotFound, self.client.shelve_server,
435 nonexistent_server)
436
David Shrewsbury25f666f2014-07-22 12:17:59 -0400437 @testtools.skipUnless(CONF.compute_feature_enabled.shelve,
438 'Shelve is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900439 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900440 def test_shelve_shelved_server(self):
441 # shelve a shelved server.
442 resp, server = self.client.shelve_server(self.server_id)
443 self.assertEqual(202, resp.status)
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900444
Matthew Treinishb0a78fc2014-01-29 16:49:12 +0000445 offload_time = CONF.compute.shelved_offload_time
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900446 if offload_time >= 0:
447 self.client.wait_for_server_status(self.server_id,
448 'SHELVED_OFFLOADED',
449 extra_timeout=offload_time)
450 else:
451 self.client.wait_for_server_status(self.server_id,
452 'SHELVED')
453
454 resp, server = self.client.get_server(self.server_id)
455 image_name = server['name'] + '-shelved'
456 params = {'name': image_name}
457 resp, images = self.images_client.list_images(params)
458 self.assertEqual(1, len(images))
459 self.assertEqual(image_name, images[0]['name'])
460
461 self.assertRaises(exceptions.Conflict,
462 self.client.shelve_server,
463 self.server_id)
464
Attila Fazekas305e65b2013-10-29 13:23:07 +0100465 self.client.unshelve_server(self.server_id)
466
David Shrewsbury25f666f2014-07-22 12:17:59 -0400467 @testtools.skipUnless(CONF.compute_feature_enabled.shelve,
468 'Shelve is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900469 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900470 def test_unshelve_non_existent_server(self):
471 # unshelve a non existent server
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900472 nonexistent_server = data_utils.rand_uuid()
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900473 self.assertRaises(exceptions.NotFound, self.client.unshelve_server,
474 nonexistent_server)
475
David Shrewsbury25f666f2014-07-22 12:17:59 -0400476 @testtools.skipUnless(CONF.compute_feature_enabled.shelve,
477 'Shelve is not available.')
Ken'ichi Ohmichiaa702b02013-12-18 01:37:21 +0900478 @test.attr(type=['negative', 'gate'])
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900479 def test_unshelve_server_invalid_state(self):
480 # unshelve an active server.
481 self.assertRaises(exceptions.Conflict,
482 self.client.unshelve_server,
483 self.server_id)
484
Sean Daguee623f752013-02-27 14:52:15 -0500485
Xiao Hanyuab61c072013-06-26 15:33:42 +0800486class ServersNegativeTestXML(ServersNegativeTestJSON):
Sean Daguee623f752013-02-27 14:52:15 -0500487 _interface = 'xml'