diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClient.java b/src/main/java/de/ozgcloud/xta/client/XtaClient.java index afe601dfa9dc4b6c13c65048d9bf823d6b819ba3..38a4161c1ae6bcc23441110495031267f0e9acc5 100644 --- a/src/main/java/de/ozgcloud/xta/client/XtaClient.java +++ b/src/main/java/de/ozgcloud/xta/client/XtaClient.java @@ -13,7 +13,7 @@ import jakarta.validation.constraints.NotNull; import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.core.XtaClientService; import de.ozgcloud.xta.client.core.XtaExceptionHandler; -import de.ozgcloud.xta.client.exception.ClientRuntimeException; +import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import de.ozgcloud.xta.client.exception.XtaClientException; import de.ozgcloud.xta.client.exception.XtaClientInitializationException; import de.ozgcloud.xta.client.model.XtaIdentifier; @@ -130,12 +130,12 @@ public class XtaClient { } boolean checkSomeMessageHasBeenClosed(List<XtaTransportReport> transportReports) { - var someTransportReportHasGreenStatus = transportReports.stream() - .anyMatch(t -> t.status().equals(XtaMessageStatus.GREEN)); - if (!someTransportReportHasGreenStatus) { + var someTransportReportHasClosedStatus = transportReports.stream() + .anyMatch(t -> !t.status().equals(XtaMessageStatus.OPEN)); + if (!someTransportReportHasClosedStatus) { logWarnForNoMessageClosed(); } - return someTransportReportHasGreenStatus; + return someTransportReportHasClosedStatus; } void logWarnForNoMessageClosed() { @@ -226,13 +226,13 @@ public class XtaClient { void throwExceptionIfServiceNotAvailable(XtaMessageMetaData metaData) { if (!service.lookupService(metaData)) { - throw new ClientRuntimeException("Service %s is not available!".formatted(metaData.service())); + throw new XtaClientRuntimeException("Service %s is not available!".formatted(metaData.service())); } } void throwExceptionIfAccountInactive(XtaIdentifier clientIdentifier) { if (!service.checkAccountActive(clientIdentifier)) { - throw new ClientRuntimeException("Account %s is not active!".formatted(clientIdentifier.value())); + throw new XtaClientRuntimeException("Account %s is not active!".formatted(clientIdentifier.value())); } } diff --git a/src/main/java/de/ozgcloud/xta/client/core/XtaClientService.java b/src/main/java/de/ozgcloud/xta/client/core/XtaClientService.java index 6dc98c8357aee69a5bc5311ae5d42b9c43d61e28..d61028941a5ed2ec58f05e29deb9f0f0050ce9e6 100644 --- a/src/main/java/de/ozgcloud/xta/client/core/XtaClientService.java +++ b/src/main/java/de/ozgcloud/xta/client/core/XtaClientService.java @@ -3,7 +3,7 @@ package de.ozgcloud.xta.client.core; import java.util.Optional; import de.ozgcloud.xta.client.config.XtaClientConfig; -import de.ozgcloud.xta.client.exception.ClientRuntimeException; +import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import de.ozgcloud.xta.client.model.XtaIdentifier; import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessageMetaData; @@ -33,7 +33,7 @@ public class XtaClientService { public Optional<XtaTransportReport> getTransportReport(XtaMessageMetaData messageMetaData) { try { return Optional.of(getTransportReportOrThrowException(messageMetaData)); - } catch (ClientRuntimeException e) { + } catch (XtaClientRuntimeException e) { logError(TRANSPORT_REPORT_FAILED_ERROR, e); return Optional.empty(); } @@ -78,7 +78,7 @@ public class XtaClientService { service.checkAccountActive(clientIdentifier); return true; } catch (XTAWSTechnicalProblemException | RuntimeException e) { - throw new ClientRuntimeException("Failed to check account active!", e); + throw new XtaClientRuntimeException("Failed to check account active!", e); } catch (PermissionDeniedException e) { return false; } @@ -91,7 +91,7 @@ public class XtaClientService { return getTransportReportOrThrowException(message.metaData()); } catch (XTAWSTechnicalProblemException | PermissionDeniedException | SyncAsyncException | ParameterIsNotValidException | MessageVirusDetectionException | MessageSchemaViolationException | RuntimeException e) { - throw new ClientRuntimeException("Failed to send message!", e); + throw new XtaClientRuntimeException("Failed to send message!", e); } } @@ -101,7 +101,7 @@ public class XtaClientService { var messageId = service.createMessageId(authorIdentifier); return createXtaMessageWithMessageId(messageWithoutMessageId, messageId); } catch (XTAWSTechnicalProblemException | PermissionDeniedException | RuntimeException e) { - throw new ClientRuntimeException("Failed to create message id!", e); + throw new XtaClientRuntimeException("Failed to create message id!", e); } } @@ -119,7 +119,7 @@ public class XtaClientService { try { return service.getTransportReport(messageId, authorId); } catch (XTAWSTechnicalProblemException | PermissionDeniedException | InvalidMessageIDException | RuntimeException e) { - throw new ClientRuntimeException( + throw new XtaClientRuntimeException( "Failed to get transport report! (messageId: %s, reader: %s)".formatted(messageId, authorId.value()), e); } } diff --git a/src/main/java/de/ozgcloud/xta/client/core/XtaExceptionHandler.java b/src/main/java/de/ozgcloud/xta/client/core/XtaExceptionHandler.java index 1fe3570bbf546b71cba86cfe62dce73cd84d3033..a31641c1ada3c3743ec3500a731703948469f59c 100644 --- a/src/main/java/de/ozgcloud/xta/client/core/XtaExceptionHandler.java +++ b/src/main/java/de/ozgcloud/xta/client/core/XtaExceptionHandler.java @@ -4,7 +4,7 @@ import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; -import de.ozgcloud.xta.client.exception.ClientRuntimeException; +import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import de.ozgcloud.xta.client.exception.XtaClientException; import genv3.de.xoev.transport.xta.x211.ExceptionType; import lombok.Builder; @@ -17,13 +17,13 @@ public class XtaExceptionHandler { static final String UNEXPECTED_ERROR_MESSAGE = "An unexpected error occurred. Please report this to the xta-client maintainers."; public XtaClientException deriveXtaClientException(RuntimeException exception) { - if (exception instanceof ClientRuntimeException) { - return deriveXtaClientExceptionFromClientRuntimeException((ClientRuntimeException) exception); + if (exception instanceof XtaClientRuntimeException xtaClientRuntimeException) { + return deriveXtaClientExceptionFromClientRuntimeException(xtaClientRuntimeException); } return new XtaClientException(UNEXPECTED_ERROR_MESSAGE, exception); } - XtaClientException deriveXtaClientExceptionFromClientRuntimeException(ClientRuntimeException exception) { + XtaClientException deriveXtaClientExceptionFromClientRuntimeException(XtaClientRuntimeException exception) { var cause = exception.getCause(); var detailMessageLines = getDetailLines(cause); var message = Stream.concat( diff --git a/src/main/java/de/ozgcloud/xta/client/exception/ClientRuntimeException.java b/src/main/java/de/ozgcloud/xta/client/exception/ClientRuntimeException.java deleted file mode 100644 index d2e32e5d824986c9cfc1f6a66221e7cb88c491b4..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/xta/client/exception/ClientRuntimeException.java +++ /dev/null @@ -1,12 +0,0 @@ -package de.ozgcloud.xta.client.exception; - -public class ClientRuntimeException extends RuntimeException { - - public ClientRuntimeException(String message) { - super(message); - } - - public ClientRuntimeException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/src/main/java/de/ozgcloud/xta/client/exception/XtaClientRuntimeException.java b/src/main/java/de/ozgcloud/xta/client/exception/XtaClientRuntimeException.java new file mode 100644 index 0000000000000000000000000000000000000000..9c7d4b89b154d0d76a18d9a00044413fa911f816 --- /dev/null +++ b/src/main/java/de/ozgcloud/xta/client/exception/XtaClientRuntimeException.java @@ -0,0 +1,12 @@ +package de.ozgcloud.xta.client.exception; + +public class XtaClientRuntimeException extends RuntimeException { + + public XtaClientRuntimeException(String message) { + super(message); + } + + public XtaClientRuntimeException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java b/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java index aedd99a4886ae932f5549f4b75158d254bcb87e7..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,54 +215,12 @@ class XtaClientITCase { ); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor( + .haveExactlyClosedStatusFor( messageIdBySendIndex(0), messageIdBySendIndex(1), messageIdBySendIndex(2) ); } - @DisplayName("should close messages only if no exception occurs during processing, with no exception for author2") - @Test - void shouldCloseMessagesOnlyIfNoExceptionOccursDuringProcessingWithNoExceptionForAuthor2() { - setupClientWithIdentifiers(List.of(READER_CLIENT_IDENTIFIER1, READER_CLIENT_IDENTIFIER2, READER_CLIENT_IDENTIFIER3)); - processMessageDummy = message -> throwRuntimeExceptionExceptForAuthorIdentifier(message, AUTHOR_CLIENT_IDENTIFIER2); - - var transportReports = fetchMessages(); - - if (hasLogLineContaining(NO_MESSAGE_CLOSED_WARNING)) { - // The first listing for reader2 contained sendMessages.get(1) and sendMessages.get(2). - // Since no messages have been closed for this listing, no second listing for reader2 is attempted. - // Therefore, sendMessages.get(3) was not fetched. - - assertThat(supportCheckedMetadataItems).hasSize(1 + 2 + 2); - assertThatMessages(processedMessages).containExactlyInAnyOrder( - sendMessages.get(0), - sendMessages.get(1), sendMessages.get(2), - sendMessages.get(4), sendMessages.get(5) - ); - assertThatTransportReports(transportReports) - .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor( - messageIdBySendIndex(4) - ); - } else { - // The first listing for reader2 contained sendMessages.get(3). - - assertThat(supportCheckedMetadataItems).hasSize(1 + 3 + 2); - assertThatMessages(processedMessages).containExactlyInAnyOrder( - sendMessages.get(0), - sendMessages.get(1), sendMessages.get(2), sendMessages.get(3), - sendMessages.get(4), sendMessages.get(5) - ); - assertThatTransportReports(transportReports) - .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor( - messageIdBySendIndex(3), - messageIdBySendIndex(4) - ); - } - } - @DisplayName("should close messages only if no exception occurs during processing, with no exception for author3") @Test void shouldCloseMessagesOnlyIfNoExceptionOccursDuringProcessingWithNoExceptionForAuthor3() { @@ -279,7 +238,7 @@ class XtaClientITCase { ); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor( + .haveExactlyClosedStatusFor( messageIdBySendIndex(5) ); } @@ -305,33 +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)); - } - - @DisplayName("should process messages only if supported, with support for author2") - @Test - void shouldProcessMessagesOnlyIfSupportedWithSupportForAuthor2() { - setupClientWithIdentifiers(List.of(READER_CLIENT_IDENTIFIER1, READER_CLIENT_IDENTIFIER2, READER_CLIENT_IDENTIFIER3)); - isSupportedDummy = metaData -> metaData.authorIdentifier().value().equals(AUTHOR_CLIENT_IDENTIFIER2.value()); - - var transportReports = fetchMessages(); - - if (hasLogLineContaining(NO_MESSAGE_CLOSED_WARNING)) { - // Case: sendMessages.get(3) was not fetched. - assertThat(supportCheckedMetadataItems).hasSize(1 + 2 + 2); - assertThatMessages(processedMessages).containExactlyInAnyOrder(sendMessages.get(4)); - assertThatTransportReports(transportReports) - .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor(messageIdBySendIndex(4)); - } else { - // Case: sendMessages.get(3) was fetched. - assertThat(supportCheckedMetadataItems).hasSize(1 + 3 + 2); - assertThatMessages(processedMessages).containExactlyInAnyOrder(sendMessages.get(3), sendMessages.get(4)); - assertThatTransportReports(transportReports) - .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor(messageIdBySendIndex(3), messageIdBySendIndex(4)); - } - + .haveExactlyClosedStatusFor(messageIdBySendIndex(0), messageIdBySendIndex(1), messageIdBySendIndex(2)); } @DisplayName("should process messages only if supported, with support for author3") @@ -347,7 +280,7 @@ class XtaClientITCase { assertThatMessages(processedMessages).containExactlyInAnyOrder(sendMessages.get(5)); assertThatTransportReports(transportReports) .reportExactlyFor(processedMessages) - .haveExactlyGreenStatusFor(messageIdBySendIndex(5)); + .haveExactlyClosedStatusFor(messageIdBySendIndex(5)); } @SneakyThrows @@ -407,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/XtaClientTest.java b/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java index 6b4cba4aae4b457d21fbb58f380c053a9a0408ca..d5a5d38085709d72f8b82e36e7ee71dcfb495040 100644 --- a/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java +++ b/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java @@ -27,8 +27,7 @@ import org.mockito.Spy; import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.core.XtaClientService; import de.ozgcloud.xta.client.core.XtaExceptionHandler; -import de.ozgcloud.xta.client.exception.ClientRuntimeException; -import de.ozgcloud.xta.client.exception.XtaClientException; +import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import de.ozgcloud.xta.client.factory.ClientRuntimeExceptionTestFactory; import de.ozgcloud.xta.client.factory.XtaClientExceptionTestFactory; import de.ozgcloud.xta.client.factory.XtaMessageMetaDataListingTestFactory; @@ -677,7 +676,6 @@ class XtaClientTest { assertThat(result).isEqualTo(transportReport); } - @DisplayName("should throw checked exception on runtime exception") @Test @SneakyThrows @@ -755,10 +753,11 @@ class XtaClientTest { @DisplayName("should throw exception if service not available") @Test void shouldThrowExceptionIfServiceNotAvailable() { + var metaData = message.metaData(); doReturn(false).when(service).lookupService(message.metaData()); - assertThatThrownBy(() -> client.throwExceptionIfServiceNotAvailable(message.metaData())) - .isInstanceOf(ClientRuntimeException.class); + assertThatThrownBy(() -> client.throwExceptionIfServiceNotAvailable(metaData)) + .isInstanceOf(XtaClientRuntimeException.class); } } @@ -782,7 +781,7 @@ class XtaClientTest { doReturn(false).when(service).checkAccountActive(AUTHOR_IDENTIFIER); assertThatThrownBy(() -> client.throwExceptionIfAccountInactive(AUTHOR_IDENTIFIER)) - .isInstanceOf(ClientRuntimeException.class); + .isInstanceOf(XtaClientRuntimeException.class); } } diff --git a/src/test/java/de/ozgcloud/xta/client/core/XtaClientServiceTest.java b/src/test/java/de/ozgcloud/xta/client/core/XtaClientServiceTest.java index 9ef4b29191c8bff65505dd2f4edbe4d824b42dbb..44f5255784cdd6308a28dc908641fdefa0790d94 100644 --- a/src/test/java/de/ozgcloud/xta/client/core/XtaClientServiceTest.java +++ b/src/test/java/de/ozgcloud/xta/client/core/XtaClientServiceTest.java @@ -19,7 +19,7 @@ import org.mockito.Mock; import org.mockito.Spy; import de.ozgcloud.xta.client.config.XtaClientConfig; -import de.ozgcloud.xta.client.exception.ClientRuntimeException; +import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import de.ozgcloud.xta.client.factory.XtaMessageMetaDataListingTestFactory; import de.ozgcloud.xta.client.factory.XtaMessageMetaDataTestFactory; import de.ozgcloud.xta.client.factory.XtaMessageTestFactory; @@ -53,7 +53,7 @@ class XtaClientServiceTest { class TestGetTransportReport { @Mock - private ClientRuntimeException exception; + private XtaClientRuntimeException exception; @DisplayName("should return") @Test @@ -243,7 +243,7 @@ class XtaClientServiceTest { doThrow(technicalException).when(wrapper).checkAccountActive(any()); assertThatThrownBy(this::checkAccountActive) - .isInstanceOf(ClientRuntimeException.class) + .isInstanceOf(XtaClientRuntimeException.class) .hasCause(technicalException); } @@ -295,7 +295,7 @@ class XtaClientServiceTest { doThrow(exception).when(wrapper).sendMessage(message); assertThatThrownBy(this::sendMessage) - .isInstanceOf(ClientRuntimeException.class) + .isInstanceOf(XtaClientRuntimeException.class) .hasCause(exception); } @@ -333,7 +333,7 @@ class XtaClientServiceTest { doThrow(exception).when(wrapper).createMessageId(AUTHOR_IDENTIFIER); assertThatThrownBy(() -> service.getXtaMessageWithMessageId(message)) - .isInstanceOf(ClientRuntimeException.class) + .isInstanceOf(XtaClientRuntimeException.class) .hasCause(exception); } } @@ -362,7 +362,7 @@ class XtaClientServiceTest { when(wrapper.getTransportReport(MESSAGE_ID, AUTHOR_IDENTIFIER)).thenThrow(exception); assertThatThrownBy(() -> service.getTransportReportOrThrowException(messageMetaData)) - .isInstanceOf(ClientRuntimeException.class) + .isInstanceOf(XtaClientRuntimeException.class) .hasCause(exception); } } diff --git a/src/test/java/de/ozgcloud/xta/client/core/XtaExceptionHandlerTest.java b/src/test/java/de/ozgcloud/xta/client/core/XtaExceptionHandlerTest.java index df6b0a203b80cb29ea12bd4f8613b7c831def4e1..be02999134d1f2003672d7e256a04fe35be9af8b 100644 --- a/src/test/java/de/ozgcloud/xta/client/core/XtaExceptionHandlerTest.java +++ b/src/test/java/de/ozgcloud/xta/client/core/XtaExceptionHandlerTest.java @@ -15,7 +15,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import de.ozgcloud.xta.client.exception.ClientRuntimeException; +import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import de.ozgcloud.xta.client.exception.XtaClientException; import de.ozgcloud.xta.client.factory.ClientRuntimeExceptionTestFactory; import genv3.de.xoev.transport.xta.x211.PermissionDeniedException; @@ -26,7 +26,7 @@ class XtaExceptionHandlerTest { @Spy XtaExceptionHandler exceptionHandler; - private ClientRuntimeException exception; + private XtaClientRuntimeException exception; @BeforeEach void setUp() { @@ -40,9 +40,9 @@ class XtaExceptionHandlerTest { @Mock private XtaClientException derivedClientException; - @DisplayName("should derive xta client exception from client runtime exception") + @DisplayName("should derive xta client exception from xta client runtime exception") @Test - void shouldDeriveXtaClientExceptionFromClientRuntimeException() { + void shouldDeriveXtaClientExceptionFromXtaClientRuntimeException() { doReturn(derivedClientException).when(exceptionHandler).deriveXtaClientExceptionFromClientRuntimeException(exception); var result = exceptionHandler.deriveXtaClientException(exception); @@ -50,9 +50,9 @@ class XtaExceptionHandlerTest { assertThat(result).isEqualTo(derivedClientException); } - @DisplayName("without client runtime exception instance") + @DisplayName("without xta client runtime exception instance") @Nested - class TestWithoutClientRuntimeExceptionInstance { + class TestWithoutXtaClientRuntimeExceptionInstance { @Mock private RuntimeException runtimeException; @@ -75,16 +75,16 @@ class XtaExceptionHandlerTest { } } - @DisplayName("derive xta client exception from client runtime exception") + @DisplayName("derive xta client exception from xta client runtime exception") @Nested - class TestDeriveXtaClientExceptionFromClientRuntimeException { + class TestDeriveXtaClientExceptionFromXtaClientRuntimeException { @DisplayName("should keep message if no cause") @Test void shouldKeepMessageIfNoCause() { - var exception = new ClientRuntimeException(MESSAGE); + var exceptionWithoutCause = new XtaClientRuntimeException(MESSAGE); - var result = exceptionHandler.deriveXtaClientExceptionFromClientRuntimeException(exception); + var result = exceptionHandler.deriveXtaClientExceptionFromClientRuntimeException(exceptionWithoutCause); assertThat(result.getMessage()).isEqualTo(MESSAGE); } @@ -93,9 +93,9 @@ class XtaExceptionHandlerTest { @Test void shouldKeepMessageIfCauseIsNotAnXtaException() { var cause = new Exception(); - var exception = new ClientRuntimeException(MESSAGE, cause); + var exceptionWithNoXtaCause = new XtaClientRuntimeException(MESSAGE, cause); - var result = exceptionHandler.deriveXtaClientExceptionFromClientRuntimeException(exception); + var result = exceptionHandler.deriveXtaClientExceptionFromClientRuntimeException(exceptionWithNoXtaCause); assertThat(result.getMessage()).isEqualTo(MESSAGE); 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 9ecd3fbcbd073a011707d78f12c931a48933b873..0432d3445846171a7908c47377e0d1b32baa48be 100644 --- a/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java +++ b/src/test/java/de/ozgcloud/xta/client/extension/XtaServerSetupExtensionTestUtil.java @@ -5,16 +5,16 @@ 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.exception.ClientRuntimeException; +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; import de.ozgcloud.xta.client.model.XtaMessage; @@ -76,19 +76,13 @@ 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 { log.info("Sending from author {} to reader {}.", message.metaData().authorIdentifier(), message.metaData().readerIdentifier()); var transportReport = client.sendMessage(message); return transportReport.metaData().messageId(); - } catch (ClientRuntimeException e) { + } catch (XtaClientRuntimeException e) { var cause = e.getCause(); if (cause instanceof ParameterIsNotValidException) { logCodeFehlerNummer(((ParameterIsNotValidException) cause).getFaultInfo().getErrorCode()); @@ -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!"); + log.error("TransportReports do not have excepted closed 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() { diff --git a/src/test/java/de/ozgcloud/xta/client/factory/ClientRuntimeExceptionTestFactory.java b/src/test/java/de/ozgcloud/xta/client/factory/ClientRuntimeExceptionTestFactory.java index bfa3c0f97bda2ecb5b68821c425571a5f8809f81..7b2d14bd1bad08067e1b6a1212d05717c08ab754 100644 --- a/src/test/java/de/ozgcloud/xta/client/factory/ClientRuntimeExceptionTestFactory.java +++ b/src/test/java/de/ozgcloud/xta/client/factory/ClientRuntimeExceptionTestFactory.java @@ -1,6 +1,6 @@ package de.ozgcloud.xta.client.factory; -import de.ozgcloud.xta.client.exception.ClientRuntimeException; +import de.ozgcloud.xta.client.exception.XtaClientRuntimeException; import genv3.de.xoev.transport.xta.x211.CodeFehlernummer; import genv3.de.xoev.transport.xta.x211.PermissionDeniedException; import genv3.de.xoev.transport.xta.x211.PermissionDeniedExceptionType; @@ -12,8 +12,8 @@ public class ClientRuntimeExceptionTestFactory { public static final String CAUSE_CODE = "cause code"; public static final String CAUSE_NAME = "cause name"; - public static ClientRuntimeException create() { - return new ClientRuntimeException(MESSAGE, createPermissionDeniedException()); + public static XtaClientRuntimeException create() { + return new XtaClientRuntimeException(MESSAGE, createPermissionDeniedException()); } private static PermissionDeniedException createPermissionDeniedException() {