From 2e53a66b79bf0fe7b00b677368676b52f21c2f57 Mon Sep 17 00:00:00 2001 From: clayly <31773799+clayly@users.noreply.github.com> Date: Tue, 21 Apr 2026 17:21:38 +0300 Subject: [PATCH] Fix test assertions that depend on undefined row ordering (#3007) * Fix test assertions that depend on undefined row ordering Several tests use containsExactly() or index-based comparison on query results that have no ORDER BY clause. SQL does not guarantee row ordering without explicit ORDER BY, and databases like YugabyteDB return results in a different (but valid) order than PostgreSQL/H2. These tests verify set membership (correct targets assigned, correct actions stored), not ordering. Changed to order-independent assertions: - AutoAssignTest: containsExactly -> containsExactlyInAnyOrder - ControllerManagementTest: index-based loop -> containsExactlyInAnyOrderElementsOf - TargetFilterQueryManagementTest: containsExactly -> containsExactlyInAnyOrder Verified passing on H2 (default) and YugabyteDB (PostgreSQL-compatible). * Trigger ECA re-check --- .../eclipse/hawkbit/repository/jpa/acm/AutoAssignTest.java | 2 +- .../jpa/management/ControllerManagementTest.java | 7 +++---- .../jpa/management/TargetFilterQueryManagementTest.java | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/acm/AutoAssignTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/acm/AutoAssignTest.java index faa783a28..4832bbdeb 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/acm/AutoAssignTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/acm/AutoAssignTest.java @@ -76,6 +76,6 @@ class AutoAssignTest extends AbstractAccessControllerManagementTest { .as("Only updatable targets should be part of the rollout") // all targets are distribution set type 2 compatible, but since user has UPDATE_TARGET only for targets of type 2 // only target2 and target3 shall be assigned - .containsExactly(target2Type2.getId(), target3Type2.getId()); + .containsExactlyInAnyOrder(target2Type2.getId(), target3Type2.getId()); } } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/ControllerManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/ControllerManagementTest.java index 8845d2fb1..525766bf5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/ControllerManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/ControllerManagementTest.java @@ -1441,10 +1441,9 @@ class ControllerManagementTest extends AbstractJpaIntegrationTest { root.get(JpaAction_.externalRef).in(allExternalRef), cb.equal(root.get(JpaAction_.active), true) )).stream().map(Action.class::cast).toList(); - assertThat(foundAction).isNotNull(); - for (int i = 0; i < numberOfActions; i++) { - assertThat(foundAction.get(i).getId()).isEqualTo(allActionId.get(i)); - } + assertThat(foundAction).isNotNull().hasSize(numberOfActions); + assertThat(foundAction).extracting(Action::getId) + .containsExactlyInAnyOrderElementsOf(allActionId); } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementTest.java index 1f7331104..779e466c9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementTest.java @@ -520,7 +520,7 @@ class TargetFilterQueryManagementTest extends AbstractRepositoryManagementTest tfqList, final TargetFilterQuery... expectedFilterQueries) { - assertThat(tfqList.map(TargetFilterQuery::getId)).containsExactly( + assertThat(tfqList.map(TargetFilterQuery::getId)).containsExactlyInAnyOrder( Arrays.stream(expectedFilterQueries).map(TargetFilterQuery::getId).toArray(Long[]::new)); } @@ -536,7 +536,7 @@ class TargetFilterQueryManagementTest extends AbstractRepositoryManagementTest