aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java
diff options
context:
space:
mode:
authorOfir Sonsino <os0695@att.com>2018-02-20 18:03:30 +0200
committerOfir Sonsino <os0695@intl.att.com>2018-02-27 14:47:52 +0200
commitefedea1c5d80532f5b1180d57c8dafce5dcb302a (patch)
treec4bdefe8758b01f31c9e91a9ded0ab989daeb5e2 /vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java
parentb94bd70f1595fad9546c3506393613f68504f495 (diff)
org.onap migration
Change-Id: I5e2d01a6da21d4003c910b5fe0702b35c2089a77 Issue-ID: VID-86 Signed-off-by: Ofir Sonsino <os0695@intl.att.com>
Diffstat (limited to 'vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java')
-rw-r--r--vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java168
1 files changed, 168 insertions, 0 deletions
diff --git a/vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java b/vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java
new file mode 100644
index 000000000..77dba37e9
--- /dev/null
+++ b/vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java
@@ -0,0 +1,168 @@
+package org.onap.vid.controllers;
+
+import com.google.common.collect.ImmutableMap;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+import org.mockito.stubbing.Answer;
+import org.onap.portalsdk.core.web.support.UserUtils;
+import org.onap.vid.controller.filter.PromiseEcompRequestIdFilter;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.testng.annotations.Test;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.*;
+import java.util.function.Function;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.*;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.argThat;
+import static org.onap.portalsdk.core.util.SystemProperties.ECOMP_REQUEST_ID;
+
+@Test
+public class PromiseEcompRequestIdFilterTest {
+
+ private final String anotherHeader = "ANDREI_RUBLEV";
+ private final String anotherValue = "foo value";
+ private final String mixedCaseHeader = "x-ecomp-REQUESTID";
+
+ @Test
+ public void givenRequestIdHeader_headerValueNotChanged() throws IOException, ServletException {
+
+ final String someTxId = "863850e2-8545-4efd-94b8-afba5f52b3d5";
+
+ final ImmutableMap<String, String> incomingRequestHeaders = ImmutableMap.of(
+ anotherHeader, anotherValue,
+ ECOMP_REQUEST_ID, someTxId
+ );
+
+ buildRequestThenRunThroughFilterAndAssertResultRequestHeaders(incomingRequestHeaders, specificTxId(someTxId));
+ }
+
+ @Test
+ public void givenMixedCaseRequestIdHeader_headerValueNotChanged() throws IOException, ServletException {
+
+ final String someTxId = "729bbd8d-b0c2-4809-a794-dcccd9cda2c0";
+
+ final ImmutableMap<String, String> incomingRequestHeaders = ImmutableMap.of(
+ mixedCaseHeader, someTxId,
+ anotherHeader, anotherValue
+ );
+
+ buildRequestThenRunThroughFilterAndAssertResultRequestHeaders(incomingRequestHeaders, specificTxId(someTxId));
+ }
+
+ @Test
+ public void givenNoRequestIdHeader_headerValueWasGenerated() throws IOException, ServletException {
+
+ final ImmutableMap<String, String> incomingRequestHeaders = ImmutableMap.of(
+ anotherHeader, anotherValue
+ );
+
+ buildRequestThenRunThroughFilterAndAssertResultRequestHeaders(incomingRequestHeaders, UserUtils::getRequestId);
+ }
+
+
+ private void buildRequestThenRunThroughFilterAndAssertResultRequestHeaders(
+ ImmutableMap<String, String> originalRequestHeaders,
+ Function<HttpServletRequest, String> txIdExtractor
+ ) throws IOException, ServletException {
+ HttpServletRequest servletRequest = createMockedHttpServletRequest(originalRequestHeaders);
+ HttpServletResponse servletResponse = createMockedHttpServletResponse();
+
+ final FilterChain capturingFilterChain = Mockito.mock(FilterChain.class);
+
+ //////////////////
+ //
+ // doFilter() is the function under test
+ //
+ new PromiseEcompRequestIdFilter().doFilter(servletRequest, servletResponse, capturingFilterChain);
+ //
+ //////////////////
+
+ final ServletRequest capturedServletRequest = extractCapturedServletRequest(capturingFilterChain);
+ final ServletResponse capturedServletResponse = extractCapturedServletResponse(capturingFilterChain);
+ final String expectedTxId = txIdExtractor.apply((HttpServletRequest) capturedServletRequest);
+
+ assertRequestObjectHeaders(capturedServletRequest, expectedTxId);
+ assertResponseObjectHeaders(capturedServletResponse, expectedTxId);
+ }
+
+
+ private void assertRequestObjectHeaders(ServletRequest request, String expectedTxId) {
+ /*
+ Assert that:
+ - Two headers are in place
+ - Direct value extraction is as expected
+ - UserUtils.getRequestId() returns correct and valid value
+ */
+ final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
+
+ assertThat(Collections.list(httpServletRequest.getHeaderNames()),
+ containsInAnyOrder(equalToIgnoringCase(ECOMP_REQUEST_ID), equalToIgnoringCase(anotherHeader)));
+
+ assertThat(httpServletRequest.getHeader(anotherHeader), is(anotherValue));
+
+ assertThat(httpServletRequest.getHeader(ECOMP_REQUEST_ID), is(expectedTxId));
+ assertThat(httpServletRequest.getHeader(mixedCaseHeader), is(expectedTxId));
+
+ assertThat(UserUtils.getRequestId(httpServletRequest), is(expectedTxId));
+ assertThat(UserUtils.getRequestId(httpServletRequest), is(not(emptyOrNullString())));
+ }
+
+ private void assertResponseObjectHeaders(ServletResponse response, String txId) {
+ final String REQUEST_ID_HEADER_NAME_IN_RESPONSE = mixedCaseHeader + "-echo";
+ final HttpServletResponse httpServletResponse = (HttpServletResponse) response;
+
+ assertThat("header " + REQUEST_ID_HEADER_NAME_IN_RESPONSE.toLowerCase() + " in response must be provided",
+ httpServletResponse.getHeader(REQUEST_ID_HEADER_NAME_IN_RESPONSE), is(txId));
+ }
+
+
+
+ private HttpServletRequest createMockedHttpServletRequest(Map<String, String> requestHeaders) {
+ HttpServletRequest servletRequest = Mockito.mock(HttpServletRequest.class);
+ requestHeaders.forEach((k, v) -> {
+ Mockito.when(servletRequest.getHeader(argThat(equalToIgnoringCase(k)))).thenReturn(v);
+ Mockito.when(servletRequest.getHeaders(argThat(equalToIgnoringCase(k)))).then(returnEnumerationAnswer(v));
+ });
+ Mockito.when(servletRequest.getHeaderNames()).then(returnEnumerationAnswer(requestHeaders.keySet()));
+ return servletRequest;
+ }
+
+ private HttpServletResponse createMockedHttpServletResponse() {
+ return new MockHttpServletResponse();
+ }
+
+ private static Answer<Enumeration<String>> returnEnumerationAnswer(String ... items) {
+ return returnEnumerationAnswer(Arrays.asList(items));
+ }
+
+ private static Answer<Enumeration<String>> returnEnumerationAnswer(Collection<String> items) {
+ return invocation -> Collections.enumeration(items);
+ }
+
+ private Function<HttpServletRequest, String> specificTxId(String someTxId) {
+ return r -> someTxId;
+ }
+
+ private ServletRequest extractCapturedServletRequest(FilterChain capturingFilterChain) throws IOException, ServletException {
+ ArgumentCaptor<ServletRequest> captor = ArgumentCaptor.forClass(ServletRequest.class);
+ Mockito.verify(capturingFilterChain).doFilter(captor.capture(), any());
+ return captor.getValue();
+ }
+
+ private ServletResponse extractCapturedServletResponse(FilterChain capturingFilterChain) throws IOException, ServletException {
+ ArgumentCaptor<ServletResponse> captor = ArgumentCaptor.forClass(ServletResponse.class);
+ Mockito.verify(capturingFilterChain).doFilter(any(), captor.capture());
+ return captor.getValue();
+ }
+
+}