Remove usage of outdated library JMockit (catalog-dao)
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / BaseServiceBusinessLogicTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  * Modifications copyright (c) 2019 Nokia
20  * ================================================================================
21  */
22 package org.openecomp.sdc.be.components;
23
24 import static org.mockito.ArgumentMatchers.any;
25 import static org.mockito.Mockito.when;
26
27 import com.google.common.collect.Sets;
28 import fj.data.Either;
29 import java.util.ArrayList;
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33 import javax.servlet.ServletContext;
34 import org.junit.Before;
35 import org.mockito.Mockito;
36 import org.openecomp.sdc.ElementOperationMock;
37 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
38 import org.openecomp.sdc.be.components.distribution.engine.IDistributionEngine;
39 import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
40 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
41 import org.openecomp.sdc.be.components.impl.ResponseFormatManager;
42 import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
43 import org.openecomp.sdc.be.components.impl.ServiceBusinessLogicTest;
44 import org.openecomp.sdc.be.components.impl.generic.GenericTypeBusinessLogic;
45 import org.openecomp.sdc.be.components.path.ForwardingPathValidator;
46 import org.openecomp.sdc.be.components.utils.ComponentBusinessLogicMock;
47 import org.openecomp.sdc.be.components.validation.ServiceDistributionValidation;
48 import org.openecomp.sdc.be.dao.api.ActionStatus;
49 import org.openecomp.sdc.be.dao.cassandra.AuditCassandraDao;
50 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
51 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
52 import org.openecomp.sdc.be.datatypes.elements.ForwardingPathDataDefinition;
53 import org.openecomp.sdc.be.datatypes.elements.ForwardingPathElementDataDefinition;
54 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
55 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
56 import org.openecomp.sdc.be.impl.ComponentsUtils;
57 import org.openecomp.sdc.be.impl.WebAppContextWrapper;
58 import org.openecomp.sdc.be.model.ArtifactDefinition;
59 import org.openecomp.sdc.be.model.Component;
60 import org.openecomp.sdc.be.model.ComponentInstance;
61 import org.openecomp.sdc.be.model.GroupInstance;
62 import org.openecomp.sdc.be.model.Resource;
63 import org.openecomp.sdc.be.model.Service;
64 import org.openecomp.sdc.be.model.User;
65 import org.openecomp.sdc.be.model.category.CategoryDefinition;
66 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ForwardingPathOperation;
67 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
68 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
69 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
70 import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation;
71 import org.openecomp.sdc.be.resources.data.auditing.ResourceAdminEvent;
72 import org.openecomp.sdc.be.user.Role;
73 import org.openecomp.sdc.be.user.UserBusinessLogic;
74 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
75 import org.openecomp.sdc.common.api.Constants;
76 import org.openecomp.sdc.common.datastructure.AuditingFieldsKey;
77 import org.openecomp.sdc.common.impl.ExternalConfiguration;
78 import org.slf4j.Logger;
79 import org.slf4j.LoggerFactory;
80 import org.springframework.web.context.WebApplicationContext;
81
82 public abstract class BaseServiceBusinessLogicTest extends ComponentBusinessLogicMock {
83     private static final Logger log = LoggerFactory.getLogger(ServiceBusinessLogicTest.class);
84     private static final String SERVICE_CATEGORY = "Mobility";
85     private final ServletContext servletContext = Mockito.mock(ServletContext.class);
86     private UserBusinessLogic mockUserAdmin = Mockito.mock(UserBusinessLogic.class);
87     private WebAppContextWrapper webAppContextWrapper = Mockito.mock(WebAppContextWrapper.class);
88     private WebApplicationContext webAppContext = Mockito.mock(WebApplicationContext.class);
89     protected final IDistributionEngine distributionEngine = Mockito.mock(IDistributionEngine.class);
90     protected final ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
91     protected final ServiceDistributionValidation serviceDistributionValidation = Mockito.mock(ServiceDistributionValidation.class);
92     protected final ForwardingPathValidator forwardingPathValidator = Mockito.mock(ForwardingPathValidator.class);
93     protected final UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
94     private ServiceBusinessLogic bl;
95     private ResponseFormatManager responseManager = null;
96     private IElementOperation mockElementDao;
97     private ComponentsUtils componentsUtils;
98     private AuditCassandraDao auditingDao = Mockito.mock(AuditCassandraDao.class);
99     private ArtifactsBusinessLogic artifactBl = Mockito.mock(ArtifactsBusinessLogic.class);
100     private GraphLockOperation graphLockOperation = Mockito.mock(GraphLockOperation.class);
101     private JanusGraphDao mockJanusGraphDao = Mockito.mock(JanusGraphDao.class);
102     private ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
103     private GenericTypeBusinessLogic genericTypeBusinessLogic = Mockito.mock(GenericTypeBusinessLogic.class);
104     private ForwardingPathOperation forwardingPathOperation  = Mockito.mock(ForwardingPathOperation.class);
105
106     User user = null;
107     Service serviceResponse = null;
108     Resource genericService = null;
109
110     protected static final String CERTIFIED_VERSION = "1.0";
111     protected static final String UNCERTIFIED_VERSION = "0.2";
112     protected static final String COMPONNET_ID = "myUniqueId";
113     protected static final String GENERIC_SERVICE_NAME = "org.openecomp.resource.abstract.nodes.service";
114     protected static Map<AuditingFieldsKey, Object> FILTER_MAP_CERTIFIED_VERSION = new HashMap<>();
115     protected static Map<AuditingFieldsKey, Object> FILTER_MAP_UNCERTIFIED_VERSION_CURR = new HashMap<>();
116     protected static Map<AuditingFieldsKey, Object> FILTER_MAP_UNCERTIFIED_VERSION_PREV = new HashMap<>();
117     @Before
118     public void setup() {
119
120         ExternalConfiguration.setAppName("catalog-be");
121         componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
122
123         // Elements
124         mockElementDao = new ElementOperationMock();
125
126         // User data and management
127         user = new User();
128         user.setUserId("jh0003");
129         user.setFirstName("Jimmi");
130         user.setLastName("Hendrix");
131         user.setRole(Role.ADMIN.name());
132
133         when(mockUserAdmin.getUser("jh0003", false)).thenReturn(user);
134
135         // Servlet Context attributes
136         when(servletContext.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR)).thenReturn(configurationManager);
137 //        when(servletContext.getAttribute(Constants.SERVICE_OPERATION_MANAGER)).thenReturn(new ServiceOperation());
138         when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)).thenReturn(webAppContextWrapper);
139         when(webAppContextWrapper.getWebAppContext(servletContext)).thenReturn(webAppContext);
140         when(webAppContext.getBean(IElementOperation.class)).thenReturn(mockElementDao);
141         when(graphLockOperation.lockComponent(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Service))).thenReturn(StorageOperationStatus.OK);
142         when(graphLockOperation.lockComponentByName(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Service))).thenReturn(StorageOperationStatus.OK);
143
144         // artifact bussinesslogic
145         ArtifactDefinition artifactDef = new ArtifactDefinition();
146         when(artifactBl.createArtifactPlaceHolderInfo(Mockito.anyString(), Mockito.anyString(), Mockito.anyMap(), Mockito.any(User.class), Mockito.any(ArtifactGroupTypeEnum.class))).thenReturn(artifactDef);
147
148         // createService
149         serviceResponse = createServiceObject(true);
150         Either<Component, StorageOperationStatus> eitherCreate = Either.left(serviceResponse);
151         when(toscaOperationFacade.createToscaComponent(Mockito.any(Component.class))).thenReturn(eitherCreate);
152         Either<Boolean, StorageOperationStatus> eitherCount = Either.left(false);
153         when(toscaOperationFacade.validateComponentNameExists("Service", null, ComponentTypeEnum.SERVICE)).thenReturn(eitherCount);
154         Either<Boolean, StorageOperationStatus> eitherCountExist = Either.left(true);
155         when(toscaOperationFacade.validateComponentNameExists("alreadyExist", null, ComponentTypeEnum.SERVICE)).thenReturn(eitherCountExist);
156
157         genericService = setupGenericServiceMock();
158         Either<Resource, StorageOperationStatus> findLatestGeneric = Either.left(genericService);
159         when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_SERVICE_NAME)).thenReturn(findLatestGeneric);
160
161         //forwardingPath
162         when(forwardingPathOperation.addForwardingPath(any(),any())).thenReturn(Either.left(createMockPath()));
163         when(forwardingPathOperation.updateForwardingPath(any(),any())).thenReturn(Either.left(createMockPath()));
164         when(forwardingPathOperation.deleteForwardingPath(any(),any())).thenReturn(Either.left(Sets.newHashSet("Wow-It-Works")));
165         when(toscaOperationFacade.getToscaElement("delete_forward_test")).thenReturn(Either.left(createServiceObject(true)));
166
167         bl = new ServiceBusinessLogic(elementDao, groupOperation, groupInstanceOperation,
168             groupTypeOperation, groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation,
169             artifactsBusinessLogic, distributionEngine, componentInstanceBusinessLogic,
170             serviceDistributionValidation, forwardingPathValidator, uiComponentDataConverter,
171             artifactToscaOperation, componentContactIdValidator, componentNameValidator,
172             componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator);
173         bl.setUserAdmin(mockUserAdmin);
174         bl.setGraphLockOperation(graphLockOperation);
175         bl.setJanusGraphDao(mockJanusGraphDao);
176         bl.setToscaOperationFacade(toscaOperationFacade);
177         bl.setGenericTypeBusinessLogic(genericTypeBusinessLogic);
178         bl.setComponentsUtils(componentsUtils);
179         bl.setCassandraAuditingDao(auditingDao);
180         bl.setForwardingPathOperation(forwardingPathOperation);
181         bl.setToscaOperationFacade(toscaOperationFacade);
182         mockAuditingDaoLogic();
183
184         responseManager = ResponseFormatManager.getInstance();
185
186     }
187
188     protected Component createNewService() {
189
190         Service service = new Service();
191         int listSize = 3;
192         service.setName("serviceName");
193         service.setUniqueId("serviceUniqueId");
194         List<ComponentInstance> componentInstances = new ArrayList<>();
195         ComponentInstance ci;
196         for(int i= 0; i<listSize; ++i){
197             ci = new ComponentInstance();
198             ci.setName("ciName" + i);
199             ci.setUniqueId("ciId" + i);
200             List<GroupInstance>  groupInstances= new ArrayList<>();
201             GroupInstance gi;
202             for(int j = 0; j<listSize; ++j){
203                 gi = new GroupInstance();
204                 gi.setName(ci.getName( )+ "giName" + j);
205                 gi.setUniqueId(ci.getName() + "giId" + j);
206                 groupInstances.add(gi);
207             }
208             ci.setGroupInstances(groupInstances);
209             componentInstances.add(ci);
210         }
211         service.setComponentInstances(componentInstances);
212         return service;
213     }
214
215     private void mockAuditingDaoLogic() {
216         FILTER_MAP_CERTIFIED_VERSION.put(AuditingFieldsKey.AUDIT_SERVICE_INSTANCE_ID, COMPONNET_ID);
217         FILTER_MAP_UNCERTIFIED_VERSION_CURR.put(AuditingFieldsKey.AUDIT_SERVICE_INSTANCE_ID, COMPONNET_ID);
218         FILTER_MAP_UNCERTIFIED_VERSION_PREV.put(AuditingFieldsKey.AUDIT_SERVICE_INSTANCE_ID, COMPONNET_ID);
219
220         FILTER_MAP_UNCERTIFIED_VERSION_CURR.put(AuditingFieldsKey.AUDIT_RESOURCE_CURR_VERSION, UNCERTIFIED_VERSION);
221         FILTER_MAP_UNCERTIFIED_VERSION_PREV.put(AuditingFieldsKey.AUDIT_RESOURCE_PREV_VERSION, UNCERTIFIED_VERSION);
222
223         final ResourceAdminEvent createResourceAudit = new ResourceAdminEvent();
224         createResourceAudit.setModifier("Carlos Santana(cs0008)");
225         createResourceAudit.setCurrState("NOT_CERTIFIED_CHECKOUT");
226         createResourceAudit.setCurrVersion("0.1");
227         createResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
228         createResourceAudit.setRequestId("3e65cea1-7403-4bc7-b461-e2544d83799f");
229         createResourceAudit.setDesc("OK");
230         createResourceAudit.setResourceType("Resource");
231         createResourceAudit.setStatus("201");
232         createResourceAudit.setPrevVersion("");
233         createResourceAudit.setAction("Create");
234         // fields.put("TIMESTAMP", "2015-11-22 09:19:12.977");
235         createResourceAudit.setPrevState("");
236         createResourceAudit.setResourceName("MyTestResource");
237         // createResourceAudit.setFields(fields);
238
239         final ResourceAdminEvent checkInResourceAudit = new ResourceAdminEvent();
240         checkInResourceAudit.setModifier("Carlos Santana(cs0008)");
241         checkInResourceAudit.setCurrState("NOT_CERTIFIED_CHECKIN");
242         checkInResourceAudit.setCurrVersion("0.1");
243         checkInResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
244         checkInResourceAudit.setRequestId("ffacbf5d-eeb1-43c6-a310-37fe7e1cc091");
245         checkInResourceAudit.setDesc("OK");
246         checkInResourceAudit.setComment("Stam");
247         checkInResourceAudit.setResourceType("Resource");
248         checkInResourceAudit.setStatus("200");
249         checkInResourceAudit.setPrevVersion("0.1");
250         checkInResourceAudit.setAction("Checkin");
251         // fields.put("TIMESTAMP", "2015-11-22 09:25:03.797");
252         checkInResourceAudit.setPrevState("NOT_CERTIFIED_CHECKOUT");
253         checkInResourceAudit.setResourceName("MyTestResource");
254
255         final ResourceAdminEvent checkOutResourceAudit = new ResourceAdminEvent();
256         checkOutResourceAudit.setModifier("Carlos Santana(cs0008)");
257         checkOutResourceAudit.setCurrState("NOT_CERTIFIED_CHECKOUT");
258         checkOutResourceAudit.setCurrVersion("0.2");
259         checkOutResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
260         checkOutResourceAudit.setRequestId("7add5078-4c16-4d74-9691-cc150e3c96b8");
261         checkOutResourceAudit.setDesc("OK");
262         checkOutResourceAudit.setComment("");
263         checkOutResourceAudit.setResourceType("Resource");
264         checkOutResourceAudit.setStatus("200");
265         checkOutResourceAudit.setPrevVersion("0.1");
266         checkOutResourceAudit.setAction("Checkout");
267         // fields.put("TIMESTAMP", "2015-11-22 09:39:41.024");
268         checkOutResourceAudit.setPrevState("NOT_CERTIFIED_CHECKIN");
269         checkOutResourceAudit.setResourceName("MyTestResource");
270         // checkOutResourceAudit.setFields(fields);
271
272         List<ResourceAdminEvent> list = new ArrayList<ResourceAdminEvent>() {
273             {
274                 add(createResourceAudit);
275                 add(checkInResourceAudit);
276                 add(checkOutResourceAudit);
277             }
278         };
279         Either<List<ResourceAdminEvent>, ActionStatus> result = Either.left(list);
280         Mockito.when(auditingDao.getByServiceInstanceId(Mockito.anyString())).thenReturn(result);
281
282         List<ResourceAdminEvent> listPrev = new ArrayList<>();
283         Either<List<ResourceAdminEvent>, ActionStatus> resultPrev = Either.left(listPrev);
284         Mockito.when(auditingDao.getAuditByServiceIdAndPrevVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(resultPrev);
285
286         List<ResourceAdminEvent> listCurr = new ArrayList<ResourceAdminEvent>() {
287             {
288                 add(checkOutResourceAudit);
289             }
290         };
291         Either<List<ResourceAdminEvent>, ActionStatus> resultCurr = Either.left(listCurr);
292         Mockito.when(auditingDao.getAuditByServiceIdAndCurrVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(resultCurr);
293
294     }
295
296     protected Service createServiceObject(boolean afterCreate) {
297         Service service = new Service();
298         service.setName("Service");
299         CategoryDefinition category = new CategoryDefinition();
300         category.setName(SERVICE_CATEGORY);
301         List<CategoryDefinition> categories = new ArrayList<>();
302         categories.add(category);
303         service.setCategories(categories);
304
305         service.setDescription("description");
306         List<String> tgs = new ArrayList<>();
307         tgs.add(service.getName());
308         service.setTags(tgs);
309         // service.setVendorName("Motorola");
310         // service.setVendorRelease("1.0.0");
311         service.setIcon("MyIcon");
312         // service.setState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
313         service.setContactId("aa1234");
314         service.setProjectCode("12345");
315
316         if (afterCreate) {
317             service.setVersion("0.1");
318             service.setUniqueId(service.getName() + ":" + service.getVersion());
319             service.setCreatorUserId(user.getUserId());
320             service.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
321         }
322         return service;
323     }
324
325     protected Resource setupGenericServiceMock(){
326         Resource genericService = new Resource();
327         genericService.setVersion("1.0");
328         genericService.setToscaResourceName(GENERIC_SERVICE_NAME);
329         return genericService;
330     }
331
332     protected static ForwardingPathDataDefinition forwardingPathDataDefinition;
333
334     protected static ForwardingPathDataDefinition createMockPath() {
335         if (forwardingPathDataDefinition != null){
336             return forwardingPathDataDefinition ;
337         }
338         forwardingPathDataDefinition = new ForwardingPathDataDefinition("Yoyo");
339         forwardingPathDataDefinition.setUniqueId(java.util.UUID.randomUUID().toString());
340         forwardingPathDataDefinition.setDestinationPortNumber("414155");
341         forwardingPathDataDefinition.setProtocol("http");
342         org.openecomp.sdc.be.datatypes.elements.ListDataDefinition<org.openecomp.sdc.be.datatypes.elements.ForwardingPathElementDataDefinition> forwardingPathElementDataDefinitionListDataDefinition = new org.openecomp.sdc.be.datatypes.elements.ListDataDefinition<>();
343         forwardingPathElementDataDefinitionListDataDefinition.add(new ForwardingPathElementDataDefinition("fromNode","toNode", "333","444","2222","5555"));
344         forwardingPathElementDataDefinitionListDataDefinition.add(new ForwardingPathElementDataDefinition("toNode","toNode2", "4444","44444","4","44"));
345         forwardingPathDataDefinition.setPathElements(forwardingPathElementDataDefinitionListDataDefinition);
346         return forwardingPathDataDefinition;
347     }
348 }