Select Git revision
XtaDevServerSetupExtension.java
-
Jan Zickermann authoredJan Zickermann authored
XtaDevServerSetupExtension.java 3.81 KiB
package de.ozgcloud.xta.client;
import java.io.File;
import java.util.List;
import java.util.Objects;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import com.google.common.io.Files;
import de.ozgcloud.xta.client.config.XtaClientConfig;
import de.ozgcloud.xta.client.core.WrappedXtaService;
import de.ozgcloud.xta.client.model.Identifier;
import de.ozgcloud.xta.client.model.XtaMessageMetaData;
import de.ozgcloud.xta.client.model.XtaMessageMetaDataTestFactory;
import de.ozgcloud.xta.client.model.XtaMessageTestFactory;
import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidException;
import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@Getter
@Setter
@Slf4j
public class XtaDevServerSetupExtension implements BeforeAllCallback, BeforeEachCallback {
private XtaClient client;
private WrappedXtaService service;
private XtaClientConfig config;
private XtaClientFactory clientFactory;
static final String BASE_URL = "https://li33-0005.dp.dsecurecloud.de/MB_XTA-WS/XTA210";
static final String CLIENT_IDENTIFIER1 = "dp:012345678910_XtaClientITCase1";
static final String CLIENT_IDENTIFIER2 = "dp:012345678910_XtaClientITCase2";
@Override
@SneakyThrows
public void beforeAll(ExtensionContext context) {
client = setupClient();
service = client.getService();
}
@SneakyThrows
XtaClient setupClient() {
var clientCertKeystorePath = getEnvVar("KOP_SH_KIEL_DEV_PATH");
var clientCertKeystorePassword = getEnvVar("KOP_SH_KIEL_DEV_PASSWORD");
var clientCertKeyStore = XtaClientConfig.KeyStore.builder()
.content(readBytesFromFile(clientCertKeystorePath))
.type("PKCS12")
.password(clientCertKeystorePassword.toCharArray())
.build();
config = XtaClientConfig.builder()
.clientIdentifiers(List.of(CLIENT_IDENTIFIER1, CLIENT_IDENTIFIER2))
.managementServiceUrl(BASE_URL + "managementPort.svc")
.sendServiceUrl(BASE_URL + "sendPort.svc")
.msgBoxServiceUrl(BASE_URL + "msgBoxPort.svc")
.clientCertKeystore(clientCertKeyStore)
.logSoapRequests(true)
.logSoapResponses(true)
.build();
clientFactory = XtaClientFactory.from(config);
return clientFactory.create();
}
private String getEnvVar(String name) {
return Objects.requireNonNull(System.getenv(name), "Environment variable " + name + " is required!");
}
@Override
@SneakyThrows
public void beforeEach(ExtensionContext context) {
closeAllMessages(clientId2());
}
@SneakyThrows
public void sendTestMessageToClient2() {
sendTestMessageToClient2(clientId(), clientId2());
}
@SneakyThrows
void sendTestMessageToClient2(Identifier author, Identifier reader) {
var messageId = service.createMessageId(author);
try {
service.sendMessage(XtaMessageTestFactory.createBuilder()
.metaData(XtaMessageMetaDataTestFactory.createBuilder()
.authorIdentifier(author)
.readerIdentifier(reader)
.messageId(messageId)
.build())
.build()
);
} catch (ParameterIsNotValidException e) {
log.error("Failed to send test message to client2: {}", e.getFaultInfo().getErrorCode().getName());
throw e;
}
}
@SneakyThrows
private void closeAllMessages(Identifier clientId) {
var result = service.getStatusList(clientId, 100);
var messageIds = result.messages().stream()
.map(XtaMessageMetaData::messageId)
.toList();
for (var messageId : messageIds) {
service.close(messageId, result.requestId(), clientId);
}
}
@SneakyThrows
private static byte[] readBytesFromFile(String path) {
return Files.toByteArray(new File(path));
}
private Identifier clientId() {
return client.deriveIdentifier(CLIENT_IDENTIFIER1);
}
private Identifier clientId2() {
return client.deriveIdentifier(CLIENT_IDENTIFIER2);
}
}