blob: 358728e4ec86399d20b1e5a8d2a4280365bf887a [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.compute import base
Sean Dague86bd8422013-12-20 09:56:44 -050021from tempest import config
Chris Yeoh9465b0b2013-02-09 22:19:15 +103022from tempest.test import attr
Daryl Wallecke36d5002012-03-28 09:56:10 -050023
Sean Dague86bd8422013-12-20 09:56:44 -050024CONF = config.CONF
25
Daryl Wallecke36d5002012-03-28 09:56:10 -050026
ivan-zhuf2b00502013-10-18 10:06:52 +080027class ServerDiskConfigTestJSON(base.BaseV2ComputeTest):
Attila Fazekas19044d52013-02-16 07:35:06 +010028 _interface = 'json'
David Kranz1b3bf7f2012-04-12 14:39:23 -040029
Daryl Wallecke36d5002012-03-28 09:56:10 -050030 @classmethod
31 def setUpClass(cls):
Sean Dague86bd8422013-12-20 09:56:44 -050032 if not CONF.compute_feature_enabled.disk_config:
Jay Pipesf38eaac2012-06-21 13:37:35 -040033 msg = "DiskConfig extension not enabled."
ivan-zhu1feeb382013-01-24 10:14:39 +080034 raise cls.skipException(msg)
ivan-zhua5141d92013-03-06 23:12:43 +080035 super(ServerDiskConfigTestJSON, cls).setUpClass()
Daryl Wallecke36d5002012-03-28 09:56:10 -050036 cls.client = cls.os.servers_client
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090037 resp, server = cls.create_test_server(wait_until='ACTIVE')
38 cls.server_id = server['id']
39
40 def _update_server_with_disk_config(self, disk_config):
41 resp, server = self.client.get_server(self.server_id)
42 if disk_config != server['OS-DCF:diskConfig']:
43 resp, server = self.client.update_server(self.server_id,
44 disk_config=disk_config)
45 self.assertEqual(200, resp.status)
46 self.client.wait_for_server_status(server['id'], 'ACTIVE')
47 resp, server = self.client.get_server(server['id'])
48 self.assertEqual(disk_config, server['OS-DCF:diskConfig'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050049
Giulio Fidenteba3985a2013-05-29 01:46:36 +020050 @attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -050051 def test_rebuild_server_with_manual_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050052 # A server should be rebuilt using the manual disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090053 self._update_server_with_disk_config(disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -050054
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090055 resp, server = self.client.rebuild(self.server_id,
Daryl Wallecke36d5002012-03-28 09:56:10 -050056 self.image_ref_alt,
57 disk_config='MANUAL')
58
Attila Fazekasf7f34f92013-08-01 17:01:44 +020059 # Wait for the server to become active
Daryl Wallecke36d5002012-03-28 09:56:10 -050060 self.client.wait_for_server_status(server['id'], 'ACTIVE')
61
Attila Fazekasf7f34f92013-08-01 17:01:44 +020062 # Verify the specified attributes are set correctly
Daryl Wallecke36d5002012-03-28 09:56:10 -050063 resp, server = self.client.get_server(server['id'])
64 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
65
Giulio Fidenteba3985a2013-05-29 01:46:36 +020066 @attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -050067 def test_rebuild_server_with_auto_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050068 # A server should be rebuilt using the auto disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090069 self._update_server_with_disk_config(disk_config='MANUAL')
Daryl Wallecke36d5002012-03-28 09:56:10 -050070
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090071 resp, server = self.client.rebuild(self.server_id,
Daryl Wallecke36d5002012-03-28 09:56:10 -050072 self.image_ref_alt,
73 disk_config='AUTO')
74
Attila Fazekasf7f34f92013-08-01 17:01:44 +020075 # Wait for the server to become active
Daryl Wallecke36d5002012-03-28 09:56:10 -050076 self.client.wait_for_server_status(server['id'], 'ACTIVE')
77
Attila Fazekasf7f34f92013-08-01 17:01:44 +020078 # Verify the specified attributes are set correctly
Daryl Wallecke36d5002012-03-28 09:56:10 -050079 resp, server = self.client.get_server(server['id'])
80 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
81
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090082 def _get_alternative_flavor(self):
83 resp, server = self.client.get_server(self.server_id)
84
Chang Ye Wangeb4b53e2013-12-03 00:49:17 -060085 if server['flavor']['id'] == self.flavor_ref:
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090086 return self.flavor_ref_alt
87 else:
88 return self.flavor_ref
89
Sean Dague86bd8422013-12-20 09:56:44 -050090 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
91 'Resize not available.')
Giulio Fidenteba3985a2013-05-29 01:46:36 +020092 @attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -050093 def test_resize_server_from_manual_to_auto(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050094 # A server should be resized from manual to auto disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090095 self._update_server_with_disk_config(disk_config='MANUAL')
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090096
Attila Fazekasf7f34f92013-08-01 17:01:44 +020097 # Resize with auto option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090098 flavor_id = self._get_alternative_flavor()
99 self.client.resize(self.server_id, flavor_id, disk_config='AUTO')
100 self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
101 self.client.confirm_resize(self.server_id)
102 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500103
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900104 resp, server = self.client.get_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500105 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
106
Sean Dague86bd8422013-12-20 09:56:44 -0500107 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
108 'Resize not available.')
Giulio Fidenteba3985a2013-05-29 01:46:36 +0200109 @attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500110 def test_resize_server_from_auto_to_manual(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500111 # A server should be resized from auto to manual disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900112 self._update_server_with_disk_config(disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500113
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200114 # Resize with manual option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900115 flavor_id = self._get_alternative_flavor()
116 self.client.resize(self.server_id, flavor_id, disk_config='MANUAL')
117 self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
118 self.client.confirm_resize(self.server_id)
119 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500120
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900121 resp, server = self.client.get_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500122 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
123
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800124 @attr(type='gate')
125 def test_update_server_from_auto_to_manual(self):
126 # A server should be updated from auto to manual disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900127 self._update_server_with_disk_config(disk_config='AUTO')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800128
129 # Update the disk_config attribute to manual
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900130 resp, server = self.client.update_server(self.server_id,
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800131 disk_config='MANUAL')
132 self.assertEqual(200, resp.status)
133 self.client.wait_for_server_status(server['id'], 'ACTIVE')
134
135 # Verify the disk_config attribute is set correctly
136 resp, server = self.client.get_server(server['id'])
137 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
ivan-zhua5141d92013-03-06 23:12:43 +0800138
139
140class ServerDiskConfigTestXML(ServerDiskConfigTestJSON):
141 _interface = 'xml'