Merge from ECOMP's repository
[vid.git] / vid-app-common / src / test / java / org / onap / vid / mso / rest / OutgoingRequestHeadersTest.java
@@ -4,11 +4,11 @@ import com.google.common.collect.ImmutableList;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.mockito.*;
 import org.onap.vid.aai.util.AAIRestInterface;
-import org.onap.vid.changeManagement.RequestDetailsWrapper;
+import org.onap.vid.aai.util.ServletRequestHelper;
+import org.onap.vid.aai.util.SystemPropertyHelper;
 import org.onap.vid.controller.filter.PromiseEcompRequestIdFilter;
-import org.onap.vid.mso.RestMsoImplementation;
-import org.onap.vid.mso.RestObject;
 import org.onap.vid.testUtils.TestUtils;
+import org.onap.vid.utils.Unchecked;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
@@ -22,6 +22,7 @@ import javax.ws.rs.client.Client;
 import javax.ws.rs.client.Invocation;
 import javax.ws.rs.core.MultivaluedMap;
 import java.util.Set;
+import java.util.UUID;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -29,24 +30,31 @@ import java.util.stream.Stream;
 import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.*;
+import static org.mockito.Mockito.when;
 
 
-public class OutgoingRequestIdTest {
+public class OutgoingRequestHeadersTest {
 
 
-    @InjectMocks
-    private RestMsoImplementation restMsoImplementation;
+//    @InjectMocks
+//    private RestMsoImplementation restMsoImplementation;
+
+    @Mock
+    private SystemPropertyHelper systemPropertyHelper;
+
+    @Mock
+    private ServletRequestHelper servletRequestHelper;
 
     @InjectMocks
     private AAIRestInterface aaiRestInterface;
 
-
     @Captor
     private ArgumentCaptor<MultivaluedMap<String, Object>> multivaluedMapArgumentCaptor;
 
     @BeforeClass
     public void initMocks() {
         MockitoAnnotations.initMocks(this);
+        when(servletRequestHelper.extractOrGenerateRequestId()).thenAnswer(invocation -> UUID.randomUUID().toString());
     }
 
     @BeforeMethod
@@ -54,47 +62,62 @@ public class OutgoingRequestIdTest {
         RequestContextHolder.setRequestAttributes(new ServletRequestAttributes((HttpServletRequest) PromiseEcompRequestIdFilter.wrapIfNeeded(new MockHttpServletRequest())));
     }
 
-    @DataProvider
-    public Object[][] msoMethods() {
-        return Stream.<ThrowingConsumer<RestMsoImplementation>>of(
-
-                client -> client.Get(new Object(), "whatever source id", "/any path", new RestObject<>()),
-                client -> client.GetForObject("whatever source id", "/any path", Object.class),
-                client -> client.Post(new Object(), "some payload", "whatever source id", "/any path", new RestObject<>()),
-                client -> client.PostForObject("some payload", "whatever source id", "/any path", Object.class),
-                client -> client.Put(Object.class, new RequestDetailsWrapper(), "whatever source id", "/any path", new RestObject<>())
-
-        ).map(l -> ImmutableList.of(l).toArray()).collect(Collectors.toList()).toArray(new Object[][]{});
-    }
-
-    @Test(dataProvider = "msoMethods")
-    public void mso(Consumer<RestMsoImplementation> f) throws Exception {
-        final TestUtils.JavaxRsClientMocks mocks = setAndGetMocksInsideRestImpl(restMsoImplementation);
-
-        f.accept(restMsoImplementation);
-
-        verifyRequestIdHeaderWasAdded(mocks.getFakeBuilder());
-    }
+//    @DataProvider
+//    public Object[][] msoMethods() {
+//        return Stream.<ThrowingConsumer<RestMsoImplementation>>of(
+//
+//                client -> client.Get(new Object(), "/any path", new RestObject<>(), false),
+//                client -> client.GetForObject("/any path", Object.class),
+//                client -> client.Post("", "some payload", "/any path", new RestObject<>()),
+//                client -> client.PostForObject("some payload", "/any path", Object.class),
+//                client -> client.Put(Object.class, new RequestDetailsWrapper(), "/any path", new RestObject<>())
+//
+//        ).map(l -> ImmutableList.of(l).toArray()).collect(Collectors.toList()).toArray(new Object[][]{});
+//    }
+//
+//    @Test(dataProvider = "msoMethods")
+//    public void mso(Consumer<RestMsoImplementation> f) throws Exception {
+//        final TestUtils.JavaxRsClientMocks mocks = setAndGetMocksInsideRestImpl(restMsoImplementation);
+//
+//        f.accept(restMsoImplementation);
+//
+//        Invocation.Builder fakeBuilder = mocks.getFakeBuilder();
+//        Object requestIdValue = verifyXEcompRequestIdHeaderWasAdded(fakeBuilder);
+//        assertEquals(requestIdValue, captureHeaderKeyAndReturnItsValue(fakeBuilder, "X-ONAP-RequestID"));
+//
+//        assertThat((String) captureHeaderKeyAndReturnItsValue(fakeBuilder, "Authorization"), startsWith("Basic "));
+//        assertThat(captureHeaderKeyAndReturnItsValue(fakeBuilder, "X-ONAP-PartnerName"), equalTo("VID"));
+//    }
+//
+//    @Test
+//    public void whenProvideMsoRestCallUserId_builderHasXRequestorIDHeader() throws Exception {
+//
+//        final TestUtils.JavaxRsClientMocks mocks = setAndGetMocksInsideRestImpl(restMsoImplementation);
+//        String randomUserName = randomAlphabetic(10);
+//
+//        restMsoImplementation.restCall(HttpMethod.DELETE, String.class, null, "abc", Optional.of(randomUserName));
+//        assertEquals(randomUserName, captureHeaderKeyAndReturnItsValue(mocks.getFakeBuilder(), "X-RequestorID"));
+//    }
 
     @DataProvider
     public Object[][] aaiMethods() {
         return Stream.<ThrowingConsumer<AAIRestInterface>>of(
 
-                client -> client.RestGet("from app id", "some transId", "/any path", false),
+                client -> client.RestGet("from app id", "some transId", Unchecked.toURI("/any path"), false),
                 client -> client.Delete("whatever source id", "some transId", "/any path"),
                 client -> client.RestPost("from app id", "/any path", "some payload", false),
-                client -> client.RestPut("from app id", "/any path", "some payload", false)
+                client -> client.RestPut("from app id", "/any path", "some payload", false, false)
 
         ).map(l -> ImmutableList.of(l).toArray()).collect(Collectors.toList()).toArray(new Object[][]{});
     }
 
-    //@Test(dataProvider = "aaiMethods")
+    @Test(dataProvider = "aaiMethods")
     public void aai(Consumer<AAIRestInterface> f) throws Exception {
         final TestUtils.JavaxRsClientMocks mocks = setAndGetMocksInsideRestImpl(aaiRestInterface);
 
         f.accept(aaiRestInterface);
 
-        verifyRequestIdHeaderWasAdded(mocks.getFakeBuilder());
+        verifyXEcompRequestIdHeaderWasAdded(mocks.getFakeBuilder());
     }
 
 //    @Test(dataProvider = "schedulerMethods")
@@ -107,10 +130,17 @@ public class OutgoingRequestIdTest {
 //
 //    }
 
-    private void verifyRequestIdHeaderWasAdded(Invocation.Builder fakeBuilder) {
+    private Object verifyXEcompRequestIdHeaderWasAdded(Invocation.Builder fakeBuilder) {
         final String requestIdHeader = "x-ecomp-requestid";
         final String uuidRegex = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
+        Object requestId = captureHeaderKeyAndReturnItsValue(fakeBuilder, requestIdHeader);
+
+        assertThat("header '" + requestIdHeader + "' should be a uuid", requestId,
+                allOf(instanceOf(String.class), hasToString(matchesPattern(uuidRegex))));
+        return requestId;
+    }
 
+    private Object captureHeaderKeyAndReturnItsValue(Invocation.Builder fakeBuilder, String headerName) {
         // Checks that the builder was called with either one of header("x-ecomp-requestid", uuid)
         // or the plural brother: headers(Map.of("x-ecomp-requestid", Set.of(uuid))
 
@@ -121,7 +151,7 @@ public class OutgoingRequestIdTest {
             ArgumentCaptor<Object> argumentCaptor = ArgumentCaptor.forClass(Object.class);
             Mockito.verify(fakeBuilder)
                     .header(
-                            Matchers.argThat(s -> equalsIgnoreCase(s, requestIdHeader)),
+                            Matchers.argThat(s -> equalsIgnoreCase(s, headerName)),
                             argumentCaptor.capture()
                     );
             requestId = argumentCaptor.getValue();
@@ -130,14 +160,12 @@ public class OutgoingRequestIdTest {
             Mockito.verify(fakeBuilder).headers(multivaluedMapArgumentCaptor.capture());
 
             final MultivaluedMap<String, Object> headersMap = multivaluedMapArgumentCaptor.getValue();
-            final String thisRequestIdHeader = getFromSetCaseInsensitive(headersMap.keySet(), requestIdHeader);
+            final String thisRequestIdHeader = getFromSetCaseInsensitive(headersMap.keySet(), headerName);
 
             assertThat(headersMap.keySet(), hasItem(thisRequestIdHeader));
             requestId = headersMap.getFirst(thisRequestIdHeader);
         }
-
-        assertThat("header '" + requestIdHeader + "' should be a uuid", requestId,
-                allOf(instanceOf(String.class), hasToString(matchesPattern(uuidRegex))));
+        return requestId;
     }
 
     private String getFromSetCaseInsensitive(Set<String> set, String key) {