This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 65f05306a8f2f0483c25d091048dcdcdddefee15 Author: Jiri Ondrusek <ondrusek.j...@gmail.com> AuthorDate: Wed Feb 5 10:22:33 2025 +0100 Fixes #6976: Aws-secret-manager test coverage for reload with sqs --- .../aws2/aws-secrets-manager/pom.xml | 17 ++++ .../it/AwsSecretsManagerTestEnvCustomizer.java | 34 ++++++- .../manager/it/CamelContextSqsReloadTest.java | 105 +++++++++++++++++++++ .../manager/it/ContextSqsReloadTestProfile.java | 36 +++++++ 4 files changed, 191 insertions(+), 1 deletion(-) diff --git a/integration-test-groups/aws2/aws-secrets-manager/pom.xml b/integration-test-groups/aws2/aws-secrets-manager/pom.xml index 79e67e7e90..50ad18fdff 100644 --- a/integration-test-groups/aws2/aws-secrets-manager/pom.xml +++ b/integration-test-groups/aws2/aws-secrets-manager/pom.xml @@ -35,6 +35,10 @@ <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-aws-secrets-manager</artifactId> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-aws2-sqs</artifactId> + </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-direct</artifactId> @@ -121,6 +125,19 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-aws2-sqs-deployment</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>*</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> + </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-direct-deployment</artifactId> diff --git a/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTestEnvCustomizer.java b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTestEnvCustomizer.java index 2ad66e2160..c9961261e5 100644 --- a/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTestEnvCustomizer.java +++ b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTestEnvCustomizer.java @@ -16,18 +16,23 @@ */ package org.apache.camel.quarkus.component.aws.secrets.manager.it; +import java.util.Locale; import java.util.Map; import org.apache.camel.quarkus.test.mock.backend.MockBackendUtils; import org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvContext; import org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer; +import org.apache.commons.lang3.RandomStringUtils; import org.testcontainers.containers.localstack.LocalStackContainer.Service; +import software.amazon.awssdk.services.sqs.SqsClient; +import software.amazon.awssdk.services.sqs.model.CreateQueueRequest; +import software.amazon.awssdk.services.sqs.model.DeleteQueueRequest; public class AwsSecretsManagerTestEnvCustomizer implements Aws2TestEnvCustomizer { @Override public Service[] localstackServices() { - return new Service[] { Service.SECRETSMANAGER }; + return new Service[] { Service.SECRETSMANAGER, Service.SQS }; } @Override @@ -51,5 +56,32 @@ public class AwsSecretsManagerTestEnvCustomizer implements Aws2TestEnvCustomizer envContext.property("camel.vault.aws.secretKey", System.getenv("AWS_SECRET_KEY")); envContext.property("camel.vault.aws.region", System.getenv("AWS_REGION")); } + + /* SQS */ + final String queueName = "cq-secret-manager-sqs-reload-" + + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); + + //configure endpoint override for properties function + if (envContext.isLocalStack()) { + envContext.property("camel.vault.aws.override-endpoint", + envContext.getProperties().get("camel.component.aws-secrets-manager.override-endpoint")); + envContext.property("camel.vault.aws.uri-endpoint-override", + envContext.getProperties().get("camel.component.aws-secrets-manager.uri-endpoint-override")); + } + + final SqsClient sqsClient = envContext.client(Service.SQS, SqsClient::builder); + { + final String queueUrl = sqsClient.createQueue( + CreateQueueRequest.builder() + .queueName(queueName) + .build()) + .queueUrl(); + //queue url for the vault configuration + envContext.property("camel.vault.aws.sqsQueueUrl", queueUrl); + + envContext.closeable(() -> { + sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(queueUrl).build()); + }); + } } } diff --git a/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextSqsReloadTest.java b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextSqsReloadTest.java new file mode 100644 index 0000000000..37a54a3cde --- /dev/null +++ b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextSqsReloadTest.java @@ -0,0 +1,105 @@ +/* + * 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.quarkus.component.aws.secrets.manager.it; + +import java.time.Instant; +import java.util.Collections; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit.TestProfile; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants; +import org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations; +import org.apache.camel.quarkus.test.support.aws2.Aws2Client; +import org.apache.camel.quarkus.test.support.aws2.Aws2TestResource; +import org.eclipse.microprofile.config.ConfigProvider; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.localstack.LocalStackContainer; +import org.testcontainers.shaded.org.awaitility.Awaitility; +import software.amazon.awssdk.services.sqs.SqsClient; +import software.amazon.awssdk.services.sqs.model.SendMessageRequest; +import software.amazon.awssdk.services.sqs.model.SendMessageResponse; + +import static org.hamcrest.CoreMatchers.is; + +@QuarkusTest +@QuarkusTestResource(Aws2TestResource.class) +@TestProfile(ContextSqsReloadTestProfile.class) +public class CamelContextSqsReloadTest { + + private static String eventMsg(String secretId) { + return "{\n" + + " \"detail\": {\n" + + " \"eventSource\": \"secretsmanager.amazonaws.com\",\n" + + " \"eventName\" : \"PutSecretValue\",\n" + + " \"requestParameters\" : {\n" + + " \"secretId\" : \"" + secretId + "\"\n" + + " },\n" + + " \"eventTime\" : \"" + Instant.now() + "\"\n" + + " }\n" + + "}"; + } + + @Aws2Client(LocalStackContainer.Service.SQS) + SqsClient sqsClient; + + @Test + public void testCamelContextReloadOnSecretRefresh() { + String secretArn = null; + try { + final String myUniqueSecretValue = "value" + UUID.randomUUID(); + //create secret + secretArn = AwsSecretsManagerUtil.createSecret( + ConfigProvider.getConfig().getValue("camel.vault.aws.secrets", String.class), + myUniqueSecretValue); + //update secret + RestAssured.given() + .contentType(ContentType.JSON) + .body(Collections.singletonMap(SecretsManagerConstants.SECRET_ID, secretArn)) + .queryParam("body", myUniqueSecretValue + "-updated") + .post("/aws-secrets-manager/operation/" + SecretsManagerOperations.updateSecret) + .then() + .statusCode(201) + .body(is("true")); + + //trigger context reload + SendMessageRequest.Builder request = SendMessageRequest.builder() + .queueUrl(ConfigProvider.getConfig().getValue("camel.vault.aws.sqsQueueUrl", String.class)); + request.messageBody(eventMsg(secretArn)); + SendMessageResponse response = sqsClient.sendMessage(request.build()); + Assertions.assertEquals(200, response.sdkHttpResponse().statusCode()); + + //assert context reload + Awaitility.await().pollInterval(5, TimeUnit.SECONDS).atMost(5, TimeUnit.MINUTES).untilAsserted( + () -> { + RestAssured.get("/aws-secrets-manager/context/reload") + .then() + .statusCode(200) + .body(is("true")); + }); + } finally { + if (secretArn != null) { + AwsSecretsManagerUtil.deleteSecretImmediately(secretArn); + } + } + } +} diff --git a/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/ContextSqsReloadTestProfile.java b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/ContextSqsReloadTestProfile.java new file mode 100644 index 0000000000..e8fedcc9a2 --- /dev/null +++ b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/ContextSqsReloadTestProfile.java @@ -0,0 +1,36 @@ +/* + * 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.quarkus.component.aws.secrets.manager.it; + +import java.util.HashMap; +import java.util.Map; + +import io.quarkus.test.junit.QuarkusTestProfile; + +public class ContextSqsReloadTestProfile implements QuarkusTestProfile { + @Override + public Map<String, String> getConfigOverrides() { + Map<String, String> props = new HashMap<>(); + props.put("camel.vault.aws.refreshEnabled", "true"); + props.put("camel.vault.aws.refreshPeriod", "5000"); + props.put("camel.vault.aws.secrets", "CQTestSecretContextReload" + System.currentTimeMillis()); + props.put("camel.main.context-reload-enabled", "true"); + + props.put("camel.vault.aws.useSqsNotification", "true"); + return props; + } +}