1 package org.openecomp.sdc.be.components.impl;
3 import static org.junit.Assert.assertTrue;
4 import static org.mockito.ArgumentMatchers.any;
5 import static org.mockito.ArgumentMatchers.anySet;
6 import static org.mockito.ArgumentMatchers.eq;
7 import static org.mockito.Mockito.when;
9 import java.util.ArrayList;
10 import java.util.HashMap;
11 import java.util.HashSet;
12 import java.util.List;
15 import java.util.function.BiPredicate;
17 import org.assertj.core.util.Lists;
18 import org.junit.Assert;
19 import org.junit.Before;
20 import org.junit.BeforeClass;
21 import org.junit.Test;
22 import org.mockito.Mockito;
23 import org.mockito.MockitoAnnotations;
24 import org.openecomp.sdc.be.components.validation.UserValidations;
25 import org.openecomp.sdc.be.dao.api.ActionStatus;
26 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
27 import org.openecomp.sdc.be.datatypes.elements.ForwardingPathDataDefinition;
28 import org.openecomp.sdc.be.datatypes.elements.ForwardingPathElementDataDefinition;
29 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
30 import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition;
31 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
32 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
33 import org.openecomp.sdc.be.impl.ComponentsUtils;
34 import org.openecomp.sdc.be.impl.ServletUtils;
35 import org.openecomp.sdc.be.info.CreateAndAssotiateInfo;
36 import org.openecomp.sdc.be.model.CapabilityDefinition;
37 import org.openecomp.sdc.be.model.CapabilityRequirementRelationship;
38 import org.openecomp.sdc.be.model.Component;
39 import org.openecomp.sdc.be.model.ComponentInstance;
40 import org.openecomp.sdc.be.model.ComponentInstanceInput;
41 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
42 import org.openecomp.sdc.be.model.ComponentParametersView;
43 import org.openecomp.sdc.be.model.RelationshipImpl;
44 import org.openecomp.sdc.be.model.RelationshipInfo;
45 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
46 import org.openecomp.sdc.be.model.RequirementDefinition;
47 import org.openecomp.sdc.be.model.Resource;
48 import org.openecomp.sdc.be.model.Service;
49 import org.openecomp.sdc.be.model.User;
50 import org.openecomp.sdc.be.model.jsontitan.operations.ForwardingPathOperation;
51 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
52 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
53 import org.openecomp.sdc.be.user.UserBusinessLogic;
54 import org.openecomp.sdc.exception.ResponseFormat;
56 import fj.data.Either;
59 * The test suite designed for test functionality of
60 * ComponentInstanceBusinessLogic class
62 public class ComponentInstanceBusinessLogicTest {
64 private final static String USER_ID = "jh0003";
65 private final static String COMPONENT_ID = "componentId";
66 private final static String TO_INSTANCE_ID = "toInstanceId";
67 private final static String FROM_INSTANCE_ID = "fromInstanceId";
68 private final static String RELATION_ID = "relationId";
69 private final static String CAPABILITY_OWNER_ID = "capabilityOwnerId";
70 private final static String CAPABILITY_UID = "capabilityUid";
71 private final static String CAPABILITY_NAME = "capabilityName";
72 private final static String REQUIREMENT_OWNER_ID = "requirementOwnerId";
73 private final static String REQUIREMENT_UID = "requirementUid";
74 private final static String REQUIREMENT_NAME = "requirementName";
75 private final static String RELATIONSHIP_TYPE = "relationshipType";
77 private static ComponentsUtils componentsUtils;
78 private static ServletUtils servletUtils;
79 private static ResponseFormat responseFormat;
80 private static ToscaOperationFacade toscaOperationFacade;
81 private static UserBusinessLogic userAdmin;
83 private static ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
84 private static ForwardingPathOperation forwardingPathOperation;
85 private static User user;
86 private static UserValidations userValidations;
87 private static Component service;
88 private static Component resource;
89 private static ComponentInstance toInstance;
90 private static ComponentInstance fromInstance;
91 private static CapabilityDataDefinition capability;
92 private static RequirementDataDefinition requirement;
93 private static RequirementCapabilityRelDef relation;
94 private static BaseBusinessLogic baseBusinessLogic;
98 // public static void setup() {
102 // createComponents();
112 MockitoAnnotations.initMocks(this);
116 public void testGetRelationByIdSuccess() {
117 getServiceRelationByIdSuccess(service);
118 getServiceRelationByIdSuccess(resource);
122 public void testGetRelationByIdUserValidationFailure() {
123 getServiceRelationByIdUserValidationFailure(service);
124 getServiceRelationByIdUserValidationFailure(resource);
128 public void testGetRelationByIdComponentNotFoundFailure() {
129 getRelationByIdComponentNotFoundFailure(service);
130 getRelationByIdComponentNotFoundFailure(resource);
135 public void testForwardingPathOnVersionChange() {
136 getforwardingPathOnVersionChange();
139 private void getforwardingPathOnVersionChange() {
140 String containerComponentParam = "services";
141 String containerComponentID = "121-cont";
142 String componentInstanceID = "121-cont-1-comp";
143 Service component = new Service();
144 Map<String, ForwardingPathDataDefinition> forwardingPaths = generateForwardingPath(componentInstanceID);
146 // Add existing componentInstance to component
147 List<ComponentInstance> componentInstanceList = new ArrayList<>();
148 ComponentInstance oldComponentInstance = new ComponentInstance();
149 oldComponentInstance.setName("OLD_COMP_INSTANCE");
150 oldComponentInstance.setUniqueId(componentInstanceID);
151 oldComponentInstance.setToscaPresentationValue(JsonPresentationFields.CI_COMPONENT_UID, "1-comp");
152 componentInstanceList.add(oldComponentInstance);
153 component.setComponentInstances(componentInstanceList);
154 component.setForwardingPaths(forwardingPaths);
156 List<ComponentInstance> componentInstanceListNew = new ArrayList<>();
157 ComponentInstance newComponentInstance = new ComponentInstance();
158 String new_Comp_UID = "2-comp";
159 newComponentInstance.setToscaPresentationValue(JsonPresentationFields.CI_COMPONENT_UID, new_Comp_UID);
160 newComponentInstance.setUniqueId(new_Comp_UID);
161 componentInstanceListNew.add(newComponentInstance);
162 Component component2 = new Service();
163 component2.setComponentInstances(componentInstanceListNew);
165 // Mock for getting component
166 when(toscaOperationFacade.getToscaElement(eq(containerComponentID), any(ComponentParametersView.class)))
167 .thenReturn(Either.left(component));
168 when(toscaOperationFacade.validateComponentExists(any(String.class))).thenReturn(Either.left(Boolean.TRUE));
169 // Mock for getting component for componentInstance
170 when(toscaOperationFacade.getToscaFullElement(eq("1-comp"))).thenReturn(Either.left(component));
171 when(toscaOperationFacade.getToscaFullElement(eq(new_Comp_UID))).thenReturn(Either.left(component2));
173 Either<Set<String>, ResponseFormat> resultOp = componentInstanceBusinessLogic.forwardingPathOnVersionChange(
174 containerComponentParam, containerComponentID, componentInstanceID, newComponentInstance);
175 Assert.assertEquals(1, resultOp.left().value().size());
176 Assert.assertEquals("FP-ID-1", resultOp.left().value().iterator().next());
181 public void testDeleteForwardingPathsWhenComponentinstanceDeleted() {
183 ComponentTypeEnum containerComponentType = ComponentTypeEnum.findByParamName("services");
184 String containerComponentID = "Service-comp";
185 String componentInstanceID = "NodeA1";
186 Service component = new Service();
188 component.addForwardingPath(createPath("path1", "NodeA1", "NodeB1", "1"));
189 component.addForwardingPath(createPath("Path2", "NodeA2", "NodeB2", "2"));
190 when(toscaOperationFacade.getToscaElement(eq(containerComponentID), any(ComponentParametersView.class)))
191 .thenReturn(Either.left(component));
192 when(toscaOperationFacade.getToscaElement(eq(containerComponentID))).thenReturn(Either.left(component));
193 when(forwardingPathOperation.deleteForwardingPath(any(Service.class), anySet()))
194 .thenReturn(Either.left(new HashSet<>()));
195 Either<ComponentInstance, ResponseFormat> responseFormatEither = componentInstanceBusinessLogic
196 .deleteForwardingPathsRelatedTobeDeletedComponentInstance(containerComponentID, componentInstanceID,
197 containerComponentType, Either.left(new ComponentInstance()));
198 Assert.assertTrue(responseFormatEither.isLeft());
203 public void testDeleteForwardingPathsWhenErrorInComponentinstanceDelete() {
205 ComponentTypeEnum containerComponentType = ComponentTypeEnum.findByParamName("services");
206 String containerComponentID = "Service-comp";
207 String componentInstanceID = "NodeA1";
208 Service component = new Service();
210 component.addForwardingPath(createPath("path1", "NodeA1", "NodeB1", "1"));
211 component.addForwardingPath(createPath("Path2", "NodeA2", "NodeB2", "2"));
212 when(toscaOperationFacade.getToscaElement(eq(containerComponentID), any(ComponentParametersView.class)))
213 .thenReturn(Either.left(component));
214 when(toscaOperationFacade.getToscaElement(eq(containerComponentID))).thenReturn(Either.left(component));
215 when(forwardingPathOperation.deleteForwardingPath(any(Service.class), anySet()))
216 .thenReturn(Either.left(new HashSet<>()));
217 Either<ComponentInstance, ResponseFormat> responseFormatEither = componentInstanceBusinessLogic
218 .deleteForwardingPathsRelatedTobeDeletedComponentInstance(containerComponentID, componentInstanceID,
219 containerComponentType, Either.right(new ResponseFormat()));
220 Assert.assertTrue(responseFormatEither.isRight());
224 private ForwardingPathDataDefinition createPath(String pathName, String fromNode, String toNode, String uniqueId) {
225 ForwardingPathDataDefinition forwardingPath = new ForwardingPathDataDefinition(pathName);
226 forwardingPath.setProtocol("protocol");
227 forwardingPath.setDestinationPortNumber("port");
228 forwardingPath.setUniqueId(uniqueId);
229 ListDataDefinition<ForwardingPathElementDataDefinition> forwardingPathElementListDataDefinition = new ListDataDefinition<>();
230 forwardingPathElementListDataDefinition.add(new ForwardingPathElementDataDefinition(fromNode, toNode,
231 "nodeAcpType", "nodeBcpType", "nodeDcpName", "nodeBcpName"));
232 forwardingPath.setPathElements(forwardingPathElementListDataDefinition);
234 return forwardingPath;
237 private Map<String, ForwardingPathDataDefinition> generateForwardingPath(String componentInstanceID) {
238 ForwardingPathDataDefinition forwardingPath = new ForwardingPathDataDefinition("fpName");
239 String protocol = "protocol";
240 forwardingPath.setProtocol(protocol);
241 forwardingPath.setDestinationPortNumber("DestinationPortNumber");
242 forwardingPath.setUniqueId("FP-ID-1");
243 ListDataDefinition<ForwardingPathElementDataDefinition> forwardingPathElementListDataDefinition = new ListDataDefinition<>();
244 forwardingPathElementListDataDefinition.add(new ForwardingPathElementDataDefinition(componentInstanceID,
245 "nodeB", "nodeA_FORWARDER_CAPABILITY", "nodeBcpType", "nodeDcpName", "nodeBcpName"));
246 forwardingPath.setPathElements(forwardingPathElementListDataDefinition);
247 Map<String, ForwardingPathDataDefinition> forwardingPaths = new HashMap<>();
248 forwardingPaths.put("1122", forwardingPath);
249 return forwardingPaths;
252 @SuppressWarnings("unchecked")
253 private void getServiceRelationByIdSuccess(Component component) {
254 Either<User, ActionStatus> eitherCreator = Either.left(user);
255 when(userAdmin.getUser(eq(USER_ID), eq(false))).thenReturn(eitherCreator);
256 Either<Component, StorageOperationStatus> getComponentRes = Either.left(component);
257 when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
258 .thenReturn(getComponentRes);
260 Either<RequirementDataDefinition, StorageOperationStatus> getfulfilledRequirementRes = Either.left(requirement);
261 when(toscaOperationFacade.getFulfilledRequirementByRelation(eq(COMPONENT_ID), eq(FROM_INSTANCE_ID),
262 eq(relation), any(BiPredicate.class))).thenReturn(getfulfilledRequirementRes);
264 Either<CapabilityDataDefinition, StorageOperationStatus> getfulfilledCapabilityRes = Either.left(capability);
265 when(toscaOperationFacade.getFulfilledCapabilityByRelation(eq(COMPONENT_ID), eq(FROM_INSTANCE_ID), eq(relation),
266 any(BiPredicate.class))).thenReturn(getfulfilledCapabilityRes);
268 Either<RequirementCapabilityRelDef, ResponseFormat> response = componentInstanceBusinessLogic
269 .getRelationById(COMPONENT_ID, RELATION_ID, USER_ID, component.getComponentType());
270 assertTrue(response.isLeft());
273 private void getServiceRelationByIdUserValidationFailure(Component component) {
274 // Either<User, ActionStatus> eitherCreator =
275 // Either.right(ActionStatus.USER_NOT_FOUND);
276 // when(userAdmin.getUser(eq(USER_ID),
277 // eq(false))).thenReturn(eitherCreator);
278 when(userValidations.validateUserExists(eq(USER_ID), eq("get relation by Id"), eq(false)))
279 .thenReturn(Either.right(new ResponseFormat(404)));
280 Either<RequirementCapabilityRelDef, ResponseFormat> response = componentInstanceBusinessLogic
281 .getRelationById(COMPONENT_ID, RELATION_ID, USER_ID, component.getComponentType());
282 assertTrue(response.isRight());
285 private void getRelationByIdComponentNotFoundFailure(Component component) {
286 Either<User, ActionStatus> eitherCreator = Either.left(user);
287 when(userAdmin.getUser(eq(USER_ID), eq(false))).thenReturn(eitherCreator);
288 Either<Component, StorageOperationStatus> getComponentRes = Either.right(StorageOperationStatus.NOT_FOUND);
289 when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
290 .thenReturn(getComponentRes);
292 Either<RequirementCapabilityRelDef, ResponseFormat> response = componentInstanceBusinessLogic
293 .getRelationById(COMPONENT_ID, RELATION_ID, USER_ID, component.getComponentType());
294 assertTrue(response.isRight());
297 private static void createMocks() {
298 componentsUtils = Mockito.mock(ComponentsUtils.class);
299 servletUtils = Mockito.mock(ServletUtils.class);
300 responseFormat = Mockito.mock(ResponseFormat.class);
301 toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
302 userAdmin = Mockito.mock(UserBusinessLogic.class);
303 user = Mockito.mock(User.class);
304 baseBusinessLogic = Mockito.mock(BaseBusinessLogic.class);
305 userValidations = Mockito.mock(UserValidations.class);
306 forwardingPathOperation = Mockito.mock(ForwardingPathOperation.class);
309 private static void setMocks() {
310 componentInstanceBusinessLogic = new ComponentInstanceBusinessLogic();
311 componentInstanceBusinessLogic.setToscaOperationFacade(toscaOperationFacade);
312 componentInstanceBusinessLogic.setUserAdmin(userAdmin);
313 componentInstanceBusinessLogic.setComponentsUtils(componentsUtils);
314 componentInstanceBusinessLogic.setUserValidations(userValidations);
315 componentInstanceBusinessLogic.setForwardingPathOperation(forwardingPathOperation);
318 private static void stubMethods() {
319 when(servletUtils.getComponentsUtils()).thenReturn(componentsUtils);
320 when(userValidations.validateUserExists(eq(USER_ID), eq("get relation by Id"), eq(false)))
321 .thenReturn(Either.left(user));
322 when(componentsUtils.getResponseFormat(eq(ActionStatus.RELATION_NOT_FOUND), eq(RELATION_ID), eq(COMPONENT_ID)))
323 .thenReturn(responseFormat);
326 private static void createComponents() {
333 private static void createResource() {
334 resource = new Resource();
335 resource.setUniqueId(COMPONENT_ID);
336 resource.setComponentInstancesRelations(Lists.newArrayList(relation));
337 resource.setComponentInstances(Lists.newArrayList(toInstance, fromInstance));
338 resource.setCapabilities(toInstance.getCapabilities());
339 resource.setRequirements(fromInstance.getRequirements());
340 resource.setComponentType(ComponentTypeEnum.RESOURCE);
343 private static void createService() {
344 service = new Service();
345 service.setUniqueId(COMPONENT_ID);
346 service.setComponentInstancesRelations(Lists.newArrayList(relation));
347 service.setComponentInstances(Lists.newArrayList(toInstance, fromInstance));
348 service.setCapabilities(toInstance.getCapabilities());
349 service.setRequirements(fromInstance.getRequirements());
350 service.setComponentType(ComponentTypeEnum.SERVICE);
353 private static void createInstances() {
354 toInstance = new ComponentInstance();
355 toInstance.setUniqueId(TO_INSTANCE_ID);
357 fromInstance = new ComponentInstance();
358 fromInstance.setUniqueId(FROM_INSTANCE_ID);
360 capability = new CapabilityDataDefinition();
361 capability.setOwnerId(CAPABILITY_OWNER_ID);
362 capability.setUniqueId(CAPABILITY_UID);
363 capability.setName(CAPABILITY_NAME);
365 Map<String, List<CapabilityDefinition>> capabilities = new HashMap<>();
366 capabilities.put(capability.getName(), Lists.newArrayList(new CapabilityDefinition(capability)));
368 requirement = new RequirementDataDefinition();
369 requirement.setOwnerId(REQUIREMENT_OWNER_ID);
370 requirement.setUniqueId(REQUIREMENT_UID);
371 requirement.setName(REQUIREMENT_NAME);
372 requirement.setRelationship(RELATIONSHIP_TYPE);
374 Map<String, List<RequirementDefinition>> requirements = new HashMap<>();
375 requirements.put(requirement.getCapability(), Lists.newArrayList(new RequirementDefinition(requirement)));
377 toInstance.setCapabilities(capabilities);
378 fromInstance.setRequirements(requirements);
381 private static void createRelation() {
383 relation = new RequirementCapabilityRelDef();
384 CapabilityRequirementRelationship relationship = new CapabilityRequirementRelationship();
385 RelationshipInfo relationInfo = new RelationshipInfo();
386 relationInfo.setId(RELATION_ID);
387 relationship.setRelation(relationInfo);
389 relation.setRelationships(Lists.newArrayList(relationship));
390 relation.setToNode(TO_INSTANCE_ID);
391 relation.setFromNode(FROM_INSTANCE_ID);
393 relationInfo.setCapabilityOwnerId(CAPABILITY_OWNER_ID);
394 relationInfo.setCapabilityUid(CAPABILITY_UID);
395 relationInfo.setCapability(CAPABILITY_NAME);
396 relationInfo.setRequirementOwnerId(REQUIREMENT_OWNER_ID);
397 relationInfo.setRequirementUid(REQUIREMENT_UID);
398 relationInfo.setRequirement(REQUIREMENT_NAME);
399 RelationshipImpl relationshipImpl = new RelationshipImpl();
400 relationshipImpl.setType(RELATIONSHIP_TYPE);
401 relationInfo.setRelationships(relationshipImpl);
404 private ComponentInstanceBusinessLogic createTestSubject() {
405 return componentInstanceBusinessLogic;
413 public void testChangeServiceProxyVersion() throws Exception {
414 ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
415 String containerComponentType = "";
416 String containerComponentId = "";
417 String serviceProxyId = "";
419 Either<ComponentInstance, ResponseFormat> result;
422 componentInstanceBusinessLogic = createTestSubject();
423 result = componentInstanceBusinessLogic.changeServiceProxyVersion(containerComponentType, containerComponentId, serviceProxyId,
434 public void testCreateServiceProxy() throws Exception {
435 ComponentInstanceBusinessLogic testSubject;
436 String containerComponentType = "";
437 String containerComponentId = "";
439 ComponentInstance componentInstance = null;
440 Either<ComponentInstance, ResponseFormat> result;
443 testSubject = createTestSubject();
444 result = testSubject.createServiceProxy(containerComponentType, containerComponentId, userId,
452 public void testDeleteForwardingPathsRelatedTobeDeletedComponentInstance() throws Exception {
453 ComponentInstanceBusinessLogic testSubject;
454 String containerComponentId = "";
455 String componentInstanceId = "";
456 ComponentTypeEnum containerComponentType = ComponentTypeEnum.RESOURCE;
457 Either<ComponentInstance, ResponseFormat> resultOp = null;
458 Either<ComponentInstance, ResponseFormat> result;
461 testSubject = createTestSubject();
462 result = testSubject.deleteForwardingPathsRelatedTobeDeletedComponentInstance(containerComponentId,
463 componentInstanceId, containerComponentType, resultOp);
468 public void testDeleteServiceProxy() throws Exception {
469 ComponentInstanceBusinessLogic testSubject;
470 String containerComponentType = "";
471 String containerComponentId = "";
472 String serviceProxyId = "";
474 Either<ComponentInstance, ResponseFormat> result;
477 testSubject = createTestSubject();
478 result = testSubject.deleteServiceProxy(containerComponentType, containerComponentId, serviceProxyId, userId);
487 public void testGetComponentInstanceInputsByInputId() throws Exception {
488 ComponentInstanceBusinessLogic testSubject;
489 Component component = new Service();
491 List<ComponentInstanceInput> result;
494 testSubject = createTestSubject();
495 result = testSubject.getComponentInstanceInputsByInputId(component, inputId);
501 public void testGetComponentInstancePropertiesByInputId() throws Exception {
502 ComponentInstanceBusinessLogic testSubject;
503 Component component = new Service();
505 List<ComponentInstanceProperty> result;
508 testSubject = createTestSubject();
509 result = testSubject.getComponentInstancePropertiesByInputId(component, inputId);
514 public void testGetRelationById() throws Exception {
515 ComponentInstanceBusinessLogic testSubject;
516 String componentId = "";
517 String relationId = "";
519 ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE_INSTANCE;
520 Either<RequirementCapabilityRelDef, ResponseFormat> result;
523 testSubject = createTestSubject();
524 result = testSubject.getRelationById(componentId, relationId, userId, componentTypeEnum);