2 * Copyright © 2016-2019 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 package org.openecomp.sdc.be.tosca;
18 import com.google.common.collect.ImmutableList;
19 import fj.data.Either;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mockito.InjectMocks;
24 import org.mockito.Mock;
25 import org.mockito.Mockito;
26 import org.mockito.Spy;
27 import org.mockito.junit.MockitoJUnitRunner;
29 import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition;
30 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
31 import org.openecomp.sdc.be.model.CapabilityDefinition;
32 import org.openecomp.sdc.be.model.Component;
33 import org.openecomp.sdc.be.model.ComponentInstance;
34 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
35 import org.openecomp.sdc.be.model.ComponentParametersView;
36 import org.openecomp.sdc.be.model.GroupDefinition;
37 import org.openecomp.sdc.be.model.RequirementDefinition;
38 import org.openecomp.sdc.be.model.Resource;
39 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
40 import org.openecomp.sdc.be.tosca.model.ToscaNodeTemplate;
41 import org.openecomp.sdc.be.tosca.model.ToscaTemplateCapability;
43 import java.util.ArrayList;
44 import java.util.Collections;
45 import java.util.HashMap;
46 import java.util.List;
48 import java.util.stream.Collectors;
50 import static org.assertj.core.api.Assertions.assertThat;
51 import static org.junit.Assert.assertEquals;
52 import static org.junit.Assert.assertFalse;
53 import static org.junit.Assert.assertNotNull;
54 import static org.junit.Assert.assertTrue;
55 import static org.mockito.ArgumentMatchers.any;
56 import static org.mockito.ArgumentMatchers.eq;
57 import static org.mockito.Mockito.when;
59 @RunWith(MockitoJUnitRunner.class)
60 public class CapabilityRequirementConverterTest {
63 private ToscaOperationFacade toscaOperationFacade;
65 private PropertyConvertor propertyConvertor;
68 private CapabilityRequirementConverter capabilityRequirementConverter;
71 private ComponentInstance instanceProxy = new ComponentInstance();
73 private ComponentInstance vfInstance = new ComponentInstance();
75 private Component vfComponent = new Resource();
77 private ComponentInstance vfcInstance = new ComponentInstance();
79 private Component vfcComponent = new Resource();
81 private static final String VF_INSTANCE_NAME = "vepdgtp4837vf0";
82 private static final String VF_INSTANCE_NORMALIZED_NAME = "vepdgtp4837vf0";
83 private static final String VF_INSTANCE_UNIQUE_ID = "5f172af9-1588-443e-8897-1432b19aad8c.2cb7514a-1e50-4280-8457-baacb97b50bf.vepdgtp4837vf0";
84 private static final String VF_COMPONENT_NAME = "vepdgtp4837vf0";
86 private static final String VFC_INSTANCE_UNIQUE_ID = "41d3a665-1313-4b5e-9bf0-e901ecf4b806.a77df84e-83eb-4edc-9823-d1f9f6549693.lb_1";
87 private static final String VFC_INSTANCE_NAME = "41d3a665-1313-4b5e-9bf0-e901ecf4b806.a77df84e-83eb-4edc-9823-d1f9f6549693.lb_1";
88 private static final String VFC_INSTANCE_NORMALIZED_NAME = "lb_1";
89 private static final String VFC_COMPONENT_NAME = "clb_1";
91 private static final String ORIGIN_NAME = "vepdgtp4837svc_proxy0";
93 private static final String OWNER_ID = "41d3a665-1313-4b5e-9bf0-e901ecf4b806.a77df84e-83eb-4edc-9823-d1f9f6549693";
94 private static final String DATA_DEFINITION_NAME = "name";
96 private static final String GROUP_NAME = "groupName";
98 private static final String PROPERTY_VALUE = "propValue";
99 private static final String PROPERTY_NAME = "propName";
102 public void clean() {
103 instanceProxy = Mockito.spy(new ComponentInstance());
104 vfInstance = Mockito.spy(new ComponentInstance());
105 vfcInstance = Mockito.spy(new ComponentInstance());
106 vfComponent = Mockito.spy(new Resource());
107 vfcComponent = Mockito.spy(new Resource());
111 public void testGetInstance() {
112 assertNotNull(CapabilityRequirementConverter.getInstance());
116 public void testGetReducedPathByOwner() {
117 List<String> pathList = new ArrayList<>();
118 String uniqueId = "41d3a665-1313-4b5e-9bf0-e901ecf4b806.a77df84e-83eb-4edc-9823-d1f9f6549693.lb_2";
120 String duplicate = "a77df84e-83eb-4edc-9823-d1f9f6549693.c79e9a4a-b172-4323-a2e2-1c48d6603241.lb_swu_direct_4_rvmi";
121 pathList.add(VFC_INSTANCE_UNIQUE_ID);
122 pathList.add(duplicate);
123 pathList.add(duplicate);
124 pathList.add(uniqueId);
126 pathList.add(VF_INSTANCE_UNIQUE_ID);
127 pathList.add("86ae128e-3d0a-41f7-a957-db1df9fe598c.9cc8f8ac-6869-4dd6-a6e1-74ecb9570dc4.vepdgtp4837svc_proxy0");
129 List<String> reducedMap = new CapabilityRequirementConverter().getReducedPathByOwner(pathList, uniqueId);
131 assertThat(reducedMap).isNotNull().doesNotContain(VFC_INSTANCE_UNIQUE_ID)
132 .containsOnlyOnce(duplicate).hasSize(4);
134 List<String> path = new ArrayList<>();
135 capabilityRequirementConverter.getReducedPathByOwner(path, uniqueId);
138 capabilityRequirementConverter.getReducedPathByOwner(path, uniqueId);
139 capabilityRequirementConverter.getReducedPathByOwner(path, "");
143 public void testBuildName() {
145 Map<String, List<CapabilityDefinition>> capabilities = newCapabilities("port");
146 Component origin = getOrigin(vfInstance);
147 Map<String, Component> cache = populateInstanceAndGetCache(origin, capabilities);
149 List<CapabilityDefinition> flatList = capabilities.values().stream().flatMap(List::stream)
150 .collect(Collectors.toList());
151 flatList.forEach((CapabilityDefinition capabilityDefinition) -> {
152 String name = capabilityRequirementConverter.buildCapabilityNameForComponentInstance(cache, instanceProxy,
153 capabilityDefinition);
154 assertThat(name).isEqualTo(VF_INSTANCE_NAME + "." +
155 VFC_INSTANCE_NORMALIZED_NAME + "." + capabilityDefinition.getName());
160 public void getReducedPathByOwner() {
161 List<String> pathList = new ArrayList<>();
162 String uniqueId = "41d3a665-1313-4b5e-9bf0-e901ecf4b806.a77df84e-83eb-4edc-9823-d1f9f6549693.lb_2";
164 String duplicate = "a77df84e-83eb-4edc-9823-d1f9f6549693.c79e9a4a-b172-4323-a2e2-1c48d6603241.lb_swu_direct_4_rvmi";
165 pathList.add(VFC_INSTANCE_UNIQUE_ID);
166 pathList.add(duplicate);
167 pathList.add(duplicate);
168 pathList.add(uniqueId);
170 pathList.add(VF_INSTANCE_UNIQUE_ID);
171 pathList.add("86ae128e-3d0a-41f7-a957-db1df9fe598c.9cc8f8ac-6869-4dd6-a6e1-74ecb9570dc4.vepdgtp4837svc_proxy0");
173 List<String> reducedMap = new CapabilityRequirementConverter().getReducedPathByOwner(pathList, uniqueId);
175 assertThat(reducedMap).isNotNull().doesNotContain(VFC_INSTANCE_UNIQUE_ID)
176 .containsOnlyOnce(duplicate).hasSize(4);
180 public void testConvertSubstitutionMappingCapabilities() {
181 String capabilityName = "port";
183 Map<String, List<CapabilityDefinition>> capabilities = newCapabilities(capabilityName);
184 Component origin = getOrigin(vfcInstance);
185 Map<String, Component> cache = populateInstanceAndGetCache(origin, capabilities);
186 Either<Map<String, String[]>, ToscaError> res = capabilityRequirementConverter
187 .convertSubstitutionMappingCapabilities(cache, origin);
189 assertFalse(res.isRight());
190 assertTrue(res.isLeft());
191 Map<String, String[]> map = res.left().value();
192 String[] substitution = map.get(VFC_INSTANCE_NORMALIZED_NAME + "." + capabilityName);
193 assertEquals(VFC_INSTANCE_UNIQUE_ID, substitution[0]);
194 assertEquals(capabilityName, substitution[1]);
198 public void buildRequirementNameForComponentInstanceTest() {
199 String capabilityName = "port";
201 Map<String, List<CapabilityDefinition>> capabilities = newCapabilities(capabilityName);
202 Component origin = getOrigin(vfcInstance);
203 Map<String, Component> cache = populateInstanceAndGetCache(origin, capabilities);
205 RequirementDefinition def = getRequirementDefinition();
207 String resp = capabilityRequirementConverter.buildRequirementNameForComponentInstance(cache, vfcInstance, def);
208 assertEquals(DATA_DEFINITION_NAME, resp);
212 public void convertComponentInstanceCapabilitiesTest() {
213 vfcInstance.setUniqueId(VFC_INSTANCE_UNIQUE_ID);
214 vfcInstance.setName(VFC_INSTANCE_NAME);
215 vfcInstance.setNormalizedName(VFC_INSTANCE_NORMALIZED_NAME);
217 Component origin = getOrigin(vfcInstance);
218 GroupDefinition group = new GroupDefinition();
219 group.setUniqueId("5f172af9-1588-443e-8897-1432b19aad8c.2cb7514a-1e50-4280-8457-baacb97b50bf.vepdgtp4837vf0");
220 group.setName(GROUP_NAME);
221 origin.setGroups(ImmutableList.of(group));
223 when(toscaOperationFacade.getToscaElement(any(), any(ComponentParametersView.class)))
224 .thenReturn(Either.left(origin));
226 when(propertyConvertor.convertToToscaObject(any(ComponentInstanceProperty.class),
227 eq(PROPERTY_VALUE), any(), eq(false))).thenReturn(PROPERTY_VALUE);
229 String capabilityName = "port";
231 Map<String, List<CapabilityDefinition>> capabilities = newCapabilities(capabilityName);
232 vfcInstance.setCapabilities(capabilities);
234 ToscaNodeTemplate nodeTemplate = new ToscaNodeTemplate();
236 Either<ToscaNodeTemplate, ToscaError> resp = capabilityRequirementConverter.convertComponentInstanceCapabilities(vfcInstance,
237 new HashMap<>(), nodeTemplate);
239 assertTrue(resp.isLeft());
240 assertFalse(resp.isRight());
242 Map<String, ToscaTemplateCapability> convertCapabilities = resp.left().value().getCapabilities();
243 assertNotNull(convertCapabilities.get(GROUP_NAME + "." + capabilityName));
245 ToscaTemplateCapability templateCapability = convertCapabilities.get("groupName.port");
246 assertEquals(PROPERTY_VALUE, templateCapability.getProperties().get(PROPERTY_NAME));
249 private Component getOrigin(ComponentInstance instance) {
251 Component proxyOrigin = new Resource();
253 proxyOrigin.setName(ORIGIN_NAME);
254 proxyOrigin.setComponentType(ComponentTypeEnum.RESOURCE);
255 proxyOrigin.setComponentInstances(Collections.singletonList(instance));
259 private Map<String, Component> populateInstanceAndGetCache(Component proxyOrigin,
260 Map<String, List<CapabilityDefinition>> capabilities) {
261 when(instanceProxy.getActualComponentUid()).thenReturn("1");
262 when(vfInstance.getActualComponentUid()).thenReturn("2");
263 when(vfcInstance.getActualComponentUid()).thenReturn("3");
267 vfInstance.setName(VF_INSTANCE_NAME);
268 vfInstance.setNormalizedName(VF_INSTANCE_NORMALIZED_NAME);
269 vfInstance.setUniqueId(VF_INSTANCE_UNIQUE_ID);
271 vfComponent.setName(VF_COMPONENT_NAME); // origin
272 vfComponent.setComponentInstances(Collections.singletonList(vfcInstance));
274 vfcInstance.setUniqueId(VFC_INSTANCE_UNIQUE_ID);
275 vfcInstance.setName(VFC_INSTANCE_NAME);
276 vfcInstance.setNormalizedName(VFC_INSTANCE_NORMALIZED_NAME);
278 vfcComponent.setName(VFC_COMPONENT_NAME);
280 vfcComponent.setCapabilities(capabilities);
281 instanceProxy.setCapabilities(capabilities);
282 proxyOrigin.setCapabilities(capabilities);
284 return Collections.unmodifiableMap(new HashMap<String, Component>() {
286 put("1", proxyOrigin);
287 put("2", vfComponent);
288 put("3", vfcComponent);
293 private RequirementDefinition getRequirementDefinition() {
294 RequirementDataDefinition dataDefinition = new RequirementDataDefinition();
295 dataDefinition.setName(DATA_DEFINITION_NAME);
296 dataDefinition.setPreviousName("previousName");
297 dataDefinition.setOwnerId(OWNER_ID);
298 dataDefinition.setPath(getPath());
300 return new RequirementDefinition(dataDefinition);
303 // generate stub capability
304 private Map<String, List<CapabilityDefinition>> newCapabilities(String capabilityName) {
305 Map<String, List<CapabilityDefinition>> capabilities = new HashMap<>();
306 List<CapabilityDefinition> list = new ArrayList<>();
307 CapabilityDefinition capabilityDefinition = new CapabilityDefinition();
308 capabilityDefinition.setName(capabilityName);
309 capabilityDefinition.setType("att.Node");
310 capabilityDefinition.setExternal(true);
311 List<ComponentInstanceProperty> properties = new ArrayList<>();
312 ComponentInstanceProperty prop = new ComponentInstanceProperty();
313 prop.setName(PROPERTY_NAME);
314 prop.setValue(PROPERTY_VALUE);
315 properties.add(prop);
316 capabilityDefinition.setProperties(properties);
317 capabilityDefinition.setOwnerId(OWNER_ID);
319 List<String> pathList = getPath();
320 capabilityDefinition.setPath(pathList);
321 list.add(capabilityDefinition);
322 capabilities.put(capabilityDefinition.getType(), list);
327 private List<String> getPath() {
328 List<String> path = new ArrayList<>();
329 path.add(VFC_INSTANCE_UNIQUE_ID);
330 // pathList.add("a77df84e-83eb-4edc-9823-d1f9f6549693.c79e9a4a-b172-4323-a2e2-1c48d6603241.lb_swu_direct_4_rvmi");
331 path.add(VF_INSTANCE_UNIQUE_ID);
332 path.add("86ae128e-3d0a-41f7-a957-db1df9fe598c.9cc8f8ac-6869-4dd6-a6e1-74ecb9570dc4.vepdgtp4837svc_proxy0");