blob: 5e9ee5ce1de42842f0427d38c85a1f0ec6207830 [file] [log] [blame]
Jay Pipes13b479b2012-06-11 14:52:27 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
ZhiQiang Fan39f97222013-09-20 04:49:44 +08003# Copyright 2012 OpenStack Foundation
Jay Pipes13b479b2012-06-11 14:52:27 -04004# 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
ivan-zhu1feeb382013-01-24 10:14:39 +080018import testtools
Jay Pipes13b479b2012-06-11 14:52:27 -040019
Sean Dague1937d092013-05-17 16:36:38 -040020from tempest.api import compute
21from tempest.api.compute import base
Chris Yeoh9465b0b2013-02-09 22:19:15 +103022from tempest.test import attr
Daryl Wallecke36d5002012-03-28 09:56:10 -050023
24
ivan-zhuf2b00502013-10-18 10:06:52 +080025class ServerDiskConfigTestJSON(base.BaseV2ComputeTest):
Attila Fazekas19044d52013-02-16 07:35:06 +010026 _interface = 'json'
David Kranz1b3bf7f2012-04-12 14:39:23 -040027
Daryl Wallecke36d5002012-03-28 09:56:10 -050028 @classmethod
29 def setUpClass(cls):
Jay Pipesf38eaac2012-06-21 13:37:35 -040030 if not compute.DISK_CONFIG_ENABLED:
31 msg = "DiskConfig extension not enabled."
ivan-zhu1feeb382013-01-24 10:14:39 +080032 raise cls.skipException(msg)
ivan-zhua5141d92013-03-06 23:12:43 +080033 super(ServerDiskConfigTestJSON, cls).setUpClass()
Daryl Wallecke36d5002012-03-28 09:56:10 -050034 cls.client = cls.os.servers_client
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090035 resp, server = cls.create_test_server(wait_until='ACTIVE')
36 cls.server_id = server['id']
37
38 def _update_server_with_disk_config(self, disk_config):
39 resp, server = self.client.get_server(self.server_id)
40 if disk_config != server['OS-DCF:diskConfig']:
41 resp, server = self.client.update_server(self.server_id,
42 disk_config=disk_config)
43 self.assertEqual(200, resp.status)
44 self.client.wait_for_server_status(server['id'], 'ACTIVE')
45 resp, server = self.client.get_server(server['id'])
46 self.assertEqual(disk_config, server['OS-DCF:diskConfig'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050047
Giulio Fidenteba3985a2013-05-29 01:46:36 +020048 @attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -050049 def test_rebuild_server_with_manual_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050050 # A server should be rebuilt using the manual disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090051 self._update_server_with_disk_config(disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -050052
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090053 resp, server = self.client.rebuild(self.server_id,
Daryl Wallecke36d5002012-03-28 09:56:10 -050054 self.image_ref_alt,
55 disk_config='MANUAL')
56
Attila Fazekasf7f34f92013-08-01 17:01:44 +020057 # Wait for the server to become active
Daryl Wallecke36d5002012-03-28 09:56:10 -050058 self.client.wait_for_server_status(server['id'], 'ACTIVE')
59
Attila Fazekasf7f34f92013-08-01 17:01:44 +020060 # Verify the specified attributes are set correctly
Daryl Wallecke36d5002012-03-28 09:56:10 -050061 resp, server = self.client.get_server(server['id'])
62 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
63
Giulio Fidenteba3985a2013-05-29 01:46:36 +020064 @attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -050065 def test_rebuild_server_with_auto_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050066 # A server should be rebuilt using the auto disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090067 self._update_server_with_disk_config(disk_config='MANUAL')
Daryl Wallecke36d5002012-03-28 09:56:10 -050068
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090069 resp, server = self.client.rebuild(self.server_id,
Daryl Wallecke36d5002012-03-28 09:56:10 -050070 self.image_ref_alt,
71 disk_config='AUTO')
72
Attila Fazekasf7f34f92013-08-01 17:01:44 +020073 # Wait for the server to become active
Daryl Wallecke36d5002012-03-28 09:56:10 -050074 self.client.wait_for_server_status(server['id'], 'ACTIVE')
75
Attila Fazekasf7f34f92013-08-01 17:01:44 +020076 # Verify the specified attributes are set correctly
Daryl Wallecke36d5002012-03-28 09:56:10 -050077 resp, server = self.client.get_server(server['id'])
78 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
79
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090080 def _get_alternative_flavor(self):
81 resp, server = self.client.get_server(self.server_id)
82
83 if int(server['flavor']['id']) == self.flavor_ref:
84 return self.flavor_ref_alt
85 else:
86 return self.flavor_ref
87
ivan-zhu1feeb382013-01-24 10:14:39 +080088 @testtools.skipUnless(compute.RESIZE_AVAILABLE, 'Resize not available.')
Giulio Fidenteba3985a2013-05-29 01:46:36 +020089 @attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -050090 def test_resize_server_from_manual_to_auto(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050091 # A server should be resized from manual to auto disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090092 self._update_server_with_disk_config(disk_config='MANUAL')
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090093
Attila Fazekasf7f34f92013-08-01 17:01:44 +020094 # Resize with auto option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090095 flavor_id = self._get_alternative_flavor()
96 self.client.resize(self.server_id, flavor_id, disk_config='AUTO')
97 self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
98 self.client.confirm_resize(self.server_id)
99 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500100
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900101 resp, server = self.client.get_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500102 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
103
ivan-zhu1feeb382013-01-24 10:14:39 +0800104 @testtools.skipUnless(compute.RESIZE_AVAILABLE, 'Resize not available.')
Giulio Fidenteba3985a2013-05-29 01:46:36 +0200105 @attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500106 def test_resize_server_from_auto_to_manual(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500107 # A server should be resized from auto to manual disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900108 self._update_server_with_disk_config(disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500109
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200110 # Resize with manual option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900111 flavor_id = self._get_alternative_flavor()
112 self.client.resize(self.server_id, flavor_id, disk_config='MANUAL')
113 self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
114 self.client.confirm_resize(self.server_id)
115 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500116
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900117 resp, server = self.client.get_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500118 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
119
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800120 @attr(type='gate')
121 def test_update_server_from_auto_to_manual(self):
122 # A server should be updated from auto to manual disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900123 self._update_server_with_disk_config(disk_config='AUTO')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800124
125 # Update the disk_config attribute to manual
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900126 resp, server = self.client.update_server(self.server_id,
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800127 disk_config='MANUAL')
128 self.assertEqual(200, resp.status)
129 self.client.wait_for_server_status(server['id'], 'ACTIVE')
130
131 # Verify the disk_config attribute is set correctly
132 resp, server = self.client.get_server(server['id'])
133 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
ivan-zhua5141d92013-03-06 23:12:43 +0800134
135
136class ServerDiskConfigTestXML(ServerDiskConfigTestJSON):
137 _interface = 'xml'