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