blob: 8842899b53a93a4fe7253bba06109943b2456286 [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 Ohmichi09a56842014-02-21 16:49:57 +090019from tempest import config
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090020from tempest import test
21
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090022CONF = config.CONF
23
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090024
25class DeleteServersTestJSON(base.BaseV2ComputeTest):
Eric Windischb5538072014-03-09 23:47:35 -040026
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090027 # NOTE: Server creations of each test class should be under 10
28 # for preventing "Quota exceeded for instances"
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090029
30 @classmethod
Andrea Frittoli50bb80d2014-09-15 12:34:27 +010031 def resource_setup(cls):
32 super(DeleteServersTestJSON, cls).resource_setup()
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090033 cls.client = cls.servers_client
34
35 @test.attr(type='gate')
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
43 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -080044 @test.idempotent_id('925fdfb4-5b13-47ea-ac8a-c36ae6fddb05')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090045 def test_delete_active_server(self):
46 # Delete a server while it's VM state is Active
David Kranz0fb14292015-02-11 15:55:20 -050047 server = self.create_test_server(wait_until='ACTIVE')
48 self.client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +090049 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090050
51 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -080052 @test.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')
David Kranzae99b9a2015-02-16 13:37:01 -050056 self.client.stop(server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090057 self.client.wait_for_server_status(server['id'], 'SHUTOFF')
David Kranz0fb14292015-02-11 15:55:20 -050058 self.client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +090059 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090060
Chris Hoge7579c1a2015-02-26 14:12:15 -080061 @test.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 @test.attr(type='gate')
65 def test_delete_server_while_in_pause_state(self):
66 # Delete a server while it's VM state is Pause
David Kranz0fb14292015-02-11 15:55:20 -050067 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -050068 self.client.pause_server(server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090069 self.client.wait_for_server_status(server['id'], 'PAUSED')
David Kranz0fb14292015-02-11 15:55:20 -050070 self.client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +090071 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090072
Chris Hoge7579c1a2015-02-26 14:12:15 -080073 @test.idempotent_id('1f82ebd3-8253-4f4e-b93f-de9b7df56d8b')
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000074 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
75 'Suspend is not available.')
76 @test.attr(type='gate')
77 def test_delete_server_while_in_suspended_state(self):
78 # Delete a server while it's VM state is Suspended
David Kranz0fb14292015-02-11 15:55:20 -050079 server = self.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000080 self.client.suspend_server(server['id'])
81 self.client.wait_for_server_status(server['id'], 'SUSPENDED')
David Kranz0fb14292015-02-11 15:55:20 -050082 self.client.delete_server(server['id'])
Ken'ichi Ohmichi07cfe972014-09-30 00:15:14 +000083 self.client.wait_for_server_termination(server['id'])
84
Chris Hoge7579c1a2015-02-26 14:12:15 -080085 @test.idempotent_id('bb0cb402-09dd-4947-b6e5-5e7e1cfa61ad')
David Shrewsbury25f666f2014-07-22 12:17:59 -040086 @testtools.skipUnless(CONF.compute_feature_enabled.shelve,
87 'Shelve is not available.')
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090088 @test.attr(type='gate')
89 def test_delete_server_while_in_shelved_state(self):
90 # Delete a server while it's VM state is Shelved
David Kranz0fb14292015-02-11 15:55:20 -050091 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -050092 self.client.shelve_server(server['id'])
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090093
94 offload_time = CONF.compute.shelved_offload_time
95 if offload_time >= 0:
96 self.client.wait_for_server_status(server['id'],
97 'SHELVED_OFFLOADED',
98 extra_timeout=offload_time)
99 else:
100 self.client.wait_for_server_status(server['id'],
101 'SHELVED')
David Kranz0fb14292015-02-11 15:55:20 -0500102 self.client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +0900103 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +0900104
Chris Hoge7579c1a2015-02-26 14:12:15 -0800105 @test.idempotent_id('ab0c38b4-cdd8-49d3-9b92-0cb898723c01')
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +0900106 @testtools.skipIf(not CONF.compute_feature_enabled.resize,
107 'Resize not available.')
108 @test.attr(type='gate')
109 def test_delete_server_while_in_verify_resize_state(self):
110 # Delete a server while it's VM state is VERIFY_RESIZE
David Kranz0fb14292015-02-11 15:55:20 -0500111 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -0500112 self.client.resize(server['id'], self.flavor_ref_alt)
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +0900113 self.client.wait_for_server_status(server['id'], 'VERIFY_RESIZE')
David Kranz0fb14292015-02-11 15:55:20 -0500114 self.client.delete_server(server['id'])
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +0900115 self.client.wait_for_server_termination(server['id'])
116
Chris Hoge7579c1a2015-02-26 14:12:15 -0800117 @test.idempotent_id('d0f3f0d6-d9b6-4a32-8da4-23015dcab23c')
Michael Hudson-Doyleb657ac92014-11-03 14:19:52 +1300118 @test.services('volume')
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900119 @test.attr(type='gate')
120 def test_delete_server_while_in_attached_volume(self):
121 # Delete a server while a volume is attached to it
122 volumes_client = self.volumes_extensions_client
123 device = '/dev/%s' % CONF.compute.volume_device_name
David Kranz0fb14292015-02-11 15:55:20 -0500124 server = self.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900125
David Kranz3ebc7212015-02-10 12:19:19 -0500126 volume = volumes_client.create_volume(1)
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900127 self.addCleanup(volumes_client.delete_volume, volume['id'])
128 volumes_client.wait_for_volume_status(volume['id'], 'available')
David Kranz3ebc7212015-02-10 12:19:19 -0500129 self.client.attach_volume(server['id'],
130 volume['id'],
131 device=device)
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900132 volumes_client.wait_for_volume_status(volume['id'], 'in-use')
133
David Kranz0fb14292015-02-11 15:55:20 -0500134 self.client.delete_server(server['id'])
Ken'ichi Ohmichi254b81c2014-02-24 22:35:34 +0900135 self.client.wait_for_server_termination(server['id'])
136 volumes_client.wait_for_volume_status(volume['id'], 'available')
137
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +0900138
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900139class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
140 # NOTE: Server creations of each test class should be under 10
141 # for preventing "Quota exceeded for instances".
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900142
143 @classmethod
Andrea Frittoli50bb80d2014-09-15 12:34:27 +0100144 def resource_setup(cls):
145 super(DeleteServersAdminTestJSON, cls).resource_setup()
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900146 cls.non_admin_client = cls.servers_client
147 cls.admin_client = cls.os_adm.servers_client
148
149 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800150 @test.idempotent_id('99774678-e072-49d1-9d2a-49a59bc56063')
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900151 def test_delete_server_while_in_error_state(self):
152 # Delete a server while it's VM state is error
David Kranz0fb14292015-02-11 15:55:20 -0500153 server = self.create_test_server(wait_until='ACTIVE')
David Kranzae99b9a2015-02-16 13:37:01 -0500154 self.admin_client.reset_state(server['id'], state='error')
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900155 # Verify server's state
David Kranz0fb14292015-02-11 15:55:20 -0500156 server = self.non_admin_client.get_server(server['id'])
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900157 self.assertEqual(server['status'], 'ERROR')
David Kranz0fb14292015-02-11 15:55:20 -0500158 self.non_admin_client.delete_server(server['id'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +0900159 self.servers_client.wait_for_server_termination(server['id'],
160 ignore_error=True)
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900161
162 @test.attr(type='gate')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800163 @test.idempotent_id('73177903-6737-4f27-a60c-379e8ae8cf48')
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900164 def test_admin_delete_servers_of_others(self):
165 # Administrator can delete servers of others
David Kranz0fb14292015-02-11 15:55:20 -0500166 server = self.create_test_server(wait_until='ACTIVE')
167 self.admin_client.delete_server(server['id'])
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900168 self.servers_client.wait_for_server_termination(server['id'])