From e782e6b2a6f359ed9b52d3b11ecdd1d9fcf50f9a Mon Sep 17 00:00:00 2001 From: wlfgang <14792753+wlfgang@users.noreply.github.com> Date: Fri, 24 Oct 2025 12:45:43 -0400 Subject: [PATCH 1/2] Add gRPC support to Dapr testcontainer Signed-off-by: wlfgang --- .../io/dapr/testcontainers/DaprContainer.java | 18 ++++++++++++--- .../testcontainers/DaprContainerTest.java | 23 +++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/DaprContainer.java b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/DaprContainer.java index 51dce6f076..9ad343fa39 100644 --- a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/DaprContainer.java +++ b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/DaprContainer.java @@ -48,7 +48,6 @@ public class DaprContainer extends GenericContainer { private static final Logger LOGGER = LoggerFactory.getLogger(DaprContainer.class); private static final int DAPRD_DEFAULT_HTTP_PORT = 3500; private static final int DAPRD_DEFAULT_GRPC_PORT = 50001; - private static final DaprProtocol DAPR_PROTOCOL = DaprProtocol.HTTP; private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(DAPR_RUNTIME_IMAGE_TAG); private static final Yaml YAML_MAPPER = YamlMapperFactory.create(); @@ -76,6 +75,7 @@ public class DaprContainer extends GenericContainer { private DaprSchedulerContainer schedulerContainer; private String appName; private Integer appPort; + private DaprProtocol appProtocol; private String appHealthCheckPath; private Integer appHealthCheckProbeInterval = 5; //default from docs private Integer appHealthCheckProbeTimeout = 500; //default from docs @@ -126,6 +126,11 @@ public DaprContainer withAppPort(Integer port) { return this; } + public DaprContainer withAppProtocol(DaprProtocol protocol) { + this.appProtocol = protocol; + return this; + } + public DaprContainer withAppChannelAddress(String appChannelAddress) { this.appChannelAddress = appChannelAddress; return this; @@ -308,8 +313,6 @@ protected void configure() { cmds.add("--app-id"); cmds.add(appName); cmds.add("--dapr-listen-addresses=0.0.0.0"); - cmds.add("--app-protocol"); - cmds.add(DAPR_PROTOCOL.getName()); cmds.add("--placement-host-address"); cmds.add(placementService + ":50005"); cmds.add("--scheduler-host-address"); @@ -325,6 +328,11 @@ protected void configure() { cmds.add(Integer.toString(appPort)); } + if (appProtocol != null) { + cmds.add("--app-protocol"); + cmds.add(appProtocol.getName()); + } + if (appHealthCheckPath != null && !appHealthCheckPath.isEmpty()) { cmds.add("--enable-app-health-check"); cmds.add("--app-health-check-path"); @@ -413,6 +421,10 @@ public Integer getAppPort() { return appPort; } + public DaprProtocol getAppProtocol() { + return appProtocol; + } + public String getAppHealthCheckPath() { return appHealthCheckPath; } diff --git a/testcontainers-dapr/src/test/java/io/dapr/testcontainers/DaprContainerTest.java b/testcontainers-dapr/src/test/java/io/dapr/testcontainers/DaprContainerTest.java index c930e98511..1af013bdca 100644 --- a/testcontainers-dapr/src/test/java/io/dapr/testcontainers/DaprContainerTest.java +++ b/testcontainers-dapr/src/test/java/io/dapr/testcontainers/DaprContainerTest.java @@ -6,6 +6,7 @@ import static io.dapr.testcontainers.DaprContainerConstants.DAPR_RUNTIME_IMAGE_TAG; import static io.dapr.testcontainers.DaprContainerConstants.DAPR_VERSION; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; public class DaprContainerTest { @@ -78,4 +79,26 @@ public void appHealthParametersDefaultsTest(){ assertEquals(3, dapr2.getAppHealthCheckThreshold()); } + + @Test + public void appPortProtocolDefaultsTest() { + try (DaprContainer daprContainer = new DaprContainer(DAPR_RUNTIME_IMAGE_TAG) + .withAppName("dapr-app")) { + daprContainer.configure(); + assertNull(daprContainer.getAppPort()); + assertNull(daprContainer.getAppProtocol()); + } + + Integer port = 50003; + DaprProtocol protocol = DaprProtocol.GRPC; + try (DaprContainer daprContainer = new DaprContainer(DAPR_RUNTIME_IMAGE_TAG) + .withAppName("dapr-app4") + .withAppPort(port) + .withAppProtocol(protocol)) { + daprContainer.configure(); + assertEquals(port, daprContainer.getAppPort()); + assertEquals(protocol, daprContainer.getAppProtocol()); + } + + } } From 93701d208dc6d8e109d657c5007492b265b06386 Mon Sep 17 00:00:00 2001 From: wlfgang Date: Mon, 27 Oct 2025 16:18:52 -0400 Subject: [PATCH 2/2] Avoid using null to indicate default value Signed-off-by: wlfgang --- .../main/java/io/dapr/testcontainers/DaprContainer.java | 2 +- .../java/io/dapr/testcontainers/DaprContainerTest.java | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/DaprContainer.java b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/DaprContainer.java index 9ad343fa39..823f6f61f7 100644 --- a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/DaprContainer.java +++ b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/DaprContainer.java @@ -75,7 +75,7 @@ public class DaprContainer extends GenericContainer { private DaprSchedulerContainer schedulerContainer; private String appName; private Integer appPort; - private DaprProtocol appProtocol; + private DaprProtocol appProtocol = DaprProtocol.HTTP; // default from docs private String appHealthCheckPath; private Integer appHealthCheckProbeInterval = 5; //default from docs private Integer appHealthCheckProbeTimeout = 500; //default from docs diff --git a/testcontainers-dapr/src/test/java/io/dapr/testcontainers/DaprContainerTest.java b/testcontainers-dapr/src/test/java/io/dapr/testcontainers/DaprContainerTest.java index 1af013bdca..8281aae80e 100644 --- a/testcontainers-dapr/src/test/java/io/dapr/testcontainers/DaprContainerTest.java +++ b/testcontainers-dapr/src/test/java/io/dapr/testcontainers/DaprContainerTest.java @@ -6,7 +6,6 @@ import static io.dapr.testcontainers.DaprContainerConstants.DAPR_RUNTIME_IMAGE_TAG; import static io.dapr.testcontainers.DaprContainerConstants.DAPR_VERSION; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; public class DaprContainerTest { @@ -81,22 +80,18 @@ public void appHealthParametersDefaultsTest(){ } @Test - public void appPortProtocolDefaultsTest() { + public void appProtocolDefaultsTest() { try (DaprContainer daprContainer = new DaprContainer(DAPR_RUNTIME_IMAGE_TAG) .withAppName("dapr-app")) { daprContainer.configure(); - assertNull(daprContainer.getAppPort()); - assertNull(daprContainer.getAppProtocol()); + assertEquals(DaprProtocol.HTTP, daprContainer.getAppProtocol()); } - Integer port = 50003; DaprProtocol protocol = DaprProtocol.GRPC; try (DaprContainer daprContainer = new DaprContainer(DAPR_RUNTIME_IMAGE_TAG) .withAppName("dapr-app4") - .withAppPort(port) .withAppProtocol(protocol)) { daprContainer.configure(); - assertEquals(port, daprContainer.getAppPort()); assertEquals(protocol, daprContainer.getAppProtocol()); }