Fix volume metadata validation of identical to request
This change is for fixing bug 1264418 tempest cases. During the creating volume process, driver can add specified data to "metadata", but some tempest cases avoid to do so. Use assertDictContainsSubset instead of assertEqual to check the metadata. Also verified this changeset works. Modified per Giulio's comment: Use testtool.matcher#ContainsAll to assert if the dict contains the sub dict. Change-Id: Ief92b60d39acbde97f620b1a9ab943a13022d839 Partial-Bug: 1264418
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
from tempest.api.compute import base
|
||||
from tempest.common.utils import data_utils
|
||||
from tempest.test import attr
|
||||
from testtools.matchers import ContainsAll
|
||||
|
||||
|
||||
class VolumesGetTestJSON(base.BaseV2ComputeTest):
|
||||
@@ -65,29 +66,10 @@ class VolumesGetTestJSON(base.BaseV2ComputeTest):
|
||||
fetched_volume['id'],
|
||||
'The fetched Volume is different '
|
||||
'from the created Volume')
|
||||
self.assertEqual(metadata,
|
||||
fetched_volume['metadata'],
|
||||
'The fetched Volume is different '
|
||||
'from the created Volume')
|
||||
|
||||
@attr(type='gate')
|
||||
def test_volume_get_metadata_none(self):
|
||||
# CREATE, GET empty metadata dict
|
||||
v_name = data_utils.rand_name('Volume-')
|
||||
# Create volume
|
||||
resp, volume = self.client.create_volume(size=1,
|
||||
display_name=v_name,
|
||||
metadata={})
|
||||
self.addCleanup(self._delete_volume, volume)
|
||||
self.assertEqual(200, resp.status)
|
||||
self.assertIn('id', volume)
|
||||
self.assertIn('displayName', volume)
|
||||
# Wait for Volume status to become ACTIVE
|
||||
self.client.wait_for_volume_status(volume['id'], 'available')
|
||||
# GET Volume
|
||||
resp, fetched_volume = self.client.get_volume(volume['id'])
|
||||
self.assertEqual(200, resp.status)
|
||||
self.assertEqual(fetched_volume['metadata'], {})
|
||||
self.assertThat(fetched_volume['metadata'].items(),
|
||||
ContainsAll(metadata.items()),
|
||||
'The fetched Volume metadata misses data '
|
||||
'from the created Volume')
|
||||
|
||||
def _delete_volume(self, volume):
|
||||
# Delete the Volume created in this method
|
||||
|
||||
@@ -21,6 +21,7 @@ from tempest.api.volume import base
|
||||
from tempest.common.utils import data_utils
|
||||
from tempest.openstack.common import log as logging
|
||||
from tempest.test import attr
|
||||
from testtools.matchers import ContainsAll
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@@ -110,7 +111,12 @@ class VolumesListTest(base.BaseVolumeV1Test):
|
||||
for key in params:
|
||||
msg = "Failed to list volumes %s by %s" % \
|
||||
('details' if with_detail else '', key)
|
||||
self.assertEqual(params[key], volume[key], msg)
|
||||
if key == 'metadata':
|
||||
self.assertThat(volume[key].items(),
|
||||
ContainsAll(params[key].items()),
|
||||
msg)
|
||||
else:
|
||||
self.assertEqual(params[key], volume[key], msg)
|
||||
|
||||
@attr(type='smoke')
|
||||
def test_volume_list(self):
|
||||
|
||||
Reference in New Issue
Block a user