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) {

Reply via email to