From 2914841fe8159cf50776272ad32703749dd3288c Mon Sep 17 00:00:00 2001 From: salaboy Date: Fri, 24 Oct 2025 11:51:00 +0100 Subject: [PATCH 1/3] adding support for HttpPipeline Signed-off-by: salaboy --- .../io/dapr/testcontainers/Configuration.java | 12 +++++- .../io/dapr/testcontainers/HttpPipeline.java | 37 +++++++++++++++++++ .../converter/ConfigurationYamlConverter.java | 11 ++++++ .../ConfigurationYamlConverterTest.java | 19 ++++++++-- 4 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 testcontainers-dapr/src/main/java/io/dapr/testcontainers/HttpPipeline.java diff --git a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java index 4a431400c4..2d0d830155 100644 --- a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java +++ b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java @@ -20,11 +20,11 @@ public class Configuration { private final String name; private final TracingConfigurationSettings tracing; private final AppHttpPipeline appHttpPipeline; + private final HttpPipeline httpPipeline; // @TODO: add secrets https://github.com/dapr/java-sdk/issues/1280 // @TODO: add metrics https://github.com/dapr/java-sdk/issues/1281 // @TODO: add logging https://github.com/dapr/java-sdk/issues/1282 - // @TODO: add middleware httpPipeline https://github.com/dapr/java-sdk/issues/1283 // @TODO: add nameResolution https://github.com/dapr/java-sdk/issues/1284 // @TODO: add disallow components https://github.com/dapr/java-sdk/issues/1285 // @TODO: add mtls https://github.com/dapr/java-sdk/issues/1286 @@ -36,11 +36,15 @@ public class Configuration { * @param tracing TracingConfigParameters tracing configuration * parameters. * @param appHttpPipeline AppHttpPipeline middleware configuration. + * @param httpPipeline HttpPipeline middleware configuration. */ - public Configuration(String name, TracingConfigurationSettings tracing, AppHttpPipeline appHttpPipeline) { + public Configuration(String name, TracingConfigurationSettings tracing, + AppHttpPipeline appHttpPipeline, + HttpPipeline httpPipeline) { this.name = name; this.tracing = tracing; this.appHttpPipeline = appHttpPipeline; + this.httpPipeline = httpPipeline; } public String getName() { @@ -54,4 +58,8 @@ public TracingConfigurationSettings getTracing() { public AppHttpPipeline getAppHttpPipeline() { return appHttpPipeline; } + + public HttpPipeline getHttpPipeline() { + return httpPipeline; + } } diff --git a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/HttpPipeline.java b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/HttpPipeline.java new file mode 100644 index 0000000000..6cace36f04 --- /dev/null +++ b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/HttpPipeline.java @@ -0,0 +1,37 @@ +/* + * Copyright 2025 The Dapr Authors + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and +limitations under the License. +*/ + +package io.dapr.testcontainers; + +import java.util.Collections; +import java.util.List; + +public class HttpPipeline implements ConfigurationSettings { + private List handlers; + + /** + * Creates an HttpPipeline. + * + * @param handlers List of handlers for the HttpPipeline + */ + public HttpPipeline(List handlers) { + if (handlers != null) { + this.handlers = Collections.unmodifiableList(handlers); + } + } + + public List getHandlers() { + return handlers; + } + +} diff --git a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/converter/ConfigurationYamlConverter.java b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/converter/ConfigurationYamlConverter.java index 005f0b50f9..7d78dd7d25 100644 --- a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/converter/ConfigurationYamlConverter.java +++ b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/converter/ConfigurationYamlConverter.java @@ -15,6 +15,7 @@ import io.dapr.testcontainers.AppHttpPipeline; import io.dapr.testcontainers.Configuration; +import io.dapr.testcontainers.HttpPipeline; import io.dapr.testcontainers.ListEntry; import io.dapr.testcontainers.OtelTracingConfigurationSettings; import io.dapr.testcontainers.TracingConfigurationSettings; @@ -77,6 +78,16 @@ public String convert(Configuration configuration) { } + HttpPipeline httpPipeline = configuration.getHttpPipeline(); + if (httpPipeline != null) { + + Map httpPipelineMap = new LinkedHashMap<>(); + List handlers = httpPipeline.getHandlers(); + httpPipelineMap.put("handlers", handlers); + configurationSpec.put("httpPipeline", httpPipelineMap); + + } + AppHttpPipeline appHttpPipeline = configuration.getAppHttpPipeline(); if (appHttpPipeline != null) { diff --git a/testcontainers-dapr/src/test/java/io/dapr/testcontainers/converter/ConfigurationYamlConverterTest.java b/testcontainers-dapr/src/test/java/io/dapr/testcontainers/converter/ConfigurationYamlConverterTest.java index fe798611b5..8f15d465de 100644 --- a/testcontainers-dapr/src/test/java/io/dapr/testcontainers/converter/ConfigurationYamlConverterTest.java +++ b/testcontainers-dapr/src/test/java/io/dapr/testcontainers/converter/ConfigurationYamlConverterTest.java @@ -16,6 +16,7 @@ import io.dapr.testcontainers.AppHttpPipeline; import io.dapr.testcontainers.Configuration; import io.dapr.testcontainers.DaprContainer; +import io.dapr.testcontainers.HttpPipeline; import io.dapr.testcontainers.ListEntry; import io.dapr.testcontainers.OtelTracingConfigurationSettings; import io.dapr.testcontainers.TracingConfigurationSettings; @@ -48,15 +49,21 @@ public void testConfigurationToYaml() { ); - List handlers = new ArrayList<>(); - handlers.add(new ListEntry("alias", "middleware.http.routeralias")); + List appHttpHandlers = new ArrayList<>(); + appHttpHandlers.add(new ListEntry("alias", "middleware.http.routeralias")); - AppHttpPipeline appHttpPipeline = new AppHttpPipeline(handlers); + AppHttpPipeline appHttpPipeline = new AppHttpPipeline(appHttpHandlers); + + List httpHandlers = new ArrayList<>(); + + //Notice that this needs to be different objects, if not Snake YAML will add a reference to the object + HttpPipeline httpPipeline = new HttpPipeline(httpHandlers); + httpHandlers.add(new ListEntry("alias", "middleware.http.routeralias")); DaprContainer dapr = new DaprContainer(DAPR_RUNTIME_IMAGE_TAG) .withAppName("dapr-app") .withAppPort(8081) - .withConfiguration(new Configuration("my-config", tracing, appHttpPipeline)) + .withConfiguration(new Configuration("my-config", tracing, appHttpPipeline, httpPipeline)) .withAppChannelAddress("host.testcontainers.internal"); Configuration configuration = dapr.getConfiguration(); @@ -76,6 +83,10 @@ public void testConfigurationToYaml() { + " endpointAddress: localhost:4317\n" + " isSecure: false\n" + " protocol: grpc\n" + + " httpPipeline:\n" + + " handlers:\n" + + " - name: alias\n" + + " type: middleware.http.routeralias\n" + " appHttpPipeline:\n" + " handlers:\n" + " - name: alias\n" From ade88b59137868735330cede5379c59c357503ef Mon Sep 17 00:00:00 2001 From: salaboy Date: Fri, 24 Oct 2025 11:58:45 +0100 Subject: [PATCH 2/3] using default constructor Signed-off-by: salaboy --- .../java/io/dapr/testcontainers/Configuration.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java index 2d0d830155..6bfb56643b 100644 --- a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java +++ b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java @@ -29,6 +29,20 @@ public class Configuration { // @TODO: add disallow components https://github.com/dapr/java-sdk/issues/1285 // @TODO: add mtls https://github.com/dapr/java-sdk/issues/1286 + + /** + * Creates a new configuration. + * + * @param name Configuration name. + * @param tracing TracingConfigParameters tracing configuration + * parameters. + * @param appHttpPipeline AppHttpPipeline middleware configuration. + */ + public Configuration(String name, TracingConfigurationSettings tracing, + AppHttpPipeline appHttpPipeline) { + this(name, tracing, appHttpPipeline, null); + } + /** * Creates a new configuration. * From 81d5448e45aab3ab5502340cbeda23e53133bd7a Mon Sep 17 00:00:00 2001 From: salaboy Date: Fri, 24 Oct 2025 14:33:05 +0100 Subject: [PATCH 3/3] fixing codestyle Signed-off-by: salaboy --- .../src/main/java/io/dapr/testcontainers/Configuration.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java index 6bfb56643b..d8a883dbee 100644 --- a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java +++ b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java @@ -28,8 +28,7 @@ public class Configuration { // @TODO: add nameResolution https://github.com/dapr/java-sdk/issues/1284 // @TODO: add disallow components https://github.com/dapr/java-sdk/issues/1285 // @TODO: add mtls https://github.com/dapr/java-sdk/issues/1286 - - + /** * Creates a new configuration. *