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.");
}