You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by md...@apache.org on 2015/08/18 17:48:03 UTC
[1/6] syncope git commit: [SYNCOPE-652] Upgrade Spring to
4.2.0.RELEASE + various cleanup
Repository: syncope
Updated Branches:
refs/heads/SYNCOPE-156 f0883ca5f -> 5336431db
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java
index a447f29..2924d34 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class DomainTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
index c6a31ef..0b24a25 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
@@ -32,7 +32,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class GroupTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java
index a39de84..074c26e 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/MultitenancyTest.java
@@ -44,11 +44,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
-@TransactionConfiguration(transactionManager = "TwoTransactionManager")
-@Transactional
+@Transactional("Two")
public class MultitenancyTest extends AbstractTest {
@Autowired
@@ -85,7 +83,7 @@ public class MultitenancyTest extends AbstractTest {
@Test
public void readPlainSchemas() {
- assertEquals(18, plainSchemaDAO.findAll().size());
+ assertEquals(16, plainSchemaDAO.findAll().size());
}
@Test
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java
index 150b924..b97cbd4 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/NotificationTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class NotificationTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
index 108e622..fe53386 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
@@ -46,7 +46,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.codec.Base64;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class PlainAttrTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainSchemaTest.java
index b7c7ecc..c425460 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainSchemaTest.java
@@ -38,7 +38,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class PlainSchemaTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
index ed11445..c75a148 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
@@ -38,7 +38,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class PolicyTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
index 3fef2ce..4eb611a 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
@@ -41,7 +41,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class RealmTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java
index 9aee7f1..9808962 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RelationshipTypeTest.java
@@ -35,7 +35,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class RelationshipTypeTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java
index 4318813..1144981 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ReportTest.java
@@ -31,7 +31,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class ReportTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
index e5cee24..bdfd645 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java
@@ -46,7 +46,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class ResourceTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java
index bf2c012..2368e38 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java
@@ -34,7 +34,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class RoleTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java
index f17146e..08466b1 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SecurityQuestionTest.java
@@ -30,7 +30,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class SecurityQuestionTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
index 5385600..e840a06 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskExecTest.java
@@ -35,7 +35,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class TaskExecTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
index a3bfedd..2fa4a8c 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
@@ -47,7 +47,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class TaskTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
index a7e0d83..7c62ab2 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
@@ -39,7 +39,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class UserTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirAttrTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirAttrTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirAttrTest.java
index 95111c6..fd13cd6 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirAttrTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirAttrTest.java
@@ -37,7 +37,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class VirAttrTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java
index fc56739..10970d1 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/VirSchemaTest.java
@@ -34,7 +34,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class VirSchemaTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java
index 79f96ed..6c59ad0 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java
@@ -44,7 +44,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class AnySearchTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java
index c9e00bb..cef688b 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class AnyTypeClassTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java
index b3712d8..0f25f20 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java
@@ -31,7 +31,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class AnyTypeTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java
index 0046679..d9f79fc 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ConnInstanceTest.java
@@ -35,7 +35,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class ConnInstanceTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/DerSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/DerSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/DerSchemaTest.java
index fcbe239..f4529f8 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/DerSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/DerSchemaTest.java
@@ -30,7 +30,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class DerSchemaTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
index 0777854..57e3d1f 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
@@ -28,7 +28,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
-import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
@@ -59,7 +58,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class GroupTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java
index 2e46caf..82147a2 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainAttrTest.java
@@ -47,7 +47,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class PlainAttrTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
index 0917d27..ab0b88b 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java
@@ -40,7 +40,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class PlainSchemaTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java
index d55fa62..5bf1b83 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java
@@ -31,7 +31,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class RealmTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java
index 713ea64..f143fd8 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ReportTest.java
@@ -35,7 +35,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class ReportTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
index 0e9c8db..967b719 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
@@ -28,7 +28,6 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.persistence.EntityManager;
import org.apache.syncope.common.lib.types.IntMappingType;
import org.apache.syncope.common.lib.types.MappingPurpose;
import org.apache.syncope.common.lib.types.TaskType;
@@ -53,7 +52,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class ResourceTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
index 9764e07..2ca08bb 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
@@ -46,7 +46,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class RoleTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java
index 0a966da..14c463c 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/SecurityQuestionTest.java
@@ -28,7 +28,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class SecurityQuestionTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
index f281fb4..03ff4c6 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
@@ -55,7 +55,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class TaskTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
index b921cdc..62bba9c 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/UserTest.java
@@ -42,7 +42,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class UserTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 2542a1a..37ff60f 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -30,13 +30,13 @@ under the License.
<CPlainAttrValue id="1" attribute_id="1" stringValue="SHA1"/>
<!-- notificationjob.cronExpression:
- + not existing: NotificationJob runs according to Notification.DEFAULT_CRON_EXP
+ + not existing: NotificationJob runs according to NotificationJob.DEFAULT_CRON_EXP
+ provided as empty string: NotificationJob disabled
+ provided as non-empty string: NotificationJob runs according to the given value -->
<PlainSchema name="notificationjob.cronExpression" type="String"
mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
<CPlainAttr id="2" owner_id="1" schema_name="notificationjob.cronExpression"/>
- <CPlainAttrValue id="2" attribute_id="2" stringValue=""/>
+ <CPlainAttrValue id="2" attribute_id="2" stringValue="0/5 * * * * ?"/>
<PlainSchema name="notification.maxRetries" type="Long"
mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/TwoContent.xml b/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
index 39cdae2..b4c5d9b 100644
--- a/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
@@ -29,20 +29,6 @@ under the License.
<CPlainAttr id="1" owner_id="1" schema_name="password.cipher.algorithm"/>
<CPlainAttrValue id="1" attribute_id="1" stringValue="SHA1"/>
- <!-- notificationjob.cronExpression:
- + not existing: NotificationJob runs according to Notification.DEFAULT_CRON_EXP
- + provided as empty string: NotificationJob disabled
- + provided as non-empty string: NotificationJob runs according to the given value -->
- <PlainSchema name="notificationjob.cronExpression" type="String"
- mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
- <CPlainAttr id="2" owner_id="1" schema_name="notificationjob.cronExpression"/>
- <CPlainAttrValue id="2" attribute_id="2" stringValue=""/>
-
- <PlainSchema name="notification.maxRetries" type="Long"
- mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
- <CPlainAttr id="3" owner_id="1" schema_name="notification.maxRetries"/>
- <CPlainAttrValue id="3" attribute_id="3" longValue="3"/>
-
<PlainSchema name="token.length" type="Long"
mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
<CPlainAttr id="4" owner_id="1" schema_name="token.length"/>
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
index 38b3f2a..a38ba50 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
@@ -25,6 +25,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.syncope.common.lib.types.ConnConfProperty;
+import org.apache.syncope.core.misc.security.AuthContextUtils;
import org.apache.syncope.core.misc.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.entity.ConnInstance;
@@ -56,7 +57,8 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory {
private ExternalResourceDAO resourceDAO;
private String getBeanName(final ExternalResource resource) {
- return String.format("connInstance-%d-%s", resource.getConnector().getKey(), resource.getKey());
+ return String.format("connInstance-%s-%d-%s",
+ AuthContextUtils.getDomain(), resource.getConnector().getKey(), resource.getKey());
}
@Override
@@ -71,7 +73,7 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory {
@Override
public Connector createConnector(final ConnInstance connInstance, final Set<ConnConfProperty> configuration) {
- final ConnInstance connInstanceClone = SerializationUtils.clone(connInstance);
+ ConnInstance connInstanceClone = SerializationUtils.clone(connInstance);
connInstanceClone.setConfiguration(configuration);
@@ -82,10 +84,11 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory {
}
@Override
- public ConnInstance getOverriddenConnInstance(final ConnInstance connInstance,
- final Set<ConnConfProperty> overridden) {
- final Set<ConnConfProperty> configuration = new HashSet<>();
- final Map<String, ConnConfProperty> overridable = new HashMap<>();
+ public ConnInstance getOverriddenConnInstance(
+ final ConnInstance connInstance, final Set<ConnConfProperty> overridden) {
+
+ Set<ConnConfProperty> configuration = new HashSet<>();
+ Map<String, ConnConfProperty> overridable = new HashMap<>();
// add not overridable properties
for (ConnConfProperty prop : connInstance.getConfiguration()) {
@@ -114,12 +117,12 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory {
@Override
public void registerConnector(final ExternalResource resource) {
- final ConnInstance connInstance = getOverriddenConnInstance(
+ ConnInstance connInstance = getOverriddenConnInstance(
SerializationUtils.clone(resource.getConnector()), resource.getConnInstanceConfiguration());
- final Connector connector = createConnector(resource.getConnector(), connInstance.getConfiguration());
+ Connector connector = createConnector(resource.getConnector(), connInstance.getConfiguration());
LOG.debug("Connector to be registered: {}", connector);
- final String beanName = getBeanName(resource);
+ String beanName = getBeanName(resource);
if (ApplicationContextProvider.getBeanFactory().containsSingleton(beanName)) {
unregisterConnector(beanName);
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
index 2001e22..dbfeca5 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
@@ -82,17 +82,29 @@ public class TaskJob implements InterruptableJob {
this.runningThread.set(Thread.currentThread());
this.interruptMaxRetries = context.getMergedJobDataMap().getLong(INTERRUPT_MAX_RETRIES_KEY);
- AuthContextUtils.setFakeAuth(context.getMergedJobDataMap().getString(JobInstanceLoader.DOMAIN));
try {
- Class<?> delegateClass = ClassUtils.getClass(context.getMergedJobDataMap().getString(DELEGATE_CLASS_KEY));
-
- ((SchedTaskJobDelegate) ApplicationContextProvider.getBeanFactory().
- createBean(delegateClass, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false)).
- execute(taskKey, context.getMergedJobDataMap().getBoolean(DRY_RUN_JOBDETAIL_KEY));
- } catch (Exception e) {
- throw new JobExecutionException(e);
- } finally {
- AuthContextUtils.clearFakeAuth();
+ AuthContextUtils.execWithAuthContext(context.getMergedJobDataMap().getString(JobInstanceLoader.DOMAIN),
+ new AuthContextUtils.Executable<Void>() {
+
+ @Override
+ public Void exec() {
+ try {
+ Class<?> delegateClass =
+ ClassUtils.getClass(context.getMergedJobDataMap().getString(DELEGATE_CLASS_KEY));
+
+ ((SchedTaskJobDelegate) ApplicationContextProvider.getBeanFactory().
+ createBean(delegateClass, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false)).
+ execute(taskKey, context.getMergedJobDataMap().getBoolean(DRY_RUN_JOBDETAIL_KEY));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ return null;
+ }
+ }
+ );
+ } catch (RuntimeException e) {
+ throw new JobExecutionException(e.getCause());
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
index 65b4618..412b978 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
@@ -375,21 +375,21 @@ public class NotificationManagerImpl implements NotificationManager {
task.addExec(execution);
task.setExecuted(true);
taskDAO.save(task);
- // this flush call is needed to generate a value for the execution id
+ // this flush call is needed to generate a value for the execution key
taskDAO.flush();
return execution;
}
@Override
- public void setTaskExecuted(final Long taskId, final boolean executed) {
- NotificationTask task = taskDAO.find(taskId);
+ public void setTaskExecuted(final Long taskKey, final boolean executed) {
+ NotificationTask task = taskDAO.find(taskKey);
task.setExecuted(executed);
taskDAO.save(task);
}
@Override
- public long countExecutionsWithStatus(final Long taskId, final String status) {
- NotificationTask task = taskDAO.find(taskId);
+ public long countExecutionsWithStatus(final Long taskKey, final String status) {
+ NotificationTask task = taskDAO.find(taskKey);
long count = 0;
for (TaskExec taskExec : task.getExecs()) {
if (status == null) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/AbstractTest.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/AbstractTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/AbstractTest.java
index 07bda8a..e26f238 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/AbstractTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/AbstractTest.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.java;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.transaction.TransactionConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
@@ -30,6 +29,5 @@ import org.springframework.test.context.transaction.TransactionConfiguration;
"classpath:workflowContext.xml",
"classpath:provisioningTest.xml"
})
-@TransactionConfiguration(transactionManager = "MasterTransactionManager")
public abstract class AbstractTest {
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ConnectorManagerTest.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ConnectorManagerTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ConnectorManagerTest.java
index 1a71b89..205aa2f 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ConnectorManagerTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ConnectorManagerTest.java
@@ -31,7 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class ConnectorManagerTest extends AbstractTest {
private ConnectorManager connManager;
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java
index eb100f3..8bf191e 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MappingTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class MappingTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java
index f0a706c..13f1557 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ResourceDataBinderTest.java
@@ -43,7 +43,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class ResourceDataBinderTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConfigurationServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConfigurationServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConfigurationServiceImpl.java
index 90bb6be..09e0779 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConfigurationServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConfigurationServiceImpl.java
@@ -55,8 +55,8 @@ public class ConfigurationServiceImpl extends AbstractServiceImpl implements Con
}
@Override
- public void delete(final String key) {
- logic.delete(key);
+ public void delete(final String schema) {
+ logic.delete(schema);
}
@Override
@@ -65,13 +65,12 @@ public class ConfigurationServiceImpl extends AbstractServiceImpl implements Con
}
@Override
- public AttrTO read(final String key) {
- return logic.read(key);
+ public AttrTO get(final String schema) {
+ return logic.get(schema);
}
@Override
- public void set(final String key, final AttrTO value) {
- value.setSchema(key);
+ public void set(final AttrTO value) {
logic.set(value);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/fit/core-reference/pom.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/pom.xml b/fit/core-reference/pom.xml
index d7e27dc..1339153 100644
--- a/fit/core-reference/pom.xml
+++ b/fit/core-reference/pom.xml
@@ -102,6 +102,11 @@ under the License.
<!-- TEST -->
<dependency>
+ <groupId>com.icegreen</groupId>
+ <artifactId>greenmail</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.syncope.fit</groupId>
<artifactId>syncope-fit-build-tools</artifactId>
<version>${project.version}</version>
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/fit/core-reference/src/main/resources/mail.properties
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/mail.properties b/fit/core-reference/src/main/resources/mail.properties
new file mode 100644
index 0000000..66f2e90
--- /dev/null
+++ b/fit/core-reference/src/main/resources/mail.properties
@@ -0,0 +1,25 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+templates.directory=${conf.directory}
+smtpHost=localhost
+smtpPort=2525
+smtpUser=
+smtpPassword=
+smtpProtocol=smtp
+smtpEncoding=UTF-8
+smtpConnectionTimeout=3000
+mailDebug=false
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java
index 7bdd7c5..fe79eda 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java
@@ -33,6 +33,8 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
import org.apache.syncope.client.lib.SyncopeClient;
import org.apache.syncope.common.lib.to.AbstractTaskTO;
import org.apache.syncope.common.lib.to.NotificationTaskTO;
@@ -41,6 +43,7 @@ import org.apache.syncope.common.lib.to.TaskExecTO;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.types.TaskType;
import org.apache.syncope.common.rest.api.service.TaskService;
+import org.apache.syncope.core.logic.notification.NotificationJob;
public abstract class AbstractTaskITCase extends AbstractITCase {
@@ -88,8 +91,8 @@ public abstract class AbstractTaskITCase extends AbstractITCase {
}
}
- public static TaskExecTO execProvisioningTask(
- final TaskService taskService, final Long taskKey, final int maxWaitSeconds, final boolean dryRun) {
+ protected static TaskExecTO execTask(final TaskService taskService, final Long taskKey, final String initialStatus,
+ final int maxWaitSeconds, final boolean dryRun) {
AbstractTaskTO taskTO = taskService.read(taskKey);
assertNotNull(taskTO);
@@ -97,12 +100,12 @@ public abstract class AbstractTaskITCase extends AbstractITCase {
int preSyncSize = taskTO.getExecutions().size();
TaskExecTO execution = taskService.execute(taskTO.getKey(), dryRun);
- assertEquals("JOB_FIRED", execution.getStatus());
+ assertEquals(initialStatus, execution.getStatus());
int i = 0;
int maxit = maxWaitSeconds;
- // wait for sync completion (executions incremented)
+ // wait for completion (executions incremented)
do {
try {
Thread.sleep(1000);
@@ -122,6 +125,18 @@ public abstract class AbstractTaskITCase extends AbstractITCase {
return taskTO.getExecutions().get(taskTO.getExecutions().size() - 1);
}
+ public static TaskExecTO execProvisioningTask(
+ final TaskService taskService, final Long taskKey, final int maxWaitSeconds, final boolean dryRun) {
+
+ return execTask(taskService, taskKey, "JOB_FIRED", maxWaitSeconds, dryRun);
+ }
+
+ protected static TaskExecTO execNotificationTask(
+ final TaskService taskService, final Long taskKey, final int maxWaitSeconds) {
+
+ return execTask(taskService, taskKey, NotificationJob.Status.SENT.name(), maxWaitSeconds, false);
+ }
+
protected Map<Long, TaskExecTO> execProvisioningTasks(final TaskService taskService,
final Set<Long> taskKeys, final int maxWaitSeconds, final boolean dryRun) throws Exception {
@@ -154,13 +169,13 @@ public abstract class AbstractTaskITCase extends AbstractITCase {
taskService.list(TaskType.NOTIFICATION, SyncopeClient.getListQueryBuilder().build());
assertNotNull(tasks);
assertFalse(tasks.getResult().isEmpty());
- NotificationTaskTO taskTO = null;
- for (NotificationTaskTO task : tasks.getResult()) {
- if (sender.equals(task.getSender())) {
- taskTO = task;
+
+ return CollectionUtils.find(tasks.getResult(), new Predicate<NotificationTaskTO>() {
+
+ @Override
+ public boolean evaluate(final NotificationTaskTO task) {
+ return sender.equals(task.getSender());
}
- }
- return taskTO;
+ });
}
-
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
index e311e41..71317e4 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
@@ -58,9 +58,9 @@ public class ConfigurationITCase extends AbstractITCase {
conf.setSchema(testKey.getKey());
conf.getValues().add("testValue");
- configurationService.set(conf.getSchema(), conf);
+ configurationService.set(conf);
- AttrTO actual = configurationService.read(conf.getSchema());
+ AttrTO actual = configurationService.get(conf.getSchema());
assertEquals(actual, conf);
}
@@ -72,18 +72,18 @@ public class ConfigurationITCase extends AbstractITCase {
assertEquals(Response.Status.NOT_FOUND, e.getType().getResponseStatus());
}
- AttrTO tokenLength = configurationService.read("token.length");
+ AttrTO tokenLength = configurationService.get("token.length");
configurationService.delete("token.length");
try {
- configurationService.read("token.length");
+ configurationService.get("token.length");
} catch (SyncopeClientException e) {
assertEquals(Response.Status.NOT_FOUND, e.getType().getResponseStatus());
}
- configurationService.set(tokenLength.getSchema(), tokenLength);
+ configurationService.set(tokenLength);
- AttrTO actual = configurationService.read(tokenLength.getSchema());
+ AttrTO actual = configurationService.get(tokenLength.getSchema());
assertEquals(actual, tokenLength);
}
@@ -98,20 +98,20 @@ public class ConfigurationITCase extends AbstractITCase {
@Test
public void read() {
- AttrTO conf = configurationService.read("token.expireTime");
+ AttrTO conf = configurationService.get("token.expireTime");
assertNotNull(conf);
}
@Test
public void update() {
- AttrTO expireTime = configurationService.read("token.expireTime");
+ AttrTO expireTime = configurationService.get("token.expireTime");
int value = Integer.parseInt(expireTime.getValues().get(0));
value++;
expireTime.getValues().set(0, value + "");
- configurationService.set(expireTime.getSchema(), expireTime);
+ configurationService.set(expireTime);
- AttrTO newConfigurationTO = configurationService.read(expireTime.getSchema());
+ AttrTO newConfigurationTO = configurationService.get(expireTime.getSchema());
assertEquals(expireTime, newConfigurationTO);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java
index dda5f52..9ca7b50 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/MultitenancyITCase.java
@@ -98,7 +98,7 @@ public class MultitenancyITCase extends AbstractITCase {
@Test
public void readPlainSchemas() {
- assertEquals(18, adminClient.getService(SchemaService.class).list(SchemaType.PLAIN).size());
+ assertEquals(16, adminClient.getService(SchemaService.class).list(SchemaType.PLAIN).size());
}
@Test
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java
index 3fd0778..02c4299 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/NotificationTaskITCase.java
@@ -21,10 +21,25 @@ package org.apache.syncope.fit.core.reference;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import com.icegreen.greenmail.util.GreenMail;
+import com.icegreen.greenmail.util.ServerSetup;
+import java.io.InputStream;
+import java.util.Properties;
+import javax.mail.Flags;
+import javax.mail.Folder;
+import javax.mail.Message;
+import javax.mail.Session;
+import javax.mail.Store;
import javax.ws.rs.core.Response;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.common.lib.to.AttrTO;
+import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.to.MembershipTO;
import org.apache.syncope.common.lib.to.NotificationTO;
import org.apache.syncope.common.lib.to.NotificationTaskTO;
@@ -34,6 +49,9 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.IntMappingType;
import org.apache.syncope.common.lib.types.TraceLevel;
import org.apache.syncope.common.rest.api.service.NotificationService;
+import org.apache.syncope.core.logic.notification.NotificationJob;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
@@ -41,38 +59,166 @@ import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.JVM)
public class NotificationTaskITCase extends AbstractTaskITCase {
+ private static final String MAIL_ADDRESS = "notificationtest@syncope.apache.org";
+
+ private static final String POP3_HOST = "localhost";
+
+ private static final int POP3_PORT = 1110;
+
+ private static String SMTP_HOST;
+
+ private static int SMTP_PORT;
+
+ private static GreenMail greenMail;
+
+ @BeforeClass
+ public static void startGreenMail() {
+ Properties props = new Properties();
+ InputStream propStream = null;
+ try {
+ propStream = ExceptionMapperITCase.class.getResourceAsStream("/mail.properties");
+ props.load(propStream);
+ } catch (Exception e) {
+ LOG.error("Could not load /mail.properties", e);
+ } finally {
+ IOUtils.closeQuietly(propStream);
+ }
+
+ SMTP_HOST = props.getProperty("smtpHost");
+ assertNotNull(SMTP_HOST);
+ SMTP_PORT = Integer.parseInt(props.getProperty("smtpPort"));
+ assertNotNull(SMTP_PORT);
+
+ ServerSetup[] config = new ServerSetup[2];
+ config[0] = new ServerSetup(SMTP_PORT, SMTP_HOST, ServerSetup.PROTOCOL_SMTP);
+ config[1] = new ServerSetup(POP3_PORT, POP3_HOST, ServerSetup.PROTOCOL_POP3);
+ greenMail = new GreenMail(config);
+ greenMail.start();
+ }
+
+ @AfterClass
+ public static void stopGreenMail() {
+ if (greenMail != null) {
+ greenMail.stop();
+ }
+ }
+
+ private boolean verifyMail(final String sender, final String subject, final String mailAddress) throws Exception {
+ LOG.info("Waiting for notification to be sent...");
+ greenMail.waitForIncomingEmail(1);
+
+ boolean found = false;
+ Session session = Session.getDefaultInstance(System.getProperties());
+ session.setDebug(true);
+ Store store = session.getStore("pop3");
+ store.connect(POP3_HOST, POP3_PORT, mailAddress, mailAddress);
+
+ Folder inbox = store.getFolder("INBOX");
+ assertNotNull(inbox);
+ inbox.open(Folder.READ_WRITE);
+
+ Message[] messages = inbox.getMessages();
+ for (Message message : messages) {
+ if (sender.equals(message.getFrom()[0].toString()) && subject.equals(message.getSubject())) {
+ found = true;
+ message.setFlag(Flags.Flag.DELETED, true);
+ }
+ }
+
+ inbox.close(true);
+ store.close();
+ return found;
+ }
+
@Test
- public void issueSYNCOPE81() {
- String sender = "syncope81@syncope.apache.org";
- createNotificationTask(sender);
+ public void notifyByMail() throws Exception {
+ String sender = "syncopetest-" + getUUIDString() + "@syncope.apache.org";
+ String subject = "Test notification " + getUUIDString();
+ String recipient = createNotificationTask(true, true, TraceLevel.ALL, sender, subject);
NotificationTaskTO taskTO = findNotificationTaskBySender(sender);
assertNotNull(taskTO);
+ assertTrue(taskTO.getExecutions().isEmpty());
+ execNotificationTask(taskService, taskTO.getKey(), 50);
+
+ assertTrue(verifyMail(sender, subject, recipient));
+
+ // verify message body
+ taskTO = taskService.read(taskTO.getKey());
+ assertNotNull(taskTO);
+ assertTrue(taskTO.isExecuted());
+ assertNotNull(taskTO.getTextBody());
+ assertTrue("Notification mail text doesn't contain expected content.",
+ taskTO.getTextBody().contains("Your email address is " + recipient + "."));
+ assertTrue("Notification mail text doesn't contain expected content.",
+ taskTO.getTextBody().contains("Your email address inside a link: "
+ + "http://localhost/?email=" + recipient.replaceAll("@", "%40") + " ."));
+ }
+
+ @Test
+ public void notifyByMailEmptyAbout() throws Exception {
+ String sender = "syncopetest-" + getUUIDString() + "@syncope.apache.org";
+ String subject = "Test notification " + getUUIDString();
+ String recipient = createNotificationTask(true, false, TraceLevel.ALL, sender, subject);
+ NotificationTaskTO taskTO = findNotificationTaskBySender(sender);
+ assertNotNull(taskTO);
assertTrue(taskTO.getExecutions().isEmpty());
- // generate an execution in order to verify the deletion of a notification task with one or more executions
- TaskExecTO execution = taskService.execute(taskTO.getKey(), false);
- assertEquals("NOT_SENT", execution.getStatus());
-
- int i = 0;
- int maxit = 50;
- int executions = 0;
-
- // wait for task exec completion (executions incremented)
- do {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
+ execNotificationTask(taskService, taskTO.getKey(), 50);
- taskTO = taskService.read(taskTO.getKey());
+ assertTrue(verifyMail(sender, subject, recipient));
+ }
+
+ @Test
+ public void notifyByMailWithRetry() throws Exception {
+ // 1. Set higher number of retries
+ AttrTO origMaxRetries = configurationService.get("notification.maxRetries");
+
+ configurationService.set(attrTO(origMaxRetries.getSchema(), "10"));
+ // 2. Stop mail server to force errors while sending out e-mails
+ stopGreenMail();
+
+ try {
+ // 3. create notification and user
+ String sender = "syncopetest-" + getUUIDString() + "@syncope.apache.org";
+ String subject = "Test notification " + getUUIDString();
+ createNotificationTask(true, true, TraceLevel.ALL, sender, subject);
+ NotificationTaskTO taskTO = findNotificationTaskBySender(sender);
assertNotNull(taskTO);
- assertNotNull(taskTO.getExecutions());
+ assertTrue(taskTO.getExecutions().isEmpty());
+
+ // 4. verify notification could not be delivered
+ execTask(taskService, taskTO.getKey(), NotificationJob.Status.NOT_SENT.name(), 5, false);
+
+ taskTO = taskService.read(taskTO.getKey());
+ assertNotNull(taskTO);
+ assertFalse(taskTO.isExecuted());
+ assertFalse(taskTO.getExecutions().isEmpty());
+ for (TaskExecTO exec : taskTO.getExecutions()) {
+ assertEquals(NotificationJob.Status.NOT_SENT.name(), exec.getStatus());
+ }
+ } finally {
+ // start mail server again
+ startGreenMail();
+ // reset number of retries
+ configurationService.set(origMaxRetries);
+ }
+ }
+
+ @Test
+ public void issueSYNCOPE81() {
+ String sender = "syncope81@syncope.apache.org";
+ createNotificationTask(true, true, TraceLevel.ALL, sender, "Test notification");
+ NotificationTaskTO taskTO = findNotificationTaskBySender(sender);
+ assertNotNull(taskTO);
+ assertTrue(taskTO.getExecutions().isEmpty());
- i++;
- } while (executions == taskTO.getExecutions().size() && i < maxit);
+ // generate an execution in order to verify the deletion of a notification task with one or more executions
+ execNotificationTask(taskService, taskTO.getKey(), 50);
+ taskTO = taskService.read(taskTO.getKey());
+ assertTrue(taskTO.isExecuted());
assertFalse(taskTO.getExecutions().isEmpty());
taskService.delete(taskTO.getKey());
@@ -82,7 +228,7 @@ public class NotificationTaskITCase extends AbstractTaskITCase {
public void issueSYNCOPE86() {
// 1. create notification task
String sender = "syncope86@syncope.apache.org";
- createNotificationTask(sender);
+ createNotificationTask(true, true, TraceLevel.ALL, sender, "Test notification");
// 2. get NotificationTaskTO for user just created
NotificationTaskTO taskTO = findNotificationTaskBySender(sender);
@@ -91,12 +237,12 @@ public class NotificationTaskITCase extends AbstractTaskITCase {
try {
// 3. execute the generated NotificationTask
- TaskExecTO execution = taskService.execute(taskTO.getKey(), false);
- assertNotNull(execution);
+ execNotificationTask(taskService, taskTO.getKey(), 50);
// 4. verify
taskTO = taskService.read(taskTO.getKey());
assertNotNull(taskTO);
+ assertTrue(taskTO.isExecuted());
assertEquals(1, taskTO.getExecutions().size());
} finally {
// Remove execution to make test re-runnable
@@ -104,39 +250,146 @@ public class NotificationTaskITCase extends AbstractTaskITCase {
}
}
- private void createNotificationTask(final String sender) {
+ @Test
+ public void issueSYNCOPE192() throws Exception {
+ String sender = "syncopetest-" + getUUIDString() + "@syncope.apache.org";
+ String subject = "Test notification " + getUUIDString();
+ String recipient = createNotificationTask(true, true, TraceLevel.NONE, sender, subject);
+ NotificationTaskTO taskTO = findNotificationTaskBySender(sender);
+ assertNotNull(taskTO);
+ assertTrue(taskTO.getExecutions().isEmpty());
+
+ taskService.execute(taskTO.getKey(), false);
+
+ try {
+ Thread.sleep(5);
+ } catch (InterruptedException e) {
+ }
+
+ assertTrue(verifyMail(sender, subject, recipient));
+
+ // verify that last exec status was updated
+ taskTO = taskService.read(taskTO.getKey());
+ assertNotNull(taskTO);
+ assertTrue(taskTO.isExecuted());
+ assertTrue(taskTO.getExecutions().isEmpty());
+ assertTrue(StringUtils.isNotBlank(taskTO.getLatestExecStatus()));
+ }
+
+ @Test
+ public void issueSYNCOPE445() throws Exception {
+ String sender = "syncopetest-" + getUUIDString() + "@syncope.apache.org";
+ String subject = "Test notification " + getUUIDString();
+ String recipient = createNotificationTask(
+ true, true, TraceLevel.ALL, sender, subject, "syncope445@syncope.apache.org");
+ NotificationTaskTO taskTO = findNotificationTaskBySender(sender);
+ assertNotNull(taskTO);
+ assertTrue(taskTO.getExecutions().isEmpty());
+
+ execNotificationTask(taskService, taskTO.getKey(), 50);
+
+ assertTrue(verifyMail(sender, subject, recipient));
+
+ // verify task
+ taskTO = taskService.read(taskTO.getKey());
+ assertTrue(taskTO.isExecuted());
+ assertNotNull(taskTO);
+ assertTrue(taskTO.getRecipients().contains("syncope445@syncope.apache.org"));
+ }
+
+ @Test
+ public void issueSYNCOPE446() throws Exception {
// 1. Create notification
NotificationTO notification = new NotificationTO();
- notification.setTraceLevel(TraceLevel.FAILURES);
+ notification.setTraceLevel(TraceLevel.ALL);
+ notification.getEvents().add("[REST]:[GroupLogic]:[]:[create]:[SUCCESS]");
+
+ String groupName = "group" + getUUIDString();
+ notification.getAbouts().put(AnyTypeKind.GROUP.name(),
+ SyncopeClient.getGroupSearchConditionBuilder().is("name").equalTo(groupName).query());
+
+ notification.setRecipients(SyncopeClient.getUserSearchConditionBuilder().inGroups(8L).query());
+ notification.setSelfAsRecipient(false);
+ notification.setRecipientAttrName("email");
+ notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
+ notification.getStaticRecipients().add(MAIL_ADDRESS);
+
+ String sender = "syncopetest-" + getUUIDString() + "@syncope.apache.org";
+ notification.setSender(sender);
+ String subject = "Test notification " + getUUIDString();
+ notification.setSubject(subject);
+ notification.setTemplate("optin");
+ notification.setActive(true);
+
+ Response response = notificationService.create(notification);
+ notification = getObject(response.getLocation(), NotificationService.class, NotificationTO.class);
+ assertNotNull(notification);
+
+ // 2. create group
+ GroupTO groupTO = new GroupTO();
+ groupTO.setName(groupName);
+ groupTO.setRealm("/even/two");
+ groupTO = createGroup(groupTO);
+ assertNotNull(groupTO);
+
+ // 3. verify
+ NotificationTaskTO taskTO = findNotificationTaskBySender(sender);
+ assertNotNull(taskTO);
+
+ execNotificationTask(taskService, taskTO.getKey(), 50);
+
+ assertTrue(verifyMail(sender, subject, MAIL_ADDRESS));
+ }
+
+ @Test
+ public void issueSYNCOPE492() throws Exception {
+ String sender = "syncopetest-" + getUUIDString() + "@syncope.apache.org";
+ String subject = "Test notification " + getUUIDString();
+ createNotificationTask(false, true, TraceLevel.NONE, sender, subject, "syncope445@syncope.apache.org");
+
+ // verify that no task was created for disabled notification
+ assertNull(findNotificationTaskBySender(sender));
+ }
+
+ private String createNotificationTask(final boolean active, final boolean includeAbout, final TraceLevel traceLevel,
+ final String sender, final String subject, final String... staticRecipients) {
+
+ // 1. Create notification
+ NotificationTO notification = new NotificationTO();
+ notification.setTraceLevel(traceLevel);
notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
- notification.getAbouts().put(AnyTypeKind.USER.name(),
- SyncopeClient.getUserSearchConditionBuilder().inGroups(7L).query());
+ if (includeAbout) {
+ notification.getAbouts().put(AnyTypeKind.USER.name(),
+ SyncopeClient.getUserSearchConditionBuilder().inGroups(7L).query());
+ }
notification.setRecipients(SyncopeClient.getUserSearchConditionBuilder().inGroups(8L).query());
notification.setSelfAsRecipient(true);
-
notification.setRecipientAttrName("email");
notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
+ if (staticRecipients != null) {
+ CollectionUtils.addAll(notification.getStaticRecipients(), staticRecipients);
+ }
notification.setSender(sender);
- String subject = "Test notification";
notification.setSubject(subject);
notification.setTemplate("optin");
- notification.setActive(true);
+ notification.setActive(active);
Response response = notificationService.create(notification);
notification = getObject(response.getLocation(), NotificationService.class, NotificationTO.class);
assertNotNull(notification);
// 2. create user
- UserTO userTO = UserITCase.getUniqueSampleTO("syncope@syncope.apache.org");
+ UserTO userTO = UserITCase.getUniqueSampleTO(MAIL_ADDRESS);
MembershipTO membershipTO = new MembershipTO();
membershipTO.setRightKey(7);
userTO.getMemberships().add(membershipTO);
userTO = createUser(userTO);
assertNotNull(userTO);
+ return userTO.getUsername();
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java
index 048259d..da438d3 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java
@@ -113,18 +113,17 @@ public class UserITCase extends AbstractITCase {
}
public static UserTO getSampleTO(final String email) {
- String uid = email;
UserTO userTO = new UserTO();
userTO.setRealm(SyncopeConstants.ROOT_REALM);
userTO.setPassword("password123");
- userTO.setUsername(uid);
+ userTO.setUsername(email);
- userTO.getPlainAttrs().add(attrTO("fullname", uid));
- userTO.getPlainAttrs().add(attrTO("firstname", uid));
+ userTO.getPlainAttrs().add(attrTO("fullname", email));
+ userTO.getPlainAttrs().add(attrTO("firstname", email));
userTO.getPlainAttrs().add(attrTO("surname", "surname"));
userTO.getPlainAttrs().add(attrTO("type", "a type"));
- userTO.getPlainAttrs().add(attrTO("userId", uid));
- userTO.getPlainAttrs().add(attrTO("email", uid));
+ userTO.getPlainAttrs().add(attrTO("userId", email));
+ userTO.getPlainAttrs().add(attrTO("email", email));
userTO.getPlainAttrs().add(attrTO("loginDate", DATE_FORMAT.get().format(new Date())));
userTO.getDerAttrs().add(attrTO("cn", null));
userTO.getVirAttrs().add(attrTO("virtualdata", "virtualvalue"));
@@ -1274,12 +1273,12 @@ public class UserITCase extends AbstractITCase {
@Test()
public void issueSYNCOPE51() {
- AttrTO defaultCA = configurationService.read("password.cipher.algorithm");
+ AttrTO defaultCA = configurationService.get("password.cipher.algorithm");
final String originalCAValue = defaultCA.getValues().get(0);
defaultCA.getValues().set(0, "MD5");
- configurationService.set(defaultCA.getSchema(), defaultCA);
+ configurationService.set(defaultCA);
- AttrTO newCA = configurationService.read(defaultCA.getSchema());
+ AttrTO newCA = configurationService.get(defaultCA.getSchema());
assertEquals(defaultCA, newCA);
UserTO userTO = getSampleTO("syncope51@syncope.apache.org");
@@ -1294,9 +1293,9 @@ public class UserITCase extends AbstractITCase {
}
defaultCA.getValues().set(0, originalCAValue);
- configurationService.set(defaultCA.getSchema(), defaultCA);
+ configurationService.set(defaultCA);
- AttrTO oldCA = configurationService.read(defaultCA.getSchema());
+ AttrTO oldCA = configurationService.get(defaultCA.getSchema());
assertEquals(defaultCA, oldCA);
}
@@ -1428,12 +1427,12 @@ public class UserITCase extends AbstractITCase {
@Test
public void isseSYNCOPE136AES() {
// 1. read configured cipher algorithm in order to be able to restore it at the end of test
- AttrTO pwdCipherAlgo = configurationService.read("password.cipher.algorithm");
+ AttrTO pwdCipherAlgo = configurationService.get("password.cipher.algorithm");
final String origpwdCipherAlgo = pwdCipherAlgo.getValues().get(0);
// 2. set AES password cipher algorithm
pwdCipherAlgo.getValues().set(0, "AES");
- configurationService.set(pwdCipherAlgo.getSchema(), pwdCipherAlgo);
+ configurationService.set(pwdCipherAlgo);
// 3. create user with no resources
UserTO userTO = getUniqueSampleTO("syncope136_AES@apache.org");
@@ -1466,7 +1465,7 @@ public class UserITCase extends AbstractITCase {
// 6. restore initial cipher algorithm
pwdCipherAlgo.getValues().set(0, origpwdCipherAlgo);
- configurationService.set(pwdCipherAlgo.getSchema(), pwdCipherAlgo);
+ configurationService.set(pwdCipherAlgo);
}
@Test
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserSelfITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserSelfITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserSelfITCase.java
index 2944cdc..34a9349 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserSelfITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserSelfITCase.java
@@ -252,8 +252,7 @@ public class UserSelfITCase extends AbstractITCase {
@Test
public void passwordReset() {
// 0. ensure that password request DOES require security question
- configurationService.set("passwordReset.securityQuestion",
- attrTO("passwordReset.securityQuestion", "true"));
+ configurationService.set(attrTO("passwordReset.securityQuestion", "true"));
// 1. create an user with security question and answer
UserTO user = UserITCase.getUniqueSampleTO("pwdReset@syncope.apache.org");
@@ -313,8 +312,7 @@ public class UserSelfITCase extends AbstractITCase {
@Test
public void passwordResetWithoutSecurityQuestion() {
// 0. disable security question for password reset
- configurationService.set("passwordReset.securityQuestion",
- attrTO("passwordReset.securityQuestion", "false"));
+ configurationService.set(attrTO("passwordReset.securityQuestion", "false"));
// 1. create an user with security question and answer
UserTO user = UserITCase.getUniqueSampleTO("pwdResetNoSecurityQuestion@syncope.apache.org");
@@ -350,8 +348,7 @@ public class UserSelfITCase extends AbstractITCase {
assertNull(read.getToken());
// 7. re-enable security question for password reset
- configurationService.set("passwordReset.securityQuestion",
- attrTO("passwordReset.securityQuestion", "true"));
+ configurationService.set(attrTO("passwordReset.securityQuestion", "true"));
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index b58c7e1..6330b9e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -332,7 +332,7 @@ under the License.
<jackson.version>2.6.1</jackson.version>
- <spring.version>4.1.7.RELEASE</spring.version>
+ <spring.version>4.2.0.RELEASE</spring.version>
<spring-security.version>4.0.2.RELEASE</spring-security.version>
<openjpa.version>2.4.0</openjpa.version>
[3/6] syncope git commit: Travis: removing Maven parallel options
Posted by md...@apache.org.
Travis: removing Maven parallel options
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/e41e5018
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/e41e5018
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/e41e5018
Branch: refs/heads/SYNCOPE-156
Commit: e41e5018b25a44c3e1794c665355af813f1df8c4
Parents: 8806176
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Aug 17 13:43:07 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Aug 17 13:43:07 2015 +0200
----------------------------------------------------------------------
.travis.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/e41e5018/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index b46adc1..fe9b45b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,11 +20,11 @@ language: java
jdk:
- openjdk7
# default install is mvn install --quiet -DskipTests=true
-install: mvn --show-version --quiet -T 1C -P all,skipTests
+install: mvn --show-version --quiet -P all,skipTests
#invoker.streamLogs: we cannot access to log files through Travis web ui, so display everything in the console
script:
- sudo rm /etc/mavenrc
- export MAVEN_OPTS="-Xmx2469m -XX:MaxPermSize=512m -XX:+TieredCompilation -XX:TieredStopAtLevel=1"
- - mvn --show-version --quiet -T 1C clean install -Dinvoker.streamLogs=true
+ - mvn --show-version --quiet clean install -Dinvoker.streamLogs=true
notifications:
webhooks: http://rovere.tirasa.net/cgi-bin/travis.cgi
[4/6] syncope git commit: Travis: switching back to e-mail
notifications, let's see...
Posted by md...@apache.org.
Travis: switching back to e-mail notifications, let's see...
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/dbeb6208
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/dbeb6208
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/dbeb6208
Branch: refs/heads/SYNCOPE-156
Commit: dbeb620824677b8eb4cab59d811630a0992a3f42
Parents: e41e501
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Aug 17 14:05:12 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Aug 17 14:05:12 2015 +0200
----------------------------------------------------------------------
.travis.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/dbeb6208/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index fe9b45b..044d84d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -27,4 +27,5 @@ script:
- export MAVEN_OPTS="-Xmx2469m -XX:MaxPermSize=512m -XX:+TieredCompilation -XX:TieredStopAtLevel=1"
- mvn --show-version --quiet clean install -Dinvoker.streamLogs=true
notifications:
- webhooks: http://rovere.tirasa.net/cgi-bin/travis.cgi
+ email:
+ - dev@syncope.apache.org
[2/6] syncope git commit: [SYNCOPE-652] Upgrade Spring to
4.2.0.RELEASE + various cleanup
Posted by md...@apache.org.
[SYNCOPE-652] Upgrade Spring to 4.2.0.RELEASE + various cleanup
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/88061761
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/88061761
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/88061761
Branch: refs/heads/SYNCOPE-156
Commit: 88061761ea78bfe822f653c899a4ad9c4f4e3493
Parents: 4b2dc4d
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Aug 17 13:30:27 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Aug 17 13:30:27 2015 +0200
----------------------------------------------------------------------
.travis.yml | 6 +-
.../cli/commands/ConfigurationCommand.java | 8 +-
.../console/rest/ConfigurationRestClient.java | 10 +-
.../syncope/common/lib/mod/StatusMod.java | 2 +-
.../apache/syncope/common/lib/to/AttrTO.java | 2 +
.../apache/syncope/common/lib/to/LoggerTO.java | 2 +-
.../rest/api/service/ConfigurationService.java | 25 +-
core/logic/pom.xml | 86 +--
.../syncope/core/logic/ConfigurationLogic.java | 16 +-
.../apache/syncope/core/logic/TaskLogic.java | 4 +-
.../core/logic/init/JobInstanceLoaderImpl.java | 85 +--
.../logic/notification/NotificationJob.java | 21 +-
.../notification/NotificationJobDelegate.java | 5 +-
.../syncope/core/logic/report/ReportJob.java | 22 +-
.../apache/syncope/core/logic/AbstractTest.java | 40 --
.../syncope/core/logic/NotificationTest.java | 659 -------------------
core/logic/src/test/resources/logicTest.xml | 59 --
.../core/misc/security/AuthContextUtils.java | 8 +-
.../misc/spring/ApplicationContextProvider.java | 11 +
.../spring/DomainTransactionInterceptor.java | 70 ++
.../spring/DomainTransactionInterceptor.java | 70 --
.../jpa/spring/SpringComponentReplacer.java | 42 --
.../core/persistence/jpa/AbstractTest.java | 2 -
.../persistence/jpa/inner/AnyObjectTest.java | 2 +-
.../persistence/jpa/inner/AnySearchTest.java | 2 +-
.../persistence/jpa/inner/AnyTypeClassTest.java | 2 +-
.../core/persistence/jpa/inner/AnyTypeTest.java | 2 +-
.../core/persistence/jpa/inner/ConfTest.java | 2 +-
.../persistence/jpa/inner/ConnInstanceTest.java | 2 +-
.../core/persistence/jpa/inner/DerAttrTest.java | 2 +-
.../persistence/jpa/inner/DerSchemaTest.java | 2 +-
.../core/persistence/jpa/inner/DomainTest.java | 2 +-
.../core/persistence/jpa/inner/GroupTest.java | 2 +-
.../persistence/jpa/inner/MultitenancyTest.java | 6 +-
.../persistence/jpa/inner/NotificationTest.java | 2 +-
.../persistence/jpa/inner/PlainAttrTest.java | 2 +-
.../persistence/jpa/inner/PlainSchemaTest.java | 2 +-
.../core/persistence/jpa/inner/PolicyTest.java | 2 +-
.../core/persistence/jpa/inner/RealmTest.java | 2 +-
.../jpa/inner/RelationshipTypeTest.java | 2 +-
.../core/persistence/jpa/inner/ReportTest.java | 2 +-
.../persistence/jpa/inner/ResourceTest.java | 2 +-
.../core/persistence/jpa/inner/RoleTest.java | 2 +-
.../jpa/inner/SecurityQuestionTest.java | 2 +-
.../persistence/jpa/inner/TaskExecTest.java | 2 +-
.../core/persistence/jpa/inner/TaskTest.java | 2 +-
.../core/persistence/jpa/inner/UserTest.java | 2 +-
.../core/persistence/jpa/inner/VirAttrTest.java | 2 +-
.../persistence/jpa/inner/VirSchemaTest.java | 2 +-
.../persistence/jpa/outer/AnySearchTest.java | 2 +-
.../persistence/jpa/outer/AnyTypeClassTest.java | 2 +-
.../core/persistence/jpa/outer/AnyTypeTest.java | 2 +-
.../persistence/jpa/outer/ConnInstanceTest.java | 2 +-
.../persistence/jpa/outer/DerSchemaTest.java | 2 +-
.../core/persistence/jpa/outer/GroupTest.java | 3 +-
.../persistence/jpa/outer/PlainAttrTest.java | 2 +-
.../persistence/jpa/outer/PlainSchemaTest.java | 2 +-
.../core/persistence/jpa/outer/RealmTest.java | 2 +-
.../core/persistence/jpa/outer/ReportTest.java | 2 +-
.../persistence/jpa/outer/ResourceTest.java | 3 +-
.../core/persistence/jpa/outer/RoleTest.java | 2 +-
.../jpa/outer/SecurityQuestionTest.java | 2 +-
.../core/persistence/jpa/outer/TaskTest.java | 2 +-
.../core/persistence/jpa/outer/UserTest.java | 2 +-
.../test/resources/domains/MasterContent.xml | 4 +-
.../src/test/resources/domains/TwoContent.xml | 14 -
.../provisioning/java/ConnectorManager.java | 21 +-
.../core/provisioning/java/job/TaskJob.java | 32 +-
.../notification/NotificationManagerImpl.java | 10 +-
.../core/provisioning/java/AbstractTest.java | 2 -
.../provisioning/java/ConnectorManagerTest.java | 2 +-
.../core/provisioning/java/MappingTest.java | 2 +-
.../java/ResourceDataBinderTest.java | 2 +-
.../cxf/service/ConfigurationServiceImpl.java | 11 +-
fit/core-reference/pom.xml | 5 +
.../src/main/resources/mail.properties | 25 +
.../fit/core/reference/AbstractTaskITCase.java | 37 +-
.../fit/core/reference/ConfigurationITCase.java | 20 +-
.../fit/core/reference/MultitenancyITCase.java | 2 +-
.../core/reference/NotificationTaskITCase.java | 317 ++++++++-
.../syncope/fit/core/reference/UserITCase.java | 27 +-
.../fit/core/reference/UserSelfITCase.java | 9 +-
pom.xml | 2 +-
83 files changed, 663 insertions(+), 1224 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 4ec5ae7..b46adc1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,11 +20,11 @@ language: java
jdk:
- openjdk7
# default install is mvn install --quiet -DskipTests=true
-install: mvn --show-version --quiet -P all,skipTests
+install: mvn --show-version --quiet -T 1C -P all,skipTests
#invoker.streamLogs: we cannot access to log files through Travis web ui, so display everything in the console
script:
- sudo rm /etc/mavenrc
- - export MAVEN_OPTS="-Xmx2469m -XX:MaxPermSize=512m"
- - mvn --show-version --quiet clean install -Dinvoker.streamLogs=true
+ - export MAVEN_OPTS="-Xmx2469m -XX:MaxPermSize=512m -XX:+TieredCompilation -XX:TieredStopAtLevel=1"
+ - mvn --show-version --quiet -T 1C clean install -Dinvoker.streamLogs=true
notifications:
webhooks: http://rovere.tirasa.net/cgi-bin/travis.cgi
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java
index 54eea17..70c532d 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java
@@ -113,7 +113,7 @@ public class ConfigurationCommand extends AbstractCommand {
} else if (StringUtils.isNotBlank(confNameToRead)) {
LOG.debug("- configuration read {} command", confNameToRead);
try {
- final AttrTO attrTO = configurationService.read(confNameToRead);
+ final AttrTO attrTO = configurationService.get(confNameToRead);
System.out.println(" - Conf " + attrTO.getSchema() + " has value(s) " + attrTO.getValues()
+ " - readonly: " + attrTO.isReadonly());
} catch (final SyncopeClientException ex) {
@@ -123,10 +123,10 @@ public class ConfigurationCommand extends AbstractCommand {
LOG.debug("- configuration update command with params {}", updateConf);
try {
for (final Map.Entry<String, String> entrySet : updateConf.entrySet()) {
- final AttrTO attrTO = configurationService.read(entrySet.getKey());
+ final AttrTO attrTO = configurationService.get(entrySet.getKey());
attrTO.getValues().clear();
attrTO.getValues().add(entrySet.getValue());
- configurationService.set(entrySet.getKey(), attrTO);
+ configurationService.set(attrTO);
System.out.println(" - Conf " + attrTO.getSchema() + " has value(s) " + attrTO.getValues()
+ " - readonly: " + attrTO.isReadonly());
}
@@ -140,7 +140,7 @@ public class ConfigurationCommand extends AbstractCommand {
final AttrTO attrTO = new AttrTO();
attrTO.setSchema(entrySet.getKey());
attrTO.getValues().add(entrySet.getValue());
- configurationService.set(entrySet.getKey(), attrTO);
+ configurationService.set(attrTO);
System.out.println(" - Conf " + attrTO.getSchema() + " created with value(s) " + attrTO.getValues()
+ " - readonly: " + attrTO.isReadonly());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/client/console/src/main/java/org/apache/syncope/client/console/rest/ConfigurationRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConfigurationRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConfigurationRestClient.java
index 36b0d1c..ade9408 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConfigurationRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConfigurationRestClient.java
@@ -53,9 +53,9 @@ public class ConfigurationRestClient extends BaseRestClient {
return conf;
}
- public AttrTO read(final String key) {
+ public AttrTO get(final String key) {
try {
- return getService(ConfigurationService.class).read(key);
+ return getService(ConfigurationService.class).get(key);
} catch (SyncopeClientException e) {
LOG.error("While reading a configuration schema", e);
}
@@ -67,7 +67,7 @@ public class ConfigurationRestClient extends BaseRestClient {
return null;
}
- AttrTO attrLayout = read(type.getConfKey());
+ AttrTO attrLayout = get(type.getConfKey());
if (attrLayout == null) {
attrLayout = new AttrTO();
attrLayout.setSchema(type.getConfKey());
@@ -79,8 +79,8 @@ public class ConfigurationRestClient extends BaseRestClient {
return attrLayout;
}
- public void set(final AttrTO attributeTO) {
- getService(ConfigurationService.class).set(attributeTO.getSchema(), attributeTO);
+ public void set(final AttrTO attrTO) {
+ getService(ConfigurationService.class).set(attrTO);
}
public void delete(final String key) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/common/lib/src/main/java/org/apache/syncope/common/lib/mod/StatusMod.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/mod/StatusMod.java b/common/lib/src/main/java/org/apache/syncope/common/lib/mod/StatusMod.java
index f989ecf..e3fc901 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/mod/StatusMod.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/mod/StatusMod.java
@@ -67,11 +67,11 @@ public class StatusMod extends AbstractBaseBean {
*/
private final List<String> resourceNames = new ArrayList<>();
- @PathParam("key")
public long getKey() {
return key;
}
+ @PathParam("key")
public void setKey(final long key) {
this.key = key;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
index cf385b4..c3b468c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
@@ -22,6 +22,7 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.List;
+import javax.ws.rs.PathParam;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@@ -58,6 +59,7 @@ public class AttrTO extends AbstractBaseBean {
/**
* @param schema name to be set
*/
+ @PathParam("schema")
public void setSchema(final String schema) {
this.schema = schema;
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java
index 6e1ce1d..0dfa8b5 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java
@@ -42,11 +42,11 @@ public class LoggerTO extends AbstractBaseBean {
this.level = level;
}
- @PathParam("key")
public String getKey() {
return key;
}
+ @PathParam("key")
public void setKey(final String key) {
this.key = key;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConfigurationService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConfigurationService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConfigurationService.java
index 3fa5f8a..875ebc5 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConfigurationService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ConfigurationService.java
@@ -56,34 +56,33 @@ public interface ConfigurationService extends JAXRSService {
ConfTO list();
/**
- * Returns configuration parameter with matching key.
+ * Returns configuration parameter with matching schema.
*
- * @param key identifier of configuration to be read
- * @return configuration parameter with matching key
+ * @param schema identifier of configuration to be read
+ * @return configuration parameter with matching schema
*/
@GET
- @Path("{key}")
+ @Path("{schema}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- AttrTO read(@NotNull @PathParam("key") String key);
+ AttrTO get(@NotNull @PathParam("schema") String schema);
/**
- * Creates / updates the configuration parameter with the given key.
+ * Creates / updates the configuration parameter with the given schema.
*
- * @param key parameter key
* @param value parameter value
*/
@PUT
- @Path("{key}")
+ @Path("{schema}")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- void set(@NotNull @PathParam("key") String key, @NotNull AttrTO value);
+ void set(@NotNull AttrTO value);
/**
- * Deletes the configuration parameter with matching key.
+ * Deletes the configuration parameter with matching schema.
*
- * @param key configuration parameter key
+ * @param schema configuration parameter schema
*/
@DELETE
- @Path("{key}")
+ @Path("{schema}")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- void delete(@NotNull @PathParam("key") String key);
+ void delete(@NotNull @PathParam("schema") String schema);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/pom.xml
----------------------------------------------------------------------
diff --git a/core/logic/pom.xml b/core/logic/pom.xml
index d652f3e..7b25e9b 100644
--- a/core/logic/pom.xml
+++ b/core/logic/pom.xml
@@ -93,51 +93,6 @@ under the License.
<artifactId>syncope-core-provisioning-java</artifactId>
<version>${project.version}</version>
</dependency>
-
- <!-- TEST -->
- <dependency>
- <groupId>com.icegreen</groupId>
- <artifactId>greenmail</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.syncope.core</groupId>
- <artifactId>syncope-core-workflow-java</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>javax.el</groupId>
- <artifactId>javax.el-api</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.syncope.core</groupId>
- <artifactId>syncope-core-persistence-jpa</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- <version>${slf4j.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
@@ -147,49 +102,10 @@ under the License.
<filtering>true</filtering>
</resource>
</resources>
- <testResources>
- <testResource>
- <directory>${basedir}/src/test/resources</directory>
- <filtering>true</filtering>
- </testResource>
- <testResource>
- <directory>${basedir}/../persistence-jpa/src/main/resources</directory>
- <includes>
- <include>persistence.properties</include>
- </includes>
- <filtering>true</filtering>
- </testResource>
- <testResource>
- <directory>${basedir}/../persistence-jpa/src/test/resources</directory>
- <filtering>true</filtering>
- </testResource>
- <testResource>
- <directory>${basedir}/../provisioning-java/src/main/resources</directory>
- <includes>
- <include>connid.properties</include>
- </includes>
- <filtering>true</filtering>
- </testResource>
- </testResources>
-
+
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <inherited>true</inherited>
- <executions>
- <execution>
- <id>set-bundles</id>
- <phase>process-test-resources</phase>
- <goals>
- <goal>copy</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
index 1598498..b36c4ea 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
@@ -60,8 +60,8 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<ConfTO> {
private GroupWorkflowAdapter gwfAdapter;
@PreAuthorize("hasRole('" + Entitlement.CONFIGURATION_DELETE + "')")
- public void delete(final String key) {
- confDAO.delete(key);
+ public void delete(final String schema) {
+ confDAO.delete(schema);
}
@PreAuthorize("hasRole('" + Entitlement.CONFIGURATION_LIST + "')")
@@ -70,18 +70,18 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<ConfTO> {
}
@PreAuthorize("isAuthenticated()")
- public AttrTO read(final String key) {
+ public AttrTO get(final String schema) {
AttrTO result;
- CPlainAttr conf = confDAO.find(key);
+ CPlainAttr conf = confDAO.find(schema);
if (conf == null) {
- PlainSchema schema = plainSchemaDAO.find(key);
- if (schema == null) {
- throw new NotFoundException("Configuration key " + key);
+ PlainSchema plainSchema = plainSchemaDAO.find(schema);
+ if (plainSchema == null) {
+ throw new NotFoundException("Configuration schema " + schema);
}
result = new AttrTO();
- result.setSchema(key);
+ result.setSchema(schema);
} else {
result = binder.getAttrTO(conf);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index 9c119f3..9c436ac 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -196,12 +196,12 @@ public class TaskLogic extends AbstractJobLogic<AbstractTaskTO> {
TaskExecTO result = null;
switch (taskUtils.getType()) {
case PROPAGATION:
- final TaskExec propExec = taskExecutor.execute((PropagationTask) task);
+ TaskExec propExec = taskExecutor.execute((PropagationTask) task);
result = binder.getTaskExecTO(propExec);
break;
case NOTIFICATION:
- final TaskExec notExec = notificationJobDelegate.executeSingle((NotificationTask) task);
+ TaskExec notExec = notificationJobDelegate.executeSingle((NotificationTask) task);
result = binder.getTaskExecTO(notExec);
break;
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/src/main/java/org/apache/syncope/core/logic/init/JobInstanceLoaderImpl.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/init/JobInstanceLoaderImpl.java b/core/logic/src/main/java/org/apache/syncope/core/logic/init/JobInstanceLoaderImpl.java
index 3e7e90f..33cb920 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/init/JobInstanceLoaderImpl.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/init/JobInstanceLoaderImpl.java
@@ -25,6 +25,8 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.types.TaskType;
import org.apache.syncope.core.persistence.api.dao.ConfDAO;
@@ -229,59 +231,66 @@ public class JobInstanceLoaderImpl implements JobInstanceLoader, SyncopeLoader {
@Transactional
@Override
public void load() {
- AuthContextUtils.setFakeAuth(SyncopeConstants.MASTER_DOMAIN);
- String notificationJobCronExpression = StringUtils.EMPTY;
- long interruptMaxRetries = 1;
- try {
- CPlainAttr notificationJobCronExp =
- confDAO.find("notificationjob.cronExpression", NotificationJob.DEFAULT_CRON_EXP);
- if (!notificationJobCronExp.getValuesAsStrings().isEmpty()) {
- notificationJobCronExpression = notificationJobCronExp.getValuesAsStrings().get(0);
- }
+ final Pair<String, Long> notificationConf = AuthContextUtils.execWithAuthContext(SyncopeConstants.MASTER_DOMAIN,
+ new AuthContextUtils.Executable<Pair<String, Long>>() {
- interruptMaxRetries = confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue();
- } finally {
- AuthContextUtils.clearFakeAuth();
- }
+ @Override
+ public Pair<String, Long> exec() {
+ String notificationJobCronExpression = StringUtils.EMPTY;
- for (String domain : domainsHolder.getDomains().keySet()) {
- AuthContextUtils.setFakeAuth(domain);
+ CPlainAttr notificationJobCronExp =
+ confDAO.find("notificationjob.cronExpression", NotificationJob.DEFAULT_CRON_EXP);
+ if (!notificationJobCronExp.getValuesAsStrings().isEmpty()) {
+ notificationJobCronExpression = notificationJobCronExp.getValuesAsStrings().get(0);
+ }
- try {
- // 1. jobs for SchedTasks
- Set<SchedTask> tasks = new HashSet<>(taskDAO.<SchedTask>findAll(TaskType.SCHEDULED));
- tasks.addAll(taskDAO.<SyncTask>findAll(TaskType.SYNCHRONIZATION));
- tasks.addAll(taskDAO.<PushTask>findAll(TaskType.PUSH));
- for (SchedTask task : tasks) {
- try {
- registerJob(task, interruptMaxRetries);
- } catch (Exception e) {
- LOG.error("While loading job instance for task " + task.getKey(), e);
+ long interruptMaxRetries = confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).
+ getLongValue();
+
+ return ImmutablePair.of(notificationJobCronExpression, interruptMaxRetries);
+ }
+ });
+
+ for (String domain : domainsHolder.getDomains().keySet()) {
+ AuthContextUtils.execWithAuthContext(domain, new AuthContextUtils.Executable<Void>() {
+
+ @Override
+ public Void exec() {
+ // 1. jobs for SchedTasks
+ Set<SchedTask> tasks = new HashSet<>(taskDAO.<SchedTask>findAll(TaskType.SCHEDULED));
+ tasks.addAll(taskDAO.<SyncTask>findAll(TaskType.SYNCHRONIZATION));
+ tasks.addAll(taskDAO.<PushTask>findAll(TaskType.PUSH));
+ for (SchedTask task : tasks) {
+ try {
+ registerJob(task, notificationConf.getRight());
+ } catch (Exception e) {
+ LOG.error("While loading job instance for task " + task.getKey(), e);
+ }
}
- }
- // 2. ReportJobs
- for (Report report : reportDAO.findAll()) {
- try {
- registerJob(report);
- } catch (Exception e) {
- LOG.error("While loading job instance for report " + report.getName(), e);
+ // 2. ReportJobs
+ for (Report report : reportDAO.findAll()) {
+ try {
+ registerJob(report);
+ } catch (Exception e) {
+ LOG.error("While loading job instance for report " + report.getName(), e);
+ }
}
+
+ return null;
}
- } finally {
- AuthContextUtils.clearFakeAuth();
- }
+ });
}
// 3. NotificationJob
- if (StringUtils.isBlank(notificationJobCronExpression)) {
+ if (StringUtils.isBlank(notificationConf.getLeft())) {
LOG.debug("Empty value provided for NotificationJob's cron, not registering anything on Quartz");
} else {
LOG.debug("NotificationJob's cron expression: {} - registering Quartz job and trigger",
- notificationJobCronExpression);
+ notificationConf.getLeft());
try {
- registerNotificationJob(notificationJobCronExpression);
+ registerNotificationJob(notificationConf.getLeft());
} catch (Exception e) {
LOG.error("While loading NotificationJob instance", e);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJob.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJob.java b/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJob.java
index a0f21f3..adba78d 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJob.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJob.java
@@ -60,13 +60,22 @@ public class NotificationJob implements Job {
LOG.debug("Waking up...");
for (String domain : domainsHolder.getDomains().keySet()) {
- AuthContextUtils.setFakeAuth(domain);
try {
- delegate.execute();
- } catch (Exception e) {
- throw new JobExecutionException(e);
- } finally {
- AuthContextUtils.clearFakeAuth();
+ AuthContextUtils.execWithAuthContext(domain, new AuthContextUtils.Executable<Void>() {
+
+ @Override
+ public Void exec() {
+ try {
+ delegate.execute();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ return null;
+ }
+ });
+ } catch (RuntimeException e) {
+ throw new JobExecutionException(e.getCause());
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJobDelegate.java b/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJobDelegate.java
index aaebe77..763bab5 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJobDelegate.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/notification/NotificationJobDelegate.java
@@ -187,8 +187,9 @@ public class NotificationJobDelegate {
if (hasToBeRegistered(execution)) {
execution = notificationManager.storeExec(execution);
- if (retryPossible && (NotificationJob.Status.valueOf(execution.getStatus())
- == NotificationJob.Status.NOT_SENT)) {
+ if (retryPossible
+ && (NotificationJob.Status.valueOf(execution.getStatus()) == NotificationJob.Status.NOT_SENT)) {
+
handleRetries(execution);
}
} else {
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java b/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java
index 8e5af91..686953c 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/report/ReportJob.java
@@ -51,13 +51,23 @@ public class ReportJob implements Job {
@Override
public void execute(final JobExecutionContext context) throws JobExecutionException {
- AuthContextUtils.setFakeAuth(context.getMergedJobDataMap().getString(JobInstanceLoader.DOMAIN));
try {
- delegate.execute(reportKey);
- } catch (Exception e) {
- throw new JobExecutionException(e);
- } finally {
- AuthContextUtils.clearFakeAuth();
+ AuthContextUtils.execWithAuthContext(context.getMergedJobDataMap().getString(JobInstanceLoader.DOMAIN),
+ new AuthContextUtils.Executable<Void>() {
+
+ @Override
+ public Void exec() {
+ try {
+ delegate.execute(reportKey);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ return null;
+ }
+ });
+ } catch (RuntimeException e) {
+ throw new JobExecutionException(e.getCause());
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/src/test/java/org/apache/syncope/core/logic/AbstractTest.java
----------------------------------------------------------------------
diff --git a/core/logic/src/test/java/org/apache/syncope/core/logic/AbstractTest.java b/core/logic/src/test/java/org/apache/syncope/core/logic/AbstractTest.java
deleted file mode 100644
index 32ae367..0000000
--- a/core/logic/src/test/java/org/apache/syncope/core/logic/AbstractTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.logic;
-
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.transaction.TransactionConfiguration;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations = {
- "classpath:provisioningContext.xml",
- "classpath:logicContext.xml",
- "classpath:workflowContext.xml",
- "classpath:logicTest.xml"
-})
-@TransactionConfiguration(transactionManager = "MasterTransactionManager")
-public abstract class AbstractTest {
-
- protected static final Logger LOG = LoggerFactory.getLogger(AbstractTest.class);
-
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java
----------------------------------------------------------------------
diff --git a/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java b/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java
deleted file mode 100644
index 6c208a2..0000000
--- a/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java
+++ /dev/null
@@ -1,659 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.logic;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import com.icegreen.greenmail.util.GreenMail;
-import com.icegreen.greenmail.util.ServerSetup;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-import java.util.UUID;
-import javax.annotation.Resource;
-import javax.mail.Flags.Flag;
-import javax.mail.Folder;
-import javax.mail.Message;
-import javax.mail.Session;
-import javax.mail.Store;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.common.lib.SyncopeConstants;
-import org.apache.syncope.common.lib.search.GroupFiqlSearchConditionBuilder;
-import org.apache.syncope.common.lib.search.UserFiqlSearchConditionBuilder;
-import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.to.MembershipTO;
-import org.apache.syncope.common.lib.to.NotificationTaskTO;
-import org.apache.syncope.common.lib.to.GroupTO;
-import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.types.Entitlement;
-import org.apache.syncope.common.lib.types.IntMappingType;
-import org.apache.syncope.common.lib.types.TaskType;
-import org.apache.syncope.common.lib.types.TraceLevel;
-import org.apache.syncope.core.persistence.api.dao.ConfDAO;
-import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
-import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.core.persistence.api.dao.TaskDAO;
-import org.apache.syncope.core.persistence.api.entity.EntityFactory;
-import org.apache.syncope.core.persistence.api.entity.Notification;
-import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
-import org.apache.syncope.core.persistence.api.entity.task.NotificationTask;
-import org.apache.syncope.core.logic.notification.NotificationJob;
-import org.apache.syncope.core.misc.security.SyncopeGrantedAuthority;
-import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
-import org.apache.syncope.core.persistence.api.entity.AnyAbout;
-import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttrValue;
-import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.mail.javamail.JavaMailSenderImpl;
-import org.springframework.security.authentication.TestingAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional
-public class NotificationTest extends AbstractTest {
-
- private static final String SMTP_HOST = "localhost";
-
- private static final int SMTP_PORT = 2525;
-
- private static final String POP3_HOST = "localhost";
-
- private static final int POP3_PORT = 1110;
-
- private static final String MAIL_ADDRESS = "notificationtest@syncope.apache.org";
-
- private static final String MAIL_PASSWORD = "password";
-
- private static GreenMail greenMail;
-
- @Resource(name = "adminUser")
- private String adminUser;
-
- @Autowired
- private NotificationDAO notificationDAO;
-
- @Autowired
- private AnyTypeDAO anyTypeDAO;
-
- @Autowired
- private TaskDAO taskDAO;
-
- @Autowired
- private PlainSchemaDAO plainSchemaDAO;
-
- @Autowired
- private ConfDAO confDAO;
-
- @Autowired
- private UserLogic userLogic;
-
- @Autowired
- private GroupLogic groupLogic;
-
- @Autowired
- private TaskLogic taskLogic;
-
- @Autowired
- private NotificationJob notificationJob;
-
- @Autowired
- private NotificationManager notificationManager;
-
- @Autowired
- private JavaMailSender mailSender;
-
- @Autowired
- private EntityFactory entityFactory;
-
- @BeforeClass
- public static void startGreenMail() {
- ServerSetup[] config = new ServerSetup[2];
- config[0] = new ServerSetup(SMTP_PORT, SMTP_HOST, ServerSetup.PROTOCOL_SMTP);
- config[1] = new ServerSetup(POP3_PORT, POP3_HOST, ServerSetup.PROTOCOL_POP3);
- greenMail = new GreenMail(config);
- greenMail.setUser(MAIL_ADDRESS, MAIL_PASSWORD);
- greenMail.start();
- }
-
- @AfterClass
- public static void stopGreenMail() {
- if (greenMail != null) {
- greenMail.stop();
- }
- }
-
- private static UserTO getUniqueSampleTO(final String email) {
- return getSampleTO(UUID.randomUUID().toString().substring(0, 8) + email);
- }
-
- private static AttrTO attributeTO(final String schema, final String value) {
- AttrTO attr = new AttrTO();
- attr.setSchema(schema);
- attr.getValues().add(value);
- return attr;
- }
-
- private static UserTO getSampleTO(final String email) {
- String uid = UUID.randomUUID().toString().substring(0, 8) + email;
- UserTO userTO = new UserTO();
- userTO.setPassword("password123");
- userTO.setUsername(uid);
- userTO.setRealm("/even/two");
-
- userTO.getPlainAttrs().add(attributeTO("fullname", uid));
- userTO.getPlainAttrs().add(attributeTO("firstname", uid));
- userTO.getPlainAttrs().add(attributeTO("surname", "surname"));
- userTO.getPlainAttrs().add(attributeTO("type", "a type"));
- userTO.getPlainAttrs().add(attributeTO("userId", uid));
- userTO.getPlainAttrs().add(attributeTO("email", email));
- userTO.getPlainAttrs().add(attributeTO("loginDate", new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
- userTO.getDerAttrs().add(attributeTO("cn", null));
- userTO.getVirAttrs().add(attributeTO("virtualdata", "virtualvalue"));
- return userTO;
- }
-
- @Before
- public void setupSecurity() {
- List<GrantedAuthority> authorities = CollectionUtils.collect(Entitlement.values(),
- new Transformer<String, GrantedAuthority>() {
-
- @Override
- public GrantedAuthority transform(final String entitlement) {
- return new SyncopeGrantedAuthority(entitlement, SyncopeConstants.ROOT_REALM);
- }
- }, new ArrayList<GrantedAuthority>());
-
- UserDetails userDetails = new User(adminUser, "FAKE_PASSWORD", authorities);
- Authentication authentication = new TestingAuthenticationToken(userDetails, "FAKE_PASSWORD", authorities);
- SecurityContextHolder.getContext().setAuthentication(authentication);
- }
-
- @Before
- public void setupSMTP() throws Exception {
- JavaMailSenderImpl sender = (JavaMailSenderImpl) mailSender;
- sender.setDefaultEncoding(SyncopeConstants.DEFAULT_ENCODING);
- sender.setHost(SMTP_HOST);
- sender.setPort(SMTP_PORT);
- }
-
- private boolean verifyMail(final String sender, final String subject) throws Exception {
- LOG.info("Waiting for notification to be sent...");
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
-
- boolean found = false;
- Session session = Session.getDefaultInstance(System.getProperties());
- Store store = session.getStore("pop3");
- store.connect(POP3_HOST, POP3_PORT, MAIL_ADDRESS, MAIL_PASSWORD);
-
- Folder inbox = store.getFolder("INBOX");
- assertNotNull(inbox);
- inbox.open(Folder.READ_WRITE);
-
- Message[] messages = inbox.getMessages();
- for (Message message : messages) {
- if (sender.equals(message.getFrom()[0].toString()) && subject.equals(message.getSubject())) {
- found = true;
- message.setFlag(Flag.DELETED, true);
- }
- }
-
- inbox.close(true);
- store.close();
- return found;
- }
-
- @Test
- public void notifyByMail() throws Exception {
- // 1. create suitable notification for subsequent tests
- Notification notification = entityFactory.newEntity(Notification.class);
- notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
-
- AnyAbout about = entityFactory.newEntity(AnyAbout.class);
- about.setNotification(notification);
- notification.add(about);
- about.setAnyType(anyTypeDAO.findUser());
- about.set(new UserFiqlSearchConditionBuilder().inGroups(7L).query());
-
- notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query());
- notification.setSelfAsRecipient(true);
-
- notification.setRecipientAttrName("email");
- notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
-
- Random random = new Random(System.currentTimeMillis());
- String sender = "syncopetest-" + random.nextLong() + "@syncope.apache.org";
- notification.setSender(sender);
- String subject = "Test notification " + random.nextLong();
- notification.setSubject(subject);
- notification.setTemplate("optin");
-
- Notification actual = notificationDAO.save(notification);
- assertNotNull(actual);
-
- notificationDAO.flush();
-
- // 2. create user
- UserTO userTO = getSampleTO(MAIL_ADDRESS);
- MembershipTO membershipTO = new MembershipTO();
- membershipTO.setRightKey(7);
- userTO.getMemberships().add(membershipTO);
-
- userLogic.create(userTO, true);
-
- // 3. force Quartz job execution and verify e-mail
- notificationJob.execute(null);
- assertTrue(verifyMail(sender, subject));
-
- // 4. get NotificationTask id and text body
- Long taskId = null;
- String textBody = null;
- for (NotificationTask task : taskDAO.<NotificationTask>findAll(TaskType.NOTIFICATION)) {
- if (sender.equals(task.getSender())) {
- taskId = task.getKey();
- textBody = task.getTextBody();
- }
- }
- assertNotNull(taskId);
- assertNotNull(textBody);
- assertTrue("Notification mail text doesn't contain expected content.",
- textBody.contains("Your email address is notificationtest@syncope.apache.org."));
- assertTrue("Notification mail text doesn't contain expected content.",
- textBody.contains("Your email address inside a link: "
- + "http://localhost/?email=notificationtest%40syncope.apache.org ."));
-
- // 5. execute Notification task and verify e-mail
- taskLogic.execute(taskId, false);
- assertTrue(verifyMail(sender, subject));
- }
-
- @Test
- public void issueSYNCOPE192() throws Exception {
- // 1. create suitable notification for subsequent tests
- Notification notification = entityFactory.newEntity(Notification.class);
- notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
-
- AnyAbout about = entityFactory.newEntity(AnyAbout.class);
- about.setNotification(notification);
- notification.add(about);
- about.setAnyType(anyTypeDAO.findUser());
- about.set(new UserFiqlSearchConditionBuilder().inGroups(7L).query());
-
- notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query());
- notification.setSelfAsRecipient(true);
-
- notification.setRecipientAttrName("email");
- notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
-
- Random random = new Random(System.currentTimeMillis());
- String sender = "syncope192-" + random.nextLong() + "@syncope.apache.org";
- notification.setSender(sender);
- String subject = "Test notification " + random.nextLong();
- notification.setSubject(subject);
- notification.setTemplate("optin");
- notification.setTraceLevel(TraceLevel.NONE);
-
- Notification actual = notificationDAO.save(notification);
- assertNotNull(actual);
-
- // 2. create user
- UserTO userTO = getSampleTO(MAIL_ADDRESS);
- MembershipTO membershipTO = new MembershipTO();
- membershipTO.setRightKey(7);
- userTO.getMemberships().add(membershipTO);
-
- userLogic.create(userTO, true);
-
- // 3. force Quartz job execution and verify e-mail
- notificationJob.execute(null);
- assertTrue(verifyMail(sender, subject));
-
- // 4. get NotificationTask id
- Long taskId = null;
- for (NotificationTask task : taskDAO.<NotificationTask>findAll(TaskType.NOTIFICATION)) {
- if (sender.equals(task.getSender())) {
- taskId = task.getKey();
- }
- }
- assertNotNull(taskId);
-
- // 5. verify that last exec status was updated
- NotificationTaskTO task = (NotificationTaskTO) taskLogic.read(taskId);
- assertNotNull(task);
- assertTrue(task.getExecutions().isEmpty());
- assertTrue(task.isExecuted());
- assertTrue(StringUtils.isNotBlank(task.getLatestExecStatus()));
- }
-
- @Test
- public void notifyByMailEmptyAbout() throws Exception {
- // 1. create suitable notification for subsequent tests
- Notification notification = entityFactory.newEntity(Notification.class);
- notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
- notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query());
- notification.setSelfAsRecipient(true);
-
- notification.setRecipientAttrName("email");
- notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
-
- Random random = new Random(System.currentTimeMillis());
- String sender = "syncopetest-" + random.nextLong() + "@syncope.apache.org";
- notification.setSender(sender);
- String subject = "Test notification " + random.nextLong();
- notification.setSubject(subject);
- notification.setTemplate("optin");
-
- Notification actual = notificationDAO.save(notification);
- assertNotNull(actual);
-
- notificationDAO.flush();
-
- // 2. create user
- UserTO userTO = getSampleTO(MAIL_ADDRESS);
- MembershipTO membershipTO = new MembershipTO();
- membershipTO.setRightKey(7);
- userTO.getMemberships().add(membershipTO);
-
- userLogic.create(userTO, true);
-
- // 3. force Quartz job execution and verify e-mail
- notificationJob.execute(null);
- assertTrue(verifyMail(sender, subject));
-
- // 4. get NotificationTask id
- Long taskId = null;
- for (NotificationTask task : taskDAO.<NotificationTask>findAll(TaskType.NOTIFICATION)) {
- if (sender.equals(task.getSender())) {
- taskId = task.getKey();
- }
- }
- assertNotNull(taskId);
-
- // 5. execute Notification task and verify e-mail
- taskLogic.execute(taskId, false);
- assertTrue(verifyMail(sender, subject));
- }
-
- @Test
- public void notifyByMailWithRetry() throws Exception {
- // 1. create suitable notification for subsequent tests
- Notification notification = entityFactory.newEntity(Notification.class);
- notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
- notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query());
- notification.setSelfAsRecipient(true);
-
- notification.setRecipientAttrName("email");
- notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
-
- Random random = new Random(System.currentTimeMillis());
- String sender = "syncopetest-" + random.nextLong() + "@syncope.apache.org";
- notification.setSender(sender);
- String subject = "Test notification " + random.nextLong();
- notification.setSubject(subject);
- notification.setTemplate("optin");
-
- Notification actual = notificationDAO.save(notification);
- assertNotNull(actual);
-
- notificationDAO.flush();
-
- // 2. create user
- UserTO userTO = getSampleTO(MAIL_ADDRESS);
- MembershipTO membershipTO = new MembershipTO();
- membershipTO.setRightKey(7);
- userTO.getMemberships().add(membershipTO);
-
- userLogic.create(userTO, true);
-
- // 3. Set number of retries
- CPlainAttr maxRetries = entityFactory.newEntity(CPlainAttr.class);
- maxRetries.setSchema(plainSchemaDAO.find("notification.maxRetries"));
- CPlainAttrValue maxRetriesValue = entityFactory.newEntity(CPlainAttrValue.class);
- maxRetries.add("5", maxRetriesValue);
- confDAO.save(maxRetries);
- confDAO.flush();
-
- // 4. Stop mail server to force error sending mail
- stopGreenMail();
-
- // 5. force Quartz job execution multiple times
- for (int i = 0; i < 10; i++) {
- notificationJob.execute(null);
- }
-
- // 6. get NotificationTask, count number of executions
- NotificationTask foundTask = null;
- for (NotificationTask task : taskDAO.<NotificationTask>findAll(TaskType.NOTIFICATION)) {
- if (sender.equals(task.getSender())) {
- foundTask = task;
- }
- }
- assertNotNull(foundTask);
- assertEquals(6, notificationManager.countExecutionsWithStatus(foundTask.getKey(),
- NotificationJob.Status.NOT_SENT.name()));
-
- // 7. start mail server again
- startGreenMail();
-
- // 8. reset number of retries
- maxRetries = entityFactory.newEntity(CPlainAttr.class);
- maxRetries.setSchema(plainSchemaDAO.find("notification.maxRetries"));
- maxRetriesValue = entityFactory.newEntity(CPlainAttrValue.class);
- maxRetries.add("0", maxRetriesValue);
- confDAO.save(maxRetries);
- confDAO.flush();
- }
-
- @Test
- public void issueSYNCOPE445() throws Exception {
- // 1. create suitable notification for subsequent tests
- Notification notification = entityFactory.newEntity(Notification.class);
- notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
-
- AnyAbout about = entityFactory.newEntity(AnyAbout.class);
- about.setNotification(notification);
- notification.add(about);
- about.setAnyType(anyTypeDAO.findUser());
- about.set(new UserFiqlSearchConditionBuilder().inGroups(7L).query());
-
- notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query());
- notification.setSelfAsRecipient(true);
-
- notification.setRecipientAttrName("email");
- notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
-
- notification.getStaticRecipients().add("syncope445@syncope.apache.org");
-
- Random random = new Random(System.currentTimeMillis());
- String sender = "syncopetest-" + random.nextLong() + "@syncope.apache.org";
- notification.setSender(sender);
- String subject = "Test notification " + random.nextLong();
- notification.setSubject(subject);
- notification.setTemplate("optin");
-
- Notification actual = notificationDAO.save(notification);
- assertNotNull(actual);
-
- notificationDAO.flush();
-
- // 2. create user
- UserTO userTO = getSampleTO(MAIL_ADDRESS);
- MembershipTO membershipTO = new MembershipTO();
- membershipTO.setRightKey(7);
- userTO.getMemberships().add(membershipTO);
-
- userLogic.create(userTO, true);
-
- // 3. force Quartz job execution and verify e-mail
- notificationJob.execute(null);
- assertTrue(verifyMail(sender, subject));
-
- // 4. get NotificationTask id and text body
- Long taskId = null;
- String textBody = null;
- Set<String> recipients = null;
- for (NotificationTask task : taskDAO.<NotificationTask>findAll(TaskType.NOTIFICATION)) {
- if (sender.equals(task.getSender())) {
- taskId = task.getKey();
- textBody = task.getTextBody();
- recipients = task.getRecipients();
- }
- }
-
- assertNotNull(taskId);
- assertNotNull(textBody);
- assertNotNull(recipients);
- assertTrue(recipients.contains("syncope445@syncope.apache.org"));
-
- // 5. execute Notification task and verify e-mail
- taskLogic.execute(taskId, false);
- assertTrue(verifyMail(sender, subject));
- }
-
- @Test
- public void issueSYNCOPE492() throws Exception {
- // 1. create suitable disabled notification for subsequent tests
- Notification notification = entityFactory.newEntity(Notification.class);
- notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]");
-
- AnyAbout about = entityFactory.newEntity(AnyAbout.class);
- about.setNotification(notification);
- notification.add(about);
- about.setAnyType(anyTypeDAO.findUser());
- about.set(new UserFiqlSearchConditionBuilder().inGroups(7L).query());
-
- notification.setSelfAsRecipient(true);
-
- notification.setRecipientAttrName("email");
- notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
-
- notification.getStaticRecipients().add("syncope492@syncope.apache.org");
-
- Random random = new Random(System.currentTimeMillis());
- String sender = "syncopetest-" + random.nextLong() + "@syncope.apache.org";
- notification.setSender(sender);
- String subject = "Test notification " + random.nextLong();
- notification.setSubject(subject);
- notification.setTemplate("optin");
- notification.setActive(false);
-
- Notification actual = notificationDAO.save(notification);
- assertNotNull(actual);
-
- notificationDAO.flush();
-
- final int tasksNumberBefore = taskDAO.findAll(TaskType.NOTIFICATION).size();
-
- // 2. create user
- UserTO userTO = getUniqueSampleTO(MAIL_ADDRESS);
- MembershipTO membershipTO = new MembershipTO();
- membershipTO.setRightKey(7);
- userTO.getMemberships().add(membershipTO);
-
- userLogic.create(userTO, true);
-
- // 3. force Quartz job execution
- notificationJob.execute(null);
-
- // 4. check if number of tasks is not incremented
- assertEquals(tasksNumberBefore, taskDAO.findAll(TaskType.NOTIFICATION).size());
- }
-
- @Test
- public void issueSYNCOPE446() throws Exception {
- // 1. create suitable notification for subsequent tests
- Notification notification = entityFactory.newEntity(Notification.class);
- notification.getEvents().add("[REST]:[GroupLogic]:[]:[create]:[SUCCESS]");
-
- AnyAbout about = entityFactory.newEntity(AnyAbout.class);
- about.setNotification(notification);
- notification.add(about);
- about.setAnyType(anyTypeDAO.findGroup());
- about.set(new GroupFiqlSearchConditionBuilder().is("name").equalTo("group446").query());
-
- notification.setSelfAsRecipient(false);
-
- notification.setRecipientAttrName("email");
- notification.setRecipientAttrType(IntMappingType.UserPlainSchema);
-
- notification.getStaticRecipients().add(MAIL_ADDRESS);
-
- Random random = new Random(System.currentTimeMillis());
- String sender = "syncopetest-" + random.nextLong() + "@syncope.apache.org";
- notification.setSender(sender);
- String subject = "Test notification " + random.nextLong();
- notification.setSubject(subject);
- notification.setTemplate("optin");
-
- Notification actual = notificationDAO.save(notification);
- assertNotNull(actual);
-
- notificationDAO.flush();
-
- // 2. create group
- GroupTO groupTO = new GroupTO();
- groupTO.setName("group446");
- groupTO.setRealm("/even/two");
-
- GroupTO createdGroup = groupLogic.create(groupTO);
- assertNotNull(createdGroup);
-
- // 3. force Quartz job execution and verify e-mail
- notificationJob.execute(null);
- assertTrue(verifyMail(sender, subject));
-
- // 4. get NotificationTask id and text body
- Long taskId = null;
- String textBody = null;
- Set<String> recipients = null;
- for (NotificationTask task : taskDAO.<NotificationTask>findAll(TaskType.NOTIFICATION)) {
- if (sender.equals(task.getSender())) {
- taskId = task.getKey();
- textBody = task.getTextBody();
- recipients = task.getRecipients();
- }
- }
-
- assertNotNull(taskId);
- assertNotNull(textBody);
- assertTrue(recipients != null && recipients.contains(MAIL_ADDRESS));
-
- // 5. execute Notification task and verify e-mail
- taskLogic.execute(taskId, false);
- assertTrue(verifyMail(sender, subject));
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/logic/src/test/resources/logicTest.xml
----------------------------------------------------------------------
diff --git a/core/logic/src/test/resources/logicTest.xml b/core/logic/src/test/resources/logicTest.xml
deleted file mode 100644
index fd6edd6..0000000
--- a/core/logic/src/test/resources/logicTest.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd">
-
- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <value>classpath:persistence.properties</value>
- <value>classpath:domains/*.properties</value>
- <value>classpath:security.properties</value>
- <value>classpath:connid.properties</value>
- <value>classpath:mail.properties</value>
- <value>classpath:logic.properties</value>
- <value>classpath:workflow.properties</value>
- <value>classpath:provisioning.properties</value>
- </list>
- </property>
- <property name="ignoreResourceNotFound" value="true"/>
- <property name="ignoreUnresolvablePlaceholders" value="true"/>
- </bean>
-
- <bean class="org.apache.syncope.core.misc.spring.ApplicationContextProvider"/>
-
- <bean id="adminUser" class="java.lang.String">
- <constructor-arg value="${adminUser}"/>
- </bean>
- <bean id="anonymousUser" class="java.lang.String">
- <constructor-arg value="${anonymousUser}"/>
- </bean>
-
- <context:component-scan base-package="org.apache.syncope.core.misc.policy"/>
- <context:component-scan base-package="org.apache.syncope.core.misc.security"/>
-
- <import resource="persistenceContext.xml"/>
-
-</beans>
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java
----------------------------------------------------------------------
diff --git a/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java b/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java
index 4586ee3..595dda3 100644
--- a/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java
+++ b/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java
@@ -90,7 +90,7 @@ public final class AuthContextUtils {
return domainKey;
}
- public static void setFakeAuth(final String domain) {
+ private static void setFakeAuth(final String domain) {
List<GrantedAuthority> authorities = CollectionUtils.collect(Entitlement.values(),
new Transformer<String, GrantedAuthority>() {
@@ -107,17 +107,13 @@ public final class AuthContextUtils {
SecurityContextHolder.getContext().setAuthentication(auth);
}
- public static void clearFakeAuth() {
- SecurityContextHolder.clearContext();
- }
-
public static <T> T execWithAuthContext(final String domainKey, final Executable<T> executable) {
SecurityContext ctx = SecurityContextHolder.getContext();
setFakeAuth(domainKey);
try {
return executable.exec();
} finally {
- clearFakeAuth();
+ SecurityContextHolder.clearContext();
SecurityContextHolder.setContext(ctx);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/misc/src/main/java/org/apache/syncope/core/misc/spring/ApplicationContextProvider.java
----------------------------------------------------------------------
diff --git a/core/misc/src/main/java/org/apache/syncope/core/misc/spring/ApplicationContextProvider.java b/core/misc/src/main/java/org/apache/syncope/core/misc/spring/ApplicationContextProvider.java
index e67dcd6..2a21281 100644
--- a/core/misc/src/main/java/org/apache/syncope/core/misc/spring/ApplicationContextProvider.java
+++ b/core/misc/src/main/java/org/apache/syncope/core/misc/spring/ApplicationContextProvider.java
@@ -18,10 +18,12 @@
*/
package org.apache.syncope.core.misc.spring;
+import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.transaction.interceptor.TransactionInterceptor;
public class ApplicationContextProvider implements ApplicationContextAware {
@@ -41,8 +43,16 @@ public class ApplicationContextProvider implements ApplicationContextAware {
: BEAN_FACTORY;
}
+ private static void enableDomainTransactionInterceptor() {
+ for (String name : getBeanFactory().getBeanNamesForType(TransactionInterceptor.class)) {
+ BeanDefinition bd = getBeanFactory().getBeanDefinition(name);
+ bd.setBeanClassName(DomainTransactionInterceptor.class.getName());
+ }
+ }
+
public static void setBeanFactory(final DefaultListableBeanFactory beanFactory) {
BEAN_FACTORY = beanFactory;
+ enableDomainTransactionInterceptor();
}
/**
@@ -53,5 +63,6 @@ public class ApplicationContextProvider implements ApplicationContextAware {
@Override
public void setApplicationContext(final ApplicationContext ctx) {
CTX = (ConfigurableApplicationContext) ctx;
+ enableDomainTransactionInterceptor();
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/misc/src/main/java/org/apache/syncope/core/misc/spring/DomainTransactionInterceptor.java
----------------------------------------------------------------------
diff --git a/core/misc/src/main/java/org/apache/syncope/core/misc/spring/DomainTransactionInterceptor.java b/core/misc/src/main/java/org/apache/syncope/core/misc/spring/DomainTransactionInterceptor.java
new file mode 100644
index 0000000..e239002
--- /dev/null
+++ b/core/misc/src/main/java/org/apache/syncope/core/misc/spring/DomainTransactionInterceptor.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.misc.spring;
+
+import java.lang.reflect.Method;
+import org.aopalliance.intercept.MethodInvocation;
+import org.apache.syncope.core.misc.security.AuthContextUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
+import org.springframework.transaction.interceptor.TransactionAttribute;
+import org.springframework.transaction.interceptor.TransactionAttributeSource;
+import org.springframework.transaction.interceptor.TransactionInterceptor;
+
+/**
+ * Extends the standard {@link TransactionInterceptor} by dynamically setting the appropriate
+ * {@link TransactionAttribute} qualifier according to the authentication domain of the caller - retrieved via
+ * {@link AuthContextUtils#getDomain()}.
+ */
+public class DomainTransactionInterceptor extends TransactionInterceptor {
+
+ private static final long serialVersionUID = 5113728988680448551L;
+
+ private static final Logger LOG = LoggerFactory.getLogger(DomainTransactionInterceptor.class);
+
+ @Override
+ public TransactionAttributeSource getTransactionAttributeSource() {
+ final TransactionAttributeSource origTxAttrSource = super.getTransactionAttributeSource();
+
+ return new TransactionAttributeSource() {
+
+ @Override
+ public TransactionAttribute getTransactionAttribute(final Method method, final Class<?> targetClass) {
+ TransactionAttribute txAttr = origTxAttrSource.getTransactionAttribute(method, targetClass);
+
+ if (txAttr instanceof DefaultTransactionAttribute) {
+ ((DefaultTransactionAttribute) txAttr).setQualifier(AuthContextUtils.getDomain());
+ }
+
+ return txAttr;
+ }
+ };
+ }
+
+ @Override
+ public Object invoke(final MethodInvocation invocation) throws Throwable {
+ try {
+ return super.invoke(invocation);
+ } catch (Throwable e) {
+ LOG.debug("Error during {} invocation", invocation.getMethod(), e);
+ throw e;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/DomainTransactionInterceptor.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/DomainTransactionInterceptor.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/DomainTransactionInterceptor.java
deleted file mode 100644
index 42779ed..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/DomainTransactionInterceptor.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.persistence.jpa.spring;
-
-import java.lang.reflect.Method;
-import org.aopalliance.intercept.MethodInvocation;
-import org.apache.syncope.core.misc.security.AuthContextUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
-import org.springframework.transaction.interceptor.TransactionAttribute;
-import org.springframework.transaction.interceptor.TransactionAttributeSource;
-import org.springframework.transaction.interceptor.TransactionInterceptor;
-
-/**
- * Extends the standard {@link TransactionInterceptor} by dynamically setting the appropriate
- * {@link TransactionAttribute} qualifier according to the authentication domain of the caller - retrieved via
- * {@link AuthContextUtils#getDomain()}.
- */
-public class DomainTransactionInterceptor extends TransactionInterceptor {
-
- private static final long serialVersionUID = 5113728988680448551L;
-
- private static final Logger LOG = LoggerFactory.getLogger(DomainTransactionInterceptor.class);
-
- @Override
- public TransactionAttributeSource getTransactionAttributeSource() {
- final TransactionAttributeSource origTxAttrSource = super.getTransactionAttributeSource();
-
- return new TransactionAttributeSource() {
-
- @Override
- public TransactionAttribute getTransactionAttribute(final Method method, final Class<?> targetClass) {
- TransactionAttribute txAttr = origTxAttrSource.getTransactionAttribute(method, targetClass);
-
- if (txAttr instanceof DefaultTransactionAttribute) {
- ((DefaultTransactionAttribute) txAttr).setQualifier(AuthContextUtils.getDomain());
- }
-
- return txAttr;
- }
- };
- }
-
- @Override
- public Object invoke(final MethodInvocation invocation) throws Throwable {
- try {
- return super.invoke(invocation);
- } catch (Throwable e) {
- LOG.debug("Error during {} invocation", invocation.getMethod(), e);
- throw e;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/SpringComponentReplacer.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/SpringComponentReplacer.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/SpringComponentReplacer.java
deleted file mode 100644
index e983426..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/spring/SpringComponentReplacer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.persistence.jpa.spring;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.interceptor.TransactionInterceptor;
-
-/**
- * Hack for dynamically replacing standard {@link TransactionInterceptor} with
- * {@link DomainTransactionInterceptor} in Spring context.
- */
-@Component
-public class SpringComponentReplacer implements BeanFactoryPostProcessor {
-
- @Override
- public void postProcessBeanFactory(final ConfigurableListableBeanFactory factory) throws BeansException {
- for (String name : factory.getBeanNamesForType(TransactionInterceptor.class)) {
- BeanDefinition bd = factory.getBeanDefinition(name);
- bd.setBeanClassName(DomainTransactionInterceptor.class.getName());
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java
index 201708f..bffe55f 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java
@@ -28,11 +28,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.EntityManagerFactoryUtils;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.transaction.TransactionConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:persistenceTest.xml" })
-@TransactionConfiguration(transactionManager = "MasterTransactionManager")
public abstract class AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
index 5130c28..cd6b535 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class AnyObjectTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
index 37aef3c..b5f99ce 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
@@ -53,7 +53,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class AnySearchTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeClassTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeClassTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeClassTest.java
index ed83f65..1bdae2d 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeClassTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeClassTest.java
@@ -32,7 +32,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class AnyTypeClassTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeTest.java
index be60f46..05026a2 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeTest.java
@@ -34,7 +34,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class AnyTypeTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java
index 1e90e5c..38332b6 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConfTest.java
@@ -38,7 +38,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class ConfTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
index 70665ed..f3ade5e 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ConnInstanceTest.java
@@ -37,7 +37,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class ConnInstanceTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerAttrTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerAttrTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerAttrTest.java
index cd336ae..3fb15b7 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerAttrTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerAttrTest.java
@@ -43,7 +43,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class DerAttrTest extends AbstractTest {
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/88061761/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerSchemaTest.java
index c62ab6e..abe3de3 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DerSchemaTest.java
@@ -34,7 +34,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
+@Transactional("Master")
public class DerSchemaTest extends AbstractTest {
@Autowired
[5/6] syncope git commit: [SYNCOPE-685] Pre: re-organize SyncPoliySpec
Posted by md...@apache.org.
[SYNCOPE-685] Pre: re-organize SyncPoliySpec
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/8fe3c7c2
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/8fe3c7c2
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/8fe3c7c2
Branch: refs/heads/SYNCOPE-156
Commit: 8fe3c7c20105df6112a1ee7b0206cb00e9c1a054
Parents: dbeb620
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Aug 17 16:54:18 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Aug 17 16:54:18 2015 +0200
----------------------------------------------------------------------
.../console/panels/BeanReflectionModal.java | 36 --
.../console/panels/BeanReflectionPanel.java | 339 -------------------
.../common/lib/annotation/ClassList.java | 26 --
.../common/lib/annotation/SchemaList.java | 28 --
.../common/lib/types/AbstractPolicySpec.java | 2 -
.../common/lib/types/SyncPolicySpec.java | 42 +--
.../common/lib/types/SyncPolicySpecItem.java | 67 ----
.../apache/syncope/core/logic/SyncopeLogic.java | 26 +-
.../init/ImplementationClassNamesLoader.java | 7 +-
.../core/persistence/jpa/inner/PolicyTest.java | 39 ++-
.../test/resources/domains/MasterContent.xml | 8 +-
.../java/data/PolicyDataBinderImpl.java | 3 -
.../sync/PlainAttrsSyncCorrelationRule.java | 110 ++++++
.../core/provisioning/java/sync/SyncUtils.java | 126 ++-----
.../fit/core/reference/PolicyITCase.java | 11 +-
.../fit/core/reference/SyncTaskITCase.java | 12 +-
16 files changed, 193 insertions(+), 689 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanReflectionModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanReflectionModal.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanReflectionModal.java
deleted file mode 100644
index a6859e8..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanReflectionModal.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.panels;
-
-import java.io.Serializable;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
-
-/**
- * Modal window with Resource form.
- */
-public abstract class BeanReflectionModal extends ModalContent {
-
- private static final long serialVersionUID = 1734415311027284222L;
-
- public BeanReflectionModal(final Serializable bean, final ModalWindow window, final PageReference pageRef) {
- super(window, pageRef);
- add(new BeanReflectionPanel("bean", bean));
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanReflectionPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanReflectionPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanReflectionPanel.java
deleted file mode 100644
index 4f3f1d5..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanReflectionPanel.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.panels;
-
-import java.beans.PropertyDescriptor;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.rest.PolicyRestClient;
-import org.apache.syncope.client.console.rest.SchemaRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.form.AbstractFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.SpinnerFieldPanel;
-import org.apache.syncope.client.console.wicket.markup.html.list.AltListView;
-import org.apache.syncope.common.lib.annotation.ClassList;
-import org.apache.syncope.common.lib.annotation.SchemaList;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.LoadableDetachableModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.ResourceModel;
-import org.apache.wicket.model.util.ListModel;
-import org.apache.wicket.spring.injection.annot.SpringBean;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.util.ClassUtils;
-import org.springframework.util.ReflectionUtils;
-import org.springframework.util.ReflectionUtils.FieldCallback;
-import org.springframework.util.ReflectionUtils.FieldFilter;
-
-public class BeanReflectionPanel extends Panel {
-
- private static final long serialVersionUID = -3035998190456928143L;
-
- /**
- * Logger.
- */
- private static final Logger LOG = LoggerFactory.getLogger(BeanReflectionPanel.class);
-
- @SpringBean
- private SchemaRestClient schemaRestClient;
-
- @SpringBean
- private PolicyRestClient policyRestClient;
-
- private final IModel<List<String>> userSchemas = new LoadableDetachableModel<List<String>>() {
-
- private static final long serialVersionUID = -2012833443695917883L;
-
- @Override
- protected List<String> load() {
- return schemaRestClient.getPlainSchemaNames();
- }
- };
-
- private final IModel<List<String>> groupSchemas = new LoadableDetachableModel<List<String>>() {
-
- private static final long serialVersionUID = 5275935387613157437L;
-
- @Override
- protected List<String> load() {
- return schemaRestClient.getPlainSchemaNames();
- }
- };
-
- private final IModel<List<String>> correlationRules = new LoadableDetachableModel<List<String>>() {
-
- private static final long serialVersionUID = 5275935387613157437L;
-
- @Override
- protected List<String> load() {
- return policyRestClient.getCorrelationRuleClasses();
- }
- };
-
- public BeanReflectionPanel(final String id, final Serializable bean) {
- super(id);
-
- final List<FieldWrapper> items = new ArrayList<>();
- ReflectionUtils.doWithFields(bean.getClass(),
- new FieldCallback() {
-
- @Override
- public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException {
- FieldWrapper fieldWrapper = new FieldWrapper();
- fieldWrapper.setName(field.getName());
- fieldWrapper.setType(field.getType());
-
- final SchemaList schemaList = field.getAnnotation(SchemaList.class);
- fieldWrapper.setSchemaList(schemaList);
-
- final ClassList classList = field.getAnnotation(ClassList.class);
- fieldWrapper.setClassList(classList);
-
- items.add(fieldWrapper);
- }
- },
- new FieldFilter() {
-
- @Override
- public boolean matches(final Field field) {
- return !Modifier.isStatic(field.getModifiers()) && !"serialVersionUID".equals(field.getName());
- }
- });
-
- final ListView<FieldWrapper> policies = new AltListView<FieldWrapper>("fields", items) {
-
- private static final long serialVersionUID = 9101744072914090143L;
-
- @Override
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected void populateItem(final ListItem<FieldWrapper> item) {
- final FieldWrapper field = item.getModelObject();
-
- final PropertyDescriptor propDesc = BeanUtils.getPropertyDescriptor(bean.getClass(), field.getName());
-
- item.add(new Label("label", new ResourceModel(field.getName())));
-
- AbstractFieldPanel component;
- try {
- if (field.getClassList() != null) {
- component = new AjaxDropDownChoicePanel("field", field.getName(), new PropertyModel(bean,
- field.getName()));
-
- final List<String> rules = correlationRules.getObject();
-
- if (rules != null && !rules.isEmpty()) {
- ((AjaxDropDownChoicePanel) component).setChoices(correlationRules.getObject());
- }
-
- item.add(component);
-
- item.add(getActivationControl(
- component,
- propDesc.getReadMethod().invoke(bean, new Object[] {}) != null,
- null,
- null));
-
- } else if (field.getType().isEnum()) {
- component = new AjaxDropDownChoicePanel("field", field.getName(), new PropertyModel(bean,
- field.getName()));
-
- final Serializable[] values = (Serializable[]) field.getType().getEnumConstants();
-
- if (values != null && values.length > 0) {
- ((AjaxDropDownChoicePanel) component).setChoices(Arrays.asList(values));
- }
-
- item.add(component);
-
- item.add(getActivationControl(
- component,
- (Enum<?>) propDesc.getReadMethod().invoke(bean, new Object[] {}) != null,
- values[0],
- values[0]));
-
- } else if (ClassUtils.isAssignable(Boolean.class, field.getType())) {
- item.add(new AjaxCheckBoxPanel("check", field.getName(),
- new PropertyModel<Boolean>(bean, field.getName())));
-
- item.add(new Label("field", new Model(null)));
- } else if (Collection.class.isAssignableFrom(field.getType())) {
- if (field.getSchemaList() != null) {
- final List<String> values = new ArrayList<>();
- if (field.getName().charAt(0) == 'r') {
- values.addAll(groupSchemas.getObject());
-
- if (field.getSchemaList().extended()) {
- values.add("name");
- }
- } else {
- values.addAll(userSchemas.getObject());
-
- if (field.getSchemaList().extended()) {
- values.add("key");
- values.add("username");
- }
- }
-
- component = new AjaxPalettePanel("field", new PropertyModel(bean, field.getName()),
- new ListModel<>(values));
- item.add(component);
-
- Collection<?> collection = (Collection) propDesc.getReadMethod().invoke(bean);
- item.add(getActivationControl(component,
- !collection.isEmpty(), new ArrayList<String>(), new ArrayList<String>()));
- } else {
- final FieldPanel panel = new AjaxTextFieldPanel("panel", field.getName(),
- new Model<String>(null));
- panel.setRequired(true);
-
- component = new MultiFieldPanel<String>("field",
- new PropertyModel(bean, field.getName()), panel);
-
- item.add(component);
-
- final List<String> reinitializedValue = new ArrayList<String>();
-
- reinitializedValue.add("");
-
- item.add(getActivationControl(component,
- !((Collection) propDesc.getReadMethod().invoke(bean, new Object[] {})).isEmpty(),
- new ArrayList<String>(), (Serializable) reinitializedValue));
- }
- } else if (ClassUtils.isAssignable(Number.class, field.getType())) {
- component = new SpinnerFieldPanel<Number>("field", field.getName(),
- (Class<Number>) field.getType(), new PropertyModel<Number>(bean, field.getName()),
- null, null);
- item.add(component);
-
- item.add(getActivationControl(component,
- (Integer) propDesc.getReadMethod().invoke(bean, new Object[] {}) > 0, 0, 0));
- } else if (field.getType().equals(String.class)) {
- component = new AjaxTextFieldPanel("field", field.getName(),
- new PropertyModel(bean, field.getName()));
-
- item.add(component);
-
- item.add(getActivationControl(component,
- propDesc.getReadMethod().invoke(bean, new Object[] {}) != null, null, null));
- } else {
- item.add(new AjaxCheckBoxPanel("check", field.getName(), new Model()));
- item.add(new Label("field", new Model(null)));
- }
- } catch (Exception e) {
- LOG.error("Error retrieving bean fields", e);
- }
- }
- };
-
- add(policies);
- }
-
- private <T extends Serializable> AjaxCheckBoxPanel getActivationControl(final AbstractFieldPanel<T> panel,
- final Boolean checked, final T defaultModelObject, final T reinitializedValue) {
-
- final AjaxCheckBoxPanel check = new AjaxCheckBoxPanel("check", "check", new Model<Boolean>(checked));
-
- panel.setEnabled(checked);
-
- check.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
- private static final long serialVersionUID = -1107858522700306810L;
-
- @Override
- protected void onUpdate(final AjaxRequestTarget target) {
- if (check.getModelObject()) {
- panel.setEnabled(true);
- panel.setModelObject(reinitializedValue);
- } else {
- panel.setModelObject(defaultModelObject);
- panel.setEnabled(false);
- }
-
- target.add(panel);
- }
- });
-
- return check;
- }
-
- private static class FieldWrapper implements Serializable {
-
- private static final long serialVersionUID = -6770429509752964215L;
-
- private Class<?> type;
-
- private String name;
-
- private transient SchemaList schemaList;
-
- private transient ClassList classList;
-
- public String getName() {
- return name;
- }
-
- public void setName(final String name) {
- this.name = name;
- }
-
- public Class<?> getType() {
- return type;
- }
-
- public void setType(final Class<?> type) {
- this.type = type;
- }
-
- public SchemaList getSchemaList() {
- return schemaList;
- }
-
- public void setSchemaList(final SchemaList schemaList) {
- this.schemaList = schemaList;
- }
-
- public ClassList getClassList() {
- return classList;
- }
-
- public void setClassList(final ClassList classList) {
- this.classList = classList;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/ClassList.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/ClassList.java b/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/ClassList.java
deleted file mode 100644
index 07528ea..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/ClassList.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.annotation;
-
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-@Retention(RUNTIME)
-public @interface ClassList {
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/SchemaList.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/SchemaList.java b/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/SchemaList.java
deleted file mode 100644
index 7469731..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/SchemaList.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.annotation;
-
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-@Retention(RUNTIME)
-public @interface SchemaList {
-
- boolean extended() default false;
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java
index e1e7333..33a0c62 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AbstractPolicySpec.java
@@ -28,7 +28,6 @@ import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
-import org.apache.syncope.common.lib.annotation.SchemaList;
@XmlType
public abstract class AbstractPolicySpec implements PolicySpec {
@@ -43,7 +42,6 @@ public abstract class AbstractPolicySpec implements PolicySpec {
/**
* User attribute values not permitted.
*/
- @SchemaList
protected final List<String> schemasNotPermitted = new ArrayList<>();
/**
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java
index 34f95dd..5a3d309 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java
@@ -18,26 +18,32 @@
*/
package org.apache.syncope.common.lib.types;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.ArrayList;
-import java.util.List;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
+import java.util.HashMap;
+import java.util.Map;
import javax.xml.bind.annotation.XmlType;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Predicate;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter;
@XmlType
public class SyncPolicySpec implements PolicySpec {
private static final long serialVersionUID = -3144027171719498127L;
- private final List<SyncPolicySpecItem> items = new ArrayList<>();
+ private ConflictResolutionAction conflictResolutionAction;
/**
- * Conflict resolution action.
+ * Associates anyTypeKey to either:
+ * <ol>
+ * <li>Java class name, implementing {@code SyncCorrelationRule}</li>
+ * <li>JSON array containing plain schema names - this will be used to feed
+ * {@code PlainAttrsSyncCorrelationRule}</li>
+ * </ol>
*/
- private ConflictResolutionAction conflictResolutionAction;
+ @XmlJavaTypeAdapter(XmlGenericMapAdapter.class)
+ @JsonIgnore
+ private final Map<String, String> correlationRules = new HashMap<>();
public ConflictResolutionAction getConflictResolutionAction() {
return conflictResolutionAction == null
@@ -49,20 +55,8 @@ public class SyncPolicySpec implements PolicySpec {
this.conflictResolutionAction = conflictResolutionAction;
}
- public SyncPolicySpecItem getItem(final String anyTypeKey) {
- return CollectionUtils.find(items, new Predicate<SyncPolicySpecItem>() {
-
- @Override
- public boolean evaluate(final SyncPolicySpecItem item) {
- return anyTypeKey != null && anyTypeKey.equals(item.getAnyTypeKey());
- }
- });
- }
-
- @XmlElementWrapper(name = "items")
- @XmlElement(name = "item")
- @JsonProperty("items")
- public List<SyncPolicySpecItem> getItems() {
- return items;
+ @JsonProperty
+ public Map<String, String> getCorrelationRules() {
+ return correlationRules;
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpecItem.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpecItem.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpecItem.java
deleted file mode 100644
index 4acb61b..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpecItem.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.types;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.ArrayList;
-import java.util.List;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlType;
-import org.apache.syncope.common.lib.AbstractBaseBean;
-import org.apache.syncope.common.lib.annotation.ClassList;
-import org.apache.syncope.common.lib.annotation.SchemaList;
-
-@XmlType
-public class SyncPolicySpecItem extends AbstractBaseBean {
-
- private static final long serialVersionUID = 692466729711976485L;
-
- private String anyTypeKey;
-
- @SchemaList(extended = true)
- private final List<String> altSearchSchemas = new ArrayList<>();
-
- @ClassList
- private String javaRule;
-
- public String getAnyTypeKey() {
- return anyTypeKey;
- }
-
- public void setAnyTypeKey(final String anyTypeKey) {
- this.anyTypeKey = anyTypeKey;
- }
-
- public String getJavaRule() {
- return javaRule;
- }
-
- public void setJavaRule(final String javaRule) {
- this.javaRule = javaRule;
- }
-
- @XmlElementWrapper(name = "altSearchSchemas")
- @XmlElement(name = "altSearchSchema")
- @JsonProperty("altSearchSchemas")
- public List<String> getAltSearchSchemas() {
- return altSearchSchemas;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index 8dd20a8..d6432e2 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -18,6 +18,8 @@
*/
package org.apache.syncope.core.logic;
+import static org.apache.syncope.core.logic.init.ImplementationClassNamesLoader.Type;
+
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URI;
@@ -128,22 +130,14 @@ public class SyncopeLogic extends AbstractLogic<SyncopeTO> {
syncopeTO.setGroupProvisioningManager(gProvisioningManager.getClass().getName());
syncopeTO.setVirAttrCache(virAttrCache.getClass().getName());
- syncopeTO.getReportlets().addAll(
- classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.REPORTLET));
- syncopeTO.getTaskJobs().addAll(
- classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.TASKJOBDELEGATE));
- syncopeTO.getPropagationActions().addAll(
- classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.PROPAGATION_ACTIONS));
- syncopeTO.getSyncActions().addAll(
- classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.SYNC_ACTIONS));
- syncopeTO.getPushActions().addAll(
- classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.PUSH_ACTIONS));
- syncopeTO.getSyncCorrelationRules().addAll(
- classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.SYNC_CORRELATION_RULE));
- syncopeTO.getPushCorrelationRules().addAll(
- classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.PUSH_CORRELATION_RULE));
- syncopeTO.getValidators().addAll(
- classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.VALIDATOR));
+ syncopeTO.getReportlets().addAll(classNamesLoader.getClassNames(Type.REPORTLET));
+ syncopeTO.getTaskJobs().addAll(classNamesLoader.getClassNames(Type.TASKJOBDELEGATE));
+ syncopeTO.getPropagationActions().addAll(classNamesLoader.getClassNames(Type.PROPAGATION_ACTIONS));
+ syncopeTO.getSyncActions().addAll(classNamesLoader.getClassNames(Type.SYNC_ACTIONS));
+ syncopeTO.getPushActions().addAll(classNamesLoader.getClassNames(Type.PUSH_ACTIONS));
+ syncopeTO.getSyncCorrelationRules().addAll(classNamesLoader.getClassNames(Type.SYNC_CORRELATION_RULE));
+ syncopeTO.getPushCorrelationRules().addAll(classNamesLoader.getClassNames(Type.PUSH_CORRELATION_RULE));
+ syncopeTO.getValidators().addAll(classNamesLoader.getClassNames(Type.VALIDATOR));
Set<String> htmlTemplates = new HashSet<>();
Set<String> textTemplates = new HashSet<>();
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/core/logic/src/main/java/org/apache/syncope/core/logic/init/ImplementationClassNamesLoader.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/init/ImplementationClassNamesLoader.java b/core/logic/src/main/java/org/apache/syncope/core/logic/init/ImplementationClassNamesLoader.java
index 2bcd78f..1b53e5c 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/init/ImplementationClassNamesLoader.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/init/ImplementationClassNamesLoader.java
@@ -62,9 +62,6 @@ public class ImplementationClassNamesLoader implements SyncopeLoader {
}
- /**
- * Logger.
- */
private static final Logger LOG = LoggerFactory.getLogger(ImplementationClassNamesLoader.class);
private Map<Type, Set<String>> classNames;
@@ -87,7 +84,7 @@ public class ImplementationClassNamesLoader implements SyncopeLoader {
scanner.addIncludeFilter(new AssignableTypeFilter(SyncActions.class));
scanner.addIncludeFilter(new AssignableTypeFilter(PushActions.class));
scanner.addIncludeFilter(new AssignableTypeFilter(SyncCorrelationRule.class));
- // Remove once SYNCOPE-631 is done
+ // Remove once SYNCOPE-470 is done
//scanner.addIncludeFilter(new AssignableTypeFilter(PushCorrelationRule.class));
scanner.addIncludeFilter(new AssignableTypeFilter(PropagationActions.class));
scanner.addIncludeFilter(new AssignableTypeFilter(Validator.class));
@@ -121,7 +118,7 @@ public class ImplementationClassNamesLoader implements SyncopeLoader {
classNames.get(Type.SYNC_CORRELATION_RULE).add(bd.getBeanClassName());
}
- // Uncomment when SYNCOPE-631 is done
+ // Uncomment when SYNCOPE-470 is done
/* if (PushCorrelationRule.class.isAssignableFrom(clazz) && !isAbsractClazz) {
* classNames.get(Type.PUSH_CORRELATION_RULES).add(metadata.getClassName());
* } */
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
index c75a148..603cd01 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
@@ -22,12 +22,15 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import java.util.List;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.PasswordPolicySpec;
import org.apache.syncope.common.lib.types.PolicyType;
import org.apache.syncope.common.lib.types.SyncPolicySpec;
-import org.apache.syncope.common.lib.types.SyncPolicySpecItem;
+import org.apache.syncope.core.misc.serialization.POJOHelper;
import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
@@ -55,9 +58,20 @@ public class PolicyTest extends AbstractTest {
}
@Test
- public void findById() {
- Policy policy = policyDAO.find(1L);
+ public void findByKey() {
+ SyncPolicy policy = policyDAO.find(3L);
assertNotNull("findById did not work", policy);
+
+ SyncPolicySpec spec = policy.getSpecification(SyncPolicySpec.class);
+ assertNotNull(spec);
+
+ String rule = spec.getCorrelationRules().get(AnyTypeKind.USER.name());
+ assertNotNull(rule);
+ String[] plainSchemas = POJOHelper.deserialize(rule, String[].class);
+ assertNotNull(plainSchemas);
+ assertEquals(2, plainSchemas.length);
+ assertTrue(ArrayUtils.contains(plainSchemas, "username"));
+ assertTrue(ArrayUtils.contains(plainSchemas, "firstname"));
}
@Test
@@ -89,15 +103,8 @@ public class PolicyTest extends AbstractTest {
SyncPolicySpec syncPolicySpec = new SyncPolicySpec();
- SyncPolicySpecItem item = new SyncPolicySpecItem();
- item.setAnyTypeKey(anyTypeDAO.findUser().getKey());
- item.setJavaRule(syncURuleName);
- syncPolicySpec.getItems().add(item);
-
- item = new SyncPolicySpecItem();
- item.setAnyTypeKey(anyTypeDAO.findGroup().getKey());
- item.setJavaRule(syncGRuleName);
- syncPolicySpec.getItems().add(item);
+ syncPolicySpec.getCorrelationRules().put(anyTypeDAO.findUser().getKey(), syncURuleName);
+ syncPolicySpec.getCorrelationRules().put(anyTypeDAO.findGroup().getKey(), syncGRuleName);
policy.setSpecification(syncPolicySpec);
policy.setDescription("Sync policy");
@@ -106,10 +113,10 @@ public class PolicyTest extends AbstractTest {
assertNotNull(policy);
assertEquals(PolicyType.SYNC, policy.getType());
- assertEquals(syncURuleName,
- (policy.getSpecification(SyncPolicySpec.class)).getItem(anyTypeDAO.findUser().getKey()).getJavaRule());
- assertEquals(syncGRuleName,
- (policy.getSpecification(SyncPolicySpec.class)).getItem(anyTypeDAO.findGroup().getKey()).getJavaRule());
+ assertEquals(syncURuleName, (policy.getSpecification(SyncPolicySpec.class)).
+ getCorrelationRules().get(anyTypeDAO.findUser().getKey()));
+ assertEquals(syncGRuleName, (policy.getSpecification(SyncPolicySpec.class)).
+ getCorrelationRules().get(anyTypeDAO.findGroup().getKey()));
}
@Test
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 37ff60f..5977c9a 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -101,11 +101,11 @@ under the License.
<!-- sample policies -->
<Policy DTYPE="SyncPolicy" id="1" description="a sync policy" type="SYNC"
- specification='{"conflictResolutionAction":"IGNORE","items":[]}'/>
+ specification='{"conflictResolutionAction":"IGNORE"'/>
<Policy DTYPE="PasswordPolicy" id="2" description="a password policy" type="PASSWORD"
specification='{"historyLength":1,"maxLength":0,"minLength":8,"nonAlphanumericRequired":false,"alphanumericRequired":false,"digitRequired":false,"lowercaseRequired":false,"uppercaseRequired":false,"mustStartWithDigit":false,"mustntStartWithDigit":false,"mustEndWithDigit":false,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[],"allowNullPassword":true}'/>
<Policy DTYPE="SyncPolicy" id="3" description="sync policy 2" type="SYNC"
- specification='{"conflictResolutionAction":"ALL","items":[{"anyTypeKey":"USER","javaRule":null,"altSearchSchemas":["username","firstname"]}]}'/>
+ specification='{"conflictResolutionAction":"ALL","correlationRules":{"USER":"[\"username\",\"firstname\"]"}}'/>
<Policy DTYPE="PasswordPolicy" id="4" description="sample password policy" type="PASSWORD"
specification='{"historyLength":0,"maxLength":0,"minLength":10,"nonAlphanumericRequired":false,"alphanumericRequired":false,"digitRequired":true,"lowercaseRequired":false,"uppercaseRequired":false,"mustStartWithDigit":false,"mustntStartWithDigit":false,"mustEndWithDigit":false,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[], "allowNullPassword":true}'/>
<Policy DTYPE="AccountPolicy" id="5" description="an account policy" type="ACCOUNT"
@@ -113,11 +113,11 @@ under the License.
<Policy DTYPE="AccountPolicy" id="6" description="sample account policy" type="ACCOUNT"
specification='{"maxLength":0,"minLength":4,"pattern":null,"allUpperCase":false,"allLowerCase":false,"propagateSuspension":false,"maxAuthenticationAttempts":3,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
<Policy DTYPE="SyncPolicy" id="7" description="sync policy 1" type="SYNC"
- specification='{"conflictResolutionAction":"IGNORE","items":[]}'/>
+ specification='{"conflictResolutionAction":"IGNORE"}'/>
<Policy DTYPE="PasswordPolicy" id="8" description="sample password policy" type="PASSWORD"
specification='{"historyLength":0,"maxLength":0,"minLength":10,"nonAlphanumericRequired":true,"alphanumericRequired":false,"digitRequired":true,"lowercaseRequired":true,"uppercaseRequired":true,"mustStartWithDigit":true,"mustntStartWithDigit":false,"mustEndWithDigit":true,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[],"allowNullPassword":false}'/>
<Policy DTYPE="SyncPolicy" id="9" description="sync policy for java rule" type="SYNC"
- specification='{"conflictResolutionAction":"IGNORE","items":[]}'/>
+ specification='{"conflictResolutionAction":"IGNORE"}'/>
<RelationshipType name="inclusion" description="Models the act that an object is included in another"/>
<RelationshipType name="neighborhood"/>
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
index fde025d..fa53bbd 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
@@ -45,9 +45,6 @@ import org.springframework.stereotype.Component;
@Component
public class PolicyDataBinderImpl implements PolicyDataBinder {
- /**
- * Logger.
- */
private static final Logger LOG = LoggerFactory.getLogger(PolicyDataBinder.class);
@Autowired
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/PlainAttrsSyncCorrelationRule.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/PlainAttrsSyncCorrelationRule.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/PlainAttrsSyncCorrelationRule.java
new file mode 100644
index 0000000..1af195e
--- /dev/null
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/PlainAttrsSyncCorrelationRule.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.provisioning.java.sync;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.syncope.common.lib.types.MappingPurpose;
+import org.apache.syncope.core.misc.MappingUtils;
+import org.apache.syncope.core.persistence.api.dao.search.AnyCond;
+import org.apache.syncope.core.persistence.api.dao.search.AttributeCond;
+import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
+import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
+import org.apache.syncope.core.persistence.api.entity.resource.Provision;
+import org.apache.syncope.core.provisioning.api.sync.SyncCorrelationRule;
+import org.identityconnectors.framework.common.objects.Attribute;
+import org.identityconnectors.framework.common.objects.ConnectorObject;
+
+public class PlainAttrsSyncCorrelationRule implements SyncCorrelationRule {
+
+ private final List<String> plainSchemaNames;
+
+ private final Provision provision;
+
+ public PlainAttrsSyncCorrelationRule(final String[] plainSchemaNames, final Provision provision) {
+ this.plainSchemaNames = Arrays.asList(plainSchemaNames);
+ this.provision = provision;
+ }
+
+ @Override
+ public SearchCond getSearchCond(final ConnectorObject connObj) {
+ // search for external attribute's name/value of each specified name
+ Map<String, Attribute> extValues = new HashMap<>();
+
+ for (MappingItem item : MappingUtils.getMappingItems(provision, MappingPurpose.SYNCHRONIZATION)) {
+ extValues.put(item.getIntAttrName(), connObj.getAttributeByName(item.getExtAttrName()));
+ }
+
+ // search for user/group by attribute(s) specified in the policy
+ SearchCond searchCond = null;
+
+ for (String schema : plainSchemaNames) {
+ Attribute value = extValues.get(schema);
+
+ if (value == null) {
+ throw new IllegalArgumentException(
+ "Connector object does not contains the attributes to perform the search: " + schema);
+ }
+
+ AttributeCond.Type type;
+ String expression = null;
+
+ if (value.getValue() == null || value.getValue().isEmpty()
+ || (value.getValue().size() == 1 && value.getValue().get(0) == null)) {
+
+ type = AttributeCond.Type.ISNULL;
+ } else {
+ type = AttributeCond.Type.EQ;
+ expression = value.getValue().size() > 1
+ ? value.getValue().toString()
+ : value.getValue().get(0).toString();
+ }
+
+ SearchCond nodeCond;
+ // users: just id or username can be selected to be used
+ // groups: just id or name can be selected to be used
+ if ("key".equalsIgnoreCase(schema)
+ || "username".equalsIgnoreCase(schema) || "name".equalsIgnoreCase(schema)) {
+
+ AnyCond cond = new AnyCond();
+ cond.setSchema(schema);
+ cond.setType(type);
+ cond.setExpression(expression);
+
+ nodeCond = SearchCond.getLeafCond(cond);
+ } else {
+ AttributeCond cond = new AttributeCond();
+ cond.setSchema(schema);
+ cond.setType(type);
+ cond.setExpression(expression);
+
+ nodeCond = SearchCond.getLeafCond(cond);
+ }
+
+ searchCond = searchCond == null
+ ? nodeCond
+ : SearchCond.getAndCond(searchCond, nodeCond);
+ }
+
+ return searchCond;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java
index dc5cdf0..7fd244b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java
@@ -20,15 +20,14 @@ package org.apache.syncope.core.provisioning.java.sync;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.MappingPurpose;
import org.apache.syncope.common.lib.types.SyncPolicySpec;
import org.apache.syncope.core.misc.MappingUtils;
+import org.apache.syncope.core.misc.serialization.POJOHelper;
import org.apache.syncope.core.persistence.api.attrvalue.validation.ParsingValidationException;
import org.apache.syncope.core.persistence.api.dao.AnyDAO;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
@@ -36,10 +35,7 @@ import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
-import org.apache.syncope.core.persistence.api.dao.search.AnyCond;
-import org.apache.syncope.core.persistence.api.dao.search.AttributeCond;
import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
-import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.AnyType;
import org.apache.syncope.core.persistence.api.entity.AnyUtils;
@@ -230,11 +226,15 @@ public class SyncUtils {
return result;
}
- private List<Long> search(final SearchCond searchCond, final AnyTypeKind type) {
- final List<Long> result = new ArrayList<>();
+ private List<Long> findByCorrelationRule(
+ final ConnectorObject connObj, final SyncCorrelationRule rule, final AnyTypeKind type) {
+
+ List<Long> result = new ArrayList<>();
List<Any<?, ?, ?>> anys = searchDAO.search(
- SyncopeConstants.FULL_ADMIN_REALMS, searchCond, Collections.<OrderByClause>emptyList(), type);
+ SyncopeConstants.FULL_ADMIN_REALMS,
+ rule.getSearchCond(connObj),
+ Collections.<OrderByClause>emptyList(), type);
for (Any<?, ?, ?> any : anys) {
result.add(any.getKey());
}
@@ -242,101 +242,24 @@ public class SyncUtils {
return result;
}
- private List<Long> findByCorrelationRule(
- final ConnectorObject connObj, final SyncCorrelationRule rule, final AnyTypeKind type) {
-
- return search(rule.getSearchCond(connObj), type);
- }
-
- private List<Long> findByAnySearch(
- final ConnectorObject connObj,
- final List<String> altSearchSchemas,
- final Provision provision,
- final AnyTypeKind anyTypeKind) {
-
- // search for external attribute's name/value of each specified name
- Map<String, Attribute> extValues = new HashMap<>();
-
- for (MappingItem item : MappingUtils.getMappingItems(provision, MappingPurpose.SYNCHRONIZATION)) {
- extValues.put(item.getIntAttrName(), connObj.getAttributeByName(item.getExtAttrName()));
- }
-
- // search for user/group by attribute(s) specified in the policy
- SearchCond searchCond = null;
-
- for (String schema : altSearchSchemas) {
- Attribute value = extValues.get(schema);
-
- if (value == null) {
- throw new IllegalArgumentException(
- "Connector object does not contains the attributes to perform the search: " + schema);
- }
-
- AttributeCond.Type type;
- String expression = null;
-
- if (value.getValue() == null || value.getValue().isEmpty()
- || (value.getValue().size() == 1 && value.getValue().get(0) == null)) {
-
- type = AttributeCond.Type.ISNULL;
- } else {
- type = AttributeCond.Type.EQ;
- expression = value.getValue().size() > 1
- ? value.getValue().toString()
- : value.getValue().get(0).toString();
- }
-
- SearchCond nodeCond;
- // users: just id or username can be selected to be used
- // groups: just id or name can be selected to be used
- if ("key".equalsIgnoreCase(schema)
- || "username".equalsIgnoreCase(schema) || "name".equalsIgnoreCase(schema)) {
-
- AnyCond cond = new AnyCond();
- cond.setSchema(schema);
- cond.setType(type);
- cond.setExpression(expression);
-
- nodeCond = SearchCond.getLeafCond(cond);
- } else {
- AttributeCond cond = new AttributeCond();
- cond.setSchema(schema);
- cond.setType(type);
- cond.setExpression(expression);
-
- nodeCond = SearchCond.getLeafCond(cond);
- }
-
- searchCond = searchCond == null
- ? nodeCond
- : SearchCond.getAndCond(searchCond, nodeCond);
- }
-
- return search(searchCond, anyTypeKind);
- }
-
private SyncCorrelationRule getCorrelationRule(final Provision provision, final SyncPolicySpec policySpec) {
- String clazz = policySpec.getItem(provision.getAnyType().getKey()) == null
- ? null
- : policySpec.getItem(provision.getAnyType().getKey()).getJavaRule();
-
- SyncCorrelationRule res = null;
+ SyncCorrelationRule result = null;
- if (StringUtils.isNotBlank(clazz)) {
- try {
- res = (SyncCorrelationRule) Class.forName(clazz).newInstance();
- } catch (Exception e) {
- LOG.error("Failure instantiating correlation rule class '{}'", clazz, e);
+ String syncCorrelationRule = policySpec.getCorrelationRules().get(provision.getAnyType().getKey());
+ if (StringUtils.isNotBlank(syncCorrelationRule)) {
+ if (syncCorrelationRule.charAt(0) == '[') {
+ result = new PlainAttrsSyncCorrelationRule(
+ POJOHelper.deserialize(syncCorrelationRule, String[].class), provision);
+ } else {
+ try {
+ result = (SyncCorrelationRule) Class.forName(syncCorrelationRule).newInstance();
+ } catch (Exception e) {
+ LOG.error("Failure instantiating correlation rule class '{}'", syncCorrelationRule, e);
+ }
}
}
- return res;
- }
-
- private List<String> getAltSearchSchemas(final Provision provision, final SyncPolicySpec policySpec) {
- return policySpec.getItem(provision.getAnyType().getKey()) == null
- ? Collections.<String>emptyList()
- : policySpec.getItem(provision.getAnyType().getKey()).getAltSearchSchemas();
+ return result;
}
/**
@@ -360,17 +283,12 @@ public class SyncUtils {
}
SyncCorrelationRule syncRule = null;
- List<String> altSearchSchemas = null;
-
if (syncPolicySpec != null) {
syncRule = getCorrelationRule(provision, syncPolicySpec);
- altSearchSchemas = getAltSearchSchemas(provision, syncPolicySpec);
}
return syncRule == null
- ? altSearchSchemas == null || altSearchSchemas.isEmpty()
- ? findByConnObjectKeyItem(uid, provision, anyUtils)
- : findByAnySearch(connObj, altSearchSchemas, provision, anyUtils.getAnyTypeKind())
+ ? findByConnObjectKeyItem(uid, provision, anyUtils)
: findByCorrelationRule(connObj, syncRule, anyUtils.getAnyTypeKind());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PolicyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PolicyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PolicyITCase.java
index 0098821..95701ae 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PolicyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/PolicyITCase.java
@@ -36,7 +36,6 @@ import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.PasswordPolicySpec;
import org.apache.syncope.common.lib.types.PolicyType;
import org.apache.syncope.common.lib.types.SyncPolicySpec;
-import org.apache.syncope.common.lib.types.SyncPolicySpecItem;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
@@ -47,12 +46,8 @@ public class PolicyITCase extends AbstractITCase {
private SyncPolicyTO buildSyncPolicyTO() {
SyncPolicyTO policy = new SyncPolicyTO();
- SyncPolicySpecItem item = new SyncPolicySpecItem();
- item.setAnyTypeKey(AnyTypeKind.USER.name());
- item.setJavaRule(TestSyncRule.class.getName());
-
SyncPolicySpec spec = new SyncPolicySpec();
- spec.getItems().add(item);
+ spec.getCorrelationRules().put(AnyTypeKind.USER.name(), TestSyncRule.class.getName());
policy.setSpecification(spec);
policy.setDescription("Sync policy");
@@ -116,7 +111,7 @@ public class PolicyITCase extends AbstractITCase {
assertNotNull(policyTO);
assertEquals(PolicyType.SYNC, policyTO.getType());
assertEquals(TestSyncRule.class.getName(),
- policyTO.getSpecification().getItem(AnyTypeKind.USER.name()).getJavaRule());
+ policyTO.getSpecification().getCorrelationRules().get(AnyTypeKind.USER.name()));
}
@Test
@@ -169,7 +164,7 @@ public class PolicyITCase extends AbstractITCase {
@Test
public void getCorrelationRules() {
- assertEquals(1, syncopeService.info().getSyncCorrelationRules().size());
+ assertEquals(2, syncopeService.info().getSyncCorrelationRules().size());
}
@Test
http://git-wip-us.apache.org/repos/asf/syncope/blob/8fe3c7c2/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
index 4313c00..d97eaed 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java
@@ -55,7 +55,6 @@ import org.apache.syncope.common.lib.types.CipherAlgorithm;
import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
import org.apache.syncope.common.lib.types.ResourceDeassociationActionType;
-import org.apache.syncope.common.lib.types.SyncPolicySpecItem;
import org.apache.syncope.common.lib.types.TaskType;
import org.apache.syncope.common.lib.wrap.ResourceKey;
import org.apache.syncope.common.rest.api.CollectionWrapper;
@@ -505,16 +504,7 @@ public class SyncTaskITCase extends AbstractTaskITCase {
// Add a custom correlation rule
// -----------------------------
SyncPolicyTO policyTO = policyService.read(9L);
-
- SyncPolicySpecItem item = policyTO.getSpecification().getItem(AnyTypeKind.USER.name());
- if (item == null) {
- item = new SyncPolicySpecItem();
- item.setAnyTypeKey(AnyTypeKind.USER.name());
-
- policyTO.getSpecification().getItems().add(item);
- }
- item.setJavaRule(TestSyncRule.class.getName());
-
+ policyTO.getSpecification().getCorrelationRules().put(AnyTypeKind.USER.name(), TestSyncRule.class.getName());
policyService.update(policyTO);
// -----------------------------
[6/6] syncope git commit: Merge branch 'master' into SYNCOPE-156
Posted by md...@apache.org.
Merge branch 'master' into SYNCOPE-156
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/5336431d
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/5336431d
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/5336431d
Branch: refs/heads/SYNCOPE-156
Commit: 5336431db1bfdcd1f51847f2ee65a536f9e21275
Parents: f0883ca 8fe3c7c
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Tue Aug 18 17:44:55 2015 +0200
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Tue Aug 18 17:44:55 2015 +0200
----------------------------------------------------------------------
.travis.yml | 5 +-
.../cli/commands/ConfigurationCommand.java | 8 +-
.../console/panels/BeanReflectionModal.java | 36 -
.../console/panels/BeanReflectionPanel.java | 339 ----------
.../console/rest/ConfigurationRestClient.java | 10 +-
.../common/lib/annotation/ClassList.java | 26 -
.../common/lib/annotation/SchemaList.java | 28 -
.../syncope/common/lib/mod/StatusMod.java | 2 +-
.../apache/syncope/common/lib/to/AttrTO.java | 2 +
.../apache/syncope/common/lib/to/LoggerTO.java | 2 +-
.../common/lib/types/AbstractPolicySpec.java | 2 -
.../common/lib/types/SyncPolicySpec.java | 42 +-
.../common/lib/types/SyncPolicySpecItem.java | 67 --
.../rest/api/service/ConfigurationService.java | 25 +-
core/logic/pom.xml | 86 +--
.../syncope/core/logic/ConfigurationLogic.java | 16 +-
.../apache/syncope/core/logic/SyncopeLogic.java | 26 +-
.../apache/syncope/core/logic/TaskLogic.java | 4 +-
.../init/ImplementationClassNamesLoader.java | 7 +-
.../core/logic/init/JobInstanceLoaderImpl.java | 85 +--
.../logic/notification/NotificationJob.java | 21 +-
.../notification/NotificationJobDelegate.java | 5 +-
.../syncope/core/logic/report/ReportJob.java | 22 +-
.../apache/syncope/core/logic/AbstractTest.java | 40 --
.../syncope/core/logic/NotificationTest.java | 659 -------------------
core/logic/src/test/resources/logicTest.xml | 59 --
.../core/misc/security/AuthContextUtils.java | 8 +-
.../misc/spring/ApplicationContextProvider.java | 11 +
.../spring/DomainTransactionInterceptor.java | 70 ++
.../spring/DomainTransactionInterceptor.java | 70 --
.../jpa/spring/SpringComponentReplacer.java | 42 --
.../core/persistence/jpa/AbstractTest.java | 2 -
.../persistence/jpa/inner/AnyObjectTest.java | 2 +-
.../persistence/jpa/inner/AnySearchTest.java | 2 +-
.../persistence/jpa/inner/AnyTypeClassTest.java | 2 +-
.../core/persistence/jpa/inner/AnyTypeTest.java | 2 +-
.../core/persistence/jpa/inner/ConfTest.java | 2 +-
.../persistence/jpa/inner/ConnInstanceTest.java | 2 +-
.../core/persistence/jpa/inner/DerAttrTest.java | 2 +-
.../persistence/jpa/inner/DerSchemaTest.java | 2 +-
.../core/persistence/jpa/inner/DomainTest.java | 2 +-
.../core/persistence/jpa/inner/GroupTest.java | 2 +-
.../persistence/jpa/inner/MultitenancyTest.java | 6 +-
.../persistence/jpa/inner/NotificationTest.java | 2 +-
.../persistence/jpa/inner/PlainAttrTest.java | 2 +-
.../persistence/jpa/inner/PlainSchemaTest.java | 2 +-
.../core/persistence/jpa/inner/PolicyTest.java | 41 +-
.../core/persistence/jpa/inner/RealmTest.java | 2 +-
.../jpa/inner/RelationshipTypeTest.java | 2 +-
.../core/persistence/jpa/inner/ReportTest.java | 2 +-
.../persistence/jpa/inner/ResourceTest.java | 2 +-
.../core/persistence/jpa/inner/RoleTest.java | 2 +-
.../jpa/inner/SecurityQuestionTest.java | 2 +-
.../persistence/jpa/inner/TaskExecTest.java | 2 +-
.../core/persistence/jpa/inner/TaskTest.java | 2 +-
.../core/persistence/jpa/inner/UserTest.java | 2 +-
.../core/persistence/jpa/inner/VirAttrTest.java | 2 +-
.../persistence/jpa/inner/VirSchemaTest.java | 2 +-
.../persistence/jpa/outer/AnySearchTest.java | 2 +-
.../persistence/jpa/outer/AnyTypeClassTest.java | 2 +-
.../core/persistence/jpa/outer/AnyTypeTest.java | 2 +-
.../persistence/jpa/outer/ConnInstanceTest.java | 2 +-
.../persistence/jpa/outer/DerSchemaTest.java | 2 +-
.../core/persistence/jpa/outer/GroupTest.java | 3 +-
.../persistence/jpa/outer/PlainAttrTest.java | 2 +-
.../persistence/jpa/outer/PlainSchemaTest.java | 2 +-
.../core/persistence/jpa/outer/RealmTest.java | 2 +-
.../core/persistence/jpa/outer/ReportTest.java | 2 +-
.../persistence/jpa/outer/ResourceTest.java | 3 +-
.../core/persistence/jpa/outer/RoleTest.java | 2 +-
.../jpa/outer/SecurityQuestionTest.java | 2 +-
.../core/persistence/jpa/outer/TaskTest.java | 2 +-
.../core/persistence/jpa/outer/UserTest.java | 2 +-
.../test/resources/domains/MasterContent.xml | 12 +-
.../src/test/resources/domains/TwoContent.xml | 14 -
.../provisioning/java/ConnectorManager.java | 21 +-
.../java/data/PolicyDataBinderImpl.java | 3 -
.../core/provisioning/java/job/TaskJob.java | 32 +-
.../notification/NotificationManagerImpl.java | 10 +-
.../sync/PlainAttrsSyncCorrelationRule.java | 110 ++++
.../core/provisioning/java/sync/SyncUtils.java | 126 +---
.../core/provisioning/java/AbstractTest.java | 2 -
.../provisioning/java/ConnectorManagerTest.java | 2 +-
.../core/provisioning/java/MappingTest.java | 2 +-
.../java/ResourceDataBinderTest.java | 2 +-
.../cxf/service/ConfigurationServiceImpl.java | 11 +-
fit/core-reference/pom.xml | 5 +
.../src/main/resources/mail.properties | 25 +
.../fit/core/reference/AbstractTaskITCase.java | 37 +-
.../fit/core/reference/ConfigurationITCase.java | 20 +-
.../fit/core/reference/MultitenancyITCase.java | 2 +-
.../core/reference/NotificationTaskITCase.java | 317 ++++++++-
.../fit/core/reference/PolicyITCase.java | 11 +-
.../fit/core/reference/SyncTaskITCase.java | 12 +-
.../syncope/fit/core/reference/UserITCase.java | 27 +-
.../fit/core/reference/UserSelfITCase.java | 9 +-
pom.xml | 2 +-
97 files changed, 856 insertions(+), 1912 deletions(-)
----------------------------------------------------------------------