summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/databasesubsystem.yaml9
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/queuingsubsystem.yaml9
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/system.yaml6
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/transactionsubsystem.yaml6
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/queuingsubsystem_invalid_input.yaml3
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/system_invalid_missing_output.yaml24
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/system_invalid_unknown_output.yaml24
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/transactionsubsystem_invalid_missing_output.yaml92
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/transactionsubsystem_invalid_unknown_output.yaml94
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tests/test_topology_template.py49
10 files changed, 283 insertions, 33 deletions
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/databasesubsystem.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/databasesubsystem.yaml
index 6990679..b6e9c42 100644
--- a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/databasesubsystem.yaml
+++ b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/databasesubsystem.yaml
@@ -75,15 +75,6 @@ topology_template:
distribution: Ubuntu
version: 14.04
-# outputs:
-# receiver_ip:
-# description: private IP address of the database application
-# value: { get_attribute: [ server, private_address ] }
-# It seems current _process_intrisic_function can not handle more than 2 arguments, save it for later
-# receiver_port:
-# description: Port of the message receiver endpoint
-# value: { get_attribute: [ app, data_endpoint, port_name ] }
-
groups:
dbserver_group:
members: [ dbms, server ]
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/queuingsubsystem.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/queuingsubsystem.yaml
index 8c4cc76..578aa4a 100644
--- a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/queuingsubsystem.yaml
+++ b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/queuingsubsystem.yaml
@@ -61,10 +61,6 @@ topology_template:
version: 14.04
outputs:
-# receiver_ip:
-# description: private IP address of the message receiver application
-# value: { get_attribute: [ server, private_address ] }
-
server_ip:
description: server_ip of the message receiver application
value: { get_input: server_ip }
@@ -73,11 +69,6 @@ topology_template:
description: server_port of the message receiver application
value: { get_input: server_port }
-# It seems current _process_intrisic_function can not handle more than 2 arguments, save it for later
-# receiver_port:
-# description: Port of the message receiver endpoint
-# value: { get_attribute: [ app, data_endpoint, port_name ] }
-
groups:
tran_server_group:
members: [ tran_app, server ]
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/system.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/system.yaml
index 00fb486..f4e10ae 100644
--- a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/system.yaml
+++ b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/system.yaml
@@ -21,8 +21,6 @@ topology_template:
node_templates:
mq:
type: example.QueuingSubsystem
- # properties:
- # to be updated when substitution_mapping is validated later
properties:
server_ip: { get_input: mq_server_ip }
server_port: { get_input: mq_server_port }
@@ -36,9 +34,7 @@ topology_template:
trans1:
type: example.TransactionSubsystem
properties:
- # mq_server_ip: 127.0.0.1
mq_server_ip: { get_attribute: [ mq, server_ip ] }
- # receiver_port: 8080
receiver_port: { get_attribute: [ mq, server_port ] }
# capabilities:
# message_receiver:
@@ -49,9 +45,7 @@ topology_template:
trans2:
type: example.TransactionSubsystem
properties:
- # mq_server_ip: 127.0.0.1
mq_server_ip: { get_attribute: [ mq, server_ip ] }
- # receiver_port: 8080
receiver_port: { get_attribute: [ mq, server_port ] }
# capabilities:
# message_receiver:
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/transactionsubsystem.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/transactionsubsystem.yaml
index 7b839d7..42e100a 100644
--- a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/transactionsubsystem.yaml
+++ b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/transactionsubsystem.yaml
@@ -82,12 +82,6 @@ topology_template:
description: receiver_port of the message receiver application
value: { get_input: receiver_port }
-
-# It seems current _process_intrisic_function can not handle more than 2 arguments, save it for later
-# receiver_port:
-# description: Port of the message receiver endpoint
-# value: { get_attribute: [ app, data_endpoint, port_name ] }
-
groups:
webserver_group:
members: [ websrv, server ]
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/queuingsubsystem_invalid_input.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/queuingsubsystem_invalid_input.yaml
index c54c12c..67ef341 100644
--- a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/queuingsubsystem_invalid_input.yaml
+++ b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/queuingsubsystem_invalid_input.yaml
@@ -39,9 +39,6 @@ topology_template:
substitution_mappings:
node_type: example.QueuingSubsystem
- requirements:
- receiver1: [ tran_app, receiver1 ]
- receiver2: [ tran_app, receiver2 ]
node_templates:
tran_app:
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/system_invalid_missing_output.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/system_invalid_missing_output.yaml
new file mode 100644
index 0000000..2028c38
--- /dev/null
+++ b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/system_invalid_missing_output.yaml
@@ -0,0 +1,24 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+ - transactionsubsystem_invalid_missing_output.yaml
+
+topology_template:
+ description: Test template with invalid missing output.
+
+ inputs:
+ mq_server_ip:
+ type: string
+ default: 127.0.0.1
+ description: IP address of the message queuing server to receive messages from.
+ mq_server_port:
+ type: integer
+ default: 8080
+ description: Port to be used for receiving messages.
+
+ node_templates:
+ trans:
+ type: example.TransactionSubsystem
+ properties:
+ mq_server_ip: { get_input: mq_server_ip }
+ receiver_port: { get_input: mq_server_port }
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/system_invalid_unknown_output.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/system_invalid_unknown_output.yaml
new file mode 100644
index 0000000..de16ca2
--- /dev/null
+++ b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/system_invalid_unknown_output.yaml
@@ -0,0 +1,24 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+ - transactionsubsystem_invalid_unknown_output.yaml
+
+topology_template:
+ description: Test template with invalid unknown output.
+
+ inputs:
+ mq_server_ip:
+ type: string
+ default: 127.0.0.1
+ description: IP address of the message queuing server to receive messages from.
+ mq_server_port:
+ type: integer
+ default: 8080
+ description: Port to be used for receiving messages.
+
+ node_templates:
+ trans:
+ type: example.TransactionSubsystem
+ properties:
+ mq_server_ip: { get_input: mq_server_ip }
+ receiver_port: { get_input: mq_server_port }
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/transactionsubsystem_invalid_missing_output.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/transactionsubsystem_invalid_missing_output.yaml
new file mode 100644
index 0000000..c92e5f8
--- /dev/null
+++ b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/transactionsubsystem_invalid_missing_output.yaml
@@ -0,0 +1,92 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+ This template is a test template which contains invalid output
+ needed for substitution mappings.
+ The outputs defined by the topology template have to match the
+ attributes of the node type or the substituted node template,
+ and the observable attributes of the substituted node template
+ have to be defined as attributes of the node type or outputs in
+ the topology template.
+ But this template misses output of receiver_port which is not
+ defined in node type of example.TransactionSubsystem, so it will
+ be validated error for substitution mappings.
+
+imports:
+ - ../definitions.yaml
+
+topology_template:
+ description: Template of a database including its hosting stack.
+
+ inputs:
+ mq_server_ip:
+ type: string
+ description: IP address of the message queuing server to receive messages from.
+ default: 127.0.0.1
+ receiver_port:
+ type: integer
+ description: Port to be used for receiving messages.
+ default: 8080
+ my_cpus:
+ type: integer
+ description: Number of CPUs for the server.
+ default: 2
+ constraints:
+ - valid_values: [ 1, 2, 4, 8 ]
+
+ substitution_mappings:
+ node_type: example.TransactionSubsystem
+ capabilities:
+ message_receiver: [ app, message_receiver ]
+ requirements:
+ database_endpoint: [ app, database ]
+
+ node_templates:
+ app:
+ type: example.SomeApp
+ properties:
+ admin_user: foo
+ pool_size: 10
+ capabilities:
+ message_receiver:
+ properties:
+ server_ip: { get_input: mq_server_ip }
+ requirements:
+ - host:
+ node: websrv
+
+ websrv:
+ type: tosca.nodes.WebServer
+ capabilities:
+ data_endpoint:
+ properties:
+ port_name: { get_input: receiver_port }
+ requirements:
+ - host:
+ node: server
+
+ server:
+ type: tosca.nodes.Compute
+ capabilities:
+ host:
+ properties:
+ disk_size: 10 GB
+ num_cpus: { get_input: my_cpus }
+ mem_size: 4096 MB
+ os:
+ properties:
+ architecture: x86_64
+ type: Linux
+ distribution: Ubuntu
+ version: 14.04
+
+ outputs:
+ receiver_ip:
+ description: private IP address of the message receiver application
+ value: { get_attribute: [ server, private_address ] }
+
+ # This output is invalid if comment receiver_out out only for
+ # substituion mappings
+# receiver_port:
+# description: receiver_port of the message receiver application
+# value: { get_input: receiver_port }
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/transactionsubsystem_invalid_unknown_output.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/transactionsubsystem_invalid_unknown_output.yaml
new file mode 100644
index 0000000..ffca24b
--- /dev/null
+++ b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/validate/transactionsubsystem_invalid_unknown_output.yaml
@@ -0,0 +1,94 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+ This template is a test template which contains invalid output
+ needed for substitution mappings.
+ The outputs defined by the topology template have to match the
+ attributes of the node type or the substituted node template,
+ and the observable attributes of the substituted node template
+ have to be defined as attributes of the node type or outputs in
+ the topology template.
+ But this template contains output of my_cpu_output which is not
+ defined in node type of example.TransactionSubsystem, so it will
+ be validated error for substitution mappings.
+
+imports:
+ - ../definitions.yaml
+
+topology_template:
+ description: Template of a database including its hosting stack.
+
+ inputs:
+ mq_server_ip:
+ type: string
+ description: IP address of the message queuing server to receive messages from.
+ default: 127.0.0.1
+ receiver_port:
+ type: integer
+ description: Port to be used for receiving messages.
+ default: 8080
+ my_cpus:
+ type: integer
+ description: Number of CPUs for the server.
+ default: 2
+ constraints:
+ - valid_values: [ 1, 2, 4, 8 ]
+
+ substitution_mappings:
+ node_type: example.TransactionSubsystem
+ capabilities:
+ message_receiver: [ app, message_receiver ]
+ requirements:
+ database_endpoint: [ app, database ]
+
+ node_templates:
+ app:
+ type: example.SomeApp
+ properties:
+ admin_user: foo
+ pool_size: 10
+ capabilities:
+ message_receiver:
+ properties:
+ server_ip: { get_input: mq_server_ip }
+ requirements:
+ - host:
+ node: websrv
+
+ websrv:
+ type: tosca.nodes.WebServer
+ capabilities:
+ data_endpoint:
+ properties:
+ port_name: { get_input: receiver_port }
+ requirements:
+ - host:
+ node: server
+
+ server:
+ type: tosca.nodes.Compute
+ capabilities:
+ host:
+ properties:
+ disk_size: 10 GB
+ num_cpus: { get_input: my_cpus }
+ mem_size: 4096 MB
+ os:
+ properties:
+ architecture: x86_64
+ type: Linux
+ distribution: Ubuntu
+ version: 14.04
+
+ outputs:
+ receiver_ip:
+ description: private IP address of the message receiver application
+ value: { get_attribute: [ server, private_address ] }
+
+ receiver_port:
+ description: receiver_port of the message receiver application
+ value: { get_input: receiver_port }
+
+ my_cpu_output:
+ description: this output is only invalid for substitution mappings
+ value: { get_input: my_cpus }
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/test_topology_template.py b/tosca2heat/tosca-parser/toscaparser/tests/test_topology_template.py
index eb8d589..0c26b67 100644
--- a/tosca2heat/tosca-parser/toscaparser/tests/test_topology_template.py
+++ b/tosca2heat/tosca-parser/toscaparser/tests/test_topology_template.py
@@ -262,3 +262,52 @@ class TopologyTemplateTest(TestCase):
lambda: ToscaTemplate(tpl_path1))
exception.ExceptionCollector.assertExceptionMessage(
exception.MissingRequiredInputError, errormsg)
+
+ def test_system_with_unknown_output_validation(self):
+ tpl_path0 = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ "data/topology_template/validate/"
+ "system_invalid_unknown_output.yaml")
+ tpl_path1 = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ "data/topology_template/validate/"
+ "transactionsubsystem_invalid_unknown_output.yaml")
+ errormsg = _('Unknown output "my_cpu_output" in SubstitutionMappings '
+ 'with node_type example.TransactionSubsystem.')
+
+ # It's invalid in nested template.
+ self.assertRaises(exception.ValidationError,
+ lambda: ToscaTemplate(tpl_path0))
+ exception.ExceptionCollector.assertExceptionMessage(
+ exception.UnknownOutputError, errormsg)
+
+ # Subtemplate deploy standaolone is invalid.
+ self.assertRaises(exception.ValidationError,
+ lambda: ToscaTemplate(tpl_path1))
+ exception.ExceptionCollector.assertExceptionMessage(
+ exception.UnknownOutputError, errormsg)
+
+ def test_system_with_missing_output_validation(self):
+ tpl_path0 = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ "data/topology_template/validate/"
+ "system_invalid_missing_output.yaml")
+ tpl_path1 = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)),
+ "data/topology_template/validate/"
+ "transactionsubsystem_invalid_missing_output.yaml")
+ errormsg = _('SubstitutionMappings with node_type '
+ 'example.TransactionSubsystem is missing '
+ 'required output definition of output "receiver_port".')
+
+ # It's invalid in nested template.
+ self.assertRaises(exception.ValidationError,
+ lambda: ToscaTemplate(tpl_path0))
+ exception.ExceptionCollector.assertExceptionMessage(
+ exception.MissingRequiredOutputError, errormsg)
+
+ # Subtemplate deploy standaolone is invalid.
+ self.assertRaises(exception.ValidationError,
+ lambda: ToscaTemplate(tpl_path1))
+ exception.ExceptionCollector.assertExceptionMessage(
+ exception.MissingRequiredOutputError, errormsg)