From 21911f662de0bd2dfe9532bdc3480ef3581a0d9f Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Thu, 9 Jul 2026 12:23:15 +0200 Subject: [PATCH 1/2] 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) Signed-off-by: Andrea Cosentino --- .../src/test/java/AwsIT.java | 5 + .../citrus-application.properties | 4 + ...b-sink-delete-item.citrus.it.yaml.disabled | 4 +- ...-ddb-sink-put-item.citrus.it.yaml.disabled | 4 +- .../aws-ddb-sink-route.yaml} | 46 +++++----- ...b-sink-update-item.citrus.it.yaml.disabled | 4 +- .../aws-ddb-source-route.yaml} | 40 ++++---- .../aws-ddb-source.citrus.it.yaml.disabled | 6 +- .../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 ----------- .../aws/kinesis/aws-kinesis-sink-route.yaml | 39 ++++++++ .../kinesis/aws-kinesis-sink.citrus.it.yaml | 4 +- .../aws-kinesis-source-route.yaml} | 40 +++----- .../kinesis/aws-kinesis-source.citrus.it.yaml | 6 +- .../src/test/resources/aws/s3/README.md | 6 +- .../aws/s3/aws-s3-sink-route.citrus.it.yaml | 67 ++++++++++++++ ...3-uri-pipe.yaml => aws-s3-sink-route.yaml} | 45 ++++----- .../resources/aws/s3/aws-s3-source-route.yaml | 33 +++++++ .../aws/s3/aws-s3-source-to-http-route.yaml | 54 +++++++++++ .../aws/s3/aws-s3-to-http.citrus.it.yaml | 6 +- .../test/resources/aws/s3/aws-s3-to-http.yaml | 79 ---------------- .../s3/aws-s3-to-log-uri-based.citrus.it.yaml | 2 +- .../aws/s3/aws-s3-uri-pipe.citrus.it.yaml | 6 +- .../test/resources/aws/s3/getS3Object.groovy | 42 +++++++++ .../aws/sns/aws-sns-sink-route.citrus.it.yaml | 92 +++++++++++++++++++ .../resources/aws/sns/aws-sns-sink-route.yaml | 36 ++++++++ .../aws/sns/aws-sqs-sns-event-listener.yaml | 29 ++++++ .../resources/aws/sns/setupSnsToSqs.groovy | 53 +++++++++++ .../src/test/resources/aws/sqs/README.md | 6 +- .../aws/sqs/aws-sqs-sink-event-listener.yaml | 29 ++++++ .../aws/sqs/aws-sqs-sink-route.citrus.it.yaml | 90 ++++++++++++++++++ .../resources/aws/sqs/aws-sqs-sink-route.yaml | 36 ++++++++ .../aws/sqs/aws-sqs-source-route.yaml | 32 +++++++ .../aws-sqs-to-log-uri-based.citrus.it.yaml | 2 +- .../aws/sqs/aws-sqs-uri-pipe.citrus.it.yaml | 6 +- 38 files changed, 787 insertions(+), 376 deletions(-) rename tests/camel-kamelets-itest/src/test/resources/aws/{eventbridge/aws-sqs-event-listener-pipe.yaml => ddb/aws-ddb-sink-route.yaml} (57%) rename tests/camel-kamelets-itest/src/test/resources/aws/{sqs/aws-sqs-uri-pipe.yaml => ddb/aws-ddb-source-route.yaml} (60%) delete mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/eventbridge/aws-eventbridge-sink-pipe.yaml rename tests/camel-kamelets-itest/src/test/resources/aws/{ddb/aws-ddb-sink-pipe.yaml => eventbridge/aws-eventbridge-sink-route.yaml} (50%) rename tests/camel-kamelets-itest/src/test/resources/aws/{kinesis/aws-kinesis-source-pipe.yaml => eventbridge/aws-sqs-event-listener-route.yaml} (59%) delete mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-pipe.yaml create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-route.yaml rename tests/camel-kamelets-itest/src/test/resources/aws/{ddb/aws-ddb-source-pipe.yaml => kinesis/aws-kinesis-source-route.yaml} (58%) create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-sink-route.citrus.it.yaml rename tests/camel-kamelets-itest/src/test/resources/aws/s3/{aws-s3-uri-pipe.yaml => aws-s3-sink-route.yaml} (58%) create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-route.yaml create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-to-http-route.yaml delete mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-to-http.yaml create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/s3/getS3Object.groovy create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.citrus.it.yaml create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.yaml create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sqs-sns-event-listener.yaml create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/sns/setupSnsToSqs.groovy create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-event-listener.yaml create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.citrus.it.yaml create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.yaml create mode 100644 tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-source-route.yaml 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 Stream awsEventBridge() { return CitrusTestFactorySupport.factory(TestLoader.YAML).packageScan("aws.eventbridge"); } + @CitrusTestFactory + public Stream 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% 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/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% 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/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-sink-route.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-route.yaml new file mode 100644 index 000000000..81a257282 --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/kinesis/aws-kinesis-sink-route.yaml @@ -0,0 +1,39 @@ +# --------------------------------------------------------------------------- +# 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: "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/s3/aws-s3-sink-route.citrus.it.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-sink-route.citrus.it.yaml new file mode 100644 index 000000000..f33d2bbe0 --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-sink-route.citrus.it.yaml @@ -0,0 +1,67 @@ +# --------------------------------------------------------------------------- +# 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. +# --------------------------------------------------------------------------- + +name: aws-s3-sink-route-test +variables: + - 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 AWS infrastructure (Floci container) + - testcontainers: + start: + localstack: + services: + - "S3" + - waitFor: + http: + url: "${CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL}" + + # Create AWS-S3 client + - camel: + createComponent: + name: amazonS3Client + file: "aws/s3/amazonS3Client.groovy" + + # Create Camel JBang integration + - camel: + jbang: + run: + integration: + file: "aws/s3/aws-s3-sink-route.yaml" + systemProperties: + file: "aws/s3/application.properties" + properties: + - name: "test.message" + value: "${test.message}" + - name: "aws.s3.key" + value: "${aws.s3.key}" + + # Verify S3 sink wrote the object + - camel: + jbang: + verify: + 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/s3/aws-s3-source-route.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-route.yaml new file mode 100644 index 000000000..5ffc1f0ea --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/s3/aws-s3-source-route.yaml @@ -0,0 +1,33 @@ +# --------------------------------------------------------------------------- +# 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: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/sns/aws-sns-sink-route.citrus.it.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.citrus.it.yaml new file mode 100644 index 000000000..8d3f69e9b --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.citrus.it.yaml @@ -0,0 +1,92 @@ +# --------------------------------------------------------------------------- +# 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. +# --------------------------------------------------------------------------- + +name: aws-sns-sink-route-test +variables: + - name: "aws.sns.topicName" + value: "sns-test-topic" + - name: "aws.sqs.queueName" + value: "sns-test-queue" + - name: "test.message" + value: "Hello from SNS sink test" +actions: + # Create AWS infrastructure (Floci container) + - testcontainers: + start: + localstack: + services: + - "SNS" + - "SQS" + - waitFor: + http: + url: "${CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL}" + + # 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: + 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 event listener to consume the message forwarded from SNS to SQS + - camel: + jbang: + run: + integration: + file: "aws/sns/aws-sqs-sns-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 message received by the SQS listener + - camel: + jbang: + verify: + integration: "aws-sqs-sns-event-listener" + logMessage: "${test.message}" diff --git a/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.yaml new file mode 100644 index 000000000..913cabd64 --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sns-sink-route.yaml @@ -0,0 +1,36 @@ +# --------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# --------------------------------------------------------------------------- + +- 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/sns/aws-sqs-sns-event-listener.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sqs-sns-event-listener.yaml new file mode 100644 index 000000000..0ba9d0c7c --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/sns/aws-sqs-sns-event-listener.yaml @@ -0,0 +1,29 @@ +# --------------------------------------------------------------------------- +# 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: "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-sink-event-listener.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-event-listener.yaml new file mode 100644 index 000000000..da26e400c --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-event-listener.yaml @@ -0,0 +1,29 @@ +# --------------------------------------------------------------------------- +# 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: "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-sink-route.citrus.it.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.citrus.it.yaml new file mode 100644 index 000000000..51c27f994 --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.citrus.it.yaml @@ -0,0 +1,90 @@ +# --------------------------------------------------------------------------- +# 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. +# --------------------------------------------------------------------------- + +name: aws-sqs-sink-route-test +variables: + - name: "aws.sqs.queueName" + value: "sink-queue" + - name: "test.message" + value: "Hello from SQS sink test" +actions: + # Create AWS infrastructure (Floci container) + - testcontainers: + start: + localstack: + services: + - "SQS" + - waitFor: + http: + url: "${CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL}" + + # Create AWS-SQS client + - camel: + createComponent: + name: amazonSQSClient + file: "aws/sqs/amazonSQSClient.groovy" + + # Create Camel JBang integration + - camel: + jbang: + run: + integration: + 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" + 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}" + + # 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 message received by the listener + - camel: + jbang: + verify: + integration: "aws-sqs-sink-event-listener" + logMessage: "${test.message}" diff --git a/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.yaml new file mode 100644 index 000000000..62c3e4418 --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-sink-route.yaml @@ -0,0 +1,36 @@ +# --------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# --------------------------------------------------------------------------- + +- 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-source-route.yaml b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-source-route.yaml new file mode 100644 index 000000000..0313cd426 --- /dev/null +++ b/tests/camel-kamelets-itest/src/test/resources/aws/sqs/aws-sqs-source-route.yaml @@ -0,0 +1,32 @@ +# --------------------------------------------------------------------------- +# 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-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}" From 76953359ca0936edb5f127a1151267ec4d49ff2c Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Thu, 9 Jul 2026 14:12:06 +0200 Subject: [PATCH 2/2] 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) Signed-off-by: Andrea Cosentino --- tests/camel-kamelets-itest/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) 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 @@ camel-aws2-eventbridge test + + org.apache.camel + camel-aws2-sns + test +