blob: abe903ca117422ea933f22fc59a6f4bc28113e2e [file] [log] [blame]
Jay Pipes051075a2012-04-28 17:39:37 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack, LLC
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
Sean Dague1937d092013-05-17 16:36:38 -040018from tempest.api.identity.base import BaseIdentityAdminTest
Matthew Treinisha83a16e2012-12-07 13:44:02 -050019from tempest import exceptions
Sean Dague2203a1f2013-05-14 11:50:46 -040020from tempest.whitebox import manager
David Kranza55ab262012-08-07 16:11:17 -040021
Jay Pipes051075a2012-04-28 17:39:37 -040022
Sean Dague2203a1f2013-05-14 11:50:46 -040023class ServersWhiteboxTest(manager.ComputeWhiteboxTest):
Attila Fazekas19044d52013-02-16 07:35:06 +010024 _interface = 'json'
Jay Pipes051075a2012-04-28 17:39:37 -040025
26 @classmethod
27 def setUpClass(cls):
Jay Pipes051075a2012-04-28 17:39:37 -040028 super(ServersWhiteboxTest, cls).setUpClass()
Attila Fazekasc3a095b2013-08-17 09:15:44 +020029 # NOTE(afazekas): Strange relationship
Jay Pipes051075a2012-04-28 17:39:37 -040030 BaseIdentityAdminTest.setUpClass()
31 cls.client = cls.servers_client
32 cls.img_client = cls.images_client
33 cls.admin_client = BaseIdentityAdminTest.client
34
35 cls.connection, cls.meta = cls.get_db_handle_and_meta()
36
37 resp, tenants = cls.admin_client.list_tenants()
Zhongyue Luo79d8d362012-09-25 13:49:27 +080038 cls.tenant_id = [
39 tnt['id']
40 for tnt in tenants if tnt['name'] == cls.config.compute.tenant_name
41 ][0]
Jay Pipes051075a2012-04-28 17:39:37 -040042
43 cls.shared_server = cls.create_server()
44
45 def tearDown(cls):
46 for server in cls.servers:
47 try:
48 cls.client.delete_server(server['id'])
49 except exceptions.NotFound:
50 continue
51
Sean Daguef07dd632013-01-24 06:19:46 -050052 def update_state(self, server_id, vm_state, task_state, deleted=0):
Sean Daguef237ccb2013-01-04 15:19:14 -050053 """Update states of an instance in database for validation."""
Jay Pipes051075a2012-04-28 17:39:37 -040054 if not task_state:
55 task_state = 'NULL'
56
57 instances = self.meta.tables['instances']
58 stmt = instances.update().where(instances.c.uuid == server_id).values(
Zhongyue Luoa1343de2013-01-04 16:21:35 +080059 deleted=deleted,
60 vm_state=vm_state,
61 task_state=task_state)
Jay Pipes051075a2012-04-28 17:39:37 -040062 self.connection.execute(stmt, autocommit=True)
63
64 def _test_delete_server_base(self, vm_state, task_state):
65 """
66 Base method for delete server tests based on vm and task states.
67 Validates for successful server termination.
68 """
69 try:
70 server = self.create_server()
71 self.update_state(server['id'], vm_state, task_state)
72
73 resp, body = self.client.delete_server(server['id'])
74 self.assertEqual('204', resp['status'])
75 self.client.wait_for_server_termination(server['id'],
76 ignore_error=True)
77
78 instances = self.meta.tables['instances']
79 stmt = instances.select().where(instances.c.uuid == server['id'])
80 result = self.connection.execute(stmt).first()
81
Andrea Frittolid3e099b2013-08-05 00:23:51 +010082 self.assertEqual(True, result.deleted > 0)
Jay Pipes051075a2012-04-28 17:39:37 -040083 self.assertEqual('deleted', result.vm_state)
84 self.assertEqual(None, result.task_state)
Matthew Treinish05d9fb92012-12-07 16:14:05 -050085 except Exception:
Jay Pipes051075a2012-04-28 17:39:37 -040086 self.fail("Should be able to delete a server when vm_state=%s and "
87 "task_state=%s" % (vm_state, task_state))
88
89 def _test_delete_server_403_base(self, vm_state, task_state):
90 """
91 Base method for delete server tests based on vm and task states.
92 Validates for 403 error code.
93 """
94 try:
95 self.update_state(self.shared_server['id'], vm_state, task_state)
96
97 self.assertRaises(exceptions.Unauthorized,
Zhongyue Luo79d8d362012-09-25 13:49:27 +080098 self.client.delete_server,
99 self.shared_server['id'])
Matthew Treinish05d9fb92012-12-07 16:14:05 -0500100 except Exception:
Jay Pipes051075a2012-04-28 17:39:37 -0400101 self.fail("Should not allow delete server when vm_state=%s and "
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800102 "task_state=%s" % (vm_state, task_state))
Jay Pipes051075a2012-04-28 17:39:37 -0400103 finally:
104 self.update_state(self.shared_server['id'], 'active', None)
105
106 def test_delete_server_when_vm_eq_building_task_eq_networking(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500107 # Delete server when instance states are building,networking
Jay Pipes051075a2012-04-28 17:39:37 -0400108 self._test_delete_server_base('building', 'networking')
109
110 def test_delete_server_when_vm_eq_building_task_eq_bdm(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500111 # Delete server when instance states are building,block device mapping
Jay Pipes051075a2012-04-28 17:39:37 -0400112 self._test_delete_server_base('building', 'block_device_mapping')
113
114 def test_delete_server_when_vm_eq_building_task_eq_spawning(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500115 # Delete server when instance states are building,spawning
Jay Pipes051075a2012-04-28 17:39:37 -0400116 self._test_delete_server_base('building', 'spawning')
117
118 def test_delete_server_when_vm_eq_active_task_eq_image_backup(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500119 # Delete server when instance states are active,image_backup
Jay Pipes051075a2012-04-28 17:39:37 -0400120 self._test_delete_server_base('active', 'image_backup')
121
122 def test_delete_server_when_vm_eq_active_task_eq_rebuilding(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500123 # Delete server when instance states are active,rebuilding
Jay Pipes051075a2012-04-28 17:39:37 -0400124 self._test_delete_server_base('active', 'rebuilding')
125
126 def test_delete_server_when_vm_eq_error_task_eq_spawning(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500127 # Delete server when instance states are error,spawning
Jay Pipes051075a2012-04-28 17:39:37 -0400128 self._test_delete_server_base('error', 'spawning')
129
130 def test_delete_server_when_vm_eq_resized_task_eq_resize_prep(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500131 # Delete server when instance states are resized,resize_prep
Jay Pipes051075a2012-04-28 17:39:37 -0400132 self._test_delete_server_403_base('resized', 'resize_prep')
133
134 def test_delete_server_when_vm_eq_resized_task_eq_resize_migrating(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500135 # Delete server when instance states are resized,resize_migrating
Jay Pipes051075a2012-04-28 17:39:37 -0400136 self._test_delete_server_403_base('resized', 'resize_migrating')
137
138 def test_delete_server_when_vm_eq_resized_task_eq_resize_migrated(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500139 # Delete server when instance states are resized,resize_migrated
Jay Pipes051075a2012-04-28 17:39:37 -0400140 self._test_delete_server_403_base('resized', 'resize_migrated')
141
142 def test_delete_server_when_vm_eq_resized_task_eq_resize_finish(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500143 # Delete server when instance states are resized,resize_finish
Jay Pipes051075a2012-04-28 17:39:37 -0400144 self._test_delete_server_403_base('resized', 'resize_finish')
145
146 def test_delete_server_when_vm_eq_resized_task_eq_resize_reverting(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500147 # Delete server when instance states are resized,resize_reverting
Jay Pipes051075a2012-04-28 17:39:37 -0400148 self._test_delete_server_403_base('resized', 'resize_reverting')
149
150 def test_delete_server_when_vm_eq_resized_task_eq_resize_confirming(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500151 # Delete server when instance states are resized,resize_confirming
Jay Pipes051075a2012-04-28 17:39:37 -0400152 self._test_delete_server_403_base('resized', 'resize_confirming')
153
154 def test_delete_server_when_vm_eq_active_task_eq_resize_verify(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500155 # Delete server when instance states are active,resize_verify
Jay Pipes051075a2012-04-28 17:39:37 -0400156 self._test_delete_server_base('active', 'resize_verify')
157
158 def test_delete_server_when_vm_eq_active_task_eq_rebooting(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500159 # Delete server when instance states are active,rebooting
Jay Pipes051075a2012-04-28 17:39:37 -0400160 self._test_delete_server_base('active', 'rebooting')
161
162 def test_delete_server_when_vm_eq_building_task_eq_deleting(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500163 # Delete server when instance states are building,deleting
Jay Pipes051075a2012-04-28 17:39:37 -0400164 self._test_delete_server_base('building', 'deleting')
165
166 def test_delete_server_when_vm_eq_active_task_eq_deleting(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500167 # Delete server when instance states are active,deleting
Jay Pipes051075a2012-04-28 17:39:37 -0400168 self._test_delete_server_base('active', 'deleting')
169
170 def test_delete_server_when_vm_eq_error_task_eq_none(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500171 # Delete server when instance states are error,None
Jay Pipes051075a2012-04-28 17:39:37 -0400172 self._test_delete_server_base('error', None)
173
174 def test_delete_server_when_vm_eq_resized_task_eq_none(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500175 # Delete server when instance states are resized,None
Jay Pipes051075a2012-04-28 17:39:37 -0400176 self._test_delete_server_403_base('resized', None)
177
178 def test_delete_server_when_vm_eq_error_task_eq_resize_prep(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500179 # Delete server when instance states are error,resize_prep
Jay Pipes051075a2012-04-28 17:39:37 -0400180 self._test_delete_server_base('error', 'resize_prep')
181
182 def test_delete_server_when_vm_eq_error_task_eq_error(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500183 # Delete server when instance states are error,error
Jay Pipes051075a2012-04-28 17:39:37 -0400184 self._test_delete_server_base('error', 'error')