blob: 2f43157f77305341d5d5ad0483d63328a4a7b58d [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
Mauro S. M. Rodrigues54110362013-02-15 13:14:04 -050016import netaddr
ivan-zhu1feeb382013-01-24 10:14:39 +080017import testtools
Jay Pipes13b479b2012-06-11 14:52:27 -040018
Sean Dague1937d092013-05-17 16:36:38 -040019from tempest.api.compute import base
Fei Long Wangd39431f2015-05-14 11:30:48 +120020from tempest.common.utils import data_utils
Masayuki Igawa209fd502014-02-17 14:46:43 +090021from tempest.common.utils.linux import remote_client
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +000022from tempest.common import waiters
Sean Dague86bd8422013-12-20 09:56:44 -050023from tempest import config
Masayuki Igawa209fd502014-02-17 14:46:43 +090024from tempest import test
Daryl Walleck6b9b2882012-04-08 21:43:39 -050025
Sean Dague86bd8422013-12-20 09:56:44 -050026CONF = config.CONF
27
Daryl Walleck6b9b2882012-04-08 21:43:39 -050028
ivan-zhuf2b00502013-10-18 10:06:52 +080029class ServersTestJSON(base.BaseV2ComputeTest):
ivan-zhua5141d92013-03-06 23:12:43 +080030 disk_config = 'AUTO'
Daryl Walleck6b9b2882012-04-08 21:43:39 -050031
Attila Fazekas19044d52013-02-16 07:35:06 +010032 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053033 def setup_credentials(cls):
Attila Fazekas423834d2014-03-14 17:33:13 +010034 cls.prepare_instance_network()
Rohan Kanade60b73092015-02-04 17:58:19 +053035 super(ServersTestJSON, cls).setup_credentials()
36
37 @classmethod
38 def setup_clients(cls):
39 super(ServersTestJSON, cls).setup_clients()
40 cls.client = cls.servers_client
John Warren94d8faf2015-09-15 12:22:24 -040041 cls.networks_client = cls.os.networks_client
John Warren3961acd2015-10-02 14:38:53 -040042 cls.subnets_client = cls.os.subnets_client
Rohan Kanade60b73092015-02-04 17:58:19 +053043
44 @classmethod
45 def resource_setup(cls):
nithya-ganesan222efd72015-01-22 12:20:27 +000046 cls.set_validation_resources()
Andrea Frittoli50bb80d2014-09-15 12:34:27 +010047 super(ServersTestJSON, cls).resource_setup()
Daryl Walleck6b9b2882012-04-08 21:43:39 -050048 cls.meta = {'hello': 'world'}
49 cls.accessIPv4 = '1.1.1.1'
Mauro S. M. Rodrigues54110362013-02-15 13:14:04 -050050 cls.accessIPv6 = '0000:0000:0000:0000:0000:babe:220.12.22.2'
zhuflc6ce5392016-08-17 14:34:37 +080051 cls.name = data_utils.rand_name(cls.__name__ + '-server')
Ghanshyam3390d9f2015-12-25 12:48:02 +090052 cls.password = data_utils.rand_password()
David Kranz0fb14292015-02-11 15:55:20 -050053 disk_config = cls.disk_config
Joseph Lanouxb3e1f872015-01-30 11:13:07 +000054 cls.server_initial = cls.create_test_server(
55 validatable=True,
56 wait_until='ACTIVE',
57 name=cls.name,
Ken'ichi Ohmichif2d436e2015-09-03 01:13:16 +000058 metadata=cls.meta,
Joseph Lanouxb3e1f872015-01-30 11:13:07 +000059 accessIPv4=cls.accessIPv4,
60 accessIPv6=cls.accessIPv6,
Ghanshyam3390d9f2015-12-25 12:48:02 +090061 disk_config=disk_config,
62 adminPass=cls.password)
ghanshyam0f825252015-08-25 16:02:50 +090063 cls.server = (cls.client.show_server(cls.server_initial['id'])
64 ['server'])
Daryl Walleck6b9b2882012-04-08 21:43:39 -050065
Matt Riedemann778b5f92015-03-11 12:44:28 -070066 def _create_net_subnet_ret_net_from_cidr(self, cidr):
67 name_net = data_utils.rand_name(self.__class__.__name__)
John Warren94d8faf2015-09-15 12:22:24 -040068 net = self.networks_client.create_network(name=name_net)
69 self.addCleanup(self.networks_client.delete_network,
Matt Riedemann778b5f92015-03-11 12:44:28 -070070 net['network']['id'])
71
John Warren3961acd2015-10-02 14:38:53 -040072 subnet = self.subnets_client.create_subnet(
Matt Riedemann778b5f92015-03-11 12:44:28 -070073 network_id=net['network']['id'],
74 cidr=cidr,
75 ip_version=4)
John Warren3961acd2015-10-02 14:38:53 -040076 self.addCleanup(self.subnets_client.delete_subnet,
Matt Riedemann778b5f92015-03-11 12:44:28 -070077 subnet['subnet']['id'])
78 return net
79
Masayuki Igawa209fd502014-02-17 14:46:43 +090080 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080081 @test.idempotent_id('5de47127-9977-400a-936f-abcfbec1218f')
Daryl Wallecked97dca2012-07-04 23:25:45 -050082 def test_verify_server_details(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050083 # Verify the specified server attributes are set correctly
Daryl Walleck6b9b2882012-04-08 21:43:39 -050084 self.assertEqual(self.accessIPv4, self.server['accessIPv4'])
Mauro S. M. Rodrigues54110362013-02-15 13:14:04 -050085 # NOTE(maurosr): See http://tools.ietf.org/html/rfc5952 (section 4)
86 # Here we compare directly with the canonicalized format.
87 self.assertEqual(self.server['accessIPv6'],
88 str(netaddr.IPAddress(self.accessIPv6)))
Daryl Walleck6b9b2882012-04-08 21:43:39 -050089 self.assertEqual(self.name, self.server['name'])
90 self.assertEqual(self.image_ref, self.server['image']['id'])
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +090091 self.assertEqual(self.flavor_ref, self.server['flavor']['id'])
Daryl Walleck6b9b2882012-04-08 21:43:39 -050092 self.assertEqual(self.meta, self.server['metadata'])
93
Masayuki Igawa209fd502014-02-17 14:46:43 +090094 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080095 @test.idempotent_id('9a438d88-10c6-4bcd-8b5b-5b6e25e1346f')
Daryl Wallecked97dca2012-07-04 23:25:45 -050096 def test_list_servers(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050097 # The created server should be in the list of all servers
David Kranzae99b9a2015-02-16 13:37:01 -050098 body = self.client.list_servers()
Daryl Wallecked97dca2012-07-04 23:25:45 -050099 servers = body['servers']
100 found = any([i for i in servers if i['id'] == self.server['id']])
101 self.assertTrue(found)
102
Chris Hoge7579c1a2015-02-26 14:12:15 -0800103 @test.idempotent_id('585e934c-448e-43c4-acbf-d06a9b899997')
Daryl Wallecked97dca2012-07-04 23:25:45 -0500104 def test_list_servers_with_detail(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500105 # The created server should be in the detailed list of all servers
Ken'ichi Ohmichicbc26a82015-07-03 08:18:04 +0000106 body = self.client.list_servers(detail=True)
Daryl Wallecked97dca2012-07-04 23:25:45 -0500107 servers = body['servers']
108 found = any([i for i in servers if i['id'] == self.server['id']])
109 self.assertTrue(found)
110
Chris Hoge7579c1a2015-02-26 14:12:15 -0800111 @test.idempotent_id('cbc0f52f-05aa-492b-bdc1-84b575ca294b')
Matthew Treinishe5cca002015-05-11 15:36:50 -0400112 @testtools.skipUnless(CONF.validation.run_validation,
Matt Riedemann6c668202014-03-24 09:17:10 -0700113 'Instance validation tests are disabled.')
Daryl Walleck6b9b2882012-04-08 21:43:39 -0500114 def test_verify_created_server_vcpus(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500115 # Verify that the number of vcpus reported by the instance matches
116 # the amount stated by the flavor
ghanshyam19973be2015-08-18 15:46:42 +0900117 flavor = self.flavors_client.show_flavor(self.flavor_ref)['flavor']
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000118 linux_client = remote_client.RemoteClient(
119 self.get_server_ip(self.server),
120 self.ssh_user,
121 self.password,
Andrea Frittoli (andreaf)2a70a612016-04-29 16:09:13 -0500122 self.validation_resources['keypair']['private_key'],
123 server=self.server,
124 servers_client=self.client)
Daryl Walleck6b9b2882012-04-08 21:43:39 -0500125 self.assertEqual(flavor['vcpus'], linux_client.get_number_of_vcpus())
126
Chris Hoge7579c1a2015-02-26 14:12:15 -0800127 @test.idempotent_id('ac1ad47f-984b-4441-9274-c9079b7a0666')
Matthew Treinishe5cca002015-05-11 15:36:50 -0400128 @testtools.skipUnless(CONF.validation.run_validation,
Matt Riedemann6c668202014-03-24 09:17:10 -0700129 'Instance validation tests are disabled.')
Daryl Walleck6b9b2882012-04-08 21:43:39 -0500130 def test_host_name_is_same_as_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500131 # Verify the instance host name is the same as the server name
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000132 linux_client = remote_client.RemoteClient(
133 self.get_server_ip(self.server),
134 self.ssh_user,
135 self.password,
Andrea Frittoli (andreaf)2a70a612016-04-29 16:09:13 -0500136 self.validation_resources['keypair']['private_key'],
137 server=self.server,
138 servers_client=self.client)
imran malikcdf20382016-06-16 00:43:57 -0700139 hostname = linux_client.get_hostname()
140 msg = ('Failed while verifying servername equals hostname. Expected '
141 'hostname "%s" but got "%s".' % (self.name, hostname))
obutenko149feaf2016-08-31 16:14:45 +0300142 self.assertEqual(self.name.lower(), hostname, msg)
Dan Smith4307f992012-08-16 09:23:20 -0700143
Chris Hoge7579c1a2015-02-26 14:12:15 -0800144 @test.idempotent_id('ed20d3fb-9d1f-4329-b160-543fbd5d9811')
zhufl70f3c772016-10-27 11:52:33 +0800145 @testtools.skipUnless(
146 test.is_scheduler_filter_enabled("ServerGroupAffinityFilter"),
147 'ServerGroupAffinityFilter is not available.')
Ken'ichi Ohmichi60a67f72014-05-20 09:19:50 +0900148 def test_create_server_with_scheduler_hint_group(self):
149 # Create a server with the scheduler hint "group".
zhuflb556d252016-10-24 12:15:56 +0800150 group_id = self.create_test_server_group()['id']
Ken'ichi Ohmichi60a67f72014-05-20 09:19:50 +0900151 hints = {'group': group_id}
Ken'ichi Ohmichif2d436e2015-09-03 01:13:16 +0000152 server = self.create_test_server(scheduler_hints=hints,
David Kranz0fb14292015-02-11 15:55:20 -0500153 wait_until='ACTIVE')
Ken'ichi Ohmichi60a67f72014-05-20 09:19:50 +0900154
155 # Check a server is in the group
Ken'ichi Ohmichicd111872015-11-16 06:01:11 +0000156 server_group = (self.server_groups_client.show_server_group(group_id)
ghanshyam2dc13452015-08-24 17:39:25 +0900157 ['server_group'])
Ken'ichi Ohmichi60a67f72014-05-20 09:19:50 +0900158 self.assertIn(server['id'], server_group['members'])
159
Chris Hoge7579c1a2015-02-26 14:12:15 -0800160 @test.idempotent_id('0578d144-ed74-43f8-8e57-ab10dbf9b3c2')
Joseph Lanoux38edc052014-09-18 14:25:46 +0000161 @testtools.skipUnless(CONF.service_available.neutron,
162 'Neutron service must be available.')
163 def test_verify_multiple_nics_order(self):
164 # Verify that the networks order given at the server creation is
165 # preserved within the server.
Matt Riedemann778b5f92015-03-11 12:44:28 -0700166 net1 = self._create_net_subnet_ret_net_from_cidr('19.80.0.0/24')
167 net2 = self._create_net_subnet_ret_net_from_cidr('19.86.0.0/24')
Joseph Lanoux38edc052014-09-18 14:25:46 +0000168
169 networks = [{'uuid': net1['network']['id']},
170 {'uuid': net2['network']['id']}]
171
David Kranz0fb14292015-02-11 15:55:20 -0500172 server_multi_nics = self.create_test_server(
Joseph Lanoux38edc052014-09-18 14:25:46 +0000173 networks=networks, wait_until='ACTIVE')
174
Joseph Lanouxe59f0ff2014-10-17 14:56:56 +0000175 # Cleanup server; this is needed in the test case because with the LIFO
176 # nature of the cleanups, if we don't delete the server first, the port
177 # will still be part of the subnet and we'll get a 409 from Neutron
178 # when trying to delete the subnet. The tear down in the base class
179 # will try to delete the server and get a 404 but it's ignored so
180 # we're OK.
181 def cleanup_server():
182 self.client.delete_server(server_multi_nics['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +0000183 waiters.wait_for_server_termination(self.client,
184 server_multi_nics['id'])
Joseph Lanouxe59f0ff2014-10-17 14:56:56 +0000185
186 self.addCleanup(cleanup_server)
187
ghanshyam0f825252015-08-25 16:02:50 +0900188 addresses = (self.client.list_addresses(server_multi_nics['id'])
189 ['addresses'])
Joseph Lanoux38edc052014-09-18 14:25:46 +0000190
venkata anilbd2d49a2015-01-16 08:07:15 +0000191 # We can't predict the ip addresses assigned to the server on networks.
192 # Sometimes the assigned addresses are ['19.80.0.2', '19.86.0.2'], at
193 # other times ['19.80.0.3', '19.86.0.3']. So we check if the first
194 # address is in first network, similarly second address is in second
195 # network.
Matt Riedemann778b5f92015-03-11 12:44:28 -0700196 addr = [addresses[net1['network']['name']][0]['addr'],
197 addresses[net2['network']['name']][0]['addr']]
venkata anilbd2d49a2015-01-16 08:07:15 +0000198 networks = [netaddr.IPNetwork('19.80.0.0/24'),
199 netaddr.IPNetwork('19.86.0.0/24')]
200 for address, network in zip(addr, networks):
201 self.assertIn(address, network)
Joseph Lanoux38edc052014-09-18 14:25:46 +0000202
Matt Riedemann778b5f92015-03-11 12:44:28 -0700203 @test.idempotent_id('1678d144-ed74-43f8-8e57-ab10dbf9b3c2')
204 @testtools.skipUnless(CONF.service_available.neutron,
205 'Neutron service must be available.')
Matt Riedemann778b5f92015-03-11 12:44:28 -0700206 def test_verify_duplicate_network_nics(self):
207 # Verify that server creation does not fail when more than one nic
208 # is created on the same network.
209 net1 = self._create_net_subnet_ret_net_from_cidr('19.80.0.0/24')
210 net2 = self._create_net_subnet_ret_net_from_cidr('19.86.0.0/24')
211
212 networks = [{'uuid': net1['network']['id']},
213 {'uuid': net2['network']['id']},
214 {'uuid': net1['network']['id']}]
215
216 server_multi_nics = self.create_test_server(
217 networks=networks, wait_until='ACTIVE')
218
219 def cleanup_server():
220 self.client.delete_server(server_multi_nics['id'])
Ken'ichi Ohmichie91a0c62015-08-13 02:09:16 +0000221 waiters.wait_for_server_termination(self.client,
222 server_multi_nics['id'])
Matt Riedemann778b5f92015-03-11 12:44:28 -0700223
224 self.addCleanup(cleanup_server)
225
ghanshyam0f825252015-08-25 16:02:50 +0900226 addresses = (self.client.list_addresses(server_multi_nics['id'])
227 ['addresses'])
Matt Riedemann778b5f92015-03-11 12:44:28 -0700228
229 addr = [addresses[net1['network']['name']][0]['addr'],
230 addresses[net2['network']['name']][0]['addr'],
231 addresses[net1['network']['name']][1]['addr']]
232 networks = [netaddr.IPNetwork('19.80.0.0/24'),
233 netaddr.IPNetwork('19.86.0.0/24'),
234 netaddr.IPNetwork('19.80.0.0/24')]
235 for address, network in zip(addr, networks):
236 self.assertIn(address, network)
237
Dan Smith4307f992012-08-16 09:23:20 -0700238
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800239class ServersWithSpecificFlavorTestJSON(base.BaseV2ComputeAdminTest):
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800240 disk_config = 'AUTO'
241
242 @classmethod
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000243 def setup_credentials(cls):
Attila Fazekas423834d2014-03-14 17:33:13 +0100244 cls.prepare_instance_network()
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000245 super(ServersWithSpecificFlavorTestJSON, cls).setup_credentials()
246
247 @classmethod
248 def setup_clients(cls):
Rohan Kanade60b73092015-02-04 17:58:19 +0530249 super(ServersWithSpecificFlavorTestJSON, cls).setup_clients()
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800250 cls.flavor_client = cls.os_adm.flavors_client
Attila Fazekas076f79f2014-03-14 17:43:46 +0100251 cls.client = cls.servers_client
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800252
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000253 @classmethod
254 def resource_setup(cls):
255 cls.set_validation_resources()
256
257 super(ServersWithSpecificFlavorTestJSON, cls).resource_setup()
258
Chris Hoge7579c1a2015-02-26 14:12:15 -0800259 @test.idempotent_id('b3c7bcfc-bb5b-4e22-b517-c7f686b802ca')
Matthew Treinishe5cca002015-05-11 15:36:50 -0400260 @testtools.skipUnless(CONF.validation.run_validation,
Matt Riedemann6c668202014-03-24 09:17:10 -0700261 'Instance validation tests are disabled.')
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800262 def test_verify_created_server_ephemeral_disk(self):
263 # Verify that the ephemeral disk is created when creating server
Evgeny Antyshev10ed6202015-12-25 10:47:33 +0000264 flavor_base = self.flavors_client.show_flavor(
265 self.flavor_ref)['flavor']
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800266
zhufl25f5ca52016-10-24 16:06:08 +0800267 def create_flavor_with_ephemeral(ephem_disk):
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800268 flavor_with_eph_disk_id = data_utils.rand_int_id(start=1000)
Evgeny Antyshev10ed6202015-12-25 10:47:33 +0000269
270 ram = flavor_base['ram']
271 vcpus = flavor_base['vcpus']
272 disk = flavor_base['disk']
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800273
Yaroslav Lobankovf9103442016-11-02 19:37:03 +0300274 if ephem_disk > 0:
275 # Create a flavor with ephemeral disk
276 flavor_name = data_utils.rand_name('eph_flavor')
277 flavor = self.flavor_client.create_flavor(
278 name=flavor_name, ram=ram, vcpus=vcpus, disk=disk,
279 id=flavor_with_eph_disk_id, ephemeral=ephem_disk)['flavor']
280 else:
281 # Create a flavor without ephemeral disk
282 flavor_name = data_utils.rand_name('no_eph_flavor')
283 flavor = self.flavor_client.create_flavor(
284 name=flavor_name, ram=ram, vcpus=vcpus, disk=disk,
285 id=flavor_with_eph_disk_id)['flavor']
Attila Fazekas076f79f2014-03-14 17:43:46 +0100286 self.addCleanup(flavor_clean_up, flavor['id'])
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800287
288 return flavor['id']
289
Attila Fazekas076f79f2014-03-14 17:43:46 +0100290 def flavor_clean_up(flavor_id):
David Kranz2fa77b22015-02-09 11:39:50 -0500291 self.flavor_client.delete_flavor(flavor_id)
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800292 self.flavor_client.wait_for_resource_deletion(flavor_id)
293
zhufl25f5ca52016-10-24 16:06:08 +0800294 flavor_with_eph_disk_id = create_flavor_with_ephemeral(ephem_disk=1)
295 flavor_no_eph_disk_id = create_flavor_with_ephemeral(ephem_disk=0)
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800296
297 admin_pass = self.image_ssh_password
298
Ken'ichi Ohmichie1dc9912015-08-27 09:06:26 +0000299 server_no_eph_disk = self.create_test_server(
300 validatable=True,
301 wait_until='ACTIVE',
302 adminPass=admin_pass,
303 flavor=flavor_no_eph_disk_id)
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000304
zhufl25f5ca52016-10-24 16:06:08 +0800305 # Get partition number of server without ephemeral disk.
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +0000306 server_no_eph_disk = self.client.show_server(
ghanshyam0f825252015-08-25 16:02:50 +0900307 server_no_eph_disk['id'])['server']
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000308 linux_client = remote_client.RemoteClient(
309 self.get_server_ip(server_no_eph_disk),
310 self.ssh_user,
311 admin_pass,
Andrea Frittoli (andreaf)2a70a612016-04-29 16:09:13 -0500312 self.validation_resources['keypair']['private_key'],
313 server=server_no_eph_disk,
314 servers_client=self.client)
Attila Fazekas076f79f2014-03-14 17:43:46 +0100315 partition_num = len(linux_client.get_partitions().split('\n'))
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800316
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000317 # Explicit server deletion necessary for Juno compatibility
318 self.client.delete_server(server_no_eph_disk['id'])
319
Ken'ichi Ohmichie1dc9912015-08-27 09:06:26 +0000320 server_with_eph_disk = self.create_test_server(
321 validatable=True,
322 wait_until='ACTIVE',
323 adminPass=admin_pass,
324 flavor=flavor_with_eph_disk_id)
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000325
Ken'ichi Ohmichi76800242015-07-03 05:12:31 +0000326 server_with_eph_disk = self.client.show_server(
ghanshyam0f825252015-08-25 16:02:50 +0900327 server_with_eph_disk['id'])['server']
Joseph Lanouxffe09dd2015-03-18 16:45:33 +0000328 linux_client = remote_client.RemoteClient(
329 self.get_server_ip(server_with_eph_disk),
330 self.ssh_user,
331 admin_pass,
Andrea Frittoli (andreaf)2a70a612016-04-29 16:09:13 -0500332 self.validation_resources['keypair']['private_key'],
333 server=server_with_eph_disk,
334 servers_client=self.client)
Attila Fazekas076f79f2014-03-14 17:43:46 +0100335 partition_num_emph = len(linux_client.get_partitions().split('\n'))
336 self.assertEqual(partition_num + 1, partition_num_emph)
Chang Bo Guoedd6ec02013-12-12 23:53:09 -0800337
338
Attila Fazekas19044d52013-02-16 07:35:06 +0100339class ServersTestManualDisk(ServersTestJSON):
340 disk_config = 'MANUAL'
341
Daryl Walleck0aea0032012-12-04 00:53:28 -0600342 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +0530343 def skip_checks(cls):
344 super(ServersTestManualDisk, cls).skip_checks()
Sean Dague86bd8422013-12-20 09:56:44 -0500345 if not CONF.compute_feature_enabled.disk_config:
Daryl Walleck0aea0032012-12-04 00:53:28 -0600346 msg = "DiskConfig extension not enabled."
ivan-zhu1feeb382013-01-24 10:14:39 +0800347 raise cls.skipException(msg)