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