2 * Copyright © 2016-2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 * Modifications copyright (c) 2019 Nokia
17 * Modifications copyright (c) 2021 AT&T Intellectual Property
20 package org.onap.sdc.tosca.datatypes.model;
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;
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;
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;
41 public class NodeTemplateTest {
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";
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);
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());
76 String expectedServiceTemplate = toscaExtensionYamlUtil.objectToYaml(expectedServiceTemplateFromYaml);
77 String actualServiceTemplate = toscaExtensionYamlUtil.objectToYaml(serviceTemplateForUpdate);
78 assertEquals(expectedServiceTemplate, actualServiceTemplate);
82 public void shouldHaveValidGettersAndSetters() {
83 assertThat(NodeTemplate.class, hasValidGettersAndSettersExcluding("requirements", "normalizeInterfaces"));
87 public void shouldHaveValidEquals() {
88 assertThat(NodeTemplate.class, hasValidBeanEqualsExcluding("requirements", "normalizeInterfaces"));
92 public void shouldHaveValidHashCode() {
93 assertThat(NodeTemplate.class, hasValidBeanHashCodeExcluding("requirements", "normalizeInterfaces"));
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());
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);
110 List<Map<String, RequirementAssignment>> res = nodeTemplate.getRequirements();
112 assertEquals(res.size(), 0);
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();
122 assertEquals(res2.size(), 1);
123 assertEquals(res2.get(0).get("value2"), requirement2);
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());
133 Map<String, Object> res = nodeTemplate.getInterfaces();
134 assertEquals(res.size(), 2);
135 assertNotNull(res.get("Standard"));
136 assertNotNull(res.get(INTERFACE_KEY));
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);
145 NodeTemplate res = nodeTemplate.clone();
146 assertEquals(res, nodeTemplate);
150 public void convertToscaRequirementAssignmentTest() throws IOException {
151 List<?> requirementAssignmentObj = new LinkedList<>();
152 List<Map<String, RequirementAssignment>> res = NodeTemplate.convertToscaRequirementAssignment(requirementAssignmentObj);
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);
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 );
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;
183 private OperationDefinitionTemplate createOperationDefinitionTemplate() {
184 OperationDefinitionTemplate operationDefinitionTemplate = new OperationDefinitionTemplate();
185 operationDefinitionTemplate.setImplementation(createImpl());
186 return operationDefinitionTemplate;
190 private Implementation createImpl() {
191 Implementation implementation = new Implementation();
192 implementation.setPrimary(MY_WF_JSON);
193 return implementation;
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;
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);