blob: 7dd40c8a6d499021974b07e4cd030dd0dbf8d4a3 [file] [log] [blame]
Jay Pipes13b479b2012-06-11 14:52:27 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack, LLC
4# 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
18from nose.plugins.attrib import attr
19import unittest2 as unittest
20
Daryl Wallecke36d5002012-03-28 09:56:10 -050021from tempest.common.utils.data_utils import rand_name
22from tempest import exceptions
23from tempest import openstack
24import tempest.config
25from tempest.tests import utils
Daryl Wallecke36d5002012-03-28 09:56:10 -050026
27
28class TestServerDiskConfig(unittest.TestCase):
29
David Kranz1b3bf7f2012-04-12 14:39:23 -040030 resize_available = tempest.config.TempestConfig().compute.resize_available
31
Daryl Wallecke36d5002012-03-28 09:56:10 -050032 @classmethod
33 def setUpClass(cls):
34 cls.os = openstack.Manager()
35 cls.client = cls.os.servers_client
36 extensions_client = cls.os.extensions_client
37 cls.config = cls.os.config
38 cls.image_ref = cls.config.compute.image_ref
39 cls.image_ref_alt = cls.config.compute.image_ref_alt
40 cls.flavor_ref = cls.config.compute.flavor_ref
41 cls.flavor_ref_alt = cls.config.compute.flavor_ref_alt
42 cls.disk_config = extensions_client.is_enabled('DiskConfig')
43
44 @attr(type='positive')
45 @utils.skip_unless_attr('disk_config', 'Disk config extension not enabled')
46 def test_create_server_with_manual_disk_config(self):
47 """A server should be created with manual disk config"""
48 name = rand_name('server')
49 resp, server = self.client.create_server(name,
50 self.image_ref,
51 self.flavor_ref,
52 disk_config='MANUAL')
53
54 #Wait for the server to become active
55 self.client.wait_for_server_status(server['id'], 'ACTIVE')
56
57 #Verify the specified attributes are set correctly
58 resp, server = self.client.get_server(server['id'])
59 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
60
61 #Delete the server
62 resp, body = self.client.delete_server(server['id'])
63
64 @attr(type='positive')
65 @utils.skip_unless_attr('disk_config', 'Disk config extension not enabled')
66 def test_create_server_with_auto_disk_config(self):
67 """A server should be created with auto disk config"""
68 name = rand_name('server')
69 resp, server = self.client.create_server(name,
70 self.image_ref,
71 self.flavor_ref,
72 disk_config='AUTO')
73
74 #Wait for the server to become active
75 self.client.wait_for_server_status(server['id'], 'ACTIVE')
76
77 #Verify the specified attributes are set correctly
78 resp, server = self.client.get_server(server['id'])
79 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
80
81 #Delete the server
82 resp, body = self.client.delete_server(server['id'])
83
84 @attr(type='positive')
85 @utils.skip_unless_attr('disk_config', 'Disk config extension not enabled')
86 def test_rebuild_server_with_manual_disk_config(self):
87 """A server should be rebuilt using the manual disk config option"""
88 name = rand_name('server')
89 resp, server = self.client.create_server(name,
90 self.image_ref,
91 self.flavor_ref,
92 disk_config='AUTO')
93
94 #Wait for the server to become active
95 self.client.wait_for_server_status(server['id'], 'ACTIVE')
96
97 #Verify the specified attributes are set correctly
98 resp, server = self.client.get_server(server['id'])
99 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
100
101 resp, server = self.client.rebuild(server['id'],
102 self.image_ref_alt,
103 disk_config='MANUAL')
104
105 #Wait for the server to become active
106 self.client.wait_for_server_status(server['id'], 'ACTIVE')
107
108 #Verify the specified attributes are set correctly
109 resp, server = self.client.get_server(server['id'])
110 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
111
112 #Delete the server
113 resp, body = self.client.delete_server(server['id'])
114
115 @attr(type='positive')
116 @utils.skip_unless_attr('disk_config', 'Disk config extension not enabled')
117 def test_rebuild_server_with_auto_disk_config(self):
118 """A server should be rebuilt using the auto disk config option"""
119 name = rand_name('server')
120 resp, server = self.client.create_server(name,
121 self.image_ref,
122 self.flavor_ref,
123 disk_config='MANUAL')
124
125 #Wait for the server to become active
126 self.client.wait_for_server_status(server['id'], 'ACTIVE')
127
128 #Verify the specified attributes are set correctly
129 resp, server = self.client.get_server(server['id'])
130 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
131
132 resp, server = self.client.rebuild(server['id'],
133 self.image_ref_alt,
134 disk_config='AUTO')
135
136 #Wait for the server to become active
137 self.client.wait_for_server_status(server['id'], 'ACTIVE')
138
139 #Verify the specified attributes are set correctly
140 resp, server = self.client.get_server(server['id'])
141 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
142
143 #Delete the server
144 resp, body = self.client.delete_server(server['id'])
145
146 @attr(type='positive')
147 @utils.skip_unless_attr('disk_config', 'Disk config extension not enabled')
David Kranz1b3bf7f2012-04-12 14:39:23 -0400148 @unittest.skipIf(not resize_available, 'Resize not available.')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500149 def test_resize_server_from_manual_to_auto(self):
150 """A server should be resized from manual to auto disk config"""
151 name = rand_name('server')
152 resp, server = self.client.create_server(name,
153 self.image_ref,
154 self.flavor_ref,
155 disk_config='MANUAL')
156
157 #Wait for the server to become active
158 self.client.wait_for_server_status(server['id'], 'ACTIVE')
159
160 #Resize with auto option
161 self.client.resize(server['id'], self.flavor_ref_alt,
162 disk_config='AUTO')
163 self.client.wait_for_server_status(server['id'], 'VERIFY_RESIZE')
164 self.client.confirm_resize(server['id'])
165 self.client.wait_for_server_status(server['id'], 'ACTIVE')
166
167 resp, server = self.client.get_server(server['id'])
168 self.assertEqual('AUTO', server['OS-DCF:diskConfig'])
169
170 #Delete the server
171 resp, body = self.client.delete_server(server['id'])
172
173 @attr(type='positive')
174 @utils.skip_unless_attr('disk_config', 'Disk config extension not enabled')
David Kranz1b3bf7f2012-04-12 14:39:23 -0400175 @unittest.skipIf(not resize_available, 'Resize not available.')
Daryl Wallecke36d5002012-03-28 09:56:10 -0500176 def test_resize_server_from_auto_to_manual(self):
177 """A server should be resized from auto to manual disk config"""
178 name = rand_name('server')
179 resp, server = self.client.create_server(name,
180 self.image_ref,
181 self.flavor_ref,
182 disk_config='AUTO')
183
184 #Wait for the server to become active
185 self.client.wait_for_server_status(server['id'], 'ACTIVE')
186
187 #Resize with manual option
188 self.client.resize(server['id'], self.flavor_ref_alt,
189 disk_config='MANUAL')
190 self.client.wait_for_server_status(server['id'], 'VERIFY_RESIZE')
191 self.client.confirm_resize(server['id'])
192 self.client.wait_for_server_status(server['id'], 'ACTIVE')
193
194 resp, server = self.client.get_server(server['id'])
195 self.assertEqual('MANUAL', server['OS-DCF:diskConfig'])
196
197 #Delete the server
198 resp, body = self.client.delete_server(server['id'])