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..d8a883dbee 100644 --- a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java +++ b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/Configuration.java @@ -20,14 +20,27 @@ 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 + + /** + * 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. @@ -36,11 +49,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 +71,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"