diff --git a/client/idrepo/console/pom.xml b/client/idrepo/console/pom.xml index 42250ed8e71..9acaab94cb2 100644 --- a/client/idrepo/console/pom.xml +++ b/client/idrepo/console/pom.xml @@ -289,6 +289,7 @@ under the License. true true + true diff --git a/client/idrepo/enduser/pom.xml b/client/idrepo/enduser/pom.xml index 91e02d84972..a5ead0c4d61 100644 --- a/client/idrepo/enduser/pom.xml +++ b/client/idrepo/enduser/pom.xml @@ -256,6 +256,7 @@ under the License. true true + true diff --git a/core/self-keymaster-starter/pom.xml b/core/self-keymaster-starter/pom.xml index 470b9d3c0e3..4131ca9a9c3 100644 --- a/core/self-keymaster-starter/pom.xml +++ b/core/self-keymaster-starter/pom.xml @@ -99,6 +99,7 @@ under the License. true true + true 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/ext/openfga/client-openfga/pom.xml b/ext/openfga/client-openfga/pom.xml index a922a043689..17a6cf1ca5e 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 3c3739afe4d..f5df0666fd3 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 643c94bc274..3aabf50997f 100644 --- a/fit/core-reference/pom.xml +++ b/fit/core-reference/pom.xml @@ -1707,7 +1707,7 @@ under the License. maven-failsafe-plugin true - ${skipTests} + ${skipITs} @@ -1719,6 +1719,7 @@ under the License. true + true @@ -1749,6 +1750,7 @@ under the License. true + true 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 cf1db387307..7497318ae4e 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 @@ -79,6 +79,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")) { @@ -113,6 +115,8 @@ public static void anonymousSetup() throws IOException { JsonNode anySearchDAO = beans.findValues("anySearchDAO").getFirst(); IS_EXT_SEARCH_ENABLED = anySearchDAO.get("type").asText().contains("Elasticsearch") || anySearchDAO.get("type").asText().contains("OpenSearch"); + + IS_NEO4J_PERSISTENCE = anySearchDAO.get("resource").asText().contains("neo4j"); } protected static Component findComponentByProp( 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 b4cdf441648..79a234389ba 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); @@ -805,6 +811,7 @@ public void syncTokenWithErrors() { } } + @Order(3) @Test public void remediation() { // First of all, clear any potential conflict with existing user / group @@ -891,6 +898,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 22e0d0b0564..7cdd7394c87 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 @@ -541,6 +541,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/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 df84033593e..eab5d871550 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/fit/enduser-reference/pom.xml b/fit/enduser-reference/pom.xml index fff7c25c4d9..dd1240fa6d7 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 3fc904ed7dd..d5cc16a04f7 100644 --- a/fit/wa-reference/pom.xml +++ b/fit/wa-reference/pom.xml @@ -391,15 +391,12 @@ under the License. - - skipTests - - debug true + true diff --git a/pom.xml b/pom.xml index 702c89217f1..74791914bb5 100644 --- a/pom.xml +++ b/pom.xml @@ -1871,7 +1871,7 @@ under the License. org.apache.maven.plugins maven-surefire-plugin - 3.5.6 + 3.6.0 true utf-8 @@ -1881,7 +1881,7 @@ under the License. org.apache.maven.plugins maven-failsafe-plugin - 3.5.6 + 3.6.0 true alphabetical @@ -2494,6 +2494,7 @@ under the License. true true + true none true true 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 9a2644363fb..65d24cf4e11 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."); }