From 49b2044a801b3af44163f7388de0720bac060b9e Mon Sep 17 00:00:00 2001 From: Jan Zickermann <jan.zickermann@dataport.de> Date: Wed, 2 Apr 2025 11:55:13 +0200 Subject: [PATCH] KOP-3126 Mock with xta-test-server keystore --- .../xta/client/XtaSchemaValidationITCase.java | 38 ++++++++--- .../XtaMockServerResponseTestFactory.java | 2 +- .../stage-example/example2/example.xml | 59 ++++++++++++++++++ .../store/xta-test-server_keystore.p12 | Bin 0 -> 4218 bytes 4 files changed, 91 insertions(+), 8 deletions(-) create mode 100644 src/test/resources/mock-responses/getMessage/stage-example/example2/example.xml create mode 100644 src/test/resources/store/xta-test-server_keystore.p12 diff --git a/src/test/java/de/ozgcloud/xta/client/XtaSchemaValidationITCase.java b/src/test/java/de/ozgcloud/xta/client/XtaSchemaValidationITCase.java index 44679c3..542c12c 100644 --- a/src/test/java/de/ozgcloud/xta/client/XtaSchemaValidationITCase.java +++ b/src/test/java/de/ozgcloud/xta/client/XtaSchemaValidationITCase.java @@ -1,15 +1,19 @@ package de.ozgcloud.xta.client; import static com.github.tomakehurst.wiremock.client.WireMock.*; -import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.*; +import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; import static org.assertj.core.api.Assertions.*; +import java.io.File; + +import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import com.github.tomakehurst.wiremock.WireMockServer; +import com.github.tomakehurst.wiremock.client.WireMock; import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.core.WrappedXtaService; @@ -18,7 +22,6 @@ import de.ozgcloud.xta.client.factory.XtaMockServerResponseTestFactory; import de.ozgcloud.xta.client.model.XtaIdentifier; import lombok.SneakyThrows; - class XtaSchemaValidationITCase { WrappedXtaService xtaService; @@ -32,16 +35,37 @@ class XtaSchemaValidationITCase { @BeforeEach @SneakyThrows void setup() { - wireMockServer = new WireMockServer(options().port(8089)); + wireMockServer = new WireMockServer(options() + .port(8088) + .httpsPort(8089) + .keystorePath("store/xta-test-server_keystore.p12") + .keystorePassword("password") + .keystoreType("PKCS12") + .caKeystorePath("store/xta-test_truststore.jks") + .caKeystorePassword("password") + .caKeystoreType("JKS") + ); wireMockServer.start(); + WireMock.configureFor(8088); + xtaService = WrappedXtaServiceFactory.from(XtaClientConfig.builder() .schemaValidation(true) .logSoapResponses(true) .logSoapRequests(true) - .managementServiceUrl(XTA_MOCK_SERVER_URL + "managementPort.svc") - .sendServiceUrl(XTA_MOCK_SERVER_URL + "sendPort.svc") - .msgBoxServiceUrl(XTA_MOCK_SERVER_URL + "msgBoxPort.svc") + .trustStore(XtaClientConfig.KeyStore.builder() + .content(FileUtils.readFileToByteArray(new File("src/test/resources/store/xta-test_truststore.jks"))) + .password("password".toCharArray()) + .type("JKS") + .build()) + .clientCertKeystore(XtaClientConfig.KeyStore.builder() + .content(FileUtils.readFileToByteArray(new File("src/test/resources/store/xta-test-client-john-smith_keystore.p12"))) + .password("password".toCharArray()) + .type("PKCS12") + .build()) + .managementServiceUrl(wireMockServer.baseUrl() + XTA_MOCK_SERVER_URL_PATH + "managementPort.svc") + .sendServiceUrl(wireMockServer.baseUrl() + XTA_MOCK_SERVER_URL_PATH + "sendPort.svc") + .msgBoxServiceUrl(wireMockServer.baseUrl() + XTA_MOCK_SERVER_URL_PATH + "msgBoxPort.svc") .build()).create(); } @@ -54,7 +78,7 @@ class XtaSchemaValidationITCase { @Test @SneakyThrows void shouldThrowUnmarshallExceptionOnBadResponse() { - stubFor(post(XTA_MOCK_SERVER_URL_PATH + "msgBoxPort.svc") + wireMockServer.stubFor(post(XTA_MOCK_SERVER_URL_PATH + "msgBoxPort.svc") .willReturn( XtaMockServerResponseTestFactory.createGetMessageResponse( "2f45a9e9-ed40-4e14-a082-de0d063e56e7_Geschaeftsgang.Geschaeftsgang.0201.zip"))); diff --git a/src/test/java/de/ozgcloud/xta/client/factory/XtaMockServerResponseTestFactory.java b/src/test/java/de/ozgcloud/xta/client/factory/XtaMockServerResponseTestFactory.java index 4f34d70..25c79eb 100644 --- a/src/test/java/de/ozgcloud/xta/client/factory/XtaMockServerResponseTestFactory.java +++ b/src/test/java/de/ozgcloud/xta/client/factory/XtaMockServerResponseTestFactory.java @@ -30,7 +30,7 @@ public class XtaMockServerResponseTestFactory { ); private static String generateMessageID(String xtaAttachmentFileName) { - return "urn:de:xta:messageid:dataport_xta_210:%s".formatted(UUID.fromString(xtaAttachmentFileName).toString()); + return "urn:de:xta:messageid:dataport_xta_210:%s".formatted(UUID.nameUUIDFromBytes(xtaAttachmentFileName.getBytes()).toString()); } public static ResponseDefinitionBuilder createEmptyGetStatusListResponse() { diff --git a/src/test/resources/mock-responses/getMessage/stage-example/example2/example.xml b/src/test/resources/mock-responses/getMessage/stage-example/example2/example.xml new file mode 100644 index 0000000..73f9d6e --- /dev/null +++ b/src/test/resources/mock-responses/getMessage/stage-example/example2/example.xml @@ -0,0 +1,59 @@ +<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> + <s:Header> + <a:Action s:mustUnderstand="1">http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxFetchRequest + </a:Action> + <h:MsgBoxResponse MsgBoxRequestID="urn:de:xta:messageid:dataport_xta_210:0b2d4796-7f31-40c3-b834-7f7c66c042c9" + xmlns:h="http://www.osci.eu/ws/2008/05/transport" xmlns="http://www.osci.eu/ws/2008/05/transport" + > + <ItemsPending>0</ItemsPending> + </h:MsgBoxResponse> + <h:MessageMetaData xmlns:h="http://www.osci.eu/ws/2014/10/transport" + xmlns="http://www.osci.eu/ws/2014/10/transport"> + <DeliveryAttributes> + <Origin>2025-04-02T10:49:30.324</Origin> + <Delivery>2025-04-02T10:49:32.893</Delivery> + </DeliveryAttributes> + <Originators> + <Author> + <Identifier type="xoev">afmsh:WebMethod_Online-Dienste</Identifier> + </Author> + </Originators> + <Destinations> + <Reader> + <Identifier type="xoev">afmsh:ozg-cloud-stage-Utopia</Identifier> + </Reader> + </Destinations> + <MsgIdentification> + <MessageID xmlns="http://www.w3.org/2005/08/addressing"> + urn:de:xta:messageid:dataport_xta_210:0b2d4796-7f31-40c3-b834-7f7c66c042c9 + </MessageID> + </MsgIdentification> + <Qualifier> + <Service>urn:xdomea:AFM</Service> + <BusinessScenario> + <Defined listURI="urn:de:dataport:codeliste:business.scenario" listVersionID="1"> + <code xmlns="">AFM_DATA</code> + </Defined> + </BusinessScenario> + <MessageType listURI="urn:de:payloadSchema:elementName" listVersionID="1.0" + payloadSchema="http://www.xdomea.de/V2.0.1"> + <code xmlns="">Geschaeftsgang.Geschaeftsgang.0201</code> + </MessageType> + </Qualifier> + <MsgSize>57890</MsgSize> + </h:MessageMetaData> + <a:RelatesTo>urn:uuid:0cb6ed55-8ac9-492a-9e76-6235e41729ea</a:RelatesTo> + </s:Header> + <s:Body> + <GenericContentContainer xmlns="http://xoev.de/transport/xta/211"> + <ContentContainer> + <Message contentType="application/zip" + filename="1088975e-5892-474e-a0e9-d3cef8ee61db_Geschaeftsgang.Geschaeftsgang.0201.zip" + id="1088975e-5892-474e-a0e9-d3cef8ee61db" size="57890"> + <xop:Include href="cid:http://tempuri.org/1/638791906226975019" + xmlns:xop="http://www.w3.org/2004/08/xop/include" /> + </Message> + </ContentContainer> + </GenericContentContainer> + </s:Body> +</s:Envelope> \ No newline at end of file diff --git a/src/test/resources/store/xta-test-server_keystore.p12 b/src/test/resources/store/xta-test-server_keystore.p12 new file mode 100644 index 0000000000000000000000000000000000000000..4b01606dc5b1dd7424a6f100f63914ea3e506d70 GIT binary patch literal 4218 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 literal 0 HcmV?d00001 -- GitLab