2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.tosca.datatypes;
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;
49 import java.io.InputStream;
50 import java.util.ArrayList;
51 import java.util.HashMap;
52 import java.util.List;
56 public class ToscaModelTest {
59 public void testServiceTemplateJavaToYaml() {
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");
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);
82 ArtifactType artifact = new ArtifactType();
83 artifact.setMime_type("application/java-archive");
84 ArrayList<String> ext = new ArrayList<>();
87 artifact.setFile_ext(ext);
88 Map<String, ArtifactType> artifactTypes = new HashMap<>();
89 artifactTypes.put("one_artifact", artifact);
90 serviceTemplate.setArtifact_types(artifactTypes);
92 NodeType nodeType = new NodeType();
93 nodeType.setDerived_from("tosca.nodes.Root");
94 nodeType.setVersion("1.0.0");
95 nodeType.setDescription("tosca compute test");
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);
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;
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);
121 Map<String, PropertyDefinition> properties = new HashMap<>();
122 properties.put("cpu_num", propDef1);
123 nodeType.setProperties(properties);
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);
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);
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);
152 Map<String, NodeType> nodeTypes = new HashMap<>();
153 nodeTypes.put("compute_node_type", nodeType);
154 serviceTemplate.setNode_types(nodeTypes);
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);
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);
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);
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);
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);
243 NodeFilter nodeTemplateNodeFilter = new NodeFilter();
244 Map<String, List<Constraint>> ntProp = new HashMap<>();
245 Constraint c1 = new Constraint();
247 List<Constraint> consList = new ArrayList<>();
249 ntProp.put("test1", consList);
250 nodeTemplateNodeFilter.setProperties(ntProp);
251 nodeTemplate.setNode_filter(nodeTemplateNodeFilter);
252 nodeTemplates.put("firatNodeTemplate", nodeTemplate);
253 topologyTemplate.setNode_templates(nodeTemplates);
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);
266 String yaml = new YamlUtil().objectToYaml(serviceTemplate);
267 ServiceTemplate serviceTemplateFromYaml =
268 new YamlUtil().yamlToObject(yaml, ServiceTemplate.class);
269 Assert.assertNotNull(serviceTemplateFromYaml);
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);
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()
292 Assert.assertNotNull(parameterDefinitionExt.getLabel());
293 String backToYamlString = toscaExtensionYamlUtil.objectToYaml(serviceTemplateFromYaml);
294 Assert.assertNotNull(backToYamlString);