You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2021/02/10 20:25:30 UTC

[camel-quarkus] branch master updated (9c38141 -> 290eade)

This is an automated email from the ASF dual-hosted git repository.

ppalaga pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git.


    from 9c38141  Use Java 15 as 14 is EOL
     new ca08206  Aws2TestEnvCustomizer SPI to allow running AWS 2 tests both isolated and dynamically grouped into one module
     new 290eade  Allow running AWS 2 tests both grouped and isolated

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../aws2-s3/README.adoc                            |   0
 .../aws2-s3/pom.xml                                |  14 +-
 .../quarkus/component/aws2/Aws2S3Resource.java     |   0
 .../src/main/resources/application.properties      |   0
 .../camel/quarkus/component/aws2/Aws2S3IT.java     |   0
 .../camel/quarkus/component/aws2/Aws2S3Test.java   |   3 +-
 .../component/aws2/Aws2S3TestEnvCustomizer.java    |  46 +++++++
 ...quarkus.test.support.aws2.Aws2TestEnvCustomizer |   1 +
 .../aws2-sqs-sns/README.adoc                       |   0
 .../aws2-sqs-sns/pom.xml                           |   2 +-
 .../component/aws2/sqs/it/Aws2SqsSnsResource.java  |   2 +-
 .../src/main/resources/application.properties      |   0
 .../component/aws2/sqs/it/Aws2SqsSnsIT.java        |   2 +-
 .../component/aws2/sqs/it/Aws2SqsSnsTest.java      |   5 +-
 .../aws2/sqs/it/Aws2SqsSnsTestEnvCustomizer.java   |  66 +++------
 ...quarkus.test.support.aws2.Aws2TestEnvCustomizer |   1 +
 .../pom.xml                                        |  18 ++-
 integration-tests-support/aws2/pom.xml             |  12 ++
 .../test/support/aws2/Aws2TestEnvContext.java      | 150 +++++++++++++++++++++
 .../test/support/aws2/Aws2TestEnvCustomizer.java   |  27 ++--
 .../test/support/aws2/Aws2TestResource.java        |  97 ++++---------
 integration-tests/aws2-grouped/README.adoc         |  19 +++
 integration-tests/{core => aws2-grouped}/pom.xml   | 139 +++++++++++++------
 .../quarkus/component/aws2/Aws2S3TestResource.java |  66 ---------
 integration-tests/pom.xml                          |   3 +-
 pom.xml                                            |   8 +-
 tooling/scripts/group-tests.groovy                 |  50 +++++++
 tooling/scripts/test-categories.yaml               |   3 +-
 28 files changed, 484 insertions(+), 250 deletions(-)
 rename {integration-tests => integration-tests-aws2}/aws2-s3/README.adoc (100%)
 rename {integration-tests => integration-tests-aws2}/aws2-s3/pom.xml (91%)
 rename {integration-tests => integration-tests-aws2}/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/Aws2S3Resource.java (100%)
 rename {integration-tests => integration-tests-aws2}/aws2-s3/src/main/resources/application.properties (100%)
 rename {integration-tests => integration-tests-aws2}/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3IT.java (100%)
 rename {integration-tests => integration-tests-aws2}/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java (97%)
 create mode 100644 integration-tests-aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
 create mode 100644 integration-tests-aws2/aws2-s3/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
 rename {integration-tests => integration-tests-aws2}/aws2-sqs-sns/README.adoc (100%)
 rename {integration-tests => integration-tests-aws2}/aws2-sqs-sns/pom.xml (98%)
 rename integration-tests/aws2-sqs-sns/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsResource.java => integration-tests-aws2/aws2-sqs-sns/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsResource.java (99%)
 rename {integration-tests => integration-tests-aws2}/aws2-sqs-sns/src/main/resources/application.properties (100%)
 rename integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsIT.java => integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsIT.java (96%)
 rename integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java => integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsTest.java (95%)
 rename integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestResource.java => integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsTestEnvCustomizer.java (67%)
 create mode 100644 integration-tests-aws2/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
 copy {extensions/mongodb-gridfs => integration-tests-aws2}/pom.xml (73%)
 create mode 100644 integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java
 copy extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledModelJAXBContextFactory.java => integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvCustomizer.java (57%)
 create mode 100644 integration-tests/aws2-grouped/README.adoc
 copy integration-tests/{core => aws2-grouped}/pom.xml (54%)
 delete mode 100644 integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestResource.java
 create mode 100644 tooling/scripts/group-tests.groovy


[camel-quarkus] 02/02: Allow running AWS 2 tests both grouped and isolated

Posted by pp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ppalaga pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 290eadede5f403572a55ac1f2abb22aca3ea2949
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Wed Feb 10 15:48:52 2021 +0100

    Allow running AWS 2 tests both grouped and isolated
---
 .../aws2-s3/README.adoc                            |   0
 .../aws2-s3/pom.xml                                |  14 ++-
 .../quarkus/component/aws2/Aws2S3Resource.java     |   0
 .../src/main/resources/application.properties      |   0
 .../camel/quarkus/component/aws2/Aws2S3IT.java     |   0
 .../camel/quarkus/component/aws2/Aws2S3Test.java   |   0
 .../component/aws2/Aws2S3TestEnvCustomizer.java    |   0
 ...quarkus.test.support.aws2.Aws2TestEnvCustomizer |   0
 .../aws2-sqs-sns/README.adoc                       |   0
 .../aws2-sqs-sns/pom.xml                           |   2 +-
 .../component/aws2/sqs/it/Aws2SqsSnsResource.java  |   2 +-
 .../src/main/resources/application.properties      |   0
 .../component/aws2/sqs/it/Aws2SqsSnsIT.java        |   2 +-
 .../component/aws2/sqs/it/Aws2SqsSnsTest.java      |   2 +-
 .../aws2/sqs/it/Aws2SqsSnsTestEnvCustomizer.java   |   2 +-
 ...quarkus.test.support.aws2.Aws2TestEnvCustomizer |   1 +
 integration-tests-aws2/pom.xml                     |  45 +++++++++
 integration-tests/aws2-grouped/README.adoc         |  19 ++++
 .../{aws2-sqs-sns => aws2-grouped}/pom.xml         | 112 +++++++++++++++++++--
 ...quarkus.test.support.aws2.Aws2TestEnvCustomizer |   1 -
 integration-tests/pom.xml                          |   3 +-
 pom.xml                                            |   8 +-
 tooling/scripts/group-tests.groovy                 |  50 +++++++++
 tooling/scripts/test-categories.yaml               |   3 +-
 24 files changed, 242 insertions(+), 24 deletions(-)

diff --git a/integration-tests/aws2-s3/README.adoc b/integration-tests-aws2/aws2-s3/README.adoc
similarity index 100%
rename from integration-tests/aws2-s3/README.adoc
rename to integration-tests-aws2/aws2-s3/README.adoc
diff --git a/integration-tests/aws2-s3/pom.xml b/integration-tests-aws2/aws2-s3/pom.xml
similarity index 91%
rename from integration-tests/aws2-s3/pom.xml
rename to integration-tests-aws2/aws2-s3/pom.xml
index 3430b7c..f7e0b71 100644
--- a/integration-tests/aws2-s3/pom.xml
+++ b/integration-tests-aws2/aws2-s3/pom.xml
@@ -20,7 +20,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-integration-tests</artifactId>
+        <artifactId>camel-quarkus-integration-tests-aws2</artifactId>
         <version>1.7.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
@@ -29,6 +29,18 @@
     <name>Camel Quarkus :: Integration Tests :: AWS2 S3</name>
     <description>The camel integration tests</description>
 
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.camel.quarkus</groupId>
+                <artifactId>camel-quarkus-bom-test</artifactId>
+                <version>${project.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
diff --git a/integration-tests/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/Aws2S3Resource.java b/integration-tests-aws2/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/Aws2S3Resource.java
similarity index 100%
rename from integration-tests/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/Aws2S3Resource.java
rename to integration-tests-aws2/aws2-s3/src/main/java/org/apache/camel/quarkus/component/aws2/Aws2S3Resource.java
diff --git a/integration-tests/aws2-s3/src/main/resources/application.properties b/integration-tests-aws2/aws2-s3/src/main/resources/application.properties
similarity index 100%
rename from integration-tests/aws2-s3/src/main/resources/application.properties
rename to integration-tests-aws2/aws2-s3/src/main/resources/application.properties
diff --git a/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3IT.java b/integration-tests-aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3IT.java
similarity index 100%
rename from integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3IT.java
rename to integration-tests-aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3IT.java
diff --git a/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java b/integration-tests-aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
similarity index 100%
rename from integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
rename to integration-tests-aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
diff --git a/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java b/integration-tests-aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
similarity index 100%
rename from integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
rename to integration-tests-aws2/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
diff --git a/integration-tests/aws2-s3/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer b/integration-tests-aws2/aws2-s3/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
similarity index 100%
rename from integration-tests/aws2-s3/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
rename to integration-tests-aws2/aws2-s3/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
diff --git a/integration-tests/aws2-sqs-sns/README.adoc b/integration-tests-aws2/aws2-sqs-sns/README.adoc
similarity index 100%
rename from integration-tests/aws2-sqs-sns/README.adoc
rename to integration-tests-aws2/aws2-sqs-sns/README.adoc
diff --git a/integration-tests/aws2-sqs-sns/pom.xml b/integration-tests-aws2/aws2-sqs-sns/pom.xml
similarity index 98%
copy from integration-tests/aws2-sqs-sns/pom.xml
copy to integration-tests-aws2/aws2-sqs-sns/pom.xml
index 962ea6f..a83ec15 100644
--- a/integration-tests/aws2-sqs-sns/pom.xml
+++ b/integration-tests-aws2/aws2-sqs-sns/pom.xml
@@ -23,7 +23,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-integration-tests</artifactId>
+        <artifactId>camel-quarkus-integration-tests-aws2</artifactId>
         <version>1.7.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
diff --git a/integration-tests/aws2-sqs-sns/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsResource.java b/integration-tests-aws2/aws2-sqs-sns/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsResource.java
similarity index 99%
rename from integration-tests/aws2-sqs-sns/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsResource.java
rename to integration-tests-aws2/aws2-sqs-sns/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsResource.java
index cfc1325..228740b 100644
--- a/integration-tests/aws2-sqs-sns/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsResource.java
+++ b/integration-tests-aws2/aws2-sqs-sns/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsResource.java
@@ -37,7 +37,7 @@ import software.amazon.awssdk.services.sqs.model.ListQueuesResponse;
 
 @Path("/aws2-sqs-sns")
 @ApplicationScoped
-public class Aws2SqsResource {
+public class Aws2SqsSnsResource {
 
     @ConfigProperty(name = "aws-sqs.queue-name")
     String queueName;
diff --git a/integration-tests/aws2-sqs-sns/src/main/resources/application.properties b/integration-tests-aws2/aws2-sqs-sns/src/main/resources/application.properties
similarity index 100%
rename from integration-tests/aws2-sqs-sns/src/main/resources/application.properties
rename to integration-tests-aws2/aws2-sqs-sns/src/main/resources/application.properties
diff --git a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsIT.java b/integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsIT.java
similarity index 96%
rename from integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsIT.java
rename to integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsIT.java
index 4212303..efe8d68 100644
--- a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsIT.java
+++ b/integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsIT.java
@@ -21,6 +21,6 @@ import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
 
 @NativeImageTest
 @EnabledIfEnvironmentVariable(named = "AWS_ACCESS_KEY", matches = "[a-zA-Z0-9]+") // TODO https://github.com/apache/camel-quarkus/issues/2216
-class Aws2SqsIT extends Aws2SqsTest {
+class Aws2SqsSnsIT extends Aws2SqsSnsTest {
 
 }
diff --git a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java b/integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsTest.java
similarity index 99%
rename from integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java
rename to integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsTest.java
index ddc912d..d55b8d5 100644
--- a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java
+++ b/integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsTest.java
@@ -39,7 +39,7 @@ import static org.hamcrest.core.Is.is;
 @QuarkusTestResource(Aws2TestResource.class)
 @EnabledIfEnvironmentVariable(named = "AWS_ACCESS_KEY", matches = "[a-zA-Z0-9]+") // TODO
                                                                                   // https://github.com/apache/camel-quarkus/issues/2216
-class Aws2SqsTest {
+class Aws2SqsSnsTest {
 
     @Test
     public void sqs() {
diff --git a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java b/integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsTestEnvCustomizer.java
similarity index 98%
rename from integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java
rename to integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsTestEnvCustomizer.java
index b4231b1..fb9d980 100644
--- a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java
+++ b/integration-tests-aws2/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsSnsTestEnvCustomizer.java
@@ -36,7 +36,7 @@ import software.amazon.awssdk.services.sqs.model.GetQueueAttributesRequest;
 import software.amazon.awssdk.services.sqs.model.QueueAttributeName;
 import software.amazon.awssdk.services.sqs.model.SetQueueAttributesRequest;
 
-public class Aws2SqsTestEnvCustomizer implements Aws2TestEnvCustomizer {
+public class Aws2SqsSnsTestEnvCustomizer implements Aws2TestEnvCustomizer {
 
     @Override
     public Service[] localstackServices() {
diff --git a/integration-tests-aws2/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer b/integration-tests-aws2/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
new file mode 100644
index 0000000..d1971b8
--- /dev/null
+++ b/integration-tests-aws2/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
@@ -0,0 +1 @@
+org.apache.camel.quarkus.component.aws2.sqs.it.Aws2SqsSnsTestEnvCustomizer
\ No newline at end of file
diff --git a/integration-tests-aws2/pom.xml b/integration-tests-aws2/pom.xml
new file mode 100644
index 0000000..0448a1c
--- /dev/null
+++ b/integration-tests-aws2/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.camel.quarkus</groupId>
+        <artifactId>camel-quarkus-build-parent-it</artifactId>
+        <version>1.7.0-SNAPSHOT</version>
+        <relativePath>../poms/build-parent-it/pom.xml</relativePath>
+    </parent>
+
+    <artifactId>camel-quarkus-integration-tests-aws2</artifactId>
+    <packaging>pom</packaging>
+
+    <name>Camel Quarkus :: AWS 2 Integration Tests</name>
+
+    <properties>
+        <quarkus.banner.enabled>false</quarkus.banner.enabled>
+    </properties>
+
+    <modules>
+        <!-- extensions a..z; do not remove this comment, it is important when sorting via  mvn process-resources -Pformat -->
+        <module>aws2-s3</module>
+        <module>aws2-sqs-sns</module>
+    </modules>
+
+</project>
diff --git a/integration-tests/aws2-grouped/README.adoc b/integration-tests/aws2-grouped/README.adoc
new file mode 100644
index 0000000..6c00519
--- /dev/null
+++ b/integration-tests/aws2-grouped/README.adoc
@@ -0,0 +1,19 @@
+== AWS 2 grouped integration tests
+
+This module allows executing all tests from `integration-tests-aws2/*` grouped together.
+
+While grouping brings the benefit of faster native compilation
+(compared to the sum of compilation times of all modules under `integration-tests-aws2/*`)
+it is methodologically not as clean as running those tests in isolation.
+Hence, this module is intended to be run instead of the tests under `integration-tests-aws2/*`
+if, in the given situation, the speed matters more than isolation.
+
+=== How the grouping works
+
+The grouped module dynamically pulls all sources from the individual AWS test modules to its
+`target/[test-]classes` directories.
+`application.properties` files and service descriptors are concatenated using a Groovy script.
+
+=== Mock backend vs. real service
+
+Please refer to the README files in `integration-tests-aws2` for more details.
diff --git a/integration-tests/aws2-sqs-sns/pom.xml b/integration-tests/aws2-grouped/pom.xml
similarity index 51%
rename from integration-tests/aws2-sqs-sns/pom.xml
rename to integration-tests/aws2-grouped/pom.xml
index 962ea6f..c97c364 100644
--- a/integration-tests/aws2-sqs-sns/pom.xml
+++ b/integration-tests/aws2-grouped/pom.xml
@@ -17,20 +17,17 @@
     limitations under the License.
 
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
         <artifactId>camel-quarkus-integration-tests</artifactId>
         <version>1.7.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
     </parent>
+    <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-quarkus-integration-test-aws2-sqs-sns</artifactId>
-    <name>Camel Quarkus :: Integration Tests :: AWS 2 SQS and SNS</name>
-    <description>Integration tests for SQS and SNS extensions</description>
+    <artifactId>camel-quarkus-integration-test-aws2-grouped</artifactId>
+    <name>Camel Quarkus :: Integration Tests :: AWS2 Grouped</name>
+    <description>AWS 2 tests from ../integration-tests-aws2 merged together</description>
 
     <dependencyManagement>
         <dependencies>
@@ -47,7 +44,7 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-main</artifactId>
+            <artifactId>camel-quarkus-aws2-s3</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
@@ -57,6 +54,7 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-aws2-sqs</artifactId>
         </dependency>
+
         <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy</artifactId>
@@ -65,6 +63,10 @@
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy-jackson</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-main</artifactId>
+        </dependency>
 
         <!-- test dependencies -->
         <dependency>
@@ -91,6 +93,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-s3-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-sns-deployment</artifactId>
             <version>${project.version}</version>
             <type>pom</type>
@@ -102,8 +117,6 @@
                 </exclusion>
             </exclusions>
         </dependency>
-
-        <!-- 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-sqs-deployment</artifactId>
@@ -130,8 +143,85 @@
                 </exclusion>
             </exclusions>
         </dependency>
+
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>add-sources</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                            <goal>add-resource</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>${maven.multiModuleProjectDirectory}/integration-tests-aws2/aws2-s3/src/main/java</source>
+                                <source>${maven.multiModuleProjectDirectory}/integration-tests-aws2/aws2-sqs-sns/src/main/java</source>
+                            </sources>
+                            <resources>
+                                <resource>
+                                    <directory>${maven.multiModuleProjectDirectory}/integration-tests-aws2/aws2-s3/src/main/resources</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${maven.multiModuleProjectDirectory}/integration-tests-aws2/aws2-sqs-sns/src/main/resources</directory>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>add-test-sources</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-test-source</goal>
+                            <goal>add-test-resource</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>${maven.multiModuleProjectDirectory}/integration-tests-aws2/aws2-s3/src/test/java</source>
+                                <source>${maven.multiModuleProjectDirectory}/integration-tests-aws2/aws2-sqs-sns/src/test/java</source>
+                            </sources>
+                            <resources>
+                                <resource>
+                                    <directory>${maven.multiModuleProjectDirectory}/integration-tests-aws2/aws2-s3/src/test/resources</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${maven.multiModuleProjectDirectory}/integration-tests-aws2/aws2-sqs-sns/src/test/resources</directory>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.gmaven</groupId>
+                <artifactId>groovy-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>group-sources</id>
+                        <goals>
+                            <goal>execute</goal>
+                        </goals>
+                        <phase>generate-sources</phase>
+                        <configuration>
+                            <source>file:///${maven.multiModuleProjectDirectory}/tooling/scripts/group-tests.groovy</source>
+                            <properties>
+                                <group-tests.source.dir>${maven.multiModuleProjectDirectory}/integration-tests-aws2</group-tests.source.dir>
+                                <group-tests.dest.module.dir>${project.basedir}</group-tests.dest.module.dir>
+                                <group-tests.concat.rel.paths>src/main/resources/application.properties,src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer</group-tests.concat.rel.paths>
+                            </properties>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
     <profiles>
         <profile>
             <id>native</id>
diff --git a/integration-tests/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer b/integration-tests/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
deleted file mode 100644
index 544add9..0000000
--- a/integration-tests/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.camel.quarkus.component.aws2.sqs.it.Aws2SqsTestEnvCustomizer
\ No newline at end of file
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index a936147..b2455af 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -68,8 +68,7 @@
         <module>avro-rpc</module>
         <module>aws</module>
         <module>aws2</module>
-        <module>aws2-s3</module>
-        <module>aws2-sqs-sns</module>
+        <module>aws2-grouped</module>
         <module>azure</module>
         <module>azure-eventhubs</module>
         <module>azure-storage-blob</module>
diff --git a/pom.xml b/pom.xml
index 18d7f03..7148774 100644
--- a/pom.xml
+++ b/pom.xml
@@ -201,6 +201,7 @@
         <module>catalog</module>
         <module>integration-tests-support</module>
         <module>integration-tests</module>
+        <module>integration-tests-aws2</module>
         <module>docs</module>
     </modules>
 
@@ -783,6 +784,7 @@
                                         <sortModulesPath>extensions/pom.xml</sortModulesPath>
                                         <sortModulesPath>extensions-jvm/pom.xml</sortModulesPath>
                                         <sortModulesPath>integration-tests/pom.xml</sortModulesPath>
+                                        <sortModulesPath>integration-tests-aws2/pom.xml</sortModulesPath>
                                     </sortModulesPaths>
                                     <sortDependencyManagementPaths>
                                         <sortDependencyManagementPath>poms/bom/pom.xml</sortDependencyManagementPath>
@@ -793,6 +795,7 @@
                                             <includes>
                                                 <include>extensions-jvm/*/integration-test/pom.xml</include>
                                                 <include>integration-tests/*/pom.xml</include>
+                                                <include>integration-tests-aws2/*/pom.xml</include>
                                             </includes>
                                         </updateVirtualDependency>
                                     </updateVirtualDependencies>
@@ -827,9 +830,10 @@
                                         </extensionDir>
                                     </extensionDirs>
                                     <removeEmptyApplicationProperties>
-                                        <directory>${basedir}/integration-tests</directory>
+                                        <directory>${basedir}</directory>
                                         <includes>
-                                            <include>*/src/main/resources/application.properties</include>
+                                            <include>integration-tests/*/src/main/resources/application.properties</include>
+                                            <include>integration-tests-aws2/*/src/main/resources/application.properties</include>
                                         </includes>
                                     </removeEmptyApplicationProperties>
                                 </configuration>
diff --git a/tooling/scripts/group-tests.groovy b/tooling/scripts/group-tests.groovy
new file mode 100644
index 0000000..5b71408
--- /dev/null
+++ b/tooling/scripts/group-tests.groovy
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+
+/**
+ * Group tests in a directory to a single Maven module
+ */
+import java.nio.file.Path
+import java.nio.file.Paths
+import java.nio.file.Files
+import java.util.stream.Stream
+import java.util.stream.Collectors
+import java.util.regex.Pattern
+import java.util.regex.Matcher
+
+
+final Path sourceDir = Paths.get(properties['group-tests.source.dir'])
+final String[] concatRelPaths = properties['group-tests.concat.rel.paths'].split('[\\s,]+')
+final Path destinationModuleDir = Paths.get(properties['group-tests.dest.module.dir'])
+
+final Map<String, StringBuilder> mergedFiles = new HashMap<>()
+concatRelPaths.each {relPath -> mergedFiles.put(relPath, new StringBuilder())}
+
+Files.list(sourceDir)
+    .filter {p -> Files.exists(p.resolve('pom.xml'))}
+    .sorted()
+    .forEach {p ->
+        mergedFiles.each { relPath, sb -> sb.append(p.resolve(relPath).getText('UTF-8') + '\n') }
+    }
+
+mergedFiles.each { relPath, sb ->
+    String destRelPath = relPath.replace('src/main/resources/', 'target/classes/').replace('src/test/resources/', 'target/test-classes/')
+    Path destPath = destinationModuleDir.resolve(destRelPath)
+    Files.createDirectories(destPath.getParent())
+    Files.write(destPath, sb.toString().getBytes('UTF-8'))
+}
+
diff --git a/tooling/scripts/test-categories.yaml b/tooling/scripts/test-categories.yaml
index 26dcb9a..e11f229 100644
--- a/tooling/scripts/test-categories.yaml
+++ b/tooling/scripts/test-categories.yaml
@@ -166,8 +166,7 @@ platform:
   - rest
   - rest-openapi
   - csimple
-  - aws2-s3
-  - aws2-sqs-sns
+  - aws2-grouped
 saas:
   - box
   - github


[camel-quarkus] 01/02: Aws2TestEnvCustomizer SPI to allow running AWS 2 tests both isolated and dynamically grouped into one module

Posted by pp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ppalaga pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit ca08206e2a8a79a670db7af15f341531f74d997e
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Tue Feb 9 23:19:52 2021 +0100

    Aws2TestEnvCustomizer SPI to allow running AWS 2 tests both isolated and dynamically grouped into one module
---
 integration-tests-support/aws2/pom.xml             |  12 ++
 .../test/support/aws2/Aws2TestEnvContext.java      | 150 +++++++++++++++++++++
 .../test/support/aws2/Aws2TestEnvCustomizer.java   |  38 ++++++
 .../test/support/aws2/Aws2TestResource.java        |  97 ++++---------
 .../camel/quarkus/component/aws2/Aws2S3Test.java   |   3 +-
 .../component/aws2/Aws2S3TestEnvCustomizer.java    |  46 +++++++
 .../quarkus/component/aws2/Aws2S3TestResource.java |  66 ---------
 ...quarkus.test.support.aws2.Aws2TestEnvCustomizer |   1 +
 .../quarkus/component/aws2/sqs/it/Aws2SqsTest.java |   3 +-
 ...Resource.java => Aws2SqsTestEnvCustomizer.java} |  66 +++------
 ...quarkus.test.support.aws2.Aws2TestEnvCustomizer |   1 +
 11 files changed, 299 insertions(+), 184 deletions(-)

diff --git a/integration-tests-support/aws2/pom.xml b/integration-tests-support/aws2/pom.xml
index 2bcc8a6..93c2d55 100644
--- a/integration-tests-support/aws2/pom.xml
+++ b/integration-tests-support/aws2/pom.xml
@@ -54,6 +54,18 @@
             <groupId>org.testcontainers</groupId>
             <artifactId>localstack</artifactId>
         </dependency>
+        <dependency>
+            <groupId>software.amazon.awssdk</groupId>
+            <artifactId>auth</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>software.amazon.awssdk</groupId>
+            <artifactId>aws-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>software.amazon.awssdk</groupId>
+            <artifactId>sdk-core</artifactId>
+        </dependency>
         <dependency><!-- Workaround for https://github.com/testcontainers/testcontainers-java/issues/1442 -->
             <groupId>com.amazonaws</groupId>
             <artifactId>aws-java-sdk-core</artifactId>
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
new file mode 100644
index 0000000..52477c9
--- /dev/null
+++ b/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvContext.java
@@ -0,0 +1,150 @@
+/*
+ * 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.test.support.aws2;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.ListIterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Supplier;
+
+import org.jboss.logging.Logger;
+import org.testcontainers.containers.localstack.LocalStackContainer;
+import org.testcontainers.containers.localstack.LocalStackContainer.Service;
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.awscore.client.builder.AwsClientBuilder;
+import software.amazon.awssdk.core.SdkClient;
+import software.amazon.awssdk.regions.Region;
+
+/**
+ * A context passed to {@link Aws2TestEnvCustomizer#customize(Aws2TestEnvContext)}.
+ */
+public class Aws2TestEnvContext {
+    private static final Logger LOG = Logger.getLogger(Aws2TestEnvContext.class);
+    private final ArrayList<AutoCloseable> closeables = new ArrayList<>();
+    private final Map<String, String> properties = new LinkedHashMap<>();
+    private final String accessKey;
+    private final String secretKey;
+    private final String region;
+    private final Optional<LocalStackContainer> localstack;
+
+    public Aws2TestEnvContext(String accessKey, String secretKey, String region, Optional<LocalStackContainer> localstack,
+            Service... services) {
+        this.accessKey = accessKey;
+        this.secretKey = secretKey;
+        this.region = region;
+        this.localstack = localstack;
+
+        localstack.ifPresent(ls -> {
+            for (Service service : services) {
+                String s = serviceKey(service);
+                properties.put("camel.component.aws2-" + s + ".access-key", accessKey);
+                properties.put("camel.component.aws2-" + s + ".secret-key", secretKey);
+                properties.put("camel.component.aws2-" + s + ".region", region);
+
+                switch (service) {
+                case SQS:
+                case SNS:
+                    // TODO https://github.com/apache/camel-quarkus/issues/2216
+                    break;
+                default:
+                    properties.put("camel.component.aws2-" + s + ".override-endpoint", "true");
+                    properties.put("camel.component.aws2-" + s + ".uri-endpoint-override",
+                            ls.getEndpointOverride(service).toString());
+                    break;
+                }
+            }
+        });
+    }
+
+    /**
+     * Add a key-value pair to the system properties seen by AWS 2 tests
+     * 
+     * @param  key
+     * @param  value
+     * @return       this {@link Aws2TestEnvContext}
+     */
+    public Aws2TestEnvContext property(String key, String value) {
+        properties.put(key, value);
+        return this;
+    }
+
+    /**
+     * Add an {@link AutoCloseable} to be closed after running AWS 2 tests
+     * 
+     * @param  closeable the {@link AutoCloseable} to add
+     * @return           this {@link Aws2TestEnvContext}
+     */
+    public Aws2TestEnvContext closeable(AutoCloseable closeable) {
+        closeables.add(closeable);
+        return this;
+    }
+
+    /**
+     * @return a read-only view of {@link #properties}
+     */
+    public Map<String, String> getProperies() {
+        return Collections.unmodifiableMap(properties);
+    }
+
+    /**
+     * Close all {@link AutoCloseable}s registered via {@link #closeable(AutoCloseable)}
+     */
+    public void close() {
+        ListIterator<AutoCloseable> it = closeables.listIterator(closeables.size());
+        while (it.hasPrevious()) {
+            AutoCloseable c = it.previous();
+            try {
+                c.close();
+            } catch (Exception e) {
+                LOG.warnf(e, "Could not close %s", c);
+            }
+        }
+    }
+
+    /**
+     * Create a new AWS 2 client and register it for closing after running AWS 2 tests.
+     *
+     * @param  <B>
+     * @param  <C>
+     * @param  service
+     * @param  builderSupplier
+     * @return                 a new client
+     */
+    public <B extends AwsClientBuilder<B, C>, C extends SdkClient> C client(
+            Service service,
+            Supplier<B> builderSupplier) {
+        B builder = builderSupplier.get()
+                .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(
+                        accessKey, secretKey)))
+                .region(Region.of(region));
+        if (localstack.isPresent()) {
+            builder.endpointOverride(localstack.get().getEndpointOverride(service));
+        }
+        final C client = builder.build();
+        closeables.add(client);
+        return client;
+    }
+
+    private static String serviceKey(Service service) {
+        return service.name().toLowerCase(Locale.ROOT);
+    }
+}
diff --git a/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvCustomizer.java b/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvCustomizer.java
new file mode 100644
index 0000000..c479f00
--- /dev/null
+++ b/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestEnvCustomizer.java
@@ -0,0 +1,38 @@
+/*
+ * 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.test.support.aws2;
+
+import org.testcontainers.containers.localstack.LocalStackContainer.Service;
+
+/**
+ * An SPI to allow individual AWS 2 test modules to customize the {@link Aws2TestResource}.
+ * At the same time, this SPI should allow running the AWS 2 test modules both isolated and merged together.
+ */
+public interface Aws2TestEnvCustomizer {
+
+    /**
+     * @return an array of services the Localstack container should expose
+     */
+    Service[] localstackServices();
+
+    /**
+     * Customize the given {@link Aws2TestEnvContext}
+     *
+     * @param envContext the {@link Aws2TestEnvContext} to customize
+     */
+    void customize(Aws2TestEnvContext envContext);
+}
diff --git a/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestResource.java b/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestResource.java
index 3fd5dc9..f7ae407 100644
--- a/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestResource.java
+++ b/integration-tests-support/aws2/src/main/java/org/apache/camel/quarkus/test/support/aws2/Aws2TestResource.java
@@ -17,10 +17,11 @@
 package org.apache.camel.quarkus.test.support.aws2;
 
 import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.ListIterator;
-import java.util.Locale;
+import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.ServiceLoader;
+import java.util.stream.Stream;
 
 import org.apache.camel.quarkus.test.mock.backend.MockBackendUtils;
 import org.apache.camel.quarkus.testcontainers.ContainerResourceLifecycleManager;
@@ -29,28 +30,10 @@ import org.testcontainers.containers.localstack.LocalStackContainer;
 import org.testcontainers.containers.localstack.LocalStackContainer.Service;
 import org.testcontainers.utility.DockerImageName;
 
-public abstract class Aws2TestResource implements ContainerResourceLifecycleManager {
-
+public final class Aws2TestResource implements ContainerResourceLifecycleManager {
     private static final Logger LOG = Logger.getLogger(Aws2TestResource.class);
 
-    protected final ArrayList<AutoCloseable> closeables = new ArrayList<>();
-
-    protected final Service[] services;
-
-    protected LocalStackContainer localstack;
-
-    protected boolean usingMockBackend;
-
-    protected String accessKey;
-    protected String secretKey;
-    protected String region;
-
-    public Aws2TestResource(Service first, Service... other) {
-        final Service[] s = new Service[other.length + 1];
-        s[0] = first;
-        System.arraycopy(other, 0, s, 1, other.length);
-        this.services = s;
-    }
+    private Aws2TestEnvContext envContext;
 
     @SuppressWarnings("resource")
     @Override
@@ -60,20 +43,28 @@ public abstract class Aws2TestResource implements ContainerResourceLifecycleMana
         final String realRegion = System.getenv("AWS_REGION");
         final boolean realCredentialsProvided = realKey != null && realSecret != null && realRegion != null;
         final boolean startMockBackend = MockBackendUtils.startMockBackend(false);
-        final Map<String, String> result = new LinkedHashMap<>();
-        usingMockBackend = startMockBackend && !realCredentialsProvided;
+        final boolean usingMockBackend = startMockBackend && !realCredentialsProvided;
+
+        ServiceLoader<Aws2TestEnvCustomizer> loader = ServiceLoader.load(Aws2TestEnvCustomizer.class);
+        List<Aws2TestEnvCustomizer> customizers = new ArrayList<>();
+        for (Aws2TestEnvCustomizer customizer : loader) {
+            LOG.info("Loaded Aws2TestEnvCustomizer " + customizer.getClass().getName());
+            customizers.add(customizer);
+        }
         if (usingMockBackend) {
             MockBackendUtils.logMockBackendUsed();
-            this.localstack = new LocalStackContainer(DockerImageName.parse("localstack/localstack:0.12.6"))
+
+            final Service[] services = customizers.stream()
+                    .map(Aws2TestEnvCustomizer::localstackServices)
+                    .flatMap((Service[] ss) -> Stream.of(ss))
+                    .toArray(Service[]::new);
+
+            LocalStackContainer localstack = new LocalStackContainer(DockerImageName.parse("localstack/localstack:0.12.6"))
                     .withServices(services);
-            closeables.add(localstack);
             localstack.start();
 
-            this.accessKey = localstack.getAccessKey();
-            this.secretKey = localstack.getSecretKey();
-            this.region = localstack.getRegion();
-
-            setMockProperties(result);
+            envContext = new Aws2TestEnvContext(localstack.getAccessKey(), localstack.getSecretKey(), localstack.getRegion(),
+                    Optional.of(localstack), services);
 
         } else {
             if (!startMockBackend && !realCredentialsProvided) {
@@ -81,49 +72,17 @@ public abstract class Aws2TestResource implements ContainerResourceLifecycleMana
                         "Set AWS_ACCESS_KEY, AWS_SECRET_KEY and AWS_REGION env vars if you set CAMEL_QUARKUS_START_MOCK_BACKEND=false");
             }
             MockBackendUtils.logRealBackendUsed();
-            this.accessKey = realKey;
-            this.secretKey = realSecret;
-            this.region = realRegion;
+            envContext = new Aws2TestEnvContext(realKey, realSecret, realRegion, Optional.empty());
         }
 
-        return result;
-    }
-
-    protected void setMockProperties(final Map<String, String> result) {
-        for (Service service : services) {
-            String s = serviceKey(service);
-            result.put("camel.component.aws2-" + s + ".access-key", accessKey);
-            result.put("camel.component.aws2-" + s + ".secret-key", secretKey);
-            result.put("camel.component.aws2-" + s + ".region", region);
-
-            switch (service) {
-            case SQS:
-            case SNS:
-                // TODO https://github.com/apache/camel-quarkus/issues/2216
-                break;
-            default:
-                result.put("camel.component.aws2-" + s + ".override-endpoint", "true");
-                result.put("camel.component.aws2-" + s + ".uri-endpoint-override",
-                        localstack.getEndpointOverride(service).toString());
-                break;
-            }
-        }
-    }
+        customizers.forEach(customizer -> customizer.customize(envContext));
 
-    protected String serviceKey(Service service) {
-        return service.name().toLowerCase(Locale.ROOT);
+        return envContext.getProperies();
     }
 
     @Override
     public void stop() {
-        ListIterator<AutoCloseable> it = closeables.listIterator(closeables.size());
-        while (it.hasPrevious()) {
-            AutoCloseable c = it.previous();
-            try {
-                c.close();
-            } catch (Exception e) {
-                LOG.warnf(e, "Could not close %s", c);
-            }
-        }
+        envContext.close();
     }
+
 }
diff --git a/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java b/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
index ecff5ce..372818b 100644
--- a/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
+++ b/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3Test.java
@@ -23,13 +23,14 @@ import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
+import org.apache.camel.quarkus.test.support.aws2.Aws2TestResource;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.core.Is.is;
 
 @QuarkusTest
-@QuarkusTestResource(Aws2S3TestResource.class)
+@QuarkusTestResource(Aws2TestResource.class)
 class Aws2S3Test {
 
     @Test
diff --git a/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java b/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
new file mode 100644
index 0000000..d4e3b68
--- /dev/null
+++ b/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestEnvCustomizer.java
@@ -0,0 +1,46 @@
+/*
+ * 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.aws2;
+
+import java.util.Locale;
+
+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.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
+import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;
+
+public class Aws2S3TestEnvCustomizer implements Aws2TestEnvCustomizer {
+
+    @Override
+    public Service[] localstackServices() {
+        return new Service[] { Service.S3 };
+    }
+
+    @Override
+    public void customize(Aws2TestEnvContext envContext) {
+        final S3Client s3Client = envContext.client(Service.S3, S3Client::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()));
+    }
+
+}
diff --git a/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestResource.java b/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestResource.java
deleted file mode 100644
index 37debcf..0000000
--- a/integration-tests/aws2-s3/src/test/java/org/apache/camel/quarkus/component/aws2/Aws2S3TestResource.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.aws2;
-
-import java.util.Collections;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.camel.quarkus.test.support.aws2.Aws2TestResource;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.testcontainers.containers.localstack.LocalStackContainer;
-import org.testcontainers.containers.localstack.LocalStackContainer.Service;
-import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
-import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
-import software.amazon.awssdk.regions.Region;
-import software.amazon.awssdk.services.s3.S3Client;
-import software.amazon.awssdk.services.s3.S3ClientBuilder;
-import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
-import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;
-
-public class Aws2S3TestResource extends Aws2TestResource {
-
-    public Aws2S3TestResource() {
-        super(Service.S3);
-    }
-
-    @Override
-    public Map<String, String> start() {
-        Map<String, String> result = super.start();
-
-        final S3ClientBuilder clientBuilder = S3Client
-                .builder()
-                .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(
-                        localstack.getAccessKey(), localstack.getSecretKey())))
-                .region(Region.of(localstack.getRegion()));
-        if (usingMockBackend) {
-            clientBuilder.endpointOverride(localstack.getEndpointOverride(LocalStackContainer.Service.S3));
-        }
-        final S3Client s3Client = clientBuilder.build();
-
-        final String bucketName = "camel-quarkus-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT);
-        s3Client.createBucket(CreateBucketRequest.builder().bucket(bucketName).build());
-        result.put("aws-s3.bucket-name", bucketName);
-        closeables.add(() -> {
-            s3Client.deleteBucket(DeleteBucketRequest.builder().bucket(bucketName).build());
-            s3Client.close();
-        });
-
-        return Collections.unmodifiableMap(result);
-    }
-
-}
diff --git a/integration-tests/aws2-s3/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer b/integration-tests/aws2-s3/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
new file mode 100644
index 0000000..e024c2b
--- /dev/null
+++ b/integration-tests/aws2-s3/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
@@ -0,0 +1 @@
+org.apache.camel.quarkus.component.aws2.Aws2S3TestEnvCustomizer
\ No newline at end of file
diff --git a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java b/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java
index c03d349..ddc912d 100644
--- a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java
+++ b/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java
@@ -24,6 +24,7 @@ import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
+import org.apache.camel.quarkus.test.support.aws2.Aws2TestResource;
 import org.awaitility.Awaitility;
 import org.eclipse.microprofile.config.Config;
 import org.eclipse.microprofile.config.ConfigProvider;
@@ -35,7 +36,7 @@ import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
 import static org.hamcrest.core.Is.is;
 
 @QuarkusTest
-@QuarkusTestResource(Aws2SqsTestResource.class)
+@QuarkusTestResource(Aws2TestResource.class)
 @EnabledIfEnvironmentVariable(named = "AWS_ACCESS_KEY", matches = "[a-zA-Z0-9]+") // TODO
                                                                                   // https://github.com/apache/camel-quarkus/issues/2216
 class Aws2SqsTest {
diff --git a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestResource.java b/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java
similarity index 67%
rename from integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestResource.java
rename to integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java
index 83ce701..b4231b1 100644
--- a/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestResource.java
+++ b/integration-tests/aws2-sqs-sns/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java
@@ -18,99 +18,75 @@ package org.apache.camel.quarkus.component.aws2.sqs.it;
 
 import java.util.Collections;
 import java.util.Locale;
-import java.util.Map;
 
-import org.apache.camel.quarkus.test.support.aws2.Aws2TestResource;
+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;
 import org.testcontainers.containers.localstack.LocalStackContainer.Service;
-import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
-import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
-import software.amazon.awssdk.regions.Region;
 import software.amazon.awssdk.services.sns.SnsClient;
-import software.amazon.awssdk.services.sns.SnsClientBuilder;
 import software.amazon.awssdk.services.sns.model.CreateTopicRequest;
 import software.amazon.awssdk.services.sns.model.DeleteTopicRequest;
 import software.amazon.awssdk.services.sns.model.ListSubscriptionsByTopicRequest;
 import software.amazon.awssdk.services.sns.model.Subscription;
 import software.amazon.awssdk.services.sns.model.UnsubscribeRequest;
 import software.amazon.awssdk.services.sqs.SqsClient;
-import software.amazon.awssdk.services.sqs.SqsClientBuilder;
 import software.amazon.awssdk.services.sqs.model.CreateQueueRequest;
 import software.amazon.awssdk.services.sqs.model.DeleteQueueRequest;
 import software.amazon.awssdk.services.sqs.model.GetQueueAttributesRequest;
 import software.amazon.awssdk.services.sqs.model.QueueAttributeName;
 import software.amazon.awssdk.services.sqs.model.SetQueueAttributesRequest;
 
-public class Aws2SqsTestResource extends Aws2TestResource {
+public class Aws2SqsTestEnvCustomizer implements Aws2TestEnvCustomizer {
 
-    public Aws2SqsTestResource() {
-        super(Service.SQS, Service.SNS);
+    @Override
+    public Service[] localstackServices() {
+        return new Service[] { Service.SQS, Service.SNS };
     }
 
     @Override
-    public Map<String, String> start() {
-        Map<String, String> result = super.start();
+    public void customize(Aws2TestEnvContext envContext) {
 
         /* SQS */
         final String queueName = "camel-quarkus-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT);
-        result.put("aws-sqs.queue-name", queueName);
-
-        final SqsClientBuilder clientBuilder = SqsClient
-                .builder()
-                .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKey, secretKey)))
-                .region(Region.of(region));
-        if (usingMockBackend) {
-            clientBuilder.endpointOverride(localstack.getEndpointOverride(LocalStackContainer.Service.SQS));
-        }
-        final SqsClient sqsClient = clientBuilder.build();
+        envContext.property("aws-sqs.queue-name", queueName);
+
+        final SqsClient sqsClient = envContext.client(Service.SQS, SqsClient::builder);
         {
             final String queueUrl = sqsClient.createQueue(
                     CreateQueueRequest.builder()
                             .queueName(queueName)
                             .build())
                     .queueUrl();
-            closeables.add(() -> {
-                sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(queueUrl).build());
-                sqsClient.close();
-            });
+            envContext.closeable(() -> sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(queueUrl).build()));
         }
 
         /* SNS */
         {
             final String topicName = "camel-quarkus-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT);
-            result.put("aws-sns.topic-name", topicName);
+            envContext.property("aws-sns.topic-name", topicName);
 
-            final SnsClientBuilder snsClientBuilder = SnsClient
-                    .builder()
-                    .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKey, secretKey)))
-                    .region(Region.of(region));
-            if (usingMockBackend) {
-                snsClientBuilder.endpointOverride(localstack.getEndpointOverride(LocalStackContainer.Service.SQS));
-            }
-            final SnsClient snsClient = snsClientBuilder.build();
+            final SnsClient snsClient = envContext.client(Service.SNS, SnsClient::builder);
 
             final String topicArn = snsClient.createTopic(CreateTopicRequest.builder().name(topicName).build()).topicArn();
 
-            closeables.add(() -> {
+            envContext.closeable(() -> {
                 snsClient.listSubscriptionsByTopic(ListSubscriptionsByTopicRequest.builder().topicArn(topicArn).build())
                         .subscriptions()
                         .stream()
                         .map(Subscription::subscriptionArn)
                         .forEach(arn -> snsClient.unsubscribe(UnsubscribeRequest.builder().subscriptionArn(arn).build()));
                 snsClient.deleteTopic(DeleteTopicRequest.builder().topicArn(topicArn).build());
-                snsClient.close();
             });
 
             final String snsReceiverQueueName = "camel-quarkus-sns-receiver-"
                     + RandomStringUtils.randomAlphanumeric(30).toLowerCase(Locale.ROOT);
-            result.put("aws-sqs.sns-receiver-queue-name", snsReceiverQueueName);
+            envContext.property("aws-sqs.sns-receiver-queue-name", snsReceiverQueueName);
             final String snsReceiverQueueUrl = sqsClient.createQueue(
                     CreateQueueRequest.builder()
                             .queueName(snsReceiverQueueName)
                             .build())
                     .queueUrl();
-            result.put("aws2-sqs.sns-receiver-queue-url", snsReceiverQueueUrl);
+            envContext.property("aws2-sqs.sns-receiver-queue-url", snsReceiverQueueUrl);
 
             /*
              * We need queue ARN instead of queue URL when creating a subscription of an SQS Queue to an SNS Topic
@@ -123,7 +99,7 @@ public class Aws2SqsTestResource extends Aws2TestResource {
                             .build())
                     .attributesAsStrings()
                     .get("QueueArn");
-            result.put("aws2-sqs.sns-receiver-queue-arn", snsReceiverQueueArn);
+            envContext.property("aws2-sqs.sns-receiver-queue-arn", snsReceiverQueueArn);
 
             final String policy = "{"
                     + "  \"Version\": \"2008-10-17\","
@@ -149,13 +125,9 @@ public class Aws2SqsTestResource extends Aws2TestResource {
                                             policy))
                             .build());
 
-            closeables.add(() -> {
-                sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(snsReceiverQueueUrl).build());
-            });
-
+            envContext
+                    .closeable(() -> sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(snsReceiverQueueUrl).build()));
         }
 
-        return Collections.unmodifiableMap(result);
     }
-
 }
diff --git a/integration-tests/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer b/integration-tests/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
new file mode 100644
index 0000000..544add9
--- /dev/null
+++ b/integration-tests/aws2-sqs-sns/src/test/resources/META-INF/services/org.apache.camel.quarkus.test.support.aws2.Aws2TestEnvCustomizer
@@ -0,0 +1 @@
+org.apache.camel.quarkus.component.aws2.sqs.it.Aws2SqsTestEnvCustomizer
\ No newline at end of file