You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2014/07/01 15:29:08 UTC

svn commit: r1607071 [1/2] - in /syncope/trunk: build-tools/src/main/resources/ common/src/main/java/org/apache/syncope/common/to/ console/src/main/java/org/apache/syncope/console/pages/ core/src/main/java/org/apache/syncope/core/persistence/beans/ cor...

Author: fmartelli
Date: Tue Jul  1 13:29:07 2014
New Revision: 1607071

URL: http://svn.apache.org/r1607071
Log:
[SYNCOPE-392, SYNCOPE-471] integration test improvement

Modified:
    syncope/trunk/build-tools/src/main/resources/testdb.sql
    syncope/trunk/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/PushTaskModalPage.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/SyncTaskModalPage.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSyncTask.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncTask.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectPushResultHandler.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectSyncResultHandler.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java
    syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java
    syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
    syncope/trunk/core/src/test/resources/content.xml

Modified: syncope/trunk/build-tools/src/main/resources/testdb.sql
URL: http://svn.apache.org/viewvc/syncope/trunk/build-tools/src/main/resources/testdb.sql?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/build-tools/src/main/resources/testdb.sql (original)
+++ syncope/trunk/build-tools/src/main/resources/testdb.sql Tue Jul  1 13:29:07 2014
@@ -32,6 +32,8 @@ password VARCHAR(255) NOT NULL,
 status VARCHAR(5));
 
 INSERT INTO test2 VALUES ('testuser2', 'password321', 'false');
+INSERT INTO test2 VALUES ('rossini', 'password321', 'true');
+INSERT INTO test2 VALUES ('verdi', 'password321', 'true');
 
 -- this table is for issueSYNCOPE230
 DROP TABLE testsync IF EXISTS;

Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/to/AbstractSyncTaskTO.java Tue Jul  1 13:29:07 2014
@@ -46,9 +46,9 @@ public class AbstractSyncTaskTO extends 
 
     private boolean syncStatus;
 
-    private UnmatchingRule unmatchigRule;
+    private UnmatchingRule unmatchingRule;
 
-    private MatchingRule matchigRule;
+    private MatchingRule matchingRule;
 
     private List<String> actionsClassNames = new ArrayList<String>();
 
@@ -99,19 +99,19 @@ public class AbstractSyncTaskTO extends 
         return actionsClassNames;
     }
 
-    public UnmatchingRule getUnmatchigRule() {
-        return unmatchigRule;
+    public UnmatchingRule getUnmatchingRule() {
+        return unmatchingRule;
     }
 
-    public void setUnmatchigRule(final UnmatchingRule unmatchigRule) {
-        this.unmatchigRule = unmatchigRule;
+    public void setUnmatchingRule(final UnmatchingRule unmatchigRule) {
+        this.unmatchingRule = unmatchigRule;
     }
 
-    public MatchingRule getMatchigRule() {
-        return matchigRule;
+    public MatchingRule getMatchingRule() {
+        return matchingRule;
     }
 
-    public void setMatchigRule(final MatchingRule matchigRule) {
-        this.matchigRule = matchigRule;
+    public void setMatchingRule(final MatchingRule matchigRule) {
+        this.matchingRule = matchigRule;
     }
 }

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/PushTaskModalPage.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/PushTaskModalPage.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/PushTaskModalPage.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/PushTaskModalPage.java Tue Jul  1 13:29:07 2014
@@ -57,15 +57,15 @@ public class PushTaskModalPage extends A
         super(window, taskTO, pageRef);
 
         // set default Matching rule
-        ((DropDownChoice) matchingRule.getField()).setDefaultModelObject(taskTO.getMatchigRule() == null
+        ((DropDownChoice) matchingRule.getField()).setDefaultModelObject(taskTO.getMatchingRule() == null
                 ? MatchingRule.UPDATE
-                : taskTO.getMatchigRule());
+                : taskTO.getMatchingRule());
         profile.add(matchingRule);
 
         // set default Unmatching rule
-        ((DropDownChoice) unmatchingRule.getField()).setDefaultModelObject(taskTO.getUnmatchigRule() == null
+        ((DropDownChoice) unmatchingRule.getField()).setDefaultModelObject(taskTO.getUnmatchingRule() == null
                 ? UnmatchingRule.ASSIGN
-                : taskTO.getUnmatchigRule());
+                : taskTO.getUnmatchingRule());
         profile.add(unmatchingRule);
 
         final WebMarkupContainer filterContainer = new WebMarkupContainer("filterContainer");

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/SyncTaskModalPage.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/SyncTaskModalPage.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/SyncTaskModalPage.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/SyncTaskModalPage.java Tue Jul  1 13:29:07 2014
@@ -40,15 +40,15 @@ public class SyncTaskModalPage extends A
         super(window, taskTO, pageRef);
 
         // set default Matching rule
-        ((DropDownChoice) matchingRule.getField()).setDefaultModelObject(taskTO.getMatchigRule() == null
+        ((DropDownChoice) matchingRule.getField()).setDefaultModelObject(taskTO.getMatchingRule() == null
                 ? MatchingRule.UPDATE
-                : taskTO.getMatchigRule());
+                : taskTO.getMatchingRule());
         profile.add(matchingRule);
 
         // set default Unmatching rule
-        ((DropDownChoice) unmatchingRule.getField()).setDefaultModelObject(taskTO.getUnmatchigRule() == null
+        ((DropDownChoice) unmatchingRule.getField()).setDefaultModelObject(taskTO.getUnmatchingRule() == null
                 ? UnmatchingRule.PROVISION
-                : taskTO.getUnmatchigRule());
+                : taskTO.getUnmatchingRule());
         profile.add(unmatchingRule);
 
         final AjaxCheckBoxPanel fullReconciliation = new AjaxCheckBoxPanel("fullReconciliation",

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSyncTask.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSyncTask.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSyncTask.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSyncTask.java Tue Jul  1 13:29:07 2014
@@ -69,13 +69,13 @@ public abstract class AbstractSyncTask e
      * @see UnmatchingRule
      */
     @Enumerated(EnumType.STRING)
-    protected UnmatchingRule unmatchigRule;
+    protected UnmatchingRule unmatchingRule;
 
     /**
      * @see MatchingRule
      */
     @Enumerated(EnumType.STRING)
-    protected MatchingRule matchigRule;
+    protected MatchingRule matchingRule;
 
     @ElementCollection(fetch = FetchType.EAGER)
     private List<String> actionsClassNames = new ArrayList<String>();
@@ -130,16 +130,16 @@ public abstract class AbstractSyncTask e
         this.syncStatus = getBooleanAsInteger(syncStatus);
     }
 
-    public abstract UnmatchingRule getUnmatchigRule();
+    public abstract UnmatchingRule getUnmatchingRule();
 
-    public void setUnmatchigRule(final UnmatchingRule unmatchigRule) {
-        this.unmatchigRule = unmatchigRule;
+    public void setUnmatchingRule(final UnmatchingRule unmatchigRule) {
+        this.unmatchingRule = unmatchigRule;
     }
 
-    public abstract MatchingRule getMatchigRule();
+    public abstract MatchingRule getMatchingRule();
 
-    public void setMatchigRule(final MatchingRule matchigRule) {
-        this.matchigRule = matchigRule;
+    public void setMatchingRule(final MatchingRule matchigRule) {
+        this.matchingRule = matchigRule;
     }
 
     public List<String> getActionsClassNames() {

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java Tue Jul  1 13:29:07 2014
@@ -60,12 +60,12 @@ public class PushTask extends AbstractSy
     }
 
     @Override
-    public UnmatchingRule getUnmatchigRule() {
-        return this.unmatchigRule == null ? DEF_UNMATCHIG_RULE : unmatchigRule;
+    public UnmatchingRule getUnmatchingRule() {
+        return this.unmatchingRule == null ? DEF_UNMATCHIG_RULE : unmatchingRule;
     }
 
     @Override
-    public MatchingRule getMatchigRule() {
-        return this.matchigRule == null ? DEF_MATCHIG_RULE : this.matchigRule;
+    public MatchingRule getMatchingRule() {
+        return this.matchingRule == null ? DEF_MATCHIG_RULE : this.matchingRule;
     }
 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncTask.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncTask.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncTask.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncTask.java Tue Jul  1 13:29:07 2014
@@ -86,12 +86,12 @@ public class SyncTask extends AbstractSy
     }
 
     @Override
-    public UnmatchingRule getUnmatchigRule() {
-        return this.unmatchigRule == null ? DEF_UNMATCHIG_RULE : unmatchigRule;
+    public UnmatchingRule getUnmatchingRule() {
+        return this.unmatchingRule == null ? DEF_UNMATCHIG_RULE : unmatchingRule;
     }
 
     @Override
-    public MatchingRule getMatchigRule() {
-        return this.matchigRule == null ? DEF_MATCHIG_RULE : this.matchigRule;
+    public MatchingRule getMatchingRule() {
+        return this.matchingRule == null ? DEF_MATCHIG_RULE : this.matchingRule;
     }
 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java Tue Jul  1 13:29:07 2014
@@ -155,8 +155,8 @@ public class TaskDataBinder {
         task.setPerformUpdate(taskTO.isPerformUpdate());
         task.setPerformDelete(taskTO.isPerformDelete());
         task.setSyncStatus(taskTO.isSyncStatus());
-        task.setMatchigRule(taskTO.getMatchigRule());
-        task.setUnmatchigRule(taskTO.getUnmatchigRule());
+        task.setMatchingRule(taskTO.getMatchingRule());
+        task.setUnmatchingRule(taskTO.getUnmatchingRule());
         task.getActionsClassNames().clear();
         task.getActionsClassNames().addAll(taskTO.getActionsClassNames());
     }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectPushResultHandler.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectPushResultHandler.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectPushResultHandler.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectPushResultHandler.java Tue Jul  1 13:29:07 2014
@@ -97,7 +97,7 @@ public abstract class AbstractSubjectPus
         result.setId(toBeHandled.getId());
         result.setSubjectType(attrUtil.getType());
         result.setName(getName(toBeHandled));
-        
+
         final Boolean enabled = toBeHandled instanceof SyncopeUser && profile.getSyncTask().isSyncStatus()
                 ? ((SyncopeUser) toBeHandled).isSuspended() ? Boolean.FALSE : Boolean.TRUE
                 : null;
@@ -124,21 +124,21 @@ public abstract class AbstractSubjectPus
 
         // Try to read remote object (user / group) BEFORE any actual operation
         beforeObj = getRemoteObject(values.getKey());
-        
+
         if (profile.isDryRun()) {
             if (beforeObj == null) {
-                result.setOperation(getResourceOperation(profile.getSyncTask().getUnmatchigRule()));
+                result.setOperation(getResourceOperation(profile.getSyncTask().getUnmatchingRule()));
             } else {
-                result.setOperation(getResourceOperation(profile.getSyncTask().getMatchigRule()));
+                result.setOperation(getResourceOperation(profile.getSyncTask().getMatchingRule()));
             }
             result.setStatus(SyncResult.Status.SUCCESS);
         } else {
             try {
                 if (beforeObj == null) {
-                    operation = profile.getSyncTask().getUnmatchigRule().name().toLowerCase();
-                    result.setOperation(getResourceOperation(profile.getSyncTask().getUnmatchigRule()));
+                    operation = profile.getSyncTask().getUnmatchingRule().name().toLowerCase();
+                    result.setOperation(getResourceOperation(profile.getSyncTask().getUnmatchingRule()));
 
-                    switch (profile.getSyncTask().getUnmatchigRule()) {
+                    switch (profile.getSyncTask().getUnmatchingRule()) {
                         case ASSIGN:
                             for (PushActions action : profile.getActions()) {
                                 action.beforeAssign(this.getProfile(), values, toBeHandled);
@@ -162,10 +162,10 @@ public abstract class AbstractSubjectPus
                     }
 
                 } else {
-                    operation = profile.getSyncTask().getMatchigRule().name().toLowerCase();
-                    result.setOperation(getResourceOperation(profile.getSyncTask().getMatchigRule()));
+                    operation = profile.getSyncTask().getMatchingRule().name().toLowerCase();
+                    result.setOperation(getResourceOperation(profile.getSyncTask().getMatchingRule()));
 
-                    switch (profile.getSyncTask().getMatchigRule()) {
+                    switch (profile.getSyncTask().getMatchingRule()) {
                         case UPDATE:
                             for (PushActions action : profile.getActions()) {
                                 action.beforeUpdate(this.getProfile(), values, toBeHandled);

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectSyncResultHandler.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectSyncResultHandler.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectSyncResultHandler.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSubjectSyncResultHandler.java Tue Jul  1 13:29:07 2014
@@ -557,7 +557,7 @@ public abstract class AbstractSubjectSyn
 
             if (SyncDeltaType.CREATE_OR_UPDATE == delta.getDeltaType()) {
                 if (subjectIds.isEmpty()) {
-                    switch (profile.getSyncTask().getUnmatchigRule()) {
+                    switch (profile.getSyncTask().getUnmatchingRule()) {
                         case ASSIGN:
                             profile.getResults().addAll(assign(delta, attrUtil, profile.isDryRun()));
                             break;
@@ -568,7 +568,7 @@ public abstract class AbstractSubjectSyn
                         // do nothing
                     }
                 } else {
-                    switch (profile.getSyncTask().getMatchigRule()) {
+                    switch (profile.getSyncTask().getMatchingRule()) {
                         case UPDATE:
                             profile.getResults().addAll(update(delta, subjectIds, attrUtil, profile.isDryRun()));
                             break;

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/RolePushResultHandler.java Tue Jul  1 13:29:07 2014
@@ -163,7 +163,7 @@ public class RolePushResultHandler exten
 
             final Uid uid = new Uid(accountId);
 
-            profile.getConnector().getObject(
+            obj = profile.getConnector().getObject(
                     ObjectClass.GROUP,
                     uid,
                     profile.getConnector().getOperationOptions(Collections.<AbstractMappingItem>emptySet()));

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java Tue Jul  1 13:29:07 2014
@@ -68,7 +68,7 @@ public class TaskTest extends AbstractDA
         assertEquals(1, taskDAO.findAll(NotificationTask.class).size());
         assertEquals(1, taskDAO.findAll(SchedTask.class).size());
         assertEquals(6, taskDAO.findAll(SyncTask.class).size());
-        assertEquals(1, taskDAO.findAll(PushTask.class).size());
+        assertEquals(11, taskDAO.findAll(PushTask.class).size());
     }
 
     @Test

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java?rev=1607071&r1=1607070&r2=1607071&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java Tue Jul  1 13:29:07 2014
@@ -26,7 +26,16 @@ import static org.junit.Assert.assertTru
 import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 import javax.ws.rs.core.Response;
 import org.apache.syncope.client.SyncopeClient;
 import org.apache.syncope.common.SyncopeClientException;
@@ -56,6 +65,7 @@ import org.apache.syncope.common.types.M
 import org.apache.syncope.common.types.PropagationTaskExecStatus;
 import org.apache.syncope.common.types.TaskType;
 import org.apache.syncope.common.types.TraceLevel;
+import org.apache.syncope.common.types.SubjectType;
 import org.apache.syncope.common.types.UnmatchingRule;
 import org.apache.syncope.common.wrap.PushActionClass;
 import org.apache.syncope.core.sync.TestSyncActions;
@@ -149,7 +159,7 @@ public class TaskTestITCase extends Abst
                 SyncopeClient.getUserSearchConditionBuilder().hasNotResources(RESOURCE_NAME_TESTDB2).query());
         task.setRoleFilter(
                 SyncopeClient.getRoleSearchConditionBuilder().isNotNull("cool").query());
-        task.setMatchigRule(MatchingRule.LINK);
+        task.setMatchingRule(MatchingRule.LINK);
 
         final Response response = taskService.create(task);
         final PushTaskTO actual = getObject(response.getLocation(), TaskService.class, PushTaskTO.class);
@@ -161,8 +171,8 @@ public class TaskTestITCase extends Abst
         assertEquals(task.getJobClassName(), actual.getJobClassName());
         assertEquals(task.getUserFilter(), actual.getUserFilter());
         assertEquals(task.getRoleFilter(), actual.getRoleFilter());
-        assertEquals(UnmatchingRule.ASSIGN, actual.getUnmatchigRule());
-        assertEquals(MatchingRule.LINK, actual.getMatchigRule());
+        assertEquals(UnmatchingRule.ASSIGN, actual.getUnmatchingRule());
+        assertEquals(MatchingRule.LINK, actual.getMatchingRule());
     }
 
     @Test
@@ -249,9 +259,9 @@ public class TaskTestITCase extends Abst
         assertNotNull(taskTO.getExecutions());
         assertTrue(taskTO.getExecutions().isEmpty());
 
-        final PushTaskTO pushTaskTO = taskService.<PushTaskTO>read(13L);
-        assertEquals(UnmatchingRule.ASSIGN, pushTaskTO.getUnmatchigRule());
-        assertEquals(MatchingRule.UPDATE, pushTaskTO.getMatchigRule());
+        final PushTaskTO pushTaskTO = taskService.<PushTaskTO>read(17L);
+        assertEquals(UnmatchingRule.ASSIGN, pushTaskTO.getUnmatchingRule());
+        assertEquals(MatchingRule.UPDATE, pushTaskTO.getMatchingRule());
     }
 
     @Test
@@ -394,26 +404,7 @@ public class TaskTestITCase extends Abst
     @Test
     public void reconcileFromDB() {
         // update sync task
-        SyncTaskTO task = taskService.read(7L);
-        assertNotNull(task);
-
-        // add user template
-        UserTO template = new UserTO();
-        template.getAttrs().add(attributeTO("type", "'type a'"));
-        template.getAttrs().add(attributeTO("userId", "'reconciled@syncope.apache.org'"));
-        template.getAttrs().add(attributeTO("fullname", "'reconciled fullname'"));
-        template.getAttrs().add(attributeTO("surname", "'surname'"));
-
-        task.setUserTemplate(template);
-
-        taskService.update(task.getId(), task);
-        SyncTaskTO actual = taskService.read(task.getId());
-        assertNotNull(actual);
-        assertEquals(task.getId(), actual.getId());
-        assertEquals(template, actual.getUserTemplate());
-        assertEquals(new RoleTO(), actual.getRoleTemplate());
-
-        TaskExecTO execution = execSyncTask(actual.getId(), 20, false);
+        TaskExecTO execution = execSyncTask(7L, 20, false);
         assertNotNull(execution.getStatus());
         assertTrue(PropagationTaskExecStatus.valueOf(execution.getStatus()).isSuccessful());
 
@@ -427,7 +418,7 @@ public class TaskTestITCase extends Abst
         jdbcTemplate.execute("UPDATE TEST SET STATUS=TRUE");
 
         // re-execute the same SyncTask: now user must be active
-        execution = execSyncTask(actual.getId(), 20, false);
+        execution = execSyncTask(7L, 20, false);
         assertNotNull(execution.getStatus());
         assertTrue(PropagationTaskExecStatus.valueOf(execution.getStatus()).isSuccessful());
 
@@ -439,32 +430,7 @@ public class TaskTestITCase extends Abst
     @Test
     public void reconcileFromLDAP() {
         // Update sync task
-        SyncTaskTO task = taskService.read(11L);
-        assertNotNull(task);
-
-        //  add user template
-        final UserTO userTemplate = task.getUserTemplate();
-        userTemplate.getResources().add(RESOURCE_NAME_LDAP);
-        userTemplate.getVirAttrs().add(attributeTO("virtualReadOnly", ""));
-
-        task.setUserTemplate(userTemplate);
-
-        //  add role template
-        RoleTO roleTemplate = new RoleTO();
-        roleTemplate.setParent(8L);
-        roleTemplate.getRAttrTemplates().add("show");
-        roleTemplate.getAttrs().add(attributeTO("show", "'true'"));
-
-        task.setRoleTemplate(roleTemplate);
-
-        taskService.update(task.getId(), task);
-        SyncTaskTO actual = taskService.read(task.getId());
-        assertNotNull(actual);
-        assertEquals(task.getId(), actual.getId());
-        assertEquals(roleTemplate, actual.getRoleTemplate());
-        assertEquals(userTemplate, actual.getUserTemplate());
-
-        TaskExecTO execution = execSyncTask(actual.getId(), 20, false);
+        TaskExecTO execution = execSyncTask(11L, 20, false);
 
         // 1. verify execution status
         final String status = execution.getStatus();
@@ -774,7 +740,7 @@ public class TaskTestITCase extends Abst
         // wait for sync completion (executions incremented)
         do {
             try {
-                Thread.sleep(2000);
+                Thread.sleep(1000);
             } catch (InterruptedException e) {
             }
 
@@ -788,7 +754,29 @@ public class TaskTestITCase extends Abst
         if (i == maxit) {
             fail("Timeout when executing task " + taskId);
         }
-        return taskTO.getExecutions().get(0);
+        return taskTO.getExecutions().get(taskTO.getExecutions().size() - 1);
+    }
+
+    private Map<Long, TaskExecTO> execSyncTasks(
+            final Set<Long> taskIds, final int maxWaitSeconds, final boolean dryRun) throws Exception {
+
+        final ExecutorService service = Executors.newFixedThreadPool(taskIds.size());
+        final List<Future<TaskExecTO>> futures = new ArrayList<Future<TaskExecTO>>();
+
+        for (final Long id : taskIds) {
+            futures.add(service.submit(new ThreadExec(this, id, maxWaitSeconds, dryRun)));
+        }
+
+        final Map<Long, TaskExecTO> res = new HashMap<Long, TaskExecTO>();
+
+        for (Future<TaskExecTO> f : futures) {
+            TaskExecTO taskExecTO = f.get(100, TimeUnit.SECONDS);
+            res.put(taskExecTO.getTask(), taskExecTO);
+        }
+
+        service.shutdownNow();
+
+        return res;
     }
 
     @Test
@@ -977,158 +965,104 @@ public class TaskTestITCase extends Abst
     }
 
     @Test
-    public void pushUnmatchingUsers() {
-        // ------------------------------------------
-        // Matching --> Assign --> dryRuyn
-        // ------------------------------------------
-        UserTO userTO = userService.read(3L);
-        assertEquals("Vivaldi", userTO.getAttrMap().get("surname").getValues().get(0));
-        assertFalse(userTO.getResources().contains(RESOURCE_NAME_TESTDB2));
+    public void pushMatchingUnmatchingRoles() {
+        assertFalse(roleService.read(3L).getResources().contains(RESOURCE_NAME_LDAP));
 
-        PushTaskTO task = taskService.<PushTaskTO>read(13L);
-        assertNotNull(task);
-        task.setUserFilter(SyncopeClient.getUserSearchConditionBuilder().is("surname").equalTo("Vivaldi").query());
-        taskService.update(13L, task);
+        execSyncTask(23L, 50, false);
 
-        assertEquals(task.getUserFilter(), taskService.<PushTaskTO>read(13L).getUserFilter());
+        assertNotNull(resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.ROLE, 3L));
+        assertTrue(roleService.read(3L).getResources().contains(RESOURCE_NAME_LDAP));
 
-        execSyncTask(task.getId(), 50, true);
+        execSyncTask(23L, 50, false);
 
-        final JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
-        assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='vivaldi'").size());
+        assertNotNull(resourceService.getConnectorObject(RESOURCE_NAME_LDAP, SubjectType.ROLE, 3L));
+        assertFalse(roleService.read(3L).getResources().contains(RESOURCE_NAME_LDAP));
+    }
 
+    @Test
+    public void pushUnmatchingUsers() throws Exception {
+        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
         assertFalse(userService.read(3L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read(4L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertTrue(userService.read(5L).getResources().contains(RESOURCE_NAME_TESTDB2));
+
+        final JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
+        assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='puccini'").size());
 
-        jdbcTemplate.execute("DELETE FROM test2 WHERE ID='vivaldi'");
+        // ------------------------------------------
+        // Unmatching --> Assign --> dryRuyn
+        // ------------------------------------------
+        execSyncTask(13L, 50, true);
+        assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='vivaldi'").size());
+        assertFalse(userService.read(3L).getResources().contains(RESOURCE_NAME_TESTDB2));
         // ------------------------------------------
 
+        final Set<Long> pushTaskIds = new HashSet<Long>();
+        pushTaskIds.add(13L);
+        pushTaskIds.add(14L);
+        pushTaskIds.add(15L);
+        pushTaskIds.add(16L);
+        execSyncTasks(pushTaskIds, 50, false);
+
         // ------------------------------------------
-        // Matching --> Assign
+        // Unatching --> Ignore
+        // ------------------------------------------
+        assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
+        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
         // ------------------------------------------
-        execSyncTask(task.getId(), 50, false);
 
+        // ------------------------------------------
+        // Unmatching --> Assign
+        // ------------------------------------------
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='vivaldi'").size());
-        assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID<>'vivaldi'").size());
-
         assertTrue(userService.read(3L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        assertEquals("vivaldi",
-                jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "vivaldi"));
-
         jdbcTemplate.execute("DELETE FROM test2 WHERE ID='vivaldi'");
         // ------------------------------------------
 
         // ------------------------------------------
-        // Matching --> Provision
+        // Unmatching --> Provision
         // ------------------------------------------
-        assertEquals("Bellini", userService.read(4L).getAttrMap().get("surname").getValues().get(0));
-
-        task.setUserFilter(SyncopeClient.getUserSearchConditionBuilder().is("surname").equalTo("Bellini").query());
-        task.setUnmatchigRule(UnmatchingRule.PROVISION);
-        taskService.update(13L, task);
-        assertEquals(task.getUserFilter(), taskService.<PushTaskTO>read(13L).getUserFilter());
-
-        execSyncTask(task.getId(), 50, false);
-
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='bellini'").size());
-        assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID<>'bellini'").size());
-
         assertFalse(userService.read(4L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        assertEquals("bellini",
-                jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "bellini"));
-
         jdbcTemplate.execute("DELETE FROM test2 WHERE ID='bellini'");
         // ------------------------------------------
 
         // ------------------------------------------
-        // Matching --> Unlink
+        // Unmatching --> Unlink
         // ------------------------------------------
-        userTO = userService.read(5L);
-        assertEquals("Puccini", userTO.getAttrMap().get("surname").getValues().get(0));
-        assertFalse(userTO.getResources().contains(RESOURCE_NAME_TESTDB2));
-
-        task.setUserFilter(SyncopeClient.getUserSearchConditionBuilder().is("surname").equalTo("Puccini").query());
-        task.setUnmatchigRule(UnmatchingRule.UNLINK);
-        taskService.update(13L, task);
-        assertEquals(task.getUserFilter(), taskService.<PushTaskTO>read(13L).getUserFilter());
-
-        execSyncTask(task.getId(), 50, false);
-
         assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='puccini'").size());
-
         assertFalse(userService.read(5L).getResources().contains(RESOURCE_NAME_TESTDB2));
         // ------------------------------------------
-
-        // ------------------------------------------
-        // Matching --> Ignore
-        // ------------------------------------------
-        userTO = userService.read(5L);
-        assertEquals("Puccini", userTO.getAttrMap().get("surname").getValues().get(0));
-        assertFalse(userTO.getResources().contains(RESOURCE_NAME_TESTDB2));
-
-        task.setUserFilter(SyncopeClient.getUserSearchConditionBuilder().is("surname").equalTo("Rossini").query());
-        task.setUnmatchigRule(UnmatchingRule.IGNORE);
-        taskService.update(13L, task);
-        assertEquals(task.getUserFilter(), taskService.<PushTaskTO>read(13L).getUserFilter());
-
-        execSyncTask(task.getId(), 50, false);
-
-        assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='rossini'").size());
-
-        assertFalse(userService.read(1L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        // ------------------------------------------
     }
 
     @Test
-    public void pushMatchingUser() {
-        // ------------------------------------------
-        // Assign Verdi to test2 --> dryRun
-        // ------------------------------------------
-        UserTO userTO = userService.read(2L);
-        assertEquals("Verdi", userTO.getAttrMap().get("surname").getValues().get(0));
-        assertFalse(userTO.getResources().contains(RESOURCE_NAME_TESTDB2));
-
-        PushTaskTO task = taskService.<PushTaskTO>read(13L);
-        assertNotNull(task);
-
-        task.setUserFilter(SyncopeClient.getUserSearchConditionBuilder().is("surname").equalTo("Verdi").query());
-        task.setUnmatchigRule(UnmatchingRule.ASSIGN);
-        taskService.update(13L, task);
-
-        assertEquals(UnmatchingRule.ASSIGN, taskService.<PushTaskTO>read(13L).getUnmatchigRule());
-
-        execSyncTask(task.getId(), 50, true);
-
+    public void pushMatchingUser() throws Exception {
+        assertTrue(userService.read(1L).getResources().contains(RESOURCE_NAME_TESTDB2));
         assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
 
-        JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
-        assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
-        // ------------------------------------------
+        final JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
+        assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
+        assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='rossini'").size());
 
         // ------------------------------------------
-        // Assign Verdi to test2
+        // Matching --> Deprovision --> dryRuyn
+        // ------------------------------------------
+        execSyncTask(19L, 50, true);
+        assertTrue(userService.read(1L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='rossini'").size());
         // ------------------------------------------
-        userTO = userService.read(2L);
-        assertEquals("Verdi", userTO.getAttrMap().get("surname").getValues().get(0));
-        assertFalse(userTO.getResources().contains(RESOURCE_NAME_TESTDB2));
 
-        execSyncTask(task.getId(), 50, false);
+        final Set<Long> pushTaskIds = new HashSet<Long>();
+        pushTaskIds.add(18L);
+        pushTaskIds.add(19L);
+        pushTaskIds.add(16L);
 
-        assertTrue(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        assertEquals("verdi", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "verdi"));
-        // ------------------------------------------
+        execSyncTasks(pushTaskIds, 50, false);
 
         // ------------------------------------------
-        // Matching --> Deprovision
+        // Matching --> Deprovision && Ignore
         // ------------------------------------------
-        assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
-
-        task.setMatchigRule(MatchingRule.DEPROVISION);
-        taskService.update(13L, task);
-        assertEquals(MatchingRule.DEPROVISION, taskService.<PushTaskTO>read(13L).getMatchigRule());
-
-        execSyncTask(task.getId(), 50, false);
-
-        assertTrue(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
         // DELETE Capability not available ....
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
         // ------------------------------------------
@@ -1136,73 +1070,53 @@ public class TaskTestITCase extends Abst
         // ------------------------------------------
         // Matching --> Unassign
         // ------------------------------------------
-        task.setMatchigRule(MatchingRule.UNASSIGN);
-        taskService.update(13L, task);
-        assertEquals(MatchingRule.UNASSIGN, taskService.<PushTaskTO>read(13L).getMatchigRule());
-
-        execSyncTask(task.getId(), 50, false);
-
-        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+        assertFalse(userService.read(1L).getResources().contains(RESOURCE_NAME_TESTDB2));
         // DELETE Capability not available ....
-        assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
+        assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='rossini'").size());
         // ------------------------------------------
 
         // ------------------------------------------
         // Matching --> Link
         // ------------------------------------------
-        task.setMatchigRule(MatchingRule.LINK);
-        taskService.update(13L, task);
-        assertEquals(MatchingRule.LINK, taskService.<PushTaskTO>read(13L).getMatchigRule());
-
-        execSyncTask(task.getId(), 50, false);
-
+        execSyncTask(20L, 50, false);
         assertTrue(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
         // ------------------------------------------
 
-        // ------------------------------------------
-        // Matching --> Unlink
-        // ------------------------------------------
-        task.setMatchigRule(MatchingRule.UNLINK);
-        taskService.update(13L, task);
-        assertEquals(MatchingRule.UNLINK, taskService.<PushTaskTO>read(13L).getMatchigRule());
-
-        execSyncTask(task.getId(), 50, false);
+        pushTaskIds.clear();
+        pushTaskIds.add(21L);
+        pushTaskIds.add(22L);
 
-        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        assertEquals("verdi", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "verdi"));
-        // ------------------------------------------
+        execSyncTasks(pushTaskIds, 50, false);
 
         // ------------------------------------------
-        // Matching --> Update
+        // Matching --> Unlink && Update
         // ------------------------------------------
-        task.setMatchigRule(MatchingRule.UPDATE);
-        taskService.update(13L, task);
-        assertEquals(MatchingRule.UPDATE, taskService.<PushTaskTO>read(13L).getMatchigRule());
-
-        execSyncTask(task.getId(), 50, false);
-
         assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
         assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
         // ------------------------------------------
+    }
 
-        // ------------------------------------------
-        // Matching --> Ignore
-        // ------------------------------------------
-        task.setMatchigRule(MatchingRule.IGNORE);
-        taskService.update(13L, task);
-        assertEquals(MatchingRule.IGNORE, taskService.<PushTaskTO>read(13L).getMatchigRule());
+    private static class ThreadExec implements Callable<TaskExecTO> {
 
-        execSyncTask(task.getId(), 50, false);
+        private final TaskTestITCase test;
 
-        assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
-        assertEquals("verdi", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "verdi"));
-        // ------------------------------------------
+        private final Long taskId;
 
-        task.setMatchigRule(MatchingRule.UPDATE);
-        task.setUserFilter(null);
-        taskService.update(13L, task);
+        private final int maxWaitSeconds;
 
-        jdbcTemplate.execute("DELETE FROM test2 WHERE ID='verdi'");
+        private final boolean dryRun;
+
+        public ThreadExec(TaskTestITCase test, Long taskId, int maxWaitSeconds, boolean dryRun) {
+            this.test = test;
+            this.taskId = taskId;
+            this.maxWaitSeconds = maxWaitSeconds;
+            this.dryRun = dryRun;
+        }
+
+        @Override
+        public TaskExecTO call() throws Exception {
+            return test.execSyncTask(taskId, maxWaitSeconds, dryRun);
+        }
     }
 }