blob: 3e8a0d217f4fec2ea7895ff72867f89da8c33361 [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
Yuiko Takadae9999d62014-03-06 09:22:54 +000021from tempest import test
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()
Daryl Wallecke36d5002012-03-28 09:56:10 -050038 cls.client = cls.os.servers_client
Rohan Kanade60b73092015-02-04 17:58:19 +053039
40 @classmethod
41 def resource_setup(cls):
42 super(ServerDiskConfigTestJSON, cls).resource_setup()
David Kranz0fb14292015-02-11 15:55:20 -050043 server = cls.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090044 cls.server_id = server['id']
45
46 def _update_server_with_disk_config(self, disk_config):
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +000047 server = self.client.show_server(self.server_id)
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090048 if disk_config != server['OS-DCF:diskConfig']:
David Kranz0fb14292015-02-11 15:55:20 -050049 server = self.client.update_server(self.server_id,
50 disk_config=disk_config)
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000051 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +000052 server = self.client.show_server(server['id'])
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090053 self.assertEqual(disk_config, server['OS-DCF:diskConfig'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050054
Chris Hoge7579c1a2015-02-26 14:12:15 -080055 @test.idempotent_id('bef56b09-2e8c-4883-a370-4950812f430e')
Daryl Wallecke36d5002012-03-28 09:56:10 -050056 def test_rebuild_server_with_manual_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050057 # A server should be rebuilt using the manual disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090058 self._update_server_with_disk_config(disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -050059
David Kranzae99b9a2015-02-16 13:37:01 -050060 server = self.client.rebuild(self.server_id,
61 self.image_ref_alt,
62 disk_config='MANUAL')
Daryl Wallecke36d5002012-03-28 09:56:10 -050063
Attila Fazekasf7f34f92013-08-01 17:01:44 +020064 # Wait for the server to become active
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000065 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -050066
Attila Fazekasf7f34f92013-08-01 17:01:44 +020067 # Verify the specified attributes are set correctly
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +000068 server = self.client.show_server(server['id'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050069 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
70
Chris Hoge7579c1a2015-02-26 14:12:15 -080071 @test.idempotent_id('9c9fae77-4feb-402f-8450-bf1c8b609713')
Daryl Wallecke36d5002012-03-28 09:56:10 -050072 def test_rebuild_server_with_auto_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050073 # A server should be rebuilt using the auto disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090074 self._update_server_with_disk_config(disk_config='MANUAL')
Daryl Wallecke36d5002012-03-28 09:56:10 -050075
David Kranzae99b9a2015-02-16 13:37:01 -050076 server = self.client.rebuild(self.server_id,
77 self.image_ref_alt,
78 disk_config='AUTO')
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
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +000084 server = self.client.show_server(server['id'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050085 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
86
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090087 def _get_alternative_flavor(self):
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +000088 server = self.client.show_server(self.server_id)
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090089
Chang Ye Wangeb4b53e2013-12-03 00:49:17 -060090 if server['flavor']['id'] == self.flavor_ref:
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090091 return self.flavor_ref_alt
92 else:
93 return self.flavor_ref
94
Chris Hoge7579c1a2015-02-26 14:12:15 -080095 @test.idempotent_id('414e7e93-45b5-44bc-8e03-55159c6bfc97')
Sean Dague86bd8422013-12-20 09:56:44 -050096 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
97 'Resize not available.')
Daryl Wallecke36d5002012-03-28 09:56:10 -050098 def test_resize_server_from_manual_to_auto(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050099 # A server should be resized from manual to auto disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900100 self._update_server_with_disk_config(disk_config='MANUAL')
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900101
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200102 # Resize with auto option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900103 flavor_id = self._get_alternative_flavor()
104 self.client.resize(self.server_id, flavor_id, disk_config='AUTO')
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000105 waiters.wait_for_server_status(self.client, self.server_id,
106 'VERIFY_RESIZE')
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900107 self.client.confirm_resize(self.server_id)
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000108 waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500109
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +0000110 server = self.client.show_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500111 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
112
Chris Hoge7579c1a2015-02-26 14:12:15 -0800113 @test.idempotent_id('693d16f3-556c-489a-8bac-3d0ca2490bad')
Sean Dague86bd8422013-12-20 09:56:44 -0500114 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
115 'Resize not available.')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500116 def test_resize_server_from_auto_to_manual(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500117 # A server should be resized from auto to manual disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900118 self._update_server_with_disk_config(disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500119
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200120 # Resize with manual option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900121 flavor_id = self._get_alternative_flavor()
122 self.client.resize(self.server_id, flavor_id, disk_config='MANUAL')
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000123 waiters.wait_for_server_status(self.client, self.server_id,
124 'VERIFY_RESIZE')
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900125 self.client.confirm_resize(self.server_id)
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000126 waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500127
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +0000128 server = self.client.show_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500129 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
130
Chris Hoge7579c1a2015-02-26 14:12:15 -0800131 @test.idempotent_id('5ef18867-358d-4de9-b3c9-94d4ba35742f')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800132 def test_update_server_from_auto_to_manual(self):
133 # A server should be updated from auto to manual disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900134 self._update_server_with_disk_config(disk_config='AUTO')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800135
136 # Update the disk_config attribute to manual
David Kranz0fb14292015-02-11 15:55:20 -0500137 server = self.client.update_server(self.server_id,
138 disk_config='MANUAL')
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000139 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800140
141 # Verify the disk_config attribute is set correctly
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +0000142 server = self.client.show_server(server['id'])
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800143 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])