From: Benjamin, Max (mb388a) Date: Mon, 8 Apr 2019 14:12:52 +0000 (-0400) Subject: Do not overwrite requestId X-Git-Tag: 1.4.1~79^2 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=ecea1e9e8d4d2a794c68d35e100b9315f0ce95c8;p=so.git Do not overwrite requestId Added filter to reject requests that reuse request ids for requests db Change-Id: Iced020a9e1bc98c93911966f62ac0049e43e314b Issue-ID: SO-1762 Signed-off-by: Benjamin, Max (mb388a) --- diff --git a/mso-api-handlers/mso-api-handler-common/pom.xml b/mso-api-handlers/mso-api-handler-common/pom.xml index d35db00478..7adb7d1131 100644 --- a/mso-api-handlers/mso-api-handler-common/pom.xml +++ b/mso-api-handlers/mso-api-handler-common/pom.xml @@ -38,6 +38,12 @@ + + + org.onap.so + mso-requests-db + ${project.version} + org.springframework.boot spring-boot-starter-jersey 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 new file mode 100644 index 0000000000..17dd9859b0 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java @@ -0,0 +1,60 @@ +/*- + * ============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.apihandler.filters; + +import java.io.IOException; + +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.db.request.beans.InfraActiveRequests; +import org.onap.so.db.request.client.RequestsDbClient; +import org.slf4j.MDC; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Priority(2) +@Provider +@Component +public class RequestIdFilter implements ContainerRequestFilter { + + protected static Logger logger = LoggerFactory.getLogger(RequestIdFilter.class); + + @Autowired + private RequestsDbClient infraActiveRequestsClient; + + @Override + public void filter(ContainerRequestContext context) throws IOException { + String requestId = MDC.get(ONAPLogConstants.MDCs.REQUEST_ID); + + 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); + } + } +} 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 new file mode 100644 index 0000000000..dae6542b8b --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java @@ -0,0 +1,68 @@ +package org.onap.so.apihandler.filters; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; + +import java.io.IOException; + +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.db.request.beans.InfraActiveRequests; +import org.onap.so.db.request.client.RequestsDbClient; +import org.slf4j.MDC; + +@RunWith(MockitoJUnitRunner.class) +public class RequestIdFilterTest { + + @Mock + ContainerRequestContext mockContext; + + @Mock + protected RequestsDbClient requestsDbClient; + + @InjectMocks + @Spy + RequestIdFilter requestIdFilter; + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Test + public void filterTest() throws IOException { + + String requestId = "32807a28-1a14-4b88-b7b3-2950918aa769"; + 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"); + + doReturn(infraActiveRequests).when(requestsDbClient).getInfraActiveRequestbyRequestId(requestId); + + requestIdFilter.filter(mockContext); + + Mockito.verify( requestIdFilter, Mockito.times(1)).filter(mockContext); + assertEquals(MDC.get(ONAPLogConstants.MDCs.RESPONSE_CODE), String.valueOf(HttpStatus.SC_BAD_REQUEST)); + + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/JerseyConfiguration.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/JerseyConfiguration.java index 434b9e9364..866a4e7ca1 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/JerseyConfiguration.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/JerseyConfiguration.java @@ -26,6 +26,7 @@ import javax.ws.rs.ApplicationPath; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.servlet.ServletProperties; import org.onap.so.apihandler.filters.RequestUriFilter; +import org.onap.so.apihandler.filters.RequestIdFilter; import org.onap.so.apihandlerinfra.exceptions.ApiExceptionMapper; import org.onap.so.apihandlerinfra.tenantisolation.CloudOrchestration; import org.onap.so.apihandlerinfra.tenantisolation.CloudResourcesOrchestration; @@ -61,6 +62,7 @@ public class JerseyConfiguration extends ResourceConfig { register(ApiExceptionMapper.class); register(RuntimeExceptionMapper.class); register(RequestUriFilter.class); + register(RequestIdFilter.class); register(E2EServiceInstances.class); register(WorkflowSpecificationsHandler.class); register(InstanceManagement.class);