Select Git revision
validation.py
XtaClientRemoteITCase.java 6.97 KiB
package de.ozgcloud.xta.client;
import static de.ozgcloud.xta.client.extension.XtaServerSetupExtensionTestUtil.*;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import de.ozgcloud.xta.client.extension.XtaMessageExampleLoader;
import de.ozgcloud.xta.client.extension.XtaRemoteServerSetupExtension;
import de.ozgcloud.xta.client.model.XtaFile;
import de.ozgcloud.xta.client.model.XtaMessage;
import de.ozgcloud.xta.client.model.XtaMessageStatus;
import de.ozgcloud.xta.client.xdomea.XdomeaXtaMessageCreatorFactory;
import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
import genv3.de.xoev.transport.xta.x211.MessageSchemaViolationException;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@EnabledIfEnvironmentVariable(
named = "KOP_SH_KIEL_DEV_PATH",
matches = ".+",
disabledReason =
"This test requires the path KOP_SH_KIEL_{DEV,TEST}_PATH and password KOP_SH_KIEL_{DEV,TEST}_PASSWORD of KOP_SH_KIEL_DEV.p12 and OZG-CLOUD_SH_KIEL_TEST.pfx. "
+ "Additionally, the endpoint of the DEV-xta-server at li33-0005.dp.dsecurecloud.de must be reachable."
)
class XtaClientRemoteITCase {
@RegisterExtension
static final XtaRemoteServerSetupExtension XTA_REMOTE_SERVER_SETUP_EXTENSION = new XtaRemoteServerSetupExtension();
private XtaClient authorClient;
private XtaClient readerClient;
@BeforeEach
@SneakyThrows
void setup() {
authorClient = XTA_REMOTE_SERVER_SETUP_EXTENSION.getAuthorClient();
readerClient = XTA_REMOTE_SERVER_SETUP_EXTENSION.getReaderClient();
}
@DisplayName("get messages metadata")
@Nested
class TestGetMessagesMetadata {
@DisplayName("with no messages")
@Nested
class TestWithNoMessages {
@DisplayName("should return zero pending messages")
@Test
@SneakyThrows
void shouldReturnZeroPendingMessages() {
var result = readerClient.getMessagesMetadata(READER_CLIENT_IDENTIFIER1.value());
assertThat(result.pendingMessageCount()).isZero();
}
}
@DisplayName("with one message")
@Nested
class TestWithOneMessage {
@BeforeEach
void setup() {
XTA_REMOTE_SERVER_SETUP_EXTENSION.sendTestMessage();
}
@DisplayName("should return one pending message for client")
@Test
@SneakyThrows
void shouldReturnOnePendingMessageClient() {
var result = readerClient.getMessagesMetadata(READER_CLIENT_IDENTIFIER1.value());
assertThat(result.pendingMessageCount()).isOne();
}
@DisplayName("should return no pending message for another client")
@Test
@SneakyThrows
void shouldReturnNoPendingMessageForAnotherClient() {
var result = readerClient.getMessagesMetadata(READER_CLIENT_IDENTIFIER2.value());
assertThat(result.pendingMessageCount()).isZero();
}
}
}
@DisplayName("get message")
@Nested
class TestGetMessage {
private String messageId;
private XtaMessage message;
@BeforeEach
@SneakyThrows
void setup() {
var messageConfig = XtaMessageExampleLoader.MessageExampleConfig.builder()
.messageLabel("dfoerdermittel")
.reader(READER_CLIENT_IDENTIFIER1)
.author(AUTHOR_CLIENT_IDENTIFIER)
.build();
message = XtaMessageExampleLoader.load(messageConfig);
messageId = XTA_REMOTE_SERVER_SETUP_EXTENSION.sendTestMessage(message);
}
@DisplayName("should return message with green status")
@Test
@SneakyThrows
void shouldReturnMessageWithGreenStatus() {
var result = readerClient.getMessage(READER_CLIENT_IDENTIFIER1.value(), messageId);
assertThat(result.message().metaData().messageId()).isEqualTo(messageId);
assertThat(result.transportReport().metaData().messageId()).isEqualTo(messageId);
assertThat(result.transportReport().status()).isEqualTo(XtaMessageStatus.GREEN);
}
@DisplayName("should return message with correct message file content")
@Test
@SneakyThrows
void shouldReturnMessageWithCorrectMessageFileContent() {
var messageContent = extractMessageFileContent(message);
var result = readerClient.getMessage(READER_CLIENT_IDENTIFIER1.value(), messageId);
var resultContent = extractMessageFileContent(result.message());
assertThat(messageContent).isEqualTo(resultContent);
}
@DisplayName("should not show message id for a closed message in status list")
@Test
@SneakyThrows
void shouldNotShowMessageIdForClosedMessageInStatusList() {
assertThatNoException().isThrownBy(() -> readerClient.getMessage(READER_CLIENT_IDENTIFIER1.value(), messageId));
var metadataResult = readerClient.getMessagesMetadata(READER_CLIENT_IDENTIFIER1.value());
if (!metadataResult.messages().isEmpty()) {
assertThat(metadataResult.messages()).allMatch(metadata -> !messageId.equals(metadata.messageId()));
}
}
@DisplayName("should throw invalid message id exception for modified message id")
@Test
void shouldThrowInvalidMessageIdExceptionForModifiedMessageId() {
assertThatThrownBy(() -> readerClient.getMessage(READER_CLIENT_IDENTIFIER1.value(), messageId + "1"))
.isInstanceOf(InvalidMessageIDException.class);
}
@DisplayName("should throw invalid message id exception for other client")
@Test
void shouldThrowInvalidMessageIdExceptionForOtherClient() {
assertThatThrownBy(() -> readerClient.getMessage(READER_CLIENT_IDENTIFIER2.value(), messageId))
.isInstanceOf(InvalidMessageIDException.class);
}
}
@DisplayName("send message")
@Nested
class TestSendMessage {
@AfterEach
@SneakyThrows
void afterEach() {
closeAllMessages(readerClient, READER_CLIENT_IDENTIFIER1);
}
@DisplayName("should return transport report with open status")
@SneakyThrows
@ParameterizedTest
@ValueSource(strings = { "dfoerdermittel", "abgabe0401-kleiner-waffenschein" })
void shouldReturn(String messageLabel) {
XtaMessage xtaMessage = createXdomeaMessage(messageLabel);
try {
var result = authorClient.sendMessage(xtaMessage);
assertThat(result.status()).isEqualTo(XtaMessageStatus.OPEN);
} catch (MessageSchemaViolationException exception) {
log.error(exception.getFaultInfo().getErrorCode().toString(), exception);
fail(exception.getFaultInfo().getErrorCode().toString());
}
}
@SneakyThrows
private static XtaMessage createXdomeaMessage(
String messageLabel) {
var creator = XdomeaXtaMessageCreatorFactory
.createInstance()
.create();
return creator.createMessage(loadMessageFile(messageLabel));
}
private static XtaFile loadMessageFile(String messageLabel) {
var message = XtaMessageExampleLoader.load(XtaMessageExampleLoader.MessageExampleConfig.builder()
.messageLabel(messageLabel)
.author(AUTHOR_CLIENT_IDENTIFIER)
.reader(READER_CLIENT_IDENTIFIER1)
.build());
return message.messageFile();
}
}
}