From 63d9af129eab5ecde5131ba811349ff5ec6e5280 Mon Sep 17 00:00:00 2001 From: Emmanuel Hugonnet Date: Thu, 15 Oct 2026 12:56:13 +0200 Subject: [PATCH] fix(queue-manager-replicated): migrate Kafka tests to Testcontainers 2.x API - Switch from legacy KafkaContainer (cp-kafka:7.6.1) to TC 2.x KafkaContainer (apache/kafka:4.2.0) with proper Docker network listener - Pin single-instance Dev Services to JVM Kafka image (rootless Podman)fix: fixing integration tests issues Signed-off-by: Emmanuel Hugonnet --- .../MultiInstanceReplicationTest.java | 18 ++++++++---------- .../src/test/resources/application.properties | 2 ++ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/extras/queue-manager-replicated/tests-multi-instance/tests/src/test/java/org/a2aproject/sdk/extras/queuemanager/replicated/tests/multiinstance/MultiInstanceReplicationTest.java b/extras/queue-manager-replicated/tests-multi-instance/tests/src/test/java/org/a2aproject/sdk/extras/queuemanager/replicated/tests/multiinstance/MultiInstanceReplicationTest.java index a35b58ad1..ee2a01868 100644 --- a/extras/queue-manager-replicated/tests-multi-instance/tests/src/test/java/org/a2aproject/sdk/extras/queuemanager/replicated/tests/multiinstance/MultiInstanceReplicationTest.java +++ b/extras/queue-manager-replicated/tests-multi-instance/tests/src/test/java/org/a2aproject/sdk/extras/queuemanager/replicated/tests/multiinstance/MultiInstanceReplicationTest.java @@ -31,7 +31,6 @@ import org.a2aproject.sdk.spec.Message; import org.a2aproject.sdk.spec.Task; import org.a2aproject.sdk.spec.TaskIdParams; -import org.a2aproject.sdk.spec.TaskQueryParams; import org.a2aproject.sdk.spec.TaskState; import org.a2aproject.sdk.spec.TransportProtocol; import org.a2aproject.sdk.testutils.docker.RequiresDocker; @@ -40,12 +39,12 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.KafkaContainer; import org.testcontainers.containers.Network; import org.testcontainers.containers.PostgreSQLContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.images.builder.ImageFromDockerfile; import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.kafka.KafkaContainer; import org.testcontainers.utility.DockerImageName; /** @@ -62,7 +61,7 @@ @RequiresDocker public class MultiInstanceReplicationTest { - private static final String KAFKA_IMAGE = "confluentinc/cp-kafka:7.6.1"; + private static final String KAFKA_IMAGE = "mirror.gcr.io/apache/kafka:4.2.0"; private static final String POSTGRES_IMAGE = "postgres:16-alpine"; private static Network network; @@ -83,14 +82,14 @@ public class MultiInstanceReplicationTest { public static void setup() { // Create a shared network for all containers network = Network.newNetwork(); - + // Start Kafka container - kafka = new KafkaContainer(DockerImageName.parse(KAFKA_IMAGE)) + kafka = new KafkaContainer(DockerImageName.parse(KAFKA_IMAGE) + .asCompatibleSubstituteFor("apache/kafka")) .withNetwork(network) - .withNetworkAliases("kafka") - .withEnv("KAFKA_AUTO_CREATE_TOPICS_ENABLE", "true"); + .withListener("kafka:19092"); kafka.start(); - + // Start PostgreSQL container postgres = new PostgreSQLContainer<>(DockerImageName.parse(POSTGRES_IMAGE)) .withNetwork(network) @@ -101,8 +100,7 @@ public static void setup() { postgres.start(); // Get Kafka bootstrap servers for app configuration - // Kafka is accessible within the Docker network as "kafka:9092" - String kafkaBootstrapServers = "kafka:9092"; + String kafkaBootstrapServers = "kafka:19092"; // PostgreSQL connection details for apps (using network alias) String dbUrl = "jdbc:postgresql://postgres:5432/a2adb"; diff --git a/extras/queue-manager-replicated/tests-single-instance/src/test/resources/application.properties b/extras/queue-manager-replicated/tests-single-instance/src/test/resources/application.properties index df0955d00..0c0466649 100644 --- a/extras/queue-manager-replicated/tests-single-instance/src/test/resources/application.properties +++ b/extras/queue-manager-replicated/tests-single-instance/src/test/resources/application.properties @@ -17,6 +17,8 @@ mp.messaging.incoming.replicated-events-in.value.deserializer=org.apache.kafka.c # Dev Services for Kafka will automatically start a broker for us quarkus.kafka.devservices.enabled=true +# Use JVM image instead of native — native image fails on rootless Podman (config dir not writable) +quarkus.kafka.devservices.image-name=mirror.gcr.io/apache/kafka:4.2.0 # Enhanced configuration for faster and more reliable tests quarkus.kafka.devservices.topic-partitions."replicated-events"=1