blob: 673a4012c5a7cb3a700c394755c681b4acada8b3 [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
Ken'ichi Ohmichic6633232015-07-08 08:31:04 +000019from tempest.common import waiters
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090020from tempest import config
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090021from tempest import test
22
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090023CONF = config.CONF
24
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090025
26class DeleteServersTestJSON(base.BaseV2ComputeTest):
Eric Windischb5538072014-03-09 23:47:35 -040027
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090028 # NOTE: Server creations of each test class should be under 10
29 # for preventing "Quota exceeded for instances"
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090030
31 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053032 def setup_clients(cls):
33 super(DeleteServersTestJSON, cls).setup_clients()
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090034 cls.client = cls.servers_client
35
Chris Hoge7579c1a2015-02-26 14:12:15 -080036 @test.idempotent_id('9e6e0c87-3352-42f7-9faf-5d6210dbd159')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090037 def test_delete_server_while_in_building_state(self):
38 # Delete a server while it's VM state is Building
David Kranz0fb14292015-02-11 15:55:20 -050039 server = self.create_test_server(wait_until='BUILD')
40 self.client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +090041 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090042
Chris Hoge7579c1a2015-02-26 14:12:15 -080043 @test.idempotent_id('925fdfb4-5b13-47ea-ac8a-c36ae6fddb05')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090044 def test_delete_active_server(self):
45 # Delete a server while it's VM state is Active
David Kranz0fb14292015-02-11 15:55:20 -050046 server = self.create_test_server(wait_until='ACTIVE')
47 self.client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +090048 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090049
Chris Hoge7579c1a2015-02-26 14:12:15 -080050 @test.idempotent_id('546d368c-bb6c-4645-979a-83ed16f3a6be')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090051 def test_delete_server_while_in_shutoff_state(self):
52 # Delete a server while it's VM state is Shutoff
David Kranz0fb14292015-02-11 15:55:20 -050053 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -050054 self.client.stop(server['id'])
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000055 waiters.wait_for_server_status(self.client, server['id'], 'SHUTOFF')
David Kranz0fb14292015-02-11 15:55:20 -050056 self.client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +090057 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090058
Chris Hoge7579c1a2015-02-26 14:12:15 -080059 @test.idempotent_id('943bd6e8-4d7a-4904-be83-7a6cc2d4213b')
Matt Riedemann992162e2014-03-24 09:11:06 -070060 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
61 'Pause is not available.')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090062 def test_delete_server_while_in_pause_state(self):
63 # Delete a server while it's VM state is Pause
David Kranz0fb14292015-02-11 15:55:20 -050064 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -050065 self.client.pause_server(server['id'])
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000066 waiters.wait_for_server_status(self.client, server['id'], 'PAUSED')
David Kranz0fb14292015-02-11 15:55:20 -050067 self.client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +090068 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090069
Chris Hoge7579c1a2015-02-26 14:12:15 -080070 @test.idempotent_id('1f82ebd3-8253-4f4e-b93f-de9b7df56d8b')
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000071 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
72 'Suspend is not available.')
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000073 def test_delete_server_while_in_suspended_state(self):
74 # Delete a server while it's VM state is Suspended
David Kranz0fb14292015-02-11 15:55:20 -050075 server = self.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000076 self.client.suspend_server(server['id'])
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000077 waiters.wait_for_server_status(self.client, server['id'], 'SUSPENDED')
David Kranz0fb14292015-02-11 15:55:20 -050078 self.client.delete_server(server['id'])
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000079 self.client.wait_for_server_termination(server['id'])
80
Chris Hoge7579c1a2015-02-26 14:12:15 -080081 @test.idempotent_id('bb0cb402-09dd-4947-b6e5-5e7e1cfa61ad')
David Shrewsbury25f666f2014-07-22 12:17:59 -040082 @testtools.skipUnless(CONF.compute_feature_enabled.shelve,
83 'Shelve is not available.')
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090084 def test_delete_server_while_in_shelved_state(self):
85 # Delete a server while it's VM state is Shelved
David Kranz0fb14292015-02-11 15:55:20 -050086 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -050087 self.client.shelve_server(server['id'])
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090088
89 offload_time = CONF.compute.shelved_offload_time
90 if offload_time >= 0:
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000091 waiters.wait_for_server_status(self.client, server['id'],
92 'SHELVED_OFFLOADED',
93 extra_timeout=offload_time)
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090094 else:
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000095 waiters.wait_for_server_status(self.client, server['id'],
96 'SHELVED')
David Kranz0fb14292015-02-11 15:55:20 -050097 self.client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +090098 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090099
Chris Hoge7579c1a2015-02-26 14:12:15 -0800100 @test.idempotent_id('ab0c38b4-cdd8-49d3-9b92-0cb898723c01')
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +0900101 @testtools.skipIf(not CONF.compute_feature_enabled.resize,
102 'Resize not available.')
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +0900103 def test_delete_server_while_in_verify_resize_state(self):
104 # Delete a server while it's VM state is VERIFY_RESIZE
David Kranz0fb14292015-02-11 15:55:20 -0500105 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -0500106 self.client.resize(server['id'], self.flavor_ref_alt)
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000107 waiters.wait_for_server_status(self.client, server['id'],
108 'VERIFY_RESIZE')
David Kranz0fb14292015-02-11 15:55:20 -0500109 self.client.delete_server(server['id'])
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +0900110 self.client.wait_for_server_termination(server['id'])
111
Chris Hoge7579c1a2015-02-26 14:12:15 -0800112 @test.idempotent_id('d0f3f0d6-d9b6-4a32-8da4-23015dcab23c')
Michael Hudson-Doyleb657ac92014-11-03 14:19:52 +1300113 @test.services('volume')
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900114 def test_delete_server_while_in_attached_volume(self):
115 # Delete a server while a volume is attached to it
116 volumes_client = self.volumes_extensions_client
117 device = '/dev/%s' % CONF.compute.volume_device_name
David Kranz0fb14292015-02-11 15:55:20 -0500118 server = self.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900119
Markus Zoeller3d2a21c2015-02-27 12:04:22 +0100120 volume = volumes_client.create_volume()
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900121 self.addCleanup(volumes_client.delete_volume, volume['id'])
Ken'ichi Ohmichic6633232015-07-08 08:31:04 +0000122 waiters.wait_for_volume_status(volumes_client,
123 volume['id'], 'available')
David Kranz3ebc7212015-02-10 12:19:19 -0500124 self.client.attach_volume(server['id'],
Ken'ichi Ohmichidfc88de2015-08-13 05:12:20 +0000125 volumeId=volume['id'],
David Kranz3ebc7212015-02-10 12:19:19 -0500126 device=device)
Ken'ichi Ohmichic6633232015-07-08 08:31:04 +0000127 waiters.wait_for_volume_status(volumes_client,
128 volume['id'], 'in-use')
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900129
David Kranz0fb14292015-02-11 15:55:20 -0500130 self.client.delete_server(server['id'])
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900131 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichic6633232015-07-08 08:31:04 +0000132 waiters.wait_for_volume_status(volumes_client,
133 volume['id'], 'available')
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900134
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +0900135
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900136class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
137 # NOTE: Server creations of each test class should be under 10
138 # for preventing "Quota exceeded for instances".
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900139
140 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +0530141 def setup_clients(cls):
142 super(DeleteServersAdminTestJSON, cls).setup_clients()
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900143 cls.non_admin_client = cls.servers_client
144 cls.admin_client = cls.os_adm.servers_client
145
Chris Hoge7579c1a2015-02-26 14:12:15 -0800146 @test.idempotent_id('99774678-e072-49d1-9d2a-49a59bc56063')
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900147 def test_delete_server_while_in_error_state(self):
148 # Delete a server while it's VM state is error
David Kranz0fb14292015-02-11 15:55:20 -0500149 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -0500150 self.admin_client.reset_state(server['id'], state='error')
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900151 # Verify server's state
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +0000152 server = self.non_admin_client.show_server(server['id'])
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900153 self.assertEqual(server['status'], 'ERROR')
David Kranz0fb14292015-02-11 15:55:20 -0500154 self.non_admin_client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +0900155 self.servers_client.wait_for_server_termination(server['id'],
156 ignore_error=True)
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900157
Chris Hoge7579c1a2015-02-26 14:12:15 -0800158 @test.idempotent_id('73177903-6737-4f27-a60c-379e8ae8cf48')
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900159 def test_admin_delete_servers_of_others(self):
160 # Administrator can delete servers of others
David Kranz0fb14292015-02-11 15:55:20 -0500161 server = self.create_test_server(wait_until='ACTIVE')
162 self.admin_client.delete_server(server['id'])
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900163 self.servers_client.wait_for_server_termination(server['id'])