diff --git a/toscaparser/parameters.py b/toscaparser/parameters.py index a58f6a01..8cded895 100644 --- a/toscaparser/parameters.py +++ b/toscaparser/parameters.py @@ -53,7 +53,7 @@ class Input(object): def validate(self, value=None): self._validate_field() self.validate_type(self.type) - if value: + if value is not None: self._validate_value(value) def _validate_field(self): diff --git a/toscaparser/tests/data/test_invalid_input_defaults.yaml b/toscaparser/tests/data/test_invalid_input_defaults.yaml new file mode 100644 index 00000000..f8f4ae74 --- /dev/null +++ b/toscaparser/tests/data/test_invalid_input_defaults.yaml @@ -0,0 +1,12 @@ +tosca_definitions_version: tosca_simple_yaml_1_0 + +description: Test template with default not matching required type. + +topology_template: + inputs: + invalid_default: + type: integer + default: two + valid_default: + type: integer + default: 2 diff --git a/toscaparser/tests/test_toscatplvalidation.py b/toscaparser/tests/test_toscatplvalidation.py index dfc80594..be5350c9 100644 --- a/toscaparser/tests/test_toscatplvalidation.py +++ b/toscaparser/tests/test_toscatplvalidation.py @@ -1385,3 +1385,11 @@ heat-translator/master/translator/tests/data/custom_types/wordpress.yaml os.path.dirname(os.path.abspath(__file__)), "data/test_credential_datatype.yaml") self.assertIsNotNone(ToscaTemplate(tosca_tpl)) + + def test_invalid_default_value(self): + tpl_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "data/test_invalid_input_defaults.yaml") + self.assertRaises(exception.ValidationError, ToscaTemplate, tpl_path) + exception.ExceptionCollector.assertExceptionMessage( + ValueError, _('"two" is not an integer.')) diff --git a/toscaparser/topology_template.py b/toscaparser/topology_template.py index f8f88754..b22a4b89 100644 --- a/toscaparser/topology_template.py +++ b/toscaparser/topology_template.py @@ -65,6 +65,10 @@ class TopologyTemplate(object): input = Input(name, attrs) if self.parsed_params and name in self.parsed_params: input.validate(self.parsed_params[name]) + else: + default = input.default + if default: + input.validate(default) inputs.append(input) return inputs