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.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;
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;
57 public class ToscaModelTest {
60 public void testServiceTemplateJavaToYaml() {
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");
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);
83 ArtifactType artifact = new ArtifactType();
84 artifact.setMime_type("application/java-archive");
85 ArrayList<String> ext = new ArrayList<>();
88 artifact.setFile_ext(ext);
89 Map<String, ArtifactType> artifactTypes = new HashMap<>();
90 artifactTypes.put("one_artifact", artifact);
91 serviceTemplate.setArtifact_types(artifactTypes);
93 NodeType nodeType = new NodeType();
94 nodeType.setDerived_from("tosca.nodes.Root");
95 nodeType.setVersion("1.0.0");
96 nodeType.setDescription("tosca compute test");
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);
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;
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);
122 Map<String, PropertyDefinition> properties = new HashMap<>();
123 properties.put("cpu_num", propDef1);
124 nodeType.setProperties(properties);
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);
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);
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);
153 Map<String, NodeType> nodeTypes = new HashMap<>();
154 nodeTypes.put("compute_node_type", nodeType);
155 serviceTemplate.setNode_types(nodeTypes);
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);
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);
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);
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);
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);
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() 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);
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()
293 Assert.assertNotNull(parameterDefinitionExt.getLabel());
294 String backToYamlString = toscaExtensionYamlUtil.objectToYaml(serviceTemplateFromYaml);
295 Assert.assertNotNull(backToYamlString);