Skip to content

Commit 5ecb353

Browse files
author
Dean Troyer
committed
Add server_boot_from_volume() test
Plucked this test out of I5529f412578c50090e70d17aa0129217bf803fed in order to validate the current behaviour before applying that change. It was converted to the new JSON-style. Change-Id: Ie51b1c375c5940856ec76a5770df3c6bd18a3eba
1 parent 9ada3b5 commit 5ecb353

1 file changed

Lines changed: 115 additions & 0 deletions

File tree

openstackclient/tests/functional/compute/v2/test_server.py

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from tempest.lib.common.utils import data_utils
1717

1818
from openstackclient.tests.functional import base
19+
from openstackclient.tests.functional.volume.v2 import test_volume
1920
from tempest.lib import exceptions
2021

2122

@@ -318,6 +319,120 @@ def test_server_reboot(self):
318319
self.assertEqual("", raw_output)
319320
self.wait_for_status("ACTIVE")
320321

322+
def test_server_boot_from_volume(self):
323+
"""Test server create from volume, server delete
324+
325+
Test steps:
326+
1) Create volume from image
327+
2) Create empty volume
328+
3) Create server from new volumes
329+
4) Check for ACTIVE new server status
330+
5) Check volumes attached to server
331+
"""
332+
# server_image = self.get_image()
333+
# get volume status wait function
334+
volume_wait_for = test_volume.VolumeTests(
335+
methodName='wait_for',
336+
).wait_for
337+
338+
# get image size
339+
cmd_output = json.loads(self.openstack(
340+
'image show -f json ' +
341+
self.image_name
342+
))
343+
try:
344+
image_size = cmd_output['min_disk']
345+
if image_size < 1:
346+
image_size = 1
347+
except ValueError:
348+
image_size = 1
349+
350+
# create volume from image
351+
volume_name = data_utils.rand_name('volume', self.image_name)
352+
cmd_output = json.loads(self.openstack(
353+
'volume create -f json ' +
354+
'--image ' + self.image_name + ' ' +
355+
'--size ' + str(image_size) + ' ' +
356+
volume_name
357+
))
358+
self.assertIsNotNone(cmd_output["id"])
359+
self.addCleanup(self.openstack, 'volume delete ' + volume_name)
360+
self.assertEqual(
361+
volume_name,
362+
cmd_output['name'],
363+
)
364+
volume_wait_for("volume", volume_name, "available")
365+
366+
# create empty volume
367+
empty_volume_name = data_utils.rand_name('TestVolume')
368+
cmd_output = json.loads(self.openstack(
369+
'volume create -f json ' +
370+
'--size ' + str(image_size) + ' ' +
371+
empty_volume_name
372+
))
373+
self.assertIsNotNone(cmd_output["id"])
374+
self.addCleanup(self.openstack, 'volume delete ' + empty_volume_name)
375+
self.assertEqual(
376+
empty_volume_name,
377+
cmd_output['name'],
378+
)
379+
volume_wait_for("volume", empty_volume_name, "available")
380+
381+
# create server
382+
server_name = data_utils.rand_name('TestServer')
383+
server = json.loads(self.openstack(
384+
'server create -f json ' +
385+
'--flavor ' + self.flavor_name + ' ' +
386+
'--volume ' + volume_name + ' ' +
387+
'--block-device-mapping vdb=' + empty_volume_name + ' ' +
388+
self.network_arg + ' ' +
389+
server_name
390+
))
391+
self.assertIsNotNone(server["id"])
392+
self.addCleanup(self.openstack, 'server delete --wait ' + server_name)
393+
self.assertEqual(
394+
server_name,
395+
server['name'],
396+
)
397+
volume_wait_for("server", server_name, "ACTIVE")
398+
399+
# check volumes
400+
cmd_output = json.loads(self.openstack(
401+
'volume show -f json ' +
402+
volume_name
403+
))
404+
attachments = cmd_output['attachments']
405+
self.assertEqual(
406+
1,
407+
len(attachments),
408+
)
409+
self.assertEqual(
410+
server['id'],
411+
attachments[0]['server_id'],
412+
)
413+
self.assertEqual(
414+
"in-use",
415+
cmd_output['status'],
416+
)
417+
418+
# NOTE(dtroyer): Prior to https://review.openstack.org/#/c/407111
419+
# --block-device-mapping was ignored if --volume
420+
# present on the command line, so this volume should
421+
# not be attached.
422+
cmd_output = json.loads(self.openstack(
423+
'volume show -f json ' +
424+
empty_volume_name
425+
))
426+
attachments = cmd_output['attachments']
427+
self.assertEqual(
428+
0,
429+
len(attachments),
430+
)
431+
self.assertEqual(
432+
"available",
433+
cmd_output['status'],
434+
)
435+
321436
def wait_for_status(self, expected_status='ACTIVE', wait=900, interval=30):
322437
"""Wait until server reaches expected status."""
323438
# TODO(thowe): Add a server wait command to osc

0 commit comments

Comments
 (0)