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;
+    }
+}

Reply via email to