This is an automated email from the ASF dual-hosted git repository.
cdeppisch 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 51178428 Fix AWS DDB Streams Source Kamelet
51178428 is described below
commit 51178428b06d4903dd24abeee19b43bb24509a0d
Author: Christoph Deppisch <[email protected]>
AuthorDate: Mon Apr 29 11:06:45 2024 +0200
Fix AWS DDB Streams Source Kamelet
- Use specific data type transformation to marshal the aws2-ddb record
domain model to Json
- Arbitrary Gson marshalling is not able to handle Java time instant type
that is being used in aws2-ddb domain model
- Add Java time instant Gson type adapter
- Use Gson with timer instant type adapter in aws2-ddb Json Struct data
type transformer
- Add YAKS test to verify aws2-ddb-streams-source Kamelet
---
kamelets/aws-ddb-streams-source.kamelet.yaml | 10 ++---
library/camel-kamelets-utils/pom.xml | 7 ++++
.../gson/JavaTimeInstantTypeAdapter.java | 44 +++++++++++++++++++++
.../ddb/Ddb2JsonStructDataTypeTransformer.java | 46 ++++++++++++++++++++++
.../transformer/aws2-ddb-application-x-struct | 1 +
.../transformer/aws2-ddb-application-x-struct.json | 13 ++++++
.../kamelets/aws-ddb-streams-source.kamelet.yaml | 10 ++---
.../test/resources/aws/ddb/amazonDDBClient.groovy | 9 +++++
.../aws/ddb/aws-ddb-sink-deleteItem.feature | 1 +
.../resources/aws/ddb/aws-ddb-sink-putItem.feature | 1 +
.../aws/ddb/aws-ddb-sink-updateItem.feature | 1 +
...Item.feature => aws-ddb-source-getItem.feature} | 32 ++++++---------
.../resources/aws/ddb/aws-ddb-source-pipe.yaml | 42 ++++++++++++++++++++
.../src/test/resources/aws/ddb/yaks-config.yaml | 1 +
14 files changed, 188 insertions(+), 30 deletions(-)
diff --git a/kamelets/aws-ddb-streams-source.kamelet.yaml
b/kamelets/aws-ddb-streams-source.kamelet.yaml
index ddd55c3d..0ac85298 100644
--- a/kamelets/aws-ddb-streams-source.kamelet.yaml
+++ b/kamelets/aws-ddb-streams-source.kamelet.yaml
@@ -67,7 +67,7 @@ spec:
enum: ["ap-south-1", "eu-south-1", "us-gov-east-1", "me-central-1",
"ca-central-1", "eu-central-1", "us-iso-west-1", "us-west-1", "us-west-2",
"af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1",
"ap-northeast-3", "ap-northeast-2", "ap-northeast-1", "me-south-1",
"sa-east-1", "ap-east-1", "cn-north-1", "us-gov-west-1", "ap-southeast-1",
"ap-southeast-2", "us-iso-east-1", "ap-southeast-3", "us-east-1", "us-east-2",
"cn-northwest-1", "us-isob-east-1", "aws-global", "a [...]
streamIteratorType:
title: Stream Iterator Type
- description: Defines where in the DynamoDB stream to start getting
records. There are two enums and the value can be one of FROM_LATEST and
FROM_START. Note that using FROM_START can cause a significant delay before the
stream has caught up to real-time.
+ description: Defines where in the DynamoDB stream to start getting
records. There are two enums and the value can be one of FROM_LATEST and
FROM_START. Note that using FROM_START can cause a significant delay before the
stream has caught up to real-time.
type: string
default: FROM_LATEST
useDefaultCredentialsProvider:
@@ -107,7 +107,7 @@ spec:
description: Default Json representation of a DDB Stream Event.
mediaType: application/json
cloudevents:
- format: "aws2-sqs:application-cloudevents"
+ format: "aws2-ddbstream:application-cloudevents"
description: |-
Data type transformer converts AWS Dynamo DB Streams get records
response to CloudEvent v1_0 data format. The data
type sets Camel specific CloudEvent headers with values extracted
from AWS Dynamo DB Streams get records.
@@ -134,6 +134,7 @@ spec:
description: The exchange creation timestamp as event time.
type: string
dependencies:
+ - mvn:org.apache.camel.kamelets:camel-kamelets-utils:4.6.0-SNAPSHOT
- "camel:gson"
- "camel:aws2-ddb"
- "camel:kamelet"
@@ -150,7 +151,6 @@ spec:
overrideEndpoint: "{{overrideEndpoint}}"
delay: "{{delay}}"
steps:
- - marshal:
- json:
- library: Gson
+ - transform:
+ toType: "aws2-ddb:application-x-struct"
- to: "kamelet:sink"
diff --git a/library/camel-kamelets-utils/pom.xml
b/library/camel-kamelets-utils/pom.xml
index 9499fe65..5363a839 100644
--- a/library/camel-kamelets-utils/pom.xml
+++ b/library/camel-kamelets-utils/pom.xml
@@ -71,6 +71,13 @@
<artifactId>camel-kafka</artifactId>
</dependency>
+ <!-- Dependencies for Gson serialization type adapter -->
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-gson</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
<!-- Dependencies for azure credential configuration -->
<dependency>
<groupId>org.apache.camel</groupId>
diff --git
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/serialization/gson/JavaTimeInstantTypeAdapter.java
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/serialization/gson/JavaTimeInstantTypeAdapter.java
new file mode 100644
index 00000000..eaeb5e7a
--- /dev/null
+++
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/serialization/gson/JavaTimeInstantTypeAdapter.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.kamelets.utils.serialization.gson;
+
+import java.lang.reflect.Type;
+import java.time.Instant;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+public class JavaTimeInstantTypeAdapter implements JsonSerializer<Instant>,
JsonDeserializer<Instant> {
+
+ @Override
+ public JsonElement serialize(final Instant time, final Type typeOfSrc,
+ final JsonSerializationContext context) {
+ return new JsonPrimitive(time.getEpochSecond() * 1000);
+ }
+
+ @Override
+ public Instant deserialize(final JsonElement json, final Type typeOfT,
+ final JsonDeserializationContext context)
throws JsonParseException {
+ return Instant.ofEpochMilli(json.getAsLong());
+ }
+}
diff --git
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/aws2/ddb/Ddb2JsonStructDataTypeTransformer.java
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/aws2/ddb/Ddb2JsonStructDataTypeTransformer.java
new file mode 100644
index 00000000..0a204e0f
--- /dev/null
+++
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/aws2/ddb/Ddb2JsonStructDataTypeTransformer.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.kamelets.utils.transform.aws2.ddb;
+
+import java.time.Instant;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.camel.Message;
+import
org.apache.camel.kamelets.utils.serialization.gson.JavaTimeInstantTypeAdapter;
+import org.apache.camel.spi.DataType;
+import org.apache.camel.spi.DataTypeTransformer;
+import org.apache.camel.spi.Transformer;
+
+@DataTypeTransformer(name = "aws2-ddb:application-x-struct",
+ description = "Transforms DynamoDB record into a Json
node")
+public class Ddb2JsonStructDataTypeTransformer extends Transformer {
+
+ private final Gson gson = new GsonBuilder()
+ .registerTypeAdapter(Instant.class, new
JavaTimeInstantTypeAdapter())
+ .create();
+
+ @Override
+ public void transform(Message message, DataType fromType, DataType toType)
{
+ if (message.getBody() instanceof String) {
+ return;
+ }
+
+ message.setBody(gson.toJson(message.getBody()));
+ }
+}
diff --git
a/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/transformer/aws2-ddb-application-x-struct
b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/transformer/aws2-ddb-application-x-struct
new file mode 100644
index 00000000..32bb47c1
--- /dev/null
+++
b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/transformer/aws2-ddb-application-x-struct
@@ -0,0 +1 @@
+class=org.apache.camel.kamelets.utils.transform.aws2.ddb.Ddb2JsonStructDataTypeTransformer
diff --git
a/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/transformer/aws2-ddb-application-x-struct.json
b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/transformer/aws2-ddb-application-x-struct.json
new file mode 100644
index 00000000..c69ebae1
--- /dev/null
+++
b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/transformer/aws2-ddb-application-x-struct.json
@@ -0,0 +1,13 @@
+{
+ "transformer": {
+ "kind": "transformer",
+ "name": "aws2-ddb:application-x-struct",
+ "title": "Aws2 Ddb (Application Json Struct)",
+ "description": "Transforms DynamoDB record into a Json node",
+ "deprecated": false,
+ "javaType":
"org.apache.camel.kamelets.utils.transform.aws2.ddb.Ddb2JsonStructDataTypeTransformer",
+ "groupId": "org.apache.camel",
+ "artifactId": "camel-aws2-ddb",
+ "version": "4.6.0-SNAPSHOT"
+ }
+}
diff --git
a/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-streams-source.kamelet.yaml
b/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-streams-source.kamelet.yaml
index ddd55c3d..0ac85298 100644
---
a/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-streams-source.kamelet.yaml
+++
b/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-streams-source.kamelet.yaml
@@ -67,7 +67,7 @@ spec:
enum: ["ap-south-1", "eu-south-1", "us-gov-east-1", "me-central-1",
"ca-central-1", "eu-central-1", "us-iso-west-1", "us-west-1", "us-west-2",
"af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1",
"ap-northeast-3", "ap-northeast-2", "ap-northeast-1", "me-south-1",
"sa-east-1", "ap-east-1", "cn-north-1", "us-gov-west-1", "ap-southeast-1",
"ap-southeast-2", "us-iso-east-1", "ap-southeast-3", "us-east-1", "us-east-2",
"cn-northwest-1", "us-isob-east-1", "aws-global", "a [...]
streamIteratorType:
title: Stream Iterator Type
- description: Defines where in the DynamoDB stream to start getting
records. There are two enums and the value can be one of FROM_LATEST and
FROM_START. Note that using FROM_START can cause a significant delay before the
stream has caught up to real-time.
+ description: Defines where in the DynamoDB stream to start getting
records. There are two enums and the value can be one of FROM_LATEST and
FROM_START. Note that using FROM_START can cause a significant delay before the
stream has caught up to real-time.
type: string
default: FROM_LATEST
useDefaultCredentialsProvider:
@@ -107,7 +107,7 @@ spec:
description: Default Json representation of a DDB Stream Event.
mediaType: application/json
cloudevents:
- format: "aws2-sqs:application-cloudevents"
+ format: "aws2-ddbstream:application-cloudevents"
description: |-
Data type transformer converts AWS Dynamo DB Streams get records
response to CloudEvent v1_0 data format. The data
type sets Camel specific CloudEvent headers with values extracted
from AWS Dynamo DB Streams get records.
@@ -134,6 +134,7 @@ spec:
description: The exchange creation timestamp as event time.
type: string
dependencies:
+ - mvn:org.apache.camel.kamelets:camel-kamelets-utils:4.6.0-SNAPSHOT
- "camel:gson"
- "camel:aws2-ddb"
- "camel:kamelet"
@@ -150,7 +151,6 @@ spec:
overrideEndpoint: "{{overrideEndpoint}}"
delay: "{{delay}}"
steps:
- - marshal:
- json:
- library: Gson
+ - transform:
+ toType: "aws2-ddb:application-x-struct"
- to: "kamelet:sink"
diff --git
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/amazonDDBClient.groovy
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/amazonDDBClient.groovy
index 95e18b40..5c1d7ef1 100644
---
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/amazonDDBClient.groovy
+++
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/amazonDDBClient.groovy
@@ -25,6 +25,8 @@ import
software.amazon.awssdk.services.dynamodb.model.KeySchemaElement
import software.amazon.awssdk.services.dynamodb.model.KeyType
import software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughput
import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType
+import software.amazon.awssdk.services.dynamodb.model.StreamSpecification
+import software.amazon.awssdk.services.dynamodb.model.StreamViewType
DynamoDbClient amazonDDBClient = DynamoDbClient
.builder()
@@ -45,6 +47,13 @@ amazonDDBClient.createTable(b -> {
b.attributeDefinitions(
AttributeDefinition.builder().attributeName("id").attributeType(ScalarAttributeType.N).build(),
)
+
+ if (${aws.ddb.streams}) {
+ b.streamSpecification(StreamSpecification.builder()
+ .streamEnabled(true)
+ .streamViewType(StreamViewType.NEW_AND_OLD_IMAGES).build())
+ }
+
b.provisionedThroughput(
ProvisionedThroughput.builder()
.readCapacityUnits(1L)
diff --git
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-deleteItem.feature
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-deleteItem.feature
index 7f45f1d0..e1a731b7 100644
---
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-deleteItem.feature
+++
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-deleteItem.feature
@@ -20,6 +20,7 @@ Feature: AWS DDB Sink - DeleteItem
Background:
Given variables
| timer.source.period | 10000 |
+ | aws.ddb.streams | false |
| aws.ddb.operation | DeleteItem |
| aws.ddb.tableName | movies |
| aws.ddb.item.id | 1 |
diff --git
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-putItem.feature
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-putItem.feature
index f9b889ac..a3261236 100644
---
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-putItem.feature
+++
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-putItem.feature
@@ -20,6 +20,7 @@ Feature: AWS DDB Sink - PutItem
Background:
Given variables
| timer.source.period | 10000 |
+ | aws.ddb.streams | false |
| aws.ddb.operation | PutItem |
| aws.ddb.tableName | movies |
| aws.ddb.item.id | 1 |
diff --git
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-updateItem.feature
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-updateItem.feature
index 956c5d1e..02b07d93 100644
---
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-updateItem.feature
+++
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-updateItem.feature
@@ -20,6 +20,7 @@ Feature: AWS DDB Sink - UpdateItem
Background:
Given variables
| timer.source.period | 10000 |
+ | aws.ddb.streams | false |
| aws.ddb.operation | UpdateItem |
| aws.ddb.tableName | movies |
| aws.ddb.item.id | 1 |
diff --git
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-putItem.feature
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-getItem.feature
similarity index 61%
copy from
tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-putItem.feature
copy to
tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-getItem.feature
index f9b889ac..51db8cf7 100644
---
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-sink-putItem.feature
+++
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-getItem.feature
@@ -15,45 +15,37 @@
# limitations under the License.
# ---------------------------------------------------------------------------
-Feature: AWS DDB Sink - PutItem
+Feature: AWS DDB Source - GetItem
Background:
Given variables
+ | maxRetryAttempts | 20 |
| timer.source.period | 10000 |
- | aws.ddb.operation | PutItem |
+ | aws.ddb.streams | true |
| aws.ddb.tableName | movies |
| aws.ddb.item.id | 1 |
| aws.ddb.item.year | 1977 |
| aws.ddb.item.title | Star Wars IV |
- | aws.ddb.json.data | { "id":${aws.ddb.item.id},
"year":${aws.ddb.item.year}, "title":"${aws.ddb.item.title}" } |
Scenario: Create infrastructure
# Start LocalStack container
Given Enable service DYNAMODB
Given start LocalStack container
- Scenario: Verify AWS-DDB Kamelet sink binding
- Given variables
- | maxRetryAttempts | 20 |
- | aws.ddb.items | [] |
+ Scenario: Verify AWS-DDB Kamelet source binding
# Create AWS-DDB client
Given load to Camel registry amazonDDBClient.groovy
- # Verify empty items on AWS-DDB
- Then apply actions verifyItems.groovy
-
# Create binding
- When load Pipe aws-ddb-sink-pipe.yaml
- And Pipe aws-ddb-sink-pipe is available
- And Camel K integration aws-ddb-sink-pipe is running
- And Camel K integration aws-ddb-sink-pipe should print Started
aws-ddb-sink-pipe
- # Verify Kamelet sink
- Given variables
- | maxRetryAttempts | 20 |
- | aws.ddb.items | [[year:AttributeValue(N=${aws.ddb.item.year}),
id:AttributeValue(N=${aws.ddb.item.id}),
title:AttributeValue(S=${aws.ddb.item.title})]] |
- Then apply actions verifyItems.groovy
+ When load Pipe aws-ddb-source-pipe.yaml
+ And Pipe aws-ddb-source-pipe is available
+ And Camel K integration aws-ddb-source-pipe is running
+ And Camel K integration aws-ddb-source-pipe should print Started
aws-ddb-source-pipe
+ # Create item on AWS-DDB
+ Given run script putItem.groovy
+ And Camel K integration aws-ddb-source-pipe should print Star Wars IV
Scenario: Remove resources
# Remove Camel K binding
- Given delete Pipe aws-ddb-sink-pipe
+ Given delete Pipe aws-ddb-source-pipe
# Stop LocalStack container
Given stop LocalStack container
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/ddb/aws-ddb-source-pipe.yaml
new file mode 100644
index 00000000..3dccb80e
--- /dev/null
+++
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/aws-ddb-source-pipe.yaml
@@ -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.
+# ---------------------------------------------------------------------------
+
+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:
+ table: ${aws.ddb.tableName}
+ streamIteratorType: FROM_START
+ overrideEndpoint: true
+ uriEndpointOverride: ${YAKS_TESTCONTAINERS_LOCALSTACK_DYNAMODB_LOCAL_URL}
+ accessKey: ${YAKS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}
+ secretKey: ${YAKS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}
+ region: ${YAKS_TESTCONTAINERS_LOCALSTACK_REGION}
+ sink:
+ ref:
+ kind: Kamelet
+ apiVersion: camel.apache.org/v1
+ name: log-sink
+ properties:
+ showHeaders: true
diff --git
a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/yaks-config.yaml
b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/yaks-config.yaml
index dbd40ded..38c2609b 100644
--- a/tests/camel-kamelets-itest/src/test/resources/aws/ddb/yaks-config.yaml
+++ b/tests/camel-kamelets-itest/src/test/resources/aws/ddb/yaks-config.yaml
@@ -39,6 +39,7 @@ config:
- verifyItems.groovy
- amazonDDBClient.groovy
- aws-ddb-sink-pipe.yaml
+ - aws-ddb-source-pipe.yaml
cucumber:
tags:
- "not @ignored"