blob: 848280267924b1c84e476e420d28437b079f8d21 [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
Rohan Kanade60b73092015-02-04 17:58:19 +053028 def skip_checks(cls):
29 super(ServerDiskConfigTestJSON, cls).skip_checks()
Sean Dague86bd8422013-12-20 09:56:44 -050030 if not CONF.compute_feature_enabled.disk_config:
Jay Pipesf38eaac2012-06-21 13:37:35 -040031 msg = "DiskConfig extension not enabled."
ivan-zhu1feeb382013-01-24 10:14:39 +080032 raise cls.skipException(msg)
Rohan Kanade60b73092015-02-04 17:58:19 +053033
34 @classmethod
35 def setup_clients(cls):
36 super(ServerDiskConfigTestJSON, cls).setup_clients()
Daryl Wallecke36d5002012-03-28 09:56:10 -050037 cls.client = cls.os.servers_client
Rohan Kanade60b73092015-02-04 17:58:19 +053038
39 @classmethod
40 def resource_setup(cls):
41 super(ServerDiskConfigTestJSON, cls).resource_setup()
David Kranz0fb14292015-02-11 15:55:20 -050042 server = cls.create_test_server(wait_until='ACTIVE')
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090043 cls.server_id = server['id']
44
45 def _update_server_with_disk_config(self, disk_config):
David Kranz0fb14292015-02-11 15:55:20 -050046 server = self.client.get_server(self.server_id)
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090047 if disk_config != server['OS-DCF:diskConfig']:
David Kranz0fb14292015-02-11 15:55:20 -050048 server = self.client.update_server(self.server_id,
49 disk_config=disk_config)
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090050 self.client.wait_for_server_status(server['id'], 'ACTIVE')
David Kranz0fb14292015-02-11 15:55:20 -050051 server = self.client.get_server(server['id'])
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090052 self.assertEqual(disk_config, server['OS-DCF:diskConfig'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050053
Chris Hoge7579c1a2015-02-26 14:12:15 -080054 @test.idempotent_id('bef56b09-2e8c-4883-a370-4950812f430e')
Daryl Wallecke36d5002012-03-28 09:56:10 -050055 def test_rebuild_server_with_manual_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050056 # A server should be rebuilt using the manual disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090057 self._update_server_with_disk_config(disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -050058
David Kranzae99b9a2015-02-16 13:37:01 -050059 server = self.client.rebuild(self.server_id,
60 self.image_ref_alt,
61 disk_config='MANUAL')
Daryl Wallecke36d5002012-03-28 09:56:10 -050062
Attila Fazekasf7f34f92013-08-01 17:01:44 +020063 # Wait for the server to become active
Daryl Wallecke36d5002012-03-28 09:56:10 -050064 self.client.wait_for_server_status(server['id'], 'ACTIVE')
65
Attila Fazekasf7f34f92013-08-01 17:01:44 +020066 # Verify the specified attributes are set correctly
David Kranz0fb14292015-02-11 15:55:20 -050067 server = self.client.get_server(server['id'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050068 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
69
Chris Hoge7579c1a2015-02-26 14:12:15 -080070 @test.idempotent_id('9c9fae77-4feb-402f-8450-bf1c8b609713')
Daryl Wallecke36d5002012-03-28 09:56:10 -050071 def test_rebuild_server_with_auto_disk_config(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050072 # A server should be rebuilt using the auto disk config option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090073 self._update_server_with_disk_config(disk_config='MANUAL')
Daryl Wallecke36d5002012-03-28 09:56:10 -050074
David Kranzae99b9a2015-02-16 13:37:01 -050075 server = self.client.rebuild(self.server_id,
76 self.image_ref_alt,
77 disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -050078
Attila Fazekasf7f34f92013-08-01 17:01:44 +020079 # Wait for the server to become active
Daryl Wallecke36d5002012-03-28 09:56:10 -050080 self.client.wait_for_server_status(server['id'], 'ACTIVE')
81
Attila Fazekasf7f34f92013-08-01 17:01:44 +020082 # Verify the specified attributes are set correctly
David Kranz0fb14292015-02-11 15:55:20 -050083 server = self.client.get_server(server['id'])
Daryl Wallecke36d5002012-03-28 09:56:10 -050084 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
85
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090086 def _get_alternative_flavor(self):
David Kranz0fb14292015-02-11 15:55:20 -050087 server = self.client.get_server(self.server_id)
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090088
Chang Ye Wangeb4b53e2013-12-03 00:49:17 -060089 if server['flavor']['id'] == self.flavor_ref:
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090090 return self.flavor_ref_alt
91 else:
92 return self.flavor_ref
93
Chris Hoge7579c1a2015-02-26 14:12:15 -080094 @test.idempotent_id('414e7e93-45b5-44bc-8e03-55159c6bfc97')
Sean Dague86bd8422013-12-20 09:56:44 -050095 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
96 'Resize not available.')
Daryl Wallecke36d5002012-03-28 09:56:10 -050097 def test_resize_server_from_manual_to_auto(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050098 # A server should be resized from manual to auto disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +090099 self._update_server_with_disk_config(disk_config='MANUAL')
Ken'ichi Ohmichicfc052e2013-10-23 11:50:04 +0900100
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200101 # Resize with auto option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900102 flavor_id = self._get_alternative_flavor()
103 self.client.resize(self.server_id, flavor_id, disk_config='AUTO')
104 self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
105 self.client.confirm_resize(self.server_id)
106 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500107
David Kranz0fb14292015-02-11 15:55:20 -0500108 server = self.client.get_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500109 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
110
Chris Hoge7579c1a2015-02-26 14:12:15 -0800111 @test.idempotent_id('693d16f3-556c-489a-8bac-3d0ca2490bad')
Sean Dague86bd8422013-12-20 09:56:44 -0500112 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
113 'Resize not available.')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500114 def test_resize_server_from_auto_to_manual(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500115 # A server should be resized from auto to manual disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900116 self._update_server_with_disk_config(disk_config='AUTO')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500117
Attila Fazekasf7f34f92013-08-01 17:01:44 +0200118 # Resize with manual option
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900119 flavor_id = self._get_alternative_flavor()
120 self.client.resize(self.server_id, flavor_id, disk_config='MANUAL')
121 self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
122 self.client.confirm_resize(self.server_id)
123 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500124
David Kranz0fb14292015-02-11 15:55:20 -0500125 server = self.client.get_server(self.server_id)
Daryl Wallecke36d5002012-03-28 09:56:10 -0500126 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
127
Chris Hoge7579c1a2015-02-26 14:12:15 -0800128 @test.idempotent_id('5ef18867-358d-4de9-b3c9-94d4ba35742f')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800129 def test_update_server_from_auto_to_manual(self):
130 # A server should be updated from auto to manual disk config
Ken'ichi Ohmichib1f64832013-10-29 13:29:54 +0900131 self._update_server_with_disk_config(disk_config='AUTO')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800132
133 # Update the disk_config attribute to manual
David Kranz0fb14292015-02-11 15:55:20 -0500134 server = self.client.update_server(self.server_id,
135 disk_config='MANUAL')
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800136 self.client.wait_for_server_status(server['id'], 'ACTIVE')
137
138 # Verify the disk_config attribute is set correctly
David Kranz0fb14292015-02-11 15:55:20 -0500139 server = self.client.get_server(server['id'])
ivan-zhu72d7d5b2013-10-16 17:30:58 +0800140 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])