blob: 451d08f7d2bea5a555496f7fbb9646613e5e8c9b [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
31 def setUpClass(cls):
32 super(DeleteServersTestJSON, cls).setUpClass()
33 cls.client = cls.servers_client
34
35 @test.attr(type='gate')
36 def test_delete_server_while_in_building_state(self):
37 # Delete a server while it's VM state is Building
38 resp, server = self.create_test_server(wait_until='BUILD')
39 resp, _ = self.client.delete_server(server['id'])
40 self.assertEqual('204', resp['status'])
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')
44 def test_delete_active_server(self):
45 # Delete a server while it's VM state is Active
46 resp, server = self.create_test_server(wait_until='ACTIVE')
47 resp, _ = self.client.delete_server(server['id'])
48 self.assertEqual('204', resp['status'])
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')
52 def test_delete_server_while_in_shutoff_state(self):
53 # Delete a server while it's VM state is Shutoff
54 resp, server = self.create_test_server(wait_until='ACTIVE')
55 resp, body = self.client.stop(server['id'])
56 self.client.wait_for_server_status(server['id'], 'SHUTOFF')
57 resp, _ = self.client.delete_server(server['id'])
58 self.assertEqual('204', resp['status'])
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
Matt Riedemann992162e2014-03-24 09:11:06 -070061 @testtools.skipUnless(CONF.compute_feature_enabled.pause,
62 'Pause is not available.')
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +090063 @test.attr(type='gate')
64 def test_delete_server_while_in_pause_state(self):
65 # Delete a server while it's VM state is Pause
66 resp, server = self.create_test_server(wait_until='ACTIVE')
67 resp, body = self.client.pause_server(server['id'])
68 self.client.wait_for_server_status(server['id'], 'PAUSED')
69 resp, _ = self.client.delete_server(server['id'])
70 self.assertEqual('204', resp['status'])
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
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090073 @test.attr(type='gate')
74 def test_delete_server_while_in_shelved_state(self):
75 # Delete a server while it's VM state is Shelved
76 resp, server = self.create_test_server(wait_until='ACTIVE')
77 resp, body = self.client.shelve_server(server['id'])
78 self.assertEqual(202, resp.status)
79
80 offload_time = CONF.compute.shelved_offload_time
81 if offload_time >= 0:
82 self.client.wait_for_server_status(server['id'],
83 'SHELVED_OFFLOADED',
84 extra_timeout=offload_time)
85 else:
86 self.client.wait_for_server_status(server['id'],
87 'SHELVED')
88 resp, _ = self.client.delete_server(server['id'])
89 self.assertEqual('204', resp['status'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +090090 self.client.wait_for_server_termination(server['id'])
Ken'ichi Ohmichi09a56842014-02-21 16:49:57 +090091
Ken'ichi Ohmichi5a1ff262014-02-24 23:39:19 +090092 @testtools.skipIf(not CONF.compute_feature_enabled.resize,
93 'Resize not available.')
94 @test.attr(type='gate')
95 def test_delete_server_while_in_verify_resize_state(self):
96 # Delete a server while it's VM state is VERIFY_RESIZE
97 resp, server = self.create_test_server(wait_until='ACTIVE')
98 resp, body = self.client.resize(server['id'], self.flavor_ref_alt)
99 self.assertEqual(202, resp.status)
100 self.client.wait_for_server_status(server['id'], 'VERIFY_RESIZE')
101 resp, _ = self.client.delete_server(server['id'])
102 self.assertEqual('204', resp['status'])
103 self.client.wait_for_server_termination(server['id'])
104
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +0900105
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900106class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
107 # NOTE: Server creations of each test class should be under 10
108 # for preventing "Quota exceeded for instances".
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900109
110 @classmethod
111 def setUpClass(cls):
112 super(DeleteServersAdminTestJSON, cls).setUpClass()
113 cls.non_admin_client = cls.servers_client
114 cls.admin_client = cls.os_adm.servers_client
115
116 @test.attr(type='gate')
117 def test_delete_server_while_in_error_state(self):
118 # Delete a server while it's VM state is error
119 resp, server = self.create_test_server(wait_until='ACTIVE')
120 resp, body = self.admin_client.reset_state(server['id'], state='error')
121 self.assertEqual(202, resp.status)
122 # Verify server's state
123 resp, server = self.non_admin_client.get_server(server['id'])
124 self.assertEqual(server['status'], 'ERROR')
125 resp, _ = self.non_admin_client.delete_server(server['id'])
126 self.assertEqual('204', resp['status'])
Ken'ichi Ohmichic5a27d32014-02-25 22:57:10 +0900127 self.servers_client.wait_for_server_termination(server['id'],
128 ignore_error=True)
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900129
130 @test.attr(type='gate')
131 def test_admin_delete_servers_of_others(self):
132 # Administrator can delete servers of others
133 resp, server = self.create_test_server(wait_until='ACTIVE')
134 resp, _ = self.admin_client.delete_server(server['id'])
135 self.assertEqual('204', resp['status'])
136 self.servers_client.wait_for_server_termination(server['id'])
137
138
Ken'ichi Ohmichi0d4f9882014-02-20 23:51:21 +0900139class DeleteServersTestXML(DeleteServersTestJSON):
140 _interface = 'xml'
Ken'ichi Ohmichi3c9c3c32014-02-24 22:49:11 +0900141
142
143class DeleteServersAdminTestXML(DeleteServersAdminTestJSON):
144 _interface = 'xml'