c7b0659c21cd6329f46ae71c46fbebdd4d5392af
[sdc.git] / openecomp-be / lib / openecomp-tosca-lib / src / test / java / org / openecomp / sdc / tosca / datatypes / ToscaModelTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.tosca.datatypes;
22
23 import org.junit.Assert;
24 import org.junit.Test;
25 import org.openecomp.core.utilities.yaml.YamlUtil;
26 import org.openecomp.sdc.tosca.datatypes.model.ArtifactType;
27 import org.openecomp.sdc.tosca.datatypes.model.AttributeDefinition;
28 import org.openecomp.sdc.tosca.datatypes.model.CapabilityAssignment;
29 import org.openecomp.sdc.tosca.datatypes.model.CapabilityDefinition;
30 import org.openecomp.sdc.tosca.datatypes.model.Constraint;
31 import org.openecomp.sdc.tosca.datatypes.model.Directive;
32 import org.openecomp.sdc.tosca.datatypes.model.Import;
33 import org.openecomp.sdc.tosca.datatypes.model.NodeFilter;
34 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
35 import org.openecomp.sdc.tosca.datatypes.model.NodeType;
36 import org.openecomp.sdc.tosca.datatypes.model.ParameterDefinition;
37 import org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition;
38 import org.openecomp.sdc.tosca.datatypes.model.PropertyType;
39 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
40 import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
41 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
42 import org.openecomp.sdc.tosca.datatypes.model.SubstitutionMapping;
43 import org.openecomp.sdc.tosca.datatypes.model.TopologyTemplate;
44 import org.openecomp.sdc.tosca.datatypes.model.heatextend.ParameterDefinitionExt;
45 import org.openecomp.sdc.tosca.services.DataModelUtil;
46 import org.openecomp.sdc.tosca.services.ToscaConstants;
47 import org.openecomp.sdc.tosca.services.yamlutil.ToscaExtensionYamlUtil;
48
49 import java.io.InputStream;
50 import java.util.ArrayList;
51 import java.util.HashMap;
52 import java.util.List;
53 import java.util.Map;
54
55
56 public class ToscaModelTest {
57
58   @Test
59   public void testServiceTemplateJavaToYaml() {
60
61     ServiceTemplate serviceTemplate = new ServiceTemplate();
62     Map<String, String> metadata = new HashMap<>();
63     metadata.put("Template_author", "OPENECOMP");
64     metadata.put(ToscaConstants.ST_METADATA_TEMPLATE_NAME, "Test");
65     metadata.put("Template_version", "1.0.0");
66     serviceTemplate.setTosca_definitions_version("tosca_simple_yaml_1_0_0");
67     serviceTemplate.setDescription("testing desc tosca service template");
68
69     Import fileImport1 = new Import();
70     fileImport1.setFile("path1/path2/file1.yaml");
71     Import fileImport2 = new Import();
72     fileImport2.setFile("path1/path2/file2.yaml");
73     List<Map<String, Import>> imports = new ArrayList<>();
74     Map<String, Import> importsMap = new HashMap<>();
75     importsMap.put("myfile1", fileImport1);
76     imports.add(importsMap);
77     importsMap = new HashMap<>();
78     importsMap.put("myfile2", fileImport2);
79     imports.add(importsMap);
80     serviceTemplate.setImports(imports);
81
82     ArtifactType artifact = new ArtifactType();
83     artifact.setMime_type("application/java-archive");
84     ArrayList<String> ext = new ArrayList<>();
85     ext.add("yaml");
86     ext.add("xml");
87     artifact.setFile_ext(ext);
88     Map<String, ArtifactType> artifactTypes = new HashMap<>();
89     artifactTypes.put("one_artifact", artifact);
90     serviceTemplate.setArtifact_types(artifactTypes);
91
92     NodeType nodeType = new NodeType();
93     nodeType.setDerived_from("tosca.nodes.Root");
94     nodeType.setVersion("1.0.0");
95     nodeType.setDescription("tosca compute test");
96
97     PropertyDefinition propDef1 = new PropertyDefinition();
98     propDef1.setType("integer");
99     propDef1.setDescription("Number of CPUs requested for a software node instance");
100     propDef1.setRequired(true);
101     propDef1.set_default(1);
102
103     Constraint graterOrEqual = new Constraint();
104     graterOrEqual.setGreater_or_equal((float) 5.0);
105     Constraint constraintEqual = new Constraint();
106     constraintEqual.setEqual(5);
107     Constraint greater_than = new Constraint();
108     greater_than.setGreater_than(6.02);
109     Constraint inRange = new Constraint();
110     inRange.setIn_range(new Object[2]);
111     inRange.getIn_range()[0] = 0;
112     inRange.getIn_range()[1] = ToscaConstants.UNBOUNDED;
113
114     List<Constraint> constraints = new ArrayList<>();
115     constraints.add(graterOrEqual);
116     constraints.add(constraintEqual);
117     constraints.add(greater_than);
118     constraints.add(inRange);
119     propDef1.setConstraints(constraints);
120
121     Map<String, PropertyDefinition> properties = new HashMap<>();
122     properties.put("cpu_num", propDef1);
123     nodeType.setProperties(properties);
124
125     Map<String, AttributeDefinition> attributesDef = new HashMap<>();
126     AttributeDefinition attDef = new AttributeDefinition();
127     attDef.setType(PropertyType.STRING.getDisplayName());
128     attDef.set_default("hi");
129     attributesDef.put("attDef1", attDef);
130     nodeType.setAttributes(attributesDef);
131
132     Map<String, RequirementDefinition> reqsDef = new HashMap<>();
133     RequirementDefinition reqDef = new RequirementDefinition();
134     reqDef.setCapability("tosca.cap1");
135     reqDef.getOccurrences()[0] = 5;
136     reqsDef.put("re1", reqDef);
137     List<Map<String, RequirementDefinition>> reqList = new ArrayList<>();
138     reqList.add(reqsDef);
139     nodeType.setRequirements(reqList);
140
141
142     Map<String, CapabilityDefinition> capsDef = new HashMap<>();
143     CapabilityDefinition capdef = new CapabilityDefinition();
144     capdef.setType("tosca.cap");
145     List<String> vvSource = new ArrayList<>();
146     vvSource.add("node1");
147     vvSource.add("node2");
148     capdef.setValid_source_types(vvSource);
149     capsDef.put("cap1", capdef);
150     nodeType.setCapabilities(capsDef);
151
152     Map<String, NodeType> nodeTypes = new HashMap<>();
153     nodeTypes.put("compute_node_type", nodeType);
154     serviceTemplate.setNode_types(nodeTypes);
155
156     TopologyTemplate topologyTemplate = new TopologyTemplate();
157     topologyTemplate.setDescription("topologi template descroption");
158     Map<String, ParameterDefinition> inputs = new HashMap<>();
159     ParameterDefinition paramDef = new ParameterDefinition();
160     paramDef.setType(PropertyType.STRING.getDisplayName());
161     paramDef.setDescription("desc");
162     paramDef.set_default("my default val");
163     paramDef.setRequired(false);
164     paramDef.setEntry_schema(DataModelUtil.createEntrySchema("tosca.myType", null, null));
165     List<Constraint> paramConstraint = new ArrayList<>();
166     Constraint paramConst1 = new Constraint();
167     paramConst1.setGreater_than(6);
168     Constraint paramConst2 = new Constraint();
169     paramConst2.setGreater_or_equal(9);
170     paramConstraint.add(paramConst1);
171     paramConstraint.add(paramConst2);
172     paramDef.setConstraints(paramConstraint);
173     inputs.put("inParam1", paramDef);
174     topologyTemplate.setInputs(inputs);
175
176     Map<String, NodeTemplate> nodeTemplates = new HashMap<>();
177     NodeTemplate nodeTemplate = new NodeTemplate();
178     nodeTemplate.setType("nodeTypeRef");
179     List<String> directives = new ArrayList<>();
180     directives.add(Directive.SELECTABLE.getDisplayName());
181     directives.add(Directive.SUBSTITUTABLE.getDisplayName());
182     nodeTemplate.setDirectives(directives);
183     Map<String, Object> nodeTemplateProperties = new HashMap<>();
184     nodeTemplateProperties.put("prop1", "abcd");
185     nodeTemplateProperties.put("prop2", "{ get_input: my_mysql_rootpw }");
186     nodeTemplate.setProperties(nodeTemplateProperties);
187     Map<String, Object> nodeTemplateAtts = new HashMap<>();
188     nodeTemplateAtts.put("att1", "att1Val");
189     nodeTemplateAtts.put("att2", "{ get_input: my_mysql_rootpw }");
190     nodeTemplate.setAttributes(nodeTemplateAtts);
191
192
193     RequirementAssignment reqAssignment1 = new RequirementAssignment();
194     reqAssignment1.setNode("nodeA");
195     reqAssignment1.setCapability("capA");
196     reqAssignment1.setRelationship("relationB");
197     Object[] reqAssOccurrences = new Object[2];
198     reqAssOccurrences[0] = 1;
199     reqAssOccurrences[1] = 2;
200     reqAssignment1.setOccurrences(reqAssOccurrences);
201     NodeFilter reqNodeFilter = new NodeFilter();
202     List<Constraint> propConstrain1 = new ArrayList<>();
203     Constraint propConst1 = new Constraint();
204     propConst1.setGreater_or_equal(9);
205     propConstrain1.add(propConst1);
206     List<Constraint> propConstrain2 = new ArrayList<>();
207     Constraint propConst2 = new Constraint();
208     propConst2.setMin_length(1);
209     propConstrain2.add(propConst2);
210     Constraint propConst3 = new Constraint();
211     propConst3.setMax_length(2);
212     propConstrain2.add(propConst3);
213     Map<String, List<Constraint>> nodeFilterProp = new HashMap<>();
214     nodeFilterProp.put("propName1", propConstrain1);
215     nodeFilterProp.put("propName2", propConstrain2);
216     reqNodeFilter.setProperties(nodeFilterProp);
217     reqAssignment1.setNode_filter(reqNodeFilter);
218
219     RequirementAssignment reqAssignment2 = new RequirementAssignment();
220     reqAssignment2.setNode("nodeA");
221     reqAssignment2.setCapability("capA");
222     reqAssignment2.setRelationship("relationB");
223     Map<String, RequirementAssignment> nodeTemplateRequirement1 = new HashMap<>();
224     Map<String, RequirementAssignment> nodeTemplateRequirement2 = new HashMap<>();
225     nodeTemplateRequirement1.put("req1", reqAssignment1);
226     nodeTemplateRequirement2.put("req2", reqAssignment2);
227     nodeTemplate.setRequirements(new ArrayList<>());
228     nodeTemplate.getRequirements().add(nodeTemplateRequirement1);
229     nodeTemplate.getRequirements().add(nodeTemplateRequirement2);
230
231     Map<String, CapabilityAssignment> nodeTemplateCapability = new HashMap<>();
232     CapabilityAssignment capAss = new CapabilityAssignment();
233     Map<String, Object> capProps = new HashMap<>();
234     capProps.put("num_cpus", "{ get_input: cpus }");
235     capAss.setProperties(capProps);
236     Map<String, Object> capAtts = new HashMap<>();
237     capAtts.put("num_cpus", "66");
238     capAss.setAttributes(capAtts);
239     nodeTemplateCapability.put("cap1", capAss);
240     nodeTemplate.setCapabilities(new ArrayList<>());
241     nodeTemplate.getCapabilities().add(nodeTemplateCapability);
242
243     NodeFilter nodeTemplateNodeFilter = new NodeFilter();
244     Map<String, List<Constraint>> ntProp = new HashMap<>();
245     Constraint c1 = new Constraint();
246     c1.setEqual("1 MB");
247     List<Constraint> consList = new ArrayList<>();
248     consList.add(c1);
249     ntProp.put("test1", consList);
250     nodeTemplateNodeFilter.setProperties(ntProp);
251     nodeTemplate.setNode_filter(nodeTemplateNodeFilter);
252     nodeTemplates.put("firatNodeTemplate", nodeTemplate);
253     topologyTemplate.setNode_templates(nodeTemplates);
254
255     SubstitutionMapping subMap = new SubstitutionMapping();
256     subMap.setNode_type("myNodeType.node");
257     Map<String, List<String>> mapCapabilities = new HashMap<>();
258     List<String> NodeCap = new ArrayList<>();
259     NodeCap.add("database");
260     NodeCap.add("database_endpoint");
261     mapCapabilities.put("database_endpoint", NodeCap);
262     subMap.setCapabilities(mapCapabilities);
263     topologyTemplate.setSubstitution_mappings(subMap);
264     serviceTemplate.setTopology_template(topologyTemplate);
265
266     String yaml = new YamlUtil().objectToYaml(serviceTemplate);
267     ServiceTemplate serviceTemplateFromYaml =
268         new YamlUtil().yamlToObject(yaml, ServiceTemplate.class);
269     Assert.assertNotNull(serviceTemplateFromYaml);
270   }
271
272
273   @Test
274   public void testYamlToServiceTemplateObj() {
275     InputStream yamlFile = new YamlUtil().loadYamlFileIs("/mock/model/serviceTemplate.yaml");
276     ServiceTemplate serviceTemplateFromYaml =
277         new YamlUtil().yamlToObject(yamlFile, ServiceTemplate.class);
278     Assert.assertNotNull(serviceTemplateFromYaml);
279   }
280
281
282   @Test
283   public void testYamlToServiceTemplateIncludingHeatExtend() {
284     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
285     InputStream yamlFile =
286         toscaExtensionYamlUtil.loadYamlFileIs("/mock/model/serviceTemplateHeatExtend.yaml");
287     ServiceTemplate serviceTemplateFromYaml =
288         toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
289     ParameterDefinitionExt parameterDefinitionExt =
290         (ParameterDefinitionExt) serviceTemplateFromYaml.getTopology_template().getInputs()
291             .get("inParam1");
292     Assert.assertNotNull(parameterDefinitionExt.getLabel());
293     String backToYamlString = toscaExtensionYamlUtil.objectToYaml(serviceTemplateFromYaml);
294     Assert.assertNotNull(backToYamlString);
295   }
296
297 }
298
299
300
301
302
303