blob: f7a5bfbcb5f33a2ecb6605615732a2cd9e556003 [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipes13b479b2012-06-11 14:52:27 -04002# 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
ivan-zhu1feeb382013-01-24 10:14:39 +080016import testtools
Jay Pipes13b479b2012-06-11 14:52:27 -040017
Sean Dague1937d092013-05-17 16:36:38 -040018from tempest.api.compute import base
Sean Dague86bd8422013-12-20 09:56:44 -050019from tempest import config
Yuiko Takadae9999d62014-03-06 09:22:54 +000020from tempest import test
Daryl Wallecke36d5002012-03-28 09:56:10 -050021
Sean Dague86bd8422013-12-20 09:56:44 -050022CONF = config.CONF
23
Daryl Wallecke36d5002012-03-28 09:56:10 -050024
ivan-zhuf2b00502013-10-18 10:06:52 +080025class ServerDiskConfigTestJSON(base.BaseV2ComputeTest):
David Kranz1b3bf7f2012-04-12 14:39:23 -040026
Daryl Wallecke36d5002012-03-28 09:56:10 -050027 @classmethod
Andrea Frittoli50bb80d2014-09-15 12:34:27 +010028 def resource_setup(cls):
Sean Dague86bd8422013-12-20 09:56:44 -050029 if not CONF.compute_feature_enabled.disk_config:
Jay Pipesf38eaac2012-06-21 13:37:35 -040030 msg = "DiskConfig extension not enabled."
ivan-zhu1feeb382013-01-24 10:14:39 +080031 raise cls.skipException(msg)
Andrea Frittoli50bb80d2014-09-15 12:34:27 +010032 super(ServerDiskConfigTestJSON, cls).resource_setup()
Daryl Wallecke36d5002012-03-28 09:56:10 -050033 cls.client = cls.os.servers_client
David Kranz0fb14292015-02-11 15:55:20 -050034 server = cls.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090035 cls.server_id = server['id']
36
37 def _update_server_with_disk_config(self, disk_config):
David Kranz0fb14292015-02-11 15:55:20 -050038 server = self.client.get_server(self.server_id)
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090039 if disk_config != server['OS-DCF:diskConfig']:
David Kranz0fb14292015-02-11 15:55:20 -050040 server = self.client.update_server(self.server_id,
41 disk_config=disk_config)
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090042 self.client.wait_for_server_status(server['id'], 'ACTIVE')
David Kranz0fb14292015-02-11 15:55:20 -050043 server = self.client.get_server(server['id'])
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090044 self.assertEqual(disk_config, server['OS-DCF:diskConfig'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050045
Yuiko Takadae9999d62014-03-06 09:22:54 +000046 @test.attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -050047 def test_rebuild_server_with_manual_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050048 # A server should be rebuilt using the manual disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090049 self._update_server_with_disk_config(disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -050050
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090051 resp, server = self.client.rebuild(self.server_id,
Daryl Wallecke36d5002012-03-28 09:56:10 -050052 self.image_ref_alt,
53 disk_config='MANUAL')
54
Attila Fazekasf7f34f92013-08-01 17:01:44 +020055 # Wait for the server to become active
Daryl Wallecke36d5002012-03-28 09:56:10 -050056 self.client.wait_for_server_status(server['id'], 'ACTIVE')
57
Attila Fazekasf7f34f92013-08-01 17:01:44 +020058 # Verify the specified attributes are set correctly
David Kranz0fb14292015-02-11 15:55:20 -050059 server = self.client.get_server(server['id'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050060 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
61
Yuiko Takadae9999d62014-03-06 09:22:54 +000062 @test.attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -050063 def test_rebuild_server_with_auto_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050064 # A server should be rebuilt using the auto disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090065 self._update_server_with_disk_config(disk_config='MANUAL')
Daryl Wallecke36d5002012-03-28 09:56:10 -050066
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090067 resp, server = self.client.rebuild(self.server_id,
Daryl Wallecke36d5002012-03-28 09:56:10 -050068 self.image_ref_alt,
69 disk_config='AUTO')
70
Attila Fazekasf7f34f92013-08-01 17:01:44 +020071 # Wait for the server to become active
Daryl Wallecke36d5002012-03-28 09:56:10 -050072 self.client.wait_for_server_status(server['id'], 'ACTIVE')
73
Attila Fazekasf7f34f92013-08-01 17:01:44 +020074 # Verify the specified attributes are set correctly
David Kranz0fb14292015-02-11 15:55:20 -050075 server = self.client.get_server(server['id'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050076 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
77
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090078 def _get_alternative_flavor(self):
David Kranz0fb14292015-02-11 15:55:20 -050079 server = self.client.get_server(self.server_id)
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090080
Chang Ye Wangeb4b53e2013-12-03 00:49:17 -060081 if server['flavor']['id'] == self.flavor_ref:
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090082 return self.flavor_ref_alt
83 else:
84 return self.flavor_ref
85
Sean Dague86bd8422013-12-20 09:56:44 -050086 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
87 'Resize not available.')
Yuiko Takadae9999d62014-03-06 09:22:54 +000088 @test.attr(type='gate')
Daryl Wallecke36d5002012-03-28 09:56:10 -050089 def test_resize_server_from_manual_to_auto(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050090 # A server should be resized from manual to auto disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090091 self._update_server_with_disk_config(disk_config='MANUAL')
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +090092
Attila Fazekasf7f34f92013-08-01 17:01:44 +020093 # Resize with auto option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090094 flavor_id = self._get_alternative_flavor()
95 self.client.resize(self.server_id, flavor_id, disk_config='AUTO')
96 self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
97 self.client.confirm_resize(self.server_id)
98 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -050099
David Kranz0fb14292015-02-11 15:55:20 -0500100 server = self.client.get_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500101 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
102
Sean Dague86bd8422013-12-20 09:56:44 -0500103 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
104 'Resize not available.')
Yuiko Takadae9999d62014-03-06 09:22:54 +0000105 @test.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
David Kranz0fb14292015-02-11 15:55:20 -0500117 server = self.client.get_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500118 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
119
Yuiko Takadae9999d62014-03-06 09:22:54 +0000120 @test.attr(type='gate')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800121 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
David Kranz0fb14292015-02-11 15:55:20 -0500126 server = self.client.update_server(self.server_id,
127 disk_config='MANUAL')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800128 self.client.wait_for_server_status(server['id'], 'ACTIVE')
129
130 # Verify the disk_config attribute is set correctly
David Kranz0fb14292015-02-11 15:55:20 -0500131 server = self.client.get_server(server['id'])
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800132 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])