Test dynamic-created cinder volume

Add a test case to run a container with cinder volume dynamically
created. Assert the volume is actually created in cinder and
it is automatically removed when the container is deleted.

Depends-On: https://review.openstack.org/#/c/606613/
Change-Id: I4535da25c56d7e969b5deac7ca848790889fa661
Related-Bug: #1791469
This commit is contained in:
Hongbin Lu 2018-09-08 21:11:45 +00:00
parent 14ed11c720
commit 94392a91d2

View File

@ -21,6 +21,7 @@ import six
from tempest.lib.common.utils import data_utils
from tempest.lib.common.utils import test_utils
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from zun_tempest_plugin.tests.tempest.api import clients
from zun_tempest_plugin.tests.tempest.api.common import datagen
@ -345,6 +346,55 @@ class TestContainer(base.BaseZunTest):
self.assertEqual(200, resp.status)
self.assertTrue('hello' in encodeutils.safe_decode(body))
@decorators.idempotent_id('e49231b2-b095-40d3-9b54-33bb1b371cbe')
def test_run_container_with_cinder_volume_dynamic_created(self):
"""Tests the following:
1. Run a container with a dynamic-created volume mounted into a path
in file system.
2. Assert a volume is created in cinder with an attachment to
the container.
3. Execute a command in the container to write some data to the volume.
4. Execute a command in the container to read data from the volume.
5. Assert the data read from the volume is the same as the data
written in before.
6. Delete the container.
7. Assert the cinder volume is removed in cinder.
"""
# create a container with the volume
container_path = '/data'
container_file = '/data/testfile'
_, model = self._run_container(mounts=[{
'size': 1, 'destination': container_path}])
# assert a volume is created in cinder with 'in-use' status.
volume_id = None
volumes = self.vol_client.list_volumes(detail=True)['volumes']
for volume in volumes:
for attachment in volume['attachments']:
if attachment['server_id'] == model.uuid:
volume_id = volume['id']
break
self.assertIsNotNone(volume_id)
volume = self.vol_client.show_volume(volume_id)['volume']
self.assertEqual('in-use', volume['status'])
# write data into the volume
resp, _ = self.container_client.exec_container(
model.uuid,
command="/bin/sh -c 'echo hello > %s'" % container_file)
self.assertEqual(200, resp.status)
# read data from the volume
resp, body = self.container_client.exec_container(
model.uuid, command='cat %s' % container_file)
self.assertEqual(200, resp.status)
self.assertTrue('hello' in encodeutils.safe_decode(body))
# delete the container and assert the volume is removed.
self.container_client.delete_container(
model.uuid, params={'stop': True})
self.container_client.ensure_container_deleted(model.uuid)
self.assertRaises(lib_exc.NotFound,
self.vol_client.show_volume,
volume_id)
@decorators.idempotent_id('8a4395ff-3a91-4a35-bd71-5248afc6c465')
@utils.requires_microversion(min_microversion, '1.25')
def test_run_container_with_injected_file(self):