2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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 * ================================================================================
22 package org.openecomp.sdc.be.components;
24 import static org.mockito.ArgumentMatchers.any;
25 import static org.mockito.Mockito.when;
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;
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;
80 public abstract class BaseServiceBusinessLogicTest extends ComponentBusinessLogicMock {
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);
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);
116 protected static ForwardingPathDataDefinition createMockPath() {
117 if (forwardingPathDataDefinition != null) {
118 return forwardingPathDataDefinition;
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;
134 public void setup() {
136 ExternalConfiguration.setAppName("catalog-be");
137 componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
140 mockElementDao = new ElementOperationMock();
142 // User data and management
144 user.setUserId("jh0003");
145 user.setFirstName("Jimmi");
146 user.setLastName("Hendrix");
147 user.setRole(Role.ADMIN.name());
149 when(mockUserAdmin.getUser("jh0003", false)).thenReturn(user);
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);
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);
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);
174 genericService = setupGenericServiceMock();
175 Either<Resource, StorageOperationStatus> findLatestGeneric = Either.left(genericService);
176 when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_SERVICE_NAME)).thenReturn(findLatestGeneric);
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)));
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();
202 responseManager = ResponseFormatManager.getInstance();
206 protected Component createNewService() {
208 Service service = new Service();
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<>();
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);
226 ci.setGroupInstances(groupInstances);
227 componentInstances.add(ci);
229 service.setComponentInstances(componentInstances);
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);
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);
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);
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");
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);
290 List<ResourceAdminEvent> list = new ArrayList<ResourceAdminEvent>() {
292 add(createResourceAudit);
293 add(checkInResourceAudit);
294 add(checkOutResourceAudit);
297 Either<List<ResourceAdminEvent>, ActionStatus> result = Either.left(list);
298 Mockito.when(auditingDao.getByServiceInstanceId(Mockito.anyString())).thenReturn(result);
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);
304 List<ResourceAdminEvent> listCurr = new ArrayList<ResourceAdminEvent>() {
306 add(checkOutResourceAudit);
309 Either<List<ResourceAdminEvent>, ActionStatus> resultCurr = Either.left(listCurr);
310 Mockito.when(auditingDao.getAuditByServiceIdAndCurrVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(resultCurr);
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);
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");
335 service.setVersion("0.1");
336 service.setUniqueId(service.getName() + ":" + service.getVersion());
337 service.setCreatorUserId(user.getUserId());
338 service.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
343 protected Resource setupGenericServiceMock() {
344 Resource genericService = new Resource();
345 genericService.setVersion("1.0");
346 genericService.setToscaResourceName(GENERIC_SERVICE_NAME);
347 return genericService;