From: Eylon Malin Date: Thu, 23 Jan 2020 09:26:25 +0000 (+0000) Subject: Merge "Promise Request-id header: Check MDC value if no header" X-Git-Tag: 6.0.2~6 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=7ab6b35862381271e964d6ddbaf23bcf1df75a85;hp=611c81b98acb98d9ca84ba8760bb0925cfb3b79c;p=vid.git Merge "Promise Request-id header: Check MDC value if no header" --- diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/filter/PromiseRequestIdFilter.java b/vid-app-common/src/main/java/org/onap/vid/controller/filter/PromiseRequestIdFilter.java index faaf55ae7..1c96819c8 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controller/filter/PromiseRequestIdFilter.java +++ b/vid-app-common/src/main/java/org/onap/vid/controller/filter/PromiseRequestIdFilter.java @@ -41,8 +41,10 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; +import org.onap.logging.ref.slf4j.ONAPLogConstants.MDCs; import org.onap.vid.logging.Headers; import org.onap.vid.logging.RequestIdHeader; +import org.slf4j.MDC; import org.springframework.web.filter.GenericFilterBean; @WebFilter(urlPatterns = "/*") @@ -82,12 +84,17 @@ public class PromiseRequestIdFilter extends GenericFilterBean { if (isWrapNeeded(highestPriorityHeader, originalRequestId)) { // Copy originalRequestId to the promised header value - request = new PromiseRequestIdRequestWrapper(httpRequest, toUuidOrElse(originalRequestId, UUID::randomUUID)); + request = new PromiseRequestIdRequestWrapper(httpRequest, + firstValidUuidOrElse(originalRequestId, requestIdFromMDC(), UUID::randomUUID)); } return request; } + private String requestIdFromMDC() { + return MDC.get(MDCs.REQUEST_ID); + } + private boolean verifyAndValidateUuid(String value) { return isNotEmpty(value) && uuidRegex.matcher(value).matches(); } @@ -99,6 +106,10 @@ public class PromiseRequestIdFilter extends GenericFilterBean { return !headerExistsAndValid; } + UUID firstValidUuidOrElse(String uuid1, String uuid2, Supplier uuidSupplier) { + return toUuidOrElse(uuid1, () -> toUuidOrElse(uuid2, uuidSupplier)); + } + UUID toUuidOrElse(String uuid, Supplier uuidSupplier) { if (verifyAndValidateUuid(uuid)) { try { diff --git a/vid-app-common/src/test/java/org/onap/vid/controller/filter/PromiseRequestIdFilterTest.java b/vid-app-common/src/test/java/org/onap/vid/controller/filter/PromiseRequestIdFilterTest.java index d67bd618c..f415bfbcb 100644 --- a/vid-app-common/src/test/java/org/onap/vid/controller/filter/PromiseRequestIdFilterTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/controller/filter/PromiseRequestIdFilterTest.java @@ -51,9 +51,12 @@ import javax.servlet.http.HttpServletResponse; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import org.mockito.stubbing.Answer; +import org.onap.logging.ref.slf4j.ONAPLogConstants.MDCs; import org.onap.portalsdk.core.web.support.UserUtils; import org.onap.vid.logging.RequestIdHeader; +import org.slf4j.MDC; import org.springframework.mock.web.MockHttpServletResponse; +import org.testng.annotations.AfterMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -70,10 +73,18 @@ public class PromiseRequestIdFilterTest { private final PromiseRequestIdFilter promiseRequestIdFilter = new PromiseRequestIdFilter(); + @AfterMethod + public void tearDown() { + MDC.remove(MDCs.REQUEST_ID); + } + @Test - public void givenRequestIdHeader_headerValueNotChanged() throws IOException, ServletException { + public void givenMdcValueAndRequestIdHeader_headerValueNotChanged() throws IOException, ServletException { final String someTxId = "863850e2-8545-4efd-94b8-afba5f52b3d5"; + final String mdcTxId = "ed752ff1-3970-4f18-8219-2d821fa4eaea"; + + MDC.put(MDCs.REQUEST_ID, mdcTxId); final ImmutableMap incomingRequestHeaders = ImmutableMap.of( anotherHeader, anotherValue, @@ -121,6 +132,20 @@ public class PromiseRequestIdFilterTest { buildRequestThenRunThroughFilterAndAssertResultRequestHeaders(incomingRequestHeaders, UserUtils::getRequestId); } + @Test + public void givenMdcValueAndNoRequestIdHeader_headerValueWasFromMDC() throws IOException, ServletException { + + final String mdcTxId = "ed752ff1-3970-4f18-8219-2d821fa4eaea"; + + MDC.put(MDCs.REQUEST_ID, mdcTxId); + + final ImmutableMap incomingRequestHeaders = ImmutableMap.of( + anotherHeader, anotherValue + ); + + buildRequestThenRunThroughFilterAndAssertResultRequestHeaders(incomingRequestHeaders, specificTxId(mdcTxId)); + } + @Test public void givenTwoRequestIdHeader_onapHeaderValueIsUsed() throws IOException, ServletException {