Check immutable and update_allowed conflict in schema validation
This doesn't check any user input, but checks the validity of the schema itself, so better to do it during schema validation. Note, that now heat engine doesn't start in the case of invalid schema. Change-Id: Iec5ca304eae780f8c028f7eb59cc7ee8710043a1
This commit is contained in:
parent
6499a52e4c
commit
1359887fd8
@ -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."""
|
||||
@ -365,16 +376,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, validate=True)
|
||||
|
@ -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…
x
Reference in New Issue
Block a user