This is an automated email from the ASF dual-hosted git repository.
Croway pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 67af4d51cffd chore(test): make DDB Scan/Query IT assertions
order-independent
67af4d51cffd is described below
commit 67af4d51cffdd8306ed19c61b32aaa269f3e1d65
Author: Croway <[email protected]>
AuthorDate: Fri May 15 10:14:45 2026 +0200
chore(test): make DDB Scan/Query IT assertions order-independent
DynamoDB Scan does not guarantee item ordering. The tests were relying
on a specific item order that happened to match LocalStack's internal
storage layout, making them fail against other DynamoDB-compatible
backends. Assert on value sets and structural properties instead.
---
.../aws2/ddb/localstack/AWS2QueryRuleIT.java | 29 +++++++++++-----------
.../aws2/ddb/localstack/AWS2ScanRuleIT.java | 29 +++++++++++-----------
2 files changed, 28 insertions(+), 30 deletions(-)
diff --git
a/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/localstack/AWS2QueryRuleIT.java
b/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/localstack/AWS2QueryRuleIT.java
index b8a3c9158f9f..33b1a36510c3 100644
---
a/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/localstack/AWS2QueryRuleIT.java
+++
b/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/localstack/AWS2QueryRuleIT.java
@@ -17,6 +17,7 @@
package org.apache.camel.component.aws2.ddb.localstack;
import java.util.*;
+import java.util.stream.Collectors;
import org.apache.camel.EndpointInject;
import org.apache.camel.Exchange;
@@ -177,13 +178,12 @@ public class AWS2QueryRuleIT extends Aws2DDBBase {
assertNotNull(exchange.getIn().getHeader(Ddb2Constants.ITEMS));
List<Map<String, AttributeValue>> items =
exchange.getIn().getHeader(Ddb2Constants.ITEMS, List.class);
- assertTrue(items.get(0).containsKey("clave"));
- assertTrue(items.get(0).containsKey("secondary_attribute"));
-
assertTrue(items.get(0).get("clave").equals(AttributeValue.builder().s("ignore").build()));
- assertTrue(items.get(1).containsKey("clave"));
-
assertTrue(items.get(1).get("clave").equals(AttributeValue.builder().s("ignore").build()));
- assertTrue(items.get(1).containsKey("secondary_attribute"));
assertEquals(2, exchange.getIn().getHeader(Ddb2Constants.COUNT));
+ for (Map<String, AttributeValue> item : items) {
+ assertTrue(item.containsKey("clave"));
+ assertTrue(item.containsKey("secondary_attribute"));
+ assertEquals(AttributeValue.builder().s("ignore").build(),
item.get("clave"));
+ }
}
@Test
@@ -198,21 +198,20 @@ public class AWS2QueryRuleIT extends Aws2DDBBase {
Exchange exchange = template.send("direct:start", e -> {
e.getIn().setHeader(Ddb2Constants.OPERATION, Ddb2Operations.Scan);
e.getIn().setHeader(Ddb2Constants.CONSISTENT_READ, true);
- Map<String, Condition> keyConditions = new HashMap<>();
- keyConditions.put(attributeName,
Condition.builder().comparisonOperator(
- ComparisonOperator.EQ.toString())
-
.attributeValueList(AttributeValue.builder().s(retrieveValue).build())
- .build());
- Collection<String> coll = new ArrayList<>();
- coll.add("clave");
e.getIn().setHeader(Ddb2Constants.PROJECT_EXPRESSION,
"secondary_attribute");
});
assertNotNull(exchange.getIn().getHeader(Ddb2Constants.ITEMS));
List<Map<String, AttributeValue>> items =
exchange.getIn().getHeader(Ddb2Constants.ITEMS, List.class);
- assertTrue(items.get(0).containsKey("secondary_attribute"));
-
assertTrue(items.get(0).get("secondary_attribute").equals(AttributeValue.builder().s("dos").build()));
assertEquals(5, exchange.getIn().getHeader(Ddb2Constants.COUNT));
+ Set<String> values = items.stream()
+ .map(i -> i.get("secondary_attribute").s())
+ .collect(Collectors.toSet());
+ assertEquals(Set.of("uno", "dos", "tres", "Ignore me", "I should not
be returned"), values);
+ for (Map<String, AttributeValue> item : items) {
+ assertTrue(item.containsKey("secondary_attribute"));
+ assertFalse(item.containsKey("clave"));
+ }
}
private void putItem(String value1, String value2) {
diff --git
a/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/localstack/AWS2ScanRuleIT.java
b/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/localstack/AWS2ScanRuleIT.java
index acc57e96326d..ff58802eec5d 100644
---
a/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/localstack/AWS2ScanRuleIT.java
+++
b/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/localstack/AWS2ScanRuleIT.java
@@ -17,6 +17,7 @@
package org.apache.camel.component.aws2.ddb.localstack;
import java.util.*;
+import java.util.stream.Collectors;
import org.apache.camel.EndpointInject;
import org.apache.camel.Exchange;
@@ -180,13 +181,12 @@ public class AWS2ScanRuleIT extends Aws2DDBBase {
assertNotNull(exchange.getIn().getHeader(Ddb2Constants.ITEMS));
List<Map<String, AttributeValue>> items =
exchange.getIn().getHeader(Ddb2Constants.ITEMS, List.class);
- assertTrue(items.get(0).containsKey("clave"));
- assertTrue(items.get(0).containsKey("secondary_attribute"));
-
assertTrue(items.get(0).get("clave").equals(AttributeValue.builder().s("ignore").build()));
- assertTrue(items.get(1).containsKey("clave"));
-
assertTrue(items.get(1).get("clave").equals(AttributeValue.builder().s("ignore").build()));
- assertTrue(items.get(1).containsKey("secondary_attribute"));
assertEquals(2, exchange.getIn().getHeader(Ddb2Constants.COUNT));
+ for (Map<String, AttributeValue> item : items) {
+ assertTrue(item.containsKey("clave"));
+ assertTrue(item.containsKey("secondary_attribute"));
+ assertEquals(AttributeValue.builder().s("ignore").build(),
item.get("clave"));
+ }
}
@Test
@@ -202,21 +202,20 @@ public class AWS2ScanRuleIT extends Aws2DDBBase {
Exchange exchange = template.send("direct:start", e -> {
e.getIn().setHeader(Ddb2Constants.OPERATION, Ddb2Operations.Scan);
e.getIn().setHeader(Ddb2Constants.CONSISTENT_READ, true);
- Map<String, Condition> keyConditions = new HashMap<>();
- keyConditions.put(attributeName,
Condition.builder().comparisonOperator(
- ComparisonOperator.EQ.toString())
-
.attributeValueList(AttributeValue.builder().s(retrieveValue).build())
- .build());
- Collection<String> coll = new ArrayList<>();
- coll.add("clave");
e.getIn().setHeader(Ddb2Constants.PROJECT_EXPRESSION,
"secondary_attribute");
});
assertNotNull(exchange.getIn().getHeader(Ddb2Constants.ITEMS));
List<Map<String, AttributeValue>> items =
exchange.getIn().getHeader(Ddb2Constants.ITEMS, List.class);
- assertTrue(items.get(0).containsKey("secondary_attribute"));
-
assertTrue(items.get(0).get("secondary_attribute").equals(AttributeValue.builder().s("1").build()));
assertEquals(5, exchange.getIn().getHeader(Ddb2Constants.COUNT));
+ Set<String> values = items.stream()
+ .map(i -> i.get("secondary_attribute").s())
+ .collect(Collectors.toSet());
+ assertEquals(Set.of("0", "1", "2", "3", "4"), values);
+ for (Map<String, AttributeValue> item : items) {
+ assertTrue(item.containsKey("secondary_attribute"));
+ assertFalse(item.containsKey("clave"));
+ }
}
private void putItem(String value1, String value2) {