Merge "Check the volume metadata value is a string or not"

This commit is contained in:
Jenkins 2017-05-24 15:35:38 +00:00 committed by Gerrit Code Review
commit f64269a986
2 changed files with 23 additions and 9 deletions

View File

@ -1494,3 +1494,20 @@ class TestLogLevels(test.TestCase):
utils.set_log_levels(prefix, 'debug')
levels = utils.get_log_levels(prefix)
self.assertEqual('DEBUG', levels[prefix])
@ddt.ddt
class TestCheckMetadataProperties(test.TestCase):
@ddt.data(
{'a': {'foo': 'bar'}}, # value is a nested dict
{'a': 123}, # value is an integer
{'a': 123.4}, # value is a float
{'a': True}, # value is a bool
{'a': ('foo', 'bar')}, # value is a tuple
{'a': []}, # value is a list
{'a': None} # value is None
)
def test_metadata_value_not_string_raise(self, meta):
self.assertRaises(exception.InvalidVolumeMetadata,
utils.check_metadata_properties,
meta)

View File

@ -165,22 +165,19 @@ def check_metadata_properties(metadata=None):
metadata = {}
for k, v in metadata.items():
if len(k) == 0:
msg = _("Metadata property key blank.")
LOG.debug(msg)
raise exception.InvalidVolumeMetadata(reason=msg)
try:
check_string_length(k, "Metadata key: %s" % k, min_length=1)
check_string_length(v, "Value for metadata key: %s" % k)
except exception.InvalidInput as exc:
raise exception.InvalidVolumeMetadata(reason=exc)
# for backward compatibility
if len(k) > 255:
msg = _("Metadata property key %s greater than 255 "
"characters.") % k
LOG.debug(msg)
raise exception.InvalidVolumeMetadataSize(reason=msg)
if v is None:
msg = _("Metadata property key '%s' value is None.") % k
raise exception.InvalidVolumeMetadata(reason=msg)
if len(v) > 255:
msg = _("Metadata property key %s value greater than "
"255 characters.") % k
LOG.debug(msg)
raise exception.InvalidVolumeMetadataSize(reason=msg)