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);
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);
.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();
.setSslHostnameVerifier(new NoopHostnameVerifier());
if (expectRedirect) {
- clientBuilder.setRedirectStrategy(PublishRedirectStrategy.INSTANCE);
+ clientBuilder.setRedirectStrategy(new PublishRedirectStrategy(contextMap));
}
if (requestTimeout.toMillis() > 0) {
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;
import org.apache.http.protocol.HttpContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
/**
* PublishRedirectStrategy implementation
@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.
@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();
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;
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);
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;
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
HttpUriRequest actualRedirect = publishRedirectStrategy.getRedirect(requestMock, responseMock, contextMock);
assertEquals(URI, actualRedirect.getURI().toString());
+
+ String actualRequestId = MDC.get(MdcVariables.REQUEST_ID);
+ assertEquals(SAMPLE_REQUEST_ID, actualRequestId);
}
}