This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new cfc59b624a [SYNCOPE-1806] Fixing tests
cfc59b624a is described below

commit cfc59b624af78cb07d10cfec67747bec90f9907c
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Wed Mar 6 13:33:49 2024 +0100

    [SYNCOPE-1806] Fixing tests
---
 .../persistence/jpa/dao/repo/GroupRepoBase.java    |  8 +--
 .../persistence/jpa/dao/repo/GroupRepoExtImpl.java |  9 ++--
 .../core/persistence/neo4j/dao/repo/GroupRepo.java |  4 +-
 .../neo4j/dao/repo/GroupRepoExtImpl.java           |  8 +--
 .../apache/syncope/fit/core/DynRealmITCase.java    | 63 ++++++++++++++--------
 .../org/apache/syncope/fit/core/GroupITCase.java   | 25 ++++++---
 .../org/apache/syncope/fit/core/RoleITCase.java    | 41 ++++++++------
 7 files changed, 98 insertions(+), 60 deletions(-)

diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoBase.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoBase.java
index 7b34823288..38d9a57f75 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoBase.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoBase.java
@@ -43,19 +43,19 @@ public interface GroupRepoBase extends GroupDAO {
     @Override
     List<Group> findOwnedByGroup(@Param("groupKey") String groupKey);
 
-    @Query("SELECT e.leftEnd.id FROM JPAAMembership e WHERE e.rightEnd.id = 
:groupKey")
+    @Query("SELECT DISTINCT e.leftEnd.id FROM JPAAMembership e WHERE 
e.rightEnd.id = :groupKey")
     @Override
     List<String> findAMembers(@Param("groupKey") String groupKey);
 
-    @Query("SELECT e.leftEnd.id FROM JPAUMembership e WHERE e.rightEnd.id = 
:groupKey")
+    @Query("SELECT DISTINCT e.leftEnd.id FROM JPAUMembership e WHERE 
e.rightEnd.id = :groupKey")
     @Override
     List<String> findUMembers(@Param("groupKey") String groupKey);
 
-    @Query("SELECT COUNT(e.leftEnd.id) FROM JPAAMembership e WHERE 
e.rightEnd.id = :groupKey")
+    @Query("SELECT COUNT(DISTINCT e.leftEnd.id) FROM JPAAMembership e WHERE 
e.rightEnd.id = :groupKey")
     @Override
     long countAMembers(@Param("groupKey") String groupKey);
 
-    @Query("SELECT COUNT(e.leftEnd.id) FROM JPAUMembership e WHERE 
e.rightEnd.id = :groupKey")
+    @Query("SELECT COUNT(DISTINCT e.leftEnd.id) FROM JPAUMembership e WHERE 
e.rightEnd.id = :groupKey")
     @Override
     long countUMembers(@Param("groupKey") String groupKey);
 }
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoExtImpl.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoExtImpl.java
index 1fccd2b653..c512ba7b40 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoExtImpl.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoExtImpl.java
@@ -357,7 +357,7 @@ public class GroupRepoExtImpl extends 
AbstractAnyRepoExt<Group> implements Group
     @Override
     public long countADynMembers(final Group group) {
         Query query = entityManager.createNativeQuery(
-                "SELECT COUNT(any_id) FROM " + ADYNMEMB_TABLE + " WHERE 
group_id=?");
+                "SELECT COUNT(DISTINCT any_id) FROM " + ADYNMEMB_TABLE + " 
WHERE group_id=?");
         query.setParameter(1, group.getKey());
 
         return ((Number) query.getSingleResult()).longValue();
@@ -370,7 +370,7 @@ public class GroupRepoExtImpl extends 
AbstractAnyRepoExt<Group> implements Group
         }
 
         Query query = entityManager.createNativeQuery(
-                "SELECT COUNT(any_id) FROM " + UDYNMEMB_TABLE + " WHERE 
group_id=?");
+                "SELECT COUNT(DISTINCT any_id) FROM " + UDYNMEMB_TABLE + " 
WHERE group_id=?");
         query.setParameter(1, group.getKey());
 
         return ((Number) query.getSingleResult()).longValue();
@@ -383,7 +383,7 @@ public class GroupRepoExtImpl extends 
AbstractAnyRepoExt<Group> implements Group
 
         group.getADynMemberships().forEach(memb -> {
             Query query = entityManager.createNativeQuery(
-                    "SELECT any_id FROM " + ADYNMEMB_TABLE + " WHERE 
group_id=? AND anyType_id=?");
+                    "SELECT DISTINCT any_id FROM " + ADYNMEMB_TABLE + " WHERE 
group_id=? AND anyType_id=?");
             query.setParameter(1, group.getKey());
             query.setParameter(2, memb.getAnyType().getKey());
 
@@ -404,7 +404,8 @@ public class GroupRepoExtImpl extends 
AbstractAnyRepoExt<Group> implements Group
             return List.of();
         }
 
-        Query query = entityManager.createNativeQuery("SELECT any_id FROM " + 
UDYNMEMB_TABLE + " WHERE group_id=?");
+        Query query = entityManager.createNativeQuery(
+                "SELECT DISTINCT any_id FROM " + UDYNMEMB_TABLE + " WHERE 
group_id=?");
         query.setParameter(1, group.getKey());
 
         @SuppressWarnings("unchecked")
diff --git 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepo.java
 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepo.java
index 96c03efd8f..c6351fb358 100644
--- 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepo.java
+++ 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepo.java
@@ -72,14 +72,14 @@ public interface GroupRepo
     @Query("MATCH (a:" + Neo4jAnyObject.NODE + ")-[]-"
             + "(n:" + Neo4jAMembership.NODE + ")-[]-"
             + "(g:" + Neo4jGroup.NODE + " {id: $groupKey}) "
-            + "RETURN COUNT(a)")
+            + "RETURN COUNT(DISTINCT a)")
     @Override
     long countAMembers(@Param("groupKey") String groupKey);
 
     @Query("MATCH (u:" + Neo4jUser.NODE + ")-[]-"
             + "(n:" + Neo4jUMembership.NODE + ")-[]-"
             + "(g:" + Neo4jGroup.NODE + " {id: $groupKey}) "
-            + "RETURN COUNT(u)")
+            + "RETURN COUNT(DISTINCT u)")
     @Override
     long countUMembers(@Param("groupKey") String groupKey);
 }
diff --git 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
index 713fff3d61..68348171fc 100644
--- 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
+++ 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
@@ -386,7 +386,7 @@ public class GroupRepoExtImpl extends 
AbstractAnyRepoExt<Group> implements Group
         return neo4jTemplate.count(
                 "MATCH (n)-[:" + DYN_GROUP_ANY_OBJECT_MEMBERSHIP_REL + "]-"
                 + "(p:" + Neo4jGroup.NODE + " {id: $id}) "
-                + "RETURN COUNT(n.id)", Map.of("id", group.getKey()));
+                + "RETURN COUNT(DISTINCT n.id)", Map.of("id", group.getKey()));
     }
 
     @Override
@@ -394,7 +394,7 @@ public class GroupRepoExtImpl extends 
AbstractAnyRepoExt<Group> implements Group
         return neo4jTemplate.count(
                 "MATCH (n)-[:" + DYN_GROUP_USER_MEMBERSHIP_REL + "]-"
                 + "(p:" + Neo4jGroup.NODE + " {id: $id}) "
-                + "RETURN COUNT(n.id)", Map.of("id", group.getKey()));
+                + "RETURN COUNT(DISTNCT n.id)", Map.of("id", group.getKey()));
     }
 
     @Override
@@ -402,7 +402,7 @@ public class GroupRepoExtImpl extends 
AbstractAnyRepoExt<Group> implements Group
         return neo4jClient.query(
                 "MATCH (n)-[:" + DYN_GROUP_ANY_OBJECT_MEMBERSHIP_REL + "]-"
                 + "(p:" + Neo4jGroup.NODE + " {id: $id}) "
-                + "RETURN n.id").bindAll(Map.of("id", 
group.getKey())).fetch().all().stream().
+                + "RETURN DISTINCT n.id").bindAll(Map.of("id", 
group.getKey())).fetch().all().stream().
                 map(found -> found.get("n.id").toString()).toList();
     }
 
@@ -411,7 +411,7 @@ public class GroupRepoExtImpl extends 
AbstractAnyRepoExt<Group> implements Group
         return neo4jClient.query(
                 "MATCH (n)-[:" + DYN_GROUP_USER_MEMBERSHIP_REL + "]-"
                 + "(p:" + Neo4jGroup.NODE + " {id: $id}) "
-                + "RETURN n.id").bindAll(Map.of("id", 
group.getKey())).fetch().all().stream().
+                + "RETURN DISTINCT n.id").bindAll(Map.of("id", 
group.getKey())).fetch().all().stream().
                 map(found -> found.get("n.id").toString()).toList();
     }
 
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DynRealmITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DynRealmITCase.java
index 8dd7ab1be5..0c91d84f39 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DynRealmITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DynRealmITCase.java
@@ -64,6 +64,27 @@ import org.junit.jupiter.api.Test;
 
 public class DynRealmITCase extends AbstractITCase {
 
+    private static ArrayNode fetchDynRealmsFromElasticsearch(final String 
userKey) throws Exception {
+        String body =
+                '{'
+                + "    \"query\": {"
+                + "        \"match\": {\"_id\": \"" + userKey + "\"}"
+                + "    }"
+                + '}';
+
+        HttpClient client = HttpClient.newHttpClient();
+        HttpResponse<String> response = client.send(
+                
HttpRequest.newBuilder(URI.create("http://localhost:9200/master_user/_search";)).
+                        header(HttpHeaders.CONTENT_TYPE, 
MediaType.APPLICATION_JSON).
+                        method("GET", BodyPublishers.ofString(body)).
+                        build(),
+                BodyHandlers.ofString());
+        assertEquals(Response.Status.OK.getStatusCode(), 
response.statusCode());
+
+        return (ArrayNode) JSON_MAPPER.readTree(response.body()).
+                get("hits").get("hits").get(0).get("_source").get("dynRealms");
+    }
+
     @Test
     public void misc() {
         DynRealmTO dynRealm = null;
@@ -222,27 +243,6 @@ public class DynRealmITCase extends AbstractITCase {
         }
     }
 
-    private static ArrayNode fetchDynRealmsFromElasticsearch(final String 
userKey) throws Exception {
-        String body =
-                '{'
-                + "    \"query\": {"
-                + "        \"match\": {\"_id\": \"" + userKey + "\"}"
-                + "    }"
-                + '}';
-
-        HttpClient client = HttpClient.newHttpClient();
-        HttpResponse<String> response = client.send(
-                
HttpRequest.newBuilder(URI.create("http://localhost:9200/master_user/_search";)).
-                        header(HttpHeaders.CONTENT_TYPE, 
MediaType.APPLICATION_JSON).
-                        method("GET", BodyPublishers.ofString(body)).
-                        build(),
-                BodyHandlers.ofString());
-        assertEquals(Response.Status.OK.getStatusCode(), 
response.statusCode());
-
-        return (ArrayNode) JSON_MAPPER.readTree(response.body()).
-                get("hits").get("hits").get(0).get("_source").get("dynRealms");
-    }
-
     @Test
     public void issueSYNCOPE1480() throws Exception {
         String ctype = getUUIDString();
@@ -333,6 +333,14 @@ public class DynRealmITCase extends AbstractITCase {
             assertNotNull(realm2);
 
             // 2. verify that dynamic members are the same
+            if (IS_EXT_SEARCH_ENABLED) {
+                try {
+                    Thread.sleep(2000);
+                } catch (InterruptedException ex) {
+                    // ignore
+                }
+            }
+
             PagedResult<UserTO> matching1 = USER_SERVICE.search(new 
AnyQuery.Builder().realm("/").fiql(
                     
SyncopeClient.getUserSearchConditionBuilder().inDynRealms(realm1.getKey()).query()).build());
             PagedResult<UserTO> matching2 = USER_SERVICE.search(new 
AnyQuery.Builder().realm("/").fiql(
@@ -350,6 +358,14 @@ public class DynRealmITCase extends AbstractITCase {
             updateUser(userUR);
 
             // 4. verify that dynamic members are still the same
+            if (IS_EXT_SEARCH_ENABLED) {
+                try {
+                    Thread.sleep(2000);
+                } catch (InterruptedException ex) {
+                    // ignore
+                }
+            }
+
             matching1 = USER_SERVICE.search(new 
AnyQuery.Builder().realm("/").fiql(
                     
SyncopeClient.getUserSearchConditionBuilder().inDynRealms(realm1.getKey()).query()).build());
             matching2 = USER_SERVICE.search(new 
AnyQuery.Builder().realm("/").fiql(
@@ -367,6 +383,11 @@ public class DynRealmITCase extends AbstractITCase {
             if (realm2 != null) {
                 DYN_REALM_SERVICE.delete(realm2.getKey());
             }
+            UserUR userUR = new UserUR();
+            userUR.setKey("823074dc-d280-436d-a7dd-07399fae48ec");
+            userUR.getPlainAttrs().add(new AttrPatch.Builder(new 
Attr.Builder("cool").build()).
+                    operation(PatchOperation.DELETE).build());
+            updateUser(userUR);
         }
     }
 }
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
index 3f98d59a0c..983c3b2492 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
@@ -679,17 +679,26 @@ public class GroupITCase extends AbstractITCase {
 
         GroupCR groupCR = getBasicSample("uDynMembership");
         groupCR.setUDynMembershipCond("cool==true");
-        GroupTO group = createGroup(groupCR).getEntity();
-        assertNotNull(group);
+        GroupTO group = null;
+        try {
+            group = createGroup(groupCR).getEntity();
+            assertNotNull(group);
+            String groupKey = group.getKey();
 
-        List<MembershipTO> memberships = 
USER_SERVICE.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynMemberships();
-        assertTrue(memberships.stream().anyMatch(m -> 
m.getGroupKey().equals(group.getKey())));
-        assertEquals(1, 
GROUP_SERVICE.read(group.getKey()).getDynamicUserMembershipCount());
+            List<MembershipTO> memberships =
+                    
USER_SERVICE.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynMemberships();
+            assertTrue(memberships.stream().anyMatch(m -> 
m.getGroupKey().equals(groupKey)));
+            assertEquals(1, 
GROUP_SERVICE.read(group.getKey()).getDynamicUserMembershipCount());
 
-        GROUP_SERVICE.update(new 
GroupUR.Builder(group.getKey()).udynMembershipCond("cool==false").build());
+            GROUP_SERVICE.update(new 
GroupUR.Builder(group.getKey()).udynMembershipCond("cool==false").build());
 
-        
assertTrue(USER_SERVICE.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynMemberships().isEmpty());
-        assertEquals(0, 
GROUP_SERVICE.read(group.getKey()).getDynamicUserMembershipCount());
+            
assertTrue(USER_SERVICE.read("c9b2dec2-00a7-4855-97c0-d854842b4b24").getDynMemberships().isEmpty());
+            assertEquals(0, 
GROUP_SERVICE.read(group.getKey()).getDynamicUserMembershipCount());
+        } finally {
+            if (group != null) {
+                GROUP_SERVICE.delete(group.getKey());
+            }
+        }
     }
 
     @Test
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RoleITCase.java 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RoleITCase.java
index 4ee3590890..dad3416013 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RoleITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RoleITCase.java
@@ -138,23 +138,30 @@ public class RoleITCase extends AbstractITCase {
         assertTrue(bellini.getDynRoles().isEmpty());
         assertTrue(bellini.getPrivileges().isEmpty());
 
-        RoleTO role = getSampleRoleTO("dynMembership");
-        role.getPrivileges().add("getMighty");
-        role.setDynMembershipCond("cool==true");
-        Response response = ROLE_SERVICE.create(role);
-        role = getObject(response.getLocation(), RoleService.class, 
RoleTO.class);
-        assertNotNull(role);
-
-        bellini = USER_SERVICE.read("bellini");
-        assertTrue(bellini.getDynRoles().contains(role.getKey()));
-        assertTrue(bellini.getPrivileges().contains("getMighty"));
-
-        role.setDynMembershipCond("cool==false");
-        ROLE_SERVICE.update(role);
-
-        bellini = USER_SERVICE.read("bellini");
-        assertTrue(bellini.getDynMemberships().isEmpty());
-        assertTrue(bellini.getPrivileges().isEmpty());
+        RoleTO role = null;
+        try {
+            role = getSampleRoleTO("dynMembership");
+            role.getPrivileges().add("getMighty");
+            role.setDynMembershipCond("cool==true");
+            Response response = ROLE_SERVICE.create(role);
+            role = getObject(response.getLocation(), RoleService.class, 
RoleTO.class);
+            assertNotNull(role);
+
+            bellini = USER_SERVICE.read("bellini");
+            assertTrue(bellini.getDynRoles().contains(role.getKey()));
+            assertTrue(bellini.getPrivileges().contains("getMighty"));
+
+            role.setDynMembershipCond("cool==false");
+            ROLE_SERVICE.update(role);
+
+            bellini = USER_SERVICE.read("bellini");
+            assertTrue(bellini.getDynMemberships().isEmpty());
+            assertTrue(bellini.getPrivileges().isEmpty());
+        } finally {
+            if (role != null) {
+                ROLE_SERVICE.delete(role.getKey());
+            }
+        }
     }
 
     @Test

Reply via email to