blob: bc4806995c9eaf0175aa60e2e3dd7b797487c030 [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
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000019from tempest.common import waiters
Sean Dague86bd8422013-12-20 09:56:44 -050020from tempest import config
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080021from tempest.lib import decorators
Daryl Wallecke36d5002012-03-28 09:56:10 -050022
Sean Dague86bd8422013-12-20 09:56:44 -050023CONF = config.CONF
24
Daryl Wallecke36d5002012-03-28 09:56:10 -050025
ivan-zhuf2b00502013-10-18 10:06:52 +080026class ServerDiskConfigTestJSON(base.BaseV2ComputeTest):
David Kranz1b3bf7f2012-04-12 14:39:23 -040027
Daryl Wallecke36d5002012-03-28 09:56:10 -050028 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053029 def skip_checks(cls):
30 super(ServerDiskConfigTestJSON, cls).skip_checks()
Sean Dague86bd8422013-12-20 09:56:44 -050031 if not CONF.compute_feature_enabled.disk_config:
Jay Pipesf38eaac2012-06-21 13:37:35 -040032 msg = "DiskConfig extension not enabled."
ivan-zhu1feeb382013-01-24 10:14:39 +080033 raise cls.skipException(msg)
Rohan Kanade60b73092015-02-04 17:58:19 +053034
35 @classmethod
36 def setup_clients(cls):
37 super(ServerDiskConfigTestJSON, cls).setup_clients()
Jordan Pittier8160d312017-04-18 11:52:23 +020038 cls.client = cls.os_primary.servers_client
Rohan Kanade60b73092015-02-04 17:58:19 +053039
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -040040 def _update_server_with_disk_config(self, server_id, disk_config):
41 server = self.client.show_server(server_id)['server']
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090042 if disk_config != server['OS-DCF:diskConfig']:
ghanshyam0f825252015-08-25 16:02:50 +090043 server = self.client.update_server(
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -040044 server_id, disk_config=disk_config)['server']
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000045 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
ghanshyam0f825252015-08-25 16:02:50 +090046 server = self.client.show_server(server['id'])['server']
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090047 self.assertEqual(disk_config, server['OS-DCF:diskConfig'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050048
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080049 @decorators.idempotent_id('bef56b09-2e8c-4883-a370-4950812f430e')
Daryl Wallecke36d5002012-03-28 09:56:10 -050050 def test_rebuild_server_with_manual_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050051 # A server should be rebuilt using the manual disk config option
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -040052 server = self.create_test_server(wait_until='ACTIVE')
53 self.addCleanup(self.client.delete_server, server['id'])
54 self._update_server_with_disk_config(server['id'],
55 disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -050056
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -040057 server = self.client.rebuild_server(server['id'],
Ken'ichi Ohmichi5271b0f2015-08-10 07:53:27 +000058 self.image_ref_alt,
ghanshyam0f825252015-08-25 16:02:50 +090059 disk_config='MANUAL')['server']
Daryl Wallecke36d5002012-03-28 09:56:10 -050060
Attila Fazekasf7f34f92013-08-01 17:01:44 +020061 # Wait for the server to become active
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000062 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -050063
Attila Fazekasf7f34f92013-08-01 17:01:44 +020064 # Verify the specified attributes are set correctly
ghanshyam0f825252015-08-25 16:02:50 +090065 server = self.client.show_server(server['id'])['server']
Daryl Wallecke36d5002012-03-28 09:56:10 -050066 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
67
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080068 @decorators.idempotent_id('9c9fae77-4feb-402f-8450-bf1c8b609713')
Daryl Wallecke36d5002012-03-28 09:56:10 -050069 def test_rebuild_server_with_auto_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050070 # A server should be rebuilt using the auto disk config option
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -040071 server = self.create_test_server(wait_until='ACTIVE')
72 self.addCleanup(self.client.delete_server, server['id'])
73 self._update_server_with_disk_config(server['id'],
74 disk_config='MANUAL')
Daryl Wallecke36d5002012-03-28 09:56:10 -050075
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -040076 server = self.client.rebuild_server(server['id'],
Ken'ichi Ohmichi5271b0f2015-08-10 07:53:27 +000077 self.image_ref_alt,
ghanshyam0f825252015-08-25 16:02:50 +090078 disk_config='AUTO')['server']
Daryl Wallecke36d5002012-03-28 09:56:10 -050079
Attila Fazekasf7f34f92013-08-01 17:01:44 +020080 # Wait for the server to become active
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000081 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -050082
Attila Fazekasf7f34f92013-08-01 17:01:44 +020083 # Verify the specified attributes are set correctly
ghanshyam0f825252015-08-25 16:02:50 +090084 server = self.client.show_server(server['id'])['server']
Daryl Wallecke36d5002012-03-28 09:56:10 -050085 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
86
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080087 @decorators.idempotent_id('414e7e93-45b5-44bc-8e03-55159c6bfc97')
Sean Dague86bd8422013-12-20 09:56:44 -050088 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
89 'Resize not available.')
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
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -040092 server = self.create_test_server(wait_until='ACTIVE')
93 self.addCleanup(self.client.delete_server, server['id'])
94 self._update_server_with_disk_config(server['id'],
95 disk_config='MANUAL')
Attila Fazekasf7f34f92013-08-01 17:01:44 +020096 # Resize with auto option
zhufl3d018b02016-11-25 16:43:04 +080097 self.resize_server(server['id'], self.flavor_ref_alt,
98 disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -050099
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -0400100 server = self.client.show_server(server['id'])['server']
Daryl Wallecke36d5002012-03-28 09:56:10 -0500101 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
102
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800103 @decorators.idempotent_id('693d16f3-556c-489a-8bac-3d0ca2490bad')
Sean Dague86bd8422013-12-20 09:56:44 -0500104 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
105 'Resize not available.')
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
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -0400108 server = self.create_test_server(wait_until='ACTIVE')
109 self.addCleanup(self.client.delete_server, server['id'])
110 self._update_server_with_disk_config(server['id'],
111 disk_config='AUTO')
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200112 # Resize with manual option
zhufl3d018b02016-11-25 16:43:04 +0800113 self.resize_server(server['id'], self.flavor_ref_alt,
114 disk_config='MANUAL')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500115
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -0400116 server = self.client.show_server(server['id'])['server']
Daryl Wallecke36d5002012-03-28 09:56:10 -0500117 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
118
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800119 @decorators.idempotent_id('5ef18867-358d-4de9-b3c9-94d4ba35742f')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800120 def test_update_server_from_auto_to_manual(self):
121 # A server should be updated from auto to manual disk config
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -0400122 server = self.create_test_server(wait_until='ACTIVE')
123 self.addCleanup(self.client.delete_server, server['id'])
124 self._update_server_with_disk_config(server['id'],
125 disk_config='AUTO')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800126
127 # Update the disk_config attribute to manual
Mikhail Feoktistov7a71ff52016-06-27 10:12:27 -0400128 server = self.client.update_server(server['id'],
ghanshyam0f825252015-08-25 16:02:50 +0900129 disk_config='MANUAL')['server']
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000130 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800131
132 # Verify the disk_config attribute is set correctly
ghanshyam0f825252015-08-25 16:02:50 +0900133 server = self.client.show_server(server['id'])['server']
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800134 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])