Merge "Improve unit test coverage of ToscaYamlToJsonConvertor"
diff --git a/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java b/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
index 65b95a1..00c9b7d 100644
--- a/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
+++ b/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
@@ -4,6 +4,7 @@
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights
  *                             reserved.
+ * Modifications Copyright (C) 2019 Huawei Technologies Co., Ltd.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,8 +38,7 @@
      * This Test validates TOSCA yaml to JSON Schema conversion based on JSON Editor
      * Schema.
      *
-     * @throws IOException
-     *
+     * @throws IOException In case of issue when opening the tosca yaml file and converted json file
      */
     @Test
     public final void testParseToscaYaml() throws IOException {
@@ -50,4 +50,39 @@
         JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json.json"),
                 parsedJsonSchema, true);
     }
+
+    /**
+     * This Test validates TOSCA yaml with constraints to JSON Schema conversion based on JSON Editor
+     * Schema.
+     *
+     * @throws IOException In case of issue when opening the tosca yaml file and converted json file
+     */
+    @Test
+    public final void testParseToscaYamlWithConstraints() throws IOException {
+        String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca-with-constraints.yaml");
+        ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor();
+
+        String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml);
+        assertNotNull(parsedJsonSchema);
+        JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-constraints" +
+                                                                             ".json"),
+                                parsedJsonSchema, true);
+    }
+
+    /**
+     * This Test validates TOSCA yaml with different datatypes to JSON Schema conversion based on JSON Editor
+     * Schema.
+     *
+     * @throws IOException In case of issue when opening the tosca yaml file and converted json file
+     */
+    @Test
+    public final void testParseToscaYamlWithTypes() throws IOException {
+        String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca-with-datatypes.yaml");
+        ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor();
+
+        String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml);
+        assertNotNull(parsedJsonSchema);
+        JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-datatypes.json"),
+                                parsedJsonSchema, true);
+    }
 }
diff --git a/src/test/resources/tosca/policy-yaml-to-json-with-constraints.json b/src/test/resources/tosca/policy-yaml-to-json-with-constraints.json
new file mode 100644
index 0000000..b257548
--- /dev/null
+++ b/src/test/resources/tosca/policy-yaml-to-json-with-constraints.json
@@ -0,0 +1,63 @@
+{
+    "schema": {
+        "uniqueItems": "true",
+        "format": "tabs-top",
+        "type": "array",
+        "title": "Properties with constraints",
+        "items": {
+            "type": "object",
+            "title": "Properties with constraints",
+            "required": [
+                "cpus",
+                "memSize"
+            ],
+            "properties": {
+                "appPassword": {
+                    "propertyOrder": 1004,
+                    "minLength": 6,
+                    "title": "application password",
+                    "type": "string",
+                    "maxLength": 10
+                },
+                "cost": {
+                    "exclusiveMaximum": 100.5,
+                    "propertyOrder": 1005,
+                    "type": "integer",
+                    "exclusiveMinimum": 50.5
+                },
+                "keylength": {
+                    "propertyOrder": 1007,
+                    "type": "integer",
+                    "enum": [
+                        128,
+                        256
+                    ]
+                },
+                "cpus": {
+                    "propertyOrder": 1001,
+                    "default": 1,
+                    "minLength": 1,
+                    "type": "string",
+                    "maxLength": 4
+                },
+                "ports": {
+                    "propertyOrder": 1002,
+                    "maximum": 9010,
+                    "type": "integer",
+                    "minimum": 9000
+                },
+                "memSize": {
+                    "propertyOrder": 1003,
+                    "maximum": 10,
+                    "title": "memory size",
+                    "type": "integer",
+                    "minimum": 2
+                },
+                "algorithm": {
+                    "propertyOrder": 1006,
+                    "type": "string"
+                }
+            }
+        }
+    }
+}
diff --git a/src/test/resources/tosca/policy-yaml-to-json-with-datatypes.json b/src/test/resources/tosca/policy-yaml-to-json-with-datatypes.json
new file mode 100644
index 0000000..d470d92
--- /dev/null
+++ b/src/test/resources/tosca/policy-yaml-to-json-with-datatypes.json
@@ -0,0 +1,108 @@
+{
+    "schema": {
+        "uniqueItems": "true",
+        "format": "tabs-top",
+        "type": "array",
+        "title": "Properties with different types",
+        "items": {
+            "type": "object",
+            "title": "Properties with different types",
+            "required": [
+                "memSize"
+            ],
+            "properties": {
+                "cpus": {
+                    "propertyOrder": 1001,
+                    "uniqueItems": "true",
+                    "format": "tabs-top",
+                    "type": "array",
+                    "items": {
+                        "type": "object",
+                        "required": [],
+                        "properties": {
+                            "closedLoopControlName": {
+                                "propertyOrder": 1002,
+                                "type": "string"
+                            }
+                        }
+                    }
+                },
+                "domain": {
+                    "propertyOrder": 1009,
+                    "type": "object",
+                    "required": [],
+                    "properties": {
+                        "closedLoopControlName": {
+                            "propertyOrder": 1002,
+                            "type": "string"
+                        }
+                    }
+                },
+                "thresholdValue": {
+                    "propertyOrder": 1007,
+                    "uniqueItems": "true",
+                    "format": "select",
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "ports": {
+                    "propertyOrder": 1003,
+                    "type": "object",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "closedLoopEventStatus": {
+                    "propertyOrder": 1004,
+                    "type": "object",
+                    "items": {
+                        "type": "integer"
+                    }
+                },
+                "version": {
+                    "propertyOrder": 1008,
+                    "uniqueItems": "true",
+                    "format": "tabs-top",
+                    "type": "array",
+                    "items": {
+                        "type": "object",
+                        "required": [],
+                        "properties": {
+                            "closedLoopControlName": {
+                                "propertyOrder": 1002,
+                                "type": "string"
+                            }
+                        }
+                    }
+                },
+                "memSize": {
+                    "propertyOrder": 1006,
+                    "required": [],
+                    "properties": {
+                        "name": {
+                            "propertyOrder": 20002,
+                            "required": [
+                                "severity"
+                            ],
+                            "properties": {
+                                "severity": {
+                                    "propertyOrder": 20003,
+                                    "type": "string"
+                                }
+                            }
+                        }
+                    }
+                },
+                "direction": {
+                    "propertyOrder": 1005,
+                    "type": "object",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/test/resources/tosca/tosca-with-constraints.yaml b/src/test/resources/tosca/tosca-with-constraints.yaml
new file mode 100644
index 0000000..959bc48
--- /dev/null
+++ b/src/test/resources/tosca/tosca-with-constraints.yaml
@@ -0,0 +1,54 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+policy_types:
+    onap.policies.Monitoring:
+        derived_from: tosca.policies.Root
+        description: a base policy type for all policies that governs monitoring provisioning
+    onap.policies.monitoring.example.app:
+        derived_from: onap.policies.Monitoring
+        version: 1.0.0
+        properties:
+            example_policy:
+                type: map
+                description: Properties with constraints
+                entry_schema:
+                    type: onap.datatypes.monitoring.example_policy
+data_types:
+    onap.datatypes.monitoring.example_policy:
+        derived_from: tosca.datatypes.Root
+        properties:
+            cpus:
+                type: string
+                required: true
+                default: 1
+                constraints:
+                  - in_range: [ 1, 4 ] 
+            ports:
+                type: integer
+                constraints:
+                  - in_range: [ 9000, 9010 ]
+            memSize:
+                type: integer
+                required: true
+                description: memory size
+                constraints:
+                  - greater_or_equal: 2
+                  - less_or_equal: 10
+            appPassword:
+                type: string
+                description: application password
+                constraints:
+                    - min_length: 6
+                    - max_length: 10
+            cost:
+                type: float
+                constraints:
+                    - less_than: 100.50
+                    - greater_than: 50.50
+            algorithm: 
+                type: string
+                constraints:
+                    - equal: aes
+            keylength:
+                type: integer
+                constraints:
+                    - valid_values: [ 128, 256 ]
diff --git a/src/test/resources/tosca/tosca-with-datatypes.yaml b/src/test/resources/tosca/tosca-with-datatypes.yaml
new file mode 100644
index 0000000..61d5dbc
--- /dev/null
+++ b/src/test/resources/tosca/tosca-with-datatypes.yaml
@@ -0,0 +1,63 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+policy_types:
+    onap.policies.Monitoring:
+        derived_from: tosca.policies.Root
+        description: a base policy type for all policies that governs monitoring provisioning
+    onap.policies.monitoring.example.app:
+        derived_from: onap.policies.Monitoring
+        version: 1.0.0
+        properties:
+            example_policy:
+                type: map
+                description: Properties with different types
+                entry_schema:
+                    type: onap.datatypes.monitoring.example_policy
+data_types:
+    onap.datatypes.monitoring.example2:
+        derived_from: tosca.datatypes.Root
+        properties:
+            closedLoopControlName:
+                type: string
+    onap.datatypes.monitoring.example3:
+        derived_from: tosca.datatypes.Root
+        properties:
+            name:
+                type: onap.datatypes.monitoring.example4  
+    onap.datatypes.monitoring.example4:
+        derived_from: tosca.datatypes.Root
+        properties:
+            severity:
+                type: string
+                required: true  
+    onap.datatypes.monitoring.example_policy:
+        derived_from: tosca.datatypes.Root
+        properties:
+            cpus:
+                type: list
+                entry_schema:
+                    type: onap.datatypes.monitoring.example2
+            ports:
+                type: map
+                entry_schema:
+                    type: string
+            closedLoopEventStatus:
+                type: map
+                entry_schema:
+                    type: integer
+            direction:
+                type: map
+                entry_schema:
+                    type: float
+            memSize:
+                type: onap.datatypes.monitoring.example3
+                required: true
+            thresholdValue:
+                type: list
+                entry_schema:
+                    type: string
+            version:
+                type: list
+                entry_schema:
+                    type: onap.datatypes.monitoring.example2
+            domain:
+                type: onap.datatypes.monitoring.example2
\ No newline at end of file