From c27897585d94b0477b5f36e18c96148018d91a97 Mon Sep 17 00:00:00 2001 From: i302705 Date: Fri, 23 Oct 2026 07:18:15 +0300 Subject: [PATCH] chore: Simplify MTX Sidecar Client --- .../feature/ord/clients/MtxSidecarClient.java | 4 +- .../clients/impl/MtxSidecarClientImpl.java | 13 +++--- .../impl/DynamicOrdResourcesProviderImpl.java | 8 +--- .../client/impl/MtxSidecarClientImplTest.java | 41 +++++++++++-------- .../DynamicOrdResourcesProviderImplTest.java | 6 ++- 5 files changed, 38 insertions(+), 34 deletions(-) diff --git a/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/clients/MtxSidecarClient.java b/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/clients/MtxSidecarClient.java index f108a79..adef00a 100644 --- a/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/clients/MtxSidecarClient.java +++ b/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/clients/MtxSidecarClient.java @@ -5,7 +5,7 @@ public interface MtxSidecarClient { - String getOrdDocument(); + byte[] getOrdDocument(); - String getOrdResourceDefinition(String resource); + byte[] getOrdResourceDefinition(String resource); } diff --git a/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/clients/impl/MtxSidecarClientImpl.java b/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/clients/impl/MtxSidecarClientImpl.java index d69bb7a..65b8205 100644 --- a/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/clients/impl/MtxSidecarClientImpl.java +++ b/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/clients/impl/MtxSidecarClientImpl.java @@ -8,9 +8,9 @@ import static com.sap.cds.services.request.RequestContext.getCurrent; import static com.sap.cloud.sdk.cloudplatform.connectivity.ApacheHttpClient5Accessor.getHttpClient; import static com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor.getDestination; -import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Collections.emptySet; import static java.util.stream.Collectors.toSet; +import static org.apache.commons.io.IOUtils.toByteArray; import static org.apache.hc.core5.http.ContentType.APPLICATION_JSON; import com.sap.cds.CdsData; @@ -22,7 +22,6 @@ import java.io.IOException; import java.util.Set; import lombok.RequiredArgsConstructor; -import org.apache.commons.io.IOUtils; import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.StringEntity; import org.apache.hc.core5.http.io.support.ClassicRequestBuilder; @@ -38,24 +37,24 @@ public class MtxSidecarClientImpl implements MtxSidecarClient { private final CdsRuntime cdsRuntime; @Override - public String getOrdDocument() { + public byte[] getOrdDocument() { return doPost(API_PATH_GET_ORD_DOCUMENT, asGetOrdDocumentRequestEntity(getCurrent(cdsRuntime))); } @Override - public String getOrdResourceDefinition(String resource) { + public byte[] getOrdResourceDefinition(String resource) { return doPost( API_PATH_GET_ORD_RESOURCE_DEFINITION, asGetOrdResourceDefinitionRequestEntity(getCurrent(cdsRuntime), resource)); } - private String doPost(String path, HttpEntity entity) { + private byte[] doPost(String path, HttpEntity entity) { try { return getHttpClient(getDestination(MTX_PROVISIONING_SERVICE_DESTINATION)) .execute( ClassicRequestBuilder.post(path).setEntity(entity).build(), - response -> IOUtils.toString( - assertSuccessful(response).getEntity().getContent(), UTF_8)); + response -> toByteArray( + assertSuccessful(response).getEntity().getContent())); } catch (IOException exception) { throw new ServiceException("Request to sidecar failed", exception); } diff --git a/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/provider/impl/DynamicOrdResourcesProviderImpl.java b/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/provider/impl/DynamicOrdResourcesProviderImpl.java index bbffe05..c1ba329 100644 --- a/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/provider/impl/DynamicOrdResourcesProviderImpl.java +++ b/cds-feature-ord/src/main/java/com/sap/cds/feature/ord/provider/impl/DynamicOrdResourcesProviderImpl.java @@ -5,7 +5,6 @@ import static com.sap.cds.feature.ord.common.Constants.PERSPECTIVE_SYSTEM_INSTANCE; import static com.sap.cds.feature.ord.common.Utils.Resources.asOrdJsonInputStream; -import static java.nio.charset.StandardCharsets.UTF_8; import static org.apache.commons.io.FilenameUtils.getBaseName; import static org.apache.commons.io.FilenameUtils.getExtension; @@ -57,10 +56,7 @@ private InputStream loadResource(String resource) { private InputStream loadFromMTXSidecar(String resource) { return Objects.equals(ORD_DOCUMENT_PATH, resource) ? asOrdJsonInputStream( - new ByteArrayInputStream( - mtxSidecarClient.getOrdDocument().getBytes(UTF_8)), - cdsOrdNodeProcessors) - : new ByteArrayInputStream( - mtxSidecarClient.getOrdResourceDefinition(resource).getBytes(UTF_8)); + new ByteArrayInputStream(mtxSidecarClient.getOrdDocument()), cdsOrdNodeProcessors) + : new ByteArrayInputStream(mtxSidecarClient.getOrdResourceDefinition(resource)); } } diff --git a/cds-feature-ord/src/test/java/com/sap/cds/feature/ord/client/impl/MtxSidecarClientImplTest.java b/cds-feature-ord/src/test/java/com/sap/cds/feature/ord/client/impl/MtxSidecarClientImplTest.java index 1ba4b90..cd5bbc4 100644 --- a/cds-feature-ord/src/test/java/com/sap/cds/feature/ord/client/impl/MtxSidecarClientImplTest.java +++ b/cds-feature-ord/src/test/java/com/sap/cds/feature/ord/client/impl/MtxSidecarClientImplTest.java @@ -5,7 +5,7 @@ import static com.sap.cds.services.ErrorStatuses.SERVER_ERROR; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; @@ -105,8 +105,8 @@ void whenGetOrdDocumentIsCalled_thenCorrectResultIsReturned() throws Throwable { .thenAnswer( in -> in.getArgument(1, HttpClientResponseHandler.class).handleResponse(classicHttpResponse)); - withMockedDestinationAccessor( - () -> withMockedApacheHttpClient5Accessor(() -> assertEquals("{}", classUnderTest.getOrdDocument()))); + withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor( + () -> assertArrayEquals("{}".getBytes(UTF_8), classUnderTest.getOrdDocument()))); verifyNoOtherMockInteractions(() -> { verify(provider).isToggles(); @@ -196,8 +196,8 @@ void givenThatExtensibilityIsEnabled_whenGetOrdDocumentIsCalled_thenCorrectResul .thenAnswer( in -> in.getArgument(1, HttpClientResponseHandler.class).handleResponse(classicHttpResponse)); - withMockedRequestContext(() -> withMockedDestinationAccessor( - () -> withMockedApacheHttpClient5Accessor(() -> assertEquals("{}", classUnderTest.getOrdDocument())))); + withMockedRequestContext(() -> withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor( + () -> assertArrayEquals("{}".getBytes(UTF_8), classUnderTest.getOrdDocument())))); verifyNoOtherMockInteractions(() -> { verify(provider).isToggles(); @@ -233,8 +233,8 @@ void givenThatTogglesAreEnabled_whenGetOrdDocumentIsCalled_thenCorrectResultIsRe .thenAnswer( in -> in.getArgument(1, HttpClientResponseHandler.class).handleResponse(classicHttpResponse)); - withMockedRequestContext(() -> withMockedDestinationAccessor( - () -> withMockedApacheHttpClient5Accessor(() -> assertEquals("{}", classUnderTest.getOrdDocument())))); + withMockedRequestContext(() -> withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor( + () -> assertArrayEquals("{}".getBytes(UTF_8), classUnderTest.getOrdDocument())))); verifyNoOtherMockInteractions(() -> { verify(provider).isToggles(); @@ -270,8 +270,8 @@ void givenThatTogglesAreEnabled_and_extensibilityIsEnabled_whenGetOrdDocumentIsC .thenAnswer( in -> in.getArgument(1, HttpClientResponseHandler.class).handleResponse(classicHttpResponse)); - withMockedRequestContext(() -> withMockedDestinationAccessor( - () -> withMockedApacheHttpClient5Accessor(() -> assertEquals("{}", classUnderTest.getOrdDocument())))); + withMockedRequestContext(() -> withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor( + () -> assertArrayEquals("{}".getBytes(UTF_8), classUnderTest.getOrdDocument())))); verifyNoOtherMockInteractions(() -> { verify(userInfo).getTenant(); @@ -308,8 +308,9 @@ void whenGetOrdResourceDefinitionIsCalled_thenCorrectResultIsReturned() throws T .thenAnswer( in -> in.getArgument(1, HttpClientResponseHandler.class).handleResponse(classicHttpResponse)); - withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor(() -> - assertEquals("{}", classUnderTest.getOrdResourceDefinition("dummy:ord:definition/Dummy.oas3.json")))); + withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor(() -> assertArrayEquals( + "{}".getBytes(UTF_8), + classUnderTest.getOrdResourceDefinition("dummy:ord:definition/Dummy.oas3.json")))); verifyNoOtherMockInteractions(() -> { verify(provider).isToggles(); @@ -408,8 +409,10 @@ void givenThatExtensibilityIsEnabled_whenGetOrdResourceDefinitionIsCalled_thenCo .thenAnswer( in -> in.getArgument(1, HttpClientResponseHandler.class).handleResponse(classicHttpResponse)); - withMockedRequestContext(() -> withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor(() -> - assertEquals("{}", classUnderTest.getOrdResourceDefinition("dummy:ord:definition/Dummy.oas3.json"))))); + withMockedRequestContext(() -> + withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor(() -> assertArrayEquals( + "{}".getBytes(UTF_8), + classUnderTest.getOrdResourceDefinition("dummy:ord:definition/Dummy.oas3.json"))))); verifyNoOtherMockInteractions(() -> { verify(provider).isToggles(); @@ -447,8 +450,10 @@ void givenThatTogglesAreEnabled_whenGetOrdResourceDefinitionIsCalled_thenCorrect .thenAnswer( in -> in.getArgument(1, HttpClientResponseHandler.class).handleResponse(classicHttpResponse)); - withMockedRequestContext(() -> withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor(() -> - assertEquals("{}", classUnderTest.getOrdResourceDefinition("dummy:ord:definition/Dummy.oas3.json"))))); + withMockedRequestContext(() -> + withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor(() -> assertArrayEquals( + "{}".getBytes(UTF_8), + classUnderTest.getOrdResourceDefinition("dummy:ord:definition/Dummy.oas3.json"))))); verifyNoOtherMockInteractions(() -> { verify(provider).isToggles(); @@ -486,8 +491,10 @@ void givenThatTogglesAreEnabled_whenGetOrdResourceDefinitionIsCalled_thenCorrect .thenAnswer( in -> in.getArgument(1, HttpClientResponseHandler.class).handleResponse(classicHttpResponse)); - withMockedRequestContext(() -> withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor(() -> - assertEquals("{}", classUnderTest.getOrdResourceDefinition("dummy:ord:definition/Dummy.oas3.json"))))); + withMockedRequestContext(() -> + withMockedDestinationAccessor(() -> withMockedApacheHttpClient5Accessor(() -> assertArrayEquals( + "{}".getBytes(UTF_8), + classUnderTest.getOrdResourceDefinition("dummy:ord:definition/Dummy.oas3.json"))))); verifyNoOtherMockInteractions(() -> { verify(provider).isToggles(); diff --git a/cds-feature-ord/src/test/java/com/sap/cds/feature/ord/provider/impl/DynamicOrdResourcesProviderImplTest.java b/cds-feature-ord/src/test/java/com/sap/cds/feature/ord/provider/impl/DynamicOrdResourcesProviderImplTest.java index 21b45ed..3aa4ae7 100644 --- a/cds-feature-ord/src/test/java/com/sap/cds/feature/ord/provider/impl/DynamicOrdResourcesProviderImplTest.java +++ b/cds-feature-ord/src/test/java/com/sap/cds/feature/ord/provider/impl/DynamicOrdResourcesProviderImplTest.java @@ -142,7 +142,7 @@ void givenThatStaticModelShouldBeUsed_and_perspectiveIsSystemInstance_whenReadIs givenThatDynamicModelShouldBeUsed_and_perspectiveIsSystemInstance_and_ordDocumentIsRequested_whenReadIsCalled_thenCorrectResultIsReturned() throws IOException { doReturn(false).when(dynamicModelUtils).useStaticModel(); - doReturn("{}").when(mtxSidecarClient).getOrdDocument(); + doReturn("{}".getBytes(UTF_8)).when(mtxSidecarClient).getOrdDocument(); assertEquals( "{}", @@ -223,7 +223,9 @@ void givenThatStaticModelShouldBeUsed_and_perspectiveIsSystemInstance_whenReadIs throws IOException { doReturn("ord/").when(openResourceDiscovery).getOrdResourcesRoot(); doReturn(false).when(dynamicModelUtils).useStaticModel(); - doReturn("{}").when(mtxSidecarClient).getOrdResourceDefinition("test:ord:service/test.oas3.json"); + doReturn("{}".getBytes(UTF_8)) + .when(mtxSidecarClient) + .getOrdResourceDefinition("test:ord:service/test.oas3.json"); assertEquals( "{}",