Complete type tests Improve validation of "constraints"
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/39518ca3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/39518ca3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/39518ca3 Branch: refs/heads/ARIA-1-parser-test-suite Commit: 39518ca3a60746ee261814445611043df7c9cefc Parents: a829644 Author: Tal Liron <[email protected]> Authored: Thu Aug 31 17:27:17 2017 -0500 Committer: Tal Liron <[email protected]> Committed: Mon Sep 11 13:57:46 2017 -0500 ---------------------------------------------------------------------- aria/parser/presentation/__init__.py | 14 +- aria/parser/presentation/field_validators.py | 23 +- .../aria_extension_tosca/simple_v1_0/misc.py | 5 +- .../presentation/field_validators.py | 75 ++-- .../aria_extension_tosca/simple_v1_0/data.py | 16 +- .../simple_v1_0/types/common/__init__.py | 14 + .../types/common/test_type_interfaces.py | 439 +++++++++++++++++++ .../types/common/test_type_parameters.py | 426 ++++++++++++++++++ .../simple_v1_0/types/common/test_types.py | 155 +++++++ .../test_node_type_relationship_interfaces.py | 4 +- .../simple_v1_0/types/test_artifact_type.py | 10 +- .../simple_v1_0/types/test_data_type.py | 69 +++ .../simple_v1_0/types/test_interface_type.py | 282 ++++++++++++ .../simple_v1_0/types/test_type_interfaces.py | 438 ------------------ .../simple_v1_0/types/test_type_parameters.py | 165 ------- .../simple_v1_0/types/test_types.py | 152 ------- 16 files changed, 1479 insertions(+), 808 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/aria/parser/presentation/__init__.py ---------------------------------------------------------------------- diff --git a/aria/parser/presentation/__init__.py b/aria/parser/presentation/__init__.py index 5633e7b..aa5439c 100644 --- a/aria/parser/presentation/__init__.py +++ b/aria/parser/presentation/__init__.py @@ -69,6 +69,7 @@ Field validators .. autosummary:: :nosignatures: + aria.parser.presentation.not_negative_validator aria.parser.presentation.type_validator aria.parser.presentation.list_type_validator aria.parser.presentation.list_length_validator @@ -93,19 +94,19 @@ Utilities aria.parser.presentation.report_issue_for_circular_type_hierarchy """ -from .exceptions import PresenterException, PresenterNotFoundError +from .exceptions import (PresenterException, PresenterNotFoundError) from .context import PresentationContext from .presenter import Presenter -from .presentation import Value, PresentationBase, Presentation, AsIsPresentation -from .source import PresenterSource, DefaultPresenterSource -from .null import NULL, none_to_null, null_to_none +from .presentation import (Value, PresentationBase, Presentation, AsIsPresentation) +from .source import (PresenterSource, DefaultPresenterSource) +from .null import (NULL, none_to_null, null_to_none) from .fields import (Field, has_fields, short_form_field, allow_unknown_fields, primitive_field, primitive_list_field, primitive_dict_field, primitive_dict_unknown_fields, object_field, object_list_field, object_dict_field, object_sequenced_list_field, object_dict_unknown_fields, field_getter, field_setter, field_validator) -from .field_validators import (type_validator, list_type_validator, list_length_validator, - derived_from_validator) +from .field_validators import (not_negative_validator, type_validator, list_type_validator, + list_length_validator, derived_from_validator) from .utils import (get_locator, parse_types_dict_names, validate_primitive, validate_no_short_form, validate_no_unknown_fields, validate_known_fields, get_parent_presentation, report_issue_for_unknown_type, report_issue_for_unknown_parent_type, @@ -141,6 +142,7 @@ __all__ = ( 'field_getter', 'field_setter', 'field_validator', + 'not_negative_validator', 'type_validator', 'list_type_validator', 'list_length_validator', http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/aria/parser/presentation/field_validators.py ---------------------------------------------------------------------- diff --git a/aria/parser/presentation/field_validators.py b/aria/parser/presentation/field_validators.py index aa04913..3da01e3 100644 --- a/aria/parser/presentation/field_validators.py +++ b/aria/parser/presentation/field_validators.py @@ -14,12 +14,29 @@ # limitations under the License. +from ...utils.formatting import safe_repr from ..validation import Issue from .utils import (parse_types_dict_names, report_issue_for_unknown_type, report_issue_for_parent_is_self, report_issue_for_unknown_parent_type, report_issue_for_circular_type_hierarchy) +def not_negative_validator(field, presentation, context): + """ + Makes sure that the field is not negative. + + Can be used with the :func:`field_validator` decorator. + """ + + field.default_validate(presentation, context) + value = getattr(presentation, field.name) + if (value is not None) and (value < 0): + context.validation.report('field "{0}" is negative: {1}' + .format(field.name, safe_repr(value)), + locator=presentation._get_child_locator(field.name), + level=Issue.FIELD) + + def type_validator(type_name, *types_dict_names): """ Makes sure that the field refers to an existing type defined in the root presenter. @@ -101,8 +118,10 @@ def list_length_validator(length): values = getattr(presentation, field.name) if isinstance(values, list): if len(values) != length: - context.validation.report('field "%s" does not have exactly %d elements in "%s"' - % (field.name, length, presentation._fullname), + context.validation.report('field "{0}" does not have exactly {1:d} elements in ' + '"{2}": {3}' + .format(field.name, length, presentation._fullname, + safe_repr(values)), locator=presentation._get_child_locator(field.name), level=Issue.FIELD) http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/extensions/aria_extension_tosca/simple_v1_0/misc.py ---------------------------------------------------------------------- diff --git a/extensions/aria_extension_tosca/simple_v1_0/misc.py b/extensions/aria_extension_tosca/simple_v1_0/misc.py index 997a5b6..01c75c5 100644 --- a/extensions/aria_extension_tosca/simple_v1_0/misc.py +++ b/extensions/aria_extension_tosca/simple_v1_0/misc.py @@ -21,7 +21,7 @@ from aria.parser.presentation import (AsIsPresentation, has_fields, allow_unknow short_form_field, primitive_field, primitive_list_field, primitive_dict_unknown_fields, object_field, object_list_field, object_dict_field, field_getter, - field_validator, type_validator) + field_validator, type_validator, not_negative_validator) from .data_types import Version from .modeling.data_types import (get_data_type, get_data_type_value, get_property_constraints, @@ -258,18 +258,21 @@ class ConstraintClause(ExtensiblePresentation): Constrains a property or parameter to a value that is in the list of declared values. """ + @field_validator(not_negative_validator) @primitive_field(int) def length(self): """ Constrains the property or parameter to a value of a given length. """ + @field_validator(not_negative_validator) @primitive_field(int) def min_length(self): """ Constrains the property or parameter to a value to a minimum length. """ + @field_validator(not_negative_validator) @primitive_field(int) def max_length(self): """ http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/extensions/aria_extension_tosca/simple_v1_0/presentation/field_validators.py ---------------------------------------------------------------------- diff --git a/extensions/aria_extension_tosca/simple_v1_0/presentation/field_validators.py b/extensions/aria_extension_tosca/simple_v1_0/presentation/field_validators.py index e5853d8..9c88cfe 100644 --- a/extensions/aria_extension_tosca/simple_v1_0/presentation/field_validators.py +++ b/extensions/aria_extension_tosca/simple_v1_0/presentation/field_validators.py @@ -52,8 +52,8 @@ def copy_validator(template_type_name, templates_dict_name): else: if copy.copy is not None: context.validation.report( - '"copy" field refers to a %s that itself is a copy in "%s": %s' - % (template_type_name, presentation._fullname, safe_repr(value)), + '"copy" field refers to a {0} that itself is a copy in "{1}": {2}' + .format(template_type_name, presentation._fullname, safe_repr(value)), locator=presentation._locator, level=Issue.BETWEEN_TYPES) return validator_fn @@ -84,8 +84,8 @@ def data_type_validator(type_name='data type'): container_data_type = get_container_data_type(presentation) if (container_data_type is not None) and (container_data_type._name == value): context.validation.report( - 'type of property "%s" creates a circular value hierarchy: %s' - % (presentation._fullname, safe_repr(value)), + 'type of property "{0}" creates a circular value hierarchy: {1}' + .format(presentation._fullname, safe_repr(value)), locator=presentation._get_child_locator('type'), level=Issue.BETWEEN_TYPES) # Can be a complex data type @@ -135,14 +135,14 @@ def entry_schema_validator(field, presentation, context): if use_entry_schema: if value is None: context.validation.report( - '"entry_schema" does not have a value as required by data type "%s" in "%s"' - % (get_data_type_name(the_type), presentation._container._fullname), + '"entry_schema" does not have a value as required by data type "{0}" in "{1}"' + .format(get_data_type_name(the_type), presentation._container._fullname), locator=presentation._locator, level=Issue.BETWEEN_TYPES) else: if value is not None: context.validation.report( - '"entry_schema" has a value but it is not used by data type "%s" in "%s"' - % (get_data_type_name(the_type), presentation._container._fullname), + '"entry_schema" has a value but it is not used by data type "{0}" in "{1}"' + .format(get_data_type_name(the_type), presentation._container._fullname), locator=presentation._locator, level=Issue.BETWEEN_TYPES) @@ -201,8 +201,8 @@ def data_type_constraints_validator(field, presentation, context): if value is not None: if presentation._get_primitive_ancestor(context) is None: context.validation.report( - 'data type "%s" defines constraints but does not have a primitive ancestor' - % presentation._fullname, + 'data type "{0}" defines constraints but does not have a primitive ancestor' + .format(presentation._fullname), locator=presentation._get_child_locator(field.name), level=Issue.BETWEEN_TYPES) @@ -220,8 +220,8 @@ def data_type_properties_validator(field, presentation, context): if values is not None: if presentation._get_primitive_ancestor(context) is not None: context.validation.report( - 'data type "%s" defines properties even though it has a primitive ancestor' - % presentation._fullname, + 'data type "{0}" defines properties even though it has a primitive ancestor' + .format(presentation._fullname), locator=presentation._get_child_locator(field.name), level=Issue.BETWEEN_TYPES) @@ -272,17 +272,18 @@ def constraint_clause_in_range_validator(field, presentation, context): # Upper bound be coercible upper = coerce_value(context, presentation, the_type, None, None, upper, field.name) - # Second "in_range" value must be greater than first + # Second "in_range" value must be greater or equal than first if (lower is not None) and (upper is not None) and (lower >= upper): context.validation.report( 'upper bound of "in_range" constraint is not greater than the lower bound' - ' in "%s": %s <= %s' - % (presentation._container._fullname, safe_repr(lower), safe_repr(upper)), + ' in "{0}": {1} <= {2}' + .format(presentation._container._fullname, safe_repr(lower), + safe_repr(upper)), locator=presentation._locator, level=Issue.FIELD) else: context.validation.report( - 'constraint "%s" is not a list of exactly 2 elements in "%s"' - % (field.name, presentation._fullname), + 'constraint "{0}" is not a list of exactly 2 elements in "{1}": {2}' + .format(field.name, presentation._fullname, safe_repr(values)), locator=presentation._get_child_locator(field.name), level=Issue.FIELD) @@ -325,8 +326,8 @@ def constraint_clause_pattern_validator(field, presentation, context): re.compile(value) except re.error as e: context.validation.report( - 'constraint "%s" is not a valid regular expression in "%s"' - % (field.name, presentation._fullname), + 'constraint "{0}" is not a valid regular expression in "{1}": {2}' + .format(field.name, presentation._fullname, safe_repr(value)), locator=presentation._get_child_locator(field.name), level=Issue.FIELD, exception=e) @@ -379,21 +380,21 @@ def capability_definition_or_type_validator(field, presentation, context): if get_type_by_name(context, value, 'capability_types') is not None: if node is not None: context.validation.report( - '"%s" refers to a capability type even though "node" has a value in "%s"' - % (presentation._name, presentation._container._fullname), + '"{0}" refers to a capability type even though "node" has a value in "{1}"' + .format(presentation._name, presentation._container._fullname), locator=presentation._get_child_locator(field.name), level=Issue.BETWEEN_FIELDS) return if node_variant == 'node_template': context.validation.report( - 'requirement "%s" refers to an unknown capability definition name or capability' - ' type in "%s": %s' - % (presentation._name, presentation._container._fullname, safe_repr(value)), + 'requirement "{0}" refers to an unknown capability definition name or capability' + ' type in "{1}": {2}' + .format(presentation._name, presentation._container._fullname, safe_repr(value)), locator=presentation._get_child_locator(field.name), level=Issue.BETWEEN_TYPES) else: context.validation.report( - 'requirement "%s" refers to an unknown capability type in "%s": %s' - % (presentation._name, presentation._container._fullname, safe_repr(value)), + 'requirement "{0}" refers to an unknown capability type in "{1}": {2}' + .format(presentation._name, presentation._container._fullname, safe_repr(value)), locator=presentation._get_child_locator(field.name), level=Issue.BETWEEN_TYPES) @@ -412,9 +413,9 @@ def node_filter_validator(field, presentation, context): _, node_type_variant = presentation._get_node(context) if node_type_variant != 'node_type': context.validation.report( - 'requirement "%s" has a node filter even though "node" does not refer to a node' - ' type in "%s"' - % (presentation._fullname, presentation._container._fullname), + 'requirement "{0}" has a node filter even though "node" does not refer to a node' + ' type in "{1}"' + .format(presentation._fullname, presentation._container._fullname), locator=presentation._locator, level=Issue.BETWEEN_FIELDS) @@ -520,8 +521,8 @@ def policy_targets_validator(field, presentation, context): if not is_valid: context.validation.report( 'policy definition target does not match either a node type or a group type' - ' declared in the policy type in "%s": %s' - % (presentation._name, safe_repr(value)), + ' declared in the policy type in "{0}": {1}' + .format(presentation._name, safe_repr(value)), locator=presentation._locator, level=Issue.BETWEEN_TYPES) @@ -547,8 +548,8 @@ def node_filter_properties_validator(field, presentation, context): for name, _ in values: if name not in properties: context.validation.report( - 'node filter refers to an unknown property definition in "%s": %s' - % (node_type._name, name), + 'node filter refers to an unknown property definition in "{0}": {1}' + .format(node_type._name, name), locator=presentation._locator, level=Issue.BETWEEN_TYPES) @@ -578,11 +579,11 @@ def node_filter_capabilities_validator(field, presentation, context): if property_name not in capability_properties: context.validation.report( 'node filter refers to an unknown capability definition' - ' property in "%s": %s' - % (node_type._name, property_name), + ' property in "{0}": {1}' + .format(node_type._name, property_name), locator=presentation._locator, level=Issue.BETWEEN_TYPES) else: context.validation.report( - 'node filter refers to an unknown capability definition in "%s": %s' - % (node_type._name, name), + 'node filter refers to an unknown capability definition in "{0}": {1}' + .format(node_type._name, name), locator=presentation._locator, level=Issue.BETWEEN_TYPES) http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/data.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/data.py b/tests/extensions/aria_extension_tosca/simple_v1_0/data.py index 93e4d2e..d428668 100644 --- a/tests/extensions/aria_extension_tosca/simple_v1_0/data.py +++ b/tests/extensions/aria_extension_tosca/simple_v1_0/data.py @@ -29,6 +29,7 @@ TYPE_NAME_PLURAL = { 'group': 'groups', 'policy': 'policies' } +PRIMITIVE_TYPE_NAMES = ('string', 'integer', 'float', 'boolean') TEMPLATE_NAMES = ('node', 'group', 'policy') TEMPLATE_NAME_SECTION = { 'node': 'node_templates', @@ -49,7 +50,20 @@ PARAMETER_SECTIONS = ( ('group', 'properties'), ('policy', 'properties') ) - +PARAMETER_WITH_CONSTRAINTS_SECTIONS = ( + ('artifact', 'properties'), + ('data', 'properties'), + ('capability', 'properties'), + ('interface', 'inputs'), + ('relationship', 'properties'), + ('node', 'properties'), + ('group', 'properties'), + ('policy', 'properties') +) +CONSTRAINTS_WITH_VALUE = ('equal', 'greater_than', 'greater_or_equal', 'less_than', 'less_or_equal') +CONSTRAINTS_WITH_VALUE_LIST = ('valid_values',) +CONSTRAINTS_WITH_VALUE_RANGE = ('in_range',) +CONSTRAINTS_WITH_NON_NEGATIVE_INT = ('length', 'min_length', 'max_length') # Values http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/__init__.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/__init__.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/__init__.py new file mode 100644 index 0000000..ae1e83e --- /dev/null +++ b/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/__init__.py @@ -0,0 +1,14 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_type_interfaces.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_type_interfaces.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_type_interfaces.py new file mode 100644 index 0000000..50f0c2e --- /dev/null +++ b/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_type_interfaces.py @@ -0,0 +1,439 @@ +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +""" +Developer note: make sure that these tests mirror those in: + test_interface_type.py, + test_node_type_relationship_interfaces.py. +""" + +import itertools + +import pytest + +from ... import data + + +TYPE_NAMES = ('node', 'relationship', 'group') + + +# Syntax + [email protected]('name,value', itertools.product( + TYPE_NAMES, + data.NOT_A_DICT +)) +def test_type_interface_wrong_yaml_type(parser, name, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: {} +{{ name }}_types: + MyType: + interfaces: + my_interface: {{ value }} +""", dict(name=name, value=value)).assert_failure() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_empty(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + interfaces: + my_interface: {} # "type" is required +""", dict(name=name)).assert_failure() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_fields(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: {} +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + inputs: {} + my_operation1: {} + my_operation2: {} +""", dict(name=name)).assert_success() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_fields_unicode(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + é¡å: {} +{{ name }}_types: + é¡å: + interfaces: + æ¥å£: + type: é¡å + æè¡: + implementation: å±¥è¡ +""", dict(name=name)).assert_success() + + +# Type + [email protected](reason='fixed in ARIA-351') [email protected]('name', TYPE_NAMES) +def test_type_interface_type_override(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType1: {} + MyType2: + derived_form: MyType1 +{{ name }}_types: + MyType1: + interfaces: + my_interface: + type: MyType1 + MyType2: + derived_from: MyType1 + interfaces: + my_interface: + type: MyType2 +""", dict(name=name)).assert_success() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_type_override_bad(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType1: {} + MyType2: + derived_form: MyType1 +{{ name }}_types: + MyType1: + interfaces: + my_interface: + type: MyType2 + MyType2: + derived_from: MyType1 + interfaces: + my_interface: + type: MyType1 +""", dict(name=name)).assert_failure() + + +# Interface inputs + [email protected]('name', TYPE_NAMES) +def test_type_interface_inputs_add(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + inputs: + my_input1: + type: string +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + inputs: + my_input2: + type: string +""", dict(name=name)).assert_success() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_inputs_type_override_same(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + inputs: + my_input: + type: string +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + inputs: + my_input: + type: string +""", dict(name=name)).assert_success() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_inputs_type_override_derived(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +interface_types: + MyType: + inputs: + my_input: + type: MyType1 +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + inputs: + my_input: + type: MyType2 +""", dict(name=name)).assert_success() + + [email protected](reason='fix') [email protected]('name', TYPE_NAMES) +def test_type_interface_inputs_type_override_bad(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +interface_types: + MyType: + inputs: + my_input: + type: MyType2 +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + inputs: + my_input: + type: MyType1 +""", dict(name=name)).assert_failure() + + +# Operations + [email protected]('name', TYPE_NAMES) +def test_type_interface_operation_empty(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: {} +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: {} +""", dict(name=name)).assert_success() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_operation_fields(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: {} +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: + description: a description + implementation: {} + inputs: {} +""", dict(name=name)).assert_success() + + +# Operation implementation + [email protected]('name', TYPE_NAMES) +def test_type_interface_operation_implementation_short_form(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: {} +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: + implementation: an implementation +""", dict(name=name)).assert_success() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_operation_implementation_long_form(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: {} +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: + implementation: + primary: an implementation + dependencies: + - a dependency + - another dependency +""", dict(name=name)).assert_success() + + [email protected]('name,value', itertools.product( + TYPE_NAMES, + data.NOT_A_STRING +)) +def test_type_interface_operation_implementation_wrong_yaml_type(parser, name, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: {} +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: + implementation: + primary: {{ value }} +""", dict(name=name, value=value)).assert_failure() + + [email protected]('name,value', itertools.product( + TYPE_NAMES, + data.NOT_A_STRING +)) +def test_type_interface_operation_dependencies_wrong_yaml_type(parser, name, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: {} +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: + implementation: + primary: an implementation + dependencies: + - {{ value }} +""", dict(name=name, value=value)).assert_failure() + + +# Operation inputs + [email protected]('name', TYPE_NAMES) +def test_type_interface_operation_inputs_add(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + inputs: + my_input: + type: string +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: + inputs: + my_input: + type: string +""", dict(name=name)).assert_success() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_operation_inputs_override_same_type(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + inputs: + my_input: + type: string +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: + inputs: + my_input: + type: string +""", dict(name=name)).assert_success() + + [email protected]('name', TYPE_NAMES) +def test_type_interface_operation_inputs_override_derived_type(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +interface_types: + MyType: + inputs: + my_input: + type: MyType1 +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: + inputs: + my_input: + type: MyType2 +""", dict(name=name)).assert_success() + + [email protected](reason='fix') [email protected]('name', TYPE_NAMES) +def test_type_interface_operation_inputs_override_bad(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +interface_types: + MyType: + inputs: + my_input: + type: MyType2 +{{ name }}_types: + MyType: + interfaces: + my_interface: + type: MyType + my_operation: + inputs: + my_input: + type: MyType1 +""", dict(name=name)).assert_failure() http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_type_parameters.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_type_parameters.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_type_parameters.py new file mode 100644 index 0000000..82da830 --- /dev/null +++ b/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_type_parameters.py @@ -0,0 +1,426 @@ +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import itertools + +import pytest + +from ... import data + + +# Fields + [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) +def test_type_parameter_fields(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + my_parameter: + type: string + description: a description + default: a value + status: supported +""", dict(name=name, parameter_section=parameter_section)).assert_success() + + [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) +def test_type_parameter_fields_unicode(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + 忏: + type: string + description: æè¿° + default: å¼ + status: supported +""", dict(name=name, parameter_section=parameter_section)).assert_success() + + +# Status + [email protected]( + 'name,parameter_section,value', + ((s[0], s[1], v) + for s, v in itertools.product(data.PARAMETER_SECTIONS, data.STATUSES)) +) +def test_type_parameter_status(parser, name, parameter_section, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + my_parameter: + type: string + status: {{ value }} +""", dict(name=name, parameter_section=parameter_section, value=value)).assert_success() + + [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) +def test_type_parameter_status_bad(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + my_parameter: + type: string + status: not a status +""", dict(name=name, parameter_section=parameter_section)).assert_failure() + + +# Constraints + [email protected]( + 'name,parameter_section,value', + ((s[0], s[1], v) + for s, v in itertools.product(data.PARAMETER_WITH_CONSTRAINTS_SECTIONS, data.NOT_A_LIST)) +) +def test_type_parameter_constraints_wrong_yaml_type(parser, name, parameter_section, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + my_parameter: + type: string + constraints: {{ value }} +""", dict(name=name, parameter_section=parameter_section, value=value)).assert_failure() + + [email protected]('name,parameter_section', data.PARAMETER_WITH_CONSTRAINTS_SECTIONS) +def test_type_parameter_constraints_empty(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + my_parameter: + type: string + constraints: [] +""", dict(name=name, parameter_section=parameter_section)).assert_success() + + [email protected]( + 'name,parameter_section,constraint', + ((s[0], s[1], v) + for s, v in itertools.product( + data.PARAMETER_WITH_CONSTRAINTS_SECTIONS, + data.CONSTRAINTS_WITH_VALUE)) +) +def test_type_parameter_constraints_with_value(parser, name, parameter_section, constraint): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyDataType: + properties: + my_field: + type: string +{%- if name != 'data' %} +{{ name }}_types: +{%- endif %} + MyType: + {{ parameter_section }}: + my_parameter: + type: MyDataType + constraints: + - {{ constraint }}: {my_field: a string} +""", dict(name=name, parameter_section=parameter_section, constraint=constraint)).assert_success() + + [email protected]( + 'name,parameter_section,constraint', + ((s[0], s[1], v) + for s, v in itertools.product( + data.PARAMETER_WITH_CONSTRAINTS_SECTIONS, + data.CONSTRAINTS_WITH_VALUE_LIST)) +) +def test_type_parameter_constraints_with_value_list(parser, name, parameter_section, constraint): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyDataType: + properties: + my_field: + type: string +{%- if name != 'data' %} +{{ name }}_types: +{%- endif %} + MyType: + {{ parameter_section }}: + my_parameter: + type: MyDataType + constraints: + - {{ constraint }}: + - {my_field: string one} + - {my_field: string two} + - {my_field: string three} +""", dict(name=name, parameter_section=parameter_section, constraint=constraint)).assert_success() + + [email protected]( + 'name,parameter_section,constraint', + ((s[0], s[1], v) + for s, v in itertools.product( + data.PARAMETER_WITH_CONSTRAINTS_SECTIONS, + data.CONSTRAINTS_WITH_VALUE_RANGE)) +) +def test_type_parameter_constraints_with_value_range(parser, name, parameter_section, constraint): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyDataType: + properties: + my_field: + type: string +{%- if name != 'data' %} +{{ name }}_types: +{%- endif %} + MyType: + {{ parameter_section }}: + my_parameter: + type: MyDataType + constraints: + - {{ constraint }}: + - {my_field: string a} + - {my_field: string b} +""", dict(name=name, parameter_section=parameter_section, constraint=constraint)).assert_success() + + [email protected]( + 'name,parameter_section,constraint', + ((s[0], s[1], v) + for s, v in itertools.product( + data.PARAMETER_WITH_CONSTRAINTS_SECTIONS, + data.CONSTRAINTS_WITH_VALUE_RANGE)) +) +def test_type_parameter_constraints_with_value_range_too_many(parser, name, parameter_section, + constraint): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyDataType: + properties: + my_field: + type: string +{%- if name != 'data' %} +{{ name }}_types: +{%- endif %} + MyType: + {{ parameter_section }}: + my_parameter: + type: MyDataType + constraints: + - {{ constraint }}: + - {my_field: string a} + - {my_field: string b} + - {my_field: string c} +""", dict(name=name, parameter_section=parameter_section, constraint=constraint)).assert_failure() + + [email protected]( + 'name,parameter_section,constraint', + ((s[0], s[1], v) + for s, v in itertools.product( + data.PARAMETER_WITH_CONSTRAINTS_SECTIONS, + data.CONSTRAINTS_WITH_VALUE_RANGE)) +) +def test_type_parameter_constraints_with_value_range_invalid(parser, name, parameter_section, + constraint): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyDataType: + properties: + my_field: + type: string +{%- if name != 'data' %} +{{ name }}_types: +{%- endif %} + MyType: + {{ parameter_section }}: + my_parameter: + type: MyDataType + constraints: + - {{ constraint }}: + - {my_field: string b} + - {my_field: string a} +""", dict(name=name, parameter_section=parameter_section, constraint=constraint)).assert_failure() + + [email protected]('name,parameter_section', data.PARAMETER_WITH_CONSTRAINTS_SECTIONS) +def test_type_parameter_constraints_pattern(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + my_parameter: + type: string + constraints: + - pattern: ^pattern$ +""", dict(name=name, parameter_section=parameter_section)).assert_success() + + [email protected]('name,parameter_section', data.PARAMETER_WITH_CONSTRAINTS_SECTIONS) +def test_type_parameter_constraints_pattern_unicode(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + é¡å: + {{ parameter_section }}: + 忏: + type: string + constraints: + - pattern: ^模å¼$ +""", dict(name=name, parameter_section=parameter_section)).assert_success() + + [email protected]('name,parameter_section', data.PARAMETER_WITH_CONSTRAINTS_SECTIONS) +def test_type_parameter_constraints_pattern_bad(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + my_parameter: + type: string + constraints: + - pattern: ( +""", dict(name=name, parameter_section=parameter_section)).assert_failure() + + [email protected]( + 'name,parameter_section,constraint', + ((s[0], s[1], v) + for s, v in itertools.product( + data.PARAMETER_WITH_CONSTRAINTS_SECTIONS, + data.CONSTRAINTS_WITH_NON_NEGATIVE_INT)) +) +def test_type_parameter_constraints_with_integer(parser, name, parameter_section, constraint): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + my_parameter: + type: string + constraints: + - {{ constraint }}: 1 +""", dict(name=name, parameter_section=parameter_section, constraint=constraint)).assert_success() + + [email protected]( + 'name,parameter_section,constraint', + ((s[0], s[1], v) + for s, v in itertools.product( + data.PARAMETER_WITH_CONSTRAINTS_SECTIONS, + data.CONSTRAINTS_WITH_NON_NEGATIVE_INT)) +) +def test_type_parameter_constraints_with_integer_bad(parser, name, parameter_section, constraint): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + {{ parameter_section }}: + my_parameter: + type: string + constraints: + - {{ constraint }}: -1 +""", dict(name=name, parameter_section=parameter_section, constraint=constraint)).assert_failure() + + +# Overriding + [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) +def test_type_parameter_add(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType1: + {{ parameter_section }}: + my_parameter1: + type: string + MyType2: + derived_from: MyType1 + {{ parameter_section }}: + my_parameter2: + type: string +""", dict(name=name, parameter_section=parameter_section)).assert_success() + + [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) +def test_type_parameter_add_default(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType1: + {{ parameter_section }}: + my_parameter: + type: string + MyType2: + derived_from: MyType1 + {{ parameter_section }}: + my_parameter: + type: string + default: my value +""", dict(name=name, parameter_section=parameter_section)).assert_success() + + [email protected](reason='fixed in ARIA-351') [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) +def test_type_parameter_type_override(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +{{ name }}_types: + MyType1: + {{ parameter_section }}: + my_parameter: + type: MyType1 + MyType2: + derived_from: MyType1 + {{ parameter_section }}: + my_parameter: + type: MyType2 +""", dict(name=name, parameter_section=parameter_section)).assert_success() + + [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) +def test_type_parameter_type_override_bad(parser, name, parameter_section): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +{{ name }}_types: + MyType1: + {{ parameter_section }}: + my_parameter: + type: MyType2 + MyType2: + derived_from: MyType1 + {{ parameter_section }}: + my_parameter: + type: MyType1 +""", dict(name=name, parameter_section=parameter_section)).assert_failure() http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_types.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_types.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_types.py new file mode 100644 index 0000000..9e103ef --- /dev/null +++ b/tests/extensions/aria_extension_tosca/simple_v1_0/types/common/test_types.py @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import itertools + +import pytest + +from ... import data + + +# Syntax + [email protected]('name,value', itertools.product( + data.TYPE_NAMES, + data.NOT_A_DICT +)) +def test_type_wrong_yaml_type(parser, name, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: {{ value }} +""", dict(name=name, value=value)).assert_failure() + + [email protected]('name', data.TYPE_NAMES) +def test_type_empty(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: {} +""", dict(name=name)).assert_success() + + [email protected]('name,value', itertools.product( + data.TYPE_NAMES, + data.NOT_A_STRING +)) +def test_type_derived_from_wrong_yaml_type(parser, name, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + derived_from: {{ value }} +""", dict(name=name, value=value)).assert_failure() + + +# Derived from + [email protected]('name', data.TYPE_NAMES) +def test_type_derived_from_unknown(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + derived_from: UnknownType +""", dict(name=name)).assert_failure() + + [email protected]('name', data.TYPE_NAMES) +def test_type_derived_from_null(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + derived_from: null +""", dict(name=name)).assert_failure() + + [email protected]('name', data.TYPE_NAMES) +def test_type_derived_from_self(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + derived_from: MyType +""", dict(name=name)).assert_failure() + + [email protected]('name', data.TYPE_NAMES) +def test_type_derived_from_circular(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType1: + derived_from: MyType3 + MyType2: + derived_from: MyType1 + MyType3: + derived_from: MyType2 +""", dict(name=name)).assert_failure() + + [email protected]('name', data.TYPE_NAMES) +def test_type_derived_from_root(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType1: {} + MyType2: + derived_from: MyType1 +""", dict(name=name)).assert_success() + + +# Common fields + [email protected]('name', data.TYPE_NAMES) +def test_type_fields(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType1: {} + MyType2: + derived_from: MyType1 + version: 1.0.0 + description: a description +""", dict(name=name)).assert_success() + + [email protected]('name', data.TYPE_NAMES) +def test_type_fields_unicode(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + é¡åä¸: {} + é¡åäº: + derived_from: é¡åä¸ + version: 1.0.0.è© å調-10 + description: æè¿° +""", dict(name=name)).assert_success() + + [email protected]('name,value', itertools.product( + data.TYPE_NAMES, + data.BAD_VERSIONS +)) +def test_type_bad_version(parser, name, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +{{ name }}_types: + MyType: + version: {{ value }} +""", dict(name=name, value=value)).assert_failure() http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/node_types/test_node_type_relationship_interfaces.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/node_types/test_node_type_relationship_interfaces.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/node_types/test_node_type_relationship_interfaces.py index fb50bfa..358d78e 100644 --- a/tests/extensions/aria_extension_tosca/simple_v1_0/types/node_types/test_node_type_relationship_interfaces.py +++ b/tests/extensions/aria_extension_tosca/simple_v1_0/types/node_types/test_node_type_relationship_interfaces.py @@ -15,7 +15,9 @@ # limitations under the License. """ -Developer note: make sure that these tests mirror those in test_type_interfaces.py. +Developer note: make sure that these tests mirror those in: + test_interface_type.py, + test_type_interfaces.py. """ import pytest http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_artifact_type.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_artifact_type.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_artifact_type.py index da70b6b..1e5e1e0 100644 --- a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_artifact_type.py +++ b/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_artifact_type.py @@ -21,7 +21,7 @@ from .. import data # Syntax -def test_artifact_fields(parser): +def test_artifact_type_fields(parser): parser.parse_literal(""" tosca_definitions_version: tosca_simple_yaml_1_0 artifact_types: @@ -34,7 +34,7 @@ artifact_types: # MIME type @pytest.mark.parametrize('value', data.NOT_A_STRING) -def test_artifact_mime_type_wrong_yaml_type(parser, value): +def test_artifact_type_mime_type_wrong_yaml_type(parser, value): parser.parse_literal(""" tosca_definitions_version: tosca_simple_yaml_1_0 artifact_types: @@ -46,7 +46,7 @@ artifact_types: # File extension @pytest.mark.parametrize('value', data.NOT_A_LIST) -def test_artifact_file_ext_wrong_yaml_type(parser, value): +def test_artifact_type_file_ext_wrong_yaml_type(parser, value): parser.parse_literal(""" tosca_definitions_version: tosca_simple_yaml_1_0 artifact_types: @@ -55,7 +55,7 @@ artifact_types: """, dict(value=value)).assert_failure() -def test_artifact_file_ext_empty(parser): +def test_artifact_type_file_ext_empty(parser): parser.parse_literal(""" tosca_definitions_version: tosca_simple_yaml_1_0 artifact_types: @@ -65,7 +65,7 @@ artifact_types: @pytest.mark.parametrize('value', data.NOT_A_STRING) -def test_artifact_file_ext_element_wrong_yaml_type(parser, value): +def test_artifact_type_file_ext_element_wrong_yaml_type(parser, value): parser.parse_literal(""" tosca_definitions_version: tosca_simple_yaml_1_0 artifact_types: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_data_type.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_data_type.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_data_type.py new file mode 100644 index 0000000..539d4f8 --- /dev/null +++ b/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_data_type.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import itertools + +import pytest + +from .. import data + + +# Derived from primitive + [email protected]('name', data.PRIMITIVE_TYPE_NAMES) +def test_data_type_derived_from_primitive(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType: + derived_from: {{ name }} +""", dict(name=name)).assert_success() + + +# Constraints + [email protected]('name,value', itertools.product( + data.PRIMITIVE_TYPE_NAMES, + data.NOT_A_LIST +)) +def test_data_type_constraints_wrong_yaml_type(parser, name, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType: + derived_from: string + constraints: {{ value }} +""", dict(name=name, value=value)).assert_failure() + + [email protected]('name', data.PRIMITIVE_TYPE_NAMES) +def test_data_type_constraints_empty(parser, name): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType: + derived_from: string + constraints: [] +""", dict(name=name)).assert_success() + + +def test_data_type_constraints_not_primitive(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType: + constraints: [] # can't have constraints if not a primitive +""").assert_failure() http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_interface_type.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_interface_type.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_interface_type.py new file mode 100644 index 0000000..9d41f97 --- /dev/null +++ b/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_interface_type.py @@ -0,0 +1,282 @@ +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +""" +Developer note: make sure that these tests mirror those in: + test_type_interfaces.py, + test_node_type_relationship_interfaces.py. +""" + +import pytest + +from .. import data + + +# Fields + +def test_interface_type_fields_unicode(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + é¡å: + inputs: + è¼¸å ¥: + type: string + æè¡: + description: æè¿° + implementation: + primary: å±¥è¡ + dependencies: + - ä¾è³´ + inputs: + è¼¸å ¥: + type: string +""").assert_success() + + +# Interface inputs + +def test_interface_type_inputs_add(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType1: + inputs: + my_input1: + type: string + MyType2: + derived_from: MyType1 + inputs: + my_input2: + type: string +""").assert_success() + + +def test_interface_type_inputs_type_override_same(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType1: + inputs: + my_input: + type: string + MyType2: + derived_from: MyType1 + inputs: + my_input: + type: string +""").assert_success() + + [email protected](reason='fixed in ARIA-351') +def test_interface_type_inputs_type_override_derived(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +interface_types: + MyType1: + inputs: + my_input: + type: MyType1 + MyType2: + derived_from: MyType1 + inputs: + my_input: + type: MyType2 +""").assert_success() + + [email protected](reason='fix') +def test_interface_type_inputs_type_override_bad(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +interface_types: + MyType1: + inputs: + my_input: + type: MyType2 + MyType2: + derived_from: MyType1 + inputs: + my_input: + type: MyType1 +""").assert_failure() + + +# Operations + +def test_interface_type_operation_empty(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + my_operation: {} +""").assert_success() + + +def test_interface_type_operation_fields(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + my_operation: + description: a description + implementation: {} + inputs: {} +""").assert_success() + + +# Operation implementation + +def test_interface_type_operation_implementation_short_form(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + my_operation: + implementation: an implementation +""").assert_success() + + +def test_interface_type_operation_implementation_long_form(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + my_operation: + implementation: + primary: an implementation + dependencies: + - a dependency + - another dependency +""").assert_success() + + [email protected]('value', data.NOT_A_STRING) +def test_interface_type_operation_implementation_wrong_yaml_type(parser, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + my_operation: + implementation: + primary: {{ value }} +""", dict(value=value)).assert_failure() + + [email protected]('value', data.NOT_A_STRING) +def test_interface_type_operation_dependencies_wrong_yaml_type(parser, value): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType: + my_operation: + implementation: + primary: an implementation + dependencies: + - {{ value }} +""", dict(value=value)).assert_failure() + + +# Operation inputs + +def test_interface_type_operation_inputs_add(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType1: + my_operation: + inputs: + my_input: + type: string + MyType2: + derived_from: MyType1 + my_operation: + inputs: + my_input: + type: string +""").assert_success() + + +def test_interface_type_operation_inputs_override_same_type(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +interface_types: + MyType1: + my_operation: + inputs: + my_input: + type: string + MyType2: + derived_from: MyType1 + my_operation: + inputs: + my_input: + type: string +""").assert_success() + + +def test_interface_type_operation_inputs_override_derived_type(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +interface_types: + MyType1: + my_operation: + inputs: + my_input: + type: MyType1 + MyType2: + derived_from: MyType1 + my_operation: + inputs: + my_input: + type: MyType2 +""").assert_success() + + [email protected](reason='fix') +def test_interface_type_operation_inputs_override_bad(parser): + parser.parse_literal(""" +tosca_definitions_version: tosca_simple_yaml_1_0 +data_types: + MyType1: {} + MyType2: + derived_from: MyType1 +interface_types: + MyType1: + my_operation: + inputs: + my_input: + type: MyType2 + MyType2: + derived_from: MyType1 + my_operation: + inputs: + my_input: + type: MyType1 +""").assert_failure() http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_type_interfaces.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_type_interfaces.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_type_interfaces.py deleted file mode 100644 index c4283bd..0000000 --- a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_type_interfaces.py +++ /dev/null @@ -1,438 +0,0 @@ -# -*- coding: utf-8 -*- -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -""" -Developer note: make sure that these tests mirror those in -test_node_type_relationship_interfaces.py. -""" - -import itertools - -import pytest - -from .. import data - - -TYPE_NAMES = ('node', 'relationship', 'group') - - -# Syntax - [email protected]('name,value', itertools.product( - TYPE_NAMES, - data.NOT_A_DICT -)) -def test_type_interface_wrong_yaml_type(parser, name, value): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: {} -{{ name }}_types: - MyType: - interfaces: - my_interface: {{ value }} -""", dict(name=name, value=value)).assert_failure() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_empty(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - interfaces: - my_interface: {} # "type" is required -""", dict(name=name)).assert_failure() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_fields(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: {} -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - inputs: {} - my_operation1: {} - my_operation2: {} -""", dict(name=name)).assert_success() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_fields_unicode(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - é¡å: {} -{{ name }}_types: - é¡å: - interfaces: - æ¥å£: - type: é¡å - æè¡: - implementation: å±¥è¡ -""", dict(name=name)).assert_success() - - -# Type - [email protected](reason='fixed in ARIA-351') [email protected]('name', TYPE_NAMES) -def test_type_interface_type_override(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType1: {} - MyType2: - derived_form: MyType1 -{{ name }}_types: - MyType1: - interfaces: - my_interface: - type: MyType1 - MyType2: - derived_from: MyType1 - interfaces: - my_interface: - type: MyType2 -""", dict(name=name)).assert_success() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_type_override_bad(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType1: {} - MyType2: - derived_form: MyType1 -{{ name }}_types: - MyType1: - interfaces: - my_interface: - type: MyType2 - MyType2: - derived_from: MyType1 - interfaces: - my_interface: - type: MyType1 -""", dict(name=name)).assert_failure() - - -# Interface inputs - [email protected]('name', TYPE_NAMES) -def test_type_interface_inputs_add(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: - inputs: - my_input1: - type: string -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - inputs: - my_input2: - type: string -""", dict(name=name)).assert_success() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_inputs_type_override_same(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: - inputs: - my_input: - type: string -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - inputs: - my_input: - type: string -""", dict(name=name)).assert_success() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_inputs_type_override_derived(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -data_types: - MyType1: {} - MyType2: - derived_from: MyType1 -interface_types: - MyType: - inputs: - my_input: - type: MyType1 -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - inputs: - my_input: - type: MyType2 -""", dict(name=name)).assert_success() - - [email protected](reason='fix') [email protected]('name', TYPE_NAMES) -def test_type_interface_inputs_type_override_bad(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -data_types: - MyType1: {} - MyType2: - derived_from: MyType1 -interface_types: - MyType: - inputs: - my_input: - type: MyType2 -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - inputs: - my_input: - type: MyType1 -""", dict(name=name)).assert_failure() - - -# Operations - [email protected]('name', TYPE_NAMES) -def test_type_interface_operation_empty(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: {} -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: {} -""", dict(name=name)).assert_success() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_operation_fields(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: {} -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: - description: a description - implementation: {} - inputs: {} -""", dict(name=name)).assert_success() - - -# Operation implementation - [email protected]('name', TYPE_NAMES) -def test_type_interface_operation_implementation_short_form(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: {} -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: - implementation: an implementation -""", dict(name=name)).assert_success() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_operation_implementation_long_form(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: {} -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: - implementation: - primary: an implementation - dependencies: - - a dependency - - another dependency -""", dict(name=name)).assert_success() - - [email protected]('name,value', itertools.product( - TYPE_NAMES, - data.NOT_A_STRING -)) -def test_type_interface_operation_implementation_wrong_yaml_type(parser, name, value): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: {} -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: - implementation: - primary: {{ value }} -""", dict(name=name, value=value)).assert_failure() - - [email protected]('name,value', itertools.product( - TYPE_NAMES, - data.NOT_A_STRING -)) -def test_type_interface_operation_dependencies_wrong_yaml_type(parser, name, value): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: {} -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: - implementation: - primary: an implementation - dependencies: - - {{ value }} -""", dict(name=name, value=value)).assert_failure() - - -# Operation inputs - [email protected]('name', TYPE_NAMES) -def test_type_interface_operation_inputs_add(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: - inputs: - my_input: - type: string -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: - inputs: - my_input: - type: string -""", dict(name=name)).assert_success() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_operation_inputs_override_same_type(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -interface_types: - MyType: - inputs: - my_input: - type: string -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: - inputs: - my_input: - type: string -""", dict(name=name)).assert_success() - - [email protected]('name', TYPE_NAMES) -def test_type_interface_operation_inputs_override_derived_type(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -data_types: - MyType1: {} - MyType2: - derived_from: MyType1 -interface_types: - MyType: - inputs: - my_input: - type: MyType1 -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: - inputs: - my_input: - type: MyType2 -""", dict(name=name)).assert_success() - - [email protected](reason='fix') [email protected]('name', TYPE_NAMES) -def test_type_interface_operation_inputs_override_bad(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -data_types: - MyType1: {} - MyType2: - derived_from: MyType1 -interface_types: - MyType: - inputs: - my_input: - type: MyType2 -{{ name }}_types: - MyType: - interfaces: - my_interface: - type: MyType - my_operation: - inputs: - my_input: - type: MyType1 -""", dict(name=name)).assert_failure() http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_type_parameters.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_type_parameters.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_type_parameters.py deleted file mode 100644 index bb65bbd..0000000 --- a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_type_parameters.py +++ /dev/null @@ -1,165 +0,0 @@ -# -*- coding: utf-8 -*- -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import itertools - -import pytest - -from .. import data - - -# Fields - [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) -def test_node_type_parameter_fields(parser, name, parameter_section): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - {{ parameter_section }}: - my_parameter: - type: string - description: a description - default: a value - status: supported -""", dict(name=name, parameter_section=parameter_section)).assert_success() - - [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) -def test_node_type_parameter_fields_unicode(parser, name, parameter_section): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - {{ parameter_section }}: - 忏: - type: string - description: æè¿° - default: å¼ - status: supported -""", dict(name=name, parameter_section=parameter_section)).assert_success() - - -# Status - [email protected]( - 'name,parameter_section,value', - ((s[0], s[1], v) - for s, v in itertools.product(data.PARAMETER_SECTIONS, data.STATUSES)) -) -def test_node_type_parameter_status(parser, name, parameter_section, value): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - {{ parameter_section }}: - my_parameter: - type: string - status: {{ value }} -""", dict(name=name, parameter_section=parameter_section, value=value)).assert_success() - - [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) -def test_node_type_parameter_status_bad(parser, name, parameter_section): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - {{ parameter_section }}: - my_parameter: - type: string - status: not a status -""", dict(name=name, parameter_section=parameter_section)).assert_failure() - - -# Overriding - [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) -def test_node_type_parameter_add(parser, name, parameter_section): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType1: - {{ parameter_section }}: - my_parameter1: - type: string - MyType2: - derived_from: MyType1 - {{ parameter_section }}: - my_parameter2: - type: string -""", dict(name=name, parameter_section=parameter_section)).assert_success() - - [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) -def test_node_type_parameter_add_default(parser, name, parameter_section): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType1: - {{ parameter_section }}: - my_parameter: - type: string - MyType2: - derived_from: MyType1 - {{ parameter_section }}: - my_parameter: - type: string - default: my value -""", dict(name=name, parameter_section=parameter_section)).assert_success() - - [email protected](reason='fixed in ARIA-351') [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) -def test_node_type_parameter_type_override(parser, name, parameter_section): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -data_types: - MyType1: {} - MyType2: - derived_from: MyType1 -{{ name }}_types: - MyType1: - {{ parameter_section }}: - my_parameter: - type: MyType1 - MyType2: - derived_from: MyType1 - {{ parameter_section }}: - my_parameter: - type: MyType2 -""", dict(name=name, parameter_section=parameter_section)).assert_success() - - [email protected]('name,parameter_section', data.PARAMETER_SECTIONS) -def test_node_type_parameter_type_override_bad(parser, name, parameter_section): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -data_types: - MyType1: {} - MyType2: - derived_from: MyType1 -{{ name }}_types: - MyType1: - {{ parameter_section }}: - my_parameter: - type: MyType2 - MyType2: - derived_from: MyType1 - {{ parameter_section }}: - my_parameter: - type: MyType1 -""", dict(name=name, parameter_section=parameter_section)).assert_failure() http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/39518ca3/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_types.py ---------------------------------------------------------------------- diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_types.py b/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_types.py deleted file mode 100644 index 8e2f26f..0000000 --- a/tests/extensions/aria_extension_tosca/simple_v1_0/types/test_types.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import itertools - -import pytest - -from .. import data - - -# Syntax - [email protected]('name,value', itertools.product( - data.TYPE_NAMES, - data.NOT_A_DICT -)) -def test_type_wrong_yaml_type(parser, name, value): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: {{ value }} -""", dict(name=name, value=value)).assert_failure() - - [email protected]('name', data.TYPE_NAMES) -def test_type_empty(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: {} -""", dict(name=name)).assert_success() - - [email protected]('name,value', itertools.product( - data.TYPE_NAMES, - data.NOT_A_STRING -)) -def test_type_derived_from_wrong_yaml_type(parser, name, value): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - derived_from: {{ value }} -""", dict(name=name, value=value)).assert_failure() - - -# Derivation - [email protected]('name', data.TYPE_NAMES) -def test_type_derived_from_unknown(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - derived_from: UnknownType -""", dict(name=name)).assert_failure() - - [email protected]('name', data.TYPE_NAMES) -def test_type_derived_from_null(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - derived_from: null -""", dict(name=name)).assert_failure() - - [email protected]('name', data.TYPE_NAMES) -def test_type_derived_from_self(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - derived_from: MyType -""", dict(name=name)).assert_failure() - - [email protected]('name', data.TYPE_NAMES) -def test_type_derived_from_circular(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType1: - derived_from: MyType3 - MyType2: - derived_from: MyType1 - MyType3: - derived_from: MyType2 -""", dict(name=name)).assert_failure() - - [email protected]('name', data.TYPE_NAMES) -def test_type_derived_from_root(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - derived_from: tosca.{{ plural }}.Root -""", dict(name=name, plural=data.TYPE_NAME_PLURAL[name])).assert_success() - - -# Common fields - [email protected]('name', data.TYPE_NAMES) -def test_type_fields(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - derived_from: tosca.{{ plural }}.Root - version: 1.0.0 - description: a description -""", dict(name=name, plural=data.TYPE_NAME_PLURAL[name])).assert_success() - - [email protected]('name', data.TYPE_NAMES) -def test_type_fields_unicode(parser, name): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - é¡å: - derived_from: tosca.{{ plural }}.Root - version: 1.0.0.è© å調-10 - description: æè¿° -""", dict(name=name, plural=data.TYPE_NAME_PLURAL[name])).assert_success() - - [email protected]('name,value', itertools.product( - data.TYPE_NAMES, - data.BAD_VERSIONS -)) -def test_type_bad_version(parser, name, value): - parser.parse_literal(""" -tosca_definitions_version: tosca_simple_yaml_1_0 -{{ name }}_types: - MyType: - version: {{ value }} -""", dict(name=name, value=value)).assert_failure()
