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