From 9f60f75cb5c056d818ab24150074766f7268174f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francesco=20Chicchiricc=C3=B2?= Date: Mon, 7 Sep 2026 14:07:33 +0200 Subject: [PATCH 1/2] Revert "Reverting maven-surefire-plugin and maven-failsafe-plugin upgrades" This reverts commit 3c1eff92f45d4f2d77024597aaaea4495fd48d12. --- client/idrepo/console/pom.xml | 1 + client/idrepo/enduser/pom.xml | 1 + core/self-keymaster-starter/pom.xml | 1 + ext/openfga/client-openfga/pom.xml | 1 + fit/console-reference/pom.xml | 5 +---- fit/core-reference/pom.xml | 4 +++- .../java/org/apache/syncope/fit/core/JWTITCase.java | 11 +++++------ .../org/apache/syncope/fit/core/PullTaskITCase.java | 8 ++++++++ .../java/org/apache/syncope/fit/core/UserITCase.java | 2 ++ fit/enduser-reference/pom.xml | 5 +---- fit/wa-reference/pom.xml | 5 +---- pom.xml | 5 +++-- 12 files changed, 28 insertions(+), 21 deletions(-) diff --git a/client/idrepo/console/pom.xml b/client/idrepo/console/pom.xml index fc32d1628e9..3f947375d11 100644 --- a/client/idrepo/console/pom.xml +++ b/client/idrepo/console/pom.xml @@ -296,6 +296,7 @@ under the License. true true + true diff --git a/client/idrepo/enduser/pom.xml b/client/idrepo/enduser/pom.xml index e1369bd4137..1b359201117 100644 --- a/client/idrepo/enduser/pom.xml +++ b/client/idrepo/enduser/pom.xml @@ -267,6 +267,7 @@ under the License. true true + true diff --git a/core/self-keymaster-starter/pom.xml b/core/self-keymaster-starter/pom.xml index c93954bb40c..457ed80b248 100644 --- a/core/self-keymaster-starter/pom.xml +++ b/core/self-keymaster-starter/pom.xml @@ -100,6 +100,7 @@ under the License. true true + true diff --git a/ext/openfga/client-openfga/pom.xml b/ext/openfga/client-openfga/pom.xml index d73dfde8159..c35524868cb 100644 --- a/ext/openfga/client-openfga/pom.xml +++ b/ext/openfga/client-openfga/pom.xml @@ -35,6 +35,7 @@ under the License. true + true ${basedir}/../../.. diff --git a/fit/console-reference/pom.xml b/fit/console-reference/pom.xml index 2bba07bfe38..a8f36e302e7 100644 --- a/fit/console-reference/pom.xml +++ b/fit/console-reference/pom.xml @@ -211,15 +211,12 @@ under the License. - - skipTests - - debug true + true diff --git a/fit/core-reference/pom.xml b/fit/core-reference/pom.xml index c9afec91c0a..9d9ee0a4dc0 100644 --- a/fit/core-reference/pom.xml +++ b/fit/core-reference/pom.xml @@ -1723,7 +1723,7 @@ under the License. maven-failsafe-plugin true - ${skipTests} + ${skipITs} @@ -1735,6 +1735,7 @@ under the License. true + true @@ -1765,6 +1766,7 @@ under the License. true + true diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/JWTITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/JWTITCase.java index b77027f6369..227100bbce2 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/JWTITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/JWTITCase.java @@ -18,6 +18,7 @@ */ package org.apache.syncope.fit.core; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -224,23 +225,21 @@ public void invalidIssuer() throws ParseException, JOSEException { @Test public void expiredToken() throws ParseException, JOSEException { // Get an initial token - SyncopeClient localClient = CLIENT_FACTORY.create(ADMIN_UNAME, ADMIN_PWD); + UserCR userCR = UserITCase.getUniqueSample("expired@syncope.apache.org"); + assertDoesNotThrow(() -> createUser(userCR)); + SyncopeClient localClient = CLIENT_FACTORY.create(userCR.getUsername(), userCR.getPassword()); AccessTokenService accessTokenService = localClient.getService(AccessTokenService.class); Response response = accessTokenService.login(); String token = response.getHeaderString(RESTHeaders.TOKEN); assertNotNull(token); SignedJWT jwt = SignedJWT.parse(token); - String tokenId = jwt.getJWTClaimsSet().getJWTID(); // Create a new token using the Id of the first token Date currentTime = new Date(); - JWTClaimsSet.Builder claimsSet = new JWTClaimsSet.Builder(). - jwtID(tokenId). - subject(ADMIN_UNAME). + JWTClaimsSet.Builder claimsSet = new JWTClaimsSet.Builder(jwt.getJWTClaimsSet()). issueTime(currentTime). - issuer(JWT_ISSUER). expirationTime(new Date(currentTime.getTime() - 5000L)). notBeforeTime(currentTime); jwt = new SignedJWT(new JWSHeader(JWS_SIGNER.getJwsAlgorithm()), claimsSet.build()); diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java index ae62a23f223..959d015e5db 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java @@ -119,10 +119,14 @@ import org.identityconnectors.framework.common.objects.Name; import org.identityconnectors.framework.common.objects.Uid; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.jdbc.core.JdbcTemplate; +@TestMethodOrder(OrderAnnotation.class) public class PullTaskITCase extends AbstractTaskITCase { private static final String LDAP_PULL_TASK = "1e419ca4-ea81-4493-a14f-28b90113686d"; @@ -239,6 +243,7 @@ public void create() { assertEquals(groupTemplate, task.getTemplates().get(AnyTypeKind.GROUP.name())); } + @Order(1) @Test public void fromCSV() throws Exception { assumeFalse(IS_EXT_SEARCH_ENABLED); @@ -408,6 +413,7 @@ public void reconcileFromDB() { } } + @Order(2) @Test public void reconcileFromLDAP() { assumeFalse(IS_NEO4J_PERSISTENCE); @@ -779,6 +785,7 @@ public void syncTokenWithErrors() { } } + @Order(3) @Test public void remediation() { // First of all, clear any potential conflict with existing user / group @@ -865,6 +872,7 @@ public void remediation() { } } + @Order(4) @Test public void remediationSinglePull() throws IOException { // First of all, clear any potential conflict with existing user / group diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java index 52b30c96650..1dfe9a61ca7 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java @@ -540,6 +540,8 @@ public void updateInvalidPassword() { @Test public void updateSamePassword() { + assumeFalse(IS_NEO4J_PERSISTENCE); + assertThrows(SyncopeClientException.class, () -> { UserCR userCR = getUniqueSample("updatesame@password.com"); userCR.setRealm("/even/two"); diff --git a/fit/enduser-reference/pom.xml b/fit/enduser-reference/pom.xml index ffcd247aa44..0cd8017d9b8 100644 --- a/fit/enduser-reference/pom.xml +++ b/fit/enduser-reference/pom.xml @@ -212,15 +212,12 @@ under the License. - - skipTests - - debug true + true diff --git a/fit/wa-reference/pom.xml b/fit/wa-reference/pom.xml index bf23965f167..b2721d3883f 100644 --- a/fit/wa-reference/pom.xml +++ b/fit/wa-reference/pom.xml @@ -393,15 +393,12 @@ under the License. - - skipTests - - debug true + true diff --git a/pom.xml b/pom.xml index 5b0b13d6792..4084cc550cf 100644 --- a/pom.xml +++ b/pom.xml @@ -1799,7 +1799,7 @@ under the License. org.apache.maven.plugins maven-surefire-plugin - 3.5.6 + 3.6.0 true utf-8 @@ -1809,7 +1809,7 @@ under the License. org.apache.maven.plugins maven-failsafe-plugin - 3.5.6 + 3.6.0 true alphabetical @@ -2423,6 +2423,7 @@ under the License. true true + true none true true From b0fc155bbb4c5c411163507ed64ec068875a62ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francesco=20Chicchiricc=C3=B2?= Date: Thu, 10 Sep 2026 18:28:13 +0200 Subject: [PATCH 2/2] Giving up, disabling Enduser failing tests under Neo4j --- .../core/spring/security/DefaultCredentialChecker.java | 4 +++- .../test/java/org/apache/syncope/fit/AbstractUIITCase.java | 4 ++++ .../java/org/apache/syncope/fit/enduser/AnonymousITCase.java | 3 +++ .../org/apache/syncope/fit/enduser/AuthenticatedITCase.java | 3 +++ sra/src/main/java/org/apache/syncope/sra/SecurityConfig.java | 2 +- 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/DefaultCredentialChecker.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/DefaultCredentialChecker.java index e0a8bc3e848..c877848553d 100644 --- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/DefaultCredentialChecker.java +++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/DefaultCredentialChecker.java @@ -64,7 +64,9 @@ public DefaultCredentialChecker( final String anonymousKey, final boolean productionMode) throws IOException { - try (InputStream in = getClass().getResourceAsStream("/META-INF/default-credentials.properties")) { + try (InputStream in = DefaultCredentialChecker.class.getResourceAsStream( + "/META-INF/default-credentials.properties")) { + Properties defaultCredentials = new Properties(); defaultCredentials.load(in); defaultAesKeyInUse = defaultCredentials.getProperty("default.aesSecretKey").equals(aesKey); diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractUIITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractUIITCase.java index f5536feb24c..97ac5813c45 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractUIITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractUIITCase.java @@ -80,6 +80,8 @@ public abstract class AbstractUIITCase { protected static boolean IS_EXT_SEARCH_ENABLED = false; + protected static boolean IS_NEO4J_PERSISTENCE = false; + @BeforeAll public static void anonymousSetup() throws IOException { try (InputStream propStream = AbstractITCase.class.getResourceAsStream("/core.properties")) { @@ -114,6 +116,8 @@ public static void anonymousSetup() throws IOException { JsonNode anySearchDAO = beans.findValues("anySearchDAO").getFirst(); IS_EXT_SEARCH_ENABLED = anySearchDAO.get("type").asString().contains("Elasticsearch") || anySearchDAO.get("type").asString().contains("OpenSearch"); + + IS_NEO4J_PERSISTENCE = anySearchDAO.get("resource").asString().contains("neo4j"); } protected static Component findComponentByProp( diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AnonymousITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AnonymousITCase.java index b190552831c..49cb92874df 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AnonymousITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AnonymousITCase.java @@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assumptions.assumeFalse; import org.apache.syncope.client.enduser.pages.Login; import org.apache.syncope.client.enduser.pages.SelfPasswordReset; @@ -40,6 +41,8 @@ public class AnonymousITCase extends AbstractEnduserITCase { @Test public void selfCreate() { + assumeFalse(IS_NEO4J_PERSISTENCE); + String username = "testUser"; TESTER.startPage(Login.class); diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AuthenticatedITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AuthenticatedITCase.java index f7973c17a91..c4d73c93d82 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AuthenticatedITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AuthenticatedITCase.java @@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assumptions.assumeFalse; import java.io.IOException; import org.apache.syncope.client.enduser.pages.Dashboard; @@ -88,6 +89,8 @@ public void mustChangePassword() { @Test public void selfUpdate() { + assumeFalse(IS_NEO4J_PERSISTENCE); + String username = "selfupdate"; String newEmail = "selfupdate@email.com"; diff --git a/sra/src/main/java/org/apache/syncope/sra/SecurityConfig.java b/sra/src/main/java/org/apache/syncope/sra/SecurityConfig.java index 6142a0cfed6..aea6afe4342 100644 --- a/sra/src/main/java/org/apache/syncope/sra/SecurityConfig.java +++ b/sra/src/main/java/org/apache/syncope/sra/SecurityConfig.java @@ -228,7 +228,7 @@ public ReactiveJwtDecoder oauth2JWTDecoder( String jwkSetUri = oauth2ClientRegistration.getProviderDetails().getJwkSetUri(); if (StringUtils.isBlank(jwkSetUri)) { throw new IllegalStateException( - "sra.oauth2.jwkSetUri must be configured for OAuth2 JWT verification." + "sra.oauth2.jwkSetUri must be configured for OAuth2 JWT verification. " + "SRA cannot securely operate without JWT signature verification."); }