blob: 13c2f74452508a2f9ffc03729fa3c5ff64a591e3 [file] [log] [blame]
nithya-ganesane6a36c82013-02-15 14:38:27 +00001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2013 Hewlett-Packard Development Company, L.P.
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.compute import base
nithya-ganesane6a36c82013-02-15 14:38:27 +000019from tempest.common.utils.data_utils import rand_name
nithya-ganesane6a36c82013-02-15 14:38:27 +000020import tempest.config
21from tempest import exceptions
22from tempest.test import attr
nithya-ganesane6a36c82013-02-15 14:38:27 +000023
24
25class ServerRescueTestJSON(base.BaseComputeTest):
26 _interface = 'json'
27
28 run_ssh = tempest.config.TempestConfig().compute.run_ssh
29
30 @classmethod
31 def setUpClass(cls):
32 super(ServerRescueTestJSON, cls).setUpClass()
33 cls.device = 'vdf'
34
35 #Floating IP creation
36 resp, body = cls.floating_ips_client.create_floating_ip()
37 cls.floating_ip_id = str(body['id']).strip()
38 cls.floating_ip = str(body['ip']).strip()
39
40 #Security group creation
41 cls.sg_name = rand_name('sg')
42 cls.sg_desc = rand_name('sg-desc')
43 resp, cls.sg = \
Sean Dague14c68182013-04-14 15:34:30 -040044 cls.security_groups_client.create_security_group(cls.sg_name,
45 cls.sg_desc)
nithya-ganesane6a36c82013-02-15 14:38:27 +000046 cls.sg_id = cls.sg['id']
47
48 # Create a volume and wait for it to become ready for attach
49 resp, cls.volume_to_attach = \
Sean Dague14c68182013-04-14 15:34:30 -040050 cls.volumes_extensions_client.create_volume(1,
51 display_name=
52 'test_attach')
Joe Gordone4f2b2e2013-04-04 15:54:10 -070053 cls.volumes_extensions_client.wait_for_volume_status(
Sean Dague14c68182013-04-14 15:34:30 -040054 cls.volume_to_attach['id'], 'available')
nithya-ganesane6a36c82013-02-15 14:38:27 +000055
56 # Create a volume and wait for it to become ready for attach
57 resp, cls.volume_to_detach = \
Sean Dague14c68182013-04-14 15:34:30 -040058 cls.volumes_extensions_client.create_volume(1,
59 display_name=
60 'test_detach')
Joe Gordone4f2b2e2013-04-04 15:54:10 -070061 cls.volumes_extensions_client.wait_for_volume_status(
Sean Dague14c68182013-04-14 15:34:30 -040062 cls.volume_to_detach['id'], 'available')
nithya-ganesane6a36c82013-02-15 14:38:27 +000063
64 # Server for positive tests
65 resp, server = cls.create_server(image_id=cls.image_ref,
66 flavor=cls.flavor_ref,
67 wait_until='BUILD')
68 resp, resc_server = cls.create_server(image_id=cls.image_ref,
69 flavor=cls.flavor_ref,
70 wait_until='ACTIVE')
71 cls.server_id = server['id']
72 cls.password = server['adminPass']
73 cls.servers_client.wait_for_server_status(cls.server_id, 'ACTIVE')
74
75 # Server for negative tests
76 cls.rescue_id = resc_server['id']
77 cls.rescue_password = resc_server['adminPass']
78
79 cls.servers_client.rescue_server(
80 cls.rescue_id, cls.rescue_password)
81 cls.servers_client.wait_for_server_status(cls.rescue_id, 'RESCUE')
82
83 def setUp(self):
84 super(ServerRescueTestJSON, self).setUp()
85
86 @classmethod
87 def tearDownClass(cls):
nithya-ganesane6a36c82013-02-15 14:38:27 +000088 #Deleting the floating IP which is created in this method
89 cls.floating_ips_client.delete_floating_ip(cls.floating_ip_id)
90 client = cls.volumes_extensions_client
91 client.delete_volume(str(cls.volume_to_attach['id']).strip())
92 client.delete_volume(str(cls.volume_to_detach['id']).strip())
Sean Dague14c68182013-04-14 15:34:30 -040093 resp, cls.sg = cls.security_groups_client.delete_security_group(
94 cls.sg_id)
Dolph Mathews6dbb27c2013-05-09 10:56:24 -050095 super(ServerRescueTestJSON, cls).tearDownClass()
nithya-ganesane6a36c82013-02-15 14:38:27 +000096
97 def tearDown(self):
98 super(ServerRescueTestJSON, self).tearDown()
99
100 def _detach(self, server_id, volume_id):
101 self.servers_client.detach_volume(server_id, volume_id)
102 self.volumes_extensions_client.wait_for_volume_status(volume_id,
103 'available')
104
105 def _delete(self, volume_id):
106 self.volumes_extensions_client.delete_volume(volume_id)
107
Matthew Treinish149142e2013-03-20 16:25:55 -0400108 def _unrescue(self, server_id):
109 resp, body = self.servers_client.unrescue_server(server_id)
110 self.assertEqual(202, resp.status)
111 self.servers_client.wait_for_server_status(server_id, 'ACTIVE')
112
nithya-ganesane6a36c82013-02-15 14:38:27 +0000113 @attr(type='smoke')
114 def test_rescue_unrescue_instance(self):
115 resp, body = self.servers_client.rescue_server(
116 self.server_id, self.password)
117 self.assertEqual(200, resp.status)
118 self.servers_client.wait_for_server_status(self.server_id, 'RESCUE')
119 resp, body = self.servers_client.unrescue_server(self.server_id)
120 self.assertEqual(202, resp.status)
121 self.servers_client.wait_for_server_status(self.server_id, 'ACTIVE')
122
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400123 @attr(type=['negative', 'gate'])
nithya-ganesane6a36c82013-02-15 14:38:27 +0000124 def test_rescued_vm_reboot(self):
Matthew Treinish149142e2013-03-20 16:25:55 -0400125 self.assertRaises(exceptions.Duplicate, self.servers_client.reboot,
nithya-ganesane6a36c82013-02-15 14:38:27 +0000126 self.rescue_id, 'HARD')
127
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400128 @attr(type=['negative', 'gate'])
Anju Tiwarid0eca672013-07-24 14:27:51 +0530129 def test_rescue_non_existent_server(self):
130 # Rescue a non-existing server
131 self.assertRaises(exceptions.NotFound,
132 self.servers_client.rescue_server,
133 '999erra43')
134
135 @attr(type=['negative', 'gate'])
nithya-ganesane6a36c82013-02-15 14:38:27 +0000136 def test_rescued_vm_rebuild(self):
137 self.assertRaises(exceptions.Duplicate,
138 self.servers_client.rebuild,
139 self.rescue_id,
140 self.image_ref_alt)
141
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400142 @attr(type=['negative', 'gate'])
nithya-ganesane6a36c82013-02-15 14:38:27 +0000143 def test_rescued_vm_attach_volume(self):
nithya-ganesane6a36c82013-02-15 14:38:27 +0000144 # Rescue the server
145 self.servers_client.rescue_server(self.server_id, self.password)
146 self.servers_client.wait_for_server_status(self.server_id, 'RESCUE')
Matthew Treinish149142e2013-03-20 16:25:55 -0400147 self.addCleanup(self._unrescue, self.server_id)
nithya-ganesane6a36c82013-02-15 14:38:27 +0000148
149 # Attach the volume to the server
Matthew Treinish149142e2013-03-20 16:25:55 -0400150 self.assertRaises(exceptions.Duplicate,
151 self.servers_client.attach_volume,
152 self.server_id,
153 self.volume_to_attach['id'],
154 device='/dev/%s' % self.device)
nithya-ganesane6a36c82013-02-15 14:38:27 +0000155
Giampaolo Lauriae9c77022013-05-22 01:23:58 -0400156 @attr(type=['negative', 'gate'])
nithya-ganesane6a36c82013-02-15 14:38:27 +0000157 def test_rescued_vm_detach_volume(self):
158 # Attach the volume to the server
159 self.servers_client.attach_volume(self.server_id,
160 self.volume_to_detach['id'],
161 device='/dev/%s' % self.device)
Joe Gordone4f2b2e2013-04-04 15:54:10 -0700162 self.volumes_extensions_client.wait_for_volume_status(
Sean Dague14c68182013-04-14 15:34:30 -0400163 self.volume_to_detach['id'], 'in-use')
nithya-ganesane6a36c82013-02-15 14:38:27 +0000164
165 # Rescue the server
166 self.servers_client.rescue_server(self.server_id, self.password)
167 self.servers_client.wait_for_server_status(self.server_id, 'RESCUE')
Joe Gordone4f2b2e2013-04-04 15:54:10 -0700168 #addCleanup is a LIFO queue
169 self.addCleanup(self._detach, self.server_id,
170 self.volume_to_detach['id'])
Matthew Treinish149142e2013-03-20 16:25:55 -0400171 self.addCleanup(self._unrescue, self.server_id)
nithya-ganesane6a36c82013-02-15 14:38:27 +0000172
Matthew Treinish149142e2013-03-20 16:25:55 -0400173 # Detach the volume from the server expecting failure
174 self.assertRaises(exceptions.Duplicate,
175 self.servers_client.detach_volume,
176 self.server_id,
177 self.volume_to_detach['id'])
nithya-ganesane6a36c82013-02-15 14:38:27 +0000178
Giulio Fidenteba3985a2013-05-29 01:46:36 +0200179 @attr(type='gate')
nithya-ganesane6a36c82013-02-15 14:38:27 +0000180 def test_rescued_vm_associate_dissociate_floating_ip(self):
181 # Rescue the server
182 self.servers_client.rescue_server(
183 self.server_id, self.password)
184 self.servers_client.wait_for_server_status(self.server_id, 'RESCUE')
Joe Gordone4f2b2e2013-04-04 15:54:10 -0700185 self.addCleanup(self._unrescue, self.server_id)
nithya-ganesane6a36c82013-02-15 14:38:27 +0000186
187 #Association of floating IP to a rescued vm
188 client = self.floating_ips_client
Sean Dague14c68182013-04-14 15:34:30 -0400189 resp, body = client.associate_floating_ip_to_server(self.floating_ip,
190 self.server_id)
nithya-ganesane6a36c82013-02-15 14:38:27 +0000191 self.assertEqual(202, resp.status)
192
193 #Disassociation of floating IP that was associated in this method
194 resp, body = \
195 client.disassociate_floating_ip_from_server(self.floating_ip,
196 self.server_id)
197 self.assertEqual(202, resp.status)
198
Giulio Fidenteba3985a2013-05-29 01:46:36 +0200199 @attr(type='gate')
nithya-ganesane6a36c82013-02-15 14:38:27 +0000200 def test_rescued_vm_add_remove_security_group(self):
Prem Karatfbe87a02013-04-22 21:22:06 +0530201 # Rescue the server
202 self.servers_client.rescue_server(
203 self.server_id, self.password)
204 self.servers_client.wait_for_server_status(self.server_id, 'RESCUE')
205
nithya-ganesane6a36c82013-02-15 14:38:27 +0000206 #Add Security group
207 resp, body = self.servers_client.add_security_group(self.server_id,
208 self.sg_name)
209 self.assertEqual(202, resp.status)
210
211 #Delete Security group
212 resp, body = self.servers_client.remove_security_group(self.server_id,
Prem Karatfbe87a02013-04-22 21:22:06 +0530213 self.sg_name)
nithya-ganesane6a36c82013-02-15 14:38:27 +0000214 self.assertEqual(202, resp.status)
215
216 # Unrescue the server
217 resp, body = self.servers_client.unrescue_server(self.server_id)
218 self.assertEqual(202, resp.status)
219 self.servers_client.wait_for_server_status(self.server_id, 'ACTIVE')
220
221
222class ServerRescueTestXML(ServerRescueTestJSON):
223 _interface = 'xml'