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=========================================================
 
  21 package org.onap.so.adapters.requestsdb.adapters;
 
  23 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
 
  24 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 
  25 import static org.junit.Assert.assertEquals;
 
  26 import static org.junit.Assert.assertNotNull;
 
  27 import static org.junit.Assert.fail;
 
  28 import java.util.ArrayList;
 
  29 import java.util.List;
 
  31 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
 
  32 import org.junit.Before;
 
  33 import org.junit.Rule;
 
  34 import org.junit.Test;
 
  35 import org.junit.rules.ExpectedException;
 
  36 import org.onap.logging.ref.slf4j.ONAPLogConstants;
 
  37 import org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter;
 
  38 import org.onap.so.adapters.requestsdb.RequestStatusType;
 
  39 import org.onap.so.adapters.requestsdb.RequestsAdapterBase;
 
  40 import org.onap.so.adapters.requestsdb.application.TestAppender;
 
  41 import org.onap.so.adapters.requestsdb.exceptions.MsoRequestsDbException;
 
  42 import org.onap.so.db.request.beans.InfraActiveRequests;
 
  43 import org.onap.so.db.request.beans.OperationStatus;
 
  44 import org.onap.so.db.request.beans.ResourceOperationStatus;
 
  45 import org.onap.so.db.request.data.repository.OperationStatusRepository;
 
  46 import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository;
 
  47 import org.onap.so.requestsdb.RequestsDbConstant;
 
  48 import org.springframework.beans.factory.annotation.Autowired;
 
  49 import org.springframework.boot.web.server.LocalServerPort;
 
  50 import ch.qos.logback.classic.spi.ILoggingEvent;
 
  52 public class MSORequestDBImplTest extends RequestsAdapterBase {
 
  57     private MsoRequestsDbAdapter dbAdapter;
 
  60     private OperationStatusRepository operationStatusRepository;
 
  63     private ResourceOperationStatusRepository resourceOperationStatusRepo;
 
  66     public ExpectedException thrown = ExpectedException.none();
 
  68     public InfraActiveRequests setupTestEntities() {
 
  69         return buildTestRequest();
 
  73     public void before() throws MsoRequestsDbException {
 
  74         JaxWsProxyFactoryBean jaxWsProxyFactory = new JaxWsProxyFactoryBean();
 
  75         jaxWsProxyFactory.setServiceClass(MsoRequestsDbAdapter.class);
 
  76         jaxWsProxyFactory.setAddress("http://localhost:" + port + "/services/RequestsDbAdapter");
 
  77         jaxWsProxyFactory.setUsername("bpel");
 
  78         jaxWsProxyFactory.setPassword("mso-db-1507!");
 
  79         dbAdapter = (MsoRequestsDbAdapter) jaxWsProxyFactory.create();
 
  81         InfraActiveRequests testRequest = this.buildTestRequest();
 
  83         dbAdapter.updateInfraRequest(testRequest.getRequestId(), testRequest.getLastModifiedBy(),
 
  84                 testRequest.getStatusMessage(), testRequest.getResponseBody(),
 
  85                 RequestStatusType.valueOf(testRequest.getRequestStatus()), testRequest.getProgress().toString(),
 
  86                 testRequest.getVnfOutputs(), testRequest.getServiceInstanceId(), testRequest.getNetworkId(),
 
  87                 testRequest.getVnfId(), testRequest.getVfModuleId(), testRequest.getVolumeGroupId(),
 
  88                 testRequest.getServiceInstanceName(), testRequest.getConfigurationId(),
 
  89                 testRequest.getConfigurationName(), testRequest.getVfModuleName());
 
  94     private InfraActiveRequests buildTestRequest() {
 
  95         InfraActiveRequests testRequest = new InfraActiveRequests();
 
  96         testRequest.setRequestId("00032ab7-3fb3-42e5-965d-8ea592502017");
 
  97         testRequest.setClientRequestId("00032ab7-3fb3-42e5-965d-8ea592502016");
 
  98         testRequest.setRequestStatus("COMPLETE");
 
  99         testRequest.setStatusMessage("Vf Module has been deleted successfully.");
 
 100         testRequest.setProgress((long) 100);
 
 101         testRequest.setSource("VID");
 
 102         testRequest.setTenantId("6accefef3cb442ff9e644d589fb04107");
 
 103         testRequest.setServiceInstanceId("e3b5744d-2ad1-4cdd-8390-c999a38829bc");
 
 104         testRequest.setRequestAction("deleteInstance");
 
 105         testRequest.setRequestScope("vfModule");
 
 106         testRequest.setAction("deleteInstance");
 
 107         testRequest.setAicCloudRegion("mtn6");
 
 108         testRequest.setLastModifiedBy("BPMN");
 
 109         testRequest.setVfModuleId("c7d527b1-7a91-49fd-b97d-1c8c0f4a7992");
 
 110         testRequest.setVfModuleModelName("vSAMP10aDEV::base::module-0");
 
 111         testRequest.setVnfId("b92f60c8-8de3-46c1-8dc1-e4390ac2b005");
 
 112         testRequest.setRequestUrl("http://localhost:8080/onap/so/infra/serviceInstantiation/v7/serviceInstances");
 
 113         testRequest.setVolumeGroupId("volumeGroupId");
 
 114         testRequest.setServiceInstanceName("serviceInstanceName");
 
 115         testRequest.setConfigurationId("configurationId");
 
 116         testRequest.setConfigurationName("configurationName");
 
 117         testRequest.setNetworkId("networkId");
 
 118         testRequest.setResponseBody("responseBody");
 
 119         testRequest.setVfModuleName("vfModuleName");
 
 120         testRequest.setVnfOutputs("vnfOutputs");
 
 125     public void getByRequestId() throws MsoRequestsDbException {
 
 127         InfraActiveRequests testRequest = setupTestEntities();
 
 129         String requestId = "00032ab7-3fb3-42e5-965d-8ea592502017";
 
 132         InfraActiveRequests infraRequest = dbAdapter.getInfraRequest(requestId);
 
 133         if (infraRequest == null)
 
 134             fail("Null infraRequest");
 
 137         assertThat(infraRequest, sameBeanAs(testRequest).ignoring("requestBody").ignoring("endTime")
 
 138                 .ignoring("startTime").ignoring("modifyTime"));
 
 143     public void getByInvalidRequestId() throws MsoRequestsDbException {
 
 145         String requestId = "invalidRequestId";
 
 148             dbAdapter.getInfraRequest(requestId);
 
 149             fail("Expected MsoRequestsDbException to be thrown");
 
 150         } catch (Exception e) {
 
 151             assertEquals(e.getMessage(), "Error retrieving MSO Infra Requests DB for Request ID invalidRequestId");
 
 156     public void getByClientRequestId() throws MsoRequestsDbException {
 
 157         InfraActiveRequests testRequest = setupTestEntities();
 
 159         String clientRequestId = "00032ab7-3fb3-42e5-965d-8ea592502016";
 
 162         InfraActiveRequests infraRequest = dbAdapter.getInfraRequest(clientRequestId);
 
 163         if (infraRequest == null)
 
 164             fail("Null infraRequest");
 
 167         assertEquals(clientRequestId, infraRequest.getClientRequestId());
 
 172     public void updateInfraRequest() throws MsoRequestsDbException {
 
 173         InfraActiveRequests testRequest = setupTestEntities();
 
 175         String clientRequestId = "00032ab7-3fb3-42e5-965d-8ea592502016";
 
 179         String lastModifiedBy = "UNIT TEST";
 
 180         String statusMessage = "TESTING THE UDPATES";
 
 181         String progress = "50";
 
 182         String vnfOutputs = "VNF OUTPUTS";
 
 183         String networkId = "New NetworkID";
 
 184         String vnfId = "NEWVNFID";
 
 185         String volumeGroupId = "NewVolumeGroupId";
 
 186         String serviceInstanceName = "NewServiceInstanceName";
 
 187         String configurationId = "NewConfigurationId";
 
 188         String configurationName = "NewConfigurationName";
 
 189         String vfModuleName = "VFModuleName";
 
 190         RequestStatusType requestStatus = RequestStatusType.COMPLETE;
 
 191         String responseBody = "NewResponseBody";
 
 192         String vfModuleId = "NEW VF MODULEID";
 
 193         String serviceInstanceId = " new serv ind";
 
 196         testRequest.setVolumeGroupId(volumeGroupId);
 
 197         testRequest.setServiceInstanceName(serviceInstanceName);
 
 198         testRequest.setConfigurationId(configurationId);
 
 199         testRequest.setConfigurationName(configurationName);
 
 200         testRequest.setNetworkId(networkId);
 
 201         testRequest.setResponseBody(responseBody);
 
 202         testRequest.setStatusMessage(statusMessage);
 
 203         testRequest.setProgress((long) 50);
 
 204         testRequest.setServiceInstanceId(lastModifiedBy);
 
 205         testRequest.setLastModifiedBy(lastModifiedBy);
 
 206         testRequest.setVfModuleId(vfModuleId);
 
 207         testRequest.setVfModuleName(vfModuleName);
 
 208         testRequest.setVnfId(vnfId);
 
 209         testRequest.setServiceInstanceId(serviceInstanceId);
 
 210         testRequest.setVfModuleName(vfModuleName);
 
 211         testRequest.setVnfOutputs(vnfOutputs);
 
 214         dbAdapter.updateInfraRequest(testRequest.getRequestId(), lastModifiedBy, statusMessage, responseBody,
 
 215                 requestStatus, progress, vnfOutputs, serviceInstanceId, networkId, vnfId, vfModuleId, volumeGroupId,
 
 216                 serviceInstanceName, configurationId, configurationName, vfModuleName);
 
 217         InfraActiveRequests infraRequest = dbAdapter.getInfraRequest(clientRequestId);
 
 219         assertThat(infraRequest, sameBeanAs(testRequest).ignoring("requestBody").ignoring("endTime")
 
 220                 .ignoring("startTime").ignoring("modifyTime"));
 
 226     public void UpdateByInvalidRequestId() throws MsoRequestsDbException {
 
 228         String requestId = "invalidRequestId";
 
 231             dbAdapter.updateInfraRequest(requestId, null, null, null, null, null, null, null, null, null, null, null,
 
 232                     null, null, null, null);
 
 233             fail("Expected MsoRequestsDbException to be thrown");
 
 234         } catch (Exception e) {
 
 235             assertEquals(e.getMessage(), "Error retrieving MSO Infra Requests DB for Request ID invalidRequestId");
 
 241     public void updateInfraRequestNulls() throws MsoRequestsDbException {
 
 242         InfraActiveRequests testRequest = setupTestEntities();
 
 244         String clientRequestId = "00032ab7-3fb3-42e5-965d-8ea592502016";
 
 247         dbAdapter.updateInfraRequest(testRequest.getRequestId(), testRequest.getLastModifiedBy(), null, null, null,
 
 248                 null, null, null, null, null, null, null, null, null, null, null);
 
 249         InfraActiveRequests infraRequest = dbAdapter.getInfraRequest(clientRequestId);
 
 251         assertThat(infraRequest, sameBeanAs(testRequest).ignoring("requestBody").ignoring("endTime")
 
 252                 .ignoring("startTime").ignoring("modifyTime"));
 
 256     public void getSiteStatusNotDisabled() throws MsoRequestsDbException {
 
 259         String siteName = "siteName";
 
 262         boolean siteDisabled = dbAdapter.getSiteStatus(siteName);
 
 265         assertEquals(siteDisabled, true);
 
 269     public void getSiteStatusDisabled() throws MsoRequestsDbException {
 
 272         String siteName = "testSite";
 
 275         boolean siteDisabled = dbAdapter.getSiteStatus(siteName);
 
 278         assertEquals(siteDisabled, false);
 
 282     public void updateServiceOperation() throws MsoRequestsDbException {
 
 283         String serviceId = "serviceid";
 
 284         String operationId = "operationid";
 
 285         String serviceName = "servicename";
 
 286         String operation = "newOperationType";
 
 287         String userId = "NewUserId";
 
 288         String result = "NewResult";
 
 289         String operationContent = "newOperationContent";
 
 290         String progress = "Newprogress";
 
 291         String reason = "NewReason";
 
 293         OperationStatus updatedOperationStatus = new OperationStatus();
 
 297         updatedOperationStatus.setServiceId(serviceId);
 
 298         updatedOperationStatus.setServiceName(serviceName);
 
 299         updatedOperationStatus.setOperationId(operationId);
 
 300         updatedOperationStatus.setOperation(operation);
 
 301         updatedOperationStatus.setUserId(userId);
 
 302         updatedOperationStatus.setResult(result);
 
 303         updatedOperationStatus.setProgress(progress);
 
 304         updatedOperationStatus.setReason(reason);
 
 305         updatedOperationStatus.setOperationContent(operationContent);
 
 307         dbAdapter.updateServiceOperationStatus(serviceId, operationId, operation, userId, result, operationContent,
 
 309         OperationStatus dbOpStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
 
 310         assertThat(dbOpStatus, sameBeanAs(updatedOperationStatus).ignoring("operateAt").ignoring("finishedAt"));
 
 315     public void updateServiceOperation_Not_Found() throws MsoRequestsDbException {
 
 316         TestAppender.events.clear();
 
 317         String serviceId = "badserviceId";
 
 318         String operationId = "operationid";
 
 319         String operation = "newOperationType";
 
 320         String userId = "NewUserId";
 
 321         String result = "NewResult";
 
 322         String operationContent = "newOperationContent";
 
 323         String progress = "Newprogress";
 
 324         String reason = "NewReason";
 
 326         OperationStatus updatedOperationStatus = new OperationStatus();
 
 330         updatedOperationStatus.setServiceId(serviceId);
 
 331         updatedOperationStatus.setOperationId(operationId);
 
 332         updatedOperationStatus.setOperation(operation);
 
 333         updatedOperationStatus.setUserId(userId);
 
 334         updatedOperationStatus.setResult(result);
 
 335         updatedOperationStatus.setProgress(progress);
 
 336         updatedOperationStatus.setReason(reason);
 
 337         updatedOperationStatus.setOperationContent(operationContent);
 
 339         dbAdapter.updateServiceOperationStatus(serviceId, operationId, operation, userId, result, operationContent,
 
 341         OperationStatus dbOpStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
 
 342         assertThat(dbOpStatus, sameBeanAs(updatedOperationStatus).ignoring("operateAt").ignoring("finishedAt"));
 
 346     public void initResourceOperationStatus() throws MsoRequestsDbException {
 
 347         String resourceTemplateUUIDs = "template1:template2:template3:";
 
 348         String serviceId = "serviceId";
 
 349         String operationId = "operationId";
 
 350         String operationType = "operationType";
 
 352         ResourceOperationStatus resource1 = new ResourceOperationStatus();
 
 353         resource1.setOperationId(operationId);
 
 354         resource1.setServiceId(serviceId);
 
 355         resource1.setResourceTemplateUUID("template1");
 
 356         resource1.setOperType(operationType);
 
 357         resource1.setStatus(RequestsDbConstant.Status.PROCESSING);
 
 358         resource1.setStatusDescription("Waiting for start");
 
 360         ResourceOperationStatus resource2 = new ResourceOperationStatus();
 
 361         resource2.setOperationId(operationId);
 
 362         resource2.setServiceId(serviceId);
 
 363         resource2.setResourceTemplateUUID("template2");
 
 364         resource2.setOperType(operationType);
 
 365         resource2.setStatus(RequestsDbConstant.Status.PROCESSING);
 
 366         resource2.setStatusDescription("Waiting for start");
 
 368         ResourceOperationStatus resource3 = new ResourceOperationStatus();
 
 369         resource3.setOperationId(operationId);
 
 370         resource3.setServiceId(serviceId);
 
 371         resource3.setResourceTemplateUUID("template3");
 
 372         resource3.setOperType(operationType);
 
 373         resource3.setStatus(RequestsDbConstant.Status.PROCESSING);
 
 374         resource3.setStatusDescription("Waiting for start");
 
 376         List<ResourceOperationStatus> expectedResult = new ArrayList<ResourceOperationStatus>();
 
 377         expectedResult.add(resource1);
 
 378         expectedResult.add(resource2);
 
 379         expectedResult.add(resource3);
 
 381         dbAdapter.initResourceOperationStatus(serviceId, operationId, operationType, resourceTemplateUUIDs);
 
 382         List<ResourceOperationStatus> testList =
 
 383                 resourceOperationStatusRepo.findByServiceIdAndOperationId(serviceId, operationId);
 
 384         assertThat(testList, sameBeanAs(expectedResult));
 
 388     public void getResourceOperationStatus() throws MsoRequestsDbException {
 
 389         String resourceTemplateUUIDs = "template1";
 
 390         String serviceId = "serviceId";
 
 391         String operationId = "operationId";
 
 392         String operationType = "operationType";
 
 394         ResourceOperationStatus resource1 = new ResourceOperationStatus();
 
 395         resource1.setOperationId(operationId);
 
 396         resource1.setServiceId(serviceId);
 
 397         resource1.setResourceTemplateUUID("template1");
 
 398         resource1.setOperType(operationType);
 
 399         resource1.setStatus(RequestsDbConstant.Status.PROCESSING);
 
 400         resource1.setStatusDescription("Waiting for start");
 
 403         dbAdapter.initResourceOperationStatus(serviceId, operationId, operationType, resourceTemplateUUIDs);
 
 405         ResourceOperationStatus actualResource =
 
 406                 dbAdapter.getResourceOperationStatus(serviceId, operationId, "template1");
 
 407         assertThat(actualResource, sameBeanAs(resource1));
 
 411     public void updateResourceOperationStatus() throws MsoRequestsDbException {
 
 412         TestAppender.events.clear();
 
 413         String resourceTemplateUUID = "template1";
 
 414         String serviceId = "serviceId";
 
 415         String operationId = "operationId";
 
 416         String operationType = "operationType";
 
 417         String resourceInstanceID = "resourceInstanceID";
 
 418         String jobId = "jobId";
 
 419         String status = RequestsDbConstant.Status.FINISHED;
 
 420         String progress = "50";
 
 421         String errorCode = "errorCode";
 
 422         String statusDescription = "statusDescription";
 
 425         ResourceOperationStatus expectedResource = new ResourceOperationStatus();
 
 426         expectedResource.setOperationId(operationId);
 
 427         expectedResource.setServiceId(serviceId);
 
 428         expectedResource.setResourceTemplateUUID(resourceTemplateUUID);
 
 429         expectedResource.setOperType(operationType);
 
 430         expectedResource.setJobId(jobId);
 
 431         expectedResource.setErrorCode(errorCode);
 
 432         expectedResource.setStatus(RequestsDbConstant.Status.FINISHED);
 
 433         expectedResource.setStatusDescription(statusDescription);
 
 434         expectedResource.setProgress(progress);
 
 435         expectedResource.setResourceInstanceID(resourceInstanceID);
 
 438         dbAdapter.updateResourceOperationStatus(serviceId, operationId, resourceTemplateUUID, operationType,
 
 439                 resourceInstanceID, jobId, status, progress, errorCode, statusDescription);
 
 441         ResourceOperationStatus actualResource =
 
 442                 dbAdapter.getResourceOperationStatus(serviceId, operationId, "template1");
 
 443         assertThat(actualResource, sameBeanAs(expectedResource));
 
 445         for (ILoggingEvent logEvent : TestAppender.events)
 
 446             if (logEvent.getLoggerName().equals("org.onap.so.logging.cxf.interceptor.SOAPLoggingInInterceptor")
 
 447                     && logEvent.getMarker().getName().equals("ENTRY")) {
 
 448                 Map<String, String> mdc = logEvent.getMDCPropertyMap();
 
 449                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.INSTANCE_UUID));
 
 450                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.REQUEST_ID));
 
 451                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.INVOCATION_ID));
 
 452                 assertEquals("", mdc.get(ONAPLogConstants.MDCs.PARTNER_NAME));
 
 453                 assertEquals("/services/RequestsDbAdapter", mdc.get(ONAPLogConstants.MDCs.SERVICE_NAME));
 
 454                 assertEquals("INPROGRESS", mdc.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
 
 455             } else if (logEvent.getLoggerName().equals("org.onap.so.logging.cxf.interceptor.SOAPLoggingOutInterceptor")
 
 456                     && logEvent.getMarker().getName().equals("EXIT")) {
 
 457                 Map<String, String> mdc = logEvent.getMDCPropertyMap();
 
 458                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.REQUEST_ID));
 
 459                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.INVOCATION_ID));
 
 460                 assertEquals(null, mdc.get(ONAPLogConstants.MDCs.RESPONSE_CODE));
 
 461                 assertEquals("", mdc.get(ONAPLogConstants.MDCs.PARTNER_NAME));
 
 462                 assertEquals("/services/RequestsDbAdapter", mdc.get(ONAPLogConstants.MDCs.SERVICE_NAME));
 
 463                 assertEquals("COMPLETED", mdc.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));