push addional code
[sdc.git] / openecomp-be / lib / openecomp-tosca-lib / src / test / java / org / openecomp / sdc / tosca / datatypes / ToscaModelTest.java
1 package org.openecomp.sdc.tosca.datatypes;
2
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;
29
30
31 import java.io.InputStream;
32 import java.util.ArrayList;
33 import java.util.HashMap;
34 import java.util.List;
35 import java.util.Map;
36
37
38 public class ToscaModelTest {
39
40   @Test
41   public void testServiceTemplateJavaToYaml() {
42
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);
51
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);
60
61     ArtifactType artifact = new ArtifactType();
62     artifact.setMime_type("application/java-archive");
63     ArrayList<String> ext = new ArrayList<>();
64     ext.add("yaml");
65     ext.add("xml");
66     artifact.setFile_ext(ext);
67     Map<String, ArtifactType> artifactTypes = new HashMap<>();
68     artifactTypes.put("one_artifact", artifact);
69     serviceTemplate.setArtifact_types(artifactTypes);
70
71     NodeType nodeType = new NodeType();
72     nodeType.setDerived_from("tosca.nodes.Root");
73     nodeType.setVersion("1.0.0");
74     nodeType.setDescription("tosca compute test");
75
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);
81
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;
92
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);
99
100     Map<String, PropertyDefinition> properties = new HashMap<>();
101     properties.put("cpu_num", propDef1);
102     nodeType.setProperties(properties);
103
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);
110
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);
119
120
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);
130
131     Map<String, NodeType> nodeTypes = new HashMap<>();
132     nodeTypes.put("compute_node_type", nodeType);
133     serviceTemplate.setNode_types(nodeTypes);
134
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);
154
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);
170
171
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);
197
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);
209
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);
221
222     NodeFilter nodeTemplateNodeFilter = new NodeFilter();
223     Map<String, List<Constraint>> ntProp = new HashMap<>();
224     Constraint c1 = new Constraint();
225     c1.setEqual("1 MB");
226     List<Constraint> consList = new ArrayList<>();
227     consList.add(c1);
228     ntProp.put("test1", consList);
229     nodeTemplateNodeFilter.setProperties(ntProp);
230     nodeTemplate.setNode_filter(nodeTemplateNodeFilter);
231     nodeTemplates.put("firatNodeTemplate", nodeTemplate);
232     topologyTemplate.setNode_templates(nodeTemplates);
233
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);
244
245     String yaml = new YamlUtil().objectToYaml(serviceTemplate);
246     ServiceTemplate serviceTemplateFromYaml =
247         new YamlUtil().yamlToObject(yaml, ServiceTemplate.class);
248     Assert.assertNotNull(serviceTemplateFromYaml);
249   }
250
251
252   @Test
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);
258   }
259
260
261   @Test
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()
270             .get("inParam1");
271     Assert.assertNotNull(parameterDefinitionExt.getLabel());
272     String backToYamlString = toscaExtensionYamlUtil.objectToYaml(serviceTemplateFromYaml);
273     Assert.assertNotNull(backToYamlString);
274   }
275
276 }
277
278
279
280
281
282