diff options
Diffstat (limited to 'mso-api-handlers')
6 files changed, 137 insertions, 27 deletions
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java index a1c1dd1cc4..2fd426dec2 100644 --- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java @@ -24,22 +24,27 @@ import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.ext.Provider; -import org.apache.http.HttpStatus; import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.onap.so.apihandler.common.ErrorNumbers; +import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestIdException; import org.onap.so.db.request.beans.InfraActiveRequests; import org.onap.so.db.request.client.RequestsDbClient; -import org.slf4j.MDC; +import org.onap.so.serviceinstancebeans.RequestError; +import org.onap.so.serviceinstancebeans.ServiceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; @Priority(2) @Provider @Component public class RequestIdFilter implements ContainerRequestFilter { - protected static Logger logger = LoggerFactory.getLogger(RequestIdFilter.class); + private static Logger logger = LoggerFactory.getLogger(RequestIdFilter.class); @Autowired private RequestsDbClient infraActiveRequestsClient; @@ -48,11 +53,33 @@ public class RequestIdFilter implements ContainerRequestFilter { public void filter(ContainerRequestContext context) throws IOException { String requestId = MDC.get(ONAPLogConstants.MDCs.REQUEST_ID); + logger.info("Checking if requestId: {} already exists in requestDb InfraActiveRequests table", requestId); InfraActiveRequests infraActiveRequests = infraActiveRequestsClient.getInfraActiveRequestbyRequestId(requestId); if (infraActiveRequests != null) { - MDC.put(ONAPLogConstants.MDCs.RESPONSE_CODE, String.valueOf(HttpStatus.SC_BAD_REQUEST)); - logger.error("RequestID exists in RequestDB.InfraActiveRequests : {}", requestId); + logger.error( + "RequestId: {} already exists in RequestDB InfraActiveRequests table, throwing DuplicateRequestIdException", + requestId); + throw new DuplicateRequestIdException(createRequestError(requestId, "InfraActiveRequests")); + } + } + + protected String createRequestError(String requestId, String requestTable) { + ObjectMapper mapper = new ObjectMapper(); + RequestError error = new RequestError(); + ServiceException serviceException = new ServiceException(); + serviceException.setMessageId(ErrorNumbers.SVC_BAD_PARAMETER); + serviceException + .setText("RequestId: " + requestId + " already exists in the RequestDB " + requestTable + " table"); + error.setServiceException(serviceException); + String errorMessage = null; + + try { + errorMessage = mapper.writeValueAsString(error); + } catch (JsonProcessingException e) { + return "Unable to write requestError to String when requestId already exists in the RequestDb due to error: " + + e.getMessage(); } + return errorMessage; } } diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/DuplicateRequestIdException.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/DuplicateRequestIdException.java new file mode 100644 index 0000000000..f56b4218ba --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/DuplicateRequestIdException.java @@ -0,0 +1,31 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.apihandlerinfra.exceptions; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; + +public class DuplicateRequestIdException extends WebApplicationException { + + public DuplicateRequestIdException(String response) { + super(Response.status(Response.Status.BAD_REQUEST).entity(response).build()); + } +} diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java index 9bf83153b3..8716047603 100644 --- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java +++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java @@ -20,67 +20,85 @@ package org.onap.so.apihandler.filters; -import static org.junit.Assert.assertEquals; +import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; +import static org.junit.Assert.assertThat; import static org.mockito.Mockito.doReturn; import java.io.IOException; +import java.util.Collections; import javax.ws.rs.container.ContainerRequestContext; -import org.apache.http.HttpStatus; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.Spy; -import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoJUnitRunner; -import org.mockito.junit.MockitoRule; import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestIdException; import org.onap.so.db.request.beans.InfraActiveRequests; import org.onap.so.db.request.client.RequestsDbClient; +import org.onap.so.serviceinstancebeans.RequestError; +import org.onap.so.serviceinstancebeans.ServiceException; import org.slf4j.MDC; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; @RunWith(MockitoJUnitRunner.class) public class RequestIdFilterTest { @Mock - ContainerRequestContext mockContext; + private ContainerRequestContext mockContext; @Mock - protected RequestsDbClient requestsDbClient; + private RequestsDbClient requestsDbClient; @InjectMocks @Spy - RequestIdFilter requestIdFilter; + private RequestIdFilter requestIdFilter; @Rule public ExpectedException thrown = ExpectedException.none(); - @Rule - public MockitoRule mockitoRule = MockitoJUnit.rule(); + private static final String REQUEST_ID = "32807a28-1a14-4b88-b7b3-2950918aa769"; + private ObjectMapper mapper = new ObjectMapper(); - @Test - public void filterTest() throws IOException { + private RequestError getRequestError() throws IOException { + RequestError requestError = new RequestError(); + mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false); + ServiceException serviceException = new ServiceException(); + serviceException.setMessageId("SVC0002"); + serviceException.setText( + "RequestId: 32807a28-1a14-4b88-b7b3-2950918aa769 already exists in the RequestDB InfraActiveRequests table"); + serviceException.setVariables(Collections.emptyList()); + requestError.setServiceException(serviceException); + return requestError; + } - String requestId = "32807a28-1a14-4b88-b7b3-2950918aa769"; + @Test + public void filterTestInfra() throws IOException { + String error = mapper.writeValueAsString(getRequestError()); + String requestId = REQUEST_ID; MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId); // ExpectedRecord InfraActiveRequests InfraActiveRequests infraActiveRequests = new InfraActiveRequests(); - infraActiveRequests.setRequestStatus("FAILED"); - infraActiveRequests.setProgress(100L); - infraActiveRequests.setLastModifiedBy("APIH"); - infraActiveRequests.setRequestScope("network"); - infraActiveRequests.setRequestAction("deleteInstance"); - infraActiveRequests.setRequestId("32807a28-1a14-4b88-b7b3-2950918aa769"); + infraActiveRequests.setRequestId(REQUEST_ID); doReturn(infraActiveRequests).when(requestsDbClient).getInfraActiveRequestbyRequestId(requestId); + doReturn(error).when(requestIdFilter).createRequestError(REQUEST_ID, "InfraActiveRequests"); + thrown.expect(DuplicateRequestIdException.class); + thrown.expectMessage("HTTP 400 Bad Request"); requestIdFilter.filter(mockContext); + } - Mockito.verify(requestIdFilter, Mockito.times(1)).filter(mockContext); - assertEquals(MDC.get(ONAPLogConstants.MDCs.RESPONSE_CODE), String.valueOf(HttpStatus.SC_BAD_REQUEST)); + @Test + public void createRequestErrorTest() throws IOException { + RequestError requestError = getRequestError(); + String result = requestIdFilter.createRequestError(REQUEST_ID, "InfraActiveRequests"); + RequestError resultingError = mapper.readValue(result, RequestError.class); + assertThat(resultingError, sameBeanAs(requestError)); } } diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/InstanceManagement.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/InstanceManagement.java index ade13e7b57..554c794e3e 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/InstanceManagement.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/InstanceManagement.java @@ -196,7 +196,7 @@ public class InstanceManagement { .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()) .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId).setVnfId(vnfId) .setServiceType(serviceInstanceType).setVnfType(vnfType) - .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action)) + .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, null, aLaCarte, action)) .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build(); } catch (IOException e) { ErrorLoggerInfo errorLoggerInfo = diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/RequestHandlerUtilsTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/RequestHandlerUtilsTest.java index 5306888570..e4532cd8d7 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/RequestHandlerUtilsTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/RequestHandlerUtilsTest.java @@ -27,6 +27,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.onap.so.logger.HttpHeadersConstants.ONAP_REQUEST_ID; @@ -150,6 +151,18 @@ public class RequestHandlerUtilsTest extends BaseTest { } + @Test + public void test_mapJSONtoMSOStyleCustomWorkflowRequest() throws IOException { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(Include.NON_NULL); + String testRequest = inputStream("/CustomWorkflowRequest.json"); + String resultString = + requestHandlerUtils.mapJSONtoMSOStyle(testRequest, null, true, Action.inPlaceSoftwareUpdate); + ServiceInstancesRequest sir = mapper.readValue(resultString, ServiceInstancesRequest.class); + assertEquals(sir.getRequestDetails().getCloudConfiguration().getTenantId(), "88a6ca3ee0394ade9403f075db23167e"); + assertNotEquals(sir.getRequestDetails().getRequestParameters().getUserParams().size(), 0); + } + @Test public void test_mapJSONtoMSOStyleUsePreload() throws IOException { diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/CustomWorkflowRequest.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/CustomWorkflowRequest.json new file mode 100644 index 0000000000..6c59ec5f1f --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/CustomWorkflowRequest.json @@ -0,0 +1,21 @@ +{ + "requestDetails": { + "requestInfo": { + "source": "VID", + "requestorId": "xxxxxx", + "instanceName": "inPlaceSoftwareUpdateTest" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "requestParameters": { + "payload": "{\"request-parameters\":{\"host-ip-address\":\"10.10.10.10\"},\"configuration-parameters\":{\"name1\":\"value1\",\"name2\":\"value2\"}}", + "userParams": [{ + "name": "vnf-id", + "value": "4603ad6d-dbfb-4899-a8bd-bc1dd0d74914" + } + ] + } + } +}
\ No newline at end of file |