This is an automated email from the ASF dual-hosted git repository.
zhfeng 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 abd2673 Fix #3169 to add S3 KMS encryption test (#3176)
abd2673 is described below
commit abd2673ecf4dc9ac0c62249c34af392867fb4018
Author: Amos Feng <[email protected]>
AuthorDate: Tue Oct 12 20:23:03 2021 +0800
Fix #3169 to add S3 KMS encryption test (#3176)
---
.../aws2-quarkus-client/aws2-s3/pom.xml | 17 +++
.../component/aws2/s3/it/Aws2S3Resource.java | 53 +++++++--
.../aws2/s3/it/Aws2S3QuarkusClientTest.java | 128 +++++++++++++--------
.../aws2/s3/it/Aws2S3TestEnvCustomizer.java | 22 +++-
integration-test-groups/aws2/aws2-s3/pom.xml | 17 +++
.../quarkus/component/aws2/Aws2S3Resource.java | 17 ++-
.../camel/quarkus/component/aws2/Aws2S3Test.java | 25 ++++
.../component/aws2/Aws2S3TestEnvCustomizer.java | 11 +-
.../test/support/aws2/Aws2TestEnvContext.java | 4 +
integration-tests/aws2-grouped/pom.xml | 17 +++
.../aws2-quarkus-client-grouped/pom.xml | 17 +++
11 files changed, 261 insertions(+), 67 deletions(-)
diff --git a/integration-test-groups/aws2-quarkus-client/aws2-s3/pom.xml
b/integration-test-groups/aws2-quarkus-client/aws2-s3/pom.xml
index 59edbe8..0461ca6 100644
--- a/integration-test-groups/aws2-quarkus-client/aws2-s3/pom.xml
+++ b/integration-test-groups/aws2-quarkus-client/aws2-s3/pom.xml
@@ -36,6 +36,10 @@
<artifactId>camel-quarkus-aws2-s3</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-aws2-kms</artifactId>
+ </dependency>
+ <dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-amazon-s3</artifactId>
</dependency>
@@ -73,6 +77,19 @@
<!-- 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-aws2-kms-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-s3-deployment</artifactId>
<version>${project.version}</version>
<type>pom</type>
diff --git
a/integration-test-groups/aws2-quarkus-client/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3Resource.java
b/integration-test-groups/aws2-quarkus-client/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3Resource.java
index 7a831d7..c0908e4 100644
---
a/integration-test-groups/aws2-quarkus-client/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3Resource.java
+++
b/integration-test-groups/aws2-quarkus-client/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3Resource.java
@@ -28,12 +28,14 @@ import java.nio.file.StandardOpenOption;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.stream.Collectors;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
+import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -72,11 +74,16 @@ public class Aws2S3Resource {
@ConfigProperty(name = "aws-s3.bucket-name")
String bucketName;
+ @ConfigProperty(name = "aws-s3.kms-key-id")
+ Optional<String> kmsKeyId;
+
@Path("s3/object/{key}")
@POST
@Consumes(MediaType.TEXT_PLAIN)
- public Response post(String message, @PathParam("key") String key) throws
Exception {
- producerTemplate.sendBodyAndHeader(componentUri(),
+ public Response post(String message, @PathParam("key") String key,
+ @QueryParam("useKms") @DefaultValue("false") boolean useKms)
throws Exception {
+ producerTemplate.sendBodyAndHeader(
+ componentUri() + (useKms && kmsKeyId.isPresent() ?
"?useAwsKMS=true&awsKMSKeyId=" + kmsKeyId : ""),
message,
AWS2S3Constants.KEY,
key);
@@ -86,13 +93,15 @@ public class Aws2S3Resource {
@Path("s3/object/{key}")
@GET
@Produces(MediaType.TEXT_PLAIN)
- public String get(@PathParam("key") String key, @QueryParam("bucket")
String bucket) throws Exception {
+ public String get(@PathParam("key") String key, @QueryParam("bucket")
String bucket,
+ @QueryParam("useKms") @DefaultValue("false") boolean useKms)
throws Exception {
if (bucket == null) {
bucket = bucketName;
}
return producerTemplate.requestBodyAndHeader(
- componentUri(bucket, AWS2S3Operations.getObject),
+ componentUri(bucket, AWS2S3Operations.getObject)
+ + (useKms && kmsKeyId.isPresent() ?
"&useAwsKMS=true&awsKMSKeyId=" + kmsKeyId : ""),
null,
AWS2S3Constants.KEY,
key,
@@ -118,21 +127,45 @@ public class Aws2S3Resource {
return Response.noContent().build();
}
+ @Path("s3/bucket/{bucketName}/object/{key}")
+ @DELETE
+ @Produces(MediaType.TEXT_PLAIN)
+ public Response read(@PathParam("bucketName") String bucketName,
@PathParam("key") String key) throws Exception {
+ producerTemplate.sendBodyAndHeader(
+ componentUri(bucketName, AWS2S3Operations.deleteObject),
+ null,
+ AWS2S3Constants.KEY,
+ key);
+ return Response.noContent().build();
+ }
+
@Path("s3/object-keys")
@GET
@Produces(MediaType.APPLICATION_JSON)
- public List<String> objectKey(@QueryParam("bucket") String bucket) throws
Exception {
- if (bucket == null) {
- bucket = bucketName;
- }
-
+ public List<String> objectKey() throws Exception {
final List<S3Object> objects = (List<S3Object>)
producerTemplate.requestBody(
- componentUri(bucket, AWS2S3Operations.listObjects) +
"&autoCreateBucket=true",
+ componentUri(AWS2S3Operations.listObjects),
null,
List.class);
return
objects.stream().map(S3Object::key).collect(Collectors.toList());
}
+ /**
+ * Do not forget to delete every bucket created through this endpoint
after the test.
+ *
+ * @param newBucketName
+ * @return
+ */
+ @Path("s3/autoCreateBucket/{newBucketName}")
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response autoCreateBucket(@PathParam("newBucketName") String
newBucketName) {
+ producerTemplate.sendBody(
+ componentUri(newBucketName, AWS2S3Operations.listObjects) +
"&autoCreateBucket=true",
+ null);
+ return Response.noContent().build();
+ }
+
@Path("s3/upload/{key}")
@POST
@Consumes(MediaType.TEXT_PLAIN)
diff --git
a/integration-test-groups/aws2-quarkus-client/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3QuarkusClientTest.java
b/integration-test-groups/aws2-quarkus-client/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3QuarkusClientTest.java
index 4223c1b..7f70d84 100644
---
a/integration-test-groups/aws2-quarkus-client/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3QuarkusClientTest.java
+++
b/integration-test-groups/aws2-quarkus-client/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3QuarkusClientTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.quarkus.component.aws2.s3.it;
+import java.util.Locale;
import java.util.UUID;
import java.util.stream.Stream;
@@ -128,6 +129,31 @@ class Aws2S3QuarkusClientTest {
}
@Test
+ public void testKms() throws Exception {
+ final String oid = UUID.randomUUID().toString();
+ final String blobContent = "Hello KMS " + oid;
+
+ // Create
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body(blobContent)
+ .post("/aws2/s3/object/" + oid + "?useKms=true")
+ .then()
+ .statusCode(201);
+
+ // Read
+ RestAssured.get("/aws2/s3/object/" + oid + "?useKms=true")
+ .then()
+ .statusCode(200)
+ .body(is(blobContent));
+
+ // Delete
+ RestAssured.delete("/aws2/s3/object/" + oid)
+ .then()
+ .statusCode(204);
+ }
+
+ @Test
public void upload() throws Exception {
final String oid = UUID.randomUUID().toString();
final String content = RandomStringUtils.randomAlphabetic(8 * 1024 *
1024);
@@ -150,13 +176,14 @@ class Aws2S3QuarkusClientTest {
}
@Test
- public void copyObject() throws Exception {
+ public void copyObjectDeleteBucket() throws Exception {
final String oid1 = UUID.randomUUID().toString();
final String oid2 = UUID.randomUUID().toString();
final String blobContent = "Hello " + oid1;
- final String bucket = "mycamel";
+ final String destinationBucket = "camel-quarkus-copy-object-"
+ +
RandomStringUtils.randomAlphanumeric(32).toLowerCase(Locale.ROOT);
- // Create
+ // Create an object to copy
RestAssured.given()
.contentType(ContentType.TEXT)
.body(blobContent)
@@ -164,26 +191,49 @@ class Aws2S3QuarkusClientTest {
.then()
.statusCode(201);
- // Check the dest bucket does not contain oid2
- final String[] objects = getAllObjects(bucket);
- Assertions.assertTrue(Stream.of(objects).noneMatch(key ->
key.equals(oid2)));
+ try {
+ autoCreateBucket(destinationBucket);
- // Copy
- RestAssured.given()
- .contentType(ContentType.URLENC)
- .formParam("dest_key", oid2)
- .formParam("dest_bucket", bucket)
- .post("/aws2/s3/copy/" + oid1)
- .then()
- .statusCode(204);
+ // Make sure the bucket was created
+ String[] buckets = getAllBuckets();
+ Assertions.assertTrue(Stream.of(buckets).anyMatch(key ->
key.equals(destinationBucket)));
- // Verify the object
- RestAssured.given()
- .contentType(ContentType.TEXT)
- .get("/aws2/s3/object/" + oid2 + "?bucket=" + bucket)
- .then()
- .statusCode(200)
- .body(is(blobContent));
+ // Copy
+ RestAssured.given()
+ .contentType(ContentType.URLENC)
+ .formParam("dest_key", oid2)
+ .formParam("dest_bucket", destinationBucket)
+ .post("/aws2/s3/copy/" + oid1)
+ .then()
+ .statusCode(204);
+
+ // Verify the object
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .get("/aws2/s3/object/" + oid2 + "?bucket=" +
destinationBucket)
+ .then()
+ .statusCode(200)
+ .body(is(blobContent));
+
+ } finally {
+ // Delete the object before deleting the bucket
+ try {
+ RestAssured.delete("/aws2/s3/bucket/" + destinationBucket +
"/object/" + oid2)
+ .then()
+ .statusCode(204);
+ } catch (Exception ignored) {
+ }
+
+ // Delete the bucket
+ RestAssured.delete("/aws2/s3/bucket/" + destinationBucket)
+ .then()
+ .statusCode(204);
+
+ // Make sure destinationBucket was really deleted
+ final String[] buckets = getAllBuckets();
+ Assertions.assertTrue(Stream.of(buckets).noneMatch(key ->
key.equals(destinationBucket)));
+
+ }
}
@@ -195,24 +245,6 @@ class Aws2S3QuarkusClientTest {
}
@Test
- void deleteBucket() throws Exception {
- final String bucket = "mycamel-delete";
-
- String[] objects = getAllObjects(bucket);
- Assertions.assertTrue(objects.length == 0);
-
- String[] buckets = getAllBuckets();
- Assertions.assertTrue(Stream.of(buckets).anyMatch(key ->
key.equals("mycamel-delete")));
-
- RestAssured.delete("/aws2/s3/bucket/" + bucket)
- .then()
- .statusCode(204);
-
- buckets = getAllBuckets();
- Assertions.assertTrue(Stream.of(buckets).noneMatch(key ->
key.equals("mycamel-delete")));
- }
-
- @Test
public void downloadLink() throws Exception {
final String oid = UUID.randomUUID().toString();
final String blobContent = "Hello " + oid;
@@ -256,16 +288,16 @@ class Aws2S3QuarkusClientTest {
.statusCode(201);
}
- private String[] getAllObjects(String bucket) {
- final String[] objects = RestAssured.given()
- .param("bucket", bucket)
- .get("/aws2/s3/object-keys")
+ /**
+ * Do not forget to delete every bucket you create!
+ *
+ * @param newBucketName
+ */
+ private void autoCreateBucket(String newBucketName) {
+ RestAssured.given()
+ .get("/aws2/s3/autoCreateBucket/" + newBucketName)
.then()
- .statusCode(200)
- .extract()
- .body().as(String[].class);
-
- return objects;
+ .statusCode(204);
}
private String[] getAllBuckets() {
diff --git
a/integration-test-groups/aws2-quarkus-client/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3TestEnvCustomizer.java
b/integration-test-groups/aws2-quarkus-client/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3TestEnvCustomizer.java
index 81deeb5..2a06ac7 100644
---
a/integration-test-groups/aws2-quarkus-client/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3TestEnvCustomizer.java
+++
b/integration-test-groups/aws2-quarkus-client/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/s3/it/Aws2S3TestEnvCustomizer.java
@@ -22,8 +22,11 @@ import java.util.Optional;
import org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvContext;
import org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer;
+import org.apache.camel.quarkus.test.support.aws2.Aws2TestResource;
import org.apache.commons.lang3.RandomStringUtils;
import org.testcontainers.containers.localstack.LocalStackContainer.Service;
+import software.amazon.awssdk.services.kms.KmsClient;
+import software.amazon.awssdk.services.kms.model.CreateKeyRequest;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;
@@ -32,22 +35,33 @@ public class Aws2S3TestEnvCustomizer implements
Aws2TestEnvCustomizer {
@Override
public Service[] localstackServices() {
- return new Service[] { Service.S3 };
+ return new Service[] { Service.S3, Service.KMS };
}
@Override
public void customize(Aws2TestEnvContext envContext) {
final S3Client s3Client = envContext.client(Service.S3,
S3Client::builder);
+ final KmsClient kmsClient = envContext.client(Service.KMS,
KmsClient::builder);
final String bucketName = "camel-quarkus-" +
RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT);
s3Client.createBucket(CreateBucketRequest.builder().bucket(bucketName).build());
envContext.property("aws-s3.bucket-name", bucketName);
envContext.closeable(() ->
s3Client.deleteBucket(DeleteBucketRequest.builder().bucket(bucketName).build()));
+ if (envContext.isLocalStack()) {
+ final String kmsKeyId =
kmsClient.createKey(CreateKeyRequest.builder().description("Test_key").build())
+ .keyMetadata().keyId();
+ envContext.property("aws-s3.kms-key-id", kmsKeyId);
+ }
+
Map<String, String> envContextProperties = envContext.getProperies();
- String accessKey =
envContextProperties.get("camel.component.aws2-s3.access-key");
- String secretKey =
envContextProperties.get("camel.component.aws2-s3.secret-key");
- String region =
envContextProperties.get("camel.component.aws2-s3.region");
+
+ String accessKey =
envContextProperties.getOrDefault("camel.component.aws2-s3.access-key",
+ System.getenv(Aws2TestResource.AWS_ACCESS_KEY));
+ String secretKey =
envContextProperties.getOrDefault("camel.component.aws2-s3.secret-key",
+ System.getenv(Aws2TestResource.AWS_SECRET_KEY));
+ String region =
envContextProperties.getOrDefault("camel.component.aws2-s3.region",
+ System.getenv(Aws2TestResource.AWS_REGION));
envContext.property("quarkus.s3.aws.credentials.static-provider.access-key-id",
accessKey);
envContext.property("quarkus.s3.aws.credentials.static-provider.secret-access-key",
secretKey);
diff --git a/integration-test-groups/aws2/aws2-s3/pom.xml
b/integration-test-groups/aws2/aws2-s3/pom.xml
index 2749fa3..8b260df 100644
--- a/integration-test-groups/aws2/aws2-s3/pom.xml
+++ b/integration-test-groups/aws2/aws2-s3/pom.xml
@@ -36,6 +36,10 @@
<artifactId>camel-quarkus-aws2-s3</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-aws2-kms</artifactId>
+ </dependency>
+ <dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
@@ -68,6 +72,19 @@
<!-- 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-aws2-kms-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-s3-deployment</artifactId>
<version>${project.version}</version>
<type>pom</type>
diff --git
a/integration-test-groups/aws2/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/Aws2S3Resource.java
b/integration-test-groups/aws2/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/Aws2S3Resource.java
index ac0dbe8..d0d6dc7 100644
---
a/integration-test-groups/aws2/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/Aws2S3Resource.java
+++
b/integration-test-groups/aws2/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/Aws2S3Resource.java
@@ -28,12 +28,14 @@ import java.nio.file.StandardOpenOption;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.stream.Collectors;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
+import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -68,11 +70,16 @@ public class Aws2S3Resource {
@ConfigProperty(name = "aws-s3.bucket-name")
String bucketName;
+ @ConfigProperty(name = "aws-s3.kms-key-id")
+ Optional<String> kmsKeyId;
+
@Path("s3/object/{key}")
@POST
@Consumes(MediaType.TEXT_PLAIN)
- public Response post(String message, @PathParam("key") String key) throws
Exception {
- producerTemplate.sendBodyAndHeader(componentUri(),
+ public Response post(String message, @PathParam("key") String key,
+ @QueryParam("useKms") @DefaultValue("false") boolean useKms)
throws Exception {
+ producerTemplate.sendBodyAndHeader(
+ componentUri() + (useKms && kmsKeyId.isPresent() ?
"?useAwsKMS=true&awsKMSKeyId=" + kmsKeyId : ""),
message,
AWS2S3Constants.KEY,
key);
@@ -82,13 +89,15 @@ public class Aws2S3Resource {
@Path("s3/object/{key}")
@GET
@Produces(MediaType.TEXT_PLAIN)
- public String get(@PathParam("key") String key, @QueryParam("bucket")
String bucket) throws Exception {
+ public String get(@PathParam("key") String key, @QueryParam("bucket")
String bucket,
+ @QueryParam("useKms") @DefaultValue("false") boolean useKms)
throws Exception {
if (bucket == null) {
bucket = bucketName;
}
return producerTemplate.requestBodyAndHeader(
- componentUri(bucket, AWS2S3Operations.getObject),
+ componentUri(bucket, AWS2S3Operations.getObject)
+ + (useKms && kmsKeyId.isPresent() ?
"&useAwsKMS=true&awsKMSKeyId=" + kmsKeyId : ""),
null,
AWS2S3Constants.KEY,
key,
diff --git
a/integration-test-groups/aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
b/integration-test-groups/aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
index 33f9b25..5c690e5 100644
---
a/integration-test-groups/aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
+++
b/integration-test-groups/aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
@@ -129,6 +129,31 @@ class Aws2S3Test {
}
@Test
+ public void testKms() throws Exception {
+ final String oid = UUID.randomUUID().toString();
+ final String blobContent = "Hello KMS " + oid;
+
+ // Create
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body(blobContent)
+ .post("/aws2/s3/object/" + oid + "?useKms=true")
+ .then()
+ .statusCode(201);
+
+ // Read
+ RestAssured.get("/aws2/s3/object/" + oid + "?useKms=true")
+ .then()
+ .statusCode(200)
+ .body(is(blobContent));
+
+ // Delete
+ RestAssured.delete("/aws2/s3/object/" + oid)
+ .then()
+ .statusCode(204);
+ }
+
+ @Test
public void upload() throws Exception {
final String oid = UUID.randomUUID().toString();
final String content = RandomStringUtils.randomAlphabetic(8 * 1024 *
1024);
diff --git
a/integration-test-groups/aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
b/integration-test-groups/aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
index d4e3b68..1f00152 100644
---
a/integration-test-groups/aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
+++
b/integration-test-groups/aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
@@ -22,6 +22,8 @@ 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.kms.KmsClient;
+import software.amazon.awssdk.services.kms.model.CreateKeyRequest;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;
@@ -30,17 +32,24 @@ public class Aws2S3TestEnvCustomizer implements
Aws2TestEnvCustomizer {
@Override
public Service[] localstackServices() {
- return new Service[] { Service.S3 };
+ return new Service[] { Service.S3, Service.KMS };
}
@Override
public void customize(Aws2TestEnvContext envContext) {
final S3Client s3Client = envContext.client(Service.S3,
S3Client::builder);
+ final KmsClient kmsClient = envContext.client(Service.KMS,
KmsClient::builder);
final String bucketName = "camel-quarkus-" +
RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT);
s3Client.createBucket(CreateBucketRequest.builder().bucket(bucketName).build());
envContext.property("aws-s3.bucket-name", bucketName);
envContext.closeable(() ->
s3Client.deleteBucket(DeleteBucketRequest.builder().bucket(bucketName).build()));
+
+ if (envContext.isLocalStack()) {
+ final String kmsKeyId =
kmsClient.createKey(CreateKeyRequest.builder().description("Test_key").build())
+ .keyMetadata().keyId();
+ envContext.property("aws-s3.kms-key-id", kmsKeyId);
+ }
}
}
diff --git
a/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java
b/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java
index 883a2a0..a6f827e 100644
---
a/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java
+++
b/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java
@@ -193,4 +193,8 @@ public class Aws2TestEnvContext {
public String getRegion() {
return region;
}
+
+ public boolean isLocalStack() {
+ return localstack.isPresent();
+ }
}
diff --git a/integration-tests/aws2-grouped/pom.xml
b/integration-tests/aws2-grouped/pom.xml
index 3062bba..41f3174 100644
--- a/integration-tests/aws2-grouped/pom.xml
+++ b/integration-tests/aws2-grouped/pom.xml
@@ -62,6 +62,10 @@
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-aws2-kms</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-aws2-lambda</artifactId>
</dependency>
<dependency>
@@ -153,6 +157,19 @@
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-aws2-kms-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-lambda-deployment</artifactId>
<version>${project.version}</version>
<type>pom</type>
diff --git a/integration-tests/aws2-quarkus-client-grouped/pom.xml
b/integration-tests/aws2-quarkus-client-grouped/pom.xml
index 8cc1fdc..5d0b49a 100644
--- a/integration-tests/aws2-quarkus-client-grouped/pom.xml
+++ b/integration-tests/aws2-quarkus-client-grouped/pom.xml
@@ -54,6 +54,10 @@
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-aws2-kms</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-aws2-s3</artifactId>
</dependency>
<dependency>
@@ -93,6 +97,19 @@
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-aws2-kms-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-s3-deployment</artifactId>
<version>${project.version}</version>
<type>pom</type>