Adding unit tests
[sdc.git] / common / onap-tosca-datatype / src / test / java / org / onap / sdc / tosca / datatypes / model / NodeTemplateTest.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  * Modifications copyright (c) 2019 Nokia
17  * Modifications copyright (c) 2021 AT&T Intellectual Property
18  */
19
20 package org.onap.sdc.tosca.datatypes.model;
21
22 import java.io.IOException;
23 import java.io.InputStream;
24 import java.util.HashMap;
25 import java.util.LinkedList;
26 import java.util.List;
27 import java.util.Map;
28
29 import static org.junit.jupiter.api.Assertions.assertEquals;
30 import static org.junit.jupiter.api.Assertions.assertNotNull;
31 import static org.junit.jupiter.api.Assertions.assertNull;
32 import org.junit.jupiter.api.Test;
33 import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
34
35 import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanEqualsExcluding;
36 import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanHashCodeExcluding;
37 import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSettersExcluding;
38 import static org.junit.Assert.assertThat;
39
40
41 public class NodeTemplateTest {
42
43     private static final String NODE_WITH_INTERFACE = "nodeWithInterface";
44     public static final String INTERFACE_KEY = "newInterface";
45     public static final String INPUT_KEY = "newInput";
46     public static final String INPUT_VAL = "myVal";
47     public static final String OPER_KEY = "oper1";
48     public static final String MY_WF_JSON = "myWf.json";
49     public static final String STANDARD_INTERFACE_KEY = "Standard";
50     public static final String CREATE_OPER = "create";
51     public static final String NORMALIZE_INTERFACE_DEFINITION = "/mock/nodeTemplate/normalizeInterfaceDefinition.yaml";
52     public static final String INTERFACE_DEFINITION_FOR_UPD_RESULT =
53             "/mock/nodeTemplate/interfaceDefinitionForUpdResult.yaml";
54     public static final String INTERFACE_DEFINITION_FOR_UPD = "/mock/nodeTemplate/interfaceDefinitionForUpd.yaml";
55
56     @Test
57     public void getNormalizeInterfacesTest() throws IOException {
58         ServiceTemplate serviceTemplateFromYaml =
59                 getServiceTemplate(NORMALIZE_INTERFACE_DEFINITION);
60         NodeTemplate nodeTemplate =
61                 serviceTemplateFromYaml.getTopology_template().getNode_templates().get(NODE_WITH_INTERFACE);
62         Map<String, InterfaceDefinitionTemplate> normalizeInterfaces = nodeTemplate.getNormalizeInterfaces();
63         chkData(normalizeInterfaces);
64
65     }
66
67     @Test
68     public void addInterfacesTest() throws IOException {
69         ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
70         ServiceTemplate expectedServiceTemplateFromYaml = getServiceTemplate(INTERFACE_DEFINITION_FOR_UPD_RESULT);
71         ServiceTemplate serviceTemplateForUpdate = getServiceTemplate(INTERFACE_DEFINITION_FOR_UPD);
72         NodeTemplate nodeTemplate =
73                 serviceTemplateForUpdate.getTopology_template().getNode_templates().get(NODE_WITH_INTERFACE);
74         nodeTemplate.addInterface(INTERFACE_KEY, createInterfaceDefinitionTemplate());
75
76         String expectedServiceTemplate = toscaExtensionYamlUtil.objectToYaml(expectedServiceTemplateFromYaml);
77         String actualServiceTemplate = toscaExtensionYamlUtil.objectToYaml(serviceTemplateForUpdate);
78         assertEquals(expectedServiceTemplate, actualServiceTemplate);
79     }
80
81     @Test
82     public void shouldHaveValidGettersAndSetters() {
83         assertThat(NodeTemplate.class, hasValidGettersAndSettersExcluding("requirements", "normalizeInterfaces"));
84     }
85
86     @Test
87     public void shouldHaveValidEquals() {
88         assertThat(NodeTemplate.class, hasValidBeanEqualsExcluding("requirements", "normalizeInterfaces"));
89     }
90
91     @Test
92     public void shouldHaveValidHashCode() {
93         assertThat(NodeTemplate.class, hasValidBeanHashCodeExcluding("requirements", "normalizeInterfaces"));
94     }
95
96     @Test
97     public void setRequirementsTest() throws IOException {
98         ServiceTemplate serviceTemplateForUpdate = getServiceTemplate(INTERFACE_DEFINITION_FOR_UPD);
99         NodeTemplate nodeTemplate =
100                 serviceTemplateForUpdate.getTopology_template().getNode_templates().get(NODE_WITH_INTERFACE);
101         nodeTemplate.addInterface(INTERFACE_KEY, createInterfaceDefinitionTemplate());
102
103         List<RequirementAssignment> requirementAssignmentList = new LinkedList<>();
104         RequirementAssignment requirement1 = new RequirementAssignment();
105         requirement1.setNode("node1");
106         requirement1.setCapability("cap1");
107         requirementAssignmentList.add(requirement1);
108         nodeTemplate.setRequirements(requirementAssignmentList);
109
110         List<Map<String, RequirementAssignment>> res = nodeTemplate.getRequirements();
111         assertNotNull(res);
112         assertEquals(res.size(), 0);
113
114         RequirementAssignment requirement2 = new RequirementAssignment();
115         requirement2.setNode("node2");
116         requirement2.setCapability("cap2");
117         HashMap<String, RequirementAssignment> map = new HashMap<>();
118         map.put("value2", requirement2);
119         nodeTemplate.addRequirements(map);
120         List<Map<String, RequirementAssignment>> res2 = nodeTemplate.getRequirements();
121         assertNotNull(res2);
122         assertEquals(res2.size(), 1);
123         assertEquals(res2.get(0).get("value2"), requirement2);
124     }
125
126     @Test
127     public void addInterfaceTest() throws IOException {
128         ServiceTemplate serviceTemplateForUpdate = getServiceTemplate(INTERFACE_DEFINITION_FOR_UPD);
129         NodeTemplate nodeTemplate =
130                 serviceTemplateForUpdate.getTopology_template().getNode_templates().get(NODE_WITH_INTERFACE);
131         nodeTemplate.addInterface(INTERFACE_KEY, createInterfaceDefinitionTemplate());
132
133         Map<String, Object> res = nodeTemplate.getInterfaces();
134         assertEquals(res.size(), 2);
135         assertNotNull(res.get("Standard"));
136         assertNotNull(res.get(INTERFACE_KEY));
137     }
138
139     @Test
140     public void cloneTest() throws IOException {
141         ServiceTemplate serviceTemplateForUpdate = getServiceTemplate(INTERFACE_DEFINITION_FOR_UPD);
142         NodeTemplate nodeTemplate =
143                 serviceTemplateForUpdate.getTopology_template().getNode_templates().get(NODE_WITH_INTERFACE);
144
145         NodeTemplate res = nodeTemplate.clone();
146         assertEquals(res, nodeTemplate);
147     }
148
149     @Test
150     public void convertToscaRequirementAssignmentTest() throws IOException {
151         List<?> requirementAssignmentObj = new LinkedList<>();
152         List<Map<String, RequirementAssignment>> res = NodeTemplate.convertToscaRequirementAssignment(requirementAssignmentObj);
153         assertNull(res);
154
155         Map<String, Object> map = new HashMap<>();
156         map.put("value1", new RequirementAssignment());
157         Map<String, Object> requirementMap = new HashMap<>();
158         requirementMap.put("capability", "capabilityValue");
159         requirementMap.put("node", "nodeValue");
160         requirementMap.put("relationship", "relationshipValue");
161         requirementMap.put("node_filter", new NodeFilter());
162         Object[] objectArr = {};
163         requirementMap.put("occurrences", objectArr);
164         map.put("value2", requirementMap);
165         ((List<Map<String, Object>>)requirementAssignmentObj).add(map);
166         List<Map<String, RequirementAssignment>> res2 = NodeTemplate.convertToscaRequirementAssignment(requirementAssignmentObj);
167         assertNotNull(res2);
168         assertEquals(res2.size(), 2);
169         assertEquals(res2.get(0).get("value2").getNode(), "nodeValue");
170         assertEquals(res2.get(0).get("value2").getCapability(), "capabilityValue");
171         assertEquals(res2.get(0).get("value2").getRelationship(), "relationshipValue");
172         assertEquals(res2.get(0).get("value2").getOccurrences().length, 0 );
173     }
174
175     private InterfaceDefinitionTemplate createInterfaceDefinitionTemplate() {
176         InterfaceDefinitionTemplate interfaceDefinitionTemplate = new InterfaceDefinitionTemplate();
177         interfaceDefinitionTemplate.setInputs(new HashMap<>());
178         interfaceDefinitionTemplate.getInputs().put(INPUT_KEY, INPUT_VAL);
179         interfaceDefinitionTemplate.addOperation(OPER_KEY, createOperationDefinitionTemplate());
180         return interfaceDefinitionTemplate;
181     }
182
183     private OperationDefinitionTemplate createOperationDefinitionTemplate() {
184         OperationDefinitionTemplate operationDefinitionTemplate = new OperationDefinitionTemplate();
185         operationDefinitionTemplate.setImplementation(createImpl());
186         return operationDefinitionTemplate;
187
188     }
189
190     private Implementation createImpl() {
191         Implementation implementation = new Implementation();
192         implementation.setPrimary(MY_WF_JSON);
193         return implementation;
194     }
195
196     protected InterfaceDefinitionTemplate chkData(Map<String, InterfaceDefinitionTemplate> normalizeInterfaces) {
197         assertNotNull(normalizeInterfaces);
198         InterfaceDefinitionTemplate interfaceDefinitionTemplate = normalizeInterfaces.get(STANDARD_INTERFACE_KEY);
199         assertNotNull(interfaceDefinitionTemplate);
200         assertNotNull(interfaceDefinitionTemplate.getInputs());
201         assertEquals(1, interfaceDefinitionTemplate.getInputs().size());
202         assertNotNull(interfaceDefinitionTemplate.getOperations());
203         assertEquals(1, interfaceDefinitionTemplate.getOperations().size());
204         OperationDefinitionTemplate createOperation = interfaceDefinitionTemplate.getOperations().get(CREATE_OPER);
205         assertNotNull(createOperation);
206         assertNotNull(createOperation.getInputs());
207         return interfaceDefinitionTemplate;
208     }
209
210     protected ServiceTemplate getServiceTemplate(String inputPath) throws IOException {
211         ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
212         try (InputStream yamlFile = toscaExtensionYamlUtil.loadYamlFileIs(inputPath)) {
213             return toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
214         }
215     }
216
217 }