From 87e29ea8b915550e1c9c65aabb6a01c767938bd7 Mon Sep 17 00:00:00 2001 From: Eylon Malin Date: Sun, 6 Oct 2019 09:41:33 +0300 Subject: send X-ONAP-RequestID and X-InvocationID headers to AAI Issue-ID: VID-253 Change-Id: I5910e351982d3f118248f7dbeb735db018e1f05e Signed-off-by: Eylon Malin --- .../org/onap/vid/aai/util/AAIRestInterface.java | 11 +++- .../vid/mso/rest/OutgoingRequestHeadersTest.java | 62 +++++++++++++++------- 2 files changed, 53 insertions(+), 20 deletions(-) diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/util/AAIRestInterface.java b/vid-app-common/src/main/java/org/onap/vid/aai/util/AAIRestInterface.java index 8c05a8e6f..4369c17fc 100644 --- a/vid-app-common/src/main/java/org/onap/vid/aai/util/AAIRestInterface.java +++ b/vid-app-common/src/main/java/org/onap/vid/aai/util/AAIRestInterface.java @@ -22,8 +22,8 @@ package org.onap.vid.aai.util; import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; +import static org.onap.vid.logging.Headers.INVOCATION_ID; import static org.onap.vid.logging.Headers.PARTNER_NAME; -import static org.onap.vid.utils.Logging.REQUEST_ID_HEADER_KEY; import com.att.eelf.configuration.EELFLogger; import java.io.UnsupportedEncodingException; @@ -43,6 +43,7 @@ import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.vid.aai.ExceptionWithRequestInfo; import org.onap.vid.aai.ResponseWithRequestInfo; import org.onap.vid.aai.exceptions.InvalidPropertyException; +import org.onap.vid.logging.RequestIdHeader; import org.onap.vid.utils.Logging; import org.onap.vid.utils.Unchecked; import org.springframework.beans.factory.annotation.Autowired; @@ -191,6 +192,9 @@ public class AAIRestInterface { loggingService.logRequest(outgoingRequestsLogger, method, url, payload); final Response response; + + String requestId = extractOrGenerateRequestId(); + Invocation.Builder requestBuilder = client.target(url) .request() .accept(xml ? MediaType.APPLICATION_XML : MediaType.APPLICATION_JSON) @@ -198,7 +202,10 @@ public class AAIRestInterface { .header(TRANSACTION_ID_HEADER, transId) .header(FROM_APP_ID_HEADER, fromAppId) .header("Content-Type", MediaType.APPLICATION_JSON) - .header(REQUEST_ID_HEADER_KEY, extractOrGenerateRequestId()); + .header(RequestIdHeader.ONAP_ID.getHeaderName(), requestId) + .header(RequestIdHeader.ECOMP_ID.getHeaderName(), requestId) + .header(INVOCATION_ID.getHeaderName(), INVOCATION_ID.getHeaderValue()) + ; requestBuilder = systemPropertyHelper.isClientCertEnabled() ? requestBuilder : authenticateRequest(requestBuilder); diff --git a/vid-app-common/src/test/java/org/onap/vid/mso/rest/OutgoingRequestHeadersTest.java b/vid-app-common/src/test/java/org/onap/vid/mso/rest/OutgoingRequestHeadersTest.java index 3fd92ee90..cfb9ee6ea 100644 --- a/vid-app-common/src/test/java/org/onap/vid/mso/rest/OutgoingRequestHeadersTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/mso/rest/OutgoingRequestHeadersTest.java @@ -54,6 +54,7 @@ import java.util.stream.Stream; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.client.Client; import javax.ws.rs.client.Invocation; +import javax.ws.rs.client.Invocation.Builder; import javax.ws.rs.core.MultivaluedMap; import org.apache.commons.lang3.reflect.FieldUtils; import org.mockito.ArgumentCaptor; @@ -123,7 +124,8 @@ public class OutgoingRequestHeadersTest { @BeforeClass public void initMocks() { MockitoAnnotations.initMocks(this); - when(servletRequestHelper.extractOrGenerateRequestId()).thenAnswer(invocation -> UUID.randomUUID().toString()); + String oneIncomingRequestId = UUID.randomUUID().toString(); + when(servletRequestHelper.extractOrGenerateRequestId()).thenReturn(oneIncomingRequestId); when(systemPropertiesWrapper.getProperty(MsoProperties.MSO_PASSWORD)).thenReturn("OBF:1vub1ua51uh81ugi1u9d1vuz"); when(systemPropertiesWrapper.getProperty(SystemProperties.APP_DISPLAY_NAME)).thenReturn("vid"); //the ctor of MsoRestClientNew require the above lines as preconditions @@ -154,31 +156,23 @@ public class OutgoingRequestHeadersTest { final TestUtils.JavaxRsClientMocks mocks = setAndGetMocksInsideRestImpl(restMsoImplementation); f.accept(restMsoImplementation); + HeadersVerifier headersVerifier = new HeadersVerifier().verifyFirstCall(mocks.getFakeBuilder()); - Invocation.Builder fakeBuilder = mocks.getFakeBuilder(); - String requestIdValue = verifyXEcompRequestIdHeaderWasAdded(fakeBuilder); - assertEquals(requestIdValue, captureHeaderKeyAndReturnItsValue(fakeBuilder, "X-ONAP-RequestID")); - String invocationId1 = assertRequestHeaderIsUUID(fakeBuilder, "X-InvocationID"); - assertThat((String) captureHeaderKeyAndReturnItsValue(fakeBuilder, "Authorization"), startsWith("Basic ")); - verifyXOnapPartnerNameHeaderWasAdded(fakeBuilder); + assertThat((String) captureHeaderKeyAndReturnItsValue(mocks.getFakeBuilder(), "Authorization"), startsWith("Basic ")); - //validate requestId is same in next call but invocationId is different + //verify requestId is same in next call but invocationId is different //given final TestUtils.JavaxRsClientMocks mocks2 = setAndGetMocksInsideRestImpl(restMsoImplementation); //when f.accept(restMsoImplementation); - Invocation.Builder fakeBuilder2 = mocks2.getFakeBuilder(); - //then - String requestIdValue2 = verifyXEcompRequestIdHeaderWasAdded(fakeBuilder2); - assertEquals(requestIdValue, requestIdValue2); - - Object invocationId2 = assertRequestHeaderIsUUID(fakeBuilder2, "X-InvocationID"); - assertNotEquals(invocationId1, invocationId2); + headersVerifier.verifySecondCall(mocks2.getFakeBuilder()); } + + @Test public void whenProvideMsoRestCallUserId_builderHasXRequestorIDHeader() throws Exception { @@ -212,7 +206,7 @@ public class OutgoingRequestHeadersTest { assertThat((String) headers.get("Authorization"), startsWith("Basic ")); assertThat(headers.get("X-ONAP-PartnerName"), is("VID.VID")); - //validate requestId is same in next call but invocationId is different + //verify requestId is same in next call but invocationId is different //given captor = setMocksForMsoRestClientNew(); @@ -251,6 +245,7 @@ public class OutgoingRequestHeadersTest { client -> client.RestGet("from app id", "some transId", Unchecked.toURI("/any path"), false), client -> client.RestPost("from app id", "/any path", "some payload", false), + client -> client.doRest("from app id", "some transId", Unchecked.toURI("/any path"), "somebody", HttpMethod.GET, false, true), client -> client.RestPut("from app id", "/any path", "some payload", false, false) ).map(l -> ImmutableList.of(l).toArray()).collect(Collectors.toList()).toArray(new Object[][]{}); @@ -258,12 +253,21 @@ public class OutgoingRequestHeadersTest { @Test(dataProvider = "aaiMethods") public void aai(Consumer f) throws Exception { + //given final TestUtils.JavaxRsClientMocks mocks = setAndGetMocksInsideRestImpl(aaiRestInterface); + //when + f.accept(aaiRestInterface); + //then + HeadersVerifier headersVerifier = new HeadersVerifier().verifyFirstCall(mocks.getFakeBuilder()); + //verify requestId is same in next call but invocationId is different + //given + final TestUtils.JavaxRsClientMocks mocks2 = setAndGetMocksInsideRestImpl(aaiRestInterface); + //when f.accept(aaiRestInterface); + //then + headersVerifier.verifySecondCall(mocks2.getFakeBuilder()); - verifyXEcompRequestIdHeaderWasAdded(mocks.getFakeBuilder()); - verifyXOnapPartnerNameHeaderWasAdded(mocks.getFakeBuilder()); } // @Test(dataProvider = "schedulerMethods") @@ -375,4 +379,26 @@ public class OutgoingRequestHeadersTest { void acceptThrows(T t) throws Exception; } + private class HeadersVerifier { + + private String firstRequestId; + private String firstInvocationId; + + + HeadersVerifier verifyFirstCall(Builder fakeBuilder) { + firstRequestId = verifyXEcompRequestIdHeaderWasAdded(fakeBuilder); + assertEquals(firstRequestId, captureHeaderKeyAndReturnItsValue(fakeBuilder, "X-ONAP-RequestID")); + firstInvocationId = assertRequestHeaderIsUUID(fakeBuilder, "X-InvocationID"); + verifyXOnapPartnerNameHeaderWasAdded(fakeBuilder); + return this; + } + + void verifySecondCall(Builder fakeBuilder) { + String secondRequestId = verifyXEcompRequestIdHeaderWasAdded(fakeBuilder); + assertEquals(firstRequestId, secondRequestId); + + Object secondInvocationId = assertRequestHeaderIsUUID(fakeBuilder, "X-InvocationID"); + assertNotEquals(firstInvocationId, secondInvocationId); + } + } } -- cgit 1.2.3-korg