diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java b/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java index f89780a3f527aa8becfa0f84f766ce41a0159b0c..64681cfe9abead1d25b6f0d8626241b0f90244a7 100644 --- a/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java +++ b/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java @@ -33,7 +33,7 @@ class XtaClientITCase { static final XtaTestServerSetupExtension XTA_TEST_SERVER_SETUP_EXTENSION = new XtaTestServerSetupExtension(); static final int TWO_MAX_LIST_ITEMS = 2; - private XtaClient setupClient; + private XtaClient silentTestClient; private XtaClient testClient; private List<XtaMessageMetaData> supportCheckedMetadataItems; @@ -49,16 +49,17 @@ class XtaClientITCase { supportCheckedMetadataItems = new ArrayList<>(); isSupportedDummy = (metaData) -> true; processedMessages = new ArrayList<>(); - setupClient = XTA_TEST_SERVER_SETUP_EXTENSION.getSetupClient(); + silentTestClient = XTA_TEST_SERVER_SETUP_EXTENSION.getSilentTestClient(); StaticStringListAppender.clearLogLines(); closeMessagesForAllReaders(); } private void closeMessagesForAllReaders() { - closeAllMessages(setupClient, READER_CLIENT_IDENTIFIER1); - closeAllMessages(setupClient, READER_CLIENT_IDENTIFIER2); - closeAllMessages(setupClient, READER_CLIENT_IDENTIFIER3); + var silentTestClientConfig = XTA_TEST_SERVER_SETUP_EXTENSION.getSilentTestClientConfig(); + closeAllMessages(silentTestClientConfig, READER_CLIENT_IDENTIFIER1); + closeAllMessages(silentTestClientConfig, READER_CLIENT_IDENTIFIER2); + closeAllMessages(silentTestClientConfig, READER_CLIENT_IDENTIFIER3); } @DisplayName("fetch messages") @@ -79,7 +80,7 @@ class XtaClientITCase { createMessage("versammlungsanzeige", AUTHOR_CLIENT_IDENTIFIER3, READER_CLIENT_IDENTIFIER3) ); sendMessageIds = sendMessages.stream() - .map(message -> sendTestMessage(setupClient, message)) + .map(message -> sendTestMessage(silentTestClient, message)) .toList(); } @@ -138,7 +139,7 @@ class XtaClientITCase { assertThatMessages(processedMessages).containExactlyInAnyOrder(sendMessages.getFirst()); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor(messageIdBySendIndex(0)); + .haveExactlyClosedStatusFor(messageIdBySendIndex(0)); } @DisplayName("should fetch messages from second reader") @@ -152,7 +153,7 @@ class XtaClientITCase { assertThatMessages(processedMessages).containExactlyInAnyOrder(sendMessages.get(1), sendMessages.get(2), sendMessages.get(3)); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor(messageIdBySendIndex(1), messageIdBySendIndex(2), messageIdBySendIndex(3)); + .haveExactlyClosedStatusFor(messageIdBySendIndex(1), messageIdBySendIndex(2), messageIdBySendIndex(3)); } @DisplayName("should fetch messages from first and second reader") @@ -169,7 +170,7 @@ class XtaClientITCase { ); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor( + .haveExactlyClosedStatusFor( messageIdBySendIndex(0), messageIdBySendIndex(1), messageIdBySendIndex(2), messageIdBySendIndex(3) ); @@ -190,7 +191,7 @@ class XtaClientITCase { ); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor( + .haveExactlyClosedStatusFor( messageIdBySendIndex(0), messageIdBySendIndex(1), messageIdBySendIndex(2), messageIdBySendIndex(3), messageIdBySendIndex(4), messageIdBySendIndex(5) @@ -214,7 +215,7 @@ class XtaClientITCase { ); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor( + .haveExactlyClosedStatusFor( messageIdBySendIndex(0), messageIdBySendIndex(1), messageIdBySendIndex(2) ); @@ -237,7 +238,7 @@ class XtaClientITCase { ); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor( + .haveExactlyClosedStatusFor( messageIdBySendIndex(5) ); } @@ -263,7 +264,7 @@ class XtaClientITCase { assertThatMessages(processedMessages).containExactlyInAnyOrder(sendMessages.get(0), sendMessages.get(1), sendMessages.get(2)); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor(messageIdBySendIndex(0), messageIdBySendIndex(1), messageIdBySendIndex(2)); + .haveExactlyClosedStatusFor(messageIdBySendIndex(0), messageIdBySendIndex(1), messageIdBySendIndex(2)); } @DisplayName("should process messages only if supported, with support for author3") @@ -279,7 +280,7 @@ class XtaClientITCase { assertThatMessages(processedMessages).containExactlyInAnyOrder(sendMessages.get(5)); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor(messageIdBySendIndex(5)); + .haveExactlyClosedStatusFor(messageIdBySendIndex(5)); } @SneakyThrows @@ -339,7 +340,7 @@ class XtaClientITCase { @Test @SneakyThrows void shouldReturnTransportReportWithOpenStatus() { - var transportReport = setupClient.sendMessage(message); + var transportReport = silentTestClient.sendMessage(message); assertThat(transportReport.status()).isEqualTo(XtaMessageStatus.OPEN); } diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientRemoteITCase.java b/src/test/java/de/ozgcloud/xta/client/XtaClientRemoteITCase.java index 72384e7b843bf3414d0d5aeee77e2e1af58bf3ae..0ceac4857e86725204502ed1d2828a864c891ce7 100644 --- a/src/test/java/de/ozgcloud/xta/client/XtaClientRemoteITCase.java +++ b/src/test/java/de/ozgcloud/xta/client/XtaClientRemoteITCase.java @@ -77,8 +77,8 @@ class XtaClientRemoteITCase { silentDevClient = XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentDevClient(); // Fail if any message pending, to ensure that we do not clear existing messages in the DEV environment - failIfAnyMessagePending(silentDevClient, DEV_READER_CLIENT_IDENTIFIER); - failIfAnyMessagePending(silentTestClient, TEST_READER_CLIENT_IDENTIFIER); + failIfAnyMessagePending(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentDevClientConfig(), DEV_READER_CLIENT_IDENTIFIER); + failIfAnyMessagePending(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentTestClientConfig(), TEST_READER_CLIENT_IDENTIFIER); StaticStringListAppender.clearLogLines(); } @@ -89,8 +89,8 @@ class XtaClientRemoteITCase { } private void closeMessagesForAllReaders() { - closeAllMessages(silentDevClient, DEV_READER_CLIENT_IDENTIFIER); - closeAllMessages(silentTestClient, TEST_READER_CLIENT_IDENTIFIER); + closeAllMessages(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentDevClientConfig(), DEV_READER_CLIENT_IDENTIFIER); + closeAllMessages(XTA_REMOTE_SERVER_SETUP_EXTENSION.getSilentTestClientConfig(), TEST_READER_CLIENT_IDENTIFIER); } @DisplayName("fetch messages") @@ -153,7 +153,7 @@ class XtaClientRemoteITCase { assertThatMessages(processedMessages).containExactlyInAnyOrder(sendMessages.getFirst()); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor(messageIdBySendIndex(0)); + .haveExactlyClosedStatusFor(messageIdBySendIndex(0)); } @DisplayName("should fetch messages from second reader") @@ -167,7 +167,7 @@ class XtaClientRemoteITCase { assertThatMessages(processedMessages).containExactlyInAnyOrder(sendMessages.get(1), sendMessages.get(2), sendMessages.get(3)); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor(messageIdBySendIndex(1), messageIdBySendIndex(2), messageIdBySendIndex(3)); + .haveExactlyClosedStatusFor(messageIdBySendIndex(1), messageIdBySendIndex(2), messageIdBySendIndex(3)); } @DisplayName("should fetch messages from first and second reader") @@ -184,7 +184,7 @@ class XtaClientRemoteITCase { ); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor( + .haveExactlyClosedStatusFor( messageIdBySendIndex(0), messageIdBySendIndex(1), messageIdBySendIndex(2), messageIdBySendIndex(3) ); @@ -194,11 +194,11 @@ class XtaClientRemoteITCase { private void setupClientsWithIdentifiers(List<XtaIdentifier> identifiers) { devClient = createClientWithIdentifiersAndClientCert( identifiers, - XTA_REMOTE_SERVER_SETUP_EXTENSION.getDevClientCertKeyStore() + XTA_REMOTE_SERVER_SETUP_EXTENSION.getDevClientConfig().getClientCertKeystore() ); testClient = createClientWithIdentifiersAndClientCert( identifiers, - XTA_REMOTE_SERVER_SETUP_EXTENSION.getTestClientCertKeyStore() + XTA_REMOTE_SERVER_SETUP_EXTENSION.getTestClientConfig().getClientCertKeystore() ); } diff --git a/src/test/java/de/ozgcloud/xta/client/extension/XtaRemoteServerSetupExtension.java b/src/test/java/de/ozgcloud/xta/client/extension/XtaRemoteServerSetupExtension.java index 34d8b06d5e996b491b0fb742baa0408c6b072803..cf59130cf1751c7160074766f8741f3055d4c8a7 100644 --- a/src/test/java/de/ozgcloud/xta/client/extension/XtaRemoteServerSetupExtension.java +++ b/src/test/java/de/ozgcloud/xta/client/extension/XtaRemoteServerSetupExtension.java @@ -14,7 +14,6 @@ import de.ozgcloud.xta.client.XtaClient; import de.ozgcloud.xta.client.XtaClientFactory; import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.core.WrappedXtaService; - import lombok.Getter; import lombok.Setter; import lombok.SneakyThrows; @@ -26,11 +25,13 @@ import lombok.extern.slf4j.Slf4j; public class XtaRemoteServerSetupExtension implements BeforeAllCallback { private XtaClient testClient; + private XtaClientConfig testClientConfig; private XtaClient silentTestClient; - private XtaClientConfig.KeyStore testClientCertKeyStore; + private XtaClientConfig silentTestClientConfig; private XtaClient devClient; + private XtaClientConfig devClientConfig; private XtaClient silentDevClient; - private XtaClientConfig.KeyStore devClientCertKeyStore; + private XtaClientConfig silentDevClientConfig; private WrappedXtaService service; private XtaClientFactory clientFactory; @@ -40,12 +41,23 @@ public class XtaRemoteServerSetupExtension implements BeforeAllCallback { @Override @SneakyThrows public void beforeAll(ExtensionContext context) { - testClientCertKeyStore = createClientCertKeyStore(getEnvVar("KOP_SH_KIEL_TEST_PATH"), getEnvVar("KOP_SH_KIEL_TEST_PASSWORD")); - testClient = setupClient(testClientCertKeyStore, true); - silentTestClient = setupClient(testClientCertKeyStore, false); - devClientCertKeyStore = createClientCertKeyStore(getEnvVar("KOP_SH_KIEL_DEV_PATH"), getEnvVar("KOP_SH_KIEL_DEV_PASSWORD")); - devClient = setupClient(devClientCertKeyStore, true); - silentDevClient = setupClient(devClientCertKeyStore, false); + testClientConfig = createClientConfig( + createClientCertKeyStore(getEnvVar("KOP_SH_KIEL_TEST_PATH"), getEnvVar("KOP_SH_KIEL_TEST_PASSWORD")), + true); + testClient = XtaClient.from(testClientConfig); + silentTestClientConfig = createClientConfig( + testClientConfig.getClientCertKeystore(), + false); + silentTestClient = XtaClient.from(silentTestClientConfig); + + devClientConfig = createClientConfig( + createClientCertKeyStore(getEnvVar("KOP_SH_KIEL_DEV_PATH"), getEnvVar("KOP_SH_KIEL_DEV_PASSWORD")), + true); + silentDevClientConfig = createClientConfig( + devClientConfig.getClientCertKeystore(), + false); + devClient = XtaClient.from(devClientConfig); + silentDevClient = XtaClient.from(silentDevClientConfig); } private XtaClientConfig.KeyStore createClientCertKeyStore(String clientCertKeystorePath, String clientCertKeystorePassword) { @@ -57,19 +69,18 @@ public class XtaRemoteServerSetupExtension implements BeforeAllCallback { } @SneakyThrows - XtaClient setupClient(XtaClientConfig.KeyStore clientCertKeyStore, boolean verbose) { - return XtaClient.from(createSpecificClientConfigBuilder() + XtaClientConfig createClientConfig(XtaClientConfig.KeyStore clientCertKeyStore, boolean verbose) { + return createSpecificClientConfigBuilder() .logSoapRequests(verbose) .logSoapResponses(verbose) .clientCertKeystore(clientCertKeyStore) - .build()); + .build(); } private String getEnvVar(String name) { return Objects.requireNonNull(System.getenv(name), "Environment variable " + name + " is required!"); } - @SneakyThrows private static byte[] readBytesFromFile(String path) { return Files.toByteArray(new File(path)); diff --git a/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java b/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java index 18197005703eb1230cf668f961f0a5fbd2bbf02d..221bf4961c21aa3a5eadd37ead8e92024ee33ac1 100644 --- a/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java +++ b/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java @@ -5,15 +5,15 @@ import static org.assertj.core.api.Assertions.*; import java.util.Arrays; import java.util.List; +import java.util.Set; import java.util.function.Function; -import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.IntStream; import de.ozgcloud.xta.client.XtaClient; import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.core.WrappedXtaService; -import de.ozgcloud.xta.client.core.XtaClientService; +import de.ozgcloud.xta.client.core.WrappedXtaServiceFactory; import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import de.ozgcloud.xta.client.model.XtaFile; import de.ozgcloud.xta.client.model.XtaIdentifier; @@ -76,12 +76,6 @@ public class XtaServerSetupExtensionTestUtil { .logSoapResponses(true); } - @SneakyThrows - public static String sendTestMessage(XtaClient client, XtaMessageExampleLoader.MessageExampleConfig messageExampleConfig) { - var message = XtaMessageExampleLoader.load(messageExampleConfig); - return sendTestMessage(client, message); - } - @SneakyThrows public static String sendTestMessage(XtaClient client, XtaMessage message) { try { @@ -108,8 +102,8 @@ public class XtaServerSetupExtensionTestUtil { } @SneakyThrows - public static void failIfAnyMessagePending(XtaClient client, XtaIdentifier clientId) { - var wrappedService = getWrappedService(client); + public static void failIfAnyMessagePending(XtaClientConfig config, XtaIdentifier clientId) { + var wrappedService = createWrappedService(config); var result = wrappedService.getStatusList(clientId, 1); if (!result.messages().isEmpty()) { fail("Expect no pending xta-messages for reader %s! Ensure that the mailbox is empty before running this test.".formatted( @@ -118,8 +112,8 @@ public class XtaServerSetupExtensionTestUtil { } @SneakyThrows - public static void closeAllMessages(XtaClient client, XtaIdentifier clientId) { - var wrappedService = getWrappedService(client); + public static void closeAllMessages(XtaClientConfig config, XtaIdentifier clientId) { + var wrappedService = createWrappedService(config); var result = wrappedService.getStatusList(clientId, 100); var messageIds = result.messages().stream() @@ -130,17 +124,9 @@ public class XtaServerSetupExtensionTestUtil { } } - private static WrappedXtaService getWrappedService(XtaClient client) { - XtaClientService clientService = getPrivateFieldValue(client, "service"); - return getPrivateFieldValue(clientService, "service"); - } - - @SuppressWarnings("unchecked") @SneakyThrows - private static <T> T getPrivateFieldValue(Object object, String fieldName) { - var field = object.getClass().getDeclaredField(fieldName); - field.setAccessible(true); - return (T) field.get(object); + private static WrappedXtaService createWrappedService(XtaClientConfig config) { + return WrappedXtaServiceFactory.from(config).create(); } public static XtaMessageMetaData withoutMessageIdAndSize(XtaMessageMetaData metaData) { @@ -157,76 +143,10 @@ public class XtaServerSetupExtensionTestUtil { } public record MessagesAssert(List<XtaMessage> processedMessages) { + public MessagesAssert containExactlyInAnyOrder(XtaMessage... messages) { try { - containMetaDataExactlyInAnyOrder(Arrays.stream(messages) - .map(XtaMessage::metaData) - .toArray(XtaMessageMetaData[]::new) - ); - - // Assert equal message file and attachment files without content (ignoring size since it may be null before sending) - UnaryOperator<XtaFile> withoutContentAndSize = xtaFile -> xtaFile.toBuilder() - .content(null) - .size(null) - .build(); - assertThat(processedMessages) - .extracting(XtaMessage::messageFile) - .extracting(withoutContentAndSize) - .containsExactlyInAnyOrderElementsOf(Arrays.stream(messages) - .map(XtaMessage::messageFile) - .map(withoutContentAndSize) - .toList()); - UnaryOperator<List<XtaFile>> filesWithoutContentAndSize = fileList -> fileList.stream().map(withoutContentAndSize).toList(); - assertThat(processedMessages) - .extracting(XtaMessage::attachmentFiles) - .extracting(filesWithoutContentAndSize) - .containsExactlyInAnyOrderElementsOf(Arrays.stream(messages) - .map(XtaMessage::attachmentFiles) - .map(filesWithoutContentAndSize) - .toList()); - - // Assert equal content of message file - var listOfMessageFileContents = processedMessages.stream() - .map(XtaMessage::messageFile) - .map(XtaServerSetupExtensionTestUtil::readBytesOfXtaFile) - .toList(); - var exceptedListOfMessageFileContents = Arrays.stream(messages) - .map(XtaMessage::messageFile) - .map(XtaServerSetupExtensionTestUtil::readBytesOfXtaFile) - .toList(); - Function<byte[], Integer> contentLength = b -> b.length; - assertThat(listOfMessageFileContents) - .extracting(contentLength) - .containsExactlyInAnyOrderElementsOf(exceptedListOfMessageFileContents.stream().map(contentLength).toList()); - assertThat(listOfMessageFileContents).containsExactlyInAnyOrderElementsOf(exceptedListOfMessageFileContents); - - // Assert equal content of attachment files - var attachmentFileContents = processedMessages.stream() - .map(XtaMessage::attachmentFiles) - .map(XtaServerSetupExtensionTestUtil::readBytesOfXtaFiles) - .toList(); - var exceptedAttachmentFileContents = Arrays.stream(messages) - .map(XtaMessage::attachmentFiles) - .map(XtaServerSetupExtensionTestUtil::readBytesOfXtaFiles) - .toList(); - Function<List<byte[]>, List<Integer>> contentLengths = contentList -> contentList.stream().map(contentLength).toList(); - assertThat(attachmentFileContents) - .extracting(contentLengths) - .containsExactlyInAnyOrderElementsOf(exceptedAttachmentFileContents.stream().map(contentLengths).toList()); - - assertThat(attachmentFileContents) - .usingElementComparator((a, b) -> { - var sizeComparison = Integer.compare(a.size(), b.size()); - return sizeComparison != 0 - ? sizeComparison - : IntStream.range(0, a.size()) - .map(i -> Arrays.compare(a.get(i), b.get(i))) - .filter(i -> i != 0) - .findFirst() - .orElse(0); - }) - .containsExactlyInAnyOrderElementsOf(exceptedAttachmentFileContents); - + containExactlyInAnyOrderRaw(messages); } catch (AssertionError | RuntimeException e) { log.error("Messages do not exactly contain excepted messages!"); throw e; @@ -234,6 +154,106 @@ public class XtaServerSetupExtensionTestUtil { return this; } + private void containExactlyInAnyOrderRaw(XtaMessage... messages) { + var messageMetaData = Arrays.stream(messages) + .map(XtaMessage::metaData) + .toArray(XtaMessageMetaData[]::new); + containMetaDataExactlyInAnyOrder(messageMetaData); + + assertEqualMessageFileWithoutContent(messages); + assertEqualAttachmentFilesWithoutContent(messages); + + assertEqualContentOfMessageFile(messages); + assertEqualContentOfAttachmentFiles(messages); + } + + private void assertEqualMessageFileWithoutContent(XtaMessage... messages) { + // ignoring size since it may be null before sending + assertThat(processedMessages) + .extracting(XtaMessage::messageFile) + .extracting(this::withoutContentAndSize) + .containsExactlyInAnyOrderElementsOf(Arrays.stream(messages) + .map(XtaMessage::messageFile) + .map(this::withoutContentAndSize) + .toList()); + } + + private void assertEqualAttachmentFilesWithoutContent(XtaMessage... messages) { + // ignoring size since it may be null before sending + assertThat(processedMessages) + .extracting(XtaMessage::attachmentFiles) + .extracting(this::filesWithoutContentAndSize) + .containsExactlyInAnyOrderElementsOf(Arrays.stream(messages) + .map(XtaMessage::attachmentFiles) + .map(this::filesWithoutContentAndSize) + .toList()); + } + + private List<XtaFile> filesWithoutContentAndSize(List<XtaFile> fileList) { + return fileList.stream().map(this::withoutContentAndSize).toList(); + } + + private XtaFile withoutContentAndSize(XtaFile xtaFile) { + return xtaFile.toBuilder() + .content(null) + .size(null) + .build(); + } + + private void assertEqualContentOfMessageFile(XtaMessage... messages) { + var listOfMessageFileContents = processedMessages.stream() + .map(XtaMessage::messageFile) + .map(XtaServerSetupExtensionTestUtil::readBytesOfXtaFile) + .toList(); + var exceptedListOfMessageFileContents = Arrays.stream(messages) + .map(XtaMessage::messageFile) + .map(XtaServerSetupExtensionTestUtil::readBytesOfXtaFile) + .toList(); + assertThat(listOfMessageFileContents) + .extracting(b -> b.length) + .containsExactlyInAnyOrderElementsOf(exceptedListOfMessageFileContents.stream().map(b -> b.length).toList()); + assertThat(listOfMessageFileContents).containsExactlyInAnyOrderElementsOf(exceptedListOfMessageFileContents); + } + + private void assertEqualContentOfAttachmentFiles(XtaMessage... messages) { + var attachmentFileContents = processedMessages.stream() + .map(XtaMessage::attachmentFiles) + .map(XtaServerSetupExtensionTestUtil::readBytesOfXtaFiles) + .toList(); + var exceptedAttachmentFileContents = Arrays.stream(messages) + .map(XtaMessage::attachmentFiles) + .map(XtaServerSetupExtensionTestUtil::readBytesOfXtaFiles) + .toList(); + assertEqualLengthOfAttachmentFiles(attachmentFileContents, exceptedAttachmentFileContents); + assertEqualRawContentOfAttachmentFiles(attachmentFileContents, exceptedAttachmentFileContents); + } + + private void assertEqualLengthOfAttachmentFiles(List<List<byte[]>> attachmentFileContents, + List<List<byte[]>> exceptedAttachmentFileContents) { + Function<List<byte[]>, List<Integer>> contentLengths = contentList -> contentList.stream().map(b -> b.length).toList(); + assertThat(attachmentFileContents) + .extracting(contentLengths) + .containsExactlyInAnyOrderElementsOf(exceptedAttachmentFileContents.stream().map(contentLengths).toList()); + } + + private void assertEqualRawContentOfAttachmentFiles(List<List<byte[]>> attachmentFileContents, + List<List<byte[]>> exceptedAttachmentFileContents) { + assertThat(attachmentFileContents) + .usingElementComparator(this::compareAttachmentFiles) + .containsExactlyInAnyOrderElementsOf(exceptedAttachmentFileContents); + } + + private int compareAttachmentFiles(List<byte[]> a, List<byte[]> b) { + var sizeComparison = Integer.compare(a.size(), b.size()); + return sizeComparison != 0 + ? sizeComparison + : IntStream.range(0, a.size()) + .map(i -> Arrays.compare(a.get(i), b.get(i))) + .filter(i -> i != 0) + .findFirst() + .orElse(0); + } + public void containMetaDataExactlyInAnyOrder(XtaMessageMetaData... messageMetaDataItems) { try { // Assert equal message counts @@ -260,23 +280,7 @@ public class XtaServerSetupExtensionTestUtil { public record TransportReportsAssert(List<XtaTransportReport> transportReports) { public TransportReportsAssert reportExactlyFor(List<XtaMessage> processedMessages) { try { - assertThat(transportReports).hasSize(processedMessages.size()); - // Compare message ids - assertThat(transportReports) - .extracting(XtaTransportReport::metaData) - .extracting(XtaMessageMetaData::messageId) - .containsExactlyElementsOf(processedMessages.stream() - .map(XtaMessage::metaData) - .map(XtaMessageMetaData::messageId) - .toList()); - // Compare message metadata (ignoring size since it may be null for transport report (due to message closed?)) - assertThat(transportReports) - .extracting(XtaTransportReport::metaData) - .extracting(XtaServerSetupExtensionTestUtil::withoutMessageSize) - .containsExactlyElementsOf(processedMessages.stream() - .map(XtaMessage::metaData) - .map(XtaServerSetupExtensionTestUtil::withoutMessageSize) - .toList()); + reportExactlyForRaw(processedMessages); } catch (AssertionError | RuntimeException e) { log.error("TransportReports do not exactly match messages metadata!"); throw e; @@ -284,21 +288,60 @@ public class XtaServerSetupExtensionTestUtil { return this; } - public TransportReportsAssert haveExactlyGreenStatusFor(String... messageIds) { - try { - var setOfMessageIds = Arrays.stream(messageIds).collect(Collectors.toSet()); + private void reportExactlyForRaw(List<XtaMessage> processedMessages) { + assertThat(transportReports).hasSize(processedMessages.size()); + assertEqualMessageId(processedMessages); + assertEqualMessageMetadata(processedMessages); + } - assertThat(transportReports) - .allMatch(transportReport -> - transportReport.status().equals(XtaMessageStatus.GREEN) == setOfMessageIds - .contains(transportReport.metaData().messageId()) - ); + private void assertEqualMessageId(List<XtaMessage> processedMessages) { + assertThat(transportReports) + .extracting(XtaTransportReport::metaData) + .extracting(XtaMessageMetaData::messageId) + .containsExactlyElementsOf(processedMessages.stream() + .map(XtaMessage::metaData) + .map(XtaMessageMetaData::messageId) + .toList()); + } + + private void assertEqualMessageMetadata(List<XtaMessage> processedMessages) { + // ignoring size since it may be null for transport report (due to message closed?) + assertThat(transportReports) + .extracting(XtaTransportReport::metaData) + .extracting(XtaServerSetupExtensionTestUtil::withoutMessageSize) + .containsExactlyElementsOf(processedMessages.stream() + .map(XtaMessage::metaData) + .map(XtaServerSetupExtensionTestUtil::withoutMessageSize) + .toList()); + } + + public TransportReportsAssert haveExactlyClosedStatusFor(String... messageIds) { + try { + haveExactlyClosedStatusForRaw(messageIds); } catch (AssertionError | RuntimeException e) { log.error("TransportReports do not have excepted green status for messageIds!"); throw e; } return this; } + + private void haveExactlyClosedStatusForRaw(String... messageIds) { + var setOfMessageIds = Arrays.stream(messageIds).collect(Collectors.toSet()); + + assertThat(transportReports) + .allMatch(transportReport -> + isClosed(transportReport) == expectIsClosed(transportReport, setOfMessageIds) + + ); + } + + private boolean expectIsClosed(XtaTransportReport transportReport, Set<String> messageIds) { + return messageIds.contains(transportReport.metaData().messageId()); + } + + private boolean isClosed(XtaTransportReport transportReport) { + return !transportReport.status().equals(XtaMessageStatus.OPEN); + } } public static TransportReportsAssert assertThatTransportReports(List<XtaTransportReport> transportReports) { diff --git a/src/test/java/de/ozgcloud/xta/client/extension/XtaTestServerSetupExtension.java b/src/test/java/de/ozgcloud/xta/client/extension/XtaTestServerSetupExtension.java index f5e29c42d92cde5206a7fcafe9126a1766b2f40e..9001ba631dc7387f7f1d2af6fe76399307c8650d 100644 --- a/src/test/java/de/ozgcloud/xta/client/extension/XtaTestServerSetupExtension.java +++ b/src/test/java/de/ozgcloud/xta/client/extension/XtaTestServerSetupExtension.java @@ -32,7 +32,8 @@ public class XtaTestServerSetupExtension implements BeforeAllCallback, AfterAllC private static final String XTA_TEST_SERVER_TRUSTSTORE_PATH = "store/xta-test-server-truststore.jks"; private static final String XTA_TEST_SERVER_TRUSTSTORE_PASSWORD = "password"; - private XtaClient setupClient; + private XtaClient silentTestClient; + private XtaClientConfig silentTestClientConfig; private XtaClientFactory clientFactory; private XtaTestServerContainer xtaServerContainer; private XtaClientConfig.KeyStore clientCertKeyStore; @@ -60,10 +61,11 @@ public class XtaTestServerSetupExtension implements BeforeAllCallback, AfterAllC .type("JKS") .password(XTA_TEST_SERVER_TRUSTSTORE_PASSWORD.toCharArray()) .build(); - setupClient = XtaClient.from(createSpecificClientConfigBuilder() + silentTestClientConfig = createSpecificClientConfigBuilder() .logSoapRequests(false) .logSoapResponses(false) - .build()); + .build(); + silentTestClient = XtaClient.from(silentTestClientConfig); } private void setupServer() {