blob: ab98d881cdfafe6c8b804124a1c9a854a1e0bb02 [file] [log] [blame]
nithya-ganesane6a36c82013-02-15 14:38:27 +00001# Copyright 2013 Hewlett-Packard Development Company, L.P.
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
Sean Dague1937d092013-05-17 16:36:38 -040016from tempest.api.compute import base
Masayuki Igawa259c1132013-10-31 17:48:44 +090017from tempest.common.utils import data_utils
Adam Gandelman2e37b4f2014-06-18 17:34:21 -070018from tempest import config
Haiwei Xubb887cb2014-02-07 18:49:13 +090019from tempest import test
nithya-ganesane6a36c82013-02-15 14:38:27 +000020
Adam Gandelman2e37b4f2014-06-18 17:34:21 -070021CONF = config.CONF
22
nithya-ganesane6a36c82013-02-15 14:38:27 +000023
ivan-zhuf2b00502013-10-18 10:06:52 +080024class ServerRescueTestJSON(base.BaseV2ComputeTest):
nithya-ganesane6a36c82013-02-15 14:38:27 +000025
nithya-ganesane6a36c82013-02-15 14:38:27 +000026 @classmethod
Masayuki Igawa67b827f2014-03-17 18:44:57 +090027 @test.safe_setup
nithya-ganesane6a36c82013-02-15 14:38:27 +000028 def setUpClass(cls):
Adam Gandelman2e37b4f2014-06-18 17:34:21 -070029 if not CONF.compute_feature_enabled.rescue:
30 msg = "Server rescue not available."
31 raise cls.skipException(msg)
32
Attila Fazekas69095972014-02-06 16:46:18 +010033 cls.set_network_resources(network=True, subnet=True, router=True)
nithya-ganesane6a36c82013-02-15 14:38:27 +000034 super(ServerRescueTestJSON, cls).setUpClass()
nithya-ganesane6a36c82013-02-15 14:38:27 +000035
Attila Fazekasf7f34f92013-08-01 17:01:44 +020036 # Floating IP creation
nithya-ganesane6a36c82013-02-15 14:38:27 +000037 resp, body = cls.floating_ips_client.create_floating_ip()
38 cls.floating_ip_id = str(body['id']).strip()
39 cls.floating_ip = str(body['ip']).strip()
40
Attila Fazekasf7f34f92013-08-01 17:01:44 +020041 # Security group creation
Masayuki Igawa259c1132013-10-31 17:48:44 +090042 cls.sg_name = data_utils.rand_name('sg')
43 cls.sg_desc = data_utils.rand_name('sg-desc')
nithya-ganesane6a36c82013-02-15 14:38:27 +000044 resp, cls.sg = \
Sean Dague14c68182013-04-14 15:34:30 -040045 cls.security_groups_client.create_security_group(cls.sg_name,
46 cls.sg_desc)
nithya-ganesane6a36c82013-02-15 14:38:27 +000047 cls.sg_id = cls.sg['id']
48
49 # Create a volume and wait for it to become ready for attach
Matt Riedemann807d0562014-01-27 12:03:10 -080050 resp, cls.volume = cls.volumes_extensions_client.create_volume(
51 1, display_name=data_utils.rand_name(cls.__name__ + '_volume'))
Joe Gordone4f2b2e2013-04-04 15:54:10 -070052 cls.volumes_extensions_client.wait_for_volume_status(
Matt Riedemann807d0562014-01-27 12:03:10 -080053 cls.volume['id'], 'available')
nithya-ganesane6a36c82013-02-15 14:38:27 +000054
55 # Server for positive tests
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090056 resp, server = cls.create_test_server(wait_until='BUILD')
57 resp, resc_server = cls.create_test_server(wait_until='ACTIVE')
nithya-ganesane6a36c82013-02-15 14:38:27 +000058 cls.server_id = server['id']
59 cls.password = server['adminPass']
60 cls.servers_client.wait_for_server_status(cls.server_id, 'ACTIVE')
61
nithya-ganesane6a36c82013-02-15 14:38:27 +000062 def setUp(self):
63 super(ServerRescueTestJSON, self).setUp()
64
65 @classmethod
66 def tearDownClass(cls):
Attila Fazekasf7f34f92013-08-01 17:01:44 +020067 # Deleting the floating IP which is created in this method
nithya-ganesane6a36c82013-02-15 14:38:27 +000068 cls.floating_ips_client.delete_floating_ip(cls.floating_ip_id)
Matt Riedemann807d0562014-01-27 12:03:10 -080069 cls.delete_volume(cls.volume['id'])
Sean Dague14c68182013-04-14 15:34:30 -040070 resp, cls.sg = cls.security_groups_client.delete_security_group(
71 cls.sg_id)
Dolph Mathews6dbb27c2013-05-09 10:56:24 -050072 super(ServerRescueTestJSON, cls).tearDownClass()
nithya-ganesane6a36c82013-02-15 14:38:27 +000073
74 def tearDown(self):
75 super(ServerRescueTestJSON, self).tearDown()
76
Matthew Treinish149142e2013-03-20 16:25:55 -040077 def _unrescue(self, server_id):
78 resp, body = self.servers_client.unrescue_server(server_id)
79 self.assertEqual(202, resp.status)
80 self.servers_client.wait_for_server_status(server_id, 'ACTIVE')
81
Haiwei Xubb887cb2014-02-07 18:49:13 +090082 @test.attr(type='smoke')
nithya-ganesane6a36c82013-02-15 14:38:27 +000083 def test_rescue_unrescue_instance(self):
84 resp, body = self.servers_client.rescue_server(
Yuiko Takada7835d502014-01-15 10:15:03 +000085 self.server_id, adminPass=self.password)
nithya-ganesane6a36c82013-02-15 14:38:27 +000086 self.assertEqual(200, resp.status)
87 self.servers_client.wait_for_server_status(self.server_id, 'RESCUE')
88 resp, body = self.servers_client.unrescue_server(self.server_id)
89 self.assertEqual(202, resp.status)
90 self.servers_client.wait_for_server_status(self.server_id, 'ACTIVE')
91
Haiwei Xubb887cb2014-02-07 18:49:13 +090092 @test.attr(type='gate')
nithya-ganesane6a36c82013-02-15 14:38:27 +000093 def test_rescued_vm_associate_dissociate_floating_ip(self):
94 # Rescue the server
95 self.servers_client.rescue_server(
Yuiko Takada7835d502014-01-15 10:15:03 +000096 self.server_id, adminPass=self.password)
nithya-ganesane6a36c82013-02-15 14:38:27 +000097 self.servers_client.wait_for_server_status(self.server_id, 'RESCUE')
Joe Gordone4f2b2e2013-04-04 15:54:10 -070098 self.addCleanup(self._unrescue, self.server_id)
nithya-ganesane6a36c82013-02-15 14:38:27 +000099
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200100 # Association of floating IP to a rescued vm
nithya-ganesane6a36c82013-02-15 14:38:27 +0000101 client = self.floating_ips_client
Sean Dague14c68182013-04-14 15:34:30 -0400102 resp, body = client.associate_floating_ip_to_server(self.floating_ip,
103 self.server_id)
nithya-ganesane6a36c82013-02-15 14:38:27 +0000104 self.assertEqual(202, resp.status)
105
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200106 # Disassociation of floating IP that was associated in this method
nithya-ganesane6a36c82013-02-15 14:38:27 +0000107 resp, body = \
108 client.disassociate_floating_ip_from_server(self.floating_ip,
109 self.server_id)
110 self.assertEqual(202, resp.status)
111
Haiwei Xubb887cb2014-02-07 18:49:13 +0900112 @test.attr(type='gate')
nithya-ganesane6a36c82013-02-15 14:38:27 +0000113 def test_rescued_vm_add_remove_security_group(self):
Prem Karatfbe87a02013-04-22 21:22:06 +0530114 # Rescue the server
115 self.servers_client.rescue_server(
Yuiko Takada7835d502014-01-15 10:15:03 +0000116 self.server_id, adminPass=self.password)
Prem Karatfbe87a02013-04-22 21:22:06 +0530117 self.servers_client.wait_for_server_status(self.server_id, 'RESCUE')
Attila Fazekas87a409a2014-01-29 15:32:50 +0100118 self.addCleanup(self._unrescue, self.server_id)
Prem Karatfbe87a02013-04-22 21:22:06 +0530119
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200120 # Add Security group
nithya-ganesane6a36c82013-02-15 14:38:27 +0000121 resp, body = self.servers_client.add_security_group(self.server_id,
122 self.sg_name)
123 self.assertEqual(202, resp.status)
124
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200125 # Delete Security group
nithya-ganesane6a36c82013-02-15 14:38:27 +0000126 resp, body = self.servers_client.remove_security_group(self.server_id,
Prem Karatfbe87a02013-04-22 21:22:06 +0530127 self.sg_name)
nithya-ganesane6a36c82013-02-15 14:38:27 +0000128 self.assertEqual(202, resp.status)
129
nithya-ganesane6a36c82013-02-15 14:38:27 +0000130
131class ServerRescueTestXML(ServerRescueTestJSON):
132 _interface = 'xml'