فهرست منبع

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
Ramazan Yapparov 4 سال پیش
والد
کامیت
be96bbc381

+ 18 - 29
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";
 
-    public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
-        public final KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:5.2.1"))
-                .withNetwork(Network.SHARED);
+    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 final SchemaRegistryContainer schemaRegistry = new SchemaRegistryContainer("5.2.1")
-                .withKafka(kafka)
-                .dependsOn(kafka);
+    public static final KafkaConnectContainer kafkaConnect = new KafkaConnectContainer(CONFLUENT_PLATFORM_VERSION)
+            .withKafka(kafka)
+            .dependsOn(kafka)
+            .dependsOn(schemaRegistry);
 
-        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));
+    static {
+        kafka.start();
+        schemaRegistry.start();
+        kafkaConnect.start();
+    }
 
+    public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
         @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<ContextClosedEvent>) event -> {
-                kafkaConnect.close();
-                schemaRegistry.close();
-                kafka.close();
-            });
         }
     }
 }

+ 6 - 0
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<KafkaConnectContainer> {
     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));
     }