This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch CAMEL-21330 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 89990fc6c47042de3689ea18596001f0f5da0851 Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Wed Oct 23 11:05:18 2024 +0200 CAMEL-21330 - Camel-AWS-Secrets-Manager: Support Properties Function with Localstack Signed-off-by: Andrea Cosentino <anco...@gmail.com> --- .../integration/AwsSecretsManagerBaseTest.java | 48 +++++++++++++++++++ ...etsManagerPropertiesSourceTestLocalstackIT.java | 56 ++++++++++++++++++++++ 2 files changed, 104 insertions(+) diff --git a/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/AwsSecretsManagerBaseTest.java b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/AwsSecretsManagerBaseTest.java index 02b838f4adc..9effb457490 100644 --- a/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/AwsSecretsManagerBaseTest.java +++ b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/AwsSecretsManagerBaseTest.java @@ -16,6 +16,8 @@ */ package org.apache.camel.component.aws.secretsmanager.integration; +import java.net.URI; + import org.apache.camel.CamelContext; import org.apache.camel.component.aws.secretsmanager.SecretsManagerComponent; import org.apache.camel.test.infra.aws.common.services.AWSService; @@ -24,6 +26,11 @@ import org.apache.camel.test.infra.aws2.services.AWSServiceFactory; import org.apache.camel.test.junit5.CamelTestSupport; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.RegisterExtension; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient; +import software.amazon.awssdk.services.secretsmanager.SecretsManagerClientBuilder; @TestInstance(TestInstance.Lifecycle.PER_CLASS) public abstract class AwsSecretsManagerBaseTest extends CamelTestSupport { @@ -37,4 +44,45 @@ public abstract class AwsSecretsManagerBaseTest extends CamelTestSupport { smComponent.getConfiguration().setSecretsManagerClient(AWSSDKClientUtils.newSecretsManagerClient()); return context; } + + // {aws.secret.key=secretkey, aws.region=us-east-1, aws.access.key=accesskey, aws.host=localhost:32775, aws.protocol=http} + public static SecretsManagerClient getSecretManagerClient() { + String accessKey = service.getConnectionProperties().getProperty("aws.access.key"); + String region = service.getConnectionProperties().getProperty("aws.region"); + String secretKey = service.getConnectionProperties().getProperty("aws.secret.key"); + String host = service.getConnectionProperties().getProperty("aws.host"); + String protocol = service.getConnectionProperties().getProperty("aws.protocol"); + SecretsManagerClient client = null; + SecretsManagerClientBuilder clientBuilder = SecretsManagerClient.builder(); + AwsBasicCredentials cred = AwsBasicCredentials.create(accessKey, secretKey); + clientBuilder = clientBuilder.credentialsProvider(StaticCredentialsProvider.create(cred)); + clientBuilder = clientBuilder.region(Region.of(region)); + clientBuilder.endpointOverride(URI.create(protocol + "://" + host)); + return clientBuilder.build(); + } + + public String getSecretKey() { + return service.getConnectionProperties().getProperty("aws.secret.key"); + } + + public String getAccessKey() { + return service.getConnectionProperties().getProperty("aws.access.key"); + } + + public String getRegion() { + return service.getConnectionProperties().getProperty("aws.region"); + } + + public String getProtocol() { + return service.getConnectionProperties().getProperty("aws.protocol"); + } + + public String getHost() { + return service.getConnectionProperties().getProperty("aws.host"); + } + + public String getUrlOverride() { + return getProtocol() + "://" + getHost(); + } + } diff --git a/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerPropertiesSourceTestLocalstackIT.java b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerPropertiesSourceTestLocalstackIT.java new file mode 100644 index 00000000000..444af412e0e --- /dev/null +++ b/components/camel-aws/camel-aws-secrets-manager/src/test/java/org/apache/camel/component/aws/secretsmanager/integration/SecretsManagerPropertiesSourceTestLocalstackIT.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.camel.component.aws.secretsmanager.integration; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest; + +public class SecretsManagerPropertiesSourceTestLocalstackIT extends AwsSecretsManagerBaseTest { + + @BeforeAll + public static void setup() { + CreateSecretRequest.Builder builder = CreateSecretRequest.builder(); + builder.name("test"); + builder.secretString("hello"); + getSecretManagerClient().createSecret(builder.build()); + } + + @Test + public void testFunction() throws Exception { + context.getVaultConfiguration().aws().setAccessKey(getAccessKey()); + context.getVaultConfiguration().aws().setSecretKey(getSecretKey()); + context.getVaultConfiguration().aws().setRegion(getRegion()); + context.getVaultConfiguration().aws().setOverrideEndpoint(true); + context.getVaultConfiguration().aws().setUriEndpointOverride(getUrlOverride()); + context.addRoutes(new RouteBuilder() { + @Override + public void configure() { + from("direct:start").setBody(simple("{{aws:test}}")).to("mock:bar"); + } + }); + context.start(); + + getMockEndpoint("mock:bar").expectedBodiesReceived("hello"); + + template.sendBody("direct:start", "Hello World"); + + MockEndpoint.assertIsSatisfied(context); + } +}