From be96bbc3813977ef6f6e20628b92c3a33c748c15 Mon Sep 17 00:00:00 2001 From: Ramazan Yapparov Date: Wed, 3 Mar 2021 13:08:51 +0300 Subject: [PATCH] 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 --- .../provectus/kafka/ui/AbstractBaseTest.java | 51 ++++++++----------- .../kafka/ui/KafkaConnectContainer.java | 6 +++ 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/kafka-ui-api/src/test/java/com/provectus/kafka/ui/AbstractBaseTest.java b/kafka-ui-api/src/test/java/com/provectus/kafka/ui/AbstractBaseTest.java index e5dbbf6366..4065b4006d 100644 --- a/kafka-ui-api/src/test/java/com/provectus/kafka/ui/AbstractBaseTest.java +++ b/kafka-ui-api/src/test/java/com/provectus/kafka/ui/AbstractBaseTest.java @@ -4,18 +4,13 @@ import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ApplicationListener; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.event.ContextClosedEvent; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.testcontainers.containers.KafkaContainer; import org.testcontainers.containers.Network; -import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.utility.DockerImageName; -import java.time.Duration; - @ExtendWith(SpringExtension.class) @SpringBootTest @ActiveProfiles("test") @@ -23,29 +18,29 @@ public abstract class AbstractBaseTest { public static String LOCAL = "local"; public static String SECOND_LOCAL = "secondLocal"; + private static final String CONFLUENT_PLATFORM_VERSION = "5.2.1"; + + public static final KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka").withTag(CONFLUENT_PLATFORM_VERSION)) + .withNetwork(Network.SHARED); + + public static final SchemaRegistryContainer schemaRegistry = new SchemaRegistryContainer(CONFLUENT_PLATFORM_VERSION) + .withKafka(kafka) + .dependsOn(kafka); + + public static final KafkaConnectContainer kafkaConnect = new KafkaConnectContainer(CONFLUENT_PLATFORM_VERSION) + .withKafka(kafka) + .dependsOn(kafka) + .dependsOn(schemaRegistry); + + static { + kafka.start(); + schemaRegistry.start(); + kafkaConnect.start(); + } + public static class Initializer implements ApplicationContextInitializer { - public final KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:5.2.1")) - .withNetwork(Network.SHARED); - - public final SchemaRegistryContainer schemaRegistry = new SchemaRegistryContainer("5.2.1") - .withKafka(kafka) - .dependsOn(kafka); - - public final KafkaConnectContainer kafkaConnect = new KafkaConnectContainer("5.2.1") - .withKafka(kafka) - .waitingFor( - Wait.forLogMessage(".*Finished starting connectors and tasks.*", 1) - ) - .dependsOn(kafka) - .dependsOn(schemaRegistry) - .withStartupTimeout(Duration.ofMinutes(15)); - @Override public void initialize(@NotNull ConfigurableApplicationContext context) { - kafka.start(); - schemaRegistry.start(); - kafkaConnect.start(); - System.setProperty("kafka.clusters.0.name", LOCAL); System.setProperty("kafka.clusters.0.bootstrapServers", kafka.getBootstrapServers()); 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.kafkaConnect.0.name", "kafka-connect"); System.setProperty("kafka.clusters.1.kafkaConnect.0.address", kafkaConnect.getTarget()); - - context.addApplicationListener((ApplicationListener) event -> { - kafkaConnect.close(); - schemaRegistry.close(); - kafka.close(); - }); } } } diff --git a/kafka-ui-api/src/test/java/com/provectus/kafka/ui/KafkaConnectContainer.java b/kafka-ui-api/src/test/java/com/provectus/kafka/ui/KafkaConnectContainer.java index 7926ca7c7e..06cdaa2a73 100644 --- a/kafka-ui-api/src/test/java/com/provectus/kafka/ui/KafkaConnectContainer.java +++ b/kafka-ui-api/src/test/java/com/provectus/kafka/ui/KafkaConnectContainer.java @@ -3,12 +3,18 @@ package com.provectus.kafka.ui; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.KafkaContainer; import org.testcontainers.containers.Network; +import org.testcontainers.containers.wait.strategy.Wait; + +import java.time.Duration; public class KafkaConnectContainer extends GenericContainer { private static final int CONNECT_PORT = 8083; public KafkaConnectContainer(String version) { super("confluentinc/cp-kafka-connect:" + version); + addExposedPort(CONNECT_PORT); + waitStrategy = Wait.forHttp("/") + .withStartupTimeout(Duration.ofMinutes(5)); }