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/10/31 19:34:03 UTC
[08/13] incubator-ariatosca git commit: ARIA-1 Parser test suite
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_input.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_input.py b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_input.py
new file mode 100644
index 0000000..a4c97a4
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_input.py
@@ -0,0 +1,94 @@
+# -*- 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.
+
+
+def test_functions_get_input_unknown(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { get_input: unknown }
+""").assert_failure()
+
+
+def test_functions_get_input(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ inputs:
+ my_input:
+ type: string
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { get_input: my_input }
+""").assert_success()
+
+
+def test_functions_get_input_nested(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ inputs:
+ my_input:
+ type: string
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { get_input: { concat: [ my, _, input ] } }
+""").assert_success()
+
+
+# Unicode
+
+def test_functions_get_input_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ 類型:
+ properties:
+ 參數:
+ type: string
+topology_template:
+ inputs:
+ 输入:
+ type: string
+ node_templates:
+ 模板:
+ type: 類型
+ properties:
+ 參數: { get_input: 输入 }
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_nodes_of_type.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_nodes_of_type.py b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_nodes_of_type.py
new file mode 100644
index 0000000..ffa2f9c
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_nodes_of_type.py
@@ -0,0 +1,70 @@
+# -*- 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.
+
+
+def test_functions_get_nodes_of_type_unknown(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { get_nodes_of_type: unknown }
+""", import_profile=True).assert_failure()
+
+
+def test_functions_get_nodes_of_type(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: list
+ entry_schema: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { get_nodes_of_type: MyType }
+""", import_profile=True).assert_success()
+
+
+# Unicode
+
+def test_functions_get_nodes_of_type_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ 類型:
+ properties:
+ 參數:
+ type: list
+ entry_schema: string
+topology_template:
+ node_templates:
+ 模板:
+ type: 類型
+ properties:
+ 參數: { get_nodes_of_type: 類型 }
+""", import_profile=True).assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_operation_output.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_operation_output.py b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_operation_output.py
new file mode 100644
index 0000000..c115d0d
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_get_operation_output.py
@@ -0,0 +1,84 @@
+# -*- 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.
+
+
+# Syntax
+
+def test_functions_get_operation_output_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { get_operation_output: [] } # needs at least two args
+""").assert_failure()
+
+
+# Arguments
+
+def test_functions_get_operation_output(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+interface_types:
+ MyType:
+ my_operation: {}
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+ interfaces:
+ MyInterface:
+ type: MyType
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { get_operation_output: [ my_node, MyInterface, my_operation, my_variable ] }
+""").assert_success()
+
+
+# Unicode
+
+def test_functions_get_operation_output_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+interface_types:
+ 類型:
+ 手術: {}
+node_types:
+ 類型:
+ properties:
+ 參數:
+ type: string
+ interfaces:
+ 接口:
+ type: 類型
+topology_template:
+ node_templates:
+ 模板:
+ type: 類型
+ properties:
+ 參數: { get_operation_output: [ 模板, 接口, 手術, 變量 ] }
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_token.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_token.py b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_token.py
new file mode 100644
index 0000000..8f99824
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_function_token.py
@@ -0,0 +1,119 @@
+# -*- 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.
+
+
+def test_functions_token_syntax_empty(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { token: [] } # needs exactly three args
+""").assert_failure()
+
+
+def test_functions_token_syntax_index_type(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { token: [ hello world, ' ', c ] }
+""").assert_failure()
+
+
+def test_functions_token_syntax_index_negative(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { token: [ hello world, ' ', -1 ] }
+""").assert_failure()
+
+
+def test_functions_token(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { token: [ hello world, ' ', 1 ] }
+""").assert_success()
+
+
+def test_functions_token_nested(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ properties:
+ my_parameter: { token: [ { token: [ hello/goodbye world, ' ', 0 ] }, '/', 1 ] }
+""").assert_success()
+
+
+# Unicode
+
+def test_functions_token_unicode(parser):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ 類型:
+ properties:
+ 參數:
+ type: string
+topology_template:
+ node_templates:
+ 模板:
+ type: 類型
+ properties:
+ 參數: { token: [ '你好,世界', ',', 1 ] }
+""").assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_functions_modelable_entity.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_functions_modelable_entity.py b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_functions_modelable_entity.py
new file mode 100644
index 0000000..365971a
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/functions/test_functions_modelable_entity.py
@@ -0,0 +1,247 @@
+# -*- 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
+
+
+# TODO:
+# other keywords (HOST, SOURCE, TARGET)
+# requirements
+# capabilities
+
+
+PERMUTATIONS = (
+ ('get_property', 'properties'),
+ ('get_attribute', 'attributes')
+)
+
+
+# Syntax
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_syntax_empty(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ {{ section }}:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ {{ section }}:
+ my_parameter: { {{ function }}: [] } # needs at least two args
+""", dict(function=function, section=section)).assert_failure()
+
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_syntax_single(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ {{ section }}:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ {{ section }}:
+ my_parameter: { {{ function }}: [ SELF ] } # needs at least two args
+""", dict(function=function, section=section)).assert_failure()
+
+
+# Entities
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_same(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ {{ section }}:
+ my_parameter1:
+ type: string
+ my_parameter2:
+ type: string
+ default: a value
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ {{ section }}:
+ my_parameter1: { {{ function }}: [ my_node, my_parameter2 ] }
+""", dict(function=function, section=section)).assert_success()
+
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_other(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ {{ section }}:
+ my_parameter1:
+ type: string
+ my_parameter2:
+ type: string
+ default: a value
+topology_template:
+ node_templates:
+ my_node1:
+ type: MyType
+ {{ section }}:
+ my_parameter1: { {{ function }}: [ my_node2, my_parameter2 ] }
+ my_node2:
+ type: MyType
+ {{ section }}:
+ my_parameter1: a value
+""", dict(function=function, section=section)).assert_success()
+
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_unknown(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ properties:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ {{ section }}:
+ my_parameter: { get_property: [ unknown, my_parameter ] }
+""", dict(function=function, section=section)).assert_failure()
+
+
+# Cyclical
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_cyclical_simple(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ {{ section }}:
+ my_parameter:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ {{ section }}:
+ my_parameter: { {{ function }}: [ my_node, my_parameter ] }
+""", dict(function=function, section=section)).assert_failure()
+
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_cyclical_complex(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ {{ section }}:
+ my_parameter1:
+ type: string
+ my_parameter2:
+ type: string
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ {{ section }}:
+ my_parameter1: { {{ function }}: [ my_node, my_parameter2 ] }
+ my_parameter2: { {{ function }}: [ my_node, my_parameter1 ] }
+""", dict(function=function, section=section)).assert_failure()
+
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_sub(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+node_types:
+ MyType:
+ {{ section }}:
+ my_parameter1:
+ type: string
+ my_parameter2:
+ type: MyType
+ default:
+ my_field: a value
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ {{ section }}:
+ my_parameter1: { {{ function }}: [ my_node, my_parameter2, my_field ] }
+""", dict(function=function, section=section)).assert_success()
+
+
+# Keywords
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_self(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ MyType:
+ {{ section }}:
+ my_parameter1:
+ type: string
+ my_parameter2:
+ type: string
+ default: a value
+topology_template:
+ node_templates:
+ my_node:
+ type: MyType
+ {{ section }}:
+ my_parameter1: { {{ function }}: [ SELF, my_parameter2 ] }
+""", dict(function=function, section=section)).assert_success()
+
+
+# Unicode
+
+@pytest.mark.parametrize('function,section', PERMUTATIONS)
+def test_functions_modelable_entity_unicode(parser, function, section):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+node_types:
+ 類型:
+ {{ section }}:
+ 參數一:
+ type: string
+ 參數二:
+ type: string
+ default: 值
+topology_template:
+ node_templates:
+ 模板:
+ type: 類型
+ {{ section }}:
+ 參數一: { {{ function }}: [ 模板, 參數二 ] }
+""", dict(function=function, section=section)).assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/templates/__init__.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/__init__.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/__init__.py
new file mode 100644
index 0000000..ae1e83e
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/__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/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/__init__.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/__init__.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/__init__.py
new file mode 100644
index 0000000..ae1e83e
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/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/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_copy.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_copy.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_copy.py
new file mode 100644
index 0000000..7d333e4
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_copy.py
@@ -0,0 +1,68 @@
+# -*- 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
+
+
+PERMUTATIONS = ('node', 'relationship')
+
+
+@pytest.mark.parametrize('name,value', matrix(PERMUTATIONS, data.NOT_A_STRING))
+def test_templates_copy_syntax_type(parser, name, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{ name }}_types:
+ MyType: {}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+ copying_template:
+ copy: {{ value }}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('name', PERMUTATIONS)
+def test_templates_copy(parser, name):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{ name }}_types:
+ MyType: {}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+ copying_template:
+ copy: my_template
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+@pytest.mark.parametrize('name', PERMUTATIONS)
+def test_templates_copy_unknown(parser, name):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{ name }}_types:
+ MyType: {}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+ copying_template:
+ copy: unknown
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_failure()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_interface.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_interface.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_interface.py
new file mode 100644
index 0000000..781d53b
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_interface.py
@@ -0,0 +1,912 @@
+# -*- 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
+
+
+MAIN_MACROS = """
+{% macro additions() %}
+{%- endmacro %}
+{% macro type_interfaces() %}
+ interfaces: {{ caller()|indent(6) }}
+{%- endmacro %}
+{% macro interfaces() %}
+ interfaces: {{ caller()|indent(8) }}
+{%- endmacro %}
+"""
+
+RELATIONSHIP_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_interfaces() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+ interfaces: {{ caller()|indent(14) }}
+{%- endmacro %}
+{% macro interfaces() %}
+ requirements:
+ - my_requirement:
+ relationship:
+ interfaces: {{ caller()|indent(16) }}
+{%- endmacro %}
+"""
+
+RELATIONSHIP_TYPE_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_interfaces() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+relationship_types:
+ MyType:
+ interfaces: {{ caller()|indent(6) }}
+{%- endmacro %}
+{% macro interfaces() %}
+ requirements:
+ - my_requirement:
+ relationship:
+ interfaces: {{ caller()|indent(16) }}
+{%- endmacro %}
+"""
+
+RELATIONSHIP_TEMPLATE_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_interfaces() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+relationship_types:
+ MyType:
+ interfaces: {{ caller()|indent(6) }}
+{%- endmacro %}
+{% macro interfaces() %}
+ requirements:
+ - my_requirement:
+ relationship: my_template
+ relationship_templates:
+ my_template:
+ type: MyType
+ interfaces: {{ caller()|indent(8) }}
+{%- endmacro %}
+"""
+
+MACROS = {
+ 'main': MAIN_MACROS,
+ 'relationship': RELATIONSHIP_MACROS,
+ 'relationship-type': RELATIONSHIP_TYPE_MACROS,
+ 'relationship-template': RELATIONSHIP_TEMPLATE_MACROS
+}
+
+PERMUTATIONS = (
+ ('main', 'node'),
+ ('main', 'group'),
+ ('main', 'relationship'),
+ ('relationship', 'node'),
+ ('relationship-type', 'node'),
+ ('relationship-template', 'node')
+)
+
+
+# Interfaces section
+
+@pytest.mark.parametrize('macros,name,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_DICT,
+ counts=(2, 1)
+))
+def test_template_interfaces_section_syntax_type(parser, macros, name, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() -%}
+{}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() -%}
+{{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interfaces_section_syntax_empty(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() -%}
+{}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() -%}
+{}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+# Interface
+
+@pytest.mark.parametrize('macros,name,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_DICT,
+ counts=(2, 1)
+))
+def test_template_interface_syntax_type(parser, macros, name, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_syntax_empty(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+# Interface input
+
+@pytest.mark.parametrize('macros,name,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_DICT,
+ counts=(2, 1)
+))
+def test_template_interface_inputs_section_syntax_type(parser, macros, name, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ inputs: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_inputs_section_syntax_empty(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ inputs: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,type_name,value', matrix(
+ PERMUTATIONS,
+ data.PARAMETER_VALUES,
+ counts=(2, 2)
+))
+def test_template_interface_input_from_type(parser, macros, name, type_name, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ inputs:
+ my_input:
+ type: {{ type_name }}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ inputs:
+ my_input: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], type_name=type_name,
+ value=value)).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,type_name,value', matrix(
+ PERMUTATIONS,
+ data.PARAMETER_VALUES,
+ counts=(2, 2)
+))
+def test_template_interface_input_from_interface_type(parser, macros, name, type_name, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+interface_types:
+ MyType:
+ inputs:
+ my_input:
+ type: {{ type_name }}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ inputs:
+ my_input: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], type_name=type_name,
+ value=value)).assert_success()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_input_missing(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ inputs:
+ my_input: a value
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_failure()
+
+
+# Operation
+
+@pytest.mark.parametrize('macros,name,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_DICT_OR_STRING,
+ counts=(2, 1)
+))
+def test_template_interface_operation_syntax_type(parser, macros, name, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_syntax_unsupported(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ unsupported: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_syntax_empty(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_from_type(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_from_interface_type(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType:
+ my_operation: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_missing(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_failure()
+
+
+# Operation implementation
+
+@pytest.mark.parametrize('macros,name,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_DICT_OR_STRING,
+ counts=(2, 1)
+))
+def test_template_interface_operation_implementation_syntax_type(parser, macros, name, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ implementation: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_implementation_syntax_unsupported(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ implementation:
+ unsupported: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_implementation_syntax_empty(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ implementation: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_STRING,
+ counts=(2, 1)
+))
+def test_template_interface_operation_implementation_primary_syntax_type(parser, macros, name,
+ value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ implementation:
+ primary: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_implementation_primary_short_form(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ implementation: an implementation
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_LIST,
+ counts=(2, 1)
+))
+def test_template_interface_operation_implementation_dependencies_syntax_type(parser, macros, name,
+ value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ implementation:
+ dependencies: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_STRING,
+ counts=(2, 1)
+))
+def test_template_interface_operation_implementation_dependencies_syntax_element_type(parser,
+ macros, name,
+ value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ implementation:
+ dependencies:
+ - {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_implementation_dependencies_syntax_empty(parser, macros,
+ name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ implementation:
+ dependencies: []
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+# Operation input
+
+@pytest.mark.parametrize('macros,name,type_name,value', matrix(
+ PERMUTATIONS,
+ data.PARAMETER_VALUES,
+ counts=(2, 2)
+))
+def test_template_interface_operation_input_from_type(parser, macros, name, type_name, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation:
+ inputs:
+ my_input:
+ type: {{ type_name }}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ inputs:
+ my_input: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], type_name=type_name,
+ value=value)).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,type_name,value', matrix(
+ PERMUTATIONS,
+ data.PARAMETER_VALUES,
+ counts=(2, 2)
+))
+def test_template_interface_operation_input_from_interface_type(parser, macros, name, type_name,
+ value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+interface_types:
+ MyType:
+ my_operation:
+ inputs:
+ my_input:
+ type: {{ type_name }}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ inputs:
+ my_input: {{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], type_name=type_name,
+ value=value)).assert_success()
+
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_operation_input_missing(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ MyType: {}
+{{ name }}_types:
+ MyType:
+{%- call type_interfaces() %}
+MyInterface:
+ type: MyType
+ my_operation: {}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call interfaces() %}
+MyInterface:
+ my_operation:
+ inputs:
+ my_input: a value
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_failure()
+
+
+# Unicode
+
+@pytest.mark.parametrize('macros,name', PERMUTATIONS)
+def test_template_interface_unicode(parser, macros, name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+interface_types:
+ 類型: {}
+{{ name }}_types:
+ 類型:
+{%- call type_interfaces() %}
+接口:
+ type: 類型
+ 手術:
+ inputs:
+ 輸入:
+ type: string
+{% endcall %}
+topology_template:
+ {{ section }}:
+ 模板:
+ type: 類型
+{%- call interfaces() %}
+接口:
+ 手術:
+ inputs:
+ 輸入: 值
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_parameters.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_parameters.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_parameters.py
new file mode 100644
index 0000000..c5fcd30
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_parameters.py
@@ -0,0 +1,781 @@
+# -*- 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.
+
+"""
+Unified testing for properties, attributes, and inputs.
+
+Additional tests for properties are in test_template_properties.py.
+"""
+
+import pytest
+
+from ... import data
+from ......mechanisms.utils import matrix
+
+
+# Assigning to parameters defined at a type
+MAIN_MACROS = """
+{% macro additions() %}
+{%- endmacro %}
+{% macro type_parameters() %}
+ {{ parameter_section }}: {{ caller()|indent(6) }}
+{%- endmacro %}
+{% macro parameters() %}
+ {{ parameter_section }}: {{ caller()|indent(8) }}
+{%- endmacro %}
+"""
+
+# Assigning to parameters defined at a capability type
+CAPABILITY_MACROS = """
+{% macro additions() %}
+{%- endmacro %}
+{% macro type_parameters() %}
+ capabilities:
+ my_capability:
+ type: MyType
+capability_types:
+ MyType:
+ {{ parameter_section }}: {{ caller()|indent(6) }}
+{%- endmacro %}
+{% macro parameters() %}
+ capabilities:
+ my_capability:
+ {{ parameter_section }}: {{ caller()|indent(12) }}
+{%- endmacro %}
+"""
+
+# Assigning to parameters defined at an artifact type
+ARTIFACT_MACROS = """
+{% macro additions() %}
+{%- endmacro %}
+{% macro type_parameters() %} {}
+artifact_types:
+ MyType:
+ {{ parameter_section }}: {{ caller()|indent(6) }}
+{%- endmacro %}
+{% macro parameters() %}
+ artifacts:
+ my_artifact:
+ type: MyType
+ file: a file
+ {{ parameter_section }}: {{ caller()|indent(12) }}
+{%- endmacro %}
+"""
+
+# Assigning to inputs defined at an interface type
+INTERFACE_MACROS = """
+{% macro additions() %}
+{%- endmacro %}
+{% macro type_parameters() %}
+ interfaces:
+ MyInterface:
+ type: MyType
+interface_types:
+ MyType:
+ {{ parameter_section }}: {{ caller()|indent(6) }}
+{%- endmacro %}
+{% macro parameters() %}
+ interfaces:
+ MyInterface:
+ {{ parameter_section }}: {{ caller()|indent(12) }}
+{%- endmacro %}
+"""
+
+# Assigning to inputs defined at an operation of an interface type
+OPERATION_MACROS = """
+{% macro additions() %}
+{%- endmacro %}
+{% macro type_parameters() %}
+ interfaces:
+ MyInterface:
+ type: MyType
+interface_types:
+ MyType:
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(8) }}
+{%- endmacro %}
+{% macro parameters() %}
+ interfaces:
+ MyInterface:
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(14) }}
+{%- endmacro %}
+"""
+
+# Assigning to inputs defined (added/overridden) at an interface of the template's type
+LOCAL_INTERFACE_MACROS = """
+{% macro additions() %}
+interface_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_parameters() %}
+ interfaces:
+ MyInterface:
+ type: MyType
+ {{ parameter_section }}: {{ caller()|indent(10) }}
+{%- endmacro %}
+{% macro parameters() %}
+ interfaces:
+ MyInterface:
+ {{ parameter_section }}: {{ caller()|indent(12) }}
+{%- endmacro %}
+"""
+
+# Assigning to inputs defined (added/overridden) at an operation of an interface of the template's
+# type
+LOCAL_OPERATION_MACROS = """
+{% macro additions() %}
+interface_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_parameters() %}
+ interfaces:
+ MyInterface:
+ type: MyType
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(12) }}
+{%- endmacro %}
+{% macro parameters() %}
+ interfaces:
+ MyInterface:
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(14) }}
+{%- endmacro %}
+"""
+
+# At a relationship of a node template, assigning to parameters defined at a relationship type
+RELATIONSHIP_TYPE_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+interface_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_parameters() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+relationship_types:
+ MyType:
+ {{ parameter_section }}: {{ caller()|indent(6) }}
+{%- endmacro %}
+{% macro parameters() %}
+ requirements:
+ - my_requirement:
+ relationship:
+ {{ parameter_section }}: {{ caller()|indent(16) }}
+{%- endmacro %}
+"""
+
+# At a relationship of a node template, assigning to inputs defined at an interface type
+RELATIONSHIP_INTERFACE_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_parameters() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+ interfaces:
+ MyInterface:
+ type: MyType
+interface_types:
+ MyType:
+ {{ parameter_section }}: {{ caller()|indent(8) }}
+{%- endmacro %}
+{% macro parameters() %}
+ requirements:
+ - my_requirement:
+ relationship:
+ interfaces:
+ MyInterface:
+ {{ parameter_section }}: {{ caller()|indent(20) }}
+{%- endmacro %}
+"""
+
+# At a relationship of a node template, assigning to inputs defined at an operation of an interface
+# type
+RELATIONSHIP_OPERATION_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_parameters() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+ interfaces:
+ MyInterface:
+ type: MyType
+interface_types:
+ MyType:
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(10) }}
+{%- endmacro %}
+{% macro parameters() %}
+ requirements:
+ - my_requirement:
+ relationship:
+ interfaces:
+ MyInterface:
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(22) }}
+{%- endmacro %}
+"""
+
+# At a relationship of a node template, assigning to inputs defined (added/overridden) at an
+# interface of a relationship type
+RELATIONSHIP_TYPE_INTERFACE_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+interface_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_parameters() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+relationship_types:
+ MyType:
+ interfaces:
+ MyInterface:
+ type: MyType
+ {{ parameter_section }}: {{ caller()|indent(10) }}
+{%- endmacro %}
+{% macro parameters() %}
+ requirements:
+ - my_requirement:
+ relationship:
+ interfaces:
+ MyInterface:
+ {{ parameter_section }}: {{ caller()|indent(20) }}
+{%- endmacro %}
+"""
+
+# At a relationship of a node template, assigning to inputs defined (added/overridden) at an
+# operation of an interface of a relationship type
+RELATIONSHIP_TYPE_OPERATION_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+interface_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_parameters() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+relationship_types:
+ MyType:
+ interfaces:
+ MyInterface:
+ type: MyType
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(12) }}
+{%- endmacro %}
+{% macro parameters() %}
+ requirements:
+ - my_requirement:
+ relationship:
+ interfaces:
+ MyInterface:
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(22) }}
+{%- endmacro %}
+"""
+
+# At a relationship of a node template, assigning to inputs defined (added/overridden) at an
+# interface of the relationship of the node type
+RELATIONSHIP_LOCAL_INTERFACE_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+interface_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_parameters() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+ interfaces:
+ MyInterface:
+ type: MyType
+ {{ parameter_section }}: {{ caller()|indent(18) }}
+{%- endmacro %}
+{% macro parameters() %}
+ requirements:
+ - my_requirement:
+ relationship:
+ interfaces:
+ MyInterface:
+ {{ parameter_section }}: {{ caller()|indent(20) }}
+{%- endmacro %}
+"""
+
+# At a relationship of a node template, assigning to inputs defined (added/overridden) at an
+# operation of an interface of the relationship of the node type
+RELATIONSHIP_LOCAL_OPERATION_MACROS = """
+{% macro additions() %}
+capability_types:
+ MyType: {}
+relationship_types:
+ MyType: {}
+interface_types:
+ MyType: {}
+{%- endmacro %}
+{% macro type_parameters() %}
+ requirements:
+ - my_requirement:
+ capability: MyType
+ relationship:
+ type: MyType
+ interfaces:
+ MyInterface:
+ type: MyType
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(20) }}
+{%- endmacro %}
+{% macro parameters() %}
+ requirements:
+ - my_requirement:
+ relationship:
+ interfaces:
+ MyInterface:
+ my_operation:
+ {{ parameter_section }}: {{ caller()|indent(22) }}
+{%- endmacro %}
+"""
+
+MACROS = {
+ 'main': MAIN_MACROS,
+ 'capability': CAPABILITY_MACROS,
+ 'artifact': ARTIFACT_MACROS,
+ 'interface': INTERFACE_MACROS,
+ 'operation': OPERATION_MACROS,
+ 'local-interface': LOCAL_INTERFACE_MACROS,
+ 'local-operation': LOCAL_OPERATION_MACROS,
+ 'relationship-type': RELATIONSHIP_TYPE_MACROS,
+ 'relationship-interface': RELATIONSHIP_INTERFACE_MACROS,
+ 'relationship-operation': RELATIONSHIP_OPERATION_MACROS,
+ 'relationship-type-interface': RELATIONSHIP_TYPE_INTERFACE_MACROS,
+ 'relationship-type-operation': RELATIONSHIP_TYPE_OPERATION_MACROS,
+ 'relationship-local-interface': RELATIONSHIP_LOCAL_INTERFACE_MACROS,
+ 'relationship-local-operation': RELATIONSHIP_LOCAL_OPERATION_MACROS
+}
+
+PERMUTATIONS = (
+ ('main', 'node', 'properties'),
+ ('main', 'node', 'attributes'),
+ ('main', 'group', 'properties'),
+ ('main', 'relationship', 'properties'),
+ ('main', 'relationship', 'attributes'),
+ ('main', 'policy', 'properties'),
+ ('capability', 'node', 'properties'),
+ ('capability', 'node', 'attributes'),
+ ('artifact', 'node', 'properties'),
+ ('interface', 'node', 'inputs'),
+ ('interface', 'group', 'inputs'),
+ ('interface', 'relationship', 'inputs'),
+ ('operation', 'node', 'inputs'),
+ ('operation', 'group', 'inputs'),
+ ('operation', 'relationship', 'inputs'),
+ ('local-interface', 'node', 'inputs'),
+ ('local-interface', 'group', 'inputs'),
+ ('local-interface', 'relationship', 'inputs'),
+ ('local-operation', 'node', 'inputs'),
+ ('local-operation', 'group', 'inputs'),
+ ('local-operation', 'relationship', 'inputs'),
+ ('relationship-type', 'node', 'properties'),
+ ('relationship-interface', 'node', 'inputs'),
+ #('relationship-operation', 'node', 'inputs'), # fix
+ ('relationship-type-interface', 'node', 'inputs'),
+ ('relationship-type-operation', 'node', 'inputs'), # fix
+ ('relationship-local-interface', 'node', 'inputs'),
+ #('relationship-operation', 'node', 'inputs'), # fix
+)
+
+
+# Parameters section
+
+@pytest.mark.parametrize('macros,name,parameter_section,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_DICT,
+ counts=(3, 1)
+))
+def test_template_parameters_section_syntax_type(parser, macros, name, parameter_section, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() -%}
+{}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() -%}
+{{ value }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name],
+ parameter_section=parameter_section, value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section', PERMUTATIONS)
+def test_template_parameters_section_syntax_empty(parser, macros, name, parameter_section):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() -%}
+{}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() -%}
+{}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name],
+ parameter_section=parameter_section)).assert_success()
+
+
+# Parameter
+
+@pytest.mark.parametrize('macros,name,parameter_section', (('capability', 'node', 'attributes'),))
+def test_template_parameter_missing(parser, macros, name, parameter_section):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() -%}
+{}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() %}
+my_parameter: a value
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name],
+ parameter_section=parameter_section)).assert_failure()
+
+
+# Entry schema
+
+@pytest.mark.parametrize('macros,name,parameter_section,values', matrix(
+ PERMUTATIONS,
+ data.ENTRY_SCHEMA_VALUES,
+ counts=(3, 1)
+))
+def test_template_parameter_map(parser, macros, name, parameter_section, values):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+ default: default value
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: map
+ entry_schema: {{ values[0] }}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() %}
+my_parameter:
+ key1: {{ values[1] }}
+ key2: {{ values[2] }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], parameter_section=parameter_section,
+ values=values), import_profile=True).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section,values', matrix(
+ PERMUTATIONS,
+ data.ENTRY_SCHEMA_VALUES_BAD,
+ counts=(3, 1)
+))
+def test_template_parameter_map_bad(parser, macros, name, parameter_section, values):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+ default: default value
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: map
+ entry_schema: {{ values[0] }}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() %}
+my_parameter:
+ key1: {{ values[1] }}
+ key2: {{ values[2] }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], parameter_section=parameter_section,
+ values=values), import_profile=True).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section', PERMUTATIONS)
+def test_template_parameter_map_required_field(parser, macros, name, parameter_section):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: map
+ entry_schema: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() %}
+my_parameter:
+ key: {my_field: a value}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name],
+ parameter_section=parameter_section), import_profile=True).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section', PERMUTATIONS)
+def test_template_parameter_map_required_field_bad(parser, macros, name, parameter_section):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: map
+ entry_schema: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() %}
+my_parameter:
+ key: {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name],
+ parameter_section=parameter_section), import_profile=True).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section,values', matrix(
+ PERMUTATIONS,
+ data.ENTRY_SCHEMA_VALUES,
+ counts=(3, 1)
+))
+def test_template_parameter_list(parser, macros, name, parameter_section, values):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+ default: default value
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: list
+ entry_schema: {{ values[0] }}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() %}
+my_parameter:
+ - {{ values[1] }}
+ - {{ values[2] }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], parameter_section=parameter_section,
+ values=values), import_profile=True).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section,values', matrix(
+ PERMUTATIONS,
+ data.ENTRY_SCHEMA_VALUES_BAD,
+ counts=(3, 1)
+))
+def test_template_parameter_list_bad(parser, macros, name, parameter_section, values):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+ default: default value
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: list
+ entry_schema: {{ values[0] }}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() %}
+my_parameter:
+ - {{ values[1] }}
+ - {{ values[2] }}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], parameter_section=parameter_section,
+ values=values), import_profile=True).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section', PERMUTATIONS)
+def test_template_parameter_list_required_field(parser, macros, name, parameter_section):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: list
+ entry_schema: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() %}
+my_parameter:
+ - {my_field: a value}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name],
+ parameter_section=parameter_section), import_profile=True).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section', PERMUTATIONS)
+def test_template_parameter_list_required_field_bad(parser, macros, name, parameter_section):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: list
+ entry_schema: MyType
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() %}
+my_parameter:
+ - {}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name],
+ parameter_section=parameter_section), import_profile=True).assert_failure()
+
+
+# Unicode
+
+@pytest.mark.parametrize('macros,name,parameter_section', PERMUTATIONS)
+def test_template_parameter_unicode(parser, macros, name, parameter_section):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+{{ name }}_types:
+ 類型:
+{%- call type_parameters() %}
+參數:
+ type: string
+{% endcall %}
+topology_template:
+ {{ section }}:
+ 模板:
+ type: 類型
+{%- call parameters() %}
+參數: 值
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name],
+ parameter_section=parameter_section)).assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_parameters_properties.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_parameters_properties.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_parameters_properties.py
new file mode 100644
index 0000000..bd82766
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_template_parameters_properties.py
@@ -0,0 +1,132 @@
+# -*- 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.
+
+"""
+Unified testing for properties (including inputs).
+
+These tests are in addition to the common tests for parameters in test_template_parameters.py.
+"""
+
+import pytest
+
+from .test_template_parameters import (MACROS, PERMUTATIONS as PARAMETER_PERMUTATIONS)
+from ... import data
+from ......mechanisms.utils import matrix
+
+
+PERMUTATIONS = tuple(
+ (macros, name, parameter_section)
+ for macros, name, parameter_section in PARAMETER_PERMUTATIONS
+ if parameter_section != 'attributes'
+)
+
+
+# Required
+
+@pytest.mark.parametrize('macros,name,parameter_section,type_name', matrix(
+ PERMUTATIONS,
+ data.PARAMETER_TYPE_NAMES,
+ counts=(3, 1)
+))
+def test_template_parameter_required(parser, macros, name, parameter_section, type_name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: {{ type_name }}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() -%}
+{}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], parameter_section=parameter_section,
+ type_name=type_name)).assert_failure()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section,type_name', matrix(
+ PERMUTATIONS,
+ data.PARAMETER_TYPE_NAMES,
+ counts=(3, 1)
+))
+def test_template_parameter_not_required(parser, macros, name, parameter_section, type_name):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: {{ type_name }}
+ required: false
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() -%}
+{}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], parameter_section=parameter_section,
+ type_name=type_name)).assert_success()
+
+
+@pytest.mark.parametrize('macros,name,parameter_section,type_name,value', matrix(
+ PERMUTATIONS,
+ data.PARAMETER_VALUES,
+ counts=(3, 2)
+))
+def test_template_parameter_required_with_default(parser, macros, name, parameter_section,
+ type_name, value):
+ parser.parse_literal(MACROS[macros] + """
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{- additions() }}
+data_types:
+ MyType:
+ properties:
+ my_field:
+ type: string
+{{ name }}_types:
+ MyType:
+{%- call type_parameters() %}
+my_parameter:
+ type: {{ type_name }}
+ default: {{ value }}
+{% endcall %}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+{%- call parameters() -%}
+{}
+{% endcall %}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], parameter_section=parameter_section,
+ type_name=type_name, value=value)).assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_templates.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_templates.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_templates.py
new file mode 100644
index 0000000..62a10ed
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/common/test_templates.py
@@ -0,0 +1,128 @@
+# -*- 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
+
+
+PERMUTATIONS = ('node', 'group', 'relationship', 'policy')
+
+
+# Templates section
+
+@pytest.mark.parametrize('name,value', matrix(
+ PERMUTATIONS,
+ data.NOT_A_DICT
+))
+def test_templates_section_syntax_type(parser, name, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ {{ section }}: {{ value }}
+""", dict(section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('name', PERMUTATIONS)
+def test_templates_section_syntax_empty(parser, name):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ {{ section }}: {}
+""", dict(section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
+
+
+# Template
+
+@pytest.mark.parametrize('name', PERMUTATIONS)
+def test_template_syntax_unsupported(parser, name):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{ name }}_types:
+ MyType: {}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+ unsupported: {}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_failure()
+
+
+@pytest.mark.parametrize('name', PERMUTATIONS)
+def test_template_syntax_empty(parser, name):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ {{ section }}:
+ my_template: {} # "type" is required
+""", dict(section=data.TEMPLATE_NAME_SECTIONS[name])).assert_failure()
+
+
+# Description
+
+@pytest.mark.parametrize('name,value', matrix(PERMUTATIONS, data.NOT_A_STRING))
+def test_template_description_syntax_type(parser, name, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{ name }}_types:
+ MyType: {}
+topology_template:
+ {{ section }}:
+ my_template:
+ type: MyType
+ description: {{ value }}
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+# Type
+
+@pytest.mark.parametrize('name,value', matrix(PERMUTATIONS, data.NOT_A_STRING))
+def test_template_type_syntax_type(parser, name, value):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ {{ section }}:
+ my_template:
+ type: {{ value }}
+""", dict(section=data.TEMPLATE_NAME_SECTIONS[name], value=value)).assert_failure()
+
+
+@pytest.mark.parametrize('name', PERMUTATIONS)
+def test_template_type_unknown(parser, name):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+topology_template:
+ {{ section }}:
+ my_template:
+ type: UnknownType
+""", dict(section=data.TEMPLATE_NAME_SECTIONS[name])).assert_failure()
+
+
+# Unicode
+
+@pytest.mark.parametrize('name', PERMUTATIONS)
+def test_template_unicode(parser, name):
+ parser.parse_literal("""
+tosca_definitions_version: tosca_simple_yaml_1_0
+{{ name }}_types:
+ 類型: {}
+topology_template:
+ {{ section }}:
+ 模板:
+ type: 類型
+ description: 描述
+""", dict(name=name, section=data.TEMPLATE_NAME_SECTIONS[name])).assert_success()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b89fdde2/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/__init__.py
----------------------------------------------------------------------
diff --git a/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/__init__.py b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/__init__.py
new file mode 100644
index 0000000..ae1e83e
--- /dev/null
+++ b/tests/extensions/aria_extension_tosca/simple_v1_0/templates/node_template/__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.