4ad4d2b53ed1d16e7897bdad021d59786eb8409f
[sdc.git] / openecomp-be / lib / openecomp-tosca-lib / src / test / java / org / openecomp / sdc / tosca / datatypes / ToscaModelTest.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.sdc.tosca.datatypes;
18
19 import java.io.IOException;
20 import java.io.InputStream;
21 import java.util.ArrayList;
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25 import java.util.Optional;
26 import org.junit.Assert;
27 import org.junit.Test;
28 import org.onap.sdc.tosca.datatypes.model.ArtifactType;
29 import org.onap.sdc.tosca.datatypes.model.AttributeDefinition;
30 import org.onap.sdc.tosca.datatypes.model.CapabilityAssignment;
31 import org.onap.sdc.tosca.datatypes.model.CapabilityDefinition;
32 import org.onap.sdc.tosca.datatypes.model.CapabilityFilter;
33 import org.onap.sdc.tosca.datatypes.model.Constraint;
34 import org.onap.sdc.tosca.datatypes.model.Directive;
35 import org.onap.sdc.tosca.datatypes.model.Implementation;
36 import org.onap.sdc.tosca.datatypes.model.Import;
37 import org.onap.sdc.tosca.datatypes.model.InterfaceDefinitionTemplate;
38 import org.onap.sdc.tosca.datatypes.model.InterfaceDefinitionType;
39 import org.onap.sdc.tosca.datatypes.model.InterfaceType;
40 import org.onap.sdc.tosca.datatypes.model.NodeFilter;
41 import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
42 import org.onap.sdc.tosca.datatypes.model.NodeType;
43 import org.onap.sdc.tosca.datatypes.model.OperationDefinition;
44 import org.onap.sdc.tosca.datatypes.model.OperationDefinitionTemplate;
45 import org.onap.sdc.tosca.datatypes.model.OperationDefinitionType;
46 import org.onap.sdc.tosca.datatypes.model.ParameterDefinition;
47 import org.onap.sdc.tosca.datatypes.model.PropertyDefinition;
48 import org.onap.sdc.tosca.datatypes.model.PropertyType;
49 import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
50 import org.onap.sdc.tosca.datatypes.model.RequirementDefinition;
51 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
52 import org.onap.sdc.tosca.datatypes.model.SubstitutionMapping;
53 import org.onap.sdc.tosca.datatypes.model.TopologyTemplate;
54 import org.onap.sdc.tosca.datatypes.model.extension.RequirementAssignmentExt;
55 import org.onap.sdc.tosca.datatypes.model.heatextend.ParameterDefinitionExt;
56 import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
57 import org.onap.sdc.tosca.services.YamlUtil;
58 import org.openecomp.sdc.tosca.services.DataModelUtil;
59 import org.openecomp.sdc.tosca.services.ToscaConstants;
60
61
62 public class ToscaModelTest {
63
64     public static final String FIRST_NODE_TEMPLATE = "firstNodeTemplate";
65     public static final String REQ1 = "req1";
66     public static final String REQ2 = "req2";
67     public static final String SERVICE_FILTER_TOSCA_ID = "{get_input=inParam1}";
68     public static final String VMD_NAME = "vmdName";
69     public static final String DIRECTOR = "director";
70     private YamlUtil yamlUtil = new YamlUtil();
71     private ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
72     private static final String INTERFACE_ID = "inter_1";
73     private static final String NODE_TEMPLATE_ID = "firstNodeTemplate";
74     private static final String NODE_TYPE_ID = "compute_node_type";
75     private static final String BASE_DIR = "/mock/model";
76     private static final String ST = "/serviceTemplate.yaml";
77     private static final String ST_WITH_INTERFACE = "/serviceTemplateWithInterface.yaml";
78     private static final String ST_WITH_OPERATIONS = "/serviceTemplateWithInterfaceAndOperation.yaml";
79     private static final String ST_WITH_INTERFACE_DEF = "/serviceTemplateWithNodeTemplateInterface.yaml";
80     private static final String ST_WITH_NODE_INTERFACE_DEF = "/serviceTemplateWithNodeTypeInterface.yaml";
81     private static final String INTERFACE_TYPE_VALUE = "tosca.interfaces.node.lifecycle.Standard";
82     private static final String OPERATION_START = "start";
83     private static final String OPERATION_DESC = "start operation";
84     private static final String IMPLEMENTATION_NAME = "startWorkFlow.json";
85     private static final String PRIMARY_IMPL = "myImpl.yaml";
86     private static final String DEPENDENCY_NAME = "script1.sh";
87     private static final String STRING_TYPE = "string";
88     private static final String ST_WITH_SERVICE_FILTER = "/serviceTemplateWithServiceFilter.yaml";
89     private static final String SUBSTITUTION_MAPPING = "/serviceTemplateWithSubstitutionMapping.yaml";
90     private static final String SUBSTITUTION_MAPPING_WITH_FILTER = "/substitutionMappingWithFilter.yaml";
91
92     @Test
93     public void testServiceTemplateJavaToYaml() {
94         ServiceTemplate serviceTemplate = new ServiceTemplate();
95         Map<String, String> metadata = new HashMap<>();
96         metadata.put("Template_author", "OPENECOMP");
97         metadata.put(ToscaConstants.ST_METADATA_TEMPLATE_NAME, "Test");
98         metadata.put("Template_version", "1.0.0");
99         serviceTemplate.setMetadata(metadata);
100         serviceTemplate.setTosca_definitions_version("tosca_simple_yaml_1_0_0");
101         serviceTemplate.setDescription("testing desc tosca service template");
102
103         Import fileImport1 = new Import();
104         fileImport1.setFile("path1/path2/file1.yaml");
105         Import fileImport2 = new Import();
106         fileImport2.setFile("path1/path2/file2.yaml");
107         List<Map<String, Import>> imports = new ArrayList<>();
108         Map<String, Import> importsMap = new HashMap<>();
109         importsMap.put("myfile1", fileImport1);
110         imports.add(importsMap);
111         importsMap = new HashMap<>();
112         importsMap.put("myfile2", fileImport2);
113         imports.add(importsMap);
114         serviceTemplate.setImports(imports);
115
116         OperationDefinition operationDefinition = new OperationDefinition();
117         operationDefinition.setDescription("test operation");
118         InterfaceType interfaceType = new InterfaceType();
119         interfaceType.setDerived_from("derived_from");
120         interfaceType.setDescription("desc");
121         interfaceType.addOperation("test", operationDefinition);
122         serviceTemplate.addInterfaceType("test_interface", interfaceType);
123
124         ArtifactType artifact = new ArtifactType();
125         artifact.setMime_type("application/java-archive");
126         ArrayList<String> ext = new ArrayList<>();
127         ext.add("yaml");
128         ext.add("xml");
129         artifact.setFile_ext(ext);
130         Map<String, ArtifactType> artifactTypes = new HashMap<>();
131         artifactTypes.put("one_artifact", artifact);
132         serviceTemplate.setArtifact_types(artifactTypes);
133
134         NodeType nodeType = new NodeType();
135         nodeType.setDerived_from("tosca.nodes.Root");
136         nodeType.setVersion("1.0.0");
137         nodeType.setDescription("tosca compute test");
138
139         PropertyDefinition propDef1 = new PropertyDefinition();
140         propDef1.setType("integer");
141         propDef1.setDescription("Number of CPUs requested for a software node instance");
142         propDef1.setRequired(true);
143         propDef1.set_default(1);
144
145         Constraint graterOrEqual = new Constraint();
146         graterOrEqual.setGreater_or_equal((float) 5.0);
147         Constraint constraintEqual = new Constraint();
148         constraintEqual.setEqual(5);
149         Constraint greater_than = new Constraint();
150         greater_than.setGreater_than(6.02);
151         Constraint inRange = new Constraint();
152         inRange.setIn_range(new Object[2]);
153         inRange.getIn_range()[0] = 0;
154         inRange.getIn_range()[1] = ToscaConstants.UNBOUNDED;
155
156         List<Constraint> constraints = new ArrayList<>();
157         constraints.add(graterOrEqual);
158         constraints.add(constraintEqual);
159         constraints.add(greater_than);
160         constraints.add(inRange);
161         propDef1.setConstraints(constraints);
162
163         Map<String, PropertyDefinition> properties = new HashMap<>();
164         properties.put("cpu_num", propDef1);
165         nodeType.setProperties(properties);
166
167         Map<String, AttributeDefinition> attributesDef = new HashMap<>();
168         AttributeDefinition attDef = new AttributeDefinition();
169         attDef.setType(PropertyType.STRING.getDisplayName());
170         attDef.set_default("hi");
171         attributesDef.put("attDef1", attDef);
172         nodeType.setAttributes(attributesDef);
173
174         Map<String, RequirementDefinition> reqsDef = new HashMap<>();
175         RequirementDefinition reqDef = new RequirementDefinition();
176         reqDef.setCapability("tosca.cap1");
177         reqDef.getOccurrences()[0] = 5;
178         reqsDef.put("re1", reqDef);
179         List<Map<String, RequirementDefinition>> reqList = new ArrayList<>();
180         reqList.add(reqsDef);
181         nodeType.setRequirements(reqList);
182
183
184         CapabilityDefinition capdef = new CapabilityDefinition();
185         capdef.setType("tosca.cap");
186         List<String> vvSource = new ArrayList<>();
187         vvSource.add("node1");
188         vvSource.add("node2");
189         capdef.setValid_source_types(vvSource);
190         Map<String, CapabilityDefinition> capsDef = new HashMap<>();
191         capsDef.put("cap1", capdef);
192         nodeType.setCapabilities(capsDef);
193
194         Map<String, NodeType> nodeTypes = new HashMap<>();
195         nodeTypes.put("compute_node_type", nodeType);
196         serviceTemplate.setNode_types(nodeTypes);
197
198         TopologyTemplate topologyTemplate = new TopologyTemplate();
199         topologyTemplate.setDescription("topologi template descroption");
200         ParameterDefinition paramDef = new ParameterDefinition();
201         paramDef.setType(PropertyType.STRING.getDisplayName());
202         paramDef.setDescription("desc");
203         paramDef.set_default("my default val");
204         paramDef.setRequired(false);
205         paramDef.setEntry_schema(DataModelUtil.createEntrySchema("tosca.myType", null, null));
206         List<Constraint> paramConstraint = new ArrayList<>();
207         Constraint paramConst1 = new Constraint();
208         paramConst1.setGreater_than(6);
209         Constraint paramConst2 = new Constraint();
210         paramConst2.setGreater_or_equal(9);
211         paramConstraint.add(paramConst1);
212         paramConstraint.add(paramConst2);
213         paramDef.setConstraints(paramConstraint);
214         Map<String, ParameterDefinition> inputs = new HashMap<>();
215         inputs.put("inParam1", paramDef);
216         topologyTemplate.setInputs(inputs);
217
218         NodeTemplate nodeTemplate = new NodeTemplate();
219         nodeTemplate.setType("nodeTypeRef");
220         List<String> directives = new ArrayList<>();
221         directives.add(Directive.SELECTABLE.getDisplayName());
222         directives.add(Directive.SUBSTITUTABLE.getDisplayName());
223         nodeTemplate.setDirectives(directives);
224         Map<String, Object> nodeTemplateProperties = new HashMap<>();
225         nodeTemplateProperties.put("prop1", "abcd");
226         nodeTemplateProperties.put("prop2", "{ get_input: my_mysql_rootpw }");
227         nodeTemplate.setProperties(nodeTemplateProperties);
228         Map<String, Object> nodeTemplateAtts = new HashMap<>();
229         nodeTemplateAtts.put("att1", "att1Val");
230         nodeTemplateAtts.put("att2", "{ get_input: my_mysql_rootpw }");
231         Map<String, NodeTemplate> nodeTemplates = new HashMap<>();
232         nodeTemplate.setAttributes(nodeTemplateAtts);
233
234
235         RequirementAssignment reqAssignment1 = new RequirementAssignment();
236         reqAssignment1.setNode("nodeA");
237         reqAssignment1.setCapability("capA");
238         reqAssignment1.setRelationship("relationB");
239         Object[] reqAssOccurrences = new Object[2];
240         reqAssOccurrences[0] = 1;
241         reqAssOccurrences[1] = 2;
242         reqAssignment1.setOccurrences(reqAssOccurrences);
243         List<Constraint> propConstraint1 = new ArrayList<>();
244         Constraint propConst1 = new Constraint();
245         propConst1.setGreater_or_equal(9);
246         propConstraint1.add(propConst1);
247         List<Constraint> propConstraint2 = new ArrayList<>();
248         Constraint propConst2 = new Constraint();
249         propConst2.setMin_length(1);
250         propConstraint2.add(propConst2);
251         Constraint propConst3 = new Constraint();
252         propConst3.setMax_length(2);
253         propConstraint2.add(propConst3);
254         List<Map<String, List<Constraint>>> nodeFilterProp = new ArrayList<>();
255         Map<String, List<Constraint>> propsMap = new HashMap<>();
256         propsMap.put("propName1", propConstraint1);
257         propsMap.put("propName2", propConstraint2);
258         nodeFilterProp.add(propsMap);
259         NodeFilter reqNodeFilter = new NodeFilter();
260         reqNodeFilter.setProperties(nodeFilterProp);
261         reqAssignment1.setNode_filter(reqNodeFilter);
262
263         RequirementAssignment reqAssignment2 = new RequirementAssignment();
264         reqAssignment2.setNode("nodeA");
265         reqAssignment2.setCapability("capA");
266         reqAssignment2.setRelationship("relationB");
267         Map<String, RequirementAssignment> nodeTemplateRequirement1 = new HashMap<>();
268         Map<String, RequirementAssignment> nodeTemplateRequirement2 = new HashMap<>();
269         nodeTemplateRequirement1.put(REQ1, reqAssignment1);
270         nodeTemplateRequirement2.put(REQ2, reqAssignment2);
271         nodeTemplate.setRequirements(new ArrayList<>());
272         nodeTemplate.getRequirements().add(nodeTemplateRequirement1);
273         nodeTemplate.getRequirements().add(nodeTemplateRequirement2);
274
275         CapabilityAssignment capAss = new CapabilityAssignment();
276         Map<String, Object> capProps = new HashMap<>();
277         capProps.put("num_cpus", "{ get_input: cpus }");
278         capAss.setProperties(capProps);
279         Map<String, Object> capAtts = new HashMap<>();
280         capAtts.put("num_cpus", "66");
281         capAss.setAttributes(capAtts);
282         Map<String, CapabilityAssignment> nodeTemplateCapability = new HashMap<>();
283         nodeTemplateCapability.put("cap1", capAss);
284         nodeTemplate.setCapabilities(nodeTemplateCapability);
285
286         List<Map<String, List<Constraint>>> nodeFilterProp2 = new ArrayList<>();
287         Map<String, List<Constraint>> propsMap2 = new HashMap<>();
288         Constraint c1 = new Constraint();
289         c1.setEqual("1 MB");
290         List<Constraint> consList = new ArrayList<>();
291         consList.add(c1);
292         propsMap2.put("test1", consList);
293         nodeFilterProp2.add(propsMap2);
294         NodeFilter nodeTemplateNodeFilter = new NodeFilter();
295         nodeTemplateNodeFilter.setProperties(nodeFilterProp2);
296         nodeTemplate.setNode_filter(nodeTemplateNodeFilter);
297         nodeTemplates.put("firatNodeTemplate", nodeTemplate);
298         topologyTemplate.setNode_templates(nodeTemplates);
299
300         SubstitutionMapping subMap = new SubstitutionMapping();
301         subMap.setNode_type("myNodeType.node");
302         Map<String, List<String>> mapCapabilities = new HashMap<>();
303         List<String> nodeCap = new ArrayList<>();
304         nodeCap.add("database");
305         nodeCap.add("database_endpoint");
306         mapCapabilities.put("database_endpoint", nodeCap);
307         subMap.setCapabilities(mapCapabilities);
308         topologyTemplate.setSubstitution_mappings(subMap);
309         serviceTemplate.setTopology_template(topologyTemplate);
310
311         String yaml = new YamlUtil().objectToYaml(serviceTemplate);
312         ServiceTemplate serviceTemplateFromYaml = new YamlUtil().yamlToObject(yaml, ServiceTemplate.class);
313         Assert.assertNotNull(serviceTemplateFromYaml);
314     }
315
316
317   @Test
318   public void testYamlToServiceTemplateObj() throws IOException {
319     ServiceTemplate serviceTemplateFromYaml = getServiceTemplate(BASE_DIR + ST);
320     Assert.assertNotNull(serviceTemplateFromYaml);
321   }
322
323     @Test
324     public void testYamlWithInterfaceToServiceTemplateObj() throws IOException {
325         ServiceTemplate serviceTemplateWithOperation = getServiceTemplate(BASE_DIR + ST_WITH_OPERATIONS);
326         Assert.assertNotNull(serviceTemplateWithOperation);
327
328         InterfaceType expectedInterfaceType = createInterfaceType();
329
330         Map<String, InterfaceType> interfaceTypes = serviceTemplateWithOperation.getNormalizeInterfaceTypes();
331         Assert.assertEquals(1, interfaceTypes.size());
332         InterfaceType actualInterfaceType = interfaceTypes.get(INTERFACE_ID);
333         Assert.assertEquals(expectedInterfaceType, actualInterfaceType);
334     }
335
336     @Test
337     public void testAddOperationToInterface() throws IOException {
338         YamlUtil yamlUtil = new YamlUtil();
339         ServiceTemplate serviceTemplateWithInterface = getServiceTemplate(BASE_DIR + ST_WITH_INTERFACE);
340         ServiceTemplate serviceTemplateWithOperation = getServiceTemplate(BASE_DIR + ST_WITH_OPERATIONS);
341
342         OperationDefinition operationDefinition = createOperationDefinition();
343         InterfaceType normalizeInterfaceType =
344                 serviceTemplateWithInterface.getNormalizeInterfaceTypes().get(INTERFACE_ID);
345         normalizeInterfaceType.addOperation(OPERATION_START, operationDefinition);
346         serviceTemplateWithInterface.addInterfaceType(INTERFACE_ID, normalizeInterfaceType);
347         String expectedServiceTemplate = yamlUtil.objectToYaml(serviceTemplateWithOperation);
348         String actualServiceTemplate = yamlUtil.objectToYaml(serviceTemplateWithInterface);
349         Assert.assertEquals(expectedServiceTemplate, actualServiceTemplate);
350     }
351
352     @Test
353     public void testInterfaceTypeToObjConversion() throws IOException {
354         ServiceTemplate serviceTemplateWithInterface = getServiceTemplate(BASE_DIR + ST_WITH_INTERFACE);
355         ServiceTemplate serviceTemplateWithOperation = getServiceTemplate(BASE_DIR + ST_WITH_OPERATIONS);
356         InterfaceType interfaceType = createInterfaceType();
357
358         Optional<Object> interfaceAsObj = interfaceType.convertInterfaceTypeToToscaObj();
359         Assert.assertTrue(interfaceAsObj.isPresent());
360
361         Map<String, Object> interfaceTypes = new HashMap<>();
362         interfaceTypes.put(INTERFACE_ID, interfaceAsObj.get());
363         serviceTemplateWithInterface.setInterface_types(interfaceTypes);
364
365         String expectedServiceTemplate = yamlUtil.objectToYaml(serviceTemplateWithOperation);
366         String actualServiceTemplate = yamlUtil.objectToYaml(serviceTemplateWithInterface);
367         Assert.assertEquals(expectedServiceTemplate, actualServiceTemplate);
368     }
369
370     @Test
371     public void testObjToInterfaceTypeConversion() throws IOException, ReflectiveOperationException {
372         ServiceTemplate serviceTemplateWithOperation = getServiceTemplate(BASE_DIR + ST_WITH_OPERATIONS);
373         Map<String, InterfaceType> interfaceTypes = serviceTemplateWithOperation.getNormalizeInterfaceTypes();
374         InterfaceType actualInterfaceType = interfaceTypes.get(INTERFACE_ID);
375         InterfaceType expectedInterfaceType = createInterfaceType();
376         Assert.assertEquals(expectedInterfaceType, actualInterfaceType);
377     }
378
379     @Test
380     public void testObjToInterfaceDefinitionTypeConversion() throws IOException, ReflectiveOperationException {
381         ServiceTemplate serviceTemplateWithInterfaceDef = getServiceTemplate(BASE_DIR + ST_WITH_NODE_INTERFACE_DEF);
382         NodeType nodeTypeWithInterface = DataModelUtil.getNodeType(serviceTemplateWithInterfaceDef, NODE_TYPE_ID);
383         Map<String, Object> interfaces = nodeTypeWithInterface.getInterfaces();
384         Object interfaceObj = interfaces.get(INTERFACE_ID);
385
386         InterfaceDefinitionType actualInterfaceDefinition = new InterfaceDefinitionType(interfaceObj);
387         InterfaceDefinitionType expectedInterfaceDefinitionType = createInterfaceDefinitionType();
388         Assert.assertEquals(expectedInterfaceDefinitionType, actualInterfaceDefinition);
389     }
390
391     @Test
392     public void testObjToInterfaceDefinitionTemplateConversion() throws IOException {
393         ServiceTemplate serviceTemplateWithInterfaceDef = getServiceTemplate(BASE_DIR + ST_WITH_INTERFACE_DEF);
394         NodeTemplate nodeTemplateWithInterface =
395                 DataModelUtil.getNodeTemplate(serviceTemplateWithInterfaceDef, NODE_TEMPLATE_ID);
396         Map<String, Object> interfaces = nodeTemplateWithInterface.getInterfaces();
397         Object interfaceObj = interfaces.get(INTERFACE_ID);
398
399         InterfaceDefinitionTemplate actualInterfaceDefinition = new InterfaceDefinitionTemplate(interfaceObj);
400         InterfaceDefinitionTemplate expectedInterfaceDefinitionTemplate = createInterfaceDefinitionTemplate();
401         Assert.assertEquals(expectedInterfaceDefinitionTemplate, actualInterfaceDefinition);
402     }
403
404     @Test
405     public void testYamlToServiceTemplateIncludingHeatExtend() throws IOException {
406         ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
407         try (InputStream yamlFile = toscaExtensionYamlUtil
408                                             .loadYamlFileIs(BASE_DIR + "/serviceTemplateHeatExtend.yaml")) {
409             ServiceTemplate serviceTemplateFromYaml =
410                     toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
411             ParameterDefinitionExt parameterDefinitionExt =
412                     (ParameterDefinitionExt) serviceTemplateFromYaml.getTopology_template().getInputs().get("inParam1");
413             Assert.assertNotNull(parameterDefinitionExt.getLabel());
414             String backToYamlString = toscaExtensionYamlUtil.objectToYaml(serviceTemplateFromYaml);
415             Assert.assertNotNull(backToYamlString);
416         }
417     }
418
419     @Test
420     public void testServiceFilter() throws IOException {
421         ServiceTemplate serviceTemplateWithServiceFilter = getServiceTemplateExt(BASE_DIR + ST_WITH_SERVICE_FILTER);
422
423         NodeTemplate firstNodeTemplate =
424                 DataModelUtil.getNodeTemplate(serviceTemplateWithServiceFilter, FIRST_NODE_TEMPLATE);
425         Map<String, RequirementAssignment> nodeTemplateRequirements =
426                 DataModelUtil.getNodeTemplateRequirements(firstNodeTemplate);
427
428         Object req1 = nodeTemplateRequirements.get(REQ1);
429         Assert.assertTrue(req1 instanceof RequirementAssignmentExt);
430         Assert.assertNotNull(((RequirementAssignmentExt) req1).getService_filter());
431         List<Map<String, List<Constraint>>> properties =
432                 ((RequirementAssignmentExt) req1).getService_filter().getProperties();
433         Assert.assertNotNull(properties);
434         List<Constraint> vmdNameConstrain = properties.get(0).get(VMD_NAME);
435         Assert.assertNotNull(vmdNameConstrain);
436         Assert.assertNotNull(vmdNameConstrain.get(0).getEqual());
437
438         List<Map<String, CapabilityFilter>> capabilities =
439                 ((RequirementAssignmentExt) req1).getService_filter().getCapabilities();
440         Assert.assertNotNull(capabilities);
441         CapabilityFilter capabilityFilter = capabilities.get(0).get(DIRECTOR);
442         Assert.assertNotNull(capabilityFilter);
443         Assert.assertNotNull(capabilityFilter.getProperties());
444
445
446         Object req2 = nodeTemplateRequirements.get(REQ2);
447         Assert.assertTrue(req2 instanceof RequirementAssignmentExt);
448         Assert.assertNotNull(((RequirementAssignmentExt) req2).getService_filter());
449         Object toscaId = ((RequirementAssignmentExt) req2).getService_filter().getTosca_id();
450         Assert.assertNotNull(toscaId);
451         Assert.assertEquals(SERVICE_FILTER_TOSCA_ID, toscaId.toString());
452
453
454         String serviceTemplateYaml = toscaExtensionYamlUtil.objectToYaml(serviceTemplateWithServiceFilter);
455         Assert.assertNotNull(serviceTemplateYaml);
456
457     }
458
459     @Test
460     public void testSubstitutionMapping() throws IOException {
461         final ServiceTemplate serviceTemplate = getServiceTemplateExt(BASE_DIR + SUBSTITUTION_MAPPING);
462         final SubstitutionMapping substitutionMappings = DataModelUtil.getSubstitutionMappings(serviceTemplate);
463         Assert.assertEquals("myNodeType.node", substitutionMappings.getNode_type());
464         Assert.assertNotNull(substitutionMappings.getCapabilities());
465         Assert.assertEquals(1,substitutionMappings.getCapabilities().size());
466         Assert.assertNotNull(substitutionMappings.getRequirements());
467         Assert.assertEquals(1,substitutionMappings.getRequirements().size());
468         Assert.assertNull(substitutionMappings.getSubstitution_filter());
469     }
470
471     @Test
472     public void testSubstitutionMappingWithFilter() throws IOException {
473         final ServiceTemplate serviceTemplate = getServiceTemplateExt(BASE_DIR + SUBSTITUTION_MAPPING_WITH_FILTER);
474
475         final SubstitutionMapping substitutionMappings = DataModelUtil.getSubstitutionMappings(serviceTemplate);
476         Assert.assertEquals("myNodeType.node", substitutionMappings.getNode_type());
477         Assert.assertNotNull(substitutionMappings.getCapabilities());
478         Assert.assertEquals(1,substitutionMappings.getCapabilities().size());
479         Assert.assertNotNull(substitutionMappings.getRequirements());
480         Assert.assertEquals(1,substitutionMappings.getRequirements().size());
481         final NodeFilter substitutionFilter = substitutionMappings.getSubstitution_filter();
482         Assert.assertNotNull(substitutionFilter);
483         Assert.assertNotNull(substitutionFilter.getProperties());
484         Assert.assertEquals(2,substitutionFilter.getProperties().size());
485         final List<Constraint> vendorFilter = substitutionFilter.getProperties().get(0).get("vendor");
486         Assert.assertNotNull(vendorFilter);
487         Assert.assertNotNull(vendorFilter.get(0).getEqual());
488     }
489
490     private ServiceTemplate getServiceTemplate(String inputPath) throws IOException {
491         try (InputStream yamlFile = yamlUtil.loadYamlFileIs(inputPath)) {
492             return yamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
493         }
494     }
495
496     private ServiceTemplate getServiceTemplateExt(String inputPath) throws IOException {
497         try (InputStream yamlFile = toscaExtensionYamlUtil.loadYamlFileIs(inputPath)) {
498             return toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
499         }
500     }
501
502     private InterfaceType createInterfaceType() {
503         OperationDefinition operationDefinition = createOperationDefinition();
504         InterfaceType interfaceType = new InterfaceType();
505         interfaceType.setDescription("test interface");
506         interfaceType.addOperation(OPERATION_START, operationDefinition);
507         return interfaceType;
508     }
509
510     private OperationDefinition createOperationDefinition() {
511         OperationDefinition operationDefinition = new OperationDefinition();
512         operationDefinition.setDescription(OPERATION_DESC);
513         return operationDefinition;
514     }
515
516     private InterfaceDefinitionType createInterfaceDefinitionType() {
517         OperationDefinitionType operationDefinitionType = createOperationDefinitionType();
518         InterfaceDefinitionType interfaceDefinitionType = new InterfaceDefinitionType();
519         interfaceDefinitionType.setType(INTERFACE_TYPE_VALUE);
520         interfaceDefinitionType.addOperation(OPERATION_START, operationDefinitionType);
521         return interfaceDefinitionType;
522     }
523
524     private InterfaceDefinitionTemplate createInterfaceDefinitionTemplate() {
525         OperationDefinitionTemplate operationDefinitionTemplate = createOperationDefinitionTemplate();
526         InterfaceDefinitionTemplate interfaceDefinitionTemplate = new InterfaceDefinitionTemplate();
527         interfaceDefinitionTemplate.addOperation(OPERATION_START, operationDefinitionTemplate);
528         return interfaceDefinitionTemplate;
529     }
530
531     private OperationDefinitionTemplate createOperationDefinitionTemplate() {
532         OperationDefinitionTemplate operationDefinitionTemplate = new OperationDefinitionTemplate();
533         operationDefinitionTemplate.setDescription(OPERATION_DESC);
534         Implementation implementation = new Implementation();
535         implementation.setPrimary(PRIMARY_IMPL);
536         List<String> dependencies = new ArrayList<>();
537         dependencies.add(DEPENDENCY_NAME);
538         implementation.setDependencies(dependencies);
539         operationDefinitionTemplate.setImplementation(implementation);
540         return operationDefinitionTemplate;
541     }
542
543     private OperationDefinitionType createOperationDefinitionType() {
544         OperationDefinitionType operationDefinitionType = new OperationDefinitionType();
545         operationDefinitionType.setDescription(OPERATION_DESC);
546         operationDefinitionType.setImplementation(IMPLEMENTATION_NAME);
547         PropertyDefinition propertyDefinition = new PropertyDefinition();
548         propertyDefinition.setType(STRING_TYPE);
549         return operationDefinitionType;
550     }
551 }
552
553
554
555
556
557