1 package org.openecomp.sdc.tosca.datatypes;
3 import org.openecomp.sdc.tosca.datatypes.model.ArtifactType;
4 import org.openecomp.sdc.tosca.datatypes.model.AttributeDefinition;
5 import org.openecomp.sdc.tosca.datatypes.model.CapabilityAssignment;
6 import org.openecomp.sdc.tosca.datatypes.model.CapabilityDefinition;
7 import org.openecomp.sdc.tosca.datatypes.model.Constraint;
8 import org.openecomp.sdc.tosca.datatypes.model.Directive;
9 import org.openecomp.sdc.tosca.datatypes.model.Import;
10 import org.openecomp.sdc.tosca.datatypes.model.Metadata;
11 import org.openecomp.sdc.tosca.datatypes.model.NodeFilter;
12 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
13 import org.openecomp.sdc.tosca.datatypes.model.NodeType;
14 import org.openecomp.sdc.tosca.datatypes.model.ParameterDefinition;
15 import org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition;
16 import org.openecomp.sdc.tosca.datatypes.model.PropertyType;
17 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
18 import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
19 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
20 import org.openecomp.sdc.tosca.datatypes.model.SubstitutionMapping;
21 import org.openecomp.sdc.tosca.datatypes.model.TopologyTemplate;
22 import org.openecomp.sdc.tosca.datatypes.model.heatextend.ParameterDefinitionExt;
23 import org.openecomp.sdc.tosca.services.DataModelUtil;
24 import org.openecomp.sdc.tosca.services.ToscaConstants;
25 import org.openecomp.sdc.tosca.services.yamlutil.ToscaExtensionYamlUtil;
26 import org.openecomp.core.utilities.yaml.YamlUtil;
27 import org.junit.Assert;
28 import org.junit.Test;
31 import java.io.InputStream;
32 import java.util.ArrayList;
33 import java.util.HashMap;
34 import java.util.List;
38 public class ToscaModelTest {
41 public void testServiceTemplateJavaToYaml() {
43 ServiceTemplate serviceTemplate = new ServiceTemplate();
44 Metadata metadata = new Metadata();
45 metadata.setTemplate_author("OPENECOMP");
46 metadata.setTemplate_name("Test");
47 metadata.setTemplate_version("1.0.0");
48 serviceTemplate.setTosca_definitions_version("tosca_simple_yaml_1_0_0");
49 serviceTemplate.setDescription("testing desc tosca service template");
50 serviceTemplate.setMetadata(metadata);
52 Import fileImport1 = new Import();
53 fileImport1.setFile("path1/path2/file1.yaml");
54 Import fileImport2 = new Import();
55 fileImport2.setFile("path1/path2/file2.yaml");
56 Map<String, Import> imports = new HashMap<>();
57 imports.put("myfile1", fileImport1);
58 imports.put("myfile2", fileImport2);
59 serviceTemplate.setImports(imports);
61 ArtifactType artifact = new ArtifactType();
62 artifact.setMime_type("application/java-archive");
63 ArrayList<String> ext = new ArrayList<>();
66 artifact.setFile_ext(ext);
67 Map<String, ArtifactType> artifactTypes = new HashMap<>();
68 artifactTypes.put("one_artifact", artifact);
69 serviceTemplate.setArtifact_types(artifactTypes);
71 NodeType nodeType = new NodeType();
72 nodeType.setDerived_from("tosca.nodes.Root");
73 nodeType.setVersion("1.0.0");
74 nodeType.setDescription("tosca compute test");
76 PropertyDefinition propDef1 = new PropertyDefinition();
77 propDef1.setType("integer");
78 propDef1.setDescription("Number of CPUs requested for a software node instance");
79 propDef1.setRequired(true);
80 propDef1.set_default(1);
82 Constraint graterOrEqual = new Constraint();
83 graterOrEqual.setGreater_or_equal((float) 5.0);
84 Constraint constraintEqual = new Constraint();
85 constraintEqual.setEqual(5);
86 Constraint greater_than = new Constraint();
87 greater_than.setGreater_than(6.02);
88 Constraint inRange = new Constraint();
89 inRange.setIn_range(new Object[2]);
90 inRange.getIn_range()[0] = 0;
91 inRange.getIn_range()[1] = ToscaConstants.UNBOUNDED;
93 List<Constraint> constraints = new ArrayList<>();
94 constraints.add(graterOrEqual);
95 constraints.add(constraintEqual);
96 constraints.add(greater_than);
97 constraints.add(inRange);
98 propDef1.setConstraints(constraints);
100 Map<String, PropertyDefinition> properties = new HashMap<>();
101 properties.put("cpu_num", propDef1);
102 nodeType.setProperties(properties);
104 Map<String, AttributeDefinition> attributesDef = new HashMap<>();
105 AttributeDefinition attDef = new AttributeDefinition();
106 attDef.setType(PropertyType.STRING.getDisplayName());
107 attDef.set_default("hi");
108 attributesDef.put("attDef1", attDef);
109 nodeType.setAttributes(attributesDef);
111 Map<String, RequirementDefinition> reqsDef = new HashMap<>();
112 RequirementDefinition reqDef = new RequirementDefinition();
113 reqDef.setCapability("tosca.cap1");
114 reqDef.getOccurrences()[0] = 5;
115 reqsDef.put("re1", reqDef);
116 List<Map<String, RequirementDefinition>> reqList = new ArrayList<>();
117 reqList.add(reqsDef);
118 nodeType.setRequirements(reqList);
121 Map<String, CapabilityDefinition> capsDef = new HashMap<>();
122 CapabilityDefinition capdef = new CapabilityDefinition();
123 capdef.setType("tosca.cap");
124 List<String> vvSource = new ArrayList<>();
125 vvSource.add("node1");
126 vvSource.add("node2");
127 capdef.setValid_source_types(vvSource);
128 capsDef.put("cap1", capdef);
129 nodeType.setCapabilities(capsDef);
131 Map<String, NodeType> nodeTypes = new HashMap<>();
132 nodeTypes.put("compute_node_type", nodeType);
133 serviceTemplate.setNode_types(nodeTypes);
135 TopologyTemplate topologyTemplate = new TopologyTemplate();
136 topologyTemplate.setDescription("topologi template descroption");
137 Map<String, ParameterDefinition> inputs = new HashMap<>();
138 ParameterDefinition paramDef = new ParameterDefinition();
139 paramDef.setType(PropertyType.STRING.getDisplayName());
140 paramDef.setDescription("desc");
141 paramDef.set_default("my default val");
142 paramDef.setRequired(false);
143 paramDef.setEntry_schema(DataModelUtil.createEntrySchema("tosca.myType", null, null));
144 List<Constraint> paramConstraint = new ArrayList<>();
145 Constraint paramConst1 = new Constraint();
146 paramConst1.setGreater_than(6);
147 Constraint paramConst2 = new Constraint();
148 paramConst2.setGreater_or_equal(9);
149 paramConstraint.add(paramConst1);
150 paramConstraint.add(paramConst2);
151 paramDef.setConstraints(paramConstraint);
152 inputs.put("inParam1", paramDef);
153 topologyTemplate.setInputs(inputs);
155 Map<String, NodeTemplate> nodeTemplates = new HashMap<>();
156 NodeTemplate nodeTemplate = new NodeTemplate();
157 nodeTemplate.setType("nodeTypeRef");
158 List<String> directives = new ArrayList<>();
159 directives.add(Directive.SELECTABLE.getDisplayName());
160 directives.add(Directive.SUBSTITUTABLE.getDisplayName());
161 nodeTemplate.setDirectives(directives);
162 Map<String, Object> nodeTemplateProperties = new HashMap<>();
163 nodeTemplateProperties.put("prop1", "abcd");
164 nodeTemplateProperties.put("prop2", "{ get_input: my_mysql_rootpw }");
165 nodeTemplate.setProperties(nodeTemplateProperties);
166 Map<String, Object> nodeTemplateAtts = new HashMap<>();
167 nodeTemplateAtts.put("att1", "att1Val");
168 nodeTemplateAtts.put("att2", "{ get_input: my_mysql_rootpw }");
169 nodeTemplate.setAttributes(nodeTemplateAtts);
172 RequirementAssignment reqAssignment1 = new RequirementAssignment();
173 reqAssignment1.setNode("nodeA");
174 reqAssignment1.setCapability("capA");
175 reqAssignment1.setRelationship("relationB");
176 Object[] reqAssOccurrences = new Object[2];
177 reqAssOccurrences[0] = 1;
178 reqAssOccurrences[1] = 2;
179 reqAssignment1.setOccurrences(reqAssOccurrences);
180 NodeFilter reqNodeFilter = new NodeFilter();
181 List<Constraint> propConstrain1 = new ArrayList<>();
182 Constraint propConst1 = new Constraint();
183 propConst1.setGreater_or_equal(9);
184 propConstrain1.add(propConst1);
185 List<Constraint> propConstrain2 = new ArrayList<>();
186 Constraint propConst2 = new Constraint();
187 propConst2.setMin_length(1);
188 propConstrain2.add(propConst2);
189 Constraint propConst3 = new Constraint();
190 propConst3.setMax_length(2);
191 propConstrain2.add(propConst3);
192 Map<String, List<Constraint>> nodeFilterProp = new HashMap<>();
193 nodeFilterProp.put("propName1", propConstrain1);
194 nodeFilterProp.put("propName2", propConstrain2);
195 reqNodeFilter.setProperties(nodeFilterProp);
196 reqAssignment1.setNode_filter(reqNodeFilter);
198 RequirementAssignment reqAssignment2 = new RequirementAssignment();
199 reqAssignment2.setNode("nodeA");
200 reqAssignment2.setCapability("capA");
201 reqAssignment2.setRelationship("relationB");
202 Map<String, RequirementAssignment> nodeTemplateRequirement1 = new HashMap<>();
203 Map<String, RequirementAssignment> nodeTemplateRequirement2 = new HashMap<>();
204 nodeTemplateRequirement1.put("req1", reqAssignment1);
205 nodeTemplateRequirement2.put("req2", reqAssignment2);
206 nodeTemplate.setRequirements(new ArrayList<>());
207 nodeTemplate.getRequirements().add(nodeTemplateRequirement1);
208 nodeTemplate.getRequirements().add(nodeTemplateRequirement2);
210 Map<String, CapabilityAssignment> nodeTemplateCapability = new HashMap<>();
211 CapabilityAssignment capAss = new CapabilityAssignment();
212 Map<String, Object> capProps = new HashMap<>();
213 capProps.put("num_cpus", "{ get_input: cpus }");
214 capAss.setProperties(capProps);
215 Map<String, Object> capAtts = new HashMap<>();
216 capAtts.put("num_cpus", "66");
217 capAss.setAttributes(capAtts);
218 nodeTemplateCapability.put("cap1", capAss);
219 nodeTemplate.setCapabilities(new ArrayList<>());
220 nodeTemplate.getCapabilities().add(nodeTemplateCapability);
222 NodeFilter nodeTemplateNodeFilter = new NodeFilter();
223 Map<String, List<Constraint>> ntProp = new HashMap<>();
224 Constraint c1 = new Constraint();
226 List<Constraint> consList = new ArrayList<>();
228 ntProp.put("test1", consList);
229 nodeTemplateNodeFilter.setProperties(ntProp);
230 nodeTemplate.setNode_filter(nodeTemplateNodeFilter);
231 nodeTemplates.put("firatNodeTemplate", nodeTemplate);
232 topologyTemplate.setNode_templates(nodeTemplates);
234 SubstitutionMapping subMap = new SubstitutionMapping();
235 subMap.setNode_type("myNodeType.node");
236 Map<String, List<String>> mapCapabilities = new HashMap<>();
237 List<String> NodeCap = new ArrayList<>();
238 NodeCap.add("database");
239 NodeCap.add("database_endpoint");
240 mapCapabilities.put("database_endpoint", NodeCap);
241 subMap.setCapabilities(mapCapabilities);
242 topologyTemplate.setSubstitution_mappings(subMap);
243 serviceTemplate.setTopology_template(topologyTemplate);
245 String yaml = new YamlUtil().objectToYaml(serviceTemplate);
246 ServiceTemplate serviceTemplateFromYaml =
247 new YamlUtil().yamlToObject(yaml, ServiceTemplate.class);
248 Assert.assertNotNull(serviceTemplateFromYaml);
253 public void testYamlToServiceTemplateObj() {
254 InputStream yamlFile = new YamlUtil().loadYamlFileIs("/mock/model/serviceTemplate.yaml");
255 ServiceTemplate serviceTemplateFromYaml =
256 new YamlUtil().yamlToObject(yamlFile, ServiceTemplate.class);
257 Assert.assertNotNull(serviceTemplateFromYaml);
262 public void testYamlToServiceTemplateIncludingHeatExtend() {
263 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
264 InputStream yamlFile =
265 toscaExtensionYamlUtil.loadYamlFileIs("/mock/model/serviceTemplateHeatExtend.yaml");
266 ServiceTemplate serviceTemplateFromYaml =
267 toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
268 ParameterDefinitionExt parameterDefinitionExt =
269 (ParameterDefinitionExt) serviceTemplateFromYaml.getTopology_template().getInputs()
271 Assert.assertNotNull(parameterDefinitionExt.getLabel());
272 String backToYamlString = toscaExtensionYamlUtil.objectToYaml(serviceTemplateFromYaml);
273 Assert.assertNotNull(backToYamlString);