1 package org.openecomp.sdc.be.components.impl;
3 import static org.junit.Assert.assertSame;
4 import static org.assertj.core.api.Assertions.assertThat;
9 import org.assertj.core.util.Lists;
10 import org.junit.Assert;
11 import org.junit.Before;
12 import org.junit.Ignore;
13 import org.junit.Test;
14 import org.junit.runner.RunWith;
15 import org.mockito.InjectMocks;
16 import org.mockito.Mock;
17 import org.mockito.junit.MockitoJUnitRunner;
18 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
19 import org.openecomp.sdc.be.components.validation.UserValidations;
20 import org.openecomp.sdc.be.dao.api.ActionStatus;
21 import org.openecomp.sdc.be.datatypes.elements.*;
22 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
23 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
24 import org.openecomp.sdc.be.impl.ComponentsUtils;
25 import org.openecomp.sdc.be.impl.ServletUtils;
26 import org.openecomp.sdc.be.model.*;
27 import org.openecomp.sdc.be.model.LifecycleStateEnum;
28 import org.openecomp.sdc.be.model.jsontitan.operations.ForwardingPathOperation;
29 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
30 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
31 import org.openecomp.sdc.be.user.UserBusinessLogic;
32 import org.openecomp.sdc.exception.ResponseFormat;
34 import java.util.function.BiPredicate;
36 import static org.junit.Assert.assertTrue;
37 import static org.mockito.ArgumentMatchers.any;
38 import static org.mockito.ArgumentMatchers.anySet;
39 import static org.mockito.ArgumentMatchers.anyString;
40 import static org.mockito.ArgumentMatchers.eq;
41 import static org.mockito.Mockito.when;
43 import static org.junit.Assert.assertTrue;
44 import static org.mockito.ArgumentMatchers.*;
45 import static org.mockito.Mockito.when;
48 * The test suite designed for test functionality of ComponentInstanceBusinessLogic class
51 @RunWith(MockitoJUnitRunner.class)
52 public class ComponentInstanceBusinessLogicTest {
54 private final static String USER_ID = "jh0003";
55 private final static String COMPONENT_ID = "componentId";
56 private final static String TO_INSTANCE_ID = "toInstanceId";
57 private final static String FROM_INSTANCE_ID = "fromInstanceId";
58 private final static String RELATION_ID = "relationId";
59 private final static String CAPABILITY_OWNER_ID = "capabilityOwnerId";
60 private final static String CAPABILITY_UID = "capabilityUid";
61 private final static String CAPABILITY_NAME = "capabilityName";
62 private final static String REQUIREMENT_OWNER_ID = "requirementOwnerId";
63 private final static String REQUIREMENT_UID = "requirementUid";
64 private final static String REQUIREMENT_NAME = "requirementName";
65 private final static String RELATIONSHIP_TYPE = "relationshipType";
68 private static ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
70 private ComponentsUtils componentsUtils;
72 private ServletUtils servletUtils;
74 private ResponseFormat responseFormat;
76 private ToscaOperationFacade toscaOperationFacade;
78 private UserBusinessLogic userAdmin;
80 private ForwardingPathOperation forwardingPathOperation;
84 private UserValidations userValidations;
85 private Component service;
86 private Component resource;
87 private ComponentInstance toInstance;
88 private ComponentInstance fromInstance;
89 private CapabilityDataDefinition capability;
90 private RequirementDataDefinition requirement;
91 private RequirementCapabilityRelDef relation;
101 public void testGetRelationByIdSuccess(){
102 getServiceRelationByIdSuccess(service);
103 getServiceRelationByIdSuccess(resource);
107 public void testGetRelationByIdUserValidationFailure(){
108 getServiceRelationByIdUserValidationFailure(service);
109 getServiceRelationByIdUserValidationFailure(resource);
113 public void testGetRelationByIdComponentNotFoundFailure(){
114 getRelationByIdComponentNotFoundFailure(service);
115 getRelationByIdComponentNotFoundFailure(resource);
119 public void testForwardingPathOnVersionChange(){
120 getforwardingPathOnVersionChange();
123 private void getforwardingPathOnVersionChange(){
124 String containerComponentParam="services";
125 String containerComponentID="121-cont";
126 String componentInstanceID="121-cont-1-comp";
127 Service component=new Service();
128 Map<String, ForwardingPathDataDefinition> forwardingPaths = generateForwardingPath(componentInstanceID);
130 //Add existing componentInstance to component
131 List<ComponentInstance> componentInstanceList=new ArrayList<>();
132 ComponentInstance oldComponentInstance=new ComponentInstance();
133 oldComponentInstance.setName("OLD_COMP_INSTANCE");
134 oldComponentInstance.setUniqueId(componentInstanceID);
135 oldComponentInstance.setName(componentInstanceID);
136 oldComponentInstance.setToscaPresentationValue(JsonPresentationFields.CI_COMPONENT_UID,"1-comp");
137 componentInstanceList.add(oldComponentInstance);
138 component.setComponentInstances(componentInstanceList);
139 component.setForwardingPaths(forwardingPaths);
141 List<ComponentInstance> componentInstanceListNew=new ArrayList<>();
142 ComponentInstance newComponentInstance=new ComponentInstance();
143 String new_Comp_UID="2-comp";
144 newComponentInstance.setToscaPresentationValue(JsonPresentationFields.CI_COMPONENT_UID,new_Comp_UID);
145 newComponentInstance.setUniqueId(new_Comp_UID);
146 componentInstanceListNew.add(newComponentInstance);
147 Component component2=new Service();
148 component2.setComponentInstances(componentInstanceListNew);
150 //Mock for getting component
151 when(toscaOperationFacade.getToscaElement(eq(containerComponentID),any(ComponentParametersView.class))).thenReturn(Either.left(component));
152 when(toscaOperationFacade.validateComponentExists(any(String.class))).thenReturn(Either.left(Boolean.TRUE));
153 when(toscaOperationFacade.getToscaFullElement(eq(new_Comp_UID))).thenReturn(Either.left(component2));
155 Either<Set<String>, ResponseFormat> resultOp = componentInstanceBusinessLogic.forwardingPathOnVersionChange
156 (containerComponentParam,containerComponentID,componentInstanceID,newComponentInstance);
157 Assert.assertEquals(1,resultOp.left().value().size());
158 Assert.assertEquals("FP-ID-1",resultOp.left().value().iterator().next());
164 public void testDeleteForwardingPathsWhenComponentinstanceDeleted(){
166 ComponentTypeEnum containerComponentType = ComponentTypeEnum.findByParamName("services");
167 String containerComponentID = "Service-comp";
168 String componentInstanceID = "NodeA1";
169 Service component = new Service();
170 component.setComponentInstances(Arrays.asList(createComponentIstance("NodeA2"),createComponentIstance("NodeB2"),
171 createComponentIstance(componentInstanceID)));
173 component.addForwardingPath(createPath("path1", componentInstanceID, "NodeB1", "1"));
174 component.addForwardingPath(createPath("Path2", "NodeA2","NodeB2", "2"));
175 when(toscaOperationFacade.getToscaElement(eq(containerComponentID),any(ComponentParametersView.class))).thenReturn(Either.left(component));
176 when(toscaOperationFacade.getToscaElement(eq(containerComponentID))).thenReturn(Either.left(component));
177 when(forwardingPathOperation.deleteForwardingPath(any(Service.class), anySet())).thenReturn(Either.left(new HashSet<>()));
178 final ComponentInstance ci = new ComponentInstance();
179 ci.setName(componentInstanceID);
180 Either<ComponentInstance, ResponseFormat> responseFormatEither = componentInstanceBusinessLogic.deleteForwardingPathsRelatedTobeDeletedComponentInstance(
181 containerComponentID, containerComponentType, Either.left(ci));
182 assertThat(responseFormatEither.isLeft()).isEqualTo(true);
186 private ComponentInstance createComponentIstance(String path1) {
187 ComponentInstance componentInstance = new ComponentInstance();
188 componentInstance.setName(path1);
189 return componentInstance;
192 private ForwardingPathDataDefinition createPath(String pathName, String fromNode, String toNode , String uniqueId){
193 ForwardingPathDataDefinition forwardingPath = new ForwardingPathDataDefinition(pathName);
194 forwardingPath.setProtocol("protocol");
195 forwardingPath.setDestinationPortNumber("port");
196 forwardingPath.setUniqueId(uniqueId);
197 ListDataDefinition<ForwardingPathElementDataDefinition> forwardingPathElementListDataDefinition = new ListDataDefinition<>();
198 forwardingPathElementListDataDefinition.add(new ForwardingPathElementDataDefinition(fromNode, toNode,
199 "nodeAcpType", "nodeBcpType", "nodeDcpName", "nodeBcpName"));
200 forwardingPath.setPathElements(forwardingPathElementListDataDefinition);
202 return forwardingPath;
207 private Map<String, ForwardingPathDataDefinition> generateForwardingPath(String componentInstanceID) {
208 ForwardingPathDataDefinition forwardingPath = new ForwardingPathDataDefinition("fpName");
209 String protocol = "protocol";
210 forwardingPath.setProtocol(protocol);
211 forwardingPath.setDestinationPortNumber("DestinationPortNumber");
212 forwardingPath.setUniqueId("FP-ID-1");
213 ListDataDefinition<ForwardingPathElementDataDefinition> forwardingPathElementListDataDefinition =
214 new ListDataDefinition<>();
215 forwardingPathElementListDataDefinition.add(
216 new ForwardingPathElementDataDefinition(componentInstanceID, "nodeB", "nodeA_FORWARDER_CAPABILITY",
217 "nodeBcpType" , "nodeDcpName",
219 forwardingPath.setPathElements(forwardingPathElementListDataDefinition);
220 Map<String, ForwardingPathDataDefinition> forwardingPaths = new HashMap<>();
221 forwardingPaths.put("1122", forwardingPath);
222 return forwardingPaths;
225 @SuppressWarnings("unchecked")
226 private void getServiceRelationByIdSuccess(Component component){
227 Either<Component, StorageOperationStatus> getComponentRes = Either.left(component);
228 when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(getComponentRes);
229 Either<RequirementCapabilityRelDef, ResponseFormat> response = componentInstanceBusinessLogic.getRelationById(COMPONENT_ID, RELATION_ID, USER_ID, component.getComponentType());
230 assertTrue(response.isLeft());
233 private void getServiceRelationByIdUserValidationFailure(Component component){
234 when(userValidations.validateUserExists(eq(USER_ID), eq("get relation by Id"), eq(false))).thenThrow(new ComponentException(ActionStatus.USER_NOT_FOUND));
236 componentInstanceBusinessLogic.getRelationById(COMPONENT_ID, RELATION_ID, USER_ID, component.getComponentType());
237 } catch(ComponentException e){
238 assertSame(e.getActionStatus(), ActionStatus.USER_NOT_FOUND);
242 private void getRelationByIdComponentNotFoundFailure(Component component){
243 Either<User, ActionStatus> eitherCreator = Either.left(user);
244 Either<Component, StorageOperationStatus> getComponentRes = Either.right(StorageOperationStatus.NOT_FOUND);
245 when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(getComponentRes);
247 Either<RequirementCapabilityRelDef, ResponseFormat> response = componentInstanceBusinessLogic.getRelationById(COMPONENT_ID, RELATION_ID, USER_ID, component.getComponentType());
248 assertTrue(response.isRight());
251 private void stubMethods() {
252 when(userValidations.validateUserExists(eq(USER_ID), eq("get relation by Id"), eq(false))).thenReturn(user);
255 private void createComponents() {
262 private void createResource() {
263 resource = new Resource();
264 resource.setUniqueId(COMPONENT_ID);
265 resource.setComponentInstancesRelations(Lists.newArrayList(relation));
266 resource.setComponentInstances(Lists.newArrayList(toInstance,fromInstance));
267 resource.setCapabilities(toInstance.getCapabilities());
268 resource.setRequirements(fromInstance.getRequirements());
269 resource.setComponentType(ComponentTypeEnum.RESOURCE);
270 resource.setState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
274 private void createService() {
275 service = new Service();
276 service.setUniqueId(COMPONENT_ID);
277 service.setComponentInstancesRelations(Lists.newArrayList(relation));
278 service.setComponentInstances(Lists.newArrayList(toInstance,fromInstance));
279 service.setCapabilities(toInstance.getCapabilities());
280 service.setRequirements(fromInstance.getRequirements());
281 service.setComponentType(ComponentTypeEnum.SERVICE);
282 service.setState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
286 private void createInstances() {
287 toInstance = new ComponentInstance();
288 toInstance.setUniqueId(TO_INSTANCE_ID);
290 fromInstance = new ComponentInstance();
291 fromInstance.setUniqueId(FROM_INSTANCE_ID);
293 capability = new CapabilityDataDefinition();
294 capability.setOwnerId(CAPABILITY_OWNER_ID);
295 capability.setUniqueId(CAPABILITY_UID);
296 capability.setName(CAPABILITY_NAME);
298 Map<String, List<CapabilityDefinition>> capabilities = new HashMap<>();
299 capabilities.put(capability.getName(), Lists.newArrayList(new CapabilityDefinition(capability)));
301 requirement = new RequirementDataDefinition();
302 requirement.setOwnerId(REQUIREMENT_OWNER_ID);
303 requirement.setUniqueId(REQUIREMENT_UID);
304 requirement.setName(REQUIREMENT_NAME);
305 requirement.setRelationship(RELATIONSHIP_TYPE);
308 Map<String, List<RequirementDefinition>> requirements = new HashMap<>();
309 requirements.put(requirement.getCapability(), Lists.newArrayList(new RequirementDefinition(requirement)));
311 toInstance.setCapabilities(capabilities);
312 fromInstance.setRequirements(requirements);
316 private void createRelation() {
318 relation = new RequirementCapabilityRelDef();
319 CapabilityRequirementRelationship relationship = new CapabilityRequirementRelationship();
320 RelationshipInfo relationInfo = new RelationshipInfo();
321 relationInfo.setId(RELATION_ID);
322 relationship.setRelation(relationInfo);
324 relation.setRelationships(Lists.newArrayList(relationship));
325 relation.setToNode(TO_INSTANCE_ID);
326 relation.setFromNode(FROM_INSTANCE_ID);
328 relationInfo.setCapabilityOwnerId(CAPABILITY_OWNER_ID);
329 relationInfo.setCapabilityUid(CAPABILITY_UID);
330 relationInfo.setCapability(CAPABILITY_NAME);
331 relationInfo.setRequirementOwnerId(REQUIREMENT_OWNER_ID);
332 relationInfo.setRequirementUid(REQUIREMENT_UID);
333 relationInfo.setRequirement(REQUIREMENT_NAME);
334 RelationshipImpl relationshipImpl = new RelationshipImpl();
335 relationshipImpl.setType(RELATIONSHIP_TYPE);
336 relationInfo.setRelationships(relationshipImpl);