change capabilities datatype
[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.sdc.tosca.datatypes.model.ArtifactType;
26 import org.openecomp.sdc.tosca.datatypes.model.AttributeDefinition;
27 import org.openecomp.sdc.tosca.datatypes.model.CapabilityAssignment;
28 import org.openecomp.sdc.tosca.datatypes.model.CapabilityDefinition;
29 import org.openecomp.sdc.tosca.datatypes.model.Constraint;
30 import org.openecomp.sdc.tosca.datatypes.model.Directive;
31 import org.openecomp.sdc.tosca.datatypes.model.Import;
32 import org.openecomp.sdc.tosca.datatypes.model.NodeFilter;
33 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
34 import org.openecomp.sdc.tosca.datatypes.model.NodeType;
35 import org.openecomp.sdc.tosca.datatypes.model.ParameterDefinition;
36 import org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition;
37 import org.openecomp.sdc.tosca.datatypes.model.PropertyType;
38 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
39 import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
40 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
41 import org.openecomp.sdc.tosca.datatypes.model.SubstitutionMapping;
42 import org.openecomp.sdc.tosca.datatypes.model.TopologyTemplate;
43 import org.openecomp.sdc.tosca.datatypes.model.heatextend.ParameterDefinitionExt;
44 import org.openecomp.sdc.tosca.services.DataModelUtil;
45 import org.openecomp.sdc.tosca.services.ToscaConstants;
46 import org.openecomp.sdc.tosca.services.ToscaExtensionYamlUtil;
47 import org.openecomp.sdc.tosca.services.YamlUtil;
48
49 import java.io.IOException;
50 import java.io.InputStream;
51 import java.util.ArrayList;
52 import java.util.HashMap;
53 import java.util.List;
54 import java.util.Map;
55
56
57 public class ToscaModelTest {
58
59   @Test
60   public void testServiceTemplateJavaToYaml() {
61
62     ServiceTemplate serviceTemplate = new ServiceTemplate();
63     Map<String, String> metadata = new HashMap<>();
64     metadata.put("Template_author", "OPENECOMP");
65     metadata.put(ToscaConstants.ST_METADATA_TEMPLATE_NAME, "Test");
66     metadata.put("Template_version", "1.0.0");
67     serviceTemplate.setTosca_definitions_version("tosca_simple_yaml_1_0_0");
68     serviceTemplate.setDescription("testing desc tosca service template");
69
70     Import fileImport1 = new Import();
71     fileImport1.setFile("path1/path2/file1.yaml");
72     Import fileImport2 = new Import();
73     fileImport2.setFile("path1/path2/file2.yaml");
74     List<Map<String, Import>> imports = new ArrayList<>();
75     Map<String, Import> importsMap = new HashMap<>();
76     importsMap.put("myfile1", fileImport1);
77     imports.add(importsMap);
78     importsMap = new HashMap<>();
79     importsMap.put("myfile2", fileImport2);
80     imports.add(importsMap);
81     serviceTemplate.setImports(imports);
82
83     ArtifactType artifact = new ArtifactType();
84     artifact.setMime_type("application/java-archive");
85     ArrayList<String> ext = new ArrayList<>();
86     ext.add("yaml");
87     ext.add("xml");
88     artifact.setFile_ext(ext);
89     Map<String, ArtifactType> artifactTypes = new HashMap<>();
90     artifactTypes.put("one_artifact", artifact);
91     serviceTemplate.setArtifact_types(artifactTypes);
92
93     NodeType nodeType = new NodeType();
94     nodeType.setDerived_from("tosca.nodes.Root");
95     nodeType.setVersion("1.0.0");
96     nodeType.setDescription("tosca compute test");
97
98     PropertyDefinition propDef1 = new PropertyDefinition();
99     propDef1.setType("integer");
100     propDef1.setDescription("Number of CPUs requested for a software node instance");
101     propDef1.setRequired(true);
102     propDef1.set_default(1);
103
104     Constraint graterOrEqual = new Constraint();
105     graterOrEqual.setGreater_or_equal((float) 5.0);
106     Constraint constraintEqual = new Constraint();
107     constraintEqual.setEqual(5);
108     Constraint greater_than = new Constraint();
109     greater_than.setGreater_than(6.02);
110     Constraint inRange = new Constraint();
111     inRange.setIn_range(new Object[2]);
112     inRange.getIn_range()[0] = 0;
113     inRange.getIn_range()[1] = ToscaConstants.UNBOUNDED;
114
115     List<Constraint> constraints = new ArrayList<>();
116     constraints.add(graterOrEqual);
117     constraints.add(constraintEqual);
118     constraints.add(greater_than);
119     constraints.add(inRange);
120     propDef1.setConstraints(constraints);
121
122     Map<String, PropertyDefinition> properties = new HashMap<>();
123     properties.put("cpu_num", propDef1);
124     nodeType.setProperties(properties);
125
126     Map<String, AttributeDefinition> attributesDef = new HashMap<>();
127     AttributeDefinition attDef = new AttributeDefinition();
128     attDef.setType(PropertyType.STRING.getDisplayName());
129     attDef.set_default("hi");
130     attributesDef.put("attDef1", attDef);
131     nodeType.setAttributes(attributesDef);
132
133     Map<String, RequirementDefinition> reqsDef = new HashMap<>();
134     RequirementDefinition reqDef = new RequirementDefinition();
135     reqDef.setCapability("tosca.cap1");
136     reqDef.getOccurrences()[0] = 5;
137     reqsDef.put("re1", reqDef);
138     List<Map<String, RequirementDefinition>> reqList = new ArrayList<>();
139     reqList.add(reqsDef);
140     nodeType.setRequirements(reqList);
141
142
143     Map<String, CapabilityDefinition> capsDef = new HashMap<>();
144     CapabilityDefinition capdef = new CapabilityDefinition();
145     capdef.setType("tosca.cap");
146     List<String> vvSource = new ArrayList<>();
147     vvSource.add("node1");
148     vvSource.add("node2");
149     capdef.setValid_source_types(vvSource);
150     capsDef.put("cap1", capdef);
151     nodeType.setCapabilities(capsDef);
152
153     Map<String, NodeType> nodeTypes = new HashMap<>();
154     nodeTypes.put("compute_node_type", nodeType);
155     serviceTemplate.setNode_types(nodeTypes);
156
157     TopologyTemplate topologyTemplate = new TopologyTemplate();
158     topologyTemplate.setDescription("topologi template descroption");
159     Map<String, ParameterDefinition> inputs = new HashMap<>();
160     ParameterDefinition paramDef = new ParameterDefinition();
161     paramDef.setType(PropertyType.STRING.getDisplayName());
162     paramDef.setDescription("desc");
163     paramDef.set_default("my default val");
164     paramDef.setRequired(false);
165     paramDef.setEntry_schema(DataModelUtil.createEntrySchema("tosca.myType", null, null));
166     List<Constraint> paramConstraint = new ArrayList<>();
167     Constraint paramConst1 = new Constraint();
168     paramConst1.setGreater_than(6);
169     Constraint paramConst2 = new Constraint();
170     paramConst2.setGreater_or_equal(9);
171     paramConstraint.add(paramConst1);
172     paramConstraint.add(paramConst2);
173     paramDef.setConstraints(paramConstraint);
174     inputs.put("inParam1", paramDef);
175     topologyTemplate.setInputs(inputs);
176
177     Map<String, NodeTemplate> nodeTemplates = new HashMap<>();
178     NodeTemplate nodeTemplate = new NodeTemplate();
179     nodeTemplate.setType("nodeTypeRef");
180     List<String> directives = new ArrayList<>();
181     directives.add(Directive.SELECTABLE.getDisplayName());
182     directives.add(Directive.SUBSTITUTABLE.getDisplayName());
183     nodeTemplate.setDirectives(directives);
184     Map<String, Object> nodeTemplateProperties = new HashMap<>();
185     nodeTemplateProperties.put("prop1", "abcd");
186     nodeTemplateProperties.put("prop2", "{ get_input: my_mysql_rootpw }");
187     nodeTemplate.setProperties(nodeTemplateProperties);
188     Map<String, Object> nodeTemplateAtts = new HashMap<>();
189     nodeTemplateAtts.put("att1", "att1Val");
190     nodeTemplateAtts.put("att2", "{ get_input: my_mysql_rootpw }");
191     nodeTemplate.setAttributes(nodeTemplateAtts);
192
193
194     RequirementAssignment reqAssignment1 = new RequirementAssignment();
195     reqAssignment1.setNode("nodeA");
196     reqAssignment1.setCapability("capA");
197     reqAssignment1.setRelationship("relationB");
198     Object[] reqAssOccurrences = new Object[2];
199     reqAssOccurrences[0] = 1;
200     reqAssOccurrences[1] = 2;
201     reqAssignment1.setOccurrences(reqAssOccurrences);
202     NodeFilter reqNodeFilter = new NodeFilter();
203     List<Constraint> propConstrain1 = new ArrayList<>();
204     Constraint propConst1 = new Constraint();
205     propConst1.setGreater_or_equal(9);
206     propConstrain1.add(propConst1);
207     List<Constraint> propConstrain2 = new ArrayList<>();
208     Constraint propConst2 = new Constraint();
209     propConst2.setMin_length(1);
210     propConstrain2.add(propConst2);
211     Constraint propConst3 = new Constraint();
212     propConst3.setMax_length(2);
213     propConstrain2.add(propConst3);
214     Map<String, List<Constraint>> nodeFilterProp = new HashMap<>();
215     nodeFilterProp.put("propName1", propConstrain1);
216     nodeFilterProp.put("propName2", propConstrain2);
217     reqNodeFilter.setProperties(nodeFilterProp);
218     reqAssignment1.setNode_filter(reqNodeFilter);
219
220     RequirementAssignment reqAssignment2 = new RequirementAssignment();
221     reqAssignment2.setNode("nodeA");
222     reqAssignment2.setCapability("capA");
223     reqAssignment2.setRelationship("relationB");
224     Map<String, RequirementAssignment> nodeTemplateRequirement1 = new HashMap<>();
225     Map<String, RequirementAssignment> nodeTemplateRequirement2 = new HashMap<>();
226     nodeTemplateRequirement1.put("req1", reqAssignment1);
227     nodeTemplateRequirement2.put("req2", reqAssignment2);
228     nodeTemplate.setRequirements(new ArrayList<>());
229     nodeTemplate.getRequirements().add(nodeTemplateRequirement1);
230     nodeTemplate.getRequirements().add(nodeTemplateRequirement2);
231
232     Map<String, CapabilityAssignment> nodeTemplateCapability = new HashMap<>();
233     CapabilityAssignment capAss = new CapabilityAssignment();
234     Map<String, Object> capProps = new HashMap<>();
235     capProps.put("num_cpus", "{ get_input: cpus }");
236     capAss.setProperties(capProps);
237     Map<String, Object> capAtts = new HashMap<>();
238     capAtts.put("num_cpus", "66");
239     capAss.setAttributes(capAtts);
240     nodeTemplateCapability.put("cap1", capAss);
241     nodeTemplate.setCapabilities(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() throws IOException {
275     try (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
283   @Test
284   public void testYamlToServiceTemplateIncludingHeatExtend() throws IOException {
285     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
286     try (InputStream yamlFile =
287         toscaExtensionYamlUtil.loadYamlFileIs("/mock/model/serviceTemplateHeatExtend.yaml")) {
288       ServiceTemplate serviceTemplateFromYaml =
289               toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
290       ParameterDefinitionExt parameterDefinitionExt =
291               (ParameterDefinitionExt) serviceTemplateFromYaml.getTopology_template().getInputs()
292                       .get("inParam1");
293       Assert.assertNotNull(parameterDefinitionExt.getLabel());
294       String backToYamlString = toscaExtensionYamlUtil.objectToYaml(serviceTemplateFromYaml);
295       Assert.assertNotNull(backToYamlString);
296     }
297   }
298
299 }
300
301
302
303
304
305