A Testcontainers 2 module for running Karapace clusters.
<dependency>
<groupId>org.vetronauta</groupId>
<artifactId>karapace-testcontainers</artifactId>
<version>0.2.0</version>
<scope>test</scope>
</dependency>The simpler example is as follows. By default, it will use Karapace 5.0.3 and Kafka 3.9.1.
KarapaceContainer karapaceContainer = KarapaceContainer.builder().build();
karapaceContainer.start();It is possible to specify the Karapace image through the builder. Moreover, it is possible to avoid the verification of the image compatibility.
KarapaceContainer karapaceContainer = KarapaceContainer.builder()
.karapaceImageName(GHCR_IMAGE_NAME.withTag("5.0.2"))
.build();
karapaceContainer.start();KarapaceContainer customKarapaceContainer = KarapaceContainer.builder()
.karapaceImageName(DockerImageName.parse("my-company/karapace"))
.assertCompatible(false)
.build();
customKarapaceContainer.start();By default, the Kafka container lifecycle will follow the Karapace container lifecycle (it starts before and stops after Karapace). There might be the need to use a specific Kafka version or to test a Karapace cluster. Moreover, also Redpanda is supported for the underlying storage.
KarapaceContainer kafka4KarapaceContainer = KarapaceContainer.builder()
.redpandaImage(DockerImageName.parse("redpandadata/redpanda:v25.3.1"))
.build();
kafka4KarapaceContainer.start();
KarapaceContainer redpandaKarapaceContainer = KarapaceContainer.builder()
.kafkaImage(DockerImageName.parse("apache/kafka:4.1.1"))
.build();
redpandaKarapaceContainer.start();It is possible to supply a Kafka container to use, but its lifecycle must be handled separately.
KafkaContainer kafkaContainer = defaultKafkaContainer();
KarapaceContainer masterContainer = KarapaceContainer.builder()
.kafkaContainer(kafkaContainer)
.build();
KarapaceContainer follower1Container = KarapaceContainer.builder()
.electionStrategy(ElectionStrategy.LOWEST)
.expectedMaster(false)
.kafkaContainer(kafkaContainer)
.advertisedName("karapace-schema-registry-follower1")
.build();
KarapaceContainer follower2Container = KarapaceContainer.builder()
.electionStrategy(ElectionStrategy.LOWEST)
.expectedMaster(false)
.kafkaContainer(kafkaContainer)
.advertisedName("karapace-schema-registry-follower2")
.build();
kafkaContainer.start();
masterContainer.start();
follower1Container.start();
follower2Container.start();