You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ariatosca.apache.org by em...@apache.org on 2017/11/09 18:31:07 UTC
[05/11] incubator-ariatosca git commit: ARIA-1 Parser test suite
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_artifacts.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_artifacts.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_artifacts.py
new file mode 100644
index 0000000..e9ccc89
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_artifacts.py
@@ -0,0 +1,307 @@
+# -*- 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.
+
+"""
+Here we are testing not only artifacts attached to node templates, but also artifacts attached to
+node types. The reason is that artifacts attached node types use the same property assignment
+(rather than definition) syntax we see in templates.
+"""
+
+import pytest
+
+from ... import data
+from ......mechanisms.utils import matrix
+
+
+# Artifacts attached to a node template
+TEMPLATE_MACROS = """
+{% macro artifacts() %}
+node_types:
+ MyType: {}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ artifacts: {{ caller()|indent(8) }}
+{%- endmacro %}
+"""
+
+# Artifacts attached to a node type
+TYPE_MACROS = """
+{% macro artifacts() %}
+node_types:
+ MyType:
+ artifacts: {{ caller()|indent(6) }}
+{%- endmacro %}
+"""
+
+MACROS = {
+ 'template': TEMPLATE_MACROS,
+ 'type': TYPE_MACROS
+}
+
+PERMUTATIONS = (
+ 'template',
+ 'type'
+)
+
+
+
+# Artifacts section
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_DICT))
+def test_node_template_artifacts_section_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{%- call artifacts() -%}
+{{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifacts_section_syntax_empty(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{%- call artifacts() -%}
+{}
+{% endcall %}
+""").assert_success()
+
+
+# Artifact
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_DICT))
+def test_node_template_artifact_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{%- call artifacts() %}
+my_artifact: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifact_syntax_unsupported(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ unsupported: {}
+{% endcall %}
+""").assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifact_syntax_empty(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{%- call artifacts() %}
+my_artifact: {} # "type" and "file" are required
+{% endcall %}
+""").assert_failure()
+
+
+# Type
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_STRING))
+def test_node_template_artifact_type_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{%- call artifacts() %}
+my_artifact:
+ type: {{ value }}
+ file: a file
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifact_type_unknown(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{%- call artifacts() %}
+my_artifact:
+ type: UnknownType
+ file: a file
+{% endcall %}
+""").assert_failure()
+
+
+# File
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_STRING))
+def test_node_template_artifact_file_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+artifact_types:
+ MyType: {}
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ file: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifact_file(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+artifact_types:
+ MyType: {}
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ file: a file
+{% endcall %}
+""").assert_success()
+
+
+# Description
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_STRING))
+def test_node_template_artifact_description_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+artifact_types:
+ MyType: {}
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ file: a file
+ description: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifact_description(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+artifact_types:
+ MyType: {}
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ file: a file
+ description: a description
+{% endcall %}
+""").assert_success()
+
+
+# Repository
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_STRING))
+def test_node_template_artifact_repository_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+artifact_types:
+ MyType: {}
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ file: a file
+ repository: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifact_repository_unknown(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+artifact_types:
+ MyType: {}
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ file: a file
+ repository: unknown
+{% endcall %}
+""").assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifact_repository(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+repositories:
+ my_repository:
+ url: a url
+artifact_types:
+ MyType: {}
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ file: a file
+ repository: my_repository
+{% endcall %}
+""").assert_success()
+
+
+# Deploy path
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_STRING))
+def test_node_template_artifact_deploy_path_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+artifact_types:
+ MyType: {}
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ file: a file
+ deploy_path: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifact_deploy_path(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+artifact_types:
+ MyType: {}
+{%- call artifacts() %}
+my_artifact:
+ type: MyType
+ file: a file
+ deploy_path: a path
+{% endcall %}
+""").assert_success()
+
+
+# Unicode
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_artifact_unicode(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+repositories:
+ 知識庫:
+ url: 網址
+artifact_types:
+ 類型: {}
+{%- call artifacts() %}
+神器:
+ type: 類型
+ file: 文件
+ repository: 知識庫
+ deploy_path: 路徑
+{% endcall %}
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_directives.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_directives.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_directives.py
new file mode 100644
index 0000000..5ea2c13
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_directives.py
@@ -0,0 +1,77 @@
+# -*- 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 pytest
+
+from ... import data
+
+
+@pytest.mark.parametrize('value', data.NOT_A_LIST)
+def test_node_template_directives_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ directives: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('value', data.NOT_A_STRING)
+def test_node_template_directives_syntax_element_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ directives: [ {{ value }} ]
+""", dict(value=value)).assert_failure()
+
+
+def test_node_template_directives_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ directives: []
+""").assert_success()
+
+
+# Unicode
+
+def test_node_template_directives_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ 類型: {}
+topology_template:
+ node_templates:
+ 節點:
+ type: 類型
+ directives:
+ - 指示一
+ - 指示二
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_node_filter_constraints.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_node_filter_constraints.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_node_filter_constraints.py
new file mode 100644
index 0000000..fad439e
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_node_filter_constraints.py
@@ -0,0 +1,346 @@
+# -*- 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.
+
+"""
+Compare with test_type_properties.py. Note that though the constraints are the same, their syntax
+is very different, making it difficult to test all permutations together.
+"""
+
+
+import pytest
+
+from ... import data
+from ......mechanisms.utils import matrix
+
+
+# Properties for node filter in node template
+MAIN_MACROS = """
+{% macro additions() %}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+node_types:
+ MyType1: {}
+ MyType2:
+ properties:
+ data_property:
+ type: MyType
+ string_property:
+ type: string
+{%- endmacro %}
+{% macro properties() %}
+ node_filter:
+ properties: {{ caller()|indent(10) }}
+{%- endmacro %}
+"""
+
+# Capability properties for node filter in node template
+MAIN_CAPABILITY_MACROS = """
+{% macro additions() %}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+capability_types:
+ MyType:
+ properties:
+ data_property:
+ type: MyType
+ string_property:
+ type: string
+node_types:
+ MyType1: {}
+ MyType2:
+ capabilities:
+ my_capability: MyType
+{%- endmacro %}
+{% macro properties() %}
+ node_filter:
+ capabilities:
+ - my_capability:
+ properties: {{ caller()|indent(16) }}
+{%- endmacro %}
+"""
+
+# Properties for node filter in requirement
+REQUIREMENT_MACROS = """
+{% macro additions() %}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+capability_types:
+ MyType: {}
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ MyType2:
+ properties:
+ data_property:
+ type: MyType
+ string_property:
+ type: string
+ capabilities:
+ my_capability: MyType
+{%- endmacro %}
+{% macro properties() %}
+ requirements:
+ - my_requirement:
+ node: MyType2
+ node_filter:
+ properties: {{ caller()|indent(16) }}
+{%- endmacro %}
+"""
+
+# Capability properties for node filter in requirement
+REQUIREMENT_CAPABILITY_MACROS = """
+{% macro additions() %}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+capability_types:
+ MyType:
+ properties:
+ data_property:
+ type: MyType
+ string_property:
+ type: string
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ MyType2:
+ capabilities:
+ my_capability: MyType
+{%- endmacro %}
+{% macro properties() %}
+ requirements:
+ - my_requirement:
+ node: MyType2
+ node_filter:
+ capabilities:
+ - my_capability:
+ properties: {{ caller()|indent(22) }}
+{%- endmacro %}
+"""
+
+MACROS = {
+ 'main': MAIN_MACROS,
+ 'requirement': REQUIREMENT_MACROS,
+ 'main-capability': MAIN_CAPABILITY_MACROS,
+ 'requirement-capability': REQUIREMENT_CAPABILITY_MACROS
+}
+
+PERMUTATIONS = (
+ 'main', 'requirement', 'main-capability', 'requirement-capability'
+)
+
+
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_DICT_WITH_ONE_KEY))
+def test_node_template_node_filter_constraints_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- data_property: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_constraints_syntax_empty(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- data_property: {}
+{% endcall %}
+""").assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_constraints_syntax_unsupported(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- data_property: { unsupported: a string }
+{% endcall %}
+""").assert_failure()
+
+
+@pytest.mark.parametrize('macros,constraint', matrix(PERMUTATIONS, data.CONSTRAINTS_WITH_VALUE))
+def test_node_template_node_filter_constraints_with_value(parser, macros, constraint):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- data_property: { {{ constraint }}: {my_field: a string} }
+{% endcall %}
+""", dict(constraint=constraint)).assert_success()
+
+
+@pytest.mark.parametrize('macros,constraint', matrix(PERMUTATIONS,
+ data.CONSTRAINTS_WITH_VALUE_LIST))
+def test_node_template_node_filter_constraints_with_value_list(parser, macros, constraint):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- data_property: { {{ constraint }}: [ {my_field: a}, {my_field: b}, {my_field: c} ] }
+{% endcall %}
+""", dict(constraint=constraint)).assert_success()
+
+
+@pytest.mark.parametrize('macros,constraint', matrix(PERMUTATIONS,
+ data.CONSTRAINTS_WITH_VALUE_RANGE))
+def test_node_template_node_filter_constraints_with_value_range(parser, macros, constraint):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- data_property: { {{ constraint }}: [ {my_field: string a}, {my_field: string b} ] }
+{% endcall %}
+""", dict(constraint=constraint)).assert_success()
+
+
+@pytest.mark.parametrize('macros,constraint', matrix(PERMUTATIONS,
+ data.CONSTRAINTS_WITH_VALUE_RANGE))
+def test_node_template_node_filter_constraints_with_value_range_too_many(parser, macros,
+ constraint):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- data_property: { {{ constraint }}: [ {my_field: a}, {my_field: b}, {my_field: c} ] }
+{% endcall %}
+""", dict(constraint=constraint)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,constraint', matrix(PERMUTATIONS,
+ data.CONSTRAINTS_WITH_VALUE_RANGE))
+def test_node_template_node_filter_constraints_with_value_range_bad(parser, macros, constraint):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- data_property: { {{ constraint }}: [ {my_field: string b}, {my_field: string a} ] }
+{% endcall %}
+""", dict(constraint=constraint)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_constraints_pattern(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- string_property: { pattern: ^pattern$ }
+{% endcall %}
+""").assert_success()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_constraints_pattern_bad(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- string_property: { pattern: ( }
+{% endcall %}
+""").assert_failure()
+
+
+@pytest.mark.parametrize('macros,constraint', matrix(PERMUTATIONS,
+ data.CONSTRAINTS_WITH_VALUE_NON_NEGATIVE_INT))
+def test_node_template_node_filter_constraints_with_value_integer(parser, macros, constraint):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- string_property: { {{ constraint }}: 1 }
+{% endcall %}
+""", dict(constraint=constraint)).assert_success()
+
+
+@pytest.mark.parametrize('macros,constraint', matrix(PERMUTATIONS,
+ data.CONSTRAINTS_WITH_VALUE_NON_NEGATIVE_INT))
+def test_node_template_node_filter_constraints_with_value_integer_bad(parser, macros, constraint):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call properties() %}
+- string_property: { {{ constraint }}: -1 }
+{% endcall %}
+""", dict(constraint=constraint)).assert_failure()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_node_filters.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_node_filters.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_node_filters.py
new file mode 100644
index 0000000..0a54961
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_node_filters.py
@@ -0,0 +1,313 @@
+# -*- 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 pytest
+
+from ... import data
+from ......mechanisms.utils import matrix
+
+
+# Node filter in node template
+MAIN_MACROS = """
+{% macro additions() %}
+node_types:
+ MyType1: {}
+ MyType2:
+ properties:
+ my_property:
+ type: string
+{%- endmacro %}
+{% macro node_filter() %}
+ node_filter: {{ caller()|indent(8) }}
+{%- endmacro %}
+"""
+
+
+# Node filter in requirement
+REQUIREMENT_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType:
+ properties:
+ my_property:
+ type: string
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ MyType2:
+ properties:
+ my_property:
+ type: string
+ capabilities:
+ my_capability: MyType
+{%- endmacro %}
+{% macro node_filter() %}
+ requirements:
+ - my_requirement:
+ node: MyType2
+ node_filter: {{ caller()|indent(14) }}
+{%- endmacro %}
+"""
+
+MACROS = {
+ 'main': MAIN_MACROS,
+ 'requirement': REQUIREMENT_MACROS
+}
+
+PERMUTATIONS = (
+ 'main', 'requirement'
+)
+
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_DICT))
+def test_node_template_node_filter_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() -%}
+{{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_syntax_unsupported(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+unsupported: {}
+{% endcall %}
+""").assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_syntax_empty(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() -%}
+{}
+{% endcall %}
+""").assert_success()
+
+
+# Properties section
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_LIST))
+def test_node_template_node_filter_properties_section_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+properties: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_properties_section_syntax_empty(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+properties: []
+{% endcall %}
+""").assert_success()
+
+
+# Capabilities section
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_LIST))
+def test_node_template_node_filter_capabilities_section_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+capabilities: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_capabilities_section_syntax_empty(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+capabilities: []
+{% endcall %}
+""").assert_success()
+
+
+# Capability
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_DICT))
+def test_node_template_node_filter_capability_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+capabilities:
+ - my_capability: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_capability_syntax_unsupported(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+capabilities:
+ - my_capability:
+ unsupported: {}
+{% endcall %}
+""").assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_capability_syntax_empty(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+capabilities:
+ - my_capability: {}
+{% endcall %}
+""").assert_success()
+
+
+# Capability properties section
+
+@pytest.mark.parametrize('macros,value', matrix(PERMUTATIONS, data.NOT_A_LIST))
+def test_node_template_node_filter_capability_properties_section_syntax_type(parser, macros, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+capabilities:
+ - my_capability:
+ properties: {{ value }}
+{% endcall %}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros', PERMUTATIONS)
+def test_node_template_node_filter_capability_properties_section_syntax_empty(parser, macros):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+{%- call node_filter() %}
+capabilities:
+ - my_capability:
+ properties: []
+{% endcall %}
+""").assert_success()
+
+
+# Unicode
+
+def test_node_template_node_filter_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ 類型: {}
+node_types:
+ 類型一:
+ requirements:
+ - 需求:
+ capability: 類型
+ 類型二:
+ properties:
+ 屬性:
+ type: string
+ capabilities:
+ 能力: 類型
+topology_template:
+ node_templates:
+ 模板:
+ type: 類型一
+ node_filter:
+ properties:
+ - 屬性: { equal: 值 }
+ capabilities:
+ - my_capability:
+ properties:
+ - 屬性: { equal: 值 }
+ requirements:
+ - 需求:
+ node: 類型二
+ node_filter:
+ properties:
+ - 屬性: { equal: 值 }
+ capabilities:
+ - 能力:
+ properties:
+ - 屬性: { equal: 值 }
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_requirements.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_requirements.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_requirements.py
new file mode 100644
index 0000000..fdf6f16
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/test_node_template_requirements.py
@@ -0,0 +1,853 @@
+# -*- 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 pytest
+
+from ... import data
+
+
+# Section
+
+@pytest.mark.parametrize('value', data.NOT_A_LIST)
+def test_node_template_requirements_section_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_node_template_requirements_section_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements: []
+""").assert_success()
+
+
+# Requirement
+
+@pytest.mark.parametrize('value', data.NOT_A_DICT_OR_STRING)
+def test_node_template_requirement_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_node_template_requirement_syntax_unsupported(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ unsupported: {}
+""").assert_failure()
+
+
+def test_node_template_requirement_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement: {}
+""").assert_success()
+
+
+# Capability
+
+def test_node_template_requirement_capability_unknown(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: unknown # neither a type nor a name
+""").assert_failure()
+
+
+# Capability type
+
+def test_node_template_requirement_capability_type_same(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+""").assert_success()
+
+
+def test_node_template_requirement_capability_type_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType:
+ requirements:
+ - my_requirement: MyType1
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType2
+""").assert_success()
+
+
+def test_node_template_requirement_capability_type_not_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1:
+ derived_from: MyType2
+ MyType2: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement: MyType1
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType2
+""").assert_failure()
+
+
+def test_node_template_requirement_capability_type_short_form(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement: MyType
+""").assert_success()
+
+
+# Capability definition name
+
+def test_node_template_requirement_capability_name(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement: MyType
+ MyType2:
+ capabilities:
+ my_capability: MyType
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: my_node2
+ capability: my_capability
+ my_node2:
+ type: MyType2
+""").assert_success()
+
+
+def test_node_template_requirement_capability_name_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement: MyType1
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: my_node2
+ capability: my_capability
+ my_node2:
+ type: MyType2
+""").assert_success()
+
+
+def test_node_template_requirement_capability_name_not_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2: {}
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement: MyType1
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: my_node2
+ capability: my_capability
+ my_node2:
+ type: MyType2
+""").assert_failure()
+
+
+# Node
+
+def test_node_template_requirement_node_unknown(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ node: unknown
+""").assert_failure()
+
+
+# Node type
+
+def test_node_template_requirement_node_type_undefined(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement: MyType1
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: MyType2
+""").assert_success()
+
+
+def test_node_template_requirement_node_type_same(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement:
+ capability: MyType1
+ node: MyType2
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: MyType2
+""").assert_success()
+
+
+def test_node_template_requirement_node_type_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement:
+ capability: MyType1
+ node: MyType2
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+ MyType3:
+ derived_from: MyType2
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: MyType3
+""").assert_success()
+
+
+def test_node_template_requirement_node_type_not_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement:
+ capability: MyType1
+ node: MyType2
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+ MyType3: {}
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: MyType3
+""").assert_failure()
+
+
+# Node template
+
+def test_node_template_requirement_node_template_undefined(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement: MyType1
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: my_node2
+ my_node2:
+ type: MyType2
+""").assert_success()
+
+
+def test_node_template_requirement_node_template_same(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement:
+ capability: MyType1
+ node: MyType2
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: my_node2
+ my_node2:
+ type: MyType2
+""").assert_success()
+
+
+def test_node_template_requirement_node_template_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement:
+ capability: MyType1
+ node: MyType2
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+ MyType3:
+ derived_from: MyType2
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: my_node2
+ my_node2:
+ type: MyType3
+""").assert_success()
+
+
+def test_node_template_requirement_node_template_not_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2: {}
+node_types:
+ MyType1:
+ requirements:
+ - my_requirement:
+ capability: MyType1
+ node: MyType2
+ MyType2:
+ capabilities:
+ my_capability: MyType2
+ MyType3: {}
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType1
+ requirements:
+ - my_requirement:
+ node: my_node2
+ my_node2:
+ type: MyType3
+""").assert_failure()
+
+
+# Relationship
+
+def test_node_template_requirement_relationship_syntax_unsupported(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+ unsupported: {}
+""").assert_failure()
+
+
+def test_node_template_requirement_relationship_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: {}
+""").assert_success()
+
+
+def test_node_template_requirement_relationship_unknown(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: unknown
+""").assert_failure()
+
+
+# Relationship type
+
+def test_node_template_requirement_relationship_type_same(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+""").assert_success()
+
+
+def test_node_template_requirement_relationship_type_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType1
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType2
+""").assert_success()
+
+
+def test_node_template_requirement_relationship_type_not_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType1:
+ derived_from: MyType2
+ MyType2: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType1
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType2
+""").assert_failure()
+
+
+def test_node_template_requirement_relationship_type_short_form(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType
+""").assert_success()
+
+
+# Relationship template
+
+def test_node_template_requirement_relationship_template_same(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType
+topology_template:
+ relationship_templates:
+ my_relationship:
+ type: MyType
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: my_relationship
+""").assert_success()
+
+
+def test_node_template_requirement_relationship_template_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType1
+topology_template:
+ relationship_templates:
+ my_relationship:
+ type: MyType2
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: my_relationship
+""").assert_success()
+
+
+def test_node_template_requirement_relationship_template_not_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType1:
+ derived_from: MyType2
+ MyType2: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType1
+topology_template:
+ relationship_templates:
+ my_relationship:
+ type: MyType2
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: my_relationship
+""").assert_failure()
+
+
+def test_node_template_requirement_relationship_template_short_form(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: MyType
+topology_template:
+ relationship_templates:
+ my_relationship:
+ type: MyType
+ node_templates:
+ my_node:
+ type: MyType
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship: my_relationship
+""").assert_success()
+
+
+# Unicode
+
+def test_node_template_requirement_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ 類型: {}
+relationship_types:
+ 類型: {}
+node_types:
+ 類型:
+ requirements:
+ - 需求:
+ capability: 類型
+ relationship: 類型
+topology_template:
+ relationship_templates:
+ 關係:
+ type: 類型
+ node_templates:
+ 節點:
+ type: 類型
+ requirements:
+ - 需求:
+ capability: 類型
+ relationship: 關係
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_group.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_group.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_group.py
new file mode 100644
index 0000000..cf7f54d
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_group.py
@@ -0,0 +1,159 @@
+# -*- 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 pytest
+
+from .. import data
+
+
+# Members
+
+@pytest.mark.parametrize('value', data.NOT_A_LIST)
+def test_group_members_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+group_types:
+ MyType: {}
+topology_template:
+ groups:
+ my_group:
+ type: MyType
+ members: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('value', data.NOT_A_STRING)
+def test_group_members_syntax_element_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+group_types:
+ MyType: {}
+topology_template:
+ groups:
+ my_group:
+ type: MyType
+ members: [ {{ value }} ]
+""", dict(value=value)).assert_failure()
+
+
+def test_group_members_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+group_types:
+ MyType: {}
+topology_template:
+ groups:
+ my_group:
+ type: MyType
+ members: []
+""").assert_success()
+
+
+def test_group_members(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType1: {}
+ MyType2: {}
+group_types:
+ MyType:
+ members: [ MyType1, MyType2 ]
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType1
+ my_node2:
+ type: MyType2
+ groups:
+ my_group:
+ type: MyType
+ members: [ my_node1, my_node2 ]
+""").assert_success()
+
+
+def test_group_members_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+group_types:
+ MyType:
+ members: [ MyType1 ]
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType2
+ groups:
+ my_group:
+ type: MyType
+ members: [ my_node ]
+""").assert_success()
+
+
+def test_group_members_not_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType1: {}
+ MyType2: {}
+group_types:
+ MyType:
+ members: [ MyType1 ]
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType2
+ groups:
+ my_group:
+ type: MyType
+ members: [ my_node ]
+""").assert_failure()
+
+
+def test_group_members_unknown(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+group_types:
+ MyType: {}
+topology_template:
+ groups:
+ my_group:
+ type: MyType
+ members: [ unknown ]
+""").assert_failure()
+
+
+# Unicode
+
+def test_group_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ 類型: {}
+group_types:
+ 類型:
+ members: [ 類型 ]
+topology_template:
+ node_templates:
+ 節點:
+ type: 類型
+ groups:
+ 政策:
+ type: 類型
+ members: [ 節點 ]
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_policy.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_policy.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_policy.py
new file mode 100644
index 0000000..4828583
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_policy.py
@@ -0,0 +1,272 @@
+# -*- 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 pytest
+
+from .. import data
+
+
+# Targets
+
+@pytest.mark.parametrize('value', data.NOT_A_LIST)
+def test_policy_targets_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+policy_types:
+ MyType: {}
+topology_template:
+ policies:
+ my_policy:
+ type: MyType
+ targets: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('value', data.NOT_A_STRING)
+def test_policy_targets_syntax_element_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+policy_types:
+ MyType: {}
+topology_template:
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ {{ value }} ]
+""", dict(value=value)).assert_failure()
+
+
+def test_policy_targets_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+policy_types:
+ MyType: {}
+topology_template:
+ policies:
+ my_policy:
+ type: MyType
+ targets: []
+""").assert_success()
+
+
+def test_policy_targets_nodes(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType1: {}
+ MyType2: {}
+policy_types:
+ MyType:
+ targets: [ MyType1, MyType2 ]
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType1
+ my_node2:
+ type: MyType2
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ my_node1, my_node2 ]
+""").assert_success()
+
+
+def test_policy_targets_nodes_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+policy_types:
+ MyType:
+ targets: [ MyType1 ]
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType2
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ my_node ]
+""").assert_success()
+
+
+def test_policy_targets_nodes_not_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType1:
+ derived_from: MyType2
+ MyType2: {}
+policy_types:
+ MyType:
+ targets: [ MyType1 ]
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType2
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ my_node ]
+""").assert_failure()
+
+
+def test_policy_targets_groups(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+group_types:
+ MyType1: {}
+ MyType2: {}
+policy_types:
+ MyType:
+ targets: [ MyType1, MyType2 ]
+topology_template:
+ groups:
+ my_group1:
+ type: MyType1
+ my_group2:
+ type: MyType2
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ my_group1, my_group2 ]
+""").assert_success()
+
+
+def test_policy_targets_groups_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+group_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+policy_types:
+ MyType:
+ targets: [ MyType1 ]
+topology_template:
+ groups:
+ my_group:
+ type: MyType2
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ my_group ]
+""").assert_success()
+
+
+def test_policy_targets_groups_not_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+ MyType1: {}
+ MyType1:
+ derived_from: MyType2
+ MyType2: {}
+policy_types:
+ MyType:
+ targets: [ MyType1 ]
+topology_template:
+ groups:
+ my_group:
+ type: MyType2
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ my_group ]
+""").assert_failure()
+
+
+def test_policy_targets_nodes_and_groups(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyNodeType: {}
+group_types:
+ MyGroupType: {}
+policy_types:
+ MyType:
+ targets: [ MyNodeType, MyGroupType ]
+topology_template:
+ node_templates:
+ my_node:
+ type: MyNodeType
+ groups:
+ my_group:
+ type: MyGroupType
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ my_node, my_group ]
+""").assert_success()
+
+
+def test_policy_targets_ambiguous(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyNodeType: {}
+group_types:
+ MyGroupType: {}
+policy_types:
+ MyType:
+ targets: [ MyNodeType, MyGroupType ]
+topology_template:
+ node_templates:
+ my_template:
+ type: MyNodeType
+ groups:
+ my_template:
+ type: MyGroupType
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ my_template ]
+""").assert_success()
+
+
+def test_policy_targets_unknown(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+policy_types:
+ MyType: {}
+topology_template:
+ policies:
+ my_policy:
+ type: MyType
+ targets: [ unknown ]
+""").assert_failure()
+
+
+# Unicode
+
+def test_policy_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ 類型: {}
+policy_types:
+ 類型:
+ targets: [ 類型 ]
+topology_template:
+ node_templates:
+ 節點:
+ type: 類型
+ policies:
+ 政策:
+ type: 類型
+ targets: [ 節點 ]
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_substitution_mappings.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_substitution_mappings.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_substitution_mappings.py
new file mode 100644
index 0000000..8903b97
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_substitution_mappings.py
@@ -0,0 +1,449 @@
+# -*- 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 pytest
+
+from .. import data
+
+
+@pytest.mark.parametrize('value', data.NOT_A_DICT)
+def test_substitution_mappings_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ substitution_mappings: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_substitution_mappings_syntax_unsupported(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ substitution_mappings:
+ node_type: MyType
+ unsupported: {}
+""").assert_failure()
+
+
+def test_substitution_mappings_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ substitution_mappings: {} # "node_type" is required
+""").assert_failure()
+
+
+# Node type
+
+def test_substitution_mappings_node_type_syntax_type(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ description: a description
+ substitution_mappings:
+ node_type: {{ value }}
+""").assert_failure()
+
+
+# Requirements section
+
+@pytest.mark.parametrize('value', data.NOT_A_DICT)
+def test_substitution_mappings_requirements_section_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ substitution_mappings:
+ node_type: MyType
+ requirements: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_substitution_mappings_requirements_section_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ substitution_mappings:
+ node_type: MyType
+ requirements: {}
+""").assert_success()
+
+
+# Requirement
+
+@pytest.mark.parametrize('value', data.NOT_A_LIST_OF_TWO)
+def test_substitution_mappings_requirement_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+topology_template:
+ substitution_mappings:
+ node_type: MyType
+ requirements:
+ my_requirement: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_substitution_mappings_requirement_same(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ MyInternalType:
+ requirements:
+ - my_internal_requirement:
+ capability: MyType
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ requirements:
+ my_requirement: [ my_template, my_internal_requirement ]
+""").assert_success()
+
+
+def test_substitution_mappings_requirement_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType1
+ MyInternalType:
+ requirements:
+ - my_internal_requirement:
+ capability: MyType2
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ requirements:
+ my_requirement: [ my_template, my_internal_requirement ]
+""").assert_success()
+
+
+def test_substitution_mappings_requirement_bad(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType1
+ MyInternalType:
+ requirements:
+ - my_internal_requirement:
+ capability: MyType2
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ requirements:
+ my_requirement: [ my_template, my_internal_requirement ]
+""").assert_failure()
+
+
+def test_substitution_mappings_requirement_unknown(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ MyInternalType:
+ requirements:
+ - my_internal_requirement:
+ capability: MyType
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ requirements:
+ unknown: [ my_template, my_internal_requirement ]
+""").assert_failure()
+
+
+def test_substitution_mappings_requirement_unknown_mapped_template(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ MyInternalType:
+ requirements:
+ - my_internal_requirement:
+ capability: MyType
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ requirements:
+ my_requirement: [ unknown, my_internal_requirement ]
+""").assert_failure()
+
+
+def test_substitution_mappings_requirement_unknown_mapped_requirement(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ requirements:
+ - my_requirement:
+ capability: MyType
+ MyInternalType:
+ requirements:
+ - my_internal_requirement:
+ capability: MyType
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ requirements:
+ my_requirement: [ my_template, unknown ]
+""").assert_failure()
+
+
+# Capabilities section
+
+@pytest.mark.parametrize('value', data.NOT_A_DICT)
+def test_substitution_mappings_capabilities_section_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ substitution_mappings:
+ node_type: MyType
+ capabilities: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_substitution_mappings_capabilities_section_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType: {}
+topology_template:
+ substitution_mappings:
+ node_type: MyType
+ capabilities: {}
+""").assert_success()
+
+
+# Capability
+
+@pytest.mark.parametrize('value', data.NOT_A_LIST_OF_TWO)
+def test_substitution_mappings_capability_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ capabilities:
+ my_capability: MyType
+topology_template:
+ substitution_mappings:
+ node_type: MyType
+ capabilities:
+ my_capability: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_substitution_mappings_capability_same(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ capabilities:
+ my_capability: MyType
+ MyInternalType:
+ capabilities:
+ my_internal_capability: MyType
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ capabilities:
+ my_capability: [ my_template, my_internal_capability ]
+""").assert_success()
+
+
+def test_substitution_mappings_capability_derived(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2:
+ derived_from: MyType1
+node_types:
+ MyType:
+ capabilities:
+ my_capability: MyType1
+ MyInternalType:
+ capabilities:
+ my_internal_capability: MyType2
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ capabilities:
+ my_capability: [ my_template, my_internal_capability ]
+""").assert_success()
+
+
+def test_substitution_mappings_capability_bad(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType1: {}
+ MyType2: {}
+node_types:
+ MyType:
+ capabilities:
+ my_capability: MyType1
+ MyInternalType:
+ capabilities:
+ my_internal_capability: MyType2
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ capabilities:
+ my_capability: [ my_template, my_internal_capability ]
+""").assert_failure()
+
+
+def test_substitution_mappings_capability_unknown(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ capabilities:
+ my_capability: MyType
+ MyInternalType:
+ capabilities:
+ my_internal_capability: MyType
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ capabilities:
+ unknown: [ my_template, my_internal_capability ]
+""").assert_failure()
+
+
+def test_substitution_mappings_capability_unknown_mapped_template(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ capabilities:
+ my_capability: MyType
+ MyInternalType:
+ capabilities:
+ my_internal_capability: MyType
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ capabilities:
+ my_capability: [ unknown, my_internal_capability ]
+""").assert_failure()
+
+
+def test_substitution_mappings_capability_unknown_mapped_capability(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+capability_types:
+ MyType: {}
+node_types:
+ MyType:
+ capabilities:
+ my_capability: MyType
+ MyInternalType:
+ capabilities:
+ my_internal_capability: MyType
+topology_template:
+ node_templates:
+ my_template:
+ type: MyInternalType
+ substitution_mappings:
+ node_type: MyType
+ capabilities:
+ my_capability: [ my_template, unknown ]
+""").assert_failure()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_topology_template.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_topology_template.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_topology_template.py
new file mode 100644
index 0000000..ac86a4a
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/test_topology_template.py
@@ -0,0 +1,61 @@
+# -*- 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 pytest
+
+from .. import data
+
+
+@pytest.mark.parametrize('value', data.NOT_A_DICT)
+def test_topology_template_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_topology_template_syntax_unsupported(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ unsupported: {}
+""").assert_failure()
+
+
+def test_topology_template_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template: {}
+""").assert_success()
+
+
+# Description
+
+@pytest.mark.parametrize('value', data.NOT_A_STRING)
+def test_topology_template_description_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ description: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_topology_template_description(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ description: a description
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/test_dsl_definitions.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/test_dsl_definitions.py b/tests/extensions/aria_extension_tosca/simple_v1_0/test_dsl_definitions.py
new file mode 100644
index 0000000..3defb70
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/test_dsl_definitions.py
@@ -0,0 +1,47 @@
+# -*- 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 pytest
+
+from . import data
+
+
+@pytest.mark.parametrize('value', data.PRIMITIVE_VALUES)
+def test_dsl_definitions_syntax_anything(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+dsl_definitions: {{ value }}
+""", dict(value=value)).assert_success()
+
+
+def test_dsl_definitions_anchor(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+dsl_definitions:
+ key: &ANCHOR
+ field: a value
+""").assert_success()
+
+
+# Unicode
+
+def test_dsl_definitions_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+dsl_definitions:
+ 定義: &ANCHOR # YAML does not allow the anchor name to be Unicode
+ 領域: 值
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/test_imports.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/test_imports.py b/tests/extensions/aria_extension_tosca/simple_v1_0/test_imports.py
new file mode 100644
index 0000000..07a0d9b
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/test_imports.py
@@ -0,0 +1,200 @@
+# -*- 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 pytest
+
+from . import data
+from ....mechanisms.web_server import WebServer
+
+
+# Fixtures
+
+NODE_TYPE_IMPORT = """
+node_types:
+ MyNode: {}
+"""
+
+NODE_TYPE_IMPORT_UNICODE = """
+node_types:
+ 類型: {}
+"""
+
+BAD_IMPORT = """
+node_types:
+ MyNode:
+ derived_from: UnknownType
+"""
+
+@pytest.fixture(scope='session')
+def repository():
+ repository = WebServer()
+ repository.add_text_yaml('/imports/node-type.yaml', NODE_TYPE_IMPORT)
+ repository.add_text_yaml('/imports/{0}.yaml'.format(WebServer.escape('節點類型')),
+ NODE_TYPE_IMPORT_UNICODE)
+ repository.add_text_yaml('/imports/bad.yaml', BAD_IMPORT)
+ with repository:
+ yield repository.root
+
+
+# Imports section
+
+@pytest.mark.parametrize('value', data.NOT_A_LIST)
+def test_imports_section_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_imports_section_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports: []
+""").assert_success()
+
+
+# Import
+
+@pytest.mark.parametrize('value', data.NOT_A_DICT_OR_STRING)
+def test_import_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_import_syntax_unsupported(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - unsupported: {}
+""").assert_failure()
+
+
+def test_import_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - {} # "file" is required
+""").assert_failure()
+
+
+# File
+
+@pytest.mark.parametrize('value', data.NOT_A_DICT_OR_STRING)
+def test_import_file_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - file: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_import_file_short_form(parser, repository):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - {{ repository }}/imports/node-type.yaml
+topology_template:
+ node_templates:
+ my_node:
+ type: MyNode
+""", dict(repository=repository)).assert_success()
+
+
+def test_import_file(parser, repository):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - file: {{ repository }}/imports/node-type.yaml
+topology_template:
+ node_templates:
+ my_node:
+ type: MyNode
+""", dict(repository=repository)).assert_success()
+
+
+# Repository
+
+@pytest.mark.xfail(reason='not yet implemented')
+def test_import_repository(parser, repository):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+repositories:
+ my_repository:
+ url: {{ repository }}/imports/
+imports:
+ - file: node-type.yaml
+ repository: my_repository
+topology_template:
+ node_templates:
+ my_node:
+ type: MyNode
+""", dict(repository=repository)).assert_success()
+
+
+# Namespace
+
+@pytest.mark.xfail(reason='not yet implemented')
+def test_import_namespace(parser, repository):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - file: {{ repository }}/imports/node-type.yaml
+ namespace_uri:
+ namespace_prefix: my_namespace
+topology_template:
+ node_templates:
+ my_node:
+ type: my_namespace.MyNode
+""", dict(repository=repository)).assert_success()
+
+
+# Bad imports
+
+def test_import_not_found(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - does_not_exist
+""").assert_failure()
+
+
+def test_import_bad(parser, repository):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - {{ repository }}/imports/bad.yaml
+topology_template:
+ node_templates:
+ my_node:
+ type: MyNode
+""", dict(repository=repository)).assert_failure()
+
+
+# Unicode
+
+def test_import_unicode(parser, repository):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+ - {{ repository }}/imports/節點類型.yaml
+topology_template:
+ node_templates:
+ 模板:
+ type: 類型
+""", dict(repository=repository)).assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1efb1e5e/tests/extensions/aria_extension_tosca/simple_v1_0/test_metadata.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/test_metadata.py b/tests/extensions/aria_extension_tosca/simple_v1_0/test_metadata.py
new file mode 100644
index 0000000..f80c40b
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/test_metadata.py
@@ -0,0 +1,98 @@
+# -*- 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 pytest
+
+from . import data
+from ....mechanisms.utils import matrix
+
+
+NORMATIVE_FIELD_NAMES = ('template_name', 'template_author', 'template_version')
+
+
+# Metadata section
+
+@pytest.mark.parametrize('value', data.NOT_A_DICT)
+def test_metadata_section_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+def test_metadata_section_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata: {}
+""").assert_success()
+
+
+# Fields
+
+@pytest.mark.parametrize('field,value', matrix(
+ NORMATIVE_FIELD_NAMES,
+ data.NOT_A_STRING
+))
+def test_metadata_normative_fields_syntax_type(parser, field, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+ {{ field }}: {{ value }}
+""", dict(field=field, value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('value', data.NOT_A_STRING)
+def test_metadata_non_normative_fields_syntax_type(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+ non_normative: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+# Template version
+
+@pytest.mark.parametrize('value', data.GOOD_VERSIONS)
+def test_metadata_normative_template_version(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+ template_version: {{ value }}
+""", dict(value=value)).assert_success()
+
+
+@pytest.mark.parametrize('value', data.BAD_VERSIONS)
+def test_metadata_normative_template_bad_version(parser, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+ template_version: {{ value }}
+""", dict(value=value)).assert_failure()
+
+
+# Unicode
+
+def test_metadata_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+ template_name: 詠嘆調
+ template_author: 詠嘆調
+ template_version: 1.0.0.詠嘆調-10
+ non_normative1: 詠嘆調一
+ non_normative2: 詠嘆調二
+ non_normative3: 詠嘆調三
+""").assert_success()