Bugfix: add MDC context to http redirect logs 30/87530/4
authorRehanRaza <muhammad.rehan.raza@est.tech>
Mon, 13 May 2019 14:02:39 +0000 (14:02 +0000)
committerRehanRaza <muhammad.rehan.raza@est.tech>
Mon, 13 May 2019 14:02:39 +0000 (14:02 +0000)
Change-Id: Icdf00480eed43536a8b4693cbb208560f0881c95
Issue-ID: DCAEGEN2-1462
Signed-off-by: RehanRaza <muhammad.rehan.raza@est.tech>
datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/service/producer/DmaapProducerHttpClient.java
datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/web/PublishRedirectStrategy.java
datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/service/producer/DmaapProducerHttpClientTest.java
datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/web/PublishRedirectStrategyTest.java

index c61b7a4..8d43382 100644 (file)
@@ -85,7 +85,7 @@ public class DmaapProducerHttpClient {
     public HttpResponse getDmaapProducerResponseWithRedirect(HttpUriRequest request, Map<String, String> contextMap)
             throws DatafileTaskException {
         MDC.setContextMap(contextMap);
-        try (CloseableHttpAsyncClient webClient = createWebClient(true, DEFAULT_REQUEST_TIMEOUT)) {
+        try (CloseableHttpAsyncClient webClient = createWebClient(true, DEFAULT_REQUEST_TIMEOUT, contextMap)) {
             webClient.start();
 
             logger.trace(INVOKE, "Starting to produce to DR {}", request);
@@ -112,7 +112,7 @@ public class DmaapProducerHttpClient {
     public HttpResponse getDmaapProducerResponseWithCustomTimeout(HttpUriRequest request, Duration requestTimeout,
             Map<String, String> contextMap) throws DatafileTaskException {
         MDC.setContextMap(contextMap);
-        try (CloseableHttpAsyncClient webClient = createWebClient(false, requestTimeout)) {
+        try (CloseableHttpAsyncClient webClient = createWebClient(false, requestTimeout, contextMap)) {
             webClient.start();
 
             logger.trace(INVOKE, "Starting to produce to DR {}", request);
@@ -152,7 +152,8 @@ public class DmaapProducerHttpClient {
                 .port(configuration.dmaapPortNumber());
     }
 
-    private CloseableHttpAsyncClient createWebClient(boolean expectRedirect, Duration requestTimeout)
+    private CloseableHttpAsyncClient createWebClient(boolean expectRedirect, Duration requestTimeout,
+            Map<String, String> contextMap)
             throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {
         SSLContext sslContext =
                 new SSLContextBuilder().loadTrustMaterial(null, (certificate, authType) -> true).build();
@@ -162,7 +163,7 @@ public class DmaapProducerHttpClient {
                 .setSslHostnameVerifier(new NoopHostnameVerifier());
 
         if (expectRedirect) {
-            clientBuilder.setRedirectStrategy(PublishRedirectStrategy.INSTANCE);
+            clientBuilder.setRedirectStrategy(new PublishRedirectStrategy(contextMap));
         }
 
         if (requestTimeout.toMillis() > 0) {
index de07461..3ceec62 100644 (file)
@@ -17,6 +17,7 @@
 package org.onap.dcaegen2.collectors.datafile.web;
 
 import java.net.URI;
+import java.util.Map;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
 import org.apache.http.ProtocolException;
@@ -33,6 +34,7 @@ import org.apache.http.impl.client.DefaultRedirectStrategy;
 import org.apache.http.protocol.HttpContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
 
 /**
  * PublishRedirectStrategy implementation
@@ -44,8 +46,17 @@ import org.slf4j.LoggerFactory;
 @Contract(threading = ThreadingBehavior.IMMUTABLE)
 public class PublishRedirectStrategy extends DefaultRedirectStrategy {
 
-    public static final PublishRedirectStrategy INSTANCE = new PublishRedirectStrategy();
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
+    private final Map<String, String> contextMap;
+
+    /**
+     * Constructor PublishRedirectStrategy.
+     *
+     * @param contextMap - MDC context map
+     */
+    public PublishRedirectStrategy(Map<String, String> contextMap) {
+        this.contextMap = contextMap;
+    }
 
     /**
      * Redirectable methods.
@@ -71,6 +82,7 @@ public class PublishRedirectStrategy extends DefaultRedirectStrategy {
     @Override
     public HttpUriRequest getRedirect(final HttpRequest request, final HttpResponse response, final HttpContext context)
         throws ProtocolException {
+        MDC.setContextMap(contextMap);
         final URI uri = getLocationURI(request, response, context);
         logger.trace("getRedirect...: {}", request);
         return RequestBuilder.copy(request).setUri(uri).build();
index add47b0..e21bbd7 100644 (file)
@@ -26,7 +26,6 @@ import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
-
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.security.KeyManagementException;
@@ -110,7 +109,7 @@ class DmaapProducerHttpClientTest {
 
         verify(clientBuilderMock).setSslContext(any(SSLContext.class));
         verify(clientBuilderMock).setSslHostnameVerifier(any(NoopHostnameVerifier.class));
-        verify(clientBuilderMock).setRedirectStrategy(PublishRedirectStrategy.INSTANCE);
+        verify(clientBuilderMock).setRedirectStrategy(any(PublishRedirectStrategy.class));
         verify(clientBuilderMock).setDefaultRequestConfig(any());
         verify(clientBuilderMock).build();
         verifyNoMoreInteractions(clientBuilderMock);
index 298656a..df13f2d 100644 (file)
@@ -19,7 +19,8 @@ package org.onap.dcaegen2.collectors.datafile.web;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
-
+import java.util.HashMap;
+import java.util.Map;
 import org.apache.http.Header;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
@@ -32,16 +33,23 @@ import org.apache.http.protocol.HttpContext;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.sdk.rest.services.model.logging.MdcVariables;
+import org.slf4j.MDC;
 
 class PublishRedirectStrategyTest {
 
     private static final String URI = "sftp://localhost:80/";
+    private static final String SAMPLE_REQUEST_ID = "A20000626.2315+0200-2330+0200_PNF0-0-1MB.tar.gz";
+    private static final String ANOTHER_REQUEST_ID = "something_else";
 
     private static PublishRedirectStrategy publishRedirectStrategy;
 
     @BeforeAll
     static void setUp() {
-        publishRedirectStrategy = new PublishRedirectStrategy();
+        MDC.put(MdcVariables.REQUEST_ID, ANOTHER_REQUEST_ID);
+        Map<String, String> contextMap = new HashMap<>();
+        contextMap.put(MdcVariables.REQUEST_ID, SAMPLE_REQUEST_ID);
+        publishRedirectStrategy = new PublishRedirectStrategy(contextMap);
     }
 
     @Test
@@ -70,5 +78,8 @@ class PublishRedirectStrategyTest {
 
         HttpUriRequest actualRedirect = publishRedirectStrategy.getRedirect(requestMock, responseMock, contextMock);
         assertEquals(URI, actualRedirect.getURI().toString());
+
+        String actualRequestId = MDC.get(MdcVariables.REQUEST_ID);
+        assertEquals(SAMPLE_REQUEST_ID, actualRequestId);
     }
 }