diff --git a/README.md b/README.md
index 97d3d2b3..57142b5e 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,6 @@
```
postgres
-bitnami/kafka
apache/kafka
confluentinc/kafka
clickhouse/clickhouse-server
@@ -40,8 +39,6 @@ testcontainers:
postgresql:
tag: '17'
kafka:
- bitnami:
- tag: '3.8'
apache:
tag: '3.8.0'
confluent:
diff --git a/pom.xml b/pom.xml
index d92a0cce..89d9f6b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
jar
testcontainers-annotations
- 3.3.2
+ 4.0.0
testcontainers-annotations
testcontainers-annotations
@@ -39,7 +39,7 @@
- 2.0.9
+ 2.1.0
0.0.3
1.0.2
1.18.38
@@ -50,30 +50,30 @@
- org.junit
- junit-bom
- 5.12.2
+ org.testcontainers
+ testcontainers-bom
+ 2.0.2
pom
import
- org.testcontainers
- testcontainers-bom
- 1.21.0
+ org.springframework.boot
+ spring-boot-dependencies
+ 3.5.4
pom
import
- com.fasterxml.jackson
- jackson-bom
- 2.19.0
+ org.junit
+ junit-bom
+ 5.12.2
pom
import
- org.springframework.boot
- spring-boot-dependencies
- 3.5.4
+ com.fasterxml.jackson
+ jackson-bom
+ 2.19.0
pom
import
diff --git a/src/main/java/dev/vality/testcontainers/annotations/clickhouse/ClickhouseTestcontainerSingleton.java b/src/main/java/dev/vality/testcontainers/annotations/clickhouse/ClickhouseTestcontainerSingleton.java
index a5ce4945..290b2dcd 100644
--- a/src/main/java/dev/vality/testcontainers/annotations/clickhouse/ClickhouseTestcontainerSingleton.java
+++ b/src/main/java/dev/vality/testcontainers/annotations/clickhouse/ClickhouseTestcontainerSingleton.java
@@ -2,6 +2,7 @@
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -52,6 +53,7 @@
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith(ClickhouseTestcontainerExtension.class)
+@DirtiesContext
public @interface ClickhouseTestcontainerSingleton {
/**
diff --git a/src/main/java/dev/vality/testcontainers/annotations/kafka/BitnamiKafkaContainer.java b/src/main/java/dev/vality/testcontainers/annotations/kafka/BitnamiKafkaContainer.java
deleted file mode 100644
index 34356aae..00000000
--- a/src/main/java/dev/vality/testcontainers/annotations/kafka/BitnamiKafkaContainer.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package dev.vality.testcontainers.annotations.kafka;
-
-import lombok.extern.slf4j.Slf4j;
-import org.testcontainers.utility.DockerImageName;
-
-import java.util.List;
-
-import static dev.vality.testcontainers.annotations.util.SpringApplicationPropertiesLoader.loadDefaultLibraryProperty;
-
-@Slf4j
-public class BitnamiKafkaContainer extends org.testcontainers.kafka.BitnamiKafkaContainer
- implements KafkaContainerExtension {
-
- private static final String BITNAMI = "bitnami";
- private static final String KAFKA_IMAGE_NAME = BITNAMI + "/kafka";
- private static final String TAG_PROPERTY = "testcontainers.kafka." + BITNAMI + ".tag";
-
- public BitnamiKafkaContainer(List topics) {
- super(DockerImageName
- .parse(KAFKA_IMAGE_NAME)
- .withTag(loadDefaultLibraryProperty(TAG_PROPERTY)),
- topics);
- }
-}
diff --git a/src/main/java/dev/vality/testcontainers/annotations/kafka/KafkaTestcontainerFactory.java b/src/main/java/dev/vality/testcontainers/annotations/kafka/KafkaTestcontainerFactory.java
index cb0d96e2..528e1df3 100644
--- a/src/main/java/dev/vality/testcontainers/annotations/kafka/KafkaTestcontainerFactory.java
+++ b/src/main/java/dev/vality/testcontainers/annotations/kafka/KafkaTestcontainerFactory.java
@@ -44,11 +44,6 @@ private KafkaContainerExtension getOrCreateSingletonContainer(Provider provider,
private KafkaContainerExtension create(Provider provider, List topics) {
return switch (provider) {
- case BITNAMI -> {
- try (var container = new BitnamiKafkaContainer(topics)) {
- yield container;
- }
- }
case APACHE -> {
try (var container = new ApacheKafkaContainer(topics)) {
yield container;
diff --git a/src/main/java/dev/vality/testcontainers/annotations/kafka/KafkaTestcontainerSingleton.java b/src/main/java/dev/vality/testcontainers/annotations/kafka/KafkaTestcontainerSingleton.java
index 80874ffa..64631080 100644
--- a/src/main/java/dev/vality/testcontainers/annotations/kafka/KafkaTestcontainerSingleton.java
+++ b/src/main/java/dev/vality/testcontainers/annotations/kafka/KafkaTestcontainerSingleton.java
@@ -8,6 +8,7 @@
import org.apache.kafka.clients.admin.AdminClient;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -107,6 +108,7 @@
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith(KafkaTestcontainerExtension.class)
+@DirtiesContext
public @interface KafkaTestcontainerSingleton {
/**
diff --git a/src/main/java/dev/vality/testcontainers/annotations/kafka/constants/Provider.java b/src/main/java/dev/vality/testcontainers/annotations/kafka/constants/Provider.java
index 3e15c731..f0d00ebe 100644
--- a/src/main/java/dev/vality/testcontainers/annotations/kafka/constants/Provider.java
+++ b/src/main/java/dev/vality/testcontainers/annotations/kafka/constants/Provider.java
@@ -2,6 +2,5 @@
public enum Provider {
APACHE,
- BITNAMI,
CONFLUENT
}
diff --git a/src/main/java/dev/vality/testcontainers/annotations/minio/MinioTestcontainerSingleton.java b/src/main/java/dev/vality/testcontainers/annotations/minio/MinioTestcontainerSingleton.java
index 68cda350..cc2fb4f2 100644
--- a/src/main/java/dev/vality/testcontainers/annotations/minio/MinioTestcontainerSingleton.java
+++ b/src/main/java/dev/vality/testcontainers/annotations/minio/MinioTestcontainerSingleton.java
@@ -2,6 +2,7 @@
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -39,6 +40,7 @@
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith(MinioTestcontainerExtension.class)
+@DirtiesContext
public @interface MinioTestcontainerSingleton {
/**
diff --git a/src/main/java/dev/vality/testcontainers/annotations/opensearch/OpensearchTestcontainerSingleton.java b/src/main/java/dev/vality/testcontainers/annotations/opensearch/OpensearchTestcontainerSingleton.java
index 6e0f740c..b1ad863b 100644
--- a/src/main/java/dev/vality/testcontainers/annotations/opensearch/OpensearchTestcontainerSingleton.java
+++ b/src/main/java/dev/vality/testcontainers/annotations/opensearch/OpensearchTestcontainerSingleton.java
@@ -2,6 +2,7 @@
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -11,6 +12,7 @@
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith(OpensearchTestcontainerExtension.class)
+@DirtiesContext
public @interface OpensearchTestcontainerSingleton {
/**
diff --git a/src/main/java/dev/vality/testcontainers/annotations/postgresql/PostgresqlTestcontainerSingleton.java b/src/main/java/dev/vality/testcontainers/annotations/postgresql/PostgresqlTestcontainerSingleton.java
index a324b8d1..b09c5478 100644
--- a/src/main/java/dev/vality/testcontainers/annotations/postgresql/PostgresqlTestcontainerSingleton.java
+++ b/src/main/java/dev/vality/testcontainers/annotations/postgresql/PostgresqlTestcontainerSingleton.java
@@ -2,6 +2,7 @@
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -42,6 +43,7 @@
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith(PostgresqlTestcontainerExtension.class)
+@DirtiesContext
public @interface PostgresqlTestcontainerSingleton {
/**
diff --git a/src/main/java/dev/vality/testcontainers/annotations/util/ValuesGenerator.java b/src/main/java/dev/vality/testcontainers/annotations/util/ValuesGenerator.java
index 49329ec5..bab62029 100644
--- a/src/main/java/dev/vality/testcontainers/annotations/util/ValuesGenerator.java
+++ b/src/main/java/dev/vality/testcontainers/annotations/util/ValuesGenerator.java
@@ -3,7 +3,7 @@
import dev.vality.geck.common.util.TypeUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.testcontainers.shaded.org.apache.commons.io.IOUtils;
+import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
diff --git a/src/main/java/org/testcontainers/kafka/BitnamiKafkaContainer.java b/src/main/java/org/testcontainers/kafka/BitnamiKafkaContainer.java
deleted file mode 100644
index f92f7393..00000000
--- a/src/main/java/org/testcontainers/kafka/BitnamiKafkaContainer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.testcontainers.kafka;
-
-import com.github.dockerjava.api.command.InspectContainerResponse;
-import dev.vality.testcontainers.annotations.kafka.KafkaContainerExtension;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.Network;
-import org.testcontainers.containers.output.WaitingConsumer;
-import org.testcontainers.containers.wait.strategy.Wait;
-import org.testcontainers.containers.wait.strategy.WaitAllStrategy;
-import org.testcontainers.images.builder.Transferable;
-import org.testcontainers.utility.DockerImageName;
-
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
-
-@Slf4j
-@SuppressWarnings("LineLength")
-public class BitnamiKafkaContainer extends GenericContainer implements KafkaContainerExtension {
-
- private static final int KAFKA_PORT = 9092;
- private static final int BROKER_PORT = 9093;
- private static final int LIMIT = 120;
- private final List topics;
-
- public BitnamiKafkaContainer(DockerImageName dockerImageName, List topics) {
- super(dockerImageName);
- this.topics = topics;
- dockerImageName.assertCompatibleWith(DockerImageName.parse("bitnami/kafka"));
- withExposedPorts(KafkaHelper.KAFKA_PORT);
- withEnv(KafkaHelper.envVars());
- withEnv("KAFKA_CFG_CONTROLLER_LISTENER_NAMES", "CONTROLLER");
- withEnv("ALLOW_PLAINTEXT_LISTENER", "yes");
- withEnv("KAFKA_CFG_DELETE_TOPIC_ENABLE", "true");
- withEnv("KAFKA_DELETE_TOPIC_ENABLE", "true");
- withEnv("DELETE_TOPIC_ENABLE", "true");
- withEnv("KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE", "false");
- withEnv("KAFKA_AUTO_CREATE_TOPICS_ENABLE", "false");
- withEnv("KAFKA_CFG_NODE_ID", "1");
- withCommand(KafkaHelper.COMMAND);
- waitingFor(new WaitAllStrategy()
- .withStrategy(Wait.forLogMessage(".*Welcome to the Bitnami kafka container.*", 1))
- .withStrategy(Wait.forListeningPort())
- .withStartupTimeout(Duration.ofSeconds(LIMIT)));
- withNetworkAliases("kafka-" + UUID.randomUUID());
- withNetwork(Network.SHARED);
- }
-
- // copy-paste from org.testcontainers.kafka.KafkaContainer + /tmp/kafka.log WaitingConsumer
- @Override
- @SneakyThrows
- protected void containerIsStarting(InspectContainerResponse containerInfo) {
- var brokerAdvertisedListener = String.format(
- "BROKER://%s:%s",
- containerInfo.getConfig().getHostName(),
- BROKER_PORT
- );
- var advertisedListeners = new ArrayList();
- advertisedListeners.add("PLAINTEXT://" + getBootstrapServers());
- advertisedListeners.add(brokerAdvertisedListener);
- var kafkaAdvertisedListeners = String.join(",", advertisedListeners);
- var scriptsPath = "/opt/bitnami/scripts/kafka/";
- var script = String.join("\n",
- "#!/bin/bash",
- "export KAFKA_CFG_ADVERTISED_LISTENERS=" + kafkaAdvertisedListeners,
- scriptsPath + "entrypoint.sh " + scriptsPath + "run.sh > /tmp/kafka.log 2>&1");
- copyFileToContainer(Transferable.of(script.getBytes(), 511), "/start-kafka.sh");
- execInContainer("sh", "-c", "nohup /start-kafka.sh &");
- execInContainer("sh", "-c", "tail -n+1 -f /tmp/kafka.log > /proc/1/fd/1 &");
- var logConsumer = new WaitingConsumer();
- followOutput(logConsumer);
- logConsumer.waitUntil(frame -> frame.getUtf8String().contains("Kafka startTimeMs"), LIMIT, TimeUnit.SECONDS);
- }
-
- @Override
- public List topics() {
- return topics;
- }
-
- @Override
- public String getBootstrapServers() {
- return getHost() + ":" + getMappedPort(KAFKA_PORT);
- }
-
- @Override
- public String execInContainerKafkaTopicsListCommand() {
- var kafkaTopicsPath = "/opt/bitnami/kafka/bin/kafka-topics.sh";
- return execInContainerKafkaTopicsListCommandWithPath(kafkaTopicsPath);
- }
-}
diff --git a/src/main/resources/testcontainers-annotations.yml b/src/main/resources/testcontainers-annotations.yml
index d08f4ec9..b1823d90 100644
--- a/src/main/resources/testcontainers-annotations.yml
+++ b/src/main/resources/testcontainers-annotations.yml
@@ -2,8 +2,6 @@ testcontainers:
postgresql:
tag: '17'
kafka:
- bitnami:
- tag: '3.8'
apache:
tag: '3.8.0'
confluent: