Author: fmartelli Date: Wed Jul 2 08:46:38 2014 New Revision: 1607297 URL: http://svn.apache.org/r1607297 Log: [SYNCOPE-392, SYNCOPE-471] integration test improvement + some fixes around sync matching/unmatching rules
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.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/DBPasswordSyncActions.java syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPPasswordSyncActions.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/java/org/apache/syncope/core/sync/TestSyncActions.java syncope/trunk/core/src/test/resources/content.xml Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java?rev=1607297&r1=1607296&r2=1607297&view=diff ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java (original) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java Wed Jul 2 08:46:38 2014 @@ -34,7 +34,7 @@ public class PushPolicy extends Policy { super(); this.type = global - ? PolicyType.GLOBAL_SYNC - : PolicyType.SYNC; + ? PolicyType.GLOBAL_PUSH + : PolicyType.PUSH; } } Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java?rev=1607297&r1=1607296&r2=1607297&view=diff ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java (original) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java Wed Jul 2 08:46:38 2014 @@ -35,7 +35,7 @@ public abstract class DefaultSyncActions } @Override - public <T extends AbstractAttributableTO> SyncDelta beforeCreate( + public <T extends AbstractAttributableTO> SyncDelta beforeProvision( final SyncProfile<?, ?> profile, final SyncDelta delta, final T subject) throws JobExecutionException { Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.java?rev=1607297&r1=1607296&r2=1607297&view=diff ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.java (original) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.java Wed Jul 2 08:46:38 2014 @@ -40,7 +40,7 @@ public interface SyncActions extends Abs * @return synchronization information used for user status evaluation and to be passed to the 'after' method. * @throws JobExecutionException in case of generic failure */ - <T extends AbstractAttributableTO> SyncDelta beforeCreate( + <T extends AbstractAttributableTO> SyncDelta beforeProvision( final SyncProfile<?, ?> profile, final SyncDelta delta, final T subject) throws JobExecutionException; @@ -162,7 +162,7 @@ public interface SyncActions extends Abs * Action to be executed after each local user / role synchronization. * * @param profile profile of the synchronization being executed. - * @param delta retrieved synchronization information (may be modified by 'beforeCreate/beforeUpdate/beforeDelete') + * @param delta retrieved synchronization information (may be modified by 'beforeProvision/beforeUpdate/beforeDelete') * @param subject synchronized local user / role * @param result global synchronization results at the current synchronization step * @throws JobExecutionException in case of generic failure 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=1607297&r1=1607296&r2=1607297&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 Wed Jul 2 08:46:38 2014 @@ -107,8 +107,7 @@ public abstract class AbstractSubjectSyn } } - protected List<SyncResult> assign( - final SyncDelta delta, final AttributableUtil attrUtil, final boolean dryRun) + protected List<SyncResult> assign(final SyncDelta delta, final AttributableUtil attrUtil) throws JobExecutionException { final AbstractSubjectTO subjectTO = @@ -116,30 +115,37 @@ public abstract class AbstractSubjectSyn subjectTO.getResources().add(profile.getSyncTask().getResource().getName()); - SyncDelta _delta = delta; - for (SyncActions action : profile.getActions()) { - _delta = action.beforeAssign(this.getProfile(), _delta, subjectTO); + if (!profile.getSyncTask().isPerformCreate()) { + LOG.debug("SyncTask not configured for create"); + return Collections.<SyncResult>emptyList(); } - return create(subjectTO, _delta, attrUtil, "assign", dryRun); - } + final SyncResult result = new SyncResult(); + result.setOperation(ResourceOperation.CREATE); + result.setSubjectType(attrUtil.getType()); + result.setStatus(SyncResult.Status.SUCCESS); - protected List<SyncResult> create( - final SyncDelta delta, final AttributableUtil attrUtil, final boolean dryRun) - throws JobExecutionException { + // Attributable transformation (if configured) + AbstractSubjectTO transformed = attrTransformer.transform(subjectTO); + LOG.debug("Transformed: {}", transformed); - final AbstractSubjectTO subjectTO = - connObjectUtil.getSubjectTO(delta.getObject(), profile.getSyncTask(), attrUtil); + result.setName(getName(transformed)); + + if (profile.isDryRun()) { + result.setId(0L); + } else { + SyncDelta _delta = delta; + for (SyncActions action : profile.getActions()) { + _delta = action.beforeAssign(this.getProfile(), _delta, transformed); + } + + create(transformed, _delta, attrUtil, "assign", result); + } - return create(subjectTO, delta, attrUtil, "provision", dryRun); + return Collections.singletonList(result); } - private List<SyncResult> create( - final AbstractSubjectTO subjectTO, - final SyncDelta delta, - final AttributableUtil attrUtil, - final String operation, - final boolean dryRun) + protected List<SyncResult> create(final SyncDelta delta, final AttributableUtil attrUtil) throws JobExecutionException { if (!profile.getSyncTask().isPerformCreate()) { @@ -147,59 +153,72 @@ public abstract class AbstractSubjectSyn return Collections.<SyncResult>emptyList(); } + final AbstractSubjectTO subjectTO = + connObjectUtil.getSubjectTO(delta.getObject(), profile.getSyncTask(), attrUtil); + + // Attributable transformation (if configured) + AbstractSubjectTO transformed = attrTransformer.transform(subjectTO); + LOG.debug("Transformed: {}", transformed); + final SyncResult result = new SyncResult(); result.setOperation(ResourceOperation.CREATE); result.setSubjectType(attrUtil.getType()); result.setStatus(SyncResult.Status.SUCCESS); - // Attributable transformation (if configured) - AbstractSubjectTO actual = attrTransformer.transform(subjectTO); - LOG.debug("Transformed: {}", actual); - - result.setName(getName(actual)); + result.setName(getName(transformed)); - if (dryRun) { + if (profile.isDryRun()) { result.setId(0L); } else { SyncDelta _delta = delta; for (SyncActions action : profile.getActions()) { - _delta = action.beforeCreate(this.getProfile(), _delta, subjectTO); + _delta = action.beforeProvision(this.getProfile(), _delta, transformed); } - Object output; - Result resultStatus; + create(transformed, _delta, attrUtil, "provision", result); + } - try { - actual = create(actual, _delta, result); - result.setName(getName(actual)); - output = actual; - resultStatus = Result.SUCCESS; - } catch (PropagationException e) { - // A propagation failure doesn't imply a synchronization failure. - // The propagation exception status will be reported into the propagation task execution. - LOG.error("Could not propagate {} {}", attrUtil.getType(), _delta.getUid().getUidValue(), e); - output = e; - resultStatus = Result.FAILURE; - } catch (Exception e) { - result.setStatus(SyncResult.Status.FAILURE); - result.setMessage(ExceptionUtils.getRootCauseMessage(e)); - LOG.error("Could not create {} {} ", attrUtil.getType(), _delta.getUid().getUidValue(), e); - output = e; - resultStatus = Result.FAILURE; - } + return Collections.<SyncResult>singletonList(result); + } + + private void create( + final AbstractSubjectTO subjectTO, + final SyncDelta delta, + final AttributableUtil attrUtil, + final String operation, + final SyncResult result) + throws JobExecutionException { + + Object output; + Result resultStatus; + + try { + AbstractSubjectTO actual = create(subjectTO, delta, result); + result.setName(getName(actual)); + output = actual; + resultStatus = Result.SUCCESS; for (SyncActions action : profile.getActions()) { - action.after(this.getProfile(), _delta, actual, result); + action.after(this.getProfile(), delta, actual, result); } - - audit(operation, resultStatus, null, output, _delta); + } catch (PropagationException e) { + // A propagation failure doesn't imply a synchronization failure. + // The propagation exception status will be reported into the propagation task execution. + LOG.error("Could not propagate {} {}", attrUtil.getType(), delta.getUid().getUidValue(), e); + output = e; + resultStatus = Result.FAILURE; + } catch (Exception e) { + result.setStatus(SyncResult.Status.FAILURE); + result.setMessage(ExceptionUtils.getRootCauseMessage(e)); + LOG.error("Could not create {} {} ", attrUtil.getType(), delta.getUid().getUidValue(), e); + output = e; + resultStatus = Result.FAILURE; } - return Collections.singletonList(result); + audit(operation, resultStatus, null, output, delta); } - protected List<SyncResult> update(SyncDelta delta, final List<Long> subjects, final AttributableUtil attrUtil, - final boolean dryRun) + protected List<SyncResult> update(SyncDelta delta, final List<Long> subjects, final AttributableUtil attrUtil) throws JobExecutionException { if (!profile.getSyncTask().isPerformUpdate()) { @@ -233,7 +252,7 @@ public abstract class AbstractSubjectSyn result.setName(getName(before)); } - if (!dryRun) { + if (!profile.isDryRun()) { if (before == null) { resultStatus = Result.FAILURE; output = null; @@ -284,8 +303,7 @@ public abstract class AbstractSubjectSyn SyncDelta delta, final List<Long> subjects, final AttributableUtil attrUtil, - final boolean unlink, - final boolean dryRun) + final boolean unlink) throws JobExecutionException { if (!profile.getSyncTask().isPerformUpdate()) { @@ -316,7 +334,7 @@ public abstract class AbstractSubjectSyn result.setMessage(String.format("Subject '%s(%d)' not found", attrUtil.getType().name(), id)); } - if (!dryRun) { + if (!profile.isDryRun()) { if (before == null) { resultStatus = Result.FAILURE; output = null; @@ -369,8 +387,7 @@ public abstract class AbstractSubjectSyn SyncDelta delta, final List<Long> subjects, final AttributableUtil attrUtil, - final boolean unlink, - final boolean dryRun) + final boolean unlink) throws JobExecutionException { if (!profile.getSyncTask().isPerformUpdate()) { @@ -401,7 +418,7 @@ public abstract class AbstractSubjectSyn result.setMessage(String.format("Subject '%s(%d)' not found", attrUtil.getType().name(), id)); } - if (!dryRun) { + if (!profile.isDryRun()) { if (before == null) { resultStatus = Result.FAILURE; output = null; @@ -449,8 +466,7 @@ public abstract class AbstractSubjectSyn return updResults; } - protected List<SyncResult> delete(SyncDelta delta, final List<Long> subjects, final AttributableUtil attrUtil, - final boolean dryRun) + protected List<SyncResult> delete(SyncDelta delta, final List<Long> subjects, final AttributableUtil attrUtil) throws JobExecutionException { if (!profile.getSyncTask().isPerformDelete()) { @@ -478,7 +494,7 @@ public abstract class AbstractSubjectSyn result.setSubjectType(attrUtil.getType()); result.setStatus(SyncResult.Status.SUCCESS); - if (!dryRun) { + if (!profile.isDryRun()) { for (SyncActions action : profile.getActions()) { delta = action.beforeDelete(this.getProfile(), delta, before); } @@ -559,10 +575,10 @@ public abstract class AbstractSubjectSyn if (subjectIds.isEmpty()) { switch (profile.getSyncTask().getUnmatchingRule()) { case ASSIGN: - profile.getResults().addAll(assign(delta, attrUtil, profile.isDryRun())); + profile.getResults().addAll(assign(delta, attrUtil)); break; case PROVISION: - profile.getResults().addAll(create(delta, attrUtil, profile.isDryRun())); + profile.getResults().addAll(create(delta, attrUtil)); break; default: // do nothing @@ -570,21 +586,19 @@ public abstract class AbstractSubjectSyn } else { switch (profile.getSyncTask().getMatchingRule()) { case UPDATE: - profile.getResults().addAll(update(delta, subjectIds, attrUtil, profile.isDryRun())); + profile.getResults().addAll(update(delta, subjectIds, attrUtil)); break; case DEPROVISION: - profile.getResults().addAll( - deprovision(delta, subjectIds, attrUtil, false, profile.isDryRun())); + profile.getResults().addAll(deprovision(delta, subjectIds, attrUtil, false)); break; case UNASSIGN: - profile.getResults().addAll( - deprovision(delta, subjectIds, attrUtil, true, profile.isDryRun())); + profile.getResults().addAll(deprovision(delta, subjectIds, attrUtil, true)); break; case LINK: - profile.getResults().addAll(link(delta, subjectIds, attrUtil, false, profile.isDryRun())); + profile.getResults().addAll(link(delta, subjectIds, attrUtil, false)); break; case UNLINK: - profile.getResults().addAll(link(delta, subjectIds, attrUtil, true, profile.isDryRun())); + profile.getResults().addAll(link(delta, subjectIds, attrUtil, true)); break; default: // do nothing @@ -594,7 +608,7 @@ public abstract class AbstractSubjectSyn if (subjectIds.isEmpty()) { LOG.debug("No match found for deletion"); } else { - profile.getResults().addAll(delete(delta, subjectIds, attrUtil, profile.isDryRun())); + profile.getResults().addAll(delete(delta, subjectIds, attrUtil)); } } } catch (IllegalStateException e) { Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/DBPasswordSyncActions.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/DBPasswordSyncActions.java?rev=1607297&r1=1607296&r2=1607297&view=diff ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/DBPasswordSyncActions.java (original) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/DBPasswordSyncActions.java Wed Jul 2 08:46:38 2014 @@ -61,7 +61,7 @@ public class DBPasswordSyncActions exten @Transactional(readOnly = true) @Override - public <T extends AbstractAttributableTO> SyncDelta beforeCreate( + public <T extends AbstractAttributableTO> SyncDelta beforeProvision( final SyncProfile<?, ?> profile, final SyncDelta delta, final T subject) throws JobExecutionException { Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java?rev=1607297&r1=1607296&r2=1607297&view=diff ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java (original) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java Wed Jul 2 08:46:38 2014 @@ -119,7 +119,7 @@ public class LDAPMembershipSyncActions e /** * Keep track of members of the role being updated <b>before</b> actual update takes place. This is not needed on - * <ul> <li>beforeCreate() - because the synchronizing role does not exist yet on Syncope</li> <li>beforeDelete() - + * <ul> <li>beforeProvision() - because the synchronizing role does not exist yet on Syncope</li> <li>beforeDelete() - * because role delete cascades as membership removal for all users involved</li> </ul> * * {@inheritDoc} @@ -298,7 +298,6 @@ public class LDAPMembershipSyncActions e final SyncDelta delta, final T subject, final SyncResult result) throws JobExecutionException { - if (!(profile.getSyncTask() instanceof SyncTask)) { return; } Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPPasswordSyncActions.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPPasswordSyncActions.java?rev=1607297&r1=1607296&r2=1607297&view=diff ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPPasswordSyncActions.java (original) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPPasswordSyncActions.java Wed Jul 2 08:46:38 2014 @@ -54,7 +54,7 @@ public class LDAPPasswordSyncActions ext @Transactional(readOnly = true) @Override - public <T extends AbstractAttributableTO> SyncDelta beforeCreate( + public <T extends AbstractAttributableTO> SyncDelta beforeProvision( final SyncProfile<?, ?> profile, final SyncDelta delta, final T subject) throws JobExecutionException { 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=1607297&r1=1607296&r2=1607297&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 Wed Jul 2 08:46:38 2014 @@ -67,7 +67,7 @@ public class TaskTest extends AbstractDA assertEquals(4, taskDAO.findAll(PropagationTask.class).size()); assertEquals(1, taskDAO.findAll(NotificationTask.class).size()); assertEquals(1, taskDAO.findAll(SchedTask.class).size()); - assertEquals(6, taskDAO.findAll(SyncTask.class).size()); + assertEquals(7, taskDAO.findAll(SyncTask.class).size()); assertEquals(11, taskDAO.findAll(PushTask.class).size()); } 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=1607297&r1=1607296&r2=1607297&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 Wed Jul 2 08:46:38 2014 @@ -68,7 +68,6 @@ import org.apache.syncope.common.types.T 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; import org.apache.syncope.core.sync.TestSyncRule; import org.apache.syncope.core.sync.impl.SyncJob; import org.apache.syncope.core.workflow.ActivitiDetector; @@ -325,33 +324,6 @@ public class TaskTestITCase extends Abst int usersPre = userService.list(1, 1).getTotalCount(); assertNotNull(usersPre); - // Update sync task - SyncTaskTO task = taskService.read(SYNC_TASK_ID); - assertNotNull(task); - - // add custom SyncJob actions - task.getActionsClassNames().add(TestSyncActions.class.getName()); - - // add user template - UserTO template = new UserTO(); - template.getAttrs().add(attributeTO("type", - "email == 'te...@syncope.apache.org'? 'TYPE_8': 'TYPE_OTHER'")); - template.getDerAttrs().add(attributeTO("cn", null)); - template.getResources().add(RESOURCE_NAME_TESTDB); - - MembershipTO membershipTO = new MembershipTO(); - membershipTO.setRoleId(8L); - membershipTO.getAttrs().add(attributeTO("subscriptionDate", "'2009-08-18T16:33:12.203+0200'")); - template.getMemberships().add(membershipTO); - - task.setUserTemplate(template); - - taskService.update(task.getId(), task); - SyncTaskTO actual = taskService.read(task.getId()); - assertNotNull(actual); - assertEquals(task.getId(), actual.getId()); - assertEquals(TestSyncActions.class.getName(), actual.getActionsClassNames().get(0)); - execSyncTask(SYNC_TASK_ID, 50, false); // after execution of the sync task the user data should be synced from @@ -793,32 +765,7 @@ public class TaskTestITCase extends Abst assertEquals(1, userTO.getPropagationStatusTOs().size()); assertTrue(userTO.getPropagationStatusTOs().get(0).getStatus().isSuccessful()); - // update sync task - SyncTaskTO task = taskService.read(SYNC_TASK_ID); - assertNotNull(task); - - // add user template - AttributeTO newAttrTO = new AttributeTO(); - newAttrTO.setSchema("firstname"); - newAttrTO.getValues().add(""); - - UserTO template = new UserTO(); - template.getAttrs().add(newAttrTO); - template.getAttrs().add(attributeTO("userId", "'test'")); - template.getAttrs().add(attributeTO("fullname", "'test'")); - template.getAttrs().add(attributeTO("surname", "'test'")); - template.getResources().add(RESOURCE_NAME_TESTDB); - - task.setUserTemplate(template); - - taskService.update(task.getId(), task); - SyncTaskTO actual = taskService.read(task.getId()); - assertNotNull(actual); - assertEquals(task.getId(), actual.getId()); - - TaskExecTO taskExecTO = execSyncTask(SYNC_TASK_ID, 50, false); - assertNotNull(actual); - assertEquals(task.getId(), actual.getId()); + TaskExecTO taskExecTO = execSyncTask(24L, 50, false); assertNotNull(taskExecTO.getStatus()); assertTrue(PropagationTaskExecStatus.valueOf(taskExecTO.getStatus()).isSuccessful()); Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/sync/TestSyncActions.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/sync/TestSyncActions.java?rev=1607297&r1=1607296&r2=1607297&view=diff ============================================================================== --- syncope/trunk/core/src/test/java/org/apache/syncope/core/sync/TestSyncActions.java (original) +++ syncope/trunk/core/src/test/java/org/apache/syncope/core/sync/TestSyncActions.java Wed Jul 2 08:46:38 2014 @@ -30,7 +30,7 @@ public class TestSyncActions extends Def private int counter = 0; @Override - public <T extends AbstractAttributableTO> SyncDelta beforeCreate( + public <T extends AbstractAttributableTO> SyncDelta beforeProvision( final SyncProfile<?, ?> profile, final SyncDelta delta, final T subject) throws JobExecutionException { Modified: syncope/trunk/core/src/test/resources/content.xml URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/content.xml?rev=1607297&r1=1607296&r2=1607297&view=diff ============================================================================== --- syncope/trunk/core/src/test/resources/content.xml (original) +++ syncope/trunk/core/src/test/resources/content.xml Wed Jul 2 08:46:38 2014 @@ -872,7 +872,10 @@ under the License. xmlAttributes="%3Cset%3E%0A++%3Corg.identityconnectors.framework.common.objects.Name%3E%0A++++%3Cname%3E__NAME__%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Cstring%3EuserId%3C%2Fstring%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Name%3E%0A++%3Corg.identityconnectors.framework.common.objects.Attribute%3E%0A++++%3Cname%3E__PASSWORD__%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Corg.identityconnectors.common.security.GuardedString%3E%0A++++++++++%3C__readOnly%3Efalse%3C%2F__readOnly%3E%0A++++++++++%3C__disposed%3Efalse%3C%2F__disposed%3E%0A++++++++++%3C__en cryptedBytes%3EQTOgwEhIHqtAI%2FYlgDhYc37esEF8VLDMU2IY1ciltrg%3D%3C%2F__encryptedBytes%3E%0A++++++++++%3C__base64SHA1Hash%3EW5%2FrwtdCnI8gAnIUhKcahMEnMMc%3D%3C%2F__base64SHA1Hash%3E%0A++++++++%3C%2Forg.identityconnectors.common.security.GuardedString%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Attribute%3E%0A++%3Corg.identityconnectors.framework.common.objects.Attribute%3E%0A++++%3Cname%3Etype%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Cstring%3Etype%3C%2Fstring%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Attribute%3E%0A%3C%2Fset%3E"/> <Task DTYPE="SyncTask" id="4" name="CSV Task" resource_name="resource-csv" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" fullReconciliation="0" - jobClassName="org.apache.syncope.core.sync.impl.SyncJob"/> + jobClassName="org.apache.syncope.core.sync.impl.SyncJob" + userTemplate="%3Corg.apache.syncope.common.to.UserTO%3E%0A++%3Cattrs%3E%0A++++%3Corg.apache.syncope.common.to.AttributeTO%3E%0A++++++%3Cschema%3Etype%3C%2Fschema%3E%0A++++++%3Cvalues%3E%0A++++++++%3Cstring%3Eemail+%3D%3D+%26apos%3Btest8%40syncope.apache.org%26apos%3B%3F+%26apos%3BTYPE_8%26apos%3B%3A+%26apos%3BTYPE_OTHER%26apos%3B%3C%2Fstring%3E%0A++++++%3C%2Fvalues%3E%0A++++++%3Creadonly%3Efalse%3C%2Freadonly%3E%0A++++%3C%2Forg.apache.syncope.common.to.AttributeTO%3E%0A++%3C%2Fattrs%3E%0A++%3Cid%3E0%3C%2Fid%3E%0A++%3CderAttrs%3E%0A++++%3Corg.apache.syncope.common.to.AttributeTO%3E%0A++++++%3Cschema%3Ecn%3C%2Fschema%3E%0A++++++%3Cvalues%3E%0A++++++++%3Cnull%2F%3E%0A++++++%3C%2Fvalues%3E%0A++++++%3Creadonly%3Efalse%3C%2Freadonly%3E%0A++++%3C%2Forg.apache.syncope.common.to.AttributeTO%3E%0A++%3C%2FderAttrs%3E%0A++%3CvirAttrs%2F%3E%0A++%3Cresources%3E%0A++++%3Cstring%3Eresource-testdb%3C%2Fstring%3E%0A++%3C%2Fresources%3E%0A++%3CpropagationStatusTOs%2F%3E%0A++%3Cmemberships%3E%0 A++++%3Corg.apache.syncope.common.to.MembershipTO%3E%0A++++++%3Cattrs%3E%0A++++++++%3Corg.apache.syncope.common.to.AttributeTO%3E%0A++++++++++%3Cschema%3EsubscriptionDate%3C%2Fschema%3E%0A++++++++++%3Cvalues%3E%0A++++++++++++%3Cstring%3E%26apos%3B2009-08-18T16%3A33%3A12.203%2B0200%26apos%3B%3C%2Fstring%3E%0A++++++++++%3C%2Fvalues%3E%0A++++++++++%3Creadonly%3Efalse%3C%2Freadonly%3E%0A++++++++%3C%2Forg.apache.syncope.common.to.AttributeTO%3E%0A++++++%3C%2Fattrs%3E%0A++++++%3Cid%3E0%3C%2Fid%3E%0A++++++%3CderAttrs%2F%3E%0A++++++%3CvirAttrs%2F%3E%0A++++++%3CroleId%3E8%3C%2FroleId%3E%0A++++%3C%2Forg.apache.syncope.common.to.MembershipTO%3E%0A++%3C%2Fmemberships%3E%0A%3C%2Forg.apache.syncope.common.to.UserTO%3E" + roleTemplate="%3Corg.apache.syncope.common.to.RoleTO%3E%0A++%3Cattrs%2F%3E%0A++%3Cid%3E0%3C%2Fid%3E%0A++%3CderAttrs%2F%3E%0A++%3CvirAttrs%2F%3E%0A++%3Cresources%2F%3E%0A++%3CpropagationStatusTOs%2F%3E%0A++%3Cparent%3E0%3C%2Fparent%3E%0A++%3CinheritOwner%3Efalse%3C%2FinheritOwner%3E%0A++%3CinheritTemplates%3Efalse%3C%2FinheritTemplates%3E%0A++%3CinheritAttrs%3Efalse%3C%2FinheritAttrs%3E%0A++%3CinheritDerAttrs%3Efalse%3C%2FinheritDerAttrs%3E%0A++%3CinheritVirAttrs%3Efalse%3C%2FinheritVirAttrs%3E%0A++%3CinheritPasswordPolicy%3Efalse%3C%2FinheritPasswordPolicy%3E%0A++%3CinheritAccountPolicy%3Efalse%3C%2FinheritAccountPolicy%3E%0A++%3Centitlements%2F%3E%0A++%3CrAttrTemplates%2F%3E%0A++%3CrDerAttrTemplates%2F%3E%0A++%3CrVirAttrTemplates%2F%3E%0A++%3CmAttrTemplates%2F%3E%0A++%3CmDerAttrTemplates%2F%3E%0A++%3CmVirAttrTemplates%2F%3E%0A%3C%2Forg.apache.syncope.common.to.RoleTO%3E"/> + <SyncTask_actionsClassNames SyncTask_id="4" element="org.apache.syncope.core.sync.TestSyncActions"/> <Task DTYPE="SchedTask" id="5" name="SampleJob Task" jobClassName="org.apache.syncope.core.quartz.SampleJob" cronExpression="0 0 0 1 * ?"/> <Task DTYPE="PropagationTask" id="6" propagationMode="TWO_PHASES" propagationOperation="UPDATE" objectClassName="__ACCOUNT__" resource_name="ws-target-resource-nopropagation" subjectType="USER" subjectId="1" @@ -944,6 +947,11 @@ under the License. performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" jobClassName="org.apache.syncope.core.sync.impl.PushJob" unmatchingRule="ASSIGN" matchingRule="UNLINK" userFilter="username==_NO_ONE_" roleFilter="name==citizen"/> + <Task DTYPE="SyncTask" id="24" name="CSV Task 2" resource_name="resource-csv" + performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" fullReconciliation="0" + jobClassName="org.apache.syncope.core.sync.impl.SyncJob" + userTemplate="%3Corg.apache.syncope.common.to.UserTO%3E%0A++%3Cattrs%3E%0A++++%3Corg.apache.syncope.common.to.AttributeTO%3E%0A++++++%3Cschema%3Efirstname%3C%2Fschema%3E%0A++++++%3Cvalues%3E%0A++++++++%3Cstring%3E%3C%2Fstring%3E%0A++++++%3C%2Fvalues%3E%0A++++++%3Creadonly%3Efalse%3C%2Freadonly%3E%0A++++%3C%2Forg.apache.syncope.common.to.AttributeTO%3E%0A++++%3Corg.apache.syncope.common.to.AttributeTO%3E%0A++++++%3Cschema%3EuserId%3C%2Fschema%3E%0A++++++%3Cvalues%3E%0A++++++++%3Cstring%3E%26apos%3Btest%26apos%3B%3C%2Fstring%3E%0A++++++%3C%2Fvalues%3E%0A++++++%3Creadonly%3Efalse%3C%2Freadonly%3E%0A++++%3C%2Forg.apache.syncope.common.to.AttributeTO%3E%0A++++%3Corg.apache.syncope.common.to.AttributeTO%3E%0A++++++%3Cschema%3Efullname%3C%2Fschema%3E%0A++++++%3Cvalues%3E%0A++++++++%3Cstring%3E%26apos%3Btest%26apos%3B%3C%2Fstring%3E%0A++++++%3C%2Fvalues%3E%0A++++++%3Creadonly%3Efalse%3C%2Freadonly%3E%0A++++%3C%2Forg.apache.syncope.common.to.AttributeTO%3E%0A++++%3Corg.apache.syncope .common.to.AttributeTO%3E%0A++++++%3Cschema%3Esurname%3C%2Fschema%3E%0A++++++%3Cvalues%3E%0A++++++++%3Cstring%3E%26apos%3Btest%26apos%3B%3C%2Fstring%3E%0A++++++%3C%2Fvalues%3E%0A++++++%3Creadonly%3Efalse%3C%2Freadonly%3E%0A++++%3C%2Forg.apache.syncope.common.to.AttributeTO%3E%0A++%3C%2Fattrs%3E%0A++%3Cid%3E0%3C%2Fid%3E%0A++%3CderAttrs%2F%3E%0A++%3CvirAttrs%2F%3E%0A++%3Cresources%3E%0A++++%3Cstring%3Eresource-testdb%3C%2Fstring%3E%0A++%3C%2Fresources%3E%0A++%3CpropagationStatusTOs%2F%3E%0A++%3Cmemberships%2F%3E%0A%3C%2Forg.apache.syncope.common.to.UserTO%3E" + roleTemplate="%3Corg.apache.syncope.common.to.RoleTO%3E%0A++%3Cattrs%2F%3E%0A++%3Cid%3E0%3C%2Fid%3E%0A++%3CderAttrs%2F%3E%0A++%3CvirAttrs%2F%3E%0A++%3Cresources%2F%3E%0A++%3CpropagationStatusTOs%2F%3E%0A++%3Cparent%3E0%3C%2Fparent%3E%0A++%3CinheritOwner%3Efalse%3C%2FinheritOwner%3E%0A++%3CinheritTemplates%3Efalse%3C%2FinheritTemplates%3E%0A++%3CinheritAttrs%3Efalse%3C%2FinheritAttrs%3E%0A++%3CinheritDerAttrs%3Efalse%3C%2FinheritDerAttrs%3E%0A++%3CinheritVirAttrs%3Efalse%3C%2FinheritVirAttrs%3E%0A++%3CinheritPasswordPolicy%3Efalse%3C%2FinheritPasswordPolicy%3E%0A++%3CinheritAccountPolicy%3Efalse%3C%2FinheritAccountPolicy%3E%0A++%3Centitlements%2F%3E%0A++%3CrAttrTemplates%2F%3E%0A++%3CrDerAttrTemplates%2F%3E%0A++%3CrVirAttrTemplates%2F%3E%0A++%3CmAttrTemplates%2F%3E%0A++%3CmDerAttrTemplates%2F%3E%0A++%3CmVirAttrTemplates%2F%3E%0A%3C%2Forg.apache.syncope.common.to.RoleTO%3E"/> <Notification id="1" sender="t...@syncope.apache.org" subject="Test subject" template="test" selfAsRecipient="0" traceLevel="ALL" userAbout="fullname==*o*;fullname==*i*"