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

oscerd pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-kamelets.git


The following commit(s) were added to refs/heads/main by this push:
     new 34dd734be chore: Migrate AWS tests from LocalStack to Floci and add 
sink tests (#2913)
34dd734be is described below

commit 34dd734beda7105dfebeb241c8e5592479856d50
Author: Andrea Cosentino <[email protected]>
AuthorDate: Thu Jul 9 15:08:36 2026 +0200

    chore: Migrate AWS tests from LocalStack to Floci and add sink tests (#2913)
    
    * chore: Migrate AWS tests from LocalStack to Floci and add sink tests
    
    LocalStack's community edition was sunset in March 2026, now requiring
    auth tokens. This migrates all AWS integration tests to use Floci, the
    MIT-licensed drop-in replacement, via Citrus's native floci support in
    citrus-testcontainers.
    
    Also migrates all Pipe-format integration definitions to Camel route
    YAML format (issue #2873) and adds new Citrus integration tests for
    aws-s3-sink, aws-sqs-sink, and aws-sns-sink kamelets.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    Signed-off-by: Andrea Cosentino <[email protected]>
    
    * fix: Add camel-aws2-sns test dependency for SNS sink test
    
    The SNS sink test Groovy script imports SnsClient which requires
    the camel-aws2-sns dependency on the test classpath. Without it,
    all AWS tests fail with ClassNotFoundException.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    Signed-off-by: Andrea Cosentino <[email protected]>
    
    ---------
    
    Signed-off-by: Andrea Cosentino <[email protected]>
    Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
---
 tests/camel-kamelets-itest/pom.xml                 |  5 ++
 .../camel-kamelets-itest/src/test/java/AwsIT.java  |  5 ++
 .../citrus-application.properties                  |  4 ++
 ...ws-ddb-sink-delete-item.citrus.it.yaml.disabled |  4 +-
 .../aws-ddb-sink-put-item.citrus.it.yaml.disabled  |  4 +-
 .../aws-ddb-sink-route.yaml}                       | 46 ++++++-------
 ...ws-ddb-sink-update-item.citrus.it.yaml.disabled |  4 +-
 .../aws-ddb-source-route.yaml}                     | 40 +++++------
 .../aws/ddb/aws-ddb-source.citrus.it.yaml.disabled |  6 +-
 .../aws/eventbridge/aws-eventbridge-sink-pipe.yaml | 51 --------------
 .../aws-eventbridge-sink-route.yaml}               | 56 +++++++--------
 .../aws-eventbridge-sink.citrus.it.yaml            |  8 +--
 .../aws-sqs-event-listener-route.yaml}             | 39 ++++-------
 .../aws/kinesis/aws-kinesis-sink-pipe.yaml         | 56 ---------------
 ...ource-pipe.yaml => aws-kinesis-sink-route.yaml} | 46 ++++++-------
 .../aws/kinesis/aws-kinesis-sink.citrus.it.yaml    |  4 +-
 .../aws-kinesis-source-route.yaml}                 | 40 ++++-------
 .../aws/kinesis/aws-kinesis-source.citrus.it.yaml  |  6 +-
 .../src/test/resources/aws/s3/README.md            |  6 +-
 .../aws-s3-sink-route.citrus.it.yaml}              | 58 ++++++++--------
 ...aws-s3-uri-pipe.yaml => aws-s3-sink-route.yaml} | 45 ++++++------
 .../aws-s3-source-route.yaml}                      | 40 +++++------
 .../aws/s3/aws-s3-source-to-http-route.yaml        | 54 +++++++++++++++
 .../resources/aws/s3/aws-s3-to-http.citrus.it.yaml |  6 +-
 .../src/test/resources/aws/s3/aws-s3-to-http.yaml  | 79 ----------------------
 .../aws/s3/aws-s3-to-log-uri-based.citrus.it.yaml  |  2 +-
 .../aws/s3/aws-s3-uri-pipe.citrus.it.yaml          |  6 +-
 .../src/test/resources/aws/s3/getS3Object.groovy   | 42 ++++++++++++
 .../aws-sns-sink-route.citrus.it.yaml}             | 60 ++++++++++------
 .../aws-sns-sink-route.yaml}                       | 43 ++++++------
 .../aws-sqs-sns-event-listener.yaml}               | 36 ++++------
 .../test/resources/aws/sns/setupSnsToSqs.groovy    | 53 +++++++++++++++
 .../src/test/resources/aws/sqs/README.md           |  6 +-
 ...-pipe.yaml => aws-sqs-sink-event-listener.yaml} | 36 ++++------
 ...s.it.yaml => aws-sqs-sink-route.citrus.it.yaml} | 46 +++++++++----
 ...s-sqs-uri-pipe.yaml => aws-sqs-sink-route.yaml} | 43 ++++++------
 ...sqs-uri-pipe.yaml => aws-sqs-source-route.yaml} | 39 ++++-------
 .../sqs/aws-sqs-to-log-uri-based.citrus.it.yaml    |  2 +-
 .../aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml        |  6 +-
 39 files changed, 523 insertions(+), 609 deletions(-)

diff --git a/tests/camel-kamelets-itest/pom.xml 
b/tests/camel-kamelets-itest/pom.xml
index e2ac3b1fc..edf3884fc 100644
--- a/tests/camel-kamelets-itest/pom.xml
+++ b/tests/camel-kamelets-itest/pom.xml
@@ -98,6 +98,11 @@
             <artifactId>camel-aws2-eventbridge</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-aws2-sns</artifactId>
+            <scope>test</scope>
+        </dependency>
 
         <!-- Citrus -->
         <dependency>
diff --git a/tests/camel-kamelets-itest/src/test/java/AwsIT.java 
b/tests/camel-kamelets-itest/src/test/java/AwsIT.java
index ee67f5826..b1a364815 100644
--- a/tests/camel-kamelets-itest/src/test/java/AwsIT.java
+++ b/tests/camel-kamelets-itest/src/test/java/AwsIT.java
@@ -84,4 +84,9 @@ public class AwsIT {
         return 
CitrusTestFactorySupport.factory(TestLoader.YAML).packageScan("aws.eventbridge");
     }
 
+    @CitrusTestFactory
+    public Stream<DynamicTest> awsSns() {
+        return 
CitrusTestFactorySupport.factory(TestLoader.YAML).packageScan("aws.sns");
+    }
+
 }
diff --git 
a/tests/camel-kamelets-itest/src/test/resources-filtered/citrus-application.properties
 
b/tests/camel-kamelets-itest/src/test/resources-filtered/citrus-application.properties
index 970d0593b..1d5528b21 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources-filtered/citrus-application.properties
+++ 
b/tests/camel-kamelets-itest/src/test/resources-filtered/citrus-application.properties
@@ -32,6 +32,10 @@ citrus.camel.jbang.kamelets.version=${project.version}
 # Enable dump of Camel JBang integration output
 citrus.camel.jbang.dump.integration.output=true
 
+# Use Floci as the AWS emulator (drop-in replacement for LocalStack)
+citrus.testcontainers.localstack.image.name=floci/floci
+citrus.testcontainers.localstack.version=latest
+
 # Use general registry mirror for Docker images (e.g. Testcontainers)
 citrus.testcontainers.registry.mirror=mirror.gcr.io
 citrus.testcontainers.registry.mirror.enabled=false
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-delete-item.citrus.it.yaml.disabled
 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-delete-item.citrus.it.yaml.disabled
index 5d8e87d5c..e9ddacdc6 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-delete-item.citrus.it.yaml.disabled
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-delete-item.citrus.it.yaml.disabled
@@ -26,7 +26,7 @@ variables:
   - name: "timer.source.period"
     value: "10000"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -86,7 +86,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/ddb/aws-ddb-sink-pipe.yaml"
+            file: "aws/ddb/aws-ddb-sink-route.yaml"
             systemProperties:
               properties:
                 - name: "timer.source.period"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-put-item.citrus.it.yaml.disabled
 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-put-item.citrus.it.yaml.disabled
index 93146ea4d..83b85c5e3 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-put-item.citrus.it.yaml.disabled
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-put-item.citrus.it.yaml.disabled
@@ -26,7 +26,7 @@ variables:
   - name: "timer.source.period"
     value: "10000"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -73,7 +73,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/ddb/aws-ddb-sink-pipe.yaml"
+            file: "aws/ddb/aws-ddb-sink-route.yaml"
             systemProperties:
               properties:
                 - name: "timer.source.period"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-sqs-event-listener-pipe.yaml
 b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-route.yaml
similarity index 57%
rename from 
tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-sqs-event-listener-pipe.yaml
rename to 
tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-route.yaml
index 6e4fe1695..a1dbca82f 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-sqs-event-listener-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-route.yaml
@@ -15,27 +15,25 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-sqs-event-listener-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-sqs-source
-    properties:
-      queueNameOrArn: "{{aws.sqs.queueName}}"
-      uriEndpointOverride: "{{aws.eventbridge.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.eventbridge.overrideEndpoint}}"
-      accessKey: "{{aws.eventbridge.accessKey}}"
-      secretKey: "{{aws.eventbridge.secretKey}}"
-      region: "{{aws.eventbridge.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "timer:tick"
+      parameters:
+        period: "{{timer.source.period}}"
+        repeatCount: 1
+      steps:
+      - setBody:
+          constant: "{{aws.ddb.json.data}}"
+      - log:
+          message: "${body}"
+          showHeaders: true
+      - to:
+          uri: "kamelet:aws-ddb-sink"
+          parameters:
+            table: "{{aws.ddb.tableName}}"
+            operation: "{{aws.ddb.operation}}"
+            overrideEndpoint: "{{aws.ddb.overrideEndpoint}}"
+            uriEndpointOverride: "{{aws.ddb.uriEndpointOverride}}"
+            accessKey: "{{aws.ddb.accessKey}}"
+            secretKey: "{{aws.ddb.secretKey}}"
+            region: "{{aws.ddb.region}}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-update-item.citrus.it.yaml.disabled
 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-update-item.citrus.it.yaml.disabled
index 0765021e8..d00e46924 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-update-item.citrus.it.yaml.disabled
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-update-item.citrus.it.yaml.disabled
@@ -26,7 +26,7 @@ variables:
   - name: "timer.source.period"
     value: "10000"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -91,7 +91,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/ddb/aws-ddb-sink-pipe.yaml"
+            file: "aws/ddb/aws-ddb-sink-route.yaml"
             systemProperties:
               properties:
                 - name: "timer.source.period"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-route.yaml
similarity index 60%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-route.yaml
index 7155c8c50..d02c29974 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-route.yaml
@@ -15,27 +15,19 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-sqs-uri-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-sqs-source
-    properties:
-      queueNameOrArn: "{{aws.sqs.queueName}}"
-      uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
-      accessKey: "{{aws.sqs.accessKey}}"
-      secretKey: "{{aws.sqs.secretKey}}"
-      region: "{{aws.sqs.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "kamelet:aws-ddb-streams-source"
+      parameters:
+        streamIteratorType: "FROM_START"
+        table: "{{aws.ddb.tableName}}"
+        overrideEndpoint: "{{aws.ddb.overrideEndpoint}}"
+        uriEndpointOverride: "{{aws.ddb.uriEndpointOverride}}"
+        accessKey: "{{aws.ddb.accessKey}}"
+        secretKey: "{{aws.ddb.secretKey}}"
+        region: "{{aws.ddb.region}}"
+      steps:
+      - to:
+          uri: "kamelet:log-sink"
+          parameters:
+            showHeaders: true
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source.citrus.it.yaml.disabled
 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source.citrus.it.yaml.disabled
index a133e36b6..0c309905b 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source.citrus.it.yaml.disabled
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source.citrus.it.yaml.disabled
@@ -30,7 +30,7 @@ variables:
   - name: "aws.ddb.item.title"
     value: "Star Wars IV"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -50,7 +50,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/ddb/aws-ddb-source-pipe.yaml"
+            file: "aws/ddb/aws-ddb-source-route.yaml"
             systemProperties:
               file: "aws/ddb/application.properties"
 
@@ -62,6 +62,6 @@ actions:
   - camel:
       jbang:
         verify:
-          integration: "aws-ddb-source-pipe"
+          integration: "aws-ddb-source-route"
           logMessage: |
             "Star Wars IV"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink-pipe.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink-pipe.yaml
deleted file mode 100644
index d73252705..000000000
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink-pipe.yaml
+++ /dev/null
@@ -1,51 +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.
-# ---------------------------------------------------------------------------
-
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-eventbridge-sink-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: timer-source
-    properties:
-      period: '{{timer.source.period}}'
-      message: '{{aws.eventbridge.json.data}}'
-  steps:
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1
-        name: log-action
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-eventbridge-sink
-    properties:
-      eventbusNameOrArn: '{{aws.eventbridge.eventbusName}}'
-      overrideEndpoint: '{{aws.eventbridge.overrideEndpoint}}'
-      uriEndpointOverride: '{{aws.eventbridge.uriEndpointOverride}}'
-      accessKey: '{{aws.eventbridge.accessKey}}'
-      secretKey: '{{aws.eventbridge.secretKey}}'
-      region: '{{aws.eventbridge.region}}'
-      resourcesArn: '{{aws.eventbridge.resourcesArn}}'
-      eventSource: '{{aws.eventbridge.eventSource}}'
-      eventSourcePrefix: '{{aws.eventbridge.eventSourcePrefix}}'
-      detailType: '{{aws.eventbridge.detailType}}'
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-pipe.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink-route.yaml
similarity index 50%
rename from 
tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-pipe.yaml
rename to 
tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink-route.yaml
index e473e75a3..76642738c 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink-route.yaml
@@ -15,36 +15,26 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-ddb-sink-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: timer-source
-    properties:
-      period: "{{timer.source.period}}"
-      message: "{{aws.ddb.json.data}}"
-  steps:
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1
-        name: log-action
-      properties:
-        showHeaders: true
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-ddb-sink
-    properties:
-      table: "{{aws.ddb.tableName}}"
-      operation: "{{aws.ddb.operation}}"
-      overrideEndpoint: "{{aws.ddb.overrideEndpoint}}"
-      uriEndpointOverride: "{{aws.ddb.uriEndpointOverride}}"
-      accessKey: "{{aws.ddb.accessKey}}"
-      secretKey: "{{aws.ddb.secretKey}}"
-      region: "{{aws.ddb.region}}"
+- route:
+    from:
+      uri: "timer:tick"
+      parameters:
+        period: "{{timer.source.period}}"
+        repeatCount: 1
+      steps:
+      - setBody:
+          constant: "{{aws.eventbridge.json.data}}"
+      - log: "${body}"
+      - to:
+          uri: "kamelet:aws-eventbridge-sink"
+          parameters:
+            eventbusNameOrArn: "{{aws.eventbridge.eventbusName}}"
+            overrideEndpoint: "{{aws.eventbridge.overrideEndpoint}}"
+            uriEndpointOverride: "{{aws.eventbridge.uriEndpointOverride}}"
+            accessKey: "{{aws.eventbridge.accessKey}}"
+            secretKey: "{{aws.eventbridge.secretKey}}"
+            region: "{{aws.eventbridge.region}}"
+            resourcesArn: "{{aws.eventbridge.resourcesArn}}"
+            eventSource: "{{aws.eventbridge.eventSource}}"
+            eventSourcePrefix: "{{aws.eventbridge.eventSourcePrefix}}"
+            detailType: "{{aws.eventbridge.detailType}}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink.citrus.it.yaml
index ae5c09944..cc197dcd0 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink.citrus.it.yaml
@@ -37,7 +37,7 @@ variables:
   - name: "timer.source.period"
     value: "10000"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -59,7 +59,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/eventbridge/aws-eventbridge-sink-pipe.yaml"
+            file: "aws/eventbridge/aws-eventbridge-sink-route.yaml"
             systemProperties:
               properties:
                 - name: "timer.source.period"
@@ -73,7 +73,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/eventbridge/aws-sqs-event-listener-pipe.yaml"
+            file: "aws/eventbridge/aws-sqs-event-listener-route.yaml"
             systemProperties:
               properties:
                 - name: "aws.sqs.queueName"
@@ -84,6 +84,6 @@ actions:
   - camel:
       jbang:
         verify:
-          integration: "aws-sqs-event-listener-pipe"
+          integration: "aws-sqs-event-listener-route"
           logMessage: |
             "detail":{"message":"Hello AWS EventBridge!"}
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source-pipe.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-sqs-event-listener-route.yaml
similarity index 59%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source-pipe.yaml
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-sqs-event-listener-route.yaml
index f85692cc6..8809635e8 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-sqs-event-listener-route.yaml
@@ -15,27 +15,18 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-kinesis-source-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-kinesis-source
-    properties:
-      stream: '{{aws.kinesis.streamName}}'
-      overrideEndpoint: '{{aws.kinesis.overrideEndpoint}}'
-      uriEndpointOverride: '{{aws.kinesis.uriEndpointOverride}}'
-      accessKey: '{{aws.kinesis.accessKey}}'
-      secretKey: '{{aws.kinesis.secretKey}}'
-      region: '{{aws.kinesis.region}}'
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-      properties:
-        showHeaders: true
+- route:
+    from:
+      uri: "kamelet:aws-sqs-source"
+      parameters:
+        queueNameOrArn: "{{aws.sqs.queueName}}"
+        uriEndpointOverride: "{{aws.eventbridge.uriEndpointOverride}}"
+        overrideEndpoint: "{{aws.eventbridge.overrideEndpoint}}"
+        accessKey: "{{aws.eventbridge.accessKey}}"
+        secretKey: "{{aws.eventbridge.secretKey}}"
+        region: "{{aws.eventbridge.region}}"
+      steps:
+      - to:
+          uri: "kamelet:log-sink"
+          parameters:
+            showHeaders: true
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-pipe.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-pipe.yaml
deleted file mode 100644
index 8de1b46cf..000000000
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-pipe.yaml
+++ /dev/null
@@ -1,56 +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.
-# ---------------------------------------------------------------------------
-
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-kinesis-sink-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: timer-source
-    properties:
-      period: '{{timer.source.period}}'
-      message: '{{aws.kinesis.json.data}}'
-  steps:
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1
-        name: insert-header-action
-      properties:
-        name: "partition"
-        value: '{{aws.kinesis.partitionKey}}'
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1
-        name: log-action
-      properties:
-        showHeaders: true
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-kinesis-sink
-    properties:
-      stream: '{{aws.kinesis.streamName}}'
-      overrideEndpoint: '{{aws.kinesis.overrideEndpoint}}'
-      uriEndpointOverride: '{{aws.kinesis.uriEndpointOverride}}'
-      accessKey: '{{aws.kinesis.accessKey}}'
-      secretKey: '{{aws.kinesis.secretKey}}'
-      region: '{{aws.kinesis.region}}'
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source-pipe.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-route.yaml
similarity index 56%
rename from 
tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source-pipe.yaml
rename to 
tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-route.yaml
index f85692cc6..81a257282 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-route.yaml
@@ -15,27 +15,25 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-kinesis-source-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-kinesis-source
-    properties:
-      stream: '{{aws.kinesis.streamName}}'
-      overrideEndpoint: '{{aws.kinesis.overrideEndpoint}}'
-      uriEndpointOverride: '{{aws.kinesis.uriEndpointOverride}}'
-      accessKey: '{{aws.kinesis.accessKey}}'
-      secretKey: '{{aws.kinesis.secretKey}}'
-      region: '{{aws.kinesis.region}}'
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-      properties:
-        showHeaders: true
+- route:
+    from:
+      uri: "timer:tick"
+      parameters:
+        period: "{{timer.source.period}}"
+        repeatCount: 1
+      steps:
+      - setBody:
+          constant: "{{aws.kinesis.json.data}}"
+      - setHeader:
+          name: "partition"
+          constant: "{{aws.kinesis.partitionKey}}"
+      - log: "${body}"
+      - to:
+          uri: "kamelet:aws-kinesis-sink"
+          parameters:
+            stream: "{{aws.kinesis.streamName}}"
+            overrideEndpoint: "{{aws.kinesis.overrideEndpoint}}"
+            uriEndpointOverride: "{{aws.kinesis.uriEndpointOverride}}"
+            accessKey: "{{aws.kinesis.accessKey}}"
+            secretKey: "{{aws.kinesis.secretKey}}"
+            region: "{{aws.kinesis.region}}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink.citrus.it.yaml
index 57ab64e0f..01154a846 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink.citrus.it.yaml
@@ -31,7 +31,7 @@ variables:
   - name: "timer.source.period"
     value: "10000"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -52,7 +52,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/kinesis/aws-kinesis-sink-pipe.yaml"
+            file: "aws/kinesis/aws-kinesis-sink-route.yaml"
             systemProperties:
               properties:
                 - name: "timer.source.period"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-pipe.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source-route.yaml
similarity index 58%
rename from 
tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-pipe.yaml
rename to 
tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source-route.yaml
index 3d25229c4..951b20efd 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source-route.yaml
@@ -15,28 +15,18 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-ddb-source-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-ddb-streams-source
-    properties:
-      streamIteratorType: FROM_START
-      table: "{{aws.ddb.tableName}}"
-      overrideEndpoint: "{{aws.ddb.overrideEndpoint}}"
-      uriEndpointOverride: "{{aws.ddb.uriEndpointOverride}}"
-      accessKey: "{{aws.ddb.accessKey}}"
-      secretKey: "{{aws.ddb.secretKey}}"
-      region: "{{aws.ddb.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "kamelet:aws-kinesis-source"
+      parameters:
+        stream: "{{aws.kinesis.streamName}}"
+        overrideEndpoint: "{{aws.kinesis.overrideEndpoint}}"
+        uriEndpointOverride: "{{aws.kinesis.uriEndpointOverride}}"
+        accessKey: "{{aws.kinesis.accessKey}}"
+        secretKey: "{{aws.kinesis.secretKey}}"
+        region: "{{aws.kinesis.region}}"
+      steps:
+      - to:
+          uri: "kamelet:log-sink"
+          parameters:
+            showHeaders: true
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source.citrus.it.yaml
index 457ab1794..0ef1ce273 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-source.citrus.it.yaml
@@ -24,7 +24,7 @@ variables:
   - name: "aws.kinesis.streamData"
     value: "Camel rocks!"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -45,7 +45,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/kinesis/aws-kinesis-source-pipe.yaml"
+            file: "aws/kinesis/aws-kinesis-source-route.yaml"
             systemProperties:
               file: "aws/kinesis/application.properties"
 
@@ -63,5 +63,5 @@ actions:
   - camel:
       jbang:
         verify:
-          integration: "aws-kinesis-source-pipe"
+          integration: "aws-kinesis-source-route"
           logMessage: "${aws.kinesis.streamData}"
diff --git a/tests/camel-kamelets-itest/src/test/resources/aws/s3/README.md 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/README.md
index b5e8f53f0..5285d55b1 100644
--- a/tests/camel-kamelets-itest/src/test/resources/aws/s3/README.md
+++ b/tests/camel-kamelets-itest/src/test/resources/aws/s3/README.md
@@ -7,7 +7,7 @@ This test verifies the AWS S3 Kamelet source defined in 
[aws-s3-source.kamelet.y
 The test verifies the AWS S3 Kamelet source by creating a Camel K integration 
that uses the Kamelet and listens for messages on the
 AWS S3 bucket.
 
-The test uses a [LocalStack 
Testcontainers](https://www.testcontainers.org/modules/localstack/) instance to 
start a local AWS S3 service for mocking reasons.
+The test uses a 
[Testcontainers](https://www.testcontainers.org/modules/localstack/) instance 
to start a local AWS S3 service for mocking reasons.
 The Kamelet and the test interact with the local AWS S3 service for validation 
of functionality.
 
 ### Test Kamelet source
@@ -15,7 +15,7 @@ The Kamelet and the test interact with the local AWS S3 
service for validation o
 The test performs the following high level steps for configs - URI, secret and 
property based:
 
 *Preparation*
-- Start the AWS S3 service as LocalStack container
+- Start the AWS S3 service as Testcontainers container
 - Overwrite the Kamelet with the latest source
 - Prepare the Camel AWS S3 client
 
@@ -27,7 +27,7 @@ The test performs the following high level steps for configs 
- URI, secret and p
 - Verify that the integration has received the message event
 
 *Cleanup*
-- Stop the LocalStack container
+- Stop the Testcontainers container
 - Delete the Camel K integration
 - Delete the secret from the current namespacce
 
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source.citrus.it.yaml.disabled
 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-sink-route.citrus.it.yaml
similarity index 59%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source.citrus.it.yaml.disabled
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-sink-route.citrus.it.yaml
index a133e36b6..f33d2bbe0 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source.citrus.it.yaml.disabled
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-sink-route.citrus.it.yaml
@@ -15,53 +15,53 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-name: aws-ddb-source-test
+name: aws-s3-sink-route-test
 variables:
-  - name: "maxRetryAttempts"
-    value: "20"
-  - name: "aws.ddb.streams"
-    value: "true"
-  - name: "aws.ddb.tableName"
-    value: "movies"
-  - name: "aws.ddb.item.id"
-    value: "1"
-  - name: "aws.ddb.item.year"
-    value: "1977"
-  - name: "aws.ddb.item.title"
-    value: "Star Wars IV"
+  - name: "aws.s3.bucketNameOrArn"
+    value: "sink-bucket"
+  - name: "aws.s3.key"
+    value: "test-sink.txt"
+  - name: "test.message"
+    value: "Hello from S3 sink test"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
           services:
-            - "DYNAMODB"
+            - "S3"
   - waitFor:
       http:
         url: "${CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL}"
 
-  # Create AWS-DDB client
-  - groovy:
-      script:
-        file: "aws/ddb/amazonDDBClient.groovy"
+  # Create AWS-S3 client
+  - camel:
+      createComponent:
+        name: amazonS3Client
+        file: "aws/s3/amazonS3Client.groovy"
 
   # Create Camel JBang integration
   - camel:
       jbang:
         run:
           integration:
-            file: "aws/ddb/aws-ddb-source-pipe.yaml"
+            file: "aws/s3/aws-s3-sink-route.yaml"
             systemProperties:
-              file: "aws/ddb/application.properties"
+              file: "aws/s3/application.properties"
+              properties:
+                - name: "test.message"
+                  value: "${test.message}"
+                - name: "aws.s3.key"
+                  value: "${aws.s3.key}"
 
-  - groovy:
-      script:
-        file: "aws/ddb/putItem.groovy"
-
-  # Verify AWS-DDB source
+  # Verify S3 sink wrote the object
   - camel:
       jbang:
         verify:
-          integration: "aws-ddb-source-pipe"
-          logMessage: |
-            "Star Wars IV"
+          integration: "aws-s3-sink-route"
+          logMessage: "${test.message}"
+
+  # Verify object exists in S3 by reading it back
+  - groovy:
+      script:
+        file: "aws/s3/getS3Object.groovy"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-uri-pipe.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-sink-route.yaml
similarity index 58%
rename from 
tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-uri-pipe.yaml
rename to 
tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-sink-route.yaml
index 70a998636..67b08ab95 100644
--- a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-uri-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-sink-route.yaml
@@ -15,28 +15,23 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-s3-uri-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-s3-source
-    properties:
-      bucketNameOrArn: "{{aws.s3.bucketNameOrArn}}"
-      uriEndpointOverride: "{{aws.s3.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.s3.overrideEndpoint}}"
-      forcePathStyle: "{{aws.s3.forcePathStyle}}"
-      accessKey: "{{aws.s3.accessKey}}"
-      secretKey: "{{aws.s3.secretKey}}"
-      region: "{{aws.s3.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "timer:tick"
+      parameters:
+        period: "10000"
+        repeatCount: 1
+      steps:
+      - setBody:
+          constant: "{{test.message}}"
+      - to:
+          uri: "kamelet:aws-s3-sink"
+          parameters:
+            bucketNameOrArn: "{{aws.s3.bucketNameOrArn}}"
+            accessKey: "{{aws.s3.accessKey}}"
+            secretKey: "{{aws.s3.secretKey}}"
+            region: "{{aws.s3.region}}"
+            overrideEndpoint: "{{aws.s3.overrideEndpoint}}"
+            uriEndpointOverride: "{{aws.s3.uriEndpointOverride}}"
+            forcePathStyle: "{{aws.s3.forcePathStyle}}"
+            keyName: "{{aws.s3.key}}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-route.yaml
similarity index 60%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-route.yaml
index 7155c8c50..5ffc1f0ea 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-route.yaml
@@ -15,27 +15,19 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-sqs-uri-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-sqs-source
-    properties:
-      queueNameOrArn: "{{aws.sqs.queueName}}"
-      uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
-      accessKey: "{{aws.sqs.accessKey}}"
-      secretKey: "{{aws.sqs.secretKey}}"
-      region: "{{aws.sqs.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "kamelet:aws-s3-source"
+      parameters:
+        bucketNameOrArn: "{{aws.s3.bucketNameOrArn}}"
+        uriEndpointOverride: "{{aws.s3.uriEndpointOverride}}"
+        overrideEndpoint: "{{aws.s3.overrideEndpoint}}"
+        forcePathStyle: "{{aws.s3.forcePathStyle}}"
+        accessKey: "{{aws.s3.accessKey}}"
+        secretKey: "{{aws.s3.secretKey}}"
+        region: "{{aws.s3.region}}"
+      steps:
+      - to:
+          uri: "kamelet:log-sink"
+          parameters:
+            showHeaders: true
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-to-http-route.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-to-http-route.yaml
new file mode 100644
index 000000000..39e60ad9a
--- /dev/null
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-to-http-route.yaml
@@ -0,0 +1,54 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+- route:
+    from:
+      uri: "kamelet:aws-s3-source"
+      parameters:
+        bucketNameOrArn: "{{aws.s3.bucketNameOrArn}}"
+        uriEndpointOverride: "{{aws.s3.uriEndpointOverride}}"
+        overrideEndpoint: "{{aws.s3.overrideEndpoint}}"
+        forcePathStyle: "{{aws.s3.forcePathStyle}}"
+        accessKey: "{{aws.s3.accessKey}}"
+        secretKey: "{{aws.s3.secretKey}}"
+        region: "{{aws.s3.region}}"
+      steps:
+      - to:
+          uri: "kamelet:data-type-action"
+          parameters:
+            scheme: "aws2-s3"
+            format: "application-cloudevents"
+      - to:
+          uri: "kamelet:data-type-action"
+          parameters:
+            scheme: "http"
+            format: "application-cloudevents"
+      - to:
+          uri: "kamelet:data-type-action"
+          parameters:
+            scheme: "text"
+            format: "plain"
+      - removeHeaders:
+          pattern: "Camel*"
+      - to:
+          uri: "kamelet:log-sink"
+          parameters:
+            showHeaders: true
+      - to:
+          uri: "kamelet:http-sink"
+          parameters:
+            url: "{{http.sink.url}}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-http.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-http.citrus.it.yaml
index 13f815e8e..58531f373 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-http.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-http.citrus.it.yaml
@@ -24,7 +24,7 @@ variables:
   - name: "aws.s3.key"
     value: "hello.txt"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -45,7 +45,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/s3/aws-s3-to-http.yaml"
+            file: "aws/s3/aws-s3-source-to-http-route.yaml"
             systemProperties:
               file: "aws/s3/application.properties"
               properties:
@@ -89,5 +89,5 @@ actions:
   - camel:
       jbang:
         verify:
-          integration: "aws-s3-to-http"
+          integration: "aws-s3-source-to-http-route"
           logMessage: "${aws.s3.message}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-http.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-http.yaml
deleted file mode 100644
index 70ddfcc21..000000000
--- a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-http.yaml
+++ /dev/null
@@ -1,79 +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.
-# ---------------------------------------------------------------------------
-
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-s3-to-http
-spec:
-  integration:
-    dependencies:
-    - "camel:cloudevents"
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-s3-source
-    properties:
-      bucketNameOrArn: "{{aws.s3.bucketNameOrArn}}"
-      uriEndpointOverride: "{{aws.s3.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.s3.overrideEndpoint}}"
-      forcePathStyle: "{{aws.s3.forcePathStyle}}"
-      accessKey: "{{aws.s3.accessKey}}"
-      secretKey: "{{aws.s3.secretKey}}"
-      region: "{{aws.s3.region}}"
-  steps:
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1
-        name: data-type-action
-      properties:
-        scheme: "aws2-s3"
-        format: "application-cloudevents"
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1
-        name: data-type-action
-      properties:
-        scheme: "http"
-        format: "application-cloudevents"
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1
-        name: data-type-action
-      properties:
-        scheme: "text"
-        format: "plain"
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1
-        name: drop-headers-action
-      properties:
-        pattern: "Camel*"
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1
-        name: log-sink
-      properties:
-        showHeaders: true
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: http-sink
-    properties:
-      url: "{{http.sink.url}}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-log-uri-based.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-log-uri-based.citrus.it.yaml
index fcdc5127b..a78d56024 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-log-uri-based.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-log-uri-based.citrus.it.yaml
@@ -24,7 +24,7 @@ variables:
   - name: "aws.s3.key"
     value: "hello.txt"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-uri-pipe.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-uri-pipe.citrus.it.yaml
index fc63613f2..1a70bbcab 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-uri-pipe.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-uri-pipe.citrus.it.yaml
@@ -24,7 +24,7 @@ variables:
   - name: "aws.s3.key"
     value: "hello.txt"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -45,7 +45,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/s3/aws-s3-uri-pipe.yaml"
+            file: "aws/s3/aws-s3-source-route.yaml"
             systemProperties:
               properties:
                 - name: "aws.s3.bucketNameOrArn"
@@ -77,5 +77,5 @@ actions:
   - camel:
       jbang:
         verify:
-          integration: "aws-s3-uri-pipe"
+          integration: "aws-s3-source-route"
           logMessage: "${aws.s3.message}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/s3/getS3Object.groovy 
b/tests/camel-kamelets-itest/src/test/resources/aws/s3/getS3Object.groovy
new file mode 100644
index 000000000..5b6a482ec
--- /dev/null
+++ b/tests/camel-kamelets-itest/src/test/resources/aws/s3/getS3Object.groovy
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ */
+
+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.model.GetObjectRequest
+
+S3Client s3 = S3Client
+        .builder()
+        
.endpointOverride(URI.create('${CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL}'))
+        .credentialsProvider(StaticCredentialsProvider.create(
+                AwsBasicCredentials.create(
+                        '${CITRUS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}',
+                        '${CITRUS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}')
+        ))
+        .forcePathStyle(true)
+        .region(Region.of('${CITRUS_TESTCONTAINERS_LOCALSTACK_REGION}'))
+        .build()
+
+def response = s3.getObjectAsBytes(GetObjectRequest.builder()
+        .bucket('${aws.s3.bucketNameOrArn}')
+        .key('${aws.s3.key}')
+        .build())
+
+String content = response.asUtf8String()
+assert content == '${test.message}' : "Expected '${test.message}' but got '" + 
content + "'"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.citrus.it.yaml
similarity index 55%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.citrus.it.yaml
index 90e944650..8d3f69e9b 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.citrus.it.yaml
@@ -15,35 +15,60 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-name: aws-sqs-uri-pipe-test
+name: aws-sns-sink-route-test
 variables:
+  - name: "aws.sns.topicName"
+    value: "sns-test-topic"
   - name: "aws.sqs.queueName"
-    value: "queue2"
-  - name: "aws.sqs.message"
-    value: "Hello from SQS Kamelet"
+    value: "sns-test-queue"
+  - name: "test.message"
+    value: "Hello from SNS sink test"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
           services:
+            - "SNS"
             - "SQS"
   - waitFor:
       http:
         url: "${CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL}"
 
-  # Create AWS-SQS client
+  # Create SNS topic, SQS queue, and subscribe SQS to SNS
+  - groovy:
+      script:
+        file: "aws/sns/setupSnsToSqs.groovy"
+
+  # Create Camel JBang integration for the SNS sink
   - camel:
-      createComponent:
-        name: amazonSQSClient
-        file: "aws/sqs/amazonSQSClient.groovy"
+      jbang:
+        run:
+          integration:
+            file: "aws/sns/aws-sns-sink-route.yaml"
+            systemProperties:
+              properties:
+                - name: "test.message"
+                  value: "${test.message}"
+                - name: "aws.sns.topicName"
+                  value: "${aws.sns.topicName}"
+                - name: "aws.sns.uriEndpointOverride"
+                  value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL}"
+                - name: "aws.sns.overrideEndpoint"
+                  value: "true"
+                - name: "aws.sns.secretKey"
+                  value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}"
+                - name: "aws.sns.accessKey"
+                  value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}"
+                - name: "aws.sns.region"
+                  value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_REGION}"
 
-  # Create Camel JBang integration
+  # Create event listener to consume the message forwarded from SNS to SQS
   - camel:
       jbang:
         run:
           integration:
-            file: "aws/sqs/aws-sqs-uri-pipe.yaml"
+            file: "aws/sns/aws-sqs-sns-event-listener.yaml"
             systemProperties:
               properties:
                 - name: "aws.sqs.queueName"
@@ -59,16 +84,9 @@ actions:
                 - name: "aws.sqs.region"
                   value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_REGION}"
 
-  # Publish event
-  - send:
-      endpoint: 
camel:aws2-sqs://${aws.sqs.queueName}?amazonSQSClient=#amazonSQSClient
-      message:
-        body:
-          data: "${aws.sqs.message}"
-
-  # Verify AWS-SQS source
+  # Verify message received by the SQS listener
   - camel:
       jbang:
         verify:
-          integration: "aws-sqs-uri-pipe"
-          logMessage: "${aws.sqs.message}"
+          integration: "aws-sqs-sns-event-listener"
+          logMessage: "${test.message}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.yaml
similarity index 60%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.yaml
index 7155c8c50..913cabd64 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.yaml
@@ -15,27 +15,22 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-sqs-uri-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-sqs-source
-    properties:
-      queueNameOrArn: "{{aws.sqs.queueName}}"
-      uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
-      accessKey: "{{aws.sqs.accessKey}}"
-      secretKey: "{{aws.sqs.secretKey}}"
-      region: "{{aws.sqs.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "timer:tick"
+      parameters:
+        period: "10000"
+        repeatCount: 1
+      steps:
+      - setBody:
+          constant: "{{test.message}}"
+      - to:
+          uri: "kamelet:aws-sns-sink"
+          parameters:
+            topicNameOrArn: "{{aws.sns.topicName}}"
+            accessKey: "{{aws.sns.accessKey}}"
+            secretKey: "{{aws.sns.secretKey}}"
+            region: "{{aws.sns.region}}"
+            overrideEndpoint: "{{aws.sns.overrideEndpoint}}"
+            uriEndpointOverride: "{{aws.sns.uriEndpointOverride}}"
+            autoCreateTopic: "true"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sqs-sns-event-listener.yaml
similarity index 60%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sqs-sns-event-listener.yaml
index 7155c8c50..0ba9d0c7c 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sqs-sns-event-listener.yaml
@@ -15,27 +15,15 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-sqs-uri-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-sqs-source
-    properties:
-      queueNameOrArn: "{{aws.sqs.queueName}}"
-      uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
-      accessKey: "{{aws.sqs.accessKey}}"
-      secretKey: "{{aws.sqs.secretKey}}"
-      region: "{{aws.sqs.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "aws2-sqs:{{aws.sqs.queueName}}"
+      parameters:
+        accessKey: "{{aws.sqs.accessKey}}"
+        secretKey: "{{aws.sqs.secretKey}}"
+        region: "{{aws.sqs.region}}"
+        overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
+        uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
+      steps:
+      - to:
+          uri: "log:aws-sqs-sns-event-listener"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sns/setupSnsToSqs.groovy 
b/tests/camel-kamelets-itest/src/test/resources/aws/sns/setupSnsToSqs.groovy
new file mode 100644
index 000000000..3e953f125
--- /dev/null
+++ b/tests/camel-kamelets-itest/src/test/resources/aws/sns/setupSnsToSqs.groovy
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ */
+
+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.sqs.SqsClient
+import software.amazon.awssdk.services.sqs.model.QueueAttributeName
+
+def credentials = StaticCredentialsProvider.create(
+        AwsBasicCredentials.create(
+                '${CITRUS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}',
+                '${CITRUS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}'))
+
+def region = Region.of('${CITRUS_TESTCONTAINERS_LOCALSTACK_REGION}')
+def endpoint = URI.create('${CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL}')
+
+SnsClient snsClient = SnsClient.builder()
+        .endpointOverride(endpoint)
+        .credentialsProvider(credentials)
+        .region(region)
+        .build()
+
+SqsClient sqsClient = SqsClient.builder()
+        .endpointOverride(endpoint)
+        .credentialsProvider(credentials)
+        .region(region)
+        .build()
+
+def topicArn = snsClient.createTopic(b -> 
b.name('${aws.sns.topicName}')).topicArn()
+
+def queueUrl = sqsClient.createQueue(b -> 
b.queueName('${aws.sqs.queueName}')).queueUrl()
+def queueArn = sqsClient.getQueueAttributes(b -> b.queueUrl(queueUrl)
+        .attributeNames(QueueAttributeName.QUEUE_ARN))
+        .attributes().get(QueueAttributeName.QUEUE_ARN)
+
+snsClient.subscribe(b -> 
b.topicArn(topicArn).protocol("sqs").endpoint(queueArn)
+        .attributes(Collections.singletonMap("RawMessageDelivery", "true")))
diff --git a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/README.md 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/README.md
index 974dc5114..0b2351757 100644
--- a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/README.md
+++ b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/README.md
@@ -7,7 +7,7 @@ This test verifies the AWS SQS Kamelet source defined in 
[aws-sqs-source.kamelet
 The test verifies the AWS SQS Kamelet source by creating a Camel K integration 
that uses the Kamelet and listens for messages on the
 AWS SQS channel.
 
-The test uses a [LocalStack 
Testcontainers](https://www.testcontainers.org/modules/localstack/) instance to 
start a local AWS SQS service for mocking reasons.
+The test uses a 
[Testcontainers](https://www.testcontainers.org/modules/localstack/) instance 
to start a local AWS SQS service for mocking reasons.
 The Kamelet and the test interact with the local AWS SQS service for 
validation of functionality.
 
 ### Test Kamelet source
@@ -15,7 +15,7 @@ The Kamelet and the test interact with the local AWS SQS 
service for validation
 The test performs the following high level steps for configs - URI, secret and 
property based:
 
 *Preparation*
-- Start the AWS SQS service as LocalStack container
+- Start the AWS SQS service as Testcontainers container
 - Overwrite the Kamelet with the latest source
 - Prepare the Camel AWS SQS client
 
@@ -27,7 +27,7 @@ The test performs the following high level steps for configs 
- URI, secret and p
 - Verify that the integration has received the message event
 
 *Cleanup*
-- Stop the LocalStack container
+- Stop the Testcontainers container
 - Delete the Camel K integration
 - Delete the secret from the current namespacce
 
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-event-listener.yaml
similarity index 60%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-event-listener.yaml
index 7155c8c50..da26e400c 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-event-listener.yaml
@@ -15,27 +15,15 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-sqs-uri-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-sqs-source
-    properties:
-      queueNameOrArn: "{{aws.sqs.queueName}}"
-      uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
-      accessKey: "{{aws.sqs.accessKey}}"
-      secretKey: "{{aws.sqs.secretKey}}"
-      region: "{{aws.sqs.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "aws2-sqs:{{aws.sqs.queueName}}"
+      parameters:
+        accessKey: "{{aws.sqs.accessKey}}"
+        secretKey: "{{aws.sqs.secretKey}}"
+        region: "{{aws.sqs.region}}"
+        overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
+        uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
+      steps:
+      - to:
+          uri: "log:aws-sqs-sink-event-listener"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.citrus.it.yaml
similarity index 61%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.citrus.it.yaml
index 90e944650..51c27f994 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.citrus.it.yaml
@@ -15,14 +15,14 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-name: aws-sqs-uri-pipe-test
+name: aws-sqs-sink-route-test
 variables:
   - name: "aws.sqs.queueName"
-    value: "queue2"
-  - name: "aws.sqs.message"
-    value: "Hello from SQS Kamelet"
+    value: "sink-queue"
+  - name: "test.message"
+    value: "Hello from SQS sink test"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -43,9 +43,11 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/sqs/aws-sqs-uri-pipe.yaml"
+            file: "aws/sqs/aws-sqs-sink-route.yaml"
             systemProperties:
               properties:
+                - name: "test.message"
+                  value: "${test.message}"
                 - name: "aws.sqs.queueName"
                   value: "${aws.sqs.queueName}"
                 - name: "aws.sqs.uriEndpointOverride"
@@ -59,16 +61,30 @@ actions:
                 - name: "aws.sqs.region"
                   value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_REGION}"
 
-  # Publish event
-  - send:
-      endpoint: 
camel:aws2-sqs://${aws.sqs.queueName}?amazonSQSClient=#amazonSQSClient
-      message:
-        body:
-          data: "${aws.sqs.message}"
+  # Create event listener to consume the message from SQS
+  - camel:
+      jbang:
+        run:
+          integration:
+            file: "aws/sqs/aws-sqs-sink-event-listener.yaml"
+            systemProperties:
+              properties:
+                - name: "aws.sqs.queueName"
+                  value: "${aws.sqs.queueName}"
+                - name: "aws.sqs.uriEndpointOverride"
+                  value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL}"
+                - name: "aws.sqs.overrideEndpoint"
+                  value: "true"
+                - name: "aws.sqs.secretKey"
+                  value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}"
+                - name: "aws.sqs.accessKey"
+                  value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}"
+                - name: "aws.sqs.region"
+                  value: "${CITRUS_TESTCONTAINERS_LOCALSTACK_REGION}"
 
-  # Verify AWS-SQS source
+  # Verify message received by the listener
   - camel:
       jbang:
         verify:
-          integration: "aws-sqs-uri-pipe"
-          logMessage: "${aws.sqs.message}"
+          integration: "aws-sqs-sink-event-listener"
+          logMessage: "${test.message}"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.yaml
similarity index 60%
copy from 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
copy to 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.yaml
index 7155c8c50..62c3e4418 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.yaml
@@ -15,27 +15,22 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-sqs-uri-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-sqs-source
-    properties:
-      queueNameOrArn: "{{aws.sqs.queueName}}"
-      uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
-      accessKey: "{{aws.sqs.accessKey}}"
-      secretKey: "{{aws.sqs.secretKey}}"
-      region: "{{aws.sqs.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "timer:tick"
+      parameters:
+        period: "10000"
+        repeatCount: 1
+      steps:
+      - setBody:
+          constant: "{{test.message}}"
+      - to:
+          uri: "kamelet:aws-sqs-sink"
+          parameters:
+            queueNameOrArn: "{{aws.sqs.queueName}}"
+            accessKey: "{{aws.sqs.accessKey}}"
+            secretKey: "{{aws.sqs.secretKey}}"
+            region: "{{aws.sqs.region}}"
+            overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
+            uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
+            autoCreateQueue: "true"
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-source-route.yaml
similarity index 60%
rename from 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
rename to 
tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-source-route.yaml
index 7155c8c50..0313cd426 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-source-route.yaml
@@ -15,27 +15,18 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: camel.apache.org/v1
-kind: Pipe
-metadata:
-  name: aws-sqs-uri-pipe
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: aws-sqs-source
-    properties:
-      queueNameOrArn: "{{aws.sqs.queueName}}"
-      uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
-      overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
-      accessKey: "{{aws.sqs.accessKey}}"
-      secretKey: "{{aws.sqs.secretKey}}"
-      region: "{{aws.sqs.region}}"
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1
-      name: log-sink
-    properties:
-      showHeaders: true
+- route:
+    from:
+      uri: "kamelet:aws-sqs-source"
+      parameters:
+        queueNameOrArn: "{{aws.sqs.queueName}}"
+        uriEndpointOverride: "{{aws.sqs.uriEndpointOverride}}"
+        overrideEndpoint: "{{aws.sqs.overrideEndpoint}}"
+        accessKey: "{{aws.sqs.accessKey}}"
+        secretKey: "{{aws.sqs.secretKey}}"
+        region: "{{aws.sqs.region}}"
+      steps:
+      - to:
+          uri: "kamelet:log-sink"
+          parameters:
+            showHeaders: true
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-to-log-uri-based.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-to-log-uri-based.citrus.it.yaml
index 7466bc6c1..2c95af6f8 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-to-log-uri-based.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-to-log-uri-based.citrus.it.yaml
@@ -22,7 +22,7 @@ variables:
   - name: "aws.sqs.message"
     value: "Hello from SQS Kamelet"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
diff --git 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
index 90e944650..83385e3d4 100644
--- 
a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
+++ 
b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml
@@ -22,7 +22,7 @@ variables:
   - name: "aws.sqs.message"
     value: "Hello from SQS Kamelet"
 actions:
-  # Create LocalStack infrastructure
+  # Create AWS infrastructure (Floci container)
   - testcontainers:
       start:
         localstack:
@@ -43,7 +43,7 @@ actions:
       jbang:
         run:
           integration:
-            file: "aws/sqs/aws-sqs-uri-pipe.yaml"
+            file: "aws/sqs/aws-sqs-source-route.yaml"
             systemProperties:
               properties:
                 - name: "aws.sqs.queueName"
@@ -70,5 +70,5 @@ actions:
   - camel:
       jbang:
         verify:
-          integration: "aws-sqs-uri-pipe"
+          integration: "aws-sqs-source-route"
           logMessage: "${aws.sqs.message}"

Reply via email to