2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2020 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=========================================================
21 package org.openecomp.sdc.be.components.impl;
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.mockito.ArgumentMatchers.anyString;
25 import static org.mockito.ArgumentMatchers.eq;
26 import static org.mockito.Mockito.when;
28 import fj.data.Either;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.Collections;
32 import java.util.List;
33 import javax.servlet.ServletContext;
34 import org.junit.jupiter.api.BeforeEach;
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.DistributionEngine;
39 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
40 import org.openecomp.sdc.be.components.impl.generic.GenericTypeBusinessLogic;
41 import org.openecomp.sdc.be.components.path.ForwardingPathValidator;
42 import org.openecomp.sdc.be.components.validation.ServiceDistributionValidation;
43 import org.openecomp.sdc.be.components.validation.UserValidations;
44 import org.openecomp.sdc.be.components.validation.component.ComponentContactIdValidator;
45 import org.openecomp.sdc.be.components.validation.component.ComponentDescriptionValidator;
46 import org.openecomp.sdc.be.components.validation.component.ComponentFieldValidator;
47 import org.openecomp.sdc.be.components.validation.component.ComponentIconValidator;
48 import org.openecomp.sdc.be.components.validation.component.ComponentNameValidator;
49 import org.openecomp.sdc.be.components.validation.component.ComponentProjectCodeValidator;
50 import org.openecomp.sdc.be.components.validation.component.ComponentTagsValidator;
51 import org.openecomp.sdc.be.components.validation.component.ComponentValidator;
52 import org.openecomp.sdc.be.components.validation.service.ServiceCategoryValidator;
53 import org.openecomp.sdc.be.components.validation.service.ServiceEnvironmentContextValidator;
54 import org.openecomp.sdc.be.components.validation.service.ServiceFieldValidator;
55 import org.openecomp.sdc.be.components.validation.service.ServiceFunctionValidator;
56 import org.openecomp.sdc.be.components.validation.service.ServiceInstantiationTypeValidator;
57 import org.openecomp.sdc.be.components.validation.service.ServiceNamingPolicyValidator;
58 import org.openecomp.sdc.be.components.validation.service.ServiceRoleValidator;
59 import org.openecomp.sdc.be.components.validation.service.ServiceTypeValidator;
60 import org.openecomp.sdc.be.components.validation.service.ServiceValidator;
61 import org.openecomp.sdc.be.dao.api.ActionStatus;
62 import org.openecomp.sdc.be.dao.cassandra.AuditCassandraDao;
63 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
64 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
65 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
66 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
67 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
68 import org.openecomp.sdc.be.facade.operations.CatalogOperation;
69 import org.openecomp.sdc.be.impl.ComponentsUtils;
70 import org.openecomp.sdc.be.impl.WebAppContextWrapper;
71 import org.openecomp.sdc.be.model.ArtifactDefinition;
72 import org.openecomp.sdc.be.model.Component;
73 import org.openecomp.sdc.be.model.Resource;
74 import org.openecomp.sdc.be.model.Service;
75 import org.openecomp.sdc.be.model.User;
76 import org.openecomp.sdc.be.model.category.CategoryDefinition;
77 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
78 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
79 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
80 import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation;
81 import org.openecomp.sdc.be.model.operations.impl.ModelOperation;
82 import org.openecomp.sdc.be.resources.data.auditing.DistributionDeployEvent;
83 import org.openecomp.sdc.be.resources.data.auditing.DistributionNotificationEvent;
84 import org.openecomp.sdc.be.resources.data.auditing.ResourceAdminEvent;
85 import org.openecomp.sdc.be.user.Role;
86 import org.openecomp.sdc.be.user.UserBusinessLogic;
87 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
88 import org.openecomp.sdc.common.api.Constants;
89 import org.openecomp.sdc.exception.ResponseFormat;
90 import org.springframework.web.context.WebApplicationContext;
92 class ServiceBusinessLogicBaseTestSetup extends BaseBusinessLogicMock {
94 protected static final String SERVICE_CATEGORY = "Mobility";
95 protected static final String INSTANTIATION_TYPE = "A-la-carte";
96 protected static final String CERTIFIED_VERSION = "1.0";
97 protected static final String UNCERTIFIED_VERSION = "0.2";
98 protected static final String COMPONNET_ID = "myUniqueId";
99 protected static final String GENERIC_SERVICE_NAME = "org.openecomp.resource.abstract.nodes.service";
100 protected static final String SERVICE_ROLE = JsonPresentationFields.SERVICE_ROLE.getPresentation();
101 protected static final String SERVICE_TYPE = JsonPresentationFields.SERVICE_TYPE.getPresentation();
102 protected static final String SERVICE_FUNCTION = JsonPresentationFields.SERVICE_FUNCTION.getPresentation();
103 protected final ServletContext servletContext = Mockito.mock(ServletContext.class);
104 protected final ComponentValidator componentValidator = Mockito.mock(ComponentValidator.class);
105 protected ServiceBusinessLogic bl;
106 protected UserBusinessLogic mockUserAdmin = Mockito.mock(UserBusinessLogic.class);
107 protected WebAppContextWrapper webAppContextWrapper = Mockito.mock(WebAppContextWrapper.class);
108 protected WebApplicationContext webAppContext = Mockito.mock(WebApplicationContext.class);
109 protected ResponseFormatManager responseManager = null;
110 protected ComponentsUtils componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
111 protected AuditCassandraDao auditingDao = Mockito.mock(AuditCassandraDao.class);
112 protected ArtifactsBusinessLogic artifactBl = Mockito.mock(ArtifactsBusinessLogic.class);
113 protected GraphLockOperation graphLockOperation = Mockito.mock(GraphLockOperation.class);
114 protected JanusGraphDao mockJanusGraphDao = Mockito.mock(JanusGraphDao.class);
115 protected ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
116 protected GenericTypeBusinessLogic genericTypeBusinessLogic = Mockito.mock(GenericTypeBusinessLogic.class);
117 protected UserValidations userValidations = Mockito.mock(UserValidations.class);
118 protected ResourceAdminEvent auditArchive1 = Mockito.mock(ResourceAdminEvent.class);
119 protected CatalogOperation catalogOperation = Mockito.mock(CatalogOperation.class);
120 protected ResourceAdminEvent auditArchive2 = Mockito.mock(ResourceAdminEvent.class);
121 protected ResourceAdminEvent auditRestore = Mockito.mock(ResourceAdminEvent.class);
122 protected ModelOperation modelOperation = Mockito.mock(ModelOperation.class);
123 protected ServiceTypeValidator serviceTypeValidator = new ServiceTypeValidator(componentsUtils);
124 protected ServiceRoleValidator serviceRoleValidator = new ServiceRoleValidator(componentsUtils);
125 protected ServiceFunctionValidator serviceFunctionValidator = new ServiceFunctionValidator(componentsUtils);
126 protected ServiceInstantiationTypeValidator serviceInstantiationTypeValidator = new ServiceInstantiationTypeValidator(componentsUtils);
127 protected ComponentDescriptionValidator componentDescriptionValidator = new ComponentDescriptionValidator(componentsUtils);
128 protected ComponentProjectCodeValidator componentProjectCodeValidator = new ComponentProjectCodeValidator(componentsUtils);
129 protected ComponentIconValidator componentIconValidator = new ComponentIconValidator(componentsUtils);
130 protected ComponentContactIdValidator componentContactIdValidator = new ComponentContactIdValidator(componentsUtils);
131 protected ComponentTagsValidator componentTagsValidator = new ComponentTagsValidator(componentsUtils);
132 protected ComponentNameValidator componentNameValidator = new ComponentNameValidator(componentsUtils, toscaOperationFacade);
133 protected User user = null;
134 protected Resource genericService = null;
135 IElementOperation mockElementDao = new ElementOperationMock();
136 protected ServiceCategoryValidator serviceCategoryValidator = new ServiceCategoryValidator(componentsUtils, mockElementDao);
137 protected ServiceValidator serviceValidator = createServiceValidator();
138 DistributionEngine distributionEngine = Mockito.mock(DistributionEngine.class);
139 ServiceDistributionValidation serviceDistributionValidation = Mockito.mock(ServiceDistributionValidation.class);
140 ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
141 ForwardingPathValidator forwardingPathValidator = Mockito.mock(ForwardingPathValidator.class);
142 UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
143 final InputsBusinessLogic inputsBusinessLogic = Mockito.mock(InputsBusinessLogic.class);
145 public ServiceBusinessLogicBaseTestSetup() {
149 protected ServiceValidator createServiceValidator() {
150 List<ComponentFieldValidator> componentFieldValidators = Arrays.asList(componentContactIdValidator,
151 componentDescriptionValidator,
152 componentIconValidator, componentNameValidator,
153 new ComponentProjectCodeValidator(componentsUtils),
154 componentTagsValidator);
156 List<ServiceFieldValidator> serviceFieldValidators = Arrays.asList(serviceCategoryValidator, new ServiceEnvironmentContextValidator(),
157 serviceInstantiationTypeValidator, new ServiceNamingPolicyValidator(componentsUtils),
158 serviceRoleValidator, serviceTypeValidator);
159 return new ServiceValidator(componentsUtils, componentFieldValidators, serviceFieldValidators);
163 public void setup() {
166 IElementOperation mockElementDao = new ElementOperationMock();
168 // User data and management
170 user.setUserId("jh0003");
171 user.setFirstName("Jimmi");
172 user.setLastName("Hendrix");
173 user.setRole(Role.ADMIN.name());
175 when(mockUserAdmin.getUser("jh0003", false)).thenReturn(user);
176 when(userValidations.validateUserExists("jh0003")).thenReturn(user);
177 when(userValidations.validateUserNotEmpty(eq(user), anyString())).thenReturn(user);
178 when(servletContext.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR)).thenReturn(configurationManager);
179 when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)).thenReturn(webAppContextWrapper);
180 when(webAppContextWrapper.getWebAppContext(servletContext)).thenReturn(webAppContext);
181 when(webAppContext.getBean(IElementOperation.class)).thenReturn(mockElementDao);
182 when(graphLockOperation.lockComponent(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Service))).thenReturn(StorageOperationStatus.OK);
183 when(graphLockOperation.lockComponentByName(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Service))).thenReturn(StorageOperationStatus.OK);
184 when(catalogOperation.updateCatalog(Mockito.any(), Mockito.any())).thenReturn(ActionStatus.OK);
185 // artifact bussinesslogic
186 ArtifactDefinition artifactDef = new ArtifactDefinition();
187 when(artifactBl.createArtifactPlaceHolderInfo(Mockito.any(), Mockito.anyString(), Mockito.anyMap(), Mockito.any(User.class),
188 Mockito.any(ArtifactGroupTypeEnum.class))).thenReturn(artifactDef);
191 Service serviceResponse = createServiceObject(true);
192 Either<Component, StorageOperationStatus> eitherCreate = Either.left(serviceResponse);
193 when(toscaOperationFacade.createToscaComponent(Mockito.any(Component.class))).thenReturn(eitherCreate);
194 Either<Boolean, StorageOperationStatus> eitherCount = Either.left(false);
195 when(toscaOperationFacade.validateComponentNameExists("Service", null, ComponentTypeEnum.SERVICE)).thenReturn(eitherCount);
196 Either<Boolean, StorageOperationStatus> eitherCountExist = Either.left(true);
197 when(toscaOperationFacade.validateComponentNameExists("alreadyExist", null, ComponentTypeEnum.SERVICE)).thenReturn(eitherCountExist);
198 when(userValidations.validateUserExists(user)).thenReturn(user);
200 genericService = setupGenericServiceMock();
201 Either<Resource, StorageOperationStatus> findLatestGeneric = Either.left(genericService);
202 when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_SERVICE_NAME)).thenReturn(findLatestGeneric);
204 bl = new ServiceBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic, interfaceOperation,
205 interfaceLifecycleTypeOperation, artifactBl, distributionEngine, componentInstanceBusinessLogic, serviceDistributionValidation,
206 forwardingPathValidator, uiComponentDataConverter, artifactToscaOperation, componentContactIdValidator, componentNameValidator,
207 componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator,
208 modelOperation, serviceRoleValidator, serviceInstantiationTypeValidator, serviceCategoryValidator, serviceValidator, inputsBusinessLogic);
209 bl.setComponentContactIdValidator(componentContactIdValidator);
210 bl.setComponentIconValidator(componentIconValidator);
211 bl.setComponentTagsValidator(componentTagsValidator);
212 bl.setComponentNameValidator(componentNameValidator);
213 bl.setComponentDescriptionValidator(componentDescriptionValidator);
214 bl.setComponentProjectCodeValidator(componentProjectCodeValidator);
215 bl.setServiceTypeValidator(serviceTypeValidator);
216 bl.setServiceFunctionValidator(serviceFunctionValidator);
217 bl.setElementDao(mockElementDao);
218 bl.setUserAdmin(mockUserAdmin);
219 bl.setArtifactBl(artifactBl);
220 bl.setGraphLockOperation(graphLockOperation);
221 bl.setJanusGraphDao(mockJanusGraphDao);
222 bl.setToscaOperationFacade(toscaOperationFacade);
223 bl.setGenericTypeBusinessLogic(genericTypeBusinessLogic);
224 bl.setComponentsUtils(componentsUtils);
225 bl.setCassandraAuditingDao(auditingDao);
226 bl.setUserValidations(userValidations);
227 bl.setCatalogOperations(catalogOperation);
229 mockAuditingDaoLogic();
231 responseManager = ResponseFormatManager.getInstance();
236 protected Resource setupGenericServiceMock() {
237 Resource genericService = new Resource();
238 genericService.setVersion("1.0");
239 genericService.setToscaResourceName(GENERIC_SERVICE_NAME);
240 return genericService;
243 protected Service createServiceObject(boolean afterCreate) {
244 Service service = new Service();
245 service.setUniqueId("sid");
246 service.setName("Service");
247 CategoryDefinition category = new CategoryDefinition();
248 category.setName(SERVICE_CATEGORY);
249 category.setIcons(Collections.singletonList("defaulticon"));
250 List<CategoryDefinition> categories = new ArrayList<>();
251 categories.add(category);
252 service.setCategories(categories);
253 service.setInstantiationType(INSTANTIATION_TYPE);
255 service.setDescription("description");
256 List<String> tgs = new ArrayList<>();
257 tgs.add(service.getName());
258 service.setTags(tgs);
259 service.setIcon("defaulticon");
260 service.setContactId("aa1234");
261 service.setProjectCode("12345");
262 service.setEcompGeneratedNaming(true);
265 service.setVersion("0.1");
266 service.setUniqueId(service.getName() + ":" + service.getVersion());
267 service.setCreatorUserId(user.getUserId());
268 service.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
273 private void mockAuditingDaoLogic() {
274 final ResourceAdminEvent createResourceAudit = new ResourceAdminEvent();
275 createResourceAudit.setModifier("Carlos Santana(cs0008)");
276 createResourceAudit.setCurrState("NOT_CERTIFIED_CHECKOUT");
277 createResourceAudit.setCurrVersion("0.1");
278 createResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
279 createResourceAudit.setRequestId("3e65cea1-7403-4bc7-b461-e2544d83799f");
280 createResourceAudit.setDesc("OK");
281 createResourceAudit.setResourceType("Resource");
282 createResourceAudit.setStatus("201");
283 createResourceAudit.setPrevVersion("");
284 createResourceAudit.setAction("Create");
285 createResourceAudit.setPrevState("");
286 createResourceAudit.setResourceName("MyTestResource");
288 final ResourceAdminEvent checkInResourceAudit = new ResourceAdminEvent();
289 checkInResourceAudit.setModifier("Carlos Santana(cs0008)");
290 checkInResourceAudit.setCurrState("NOT_CERTIFIED_CHECKIN");
291 checkInResourceAudit.setCurrVersion("0.1");
292 checkInResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
293 checkInResourceAudit.setRequestId("ffacbf5d-eeb1-43c6-a310-37fe7e1cc091");
294 checkInResourceAudit.setDesc("OK");
295 checkInResourceAudit.setComment("Stam");
296 checkInResourceAudit.setResourceType("Resource");
297 checkInResourceAudit.setStatus("200");
298 checkInResourceAudit.setPrevVersion("0.1");
299 checkInResourceAudit.setAction("Checkin");
300 checkInResourceAudit.setPrevState("NOT_CERTIFIED_CHECKOUT");
301 checkInResourceAudit.setResourceName("MyTestResource");
303 final ResourceAdminEvent checkOutResourceAudit = new ResourceAdminEvent();
304 checkOutResourceAudit.setModifier("Carlos Santana(cs0008)");
305 checkOutResourceAudit.setCurrState("NOT_CERTIFIED_CHECKOUT");
306 checkOutResourceAudit.setCurrVersion("0.2");
307 checkOutResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
308 checkOutResourceAudit.setRequestId("7add5078-4c16-4d74-9691-cc150e3c96b8");
309 checkOutResourceAudit.setDesc("OK");
310 checkOutResourceAudit.setComment("");
311 checkOutResourceAudit.setResourceType("Resource");
312 checkOutResourceAudit.setStatus("200");
313 checkOutResourceAudit.setPrevVersion("0.1");
314 checkOutResourceAudit.setAction("Checkout");
315 checkOutResourceAudit.setPrevState("NOT_CERTIFIED_CHECKIN");
316 checkOutResourceAudit.setResourceName("MyTestResource");
317 List<ResourceAdminEvent> list = new ArrayList<>() {
319 add(createResourceAudit);
320 add(checkInResourceAudit);
321 add(checkOutResourceAudit);
324 Either<List<ResourceAdminEvent>, ActionStatus> result = Either.left(list);
325 Mockito.when(auditingDao.getByServiceInstanceId(Mockito.anyString())).thenReturn(result);
327 List<ResourceAdminEvent> listPrev = new ArrayList<>();
328 Either<List<ResourceAdminEvent>, ActionStatus> resultPrev = Either.left(listPrev);
329 Mockito.when(auditingDao.getAuditByServiceIdAndPrevVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(resultPrev);
331 List<ResourceAdminEvent> listCurr = new ArrayList<>() {
333 add(checkOutResourceAudit);
336 Either<List<ResourceAdminEvent>, ActionStatus> resultCurr = Either.left(listCurr);
337 Mockito.when(auditingDao.getAuditByServiceIdAndCurrVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(resultCurr);
339 Either<List<ResourceAdminEvent>, ActionStatus> archiveAuditList = Either.left(Arrays.asList(auditArchive1, auditArchive2));
340 when(auditingDao.getArchiveAuditByServiceInstanceId(anyString())).thenReturn(archiveAuditList);
342 Either<List<ResourceAdminEvent>, ActionStatus> restoreAuditList = Either.left(Collections.singletonList(auditRestore));
343 when(auditingDao.getRestoreAuditByServiceInstanceId(anyString())).thenReturn(restoreAuditList);
347 protected void setupBeforeDeploy(String notifyAction, String requestAction, String did) {
349 DistributionNotificationEvent notifyEvent = new DistributionNotificationEvent();
350 notifyEvent.setAction(notifyAction);
351 notifyEvent.setDid(did);
352 notifyEvent.setStatus("200");
354 ResourceAdminEvent requestEvent = new ResourceAdminEvent();
355 requestEvent.setAction(requestAction);
356 requestEvent.setDid(did);
357 requestEvent.setStatus("200");
359 List<DistributionNotificationEvent> notifyResults = Collections.singletonList(notifyEvent);
360 Either<List<DistributionNotificationEvent>, ActionStatus> eitherNotify = Either.left(notifyResults);
362 Mockito.when(auditingDao.getDistributionNotify(Mockito.anyString(), Mockito.eq(notifyAction))).thenReturn(eitherNotify);
364 List<ResourceAdminEvent> requestResults = Collections.singletonList(requestEvent);
365 Either<List<ResourceAdminEvent>, ActionStatus> eitherRequest = Either.left(requestResults);
366 Mockito.when(auditingDao.getDistributionRequest(Mockito.anyString(), Mockito.eq(requestAction))).thenReturn(eitherRequest);
368 Either<Component, StorageOperationStatus> eitherService = Either.left(createServiceObject(true));
369 Mockito.when(toscaOperationFacade.getToscaElement(Mockito.anyString())).thenReturn(eitherService);
371 Either<List<DistributionDeployEvent>, ActionStatus> emptyEventList = Either.left(Collections.emptyList());
372 Mockito.when(auditingDao.getDistributionDeployByStatus(Mockito.anyString(), Mockito.eq("DResult"), Mockito.anyString()))
373 .thenReturn(emptyEventList);
376 private void assertResponse(Either<Service, ResponseFormat> createResponse, ActionStatus expectedStatus, String... variables) {
377 assertResponse(createResponse.right().value(), expectedStatus, variables);
380 protected void assertComponentException(ComponentException e, ActionStatus expectedStatus, String... variables) {
381 ResponseFormat actualResponse = e.getResponseFormat() != null ?
382 e.getResponseFormat() : componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams());
383 assertResponse(actualResponse, expectedStatus, variables);
386 protected void assertResponse(ResponseFormat actualResponse, ActionStatus expectedStatus, String... variables) {
387 ResponseFormat expectedResponse = responseManager.getResponseFormat(expectedStatus, variables);
388 assertEquals(expectedResponse.getStatus(), actualResponse.getStatus());
389 assertEquals(expectedResponse.getFormattedMessage(), actualResponse.getFormattedMessage(), "assert error description");