Merge "Check immutable and update_allowed conflict in schema validation"
This commit is contained in:
commit
6450a13a96
@ -71,6 +71,17 @@ class Schema(constr.Schema):
|
||||
# validate structural correctness of schema itself
|
||||
self.validate()
|
||||
|
||||
def validate(self, context=None):
|
||||
super(Schema, self).validate()
|
||||
# check that update_allowed and immutable
|
||||
# do not contradict each other
|
||||
if self.update_allowed and self.immutable:
|
||||
msg = _("Options %(ua)s and %(im)s "
|
||||
"cannot both be True") % {
|
||||
'ua': UPDATE_ALLOWED,
|
||||
'im': IMMUTABLE}
|
||||
raise exception.InvalidSchemaError(message=msg)
|
||||
|
||||
@classmethod
|
||||
def from_legacy(cls, schema_dict):
|
||||
"""Return a Property Schema object from a legacy schema dictionary."""
|
||||
@ -366,16 +377,6 @@ class Properties(collections.Mapping):
|
||||
raise exception.StackValidationFailed(message=msg)
|
||||
|
||||
for (key, prop) in self.props.items():
|
||||
# check that update_allowed and immutable
|
||||
# do not contradict each other
|
||||
if prop.update_allowed() and prop.immutable():
|
||||
msg = _("Property %(prop)s: %(ua)s and %(im)s "
|
||||
"cannot both be True") % {
|
||||
'prop': key,
|
||||
'ua': prop.schema.UPDATE_ALLOWED,
|
||||
'im': prop.schema.IMMUTABLE}
|
||||
raise exception.InvalidSchemaError(message=msg)
|
||||
|
||||
if with_value:
|
||||
try:
|
||||
self._get_property_value(key,
|
||||
|
@ -1899,9 +1899,8 @@ class PropertiesValidationTest(common.HeatTestCase):
|
||||
self.assertEqual({}, props)
|
||||
|
||||
def test_update_allowed_and_immutable_contradict(self):
|
||||
schema = {'foo': properties.Schema(
|
||||
properties.Schema.STRING,
|
||||
update_allowed=True,
|
||||
immutable=True)}
|
||||
props = properties.Properties(schema, {})
|
||||
self.assertRaises(exception.InvalidSchemaError, props.validate)
|
||||
self.assertRaises(exception.InvalidSchemaError,
|
||||
properties.Schema,
|
||||
properties.Schema.STRING,
|
||||
update_allowed=True,
|
||||
immutable=True)
|
||||
|
Loading…
Reference in New Issue
Block a user