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:
Jerry Cai
2014-01-10 15:38:45 +08:00
parent 5d1b3dfd75
commit c3c49ad82f
2 changed files with 12 additions and 24 deletions

View File

@@ -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

View File

@@ -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):