blob: 8ed55e0730f44fb9746c2280c9f8f1405f4f101b [file] [log] [blame]
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +09001# Copyright 2012 OpenStack Foundation
2# 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 Ohmichi5a1ff262014-02-24 23:39:19 +090016import testtools
17
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090018from tempest.api.compute import base
ghanshyam017b5fe2016-04-15 18:49:26 +090019from tempest.common import compute
Ken'ichi Ohmichic6633232015-07-08 08:31:04 +000020from tempest.common import waiters
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090021from tempest import config
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080022from tempest.lib import decorators
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090023from tempest import test
24
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090025CONF = config.CONF
26
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090027
28class DeleteServersTestJSON(base.BaseV2ComputeTest):
Eric Windischb5538072014-03-09 23:47:35 -040029
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090030 # NOTE: Server creations of each test class should be under 10
31 # for preventing "Quota exceeded for instances"
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090032
33 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053034 def setup_clients(cls):
35 super(DeleteServersTestJSON, cls).setup_clients()
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090036 cls.client = cls.servers_client
37
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080038 @decorators.idempotent_id('9e6e0c87-3352-42f7-9faf-5d6210dbd159')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090039 def test_delete_server_while_in_building_state(self):
40 # Delete a server while it's VM state is Building
David Kranz0fb14292015-02-11 15:55:20 -050041 server = self.create_test_server(wait_until='BUILD')
42 self.client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +000043 waiters.wait_for_server_termination(self.client, server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090044
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080045 @decorators.idempotent_id('925fdfb4-5b13-47ea-ac8a-c36ae6fddb05')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090046 def test_delete_active_server(self):
47 # Delete a server while it's VM state is Active
David Kranz0fb14292015-02-11 15:55:20 -050048 server = self.create_test_server(wait_until='ACTIVE')
49 self.client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +000050 waiters.wait_for_server_termination(self.client, server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090051
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080052 @decorators.idempotent_id('546d368c-bb6c-4645-979a-83ed16f3a6be')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090053 def test_delete_server_while_in_shutoff_state(self):
54 # Delete a server while it's VM state is Shutoff
David Kranz0fb14292015-02-11 15:55:20 -050055 server = self.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichib2631082015-08-27 01:31:00 +000056 self.client.stop_server(server['id'])
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000057 waiters.wait_for_server_status(self.client, server['id'], 'SHUTOFF')
David Kranz0fb14292015-02-11 15:55:20 -050058 self.client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +000059 waiters.wait_for_server_termination(self.client, server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090060
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080061 @decorators.idempotent_id('943bd6e8-4d7a-4904-be83-7a6cc2d4213b')
Matt Riedemann992162e2014-03-24 09:11:06 -070062 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
63 'Pause is not available.')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090064 def test_delete_server_while_in_pause_state(self):
65 # Delete a server while it's VM state is Pause
David Kranz0fb14292015-02-11 15:55:20 -050066 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -050067 self.client.pause_server(server['id'])
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000068 waiters.wait_for_server_status(self.client, server['id'], 'PAUSED')
David Kranz0fb14292015-02-11 15:55:20 -050069 self.client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +000070 waiters.wait_for_server_termination(self.client, server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090071
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080072 @decorators.idempotent_id('1f82ebd3-8253-4f4e-b93f-de9b7df56d8b')
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000073 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
74 'Suspend is not available.')
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000075 def test_delete_server_while_in_suspended_state(self):
76 # Delete a server while it's VM state is Suspended
David Kranz0fb14292015-02-11 15:55:20 -050077 server = self.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000078 self.client.suspend_server(server['id'])
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000079 waiters.wait_for_server_status(self.client, server['id'], 'SUSPENDED')
David Kranz0fb14292015-02-11 15:55:20 -050080 self.client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +000081 waiters.wait_for_server_termination(self.client, server['id'])
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000082
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080083 @decorators.idempotent_id('bb0cb402-09dd-4947-b6e5-5e7e1cfa61ad')
David Shrewsbury25f666f2014-07-22 12:17:59 -040084 @testtools.skipUnless(CONF.compute_feature_enabled.shelve,
85 'Shelve is not available.')
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090086 def test_delete_server_while_in_shelved_state(self):
87 # Delete a server while it's VM state is Shelved
David Kranz0fb14292015-02-11 15:55:20 -050088 server = self.create_test_server(wait_until='ACTIVE')
ghanshyam017b5fe2016-04-15 18:49:26 +090089 compute.shelve_server(self.client, server['id'])
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090090
David Kranz0fb14292015-02-11 15:55:20 -050091 self.client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +000092 waiters.wait_for_server_termination(self.client, server['id'])
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090093
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080094 @decorators.idempotent_id('ab0c38b4-cdd8-49d3-9b92-0cb898723c01')
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +090095 @testtools.skipIf(not CONF.compute_feature_enabled.resize,
96 'Resize not available.')
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +090097 def test_delete_server_while_in_verify_resize_state(self):
98 # Delete a server while it's VM state is VERIFY_RESIZE
David Kranz0fb14292015-02-11 15:55:20 -050099 server = self.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichi5271b0f2015-08-10 07:53:27 +0000100 self.client.resize_server(server['id'], self.flavor_ref_alt)
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000101 waiters.wait_for_server_status(self.client, server['id'],
102 'VERIFY_RESIZE')
David Kranz0fb14292015-02-11 15:55:20 -0500103 self.client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +0000104 waiters.wait_for_server_termination(self.client, server['id'])
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +0900105
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800106 @decorators.idempotent_id('d0f3f0d6-d9b6-4a32-8da4-23015dcab23c')
Michael Hudson-Doyleb657ac92014-11-03 14:19:52 +1300107 @test.services('volume')
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900108 def test_delete_server_while_in_attached_volume(self):
109 # Delete a server while a volume is attached to it
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900110 device = '/dev/%s' % CONF.compute.volume_device_name
David Kranz0fb14292015-02-11 15:55:20 -0500111 server = self.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900112
Matt Riedemann9fb8cc22016-10-02 20:13:39 -0400113 volume = self.create_volume()
114 self.attach_volume(server, volume, device=device)
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900115
David Kranz0fb14292015-02-11 15:55:20 -0500116 self.client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +0000117 waiters.wait_for_server_termination(self.client, server['id'])
lkuchlan52d7b0d2016-11-07 20:53:19 +0200118 waiters.wait_for_volume_resource_status(self.volumes_client,
119 volume['id'], 'available')
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900120
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +0900121
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900122class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
123 # NOTE: Server creations of each test class should be under 10
124 # for preventing "Quota exceeded for instances".
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900125
126 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +0530127 def setup_clients(cls):
128 super(DeleteServersAdminTestJSON, cls).setup_clients()
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900129 cls.non_admin_client = cls.servers_client
130 cls.admin_client = cls.os_adm.servers_client
131
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800132 @decorators.idempotent_id('99774678-e072-49d1-9d2a-49a59bc56063')
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900133 def test_delete_server_while_in_error_state(self):
134 # Delete a server while it's VM state is error
David Kranz0fb14292015-02-11 15:55:20 -0500135 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -0500136 self.admin_client.reset_state(server['id'], state='error')
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900137 # Verify server's state
ghanshyam0f825252015-08-25 16:02:50 +0900138 server = self.non_admin_client.show_server(server['id'])['server']
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900139 self.assertEqual(server['status'], 'ERROR')
David Kranz0fb14292015-02-11 15:55:20 -0500140 self.non_admin_client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +0000141 waiters.wait_for_server_termination(self.servers_client,
142 server['id'],
143 ignore_error=True)
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900144
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800145 @decorators.idempotent_id('73177903-6737-4f27-a60c-379e8ae8cf48')
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900146 def test_admin_delete_servers_of_others(self):
147 # Administrator can delete servers of others
David Kranz0fb14292015-02-11 15:55:20 -0500148 server = self.create_test_server(wait_until='ACTIVE')
149 self.admin_client.delete_server(server['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +0000150 waiters.wait_for_server_termination(self.servers_client, server['id'])