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();
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);
144 public ServiceBusinessLogicBaseTestSetup() {
148 protected ServiceValidator createServiceValidator() {
149 List<ComponentFieldValidator> componentFieldValidators = Arrays.asList(componentContactIdValidator,
150 componentDescriptionValidator,
151 componentIconValidator, componentNameValidator,
152 new ComponentProjectCodeValidator(componentsUtils),
153 componentTagsValidator);
155 List<ServiceFieldValidator> serviceFieldValidators = Arrays.asList(serviceCategoryValidator, new ServiceEnvironmentContextValidator(),
156 serviceInstantiationTypeValidator, new ServiceNamingPolicyValidator(componentsUtils),
157 serviceRoleValidator, serviceTypeValidator);
158 return new ServiceValidator(componentsUtils, componentFieldValidators, serviceFieldValidators);
162 public void setup() {
165 IElementOperation mockElementDao = new ElementOperationMock();
167 // User data and management
169 user.setUserId("jh0003");
170 user.setFirstName("Jimmi");
171 user.setLastName("Hendrix");
172 user.setRole(Role.ADMIN.name());
174 when(mockUserAdmin.getUser("jh0003", false)).thenReturn(user);
175 when(userValidations.validateUserExists(eq("jh0003"))).thenReturn(user);
176 when(userValidations.validateUserNotEmpty(eq(user), anyString())).thenReturn(user);
177 when(servletContext.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR)).thenReturn(configurationManager);
178 when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)).thenReturn(webAppContextWrapper);
179 when(webAppContextWrapper.getWebAppContext(servletContext)).thenReturn(webAppContext);
180 when(webAppContext.getBean(IElementOperation.class)).thenReturn(mockElementDao);
181 when(graphLockOperation.lockComponent(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Service))).thenReturn(StorageOperationStatus.OK);
182 when(graphLockOperation.lockComponentByName(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Service))).thenReturn(StorageOperationStatus.OK);
183 when(catalogOperation.updateCatalog(Mockito.any(), Mockito.any())).thenReturn(ActionStatus.OK);
184 // artifact bussinesslogic
185 ArtifactDefinition artifactDef = new ArtifactDefinition();
186 when(artifactBl.createArtifactPlaceHolderInfo(Mockito.any(), Mockito.anyString(), Mockito.anyMap(), Mockito.any(User.class),
187 Mockito.any(ArtifactGroupTypeEnum.class))).thenReturn(artifactDef);
190 Service serviceResponse = createServiceObject(true);
191 Either<Component, StorageOperationStatus> eitherCreate = Either.left(serviceResponse);
192 when(toscaOperationFacade.createToscaComponent(Mockito.any(Component.class))).thenReturn(eitherCreate);
193 Either<Boolean, StorageOperationStatus> eitherCount = Either.left(false);
194 when(toscaOperationFacade.validateComponentNameExists("Service", null, ComponentTypeEnum.SERVICE)).thenReturn(eitherCount);
195 Either<Boolean, StorageOperationStatus> eitherCountExist = Either.left(true);
196 when(toscaOperationFacade.validateComponentNameExists("alreadyExist", null, ComponentTypeEnum.SERVICE)).thenReturn(eitherCountExist);
197 when(userValidations.validateUserExists(user)).thenReturn(user);
199 genericService = setupGenericServiceMock();
200 Either<Resource, StorageOperationStatus> findLatestGeneric = Either.left(genericService);
201 when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_SERVICE_NAME)).thenReturn(findLatestGeneric);
203 bl = new ServiceBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic, interfaceOperation,
204 interfaceLifecycleTypeOperation, artifactBl, distributionEngine, componentInstanceBusinessLogic, serviceDistributionValidation,
205 forwardingPathValidator, uiComponentDataConverter, artifactToscaOperation, componentContactIdValidator, componentNameValidator,
206 componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator,
207 modelOperation, serviceRoleValidator, serviceInstantiationTypeValidator, serviceCategoryValidator, serviceValidator, null);
208 bl.setComponentContactIdValidator(componentContactIdValidator);
209 bl.setComponentIconValidator(componentIconValidator);
210 bl.setComponentTagsValidator(componentTagsValidator);
211 bl.setComponentNameValidator(componentNameValidator);
212 bl.setComponentDescriptionValidator(componentDescriptionValidator);
213 bl.setComponentProjectCodeValidator(componentProjectCodeValidator);
214 bl.setServiceTypeValidator(serviceTypeValidator);
215 bl.setServiceFunctionValidator(serviceFunctionValidator);
216 bl.setElementDao(mockElementDao);
217 bl.setUserAdmin(mockUserAdmin);
218 bl.setArtifactBl(artifactBl);
219 bl.setGraphLockOperation(graphLockOperation);
220 bl.setJanusGraphDao(mockJanusGraphDao);
221 bl.setToscaOperationFacade(toscaOperationFacade);
222 bl.setGenericTypeBusinessLogic(genericTypeBusinessLogic);
223 bl.setComponentsUtils(componentsUtils);
224 bl.setCassandraAuditingDao(auditingDao);
225 bl.setUserValidations(userValidations);
226 bl.setCatalogOperations(catalogOperation);
228 mockAuditingDaoLogic();
230 responseManager = ResponseFormatManager.getInstance();
235 protected Resource setupGenericServiceMock() {
236 Resource genericService = new Resource();
237 genericService.setVersion("1.0");
238 genericService.setToscaResourceName(GENERIC_SERVICE_NAME);
239 return genericService;
242 protected Service createServiceObject(boolean afterCreate) {
243 Service service = new Service();
244 service.setUniqueId("sid");
245 service.setName("Service");
246 CategoryDefinition category = new CategoryDefinition();
247 category.setName(SERVICE_CATEGORY);
248 category.setIcons(Collections.singletonList("defaulticon"));
249 List<CategoryDefinition> categories = new ArrayList<>();
250 categories.add(category);
251 service.setCategories(categories);
252 service.setInstantiationType(INSTANTIATION_TYPE);
254 service.setDescription("description");
255 List<String> tgs = new ArrayList<>();
256 tgs.add(service.getName());
257 service.setTags(tgs);
258 service.setIcon("defaulticon");
259 service.setContactId("aa1234");
260 service.setProjectCode("12345");
261 service.setEcompGeneratedNaming(true);
264 service.setVersion("0.1");
265 service.setUniqueId(service.getName() + ":" + service.getVersion());
266 service.setCreatorUserId(user.getUserId());
267 service.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
272 private void mockAuditingDaoLogic() {
273 final ResourceAdminEvent createResourceAudit = new ResourceAdminEvent();
274 createResourceAudit.setModifier("Carlos Santana(cs0008)");
275 createResourceAudit.setCurrState("NOT_CERTIFIED_CHECKOUT");
276 createResourceAudit.setCurrVersion("0.1");
277 createResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
278 createResourceAudit.setRequestId("3e65cea1-7403-4bc7-b461-e2544d83799f");
279 createResourceAudit.setDesc("OK");
280 createResourceAudit.setResourceType("Resource");
281 createResourceAudit.setStatus("201");
282 createResourceAudit.setPrevVersion("");
283 createResourceAudit.setAction("Create");
284 createResourceAudit.setPrevState("");
285 createResourceAudit.setResourceName("MyTestResource");
287 final ResourceAdminEvent checkInResourceAudit = new ResourceAdminEvent();
288 checkInResourceAudit.setModifier("Carlos Santana(cs0008)");
289 checkInResourceAudit.setCurrState("NOT_CERTIFIED_CHECKIN");
290 checkInResourceAudit.setCurrVersion("0.1");
291 checkInResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
292 checkInResourceAudit.setRequestId("ffacbf5d-eeb1-43c6-a310-37fe7e1cc091");
293 checkInResourceAudit.setDesc("OK");
294 checkInResourceAudit.setComment("Stam");
295 checkInResourceAudit.setResourceType("Resource");
296 checkInResourceAudit.setStatus("200");
297 checkInResourceAudit.setPrevVersion("0.1");
298 checkInResourceAudit.setAction("Checkin");
299 checkInResourceAudit.setPrevState("NOT_CERTIFIED_CHECKOUT");
300 checkInResourceAudit.setResourceName("MyTestResource");
302 final ResourceAdminEvent checkOutResourceAudit = new ResourceAdminEvent();
303 checkOutResourceAudit.setModifier("Carlos Santana(cs0008)");
304 checkOutResourceAudit.setCurrState("NOT_CERTIFIED_CHECKOUT");
305 checkOutResourceAudit.setCurrVersion("0.2");
306 checkOutResourceAudit.setServiceInstanceId("82eddd99-0bd9-4742-ab0a-1bdb5e262a05");
307 checkOutResourceAudit.setRequestId("7add5078-4c16-4d74-9691-cc150e3c96b8");
308 checkOutResourceAudit.setDesc("OK");
309 checkOutResourceAudit.setComment("");
310 checkOutResourceAudit.setResourceType("Resource");
311 checkOutResourceAudit.setStatus("200");
312 checkOutResourceAudit.setPrevVersion("0.1");
313 checkOutResourceAudit.setAction("Checkout");
314 checkOutResourceAudit.setPrevState("NOT_CERTIFIED_CHECKIN");
315 checkOutResourceAudit.setResourceName("MyTestResource");
316 List<ResourceAdminEvent> list = new ArrayList<>() {
318 add(createResourceAudit);
319 add(checkInResourceAudit);
320 add(checkOutResourceAudit);
323 Either<List<ResourceAdminEvent>, ActionStatus> result = Either.left(list);
324 Mockito.when(auditingDao.getByServiceInstanceId(Mockito.anyString())).thenReturn(result);
326 List<ResourceAdminEvent> listPrev = new ArrayList<>();
327 Either<List<ResourceAdminEvent>, ActionStatus> resultPrev = Either.left(listPrev);
328 Mockito.when(auditingDao.getAuditByServiceIdAndPrevVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(resultPrev);
330 List<ResourceAdminEvent> listCurr = new ArrayList<>() {
332 add(checkOutResourceAudit);
335 Either<List<ResourceAdminEvent>, ActionStatus> resultCurr = Either.left(listCurr);
336 Mockito.when(auditingDao.getAuditByServiceIdAndCurrVersion(Mockito.anyString(), Mockito.anyString())).thenReturn(resultCurr);
338 Either<List<ResourceAdminEvent>, ActionStatus> archiveAuditList = Either.left(Arrays.asList(auditArchive1, auditArchive2));
339 when(auditingDao.getArchiveAuditByServiceInstanceId(anyString())).thenReturn(archiveAuditList);
341 Either<List<ResourceAdminEvent>, ActionStatus> restoreAuditList = Either.left(Collections.singletonList(auditRestore));
342 when(auditingDao.getRestoreAuditByServiceInstanceId(anyString())).thenReturn(restoreAuditList);
346 protected void setupBeforeDeploy(String notifyAction, String requestAction, String did) {
348 DistributionNotificationEvent notifyEvent = new DistributionNotificationEvent();
349 notifyEvent.setAction(notifyAction);
350 notifyEvent.setDid(did);
351 notifyEvent.setStatus("200");
353 ResourceAdminEvent requestEvent = new ResourceAdminEvent();
354 requestEvent.setAction(requestAction);
355 requestEvent.setDid(did);
356 requestEvent.setStatus("200");
358 List<DistributionNotificationEvent> notifyResults = Collections.singletonList(notifyEvent);
359 Either<List<DistributionNotificationEvent>, ActionStatus> eitherNotify = Either.left(notifyResults);
361 Mockito.when(auditingDao.getDistributionNotify(Mockito.anyString(), Mockito.eq(notifyAction))).thenReturn(eitherNotify);
363 List<ResourceAdminEvent> requestResults = Collections.singletonList(requestEvent);
364 Either<List<ResourceAdminEvent>, ActionStatus> eitherRequest = Either.left(requestResults);
365 Mockito.when(auditingDao.getDistributionRequest(Mockito.anyString(), Mockito.eq(requestAction))).thenReturn(eitherRequest);
367 Either<Component, StorageOperationStatus> eitherService = Either.left(createServiceObject(true));
368 Mockito.when(toscaOperationFacade.getToscaElement(Mockito.anyString())).thenReturn(eitherService);
370 Either<List<DistributionDeployEvent>, ActionStatus> emptyEventList = Either.left(Collections.emptyList());
371 Mockito.when(auditingDao.getDistributionDeployByStatus(Mockito.anyString(), Mockito.eq("DResult"), Mockito.anyString()))
372 .thenReturn(emptyEventList);
375 private void assertResponse(Either<Service, ResponseFormat> createResponse, ActionStatus expectedStatus, String... variables) {
376 assertResponse(createResponse.right().value(), expectedStatus, variables);
379 protected void assertComponentException(ComponentException e, ActionStatus expectedStatus, String... variables) {
380 ResponseFormat actualResponse = e.getResponseFormat() != null ?
381 e.getResponseFormat() : componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams());
382 assertResponse(actualResponse, expectedStatus, variables);
385 protected void assertResponse(ResponseFormat actualResponse, ActionStatus expectedStatus, String... variables) {
386 ResponseFormat expectedResponse = responseManager.getResponseFormat(expectedStatus, variables);
387 assertEquals(expectedResponse.getStatus(), actualResponse.getStatus());
388 assertEquals(expectedResponse.getFormattedMessage(), actualResponse.getFormattedMessage(), "assert error description");