Testcontainers speedup and stabilization (#220)
* - moved testcontainers lifecycle control back to singleton - changed kafka connect container wait strategy from logs to http * refactoring * reduced startup timeout to 5 minutes
This commit is contained in:
parent
73f8991517
commit
be96bbc381
2 changed files with 26 additions and 31 deletions
|
@ -4,18 +4,13 @@ import org.jetbrains.annotations.NotNull;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.context.ApplicationContextInitializer;
|
import org.springframework.context.ApplicationContextInitializer;
|
||||||
import org.springframework.context.ApplicationListener;
|
|
||||||
import org.springframework.context.ConfigurableApplicationContext;
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
import org.springframework.context.event.ContextClosedEvent;
|
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
import org.testcontainers.containers.KafkaContainer;
|
import org.testcontainers.containers.KafkaContainer;
|
||||||
import org.testcontainers.containers.Network;
|
import org.testcontainers.containers.Network;
|
||||||
import org.testcontainers.containers.wait.strategy.Wait;
|
|
||||||
import org.testcontainers.utility.DockerImageName;
|
import org.testcontainers.utility.DockerImageName;
|
||||||
|
|
||||||
import java.time.Duration;
|
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
@ActiveProfiles("test")
|
@ActiveProfiles("test")
|
||||||
|
@ -23,29 +18,29 @@ public abstract class AbstractBaseTest {
|
||||||
public static String LOCAL = "local";
|
public static String LOCAL = "local";
|
||||||
public static String SECOND_LOCAL = "secondLocal";
|
public static String SECOND_LOCAL = "secondLocal";
|
||||||
|
|
||||||
public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
private static final String CONFLUENT_PLATFORM_VERSION = "5.2.1";
|
||||||
public final KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:5.2.1"))
|
|
||||||
|
public static final KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka").withTag(CONFLUENT_PLATFORM_VERSION))
|
||||||
.withNetwork(Network.SHARED);
|
.withNetwork(Network.SHARED);
|
||||||
|
|
||||||
public final SchemaRegistryContainer schemaRegistry = new SchemaRegistryContainer("5.2.1")
|
public static final SchemaRegistryContainer schemaRegistry = new SchemaRegistryContainer(CONFLUENT_PLATFORM_VERSION)
|
||||||
.withKafka(kafka)
|
.withKafka(kafka)
|
||||||
.dependsOn(kafka);
|
.dependsOn(kafka);
|
||||||
|
|
||||||
public final KafkaConnectContainer kafkaConnect = new KafkaConnectContainer("5.2.1")
|
public static final KafkaConnectContainer kafkaConnect = new KafkaConnectContainer(CONFLUENT_PLATFORM_VERSION)
|
||||||
.withKafka(kafka)
|
.withKafka(kafka)
|
||||||
.waitingFor(
|
|
||||||
Wait.forLogMessage(".*Finished starting connectors and tasks.*", 1)
|
|
||||||
)
|
|
||||||
.dependsOn(kafka)
|
.dependsOn(kafka)
|
||||||
.dependsOn(schemaRegistry)
|
.dependsOn(schemaRegistry);
|
||||||
.withStartupTimeout(Duration.ofMinutes(15));
|
|
||||||
|
|
||||||
@Override
|
static {
|
||||||
public void initialize(@NotNull ConfigurableApplicationContext context) {
|
|
||||||
kafka.start();
|
kafka.start();
|
||||||
schemaRegistry.start();
|
schemaRegistry.start();
|
||||||
kafkaConnect.start();
|
kafkaConnect.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||||
|
@Override
|
||||||
|
public void initialize(@NotNull ConfigurableApplicationContext context) {
|
||||||
System.setProperty("kafka.clusters.0.name", LOCAL);
|
System.setProperty("kafka.clusters.0.name", LOCAL);
|
||||||
System.setProperty("kafka.clusters.0.bootstrapServers", kafka.getBootstrapServers());
|
System.setProperty("kafka.clusters.0.bootstrapServers", kafka.getBootstrapServers());
|
||||||
System.setProperty("kafka.clusters.0.schemaRegistry", schemaRegistry.getTarget());
|
System.setProperty("kafka.clusters.0.schemaRegistry", schemaRegistry.getTarget());
|
||||||
|
@ -58,12 +53,6 @@ public abstract class AbstractBaseTest {
|
||||||
System.setProperty("kafka.clusters.1.schemaRegistry", schemaRegistry.getTarget());
|
System.setProperty("kafka.clusters.1.schemaRegistry", schemaRegistry.getTarget());
|
||||||
System.setProperty("kafka.clusters.1.kafkaConnect.0.name", "kafka-connect");
|
System.setProperty("kafka.clusters.1.kafkaConnect.0.name", "kafka-connect");
|
||||||
System.setProperty("kafka.clusters.1.kafkaConnect.0.address", kafkaConnect.getTarget());
|
System.setProperty("kafka.clusters.1.kafkaConnect.0.address", kafkaConnect.getTarget());
|
||||||
|
|
||||||
context.addApplicationListener((ApplicationListener<ContextClosedEvent>) event -> {
|
|
||||||
kafkaConnect.close();
|
|
||||||
schemaRegistry.close();
|
|
||||||
kafka.close();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,12 +3,18 @@ package com.provectus.kafka.ui;
|
||||||
import org.testcontainers.containers.GenericContainer;
|
import org.testcontainers.containers.GenericContainer;
|
||||||
import org.testcontainers.containers.KafkaContainer;
|
import org.testcontainers.containers.KafkaContainer;
|
||||||
import org.testcontainers.containers.Network;
|
import org.testcontainers.containers.Network;
|
||||||
|
import org.testcontainers.containers.wait.strategy.Wait;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
|
||||||
public class KafkaConnectContainer extends GenericContainer<KafkaConnectContainer> {
|
public class KafkaConnectContainer extends GenericContainer<KafkaConnectContainer> {
|
||||||
private static final int CONNECT_PORT = 8083;
|
private static final int CONNECT_PORT = 8083;
|
||||||
|
|
||||||
public KafkaConnectContainer(String version) {
|
public KafkaConnectContainer(String version) {
|
||||||
super("confluentinc/cp-kafka-connect:" + version);
|
super("confluentinc/cp-kafka-connect:" + version);
|
||||||
|
addExposedPort(CONNECT_PORT);
|
||||||
|
waitStrategy = Wait.forHttp("/")
|
||||||
|
.withStartupTimeout(Duration.ofMinutes(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue