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
The following commit(s) were added to refs/heads/main by this push: new 14ffedb063 Full support of aws-secret-manager 14ffedb063 is described below commit 14ffedb063271aa94cf2243409bc7cd0ee1878d4 Author: Jiri Ondrusek <ondrusek.j...@gmail.com> AuthorDate: Wed Jan 29 13:49:24 2025 +0100 Full support of aws-secret-manager --- .../examples/components/aws-secrets-manager.yml | 6 +- .../reference/extensions/aws-secrets-manager.adoc | 21 +++- extensions-jvm/pom.xml | 1 - .../aws-secrets-manager/deployment/pom.xml | 4 + .../deployment/AwsSecretsManagerProcessor.java | 14 --- .../aws-secrets-manager/pom.xml | 2 +- .../aws-secrets-manager/runtime/pom.xml | 5 + .../main/resources/META-INF/quarkus-extension.yaml | 3 +- extensions/pom.xml | 1 + .../aws2}/aws-secrets-manager/pom.xml | 29 ++++- .../manager/it/AwsSecretsManagerResource.java | 24 ++++- .../manager/it/AwsSecretsManagerRouteBuilder.java | 0 .../src/main/resources/application.properties | 0 .../secrets/manager/it/AwsSecretsManagerIT.java | 17 +-- .../secrets/manager/it/AwsSecretsManagerTest.java | 117 +++++++++++++-------- .../it/AwsSecretsManagerTestEnvCustomizer.java | 17 +-- .../secrets/manager/it/AwsSecretsManagerUtil.java | 13 +-- .../it/CamelContextRefreshOnSecretRefreshIT.java | 21 ++-- .../it/CamelContextRefreshOnSecretRefreshTest.java | 9 +- .../manager/it/ContextReloadTestProfile.java | 0 ...quarkus.test.support.aws2.Aws2TestEnvCustomizer | 0 integration-test-groups/aws2/pom.xml | 1 + integration-tests-jvm/pom.xml | 1 - .../test/support/aws2/BaseAws2Resource.java | 13 ++- .../test/support/aws2/Aws2TestEnvContext.java | 42 ++++---- integration-tests/aws2-grouped/pom.xml | 38 +++++++ 26 files changed, 250 insertions(+), 149 deletions(-) diff --git a/docs/modules/ROOT/examples/components/aws-secrets-manager.yml b/docs/modules/ROOT/examples/components/aws-secrets-manager.yml index 3b55d4b543..7ff494dfc1 100644 --- a/docs/modules/ROOT/examples/components/aws-secrets-manager.yml +++ b/docs/modules/ROOT/examples/components/aws-secrets-manager.yml @@ -2,11 +2,11 @@ # This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page cqArtifactId: camel-quarkus-aws-secrets-manager cqArtifactIdBase: aws-secrets-manager -cqNativeSupported: false -cqStatus: Preview +cqNativeSupported: true +cqStatus: Stable cqDeprecated: false cqJvmSince: 2.0.0 -cqNativeSince: n/a +cqNativeSince: 3.19.0 cqCamelPartName: aws-secrets-manager cqCamelPartTitle: AWS Secrets Manager cqCamelPartDescription: Manage secrets using AWS Secrets Manager. diff --git a/docs/modules/ROOT/pages/reference/extensions/aws-secrets-manager.adoc b/docs/modules/ROOT/pages/reference/extensions/aws-secrets-manager.adoc index e604116403..9c49874e04 100644 --- a/docs/modules/ROOT/pages/reference/extensions/aws-secrets-manager.adoc +++ b/docs/modules/ROOT/pages/reference/extensions/aws-secrets-manager.adoc @@ -4,17 +4,17 @@ = AWS Secrets Manager :linkattrs: :cq-artifact-id: camel-quarkus-aws-secrets-manager -:cq-native-supported: false -:cq-status: Preview -:cq-status-deprecation: Preview +:cq-native-supported: true +:cq-status: Stable +:cq-status-deprecation: Stable :cq-description: Manage AWS Secrets Manager services using AWS SDK version 2.x. :cq-deprecated: false :cq-jvm-since: 2.0.0 -:cq-native-since: n/a +:cq-native-since: 3.19.0 ifeval::[{doc-show-badges} == true] [.badges] -[.badge-key]##JVM since##[.badge-supported]##2.0.0## [.badge-key]##Native##[.badge-unsupported]##unsupported## +[.badge-key]##JVM since##[.badge-supported]##2.0.0## [.badge-key]##Native since##[.badge-supported]##3.19.0## endif::[] Manage AWS Secrets Manager services using AWS SDK version 2.x. @@ -29,6 +29,10 @@ Please refer to the above link for usage and configuration details. [id="extensions-aws-secrets-manager-maven-coordinates"] == Maven coordinates +https://{link-quarkus-code-generator}/?extension-search=camel-quarkus-aws-secrets-manager[Create a new project with this extension on {link-quarkus-code-generator}, window="_blank"] + +Or add the coordinates to your existing project: + [source,xml] ---- <dependency> @@ -39,3 +43,10 @@ Please refer to the above link for usage and configuration details. ifeval::[{doc-show-user-guide-link} == true] Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications. endif::[] + +[id="extensions-aws-secrets-manager-ssl-in-native-mode"] +== SSL in native mode + +This extension auto-enables SSL support in native mode. Hence you do not need to add +`quarkus.ssl.native=true` to your `application.properties` yourself. See also +https://quarkus.io/guides/native-and-ssl[Quarkus SSL guide]. diff --git a/extensions-jvm/pom.xml b/extensions-jvm/pom.xml index fcdea01fd9..6e44f46d8c 100644 --- a/extensions-jvm/pom.xml +++ b/extensions-jvm/pom.xml @@ -37,7 +37,6 @@ <!-- extensions a..z; do not remove this comment, it is important when sorting via mvn process-resources -Pformat --> <module>asn1</module> <module>asterisk</module> - <module>aws-secrets-manager</module> <module>aws-xray</module> <module>azure-cosmosdb</module> <module>azure-storage-datalake</module> diff --git a/extensions-jvm/aws-secrets-manager/deployment/pom.xml b/extensions/aws-secrets-manager/deployment/pom.xml similarity index 93% rename from extensions-jvm/aws-secrets-manager/deployment/pom.xml rename to extensions/aws-secrets-manager/deployment/pom.xml index 3713891a74..2e0beaf752 100644 --- a/extensions-jvm/aws-secrets-manager/deployment/pom.xml +++ b/extensions/aws-secrets-manager/deployment/pom.xml @@ -34,6 +34,10 @@ <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-core-deployment</artifactId> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-support-aws2-deployment</artifactId> + </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-aws-secrets-manager</artifactId> diff --git a/extensions-jvm/aws-secrets-manager/deployment/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/deployment/AwsSecretsManagerProcessor.java b/extensions/aws-secrets-manager/deployment/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/deployment/AwsSecretsManagerProcessor.java similarity index 68% rename from extensions-jvm/aws-secrets-manager/deployment/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/deployment/AwsSecretsManagerProcessor.java rename to extensions/aws-secrets-manager/deployment/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/deployment/AwsSecretsManagerProcessor.java index cbeeb1f980..d606e1b61b 100644 --- a/extensions-jvm/aws-secrets-manager/deployment/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/deployment/AwsSecretsManagerProcessor.java +++ b/extensions/aws-secrets-manager/deployment/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/deployment/AwsSecretsManagerProcessor.java @@ -17,11 +17,7 @@ package org.apache.camel.quarkus.component.aws.secrets.manager.deployment; import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.annotations.ExecutionTime; -import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.FeatureBuildItem; -import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild; -import org.apache.camel.quarkus.core.JvmOnlyRecorder; import org.jboss.logging.Logger; class AwsSecretsManagerProcessor { @@ -33,14 +29,4 @@ class AwsSecretsManagerProcessor { FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); } - - /** - * Remove this once this extension starts supporting the native mode. - */ - @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class) - @Record(value = ExecutionTime.RUNTIME_INIT) - void warnJvmInNative(JvmOnlyRecorder recorder) { - JvmOnlyRecorder.warnJvmInNative(LOG, FEATURE); // warn at build time - recorder.warnJvmInNative(FEATURE); // warn at runtime - } } diff --git a/extensions-jvm/aws-secrets-manager/pom.xml b/extensions/aws-secrets-manager/pom.xml similarity index 96% rename from extensions-jvm/aws-secrets-manager/pom.xml rename to extensions/aws-secrets-manager/pom.xml index a73ceac024..3a7e6d8faf 100644 --- a/extensions-jvm/aws-secrets-manager/pom.xml +++ b/extensions/aws-secrets-manager/pom.xml @@ -21,7 +21,7 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.camel.quarkus</groupId> - <artifactId>camel-quarkus-extensions-jvm</artifactId> + <artifactId>camel-quarkus-extensions</artifactId> <version>3.19.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> diff --git a/extensions-jvm/aws-secrets-manager/runtime/pom.xml b/extensions/aws-secrets-manager/runtime/pom.xml similarity index 92% rename from extensions-jvm/aws-secrets-manager/runtime/pom.xml rename to extensions/aws-secrets-manager/runtime/pom.xml index e9f88dbf15..f2130a59bd 100644 --- a/extensions-jvm/aws-secrets-manager/runtime/pom.xml +++ b/extensions/aws-secrets-manager/runtime/pom.xml @@ -32,6 +32,7 @@ <properties> <camel.quarkus.jvmSince>2.0.0</camel.quarkus.jvmSince> + <camel.quarkus.nativeSince>3.19.0</camel.quarkus.nativeSince> </properties> <dependencies> @@ -47,6 +48,10 @@ <groupId>org.jboss.logging</groupId> <artifactId>commons-logging-jboss-logging</artifactId> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-support-aws2</artifactId> + </dependency> </dependencies> <build> diff --git a/extensions-jvm/aws-secrets-manager/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/extensions/aws-secrets-manager/runtime/src/main/resources/META-INF/quarkus-extension.yaml similarity index 97% rename from extensions-jvm/aws-secrets-manager/runtime/src/main/resources/META-INF/quarkus-extension.yaml rename to extensions/aws-secrets-manager/runtime/src/main/resources/META-INF/quarkus-extension.yaml index ef8d8a9f19..4699b7392f 100644 --- a/extensions-jvm/aws-secrets-manager/runtime/src/main/resources/META-INF/quarkus-extension.yaml +++ b/extensions/aws-secrets-manager/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -26,9 +26,8 @@ description: "Manage AWS Secrets Manager services using AWS SDK version 2.x" metadata: icon-url: "https://raw.githubusercontent.com/apache/camel-website/main/antora-ui-camel/src/img/logo-d.svg" sponsor: "Apache Software Foundation" - unlisted: true guide: "https://camel.apache.org/camel-quarkus/latest/reference/extensions/aws-secrets-manager.html" categories: - "integration" status: - - "preview" + - "stable" diff --git a/extensions/pom.xml b/extensions/pom.xml index 6f54d9a6d4..d93677bda2 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -43,6 +43,7 @@ <module>avro</module> <!--<module>avro-rpc</module> https://github.com/apache/camel-quarkus/issues/4462 --> <module>aws-bedrock</module> + <module>aws-secrets-manager</module> <module>aws2-athena</module> <module>aws2-cw</module> <module>aws2-ddb</module> diff --git a/integration-tests-jvm/aws-secrets-manager/pom.xml b/integration-test-groups/aws2/aws-secrets-manager/pom.xml similarity index 81% rename from integration-tests-jvm/aws-secrets-manager/pom.xml rename to integration-test-groups/aws2/aws-secrets-manager/pom.xml index e64427907a..79e67e7e90 100644 --- a/integration-tests-jvm/aws-secrets-manager/pom.xml +++ b/integration-test-groups/aws2/aws-secrets-manager/pom.xml @@ -23,7 +23,7 @@ <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-build-parent-it</artifactId> <version>3.19.0-SNAPSHOT</version> - <relativePath>../../poms/build-parent-it/pom.xml</relativePath> + <relativePath>../../../poms/build-parent-it/pom.xml</relativePath> </parent> <artifactId>camel-quarkus-integration-test-aws-secrets-manager</artifactId> @@ -72,6 +72,33 @@ </dependencies> <profiles> + <profile> + <id>native</id> + <activation> + <property> + <name>native</name> + </property> + </activation> + <properties> + <quarkus.native.enabled>true</quarkus.native.enabled> + </properties> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>integration-test</goal> + <goal>verify</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> <profile> <id>virtualDependencies</id> <activation> diff --git a/integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerResource.java b/integration-test-groups/aws2/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerResource.java similarity index 87% rename from integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerResource.java rename to integration-test-groups/aws2/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerResource.java index b75644da1b..0bcc15a23f 100644 --- a/integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerResource.java +++ b/integration-test-groups/aws2/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerResource.java @@ -40,6 +40,7 @@ import org.apache.camel.ProducerTemplate; import org.apache.camel.component.aws.secretsmanager.SecretsManagerConstants; import org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations; import org.apache.camel.impl.event.CamelContextReloadedEvent; +import org.apache.camel.quarkus.test.support.aws2.BaseAws2Resource; import org.apache.camel.spi.PeriodTaskResolver; import org.apache.camel.support.PluginHelper; import org.apache.camel.util.CollectionHelper; @@ -57,7 +58,7 @@ import software.amazon.awssdk.services.secretsmanager.model.UpdateSecretResponse @Path("/aws-secrets-manager") @ApplicationScoped -public class AwsSecretsManagerResource { +public class AwsSecretsManagerResource extends BaseAws2Resource { private static final Logger LOG = Logger.getLogger(AwsSecretsManagerResource.class); @@ -69,6 +70,10 @@ public class AwsSecretsManagerResource { @Inject ProducerTemplate producerTemplate; + public AwsSecretsManagerResource() { + super(null, "camel.component.aws-secrets-manager"); + } + static final AtomicBoolean contextReloaded = new AtomicBoolean(false); void onReload(@Observes CamelContextReloadedEvent event) { @@ -79,7 +84,10 @@ public class AwsSecretsManagerResource { @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public Response post(@PathParam("operation") String operation, @QueryParam("body") String body, Map<String, Object> headers) + public Response post(@PathParam("operation") String operation, + @QueryParam("body") String body, + @QueryParam("useHeaders") boolean useHeaders, + Map<String, Object> headers) throws Exception { final Object resultBody; @@ -95,7 +103,12 @@ public class AwsSecretsManagerResource { String region = headers.containsKey("region") ? String.format("region=%s&", headers.get("region")) : ""; - Exchange ex = producerTemplate.send(String.format("aws-secrets-manager://test?%soperation=%s", region, operation), + String url = useHeaders ? String.format("aws-secrets-manager://test?%suseDefaultCredentialsProvider=%s", + region, isUseDefaultCredentials()) + : String.format("aws-secrets-manager://test?%soperation=%s&useDefaultCredentialsProvider=%s", + region, operation, isUseDefaultCredentials()); + + Exchange ex = producerTemplate.send(url, e -> { e.getIn().setHeaders(headers); e.getIn().setBody(resultBody); @@ -114,10 +127,11 @@ public class AwsSecretsManagerResource { case describeSecret: DescribeSecretResponse response = ex.getIn().getBody(DescribeSecretResponse.class); result = CollectionHelper.mapOf("sdkHttpSuccessful", response.sdkHttpResponse().isSuccessful(), - "name", response.name()); + "name", response.name(), "description", response.description()); break; case getSecret: - result = ex.getIn().getBody(String.class); + result = Map.of("body", ex.getIn().getBody(String.class), + "version", ex.getIn().getHeader(SecretsManagerConstants.SECRET_VERSION_ID)); break; case deleteSecret: result = ex.getIn().getBody(DeleteSecretResponse.class).sdkHttpResponse().isSuccessful(); diff --git a/integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java b/integration-test-groups/aws2/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java similarity index 100% copy from integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java copy to integration-test-groups/aws2/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java diff --git a/integration-tests-jvm/aws-secrets-manager/src/main/resources/application.properties b/integration-test-groups/aws2/aws-secrets-manager/src/main/resources/application.properties similarity index 100% rename from integration-tests-jvm/aws-secrets-manager/src/main/resources/application.properties rename to integration-test-groups/aws2/aws-secrets-manager/src/main/resources/application.properties diff --git a/integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerIT.java similarity index 59% copy from integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java copy to integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerIT.java index ce58b98d7d..0d6d458b79 100644 --- a/integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java +++ b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerIT.java @@ -16,20 +16,9 @@ */ package org.apache.camel.quarkus.component.aws.secrets.manager.it; -import jakarta.enterprise.context.ApplicationScoped; -import org.apache.camel.builder.RouteBuilder; +import io.quarkus.test.junit.QuarkusIntegrationTest; -@ApplicationScoped -public class AwsSecretsManagerRouteBuilder extends RouteBuilder { +@QuarkusIntegrationTest +class AwsSecretsManagerIT extends AwsSecretsManagerTest { - public static final String MSG_FIRST = "We have received the top secret message."; - public static final String MSG_SECOND = "We have received the updated top secret message."; - - @Override - public void configure() throws Exception { - from("direct:loadFirst") - .setBody(simple(MSG_FIRST)); - from("direct:loadSecond") - .setBody(simple(MSG_SECOND)); - } } diff --git a/integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTest.java b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTest.java similarity index 65% rename from integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTest.java rename to integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTest.java index a867a28858..239cffea97 100644 --- a/integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTest.java +++ b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTest.java @@ -30,37 +30,45 @@ import org.apache.camel.quarkus.test.EnabledIf; import org.apache.camel.quarkus.test.mock.backend.MockBackendDisabled; import org.apache.camel.quarkus.test.mock.backend.MockBackendUtils; import org.apache.camel.quarkus.test.support.aws2.Aws2TestResource; +import org.apache.camel.quarkus.test.support.aws2.BaseAWs2TestSupport; import org.junit.jupiter.api.Test; import org.testcontainers.shaded.org.awaitility.Awaitility; import static org.hamcrest.CoreMatchers.is; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; @QuarkusTest @QuarkusTestResource(Aws2TestResource.class) -public class AwsSecretsManagerTest extends AwsSecretsManagerAbstractTest { +public class AwsSecretsManagerTest extends BaseAWs2TestSupport { + + public AwsSecretsManagerTest() { + super("/aws-secrets-manager"); + } @Test public void testOperations() { final String secretToCreate = "loadFirst"; final String secret2ToCreate = "changeit2"; final String secretToUpdate = "loadSecond"; - final String nameToCreate = "CQTestSecret" + System.currentTimeMillis(); - final String name2ToCreate = "CQTestSecret2" + System.currentTimeMillis(); + final String nameToCreate = "CQTestSecret-operation-1-" + System.currentTimeMillis(); + final String name2ToCreate = "CQTestSecret2-operation-2-" + System.currentTimeMillis(); + final String description2ToCreate = "description-" + name2ToCreate; String createdArn = null; String createdArn2 = null; try { - createdArn = createSecret(nameToCreate, secretToCreate); + // >> create secret 1 + createdArn = AwsSecretsManagerUtil.createSecret(nameToCreate, secretToCreate); + // >> create secret 2 (with description) assertNotNull(createdArn); createdArn2 = RestAssured.given() .contentType(ContentType.JSON) - .body(Collections.singletonMap(SecretsManagerConstants.SECRET_NAME, name2ToCreate)) + .body(Map.of(SecretsManagerConstants.OPERATION, SecretsManagerOperations.createSecret, + SecretsManagerConstants.SECRET_NAME, name2ToCreate, + SecretsManagerConstants.SECRET_DESCRIPTION, description2ToCreate)) .queryParam("body", secret2ToCreate) + .queryParam("useHeaders", true) .post("/aws-secrets-manager/operation/" + SecretsManagerOperations.createSecret) .then() .statusCode(201) @@ -68,38 +76,52 @@ public class AwsSecretsManagerTest extends AwsSecretsManagerAbstractTest { assertNotNull(createdArn); + // >> list both secrets final String finalCreatedArn = createdArn; final String finalCreatedArn2 = createdArn2; Awaitility.await().pollInterval(5, TimeUnit.SECONDS).atMost(1, TimeUnit.MINUTES).untilAsserted( () -> { - Map<String, Boolean> secrets = listSecrets(); + Map<String, Boolean> secrets = AwsSecretsManagerUtil.listSecrets(null); // contains both created secrets assertTrue(secrets.containsKey(finalCreatedArn)); assertTrue(secrets.containsKey(finalCreatedArn2)); }); + // >> use MAX_RESULTS header + Awaitility.await().pollDelay(5, TimeUnit.SECONDS).pollInterval(5, TimeUnit.SECONDS).atMost(1, TimeUnit.MINUTES) + .untilAsserted( + () -> { + Map<String, Boolean> secrets = AwsSecretsManagerUtil.listSecrets(1); + // contains both created secrets + assertTrue(secrets.size() == 1); + }); - String secret = RestAssured.given() + // >> get secret1 with version_id + var secret1recivedMap = RestAssured.given() .contentType(ContentType.JSON) .body(Collections.singletonMap(SecretsManagerConstants.SECRET_ID, createdArn)) .post("/aws-secrets-manager/operation/" + SecretsManagerOperations.getSecret) .then() .statusCode(201) - .extract().asString(); + .extract().as(Map.class); - assertEquals(secretToCreate, secret); + assertEquals(secretToCreate, secret1recivedMap.get("body")); + assertNotNull(secret1recivedMap.get("version")); - Map description = RestAssured.given() + //get description of secret1 + var descriptionMap = RestAssured.given() .contentType(ContentType.JSON) - .body(Collections.singletonMap(SecretsManagerConstants.SECRET_ID, createdArn)) + .body(Map.of(SecretsManagerConstants.SECRET_ID, createdArn2)) .post("/aws-secrets-manager/operation/" + SecretsManagerOperations.describeSecret) .then() .statusCode(201) .extract().as(Map.class); - assertEquals(2, description.size()); - assertEquals(true, description.get("sdkHttpSuccessful")); - assertEquals(nameToCreate, description.get("name")); + assertEquals(3, descriptionMap.size()); + assertEquals(true, descriptionMap.get("sdkHttpSuccessful")); + assertEquals(name2ToCreate, descriptionMap.get("name")); + assertEquals(description2ToCreate, descriptionMap.get("description")); + // >> delete secret 2 RestAssured.given() .contentType(ContentType.JSON) .body(Collections.singletonMap(SecretsManagerConstants.SECRET_ID, createdArn2)) @@ -110,7 +132,7 @@ public class AwsSecretsManagerTest extends AwsSecretsManagerAbstractTest { Awaitility.await().pollInterval(5, TimeUnit.SECONDS).atMost(1, TimeUnit.MINUTES).untilAsserted( () -> { - Map<String, Boolean> secrets = listSecrets(); + Map<String, Boolean> secrets = AwsSecretsManagerUtil.listSecrets(null); // by default secrets marked for deletion are not listed (can be enabled with https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/secretsmanager/model/ListSecretsRequest.Builder.html#includePlannedDeletion(java.lang.Boolean)) // but on localstack they are present (with non-null deletedDate field) - see https://github.com/localstack/localstack/issues/11635 assertTrue(secrets.containsKey(finalCreatedArn)); @@ -126,26 +148,23 @@ public class AwsSecretsManagerTest extends AwsSecretsManagerAbstractTest { // it needs lambda function ARN to work // TODO:See https://github.com/apache/camel-quarkus/issues/5300 - // RestAssured.given() - // .contentType(ContentType.JSON) - // .body(Collections.singletonMap(SecretsManagerConstants.SECRET_ID, createdArn)) - // .post("/aws-secrets-manager/operation/" + SecretsManagerOperations.rotateSecret) - // .then() - // .statusCode(201) - // .body(is("true")); - - updateSecret(createdArn, secretToUpdate); + // >> update value of the first secret + AwsSecretsManagerUtil.updateSecret(createdArn, secretToUpdate); - String updatedSecret = RestAssured.given() + // >> check value and version of secret1 after update + var secret1UpdatedMap = RestAssured.given() .contentType(ContentType.JSON) .body(Collections.singletonMap(SecretsManagerConstants.SECRET_ID, createdArn)) .post("/aws-secrets-manager/operation/" + SecretsManagerOperations.getSecret) .then() .statusCode(201) - .extract().asString(); + .extract().as(Map.class); - assertEquals(secretToUpdate, updatedSecret); + assertEquals(secretToUpdate, secret1UpdatedMap.get("body")); + assertNotNull(secret1UpdatedMap.get("version")); + assertNotEquals(secret1recivedMap.get("version"), secret1UpdatedMap.get("version")); + // >> restore secret2 RestAssured.given() .contentType(ContentType.JSON) .body(Collections.singletonMap(SecretsManagerConstants.SECRET_ID, createdArn2)) @@ -154,9 +173,10 @@ public class AwsSecretsManagerTest extends AwsSecretsManagerAbstractTest { .statusCode(201) .body(is("true")); + // >> validate existence of restored secret by listSecrets Awaitility.await().pollInterval(5, TimeUnit.SECONDS).atMost(1, TimeUnit.MINUTES).untilAsserted( () -> { - Map<String, Boolean> secrets = listSecrets(); + Map<String, Boolean> secrets = AwsSecretsManagerUtil.listSecrets(null); //none of them is deleted, because they were restored assertTrue(secrets.containsKey(finalCreatedArn)); @@ -177,12 +197,27 @@ public class AwsSecretsManagerTest extends AwsSecretsManagerAbstractTest { // .statusCode(201) // .body(is("true")); } finally { - if (!MockBackendUtils.startMockBackend(false)) { - // we must clean created secrets - // skip cleaning on localstack - deleteSecretImmediately(createdArn); - deleteSecretImmediately(createdArn2); - } + // we must clean created secrets + // also on localstack, if not the second run of operations would fail + AwsSecretsManagerUtil.deleteSecretImmediately(createdArn); + AwsSecretsManagerUtil.deleteSecretImmediately(createdArn2); + } + } + + @Override + public void testMethodForDefaultCredentialsProvider() { + final String secretToCreate = "loadFirst"; + final String nameToCreate = "CQTestSecret-provider-" + System.currentTimeMillis(); + String createdArn = null; + + try { + createdArn = AwsSecretsManagerUtil.createSecret(nameToCreate, secretToCreate); + assertNotNull(createdArn); + + } finally { + // we must clean created secrets + // also on localstack, if not the second run of operations would fail + AwsSecretsManagerUtil.deleteSecretImmediately(createdArn); } } @@ -203,7 +238,7 @@ public class AwsSecretsManagerTest extends AwsSecretsManagerAbstractTest { final String secretToUpdate = "loadSecond"; try { final String nameToCreate = "CQTestSecretPropFunction" + System.currentTimeMillis(); - createdArn = createSecret(nameToCreate, secretToCreate); + createdArn = AwsSecretsManagerUtil.createSecret(nameToCreate, secretToCreate); assertNotNull(createdArn); RestAssured.get("/aws-secrets-manager/propertyFunction/" + nameToCreate) @@ -211,7 +246,7 @@ public class AwsSecretsManagerTest extends AwsSecretsManagerAbstractTest { .statusCode(200) .body(is(AwsSecretsManagerRouteBuilder.MSG_FIRST)); - updateSecret(createdArn, secretToUpdate); + AwsSecretsManagerUtil.updateSecret(createdArn, secretToUpdate); RestAssured.get("/aws-secrets-manager/propertyFunction/" + nameToCreate) .then() @@ -221,7 +256,7 @@ public class AwsSecretsManagerTest extends AwsSecretsManagerAbstractTest { if (!MockBackendUtils.startMockBackend(false)) { // we must clean created secrets // skip cleaning on localstack - deleteSecretImmediately(createdArn); + AwsSecretsManagerUtil.deleteSecretImmediately(createdArn); } } } diff --git a/integration-tests-jvm/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 similarity index 72% rename from integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTestEnvCustomizer.java rename to integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerTestEnvCustomizer.java index c98631eb00..2ad66e2160 100644 --- a/integration-tests-jvm/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 @@ -17,7 +17,6 @@ package org.apache.camel.quarkus.component.aws.secrets.manager.it; import java.util.Map; -import java.util.stream.Collectors; import org.apache.camel.quarkus.test.mock.backend.MockBackendUtils; import org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvContext; @@ -36,23 +35,17 @@ public class AwsSecretsManagerTestEnvCustomizer implements Aws2TestEnvCustomizer //get all properties from the context Map<String, String> props = envContext.getProperties(); - //gather all properties (witch changed aws2 -> aws) - Map<String, String> p2 = props.entrySet().stream() - .collect(Collectors.toMap(e -> e.getKey().replaceFirst("aws2", "aws"), e -> e.getValue())); - //remove client (to get rid of properties containing aws2) - envContext.removeClient(new Service[] { Service.SECRETSMANAGER }); - envContext.removeOverrideEndpoint(new Service[] { Service.SECRETSMANAGER }); - - for (Map.Entry<String, String> e : p2.entrySet()) { + + for (Map.Entry<String, String> e : props.entrySet()) { envContext.property(e.getKey(), e.getValue()); } if (MockBackendUtils.startMockBackend(false)) { envContext.property("camel.vault.aws.accessKey", - p2.get("camel.component.aws-secrets-manager.access-key")); + props.get("camel.component.aws-secrets-manager.access-key")); envContext.property("camel.vault.aws.secretKey", - p2.get("camel.component.aws-secrets-manager.secret-key")); - envContext.property("camel.vault.aws.region", p2.get("camel.component.aws-secrets-manager.region")); + props.get("camel.component.aws-secrets-manager.secret-key")); + envContext.property("camel.vault.aws.region", props.get("camel.component.aws-secrets-manager.region")); } else { envContext.property("camel.vault.aws.accessKey", System.getenv("AWS_ACCESS_KEY")); envContext.property("camel.vault.aws.secretKey", System.getenv("AWS_SECRET_KEY")); diff --git a/integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerAbstractTest.java b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerUtil.java similarity index 88% rename from integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerAbstractTest.java rename to integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerUtil.java index cc76947c9e..3144f5885c 100644 --- a/integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerAbstractTest.java +++ b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerUtil.java @@ -30,9 +30,9 @@ import org.testcontainers.shaded.org.awaitility.Awaitility; import static org.hamcrest.CoreMatchers.is; -class AwsSecretsManagerAbstractTest { +class AwsSecretsManagerUtil { - protected String createSecret(String secretName, String secretValue) { + static String createSecret(String secretName, String secretValue) { String createdArn = Awaitility.await() .pollInterval(5, TimeUnit.SECONDS) .atMost(1, TimeUnit.MINUTES) @@ -54,7 +54,7 @@ class AwsSecretsManagerAbstractTest { return createdArn; } - protected void updateSecret(String secretArn, String newValue) { + static void updateSecret(String secretArn, String newValue) { RestAssured.given() .contentType(ContentType.JSON) .body(Collections.singletonMap(SecretsManagerConstants.SECRET_ID, secretArn)) @@ -65,17 +65,18 @@ class AwsSecretsManagerAbstractTest { .body(is("true")); } - protected Map<String, Boolean> listSecrets() { + static Map<String, Boolean> listSecrets(Integer maxResults) { return RestAssured.given() .contentType(ContentType.JSON) - .body(Collections.emptyMap()) + .body(maxResults == null ? Collections.emptyMap() + : Collections.singletonMap(SecretsManagerConstants.MAX_RESULTS, maxResults)) .post("/aws-secrets-manager/operation/" + SecretsManagerOperations.listSecrets) .then() .statusCode(201) .extract().as(Map.class); } - protected void deleteSecretImmediately(String arn) { + static void deleteSecretImmediately(String arn) { if (arn != null) { Log.info("Deleting secret: " + arn); RestAssured.given() diff --git a/integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextRefreshOnSecretRefreshIT.java similarity index 59% rename from integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java rename to integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextRefreshOnSecretRefreshIT.java index ce58b98d7d..872b716904 100644 --- a/integration-tests-jvm/aws-secrets-manager/src/main/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/AwsSecretsManagerRouteBuilder.java +++ b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextRefreshOnSecretRefreshIT.java @@ -16,20 +16,13 @@ */ package org.apache.camel.quarkus.component.aws.secrets.manager.it; -import jakarta.enterprise.context.ApplicationScoped; -import org.apache.camel.builder.RouteBuilder; +import io.quarkus.test.junit.QuarkusIntegrationTest; +import org.apache.camel.quarkus.test.EnabledIf; +import org.apache.camel.quarkus.test.mock.backend.MockBackendDisabled; -@ApplicationScoped -public class AwsSecretsManagerRouteBuilder extends RouteBuilder { +@QuarkusIntegrationTest +// disabled on Localstack due to https://docs.localstack.cloud/references/coverage/coverage_cloudtrail/#lookupevents +@EnabledIf(MockBackendDisabled.class) +class CamelContextRefreshOnSecretRefreshIT extends CamelContextRefreshOnSecretRefreshTest { - public static final String MSG_FIRST = "We have received the top secret message."; - public static final String MSG_SECOND = "We have received the updated top secret message."; - - @Override - public void configure() throws Exception { - from("direct:loadFirst") - .setBody(simple(MSG_FIRST)); - from("direct:loadSecond") - .setBody(simple(MSG_SECOND)); - } } diff --git a/integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextRefreshOnSecretRefreshTest.java b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextRefreshOnSecretRefreshTest.java similarity index 89% rename from integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextRefreshOnSecretRefreshTest.java rename to integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextRefreshOnSecretRefreshTest.java index 0a7d18f6a3..cd95540eb2 100644 --- a/integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextRefreshOnSecretRefreshTest.java +++ b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/CamelContextRefreshOnSecretRefreshTest.java @@ -30,7 +30,6 @@ import org.apache.camel.quarkus.test.EnabledIf; import org.apache.camel.quarkus.test.mock.backend.MockBackendDisabled; import org.apache.camel.quarkus.test.support.aws2.Aws2TestResource; import org.eclipse.microprofile.config.ConfigProvider; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.testcontainers.shaded.org.awaitility.Awaitility; @@ -41,14 +40,14 @@ import static org.hamcrest.CoreMatchers.is; @TestProfile(ContextReloadTestProfile.class) // disabled on Localstack due to https://docs.localstack.cloud/references/coverage/coverage_cloudtrail/#lookupevents @EnabledIf(MockBackendDisabled.class) -@Disabled("https://issues.apache.org/jira/browse/CAMEL-21324") -public class CamelContextRefreshOnSecretRefreshTest extends AwsSecretsManagerAbstractTest { +public class CamelContextRefreshOnSecretRefreshTest { @Test public void testCamelContextReloadOnSecretRefresh() { String secretArn = null; try { final String myUniqueSecretValue = "Uniqueee1234"; - secretArn = createSecret(ConfigProvider.getConfig().getValue("camel.vault.aws.secrets", String.class), + secretArn = AwsSecretsManagerUtil.createSecret( + ConfigProvider.getConfig().getValue("camel.vault.aws.secrets", String.class), myUniqueSecretValue); RestAssured.given() .contentType(ContentType.JSON) @@ -66,7 +65,7 @@ public class CamelContextRefreshOnSecretRefreshTest extends AwsSecretsManagerAbs .body(is("true")); }); } finally { - deleteSecretImmediately(secretArn); + AwsSecretsManagerUtil.deleteSecretImmediately(secretArn); } } } diff --git a/integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/ContextReloadTestProfile.java b/integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/ContextReloadTestProfile.java similarity index 100% rename from integration-tests-jvm/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/ContextReloadTestProfile.java rename to integration-test-groups/aws2/aws-secrets-manager/src/test/java/org/apache/camel/quarkus/component/aws/secrets/manager/it/ContextReloadTestProfile.java diff --git a/integration-tests-jvm/aws-secrets-manager/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer b/integration-test-groups/aws2/aws-secrets-manager/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer similarity index 100% rename from integration-tests-jvm/aws-secrets-manager/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer rename to integration-test-groups/aws2/aws-secrets-manager/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer diff --git a/integration-test-groups/aws2/pom.xml b/integration-test-groups/aws2/pom.xml index be4cfb9b37..9a78161665 100644 --- a/integration-test-groups/aws2/pom.xml +++ b/integration-test-groups/aws2/pom.xml @@ -37,6 +37,7 @@ <modules> <!-- extensions a..z; do not remove this comment, it is important when sorting via mvn process-resources -Pformat --> + <module>aws-secrets-manager</module> <module>aws2-cw</module> <module>aws2-ddb</module> <module>aws2-kinesis</module> diff --git a/integration-tests-jvm/pom.xml b/integration-tests-jvm/pom.xml index 288ef90232..c322351a65 100644 --- a/integration-tests-jvm/pom.xml +++ b/integration-tests-jvm/pom.xml @@ -35,7 +35,6 @@ <modules> <module>asn1</module> <module>asterisk</module> - <module>aws-secrets-manager</module> <module>aws-xray</module> <module>azure-cosmosdb</module> <module>azure-storage-datalake</module> diff --git a/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/BaseAws2Resource.java b/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/BaseAws2Resource.java index 14c3f3f636..b118da2145 100644 --- a/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/BaseAws2Resource.java +++ b/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/BaseAws2Resource.java @@ -40,12 +40,18 @@ public class BaseAws2Resource { private boolean useDefaultCredentials; - private final String serviceName; + private final String serviceName, componentName; private boolean clearAwsredentials; public BaseAws2Resource(String serviceName) { this.serviceName = serviceName; + this.componentName = null; + } + + public BaseAws2Resource(String serviceName, String componentName) { + this.serviceName = serviceName; + this.componentName = componentName; } @Path("/setUseDefaultCredentialsProvider") @@ -69,9 +75,10 @@ public class BaseAws2Resource { "Setting both System.properties `aws.secretAccessKey` and `aws.accessKeyId` to cover defaultCredentialsProviderTest."); //defaultCredentials provider gets the credentials from fixed location. One of them is system.properties, //therefore to succeed the test, system.properties has to be initialized with the values from the configuration + String component = componentName != null ? componentName : "camel.component.aws2-" + serviceName; Aws2Helper.setAwsSystemCredentials( - ConfigProvider.getConfig().getValue("camel.component.aws2-" + serviceName + ".access-key", String.class), - ConfigProvider.getConfig().getValue("camel.component.aws2-" + serviceName + ".secret-key", String.class)); + ConfigProvider.getConfig().getValue(component + ".access-key", String.class), + ConfigProvider.getConfig().getValue(component + ".secret-key", String.class)); } else { LOG.debug("Clearing both System.properties `aws.secretAccessKey` and `aws.accessKeyId`."); diff --git a/integration-tests-support/aws2/src/test/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java b/integration-tests-support/aws2/src/test/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java index 854c0d06bf..93688acc22 100644 --- a/integration-tests-support/aws2/src/test/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java +++ b/integration-tests-support/aws2/src/test/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java @@ -70,16 +70,16 @@ public class Aws2TestEnvContext { localstack.ifPresent(ls -> { for (Service service : exportCredentialsServices) { - String s = camelServiceAcronym(service); + String s = camelServiceComponentName(service); if (s != null) { if (credentialsProvider == CredentialsProvider.staticProvider) { - properties.put("camel.component.aws2-" + s + ".access-key", accessKey); - properties.put("camel.component.aws2-" + s + ".secret-key", secretKey); + properties.put(s + ".access-key", accessKey); + properties.put(s + ".secret-key", secretKey); } - properties.put("camel.component.aws2-" + s + ".region", region); + properties.put(s + ".region", region); - properties.put("camel.component.aws2-" + s + ".override-endpoint", "true"); - properties.put("camel.component.aws2-" + s + ".uri-endpoint-override", + properties.put(s + ".override-endpoint", "true"); + properties.put(s + ".uri-endpoint-override", ls.getEndpointOverride(service).toString()); } } @@ -105,19 +105,19 @@ public class Aws2TestEnvContext { */ public void removeClient(Service[] services) { for (Service service : services) { - String s = camelServiceAcronym(service); - properties.remove("camel.component.aws2-" + s + ".access-key"); - properties.remove("camel.component.aws2-" + s + ".secret-key"); - properties.remove("camel.component.aws2-" + s + ".region"); - properties.remove("camel.component.aws2-" + s + ".defaultCredentialsProvider"); + String s = camelServiceComponentName(service); + properties.remove(s + ".access-key"); + properties.remove(s + ".secret-key"); + properties.remove(s + ".region"); + properties.remove(s + ".defaultCredentialsProvider"); } } public void removeOverrideEndpoint(Service[] services) { for (Service service : services) { - String s = camelServiceAcronym(service); - properties.remove("camel.component.aws2-" + s + ".override-endpoint"); - properties.remove("camel.component.aws2-" + s + ".uri-endpoint-override"); + String s = camelServiceComponentName(service); + properties.remove(s + ".override-endpoint"); + properties.remove(s + ".uri-endpoint-override"); } } @@ -211,20 +211,20 @@ public class Aws2TestEnvContext { }); } - private static String camelServiceAcronym(Service service) { + private static String camelServiceComponentName(Service service) { switch (service) { case DYNAMODB: - return "ddb"; + return "camel.component.aws2-ddb"; case DYNAMODB_STREAMS: - return "ddbstream"; + return "camel.component.aws2-ddbstream"; case FIREHOSE: - return "kinesis-firehose"; + return "camel.component.aws2-kinesis-firehose"; case CLOUDWATCH: - return "cw"; + return "camel.component.aws2-cw"; case SECRETSMANAGER: - return "secrets-manager"; + return "camel.component.aws-secrets-manager"; default: - return service.name().toLowerCase(Locale.ROOT); + return "camel.component.aws2-" + service.name().toLowerCase(Locale.ROOT); } } diff --git a/integration-tests/aws2-grouped/pom.xml b/integration-tests/aws2-grouped/pom.xml index a82ea9a05e..9bbfdaad5f 100644 --- a/integration-tests/aws2-grouped/pom.xml +++ b/integration-tests/aws2-grouped/pom.xml @@ -48,10 +48,18 @@ <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-jackson</artifactId> </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-resteasy-jsonb</artifactId> + </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-multipart</artifactId> </dependency> + <dependency> + <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-cw</artifactId> @@ -88,6 +96,10 @@ <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> + </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-integration-tests-support-aws2</artifactId> @@ -197,6 +209,19 @@ </activation> <dependencies> <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory --> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-aws-secrets-manager-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-aws2-cw-deployment</artifactId> @@ -314,6 +339,19 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-direct-deployment</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>*</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> + </dependency> </dependencies> </profile> <profile>