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/06/26 17:45:36 UTC
svn commit: r1605825 - in /syncope/trunk/core/src:
main/java/org/apache/syncope/core/sync/impl/
test/java/org/apache/syncope/core/rest/ test/resources/
Author: fmartelli
Date: Thu Jun 26 15:45:35 2014
New Revision: 1605825
URL: http://svn.apache.org/r1605825
Log:
[SYNCOPE-392, SYNCOPE-471] provided integration tests for push task with matching and unmatching rules
Modified:
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/RolePushResultHandler.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/UserPushResultHandler.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/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=1605825&r1=1605824&r2=1605825&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 Thu Jun 26 15:45:35 2014
@@ -26,7 +26,9 @@ import org.apache.syncope.common.to.Abst
import org.apache.syncope.common.types.AttributableType;
import org.apache.syncope.common.types.AuditElements;
import org.apache.syncope.common.types.AuditElements.Result;
+import org.apache.syncope.common.types.MatchingRule;
import org.apache.syncope.common.types.ResourceOperation;
+import org.apache.syncope.common.types.UnmatchingRule;
import org.apache.syncope.core.persistence.beans.AbstractSubject;
import org.apache.syncope.core.persistence.beans.PushTask;
import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
@@ -86,7 +88,7 @@ public abstract class AbstractSubjectPus
}
final AbstractSubject toBeHandled = getSubject(subject.getId());
-
+
final AttributableUtil attrUtil = AttributableUtil.getInstance(toBeHandled);
final SyncResult result = new SyncResult();
@@ -94,8 +96,8 @@ 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;
@@ -106,130 +108,156 @@ public abstract class AbstractSubjectPus
Object output = null;
Result resultStatus = null;
ConnectorObject beforeObj = null;
- Map.Entry<String, Set<Attribute>> values = null;
-
String operation = null;
- try {
- values = MappingUtil.prepareAttributes(
- attrUtil, // attributable util
- toBeHandled, // attributable (user or role)
- null, // current password if decode is possible; generate otherwise
- true, // propagate password (if required)
- null, // no vir attrs to be removed
- null, // propagate current vir attr values
- null, // no membership vir attrs to be removed
- null, // propagate current membership vir attr values
- enabled, // propagate status (suspended or not) if required
- profile.getSyncTask().getResource()); // target external resource
-
- // Try to read remote object (user / group) BEFORE any actual operation
- beforeObj = getRemoteObject(values.getKey());
+ Map.Entry<String, Set<Attribute>> values = MappingUtil.prepareAttributes(
+ attrUtil, // attributable util
+ toBeHandled, // attributable (user or role)
+ null, // current password if decode is possible; generate otherwise
+ true, // propagate password (if required)
+ null, // no vir attrs to be removed
+ null, // propagate current vir attr values
+ null, // no membership vir attrs to be removed
+ null, // propagate current membership vir attr values
+ enabled, // propagate status (suspended or not) if required
+ profile.getSyncTask().getResource()); // target external resource
+ // Try to read remote object (user / group) BEFORE any actual operation
+ beforeObj = getRemoteObject(values.getKey());
+
+ if (profile.isDryRun()) {
if (beforeObj == null) {
- operation = profile.getSyncTask().getUnmatchigRule().name().toLowerCase();
- switch (profile.getSyncTask().getUnmatchigRule()) {
- case ASSIGN:
- result.setOperation(ResourceOperation.CREATE);
- for (PushActions action : profile.getActions()) {
- action.beforeAssign(this.getProfile(), values, toBeHandled);
- }
- assign(toBeHandled, enabled, result);
- break;
- case PROVISION:
- result.setOperation(ResourceOperation.CREATE);
- for (PushActions action : profile.getActions()) {
- action.beforeProvision(this.getProfile(), values, toBeHandled);
- }
- provision(toBeHandled, enabled, result);
- break;
- case UNLINK:
- result.setOperation(ResourceOperation.NONE);
- for (PushActions action : profile.getActions()) {
- action.beforeUnlink(this.getProfile(), values, toBeHandled);
- }
- link(toBeHandled, false, result);
- break;
- default:
- // do nothing
+ result.setOperation(getResourceOperation(profile.getSyncTask().getUnmatchigRule()));
+ } else {
+ result.setOperation(getResourceOperation(profile.getSyncTask().getMatchigRule()));
+ }
+ result.setStatus(SyncResult.Status.SUCCESS);
+ } else {
+ try {
+ if (beforeObj == null) {
+ operation = profile.getSyncTask().getUnmatchigRule().name().toLowerCase();
+ result.setOperation(getResourceOperation(profile.getSyncTask().getUnmatchigRule()));
+
+ switch (profile.getSyncTask().getUnmatchigRule()) {
+ case ASSIGN:
+ for (PushActions action : profile.getActions()) {
+ action.beforeAssign(this.getProfile(), values, toBeHandled);
+ }
+ assign(toBeHandled, enabled, result);
+ break;
+ case PROVISION:
+ for (PushActions action : profile.getActions()) {
+ action.beforeProvision(this.getProfile(), values, toBeHandled);
+ }
+ provision(toBeHandled, enabled, result);
+ break;
+ case UNLINK:
+ for (PushActions action : profile.getActions()) {
+ action.beforeUnlink(this.getProfile(), values, toBeHandled);
+ }
+ link(toBeHandled, true, result);
+ break;
+ default:
+ // do nothing
+ }
+
+ } else {
+ operation = profile.getSyncTask().getMatchigRule().name().toLowerCase();
+ result.setOperation(getResourceOperation(profile.getSyncTask().getMatchigRule()));
+
+ switch (profile.getSyncTask().getMatchigRule()) {
+ case UPDATE:
+ for (PushActions action : profile.getActions()) {
+ action.beforeUpdate(this.getProfile(), values, toBeHandled);
+ }
+ update(toBeHandled, values.getKey(), values.getValue(), beforeObj, result);
+ break;
+ case DEPROVISION:
+ for (PushActions action : profile.getActions()) {
+ action.beforeDeprovision(this.getProfile(), values, toBeHandled);
+ }
+ deprovision(toBeHandled, result);
+ break;
+ case UNASSIGN:
+ for (PushActions action : profile.getActions()) {
+ action.beforeUnassign(this.getProfile(), values, toBeHandled);
+ }
+ unassign(toBeHandled, result);
+ break;
+ case LINK:
+ for (PushActions action : profile.getActions()) {
+ action.beforeLink(this.getProfile(), values, toBeHandled);
+ }
+ link(toBeHandled, false, result);
+ break;
+ case UNLINK:
+ for (PushActions action : profile.getActions()) {
+ action.beforeUnlink(this.getProfile(), values, toBeHandled);
+ }
+ link(toBeHandled, true, result);
+ break;
+ default:
+ // do nothing
+ }
}
- } else {
- operation = profile.getSyncTask().getMatchigRule().name().toLowerCase();
- switch (profile.getSyncTask().getMatchigRule()) {
- case UPDATE:
- result.setOperation(ResourceOperation.UPDATE);
- for (PushActions action : profile.getActions()) {
- action.beforeUpdate(this.getProfile(), values, toBeHandled);
- }
- update(toBeHandled, values.getKey(), values.getValue(), beforeObj, result);
- break;
- case DEPROVISION:
- result.setOperation(ResourceOperation.DELETE);
- for (PushActions action : profile.getActions()) {
- action.beforeDeprovision(this.getProfile(), values, toBeHandled);
- }
- deprovision(toBeHandled, result);
- break;
- case UNASSIGN:
- result.setOperation(ResourceOperation.DELETE);
- for (PushActions action : profile.getActions()) {
- action.beforeUnassign(this.getProfile(), values, toBeHandled);
- }
- unassign(toBeHandled, result);
- break;
- case LINK:
- result.setOperation(ResourceOperation.NONE);
- for (PushActions action : profile.getActions()) {
- action.beforeLink(this.getProfile(), values, toBeHandled);
- }
- link(toBeHandled, true, result);
- break;
- case UNLINK:
- result.setOperation(ResourceOperation.NONE);
- for (PushActions action : profile.getActions()) {
- action.beforeUnlink(this.getProfile(), values, toBeHandled);
- }
- link(toBeHandled, false, result);
- break;
- default:
- // do nothing
+ for (PushActions action : profile.getActions()) {
+ action.after(this.getProfile(), values, toBeHandled, result);
}
- }
- result.setStatus(SyncResult.Status.SUCCESS);
- resultStatus = AuditElements.Result.SUCCESS;
- output = getRemoteObject(values.getKey());
- } catch (Exception e) {
- result.setStatus(SyncResult.Status.FAILURE);
- result.setMessage(ExceptionUtils.getRootCauseMessage(e));
- resultStatus = AuditElements.Result.FAILURE;
- output = e;
-
- LOG.warn("Error pushing {} towards {}", toBeHandled, profile.getSyncTask().getResource(), e);
- throw new JobExecutionException(e);
- } finally {
- for (PushActions action : profile.getActions()) {
- action.after(this.getProfile(), values, toBeHandled, result);
+ result.setStatus(SyncResult.Status.SUCCESS);
+ resultStatus = AuditElements.Result.SUCCESS;
+ output = getRemoteObject(values.getKey());
+ } catch (Exception e) {
+ result.setStatus(SyncResult.Status.FAILURE);
+ result.setMessage(ExceptionUtils.getRootCauseMessage(e));
+ resultStatus = AuditElements.Result.FAILURE;
+ output = e;
+
+ LOG.warn("Error pushing {} towards {}", toBeHandled, profile.getSyncTask().getResource(), e);
+ throw new JobExecutionException(e);
+ } finally {
+ notificationManager.createTasks(
+ AuditElements.EventCategoryType.PUSH,
+ AttributableType.USER.name().toLowerCase(),
+ profile.getSyncTask().getResource().getName(),
+ operation,
+ resultStatus,
+ beforeObj,
+ output,
+ toBeHandled);
+ auditManager.audit(
+ AuditElements.EventCategoryType.PUSH,
+ AttributableType.USER.name().toLowerCase(),
+ profile.getSyncTask().getResource().getName(),
+ operation,
+ resultStatus,
+ beforeObj,
+ output,
+ toBeHandled);
}
- notificationManager.createTasks(
- AuditElements.EventCategoryType.PUSH,
- AttributableType.USER.name().toLowerCase(),
- profile.getSyncTask().getResource().getName(),
- operation,
- resultStatus,
- beforeObj,
- output,
- toBeHandled);
- auditManager.audit(
- AuditElements.EventCategoryType.PUSH,
- AttributableType.USER.name().toLowerCase(),
- profile.getSyncTask().getResource().getName(),
- operation,
- resultStatus,
- beforeObj,
- output,
- toBeHandled);
+ }
+ }
+
+ private ResourceOperation getResourceOperation(final UnmatchingRule rule) {
+ switch (rule) {
+ case ASSIGN:
+ case PROVISION:
+ return ResourceOperation.CREATE;
+ default:
+ return ResourceOperation.NONE;
+ }
+ }
+
+ private ResourceOperation getResourceOperation(final MatchingRule rule) {
+ switch (rule) {
+ case UPDATE:
+ return ResourceOperation.UPDATE;
+ case DEPROVISION:
+ case UNASSIGN:
+ return ResourceOperation.DELETE;
+ default:
+ return ResourceOperation.NONE;
}
}
}
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=1605825&r1=1605824&r2=1605825&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 Thu Jun 26 15:45:35 2014
@@ -18,8 +18,6 @@
*/
package org.apache.syncope.core.sync.impl;
-import static org.apache.syncope.core.sync.impl.AbstractSyncopeResultHandler.LOG;
-
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -52,7 +50,6 @@ public class RolePushResultHandler exten
taskExecutor.execute(propagationManager.getRoleDeleteTaskIds(before.getId(), noPropResources));
- result.setId(before.getId());
return roleDataBinder.getRoleFromId(before.getId());
}
@@ -72,7 +69,6 @@ public class RolePushResultHandler exten
propByRes,
noPropResources));
- result.setId(before.getId());
return roleDataBinder.getRoleFromId(before.getId());
}
@@ -91,7 +87,6 @@ public class RolePushResultHandler exten
rwfAdapter.update(roleMod);
- result.setId(sbj.getId());
return roleDataBinder.getRoleFromId(sbj.getId());
}
@@ -132,7 +127,6 @@ public class RolePushResultHandler exten
new HashSet<String>(),
connObjectUtil);
- result.setId(sbj.getId());
return userDataBinder.getUserFromId(sbj.getId());
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/UserPushResultHandler.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/UserPushResultHandler.java?rev=1605825&r1=1605824&r2=1605825&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/UserPushResultHandler.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/UserPushResultHandler.java Thu Jun 26 15:45:35 2014
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.core.sync.impl;
-import static org.apache.syncope.core.sync.impl.AbstractSyncopeResultHandler.LOG;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -49,9 +48,9 @@ public class UserPushResultHandler exten
final List<String> noPropResources = new ArrayList<String>(before.getResources());
noPropResources.remove(profile.getSyncTask().getResource().getName());
- taskExecutor.execute(propagationManager.getUserDeleteTaskIds(before.getId(), noPropResources));
+ taskExecutor.execute(propagationManager.getUserDeleteTaskIds(before.getId(),
+ Collections.singleton(profile.getSyncTask().getResource().getName()), noPropResources));
- result.setId(before.getId());
return userDataBinder.getUserFromId(before.getId());
}
@@ -74,7 +73,6 @@ public class UserPushResultHandler exten
Collections.unmodifiableCollection(before.getMemberships()),
noPropResources));
- result.setId(before.getId());
return userDataBinder.getUserFromId(before.getId());
}
@@ -93,7 +91,6 @@ public class UserPushResultHandler exten
uwfAdapter.update(userMod);
- result.setId(sbj.getId());
return userDataBinder.getUserFromId(sbj.getId());
}
@@ -134,7 +131,6 @@ public class UserPushResultHandler exten
new HashSet<String>(),
connObjectUtil);
- result.setId(sbj.getId());
return userDataBinder.getUserFromId(sbj.getId());
}
@@ -168,10 +164,9 @@ public class UserPushResultHandler exten
ConnectorObject obj = null;
try {
-
final Uid uid = new Uid(accountId);
- profile.getConnector().getObject(
+ obj = profile.getConnector().getObject(
ObjectClass.ACCOUNT,
uid,
profile.getConnector().getOperationOptions(Collections.<AbstractMappingItem>emptySet()));
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=1605825&r1=1605824&r2=1605825&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 Thu Jun 26 15:45:35 2014
@@ -977,43 +977,232 @@ public class TaskTestITCase extends Abst
}
@Test
- public void pushUsers() {
- // Read sync task
+ 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));
+
PushTaskTO task = taskService.<PushTaskTO>read(13L);
assertNotNull(task);
-
- assertEquals("Vivaldi", userService.read(3L).getAttrMap().get("surname").getValues().get(0));
-
task.setUserFilter(SyncopeClient.getUserSearchConditionBuilder().is("surname").equalTo("Vivaldi").query());
taskService.update(13L, task);
+
assertEquals(task.getUserFilter(), taskService.<PushTaskTO>read(13L).getUserFilter());
- execSyncTask(task.getId(), 50, false);
+ execSyncTask(task.getId(), 50, true);
final JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
+ assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='vivaldi'").size());
+
+ assertFalse(userService.read(3L).getResources().contains(RESOURCE_NAME_TESTDB2));
+
+ jdbcTemplate.execute("DELETE FROM test2 WHERE ID='vivaldi'");
+ // ------------------------------------------
+
+ // ------------------------------------------
+ // Matching --> Assign
+ // ------------------------------------------
+ execSyncTask(task.getId(), 50, false);
+
+ assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='vivaldi'").size());
assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID<>'vivaldi'").size());
- assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='bellini'").size());
- assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='rossini'").size());
- assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='puccini'").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'");
+ // ------------------------------------------
- task.setUserFilter(null);
+ // ------------------------------------------
+ // Matching --> 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);
- assertNull(taskService.<PushTaskTO>read(13L).getUserFilter());
+ assertEquals(task.getUserFilter(), taskService.<PushTaskTO>read(13L).getUserFilter());
execSyncTask(task.getId(), 50, false);
- assertEquals("vivaldi",
- jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "vivaldi"));
+ 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"));
- assertEquals("rossini",
- jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "rossini"));
- assertEquals("puccini",
- jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "puccini"));
+
+ jdbcTemplate.execute("DELETE FROM test2 WHERE ID='bellini'");
+ // ------------------------------------------
+
+ // ------------------------------------------
+ // Matching --> 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);
+
+ 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());
+ // ------------------------------------------
+
+ // ------------------------------------------
+ // Assign Verdi to test2
+ // ------------------------------------------
+ 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);
+
+ assertTrue(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+ assertEquals("verdi", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "verdi"));
+ // ------------------------------------------
+
+ // ------------------------------------------
+ // Matching --> Deprovision
+ // ------------------------------------------
+ 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));
+ // DELETE Capability not available ....
+ assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
+ // ------------------------------------------
+
+ // ------------------------------------------
+ // 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));
+ // DELETE Capability not available ....
+ assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='verdi'").size());
+ // ------------------------------------------
+
+ // ------------------------------------------
+ // Matching --> Link
+ // ------------------------------------------
+ task.setMatchigRule(MatchingRule.LINK);
+ taskService.update(13L, task);
+ assertEquals(MatchingRule.LINK, taskService.<PushTaskTO>read(13L).getMatchigRule());
+
+ execSyncTask(task.getId(), 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);
+
+ assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+ assertEquals("verdi", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "verdi"));
+ // ------------------------------------------
+
+ // ------------------------------------------
+ // Matching --> 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());
+
+ execSyncTask(task.getId(), 50, false);
+
+ assertFalse(userService.read(2L).getResources().contains(RESOURCE_NAME_TESTDB2));
+ assertEquals("verdi", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "verdi"));
+ // ------------------------------------------
+
+ task.setMatchigRule(MatchingRule.UPDATE);
+ task.setUserFilter(null);
+ taskService.update(13L, task);
+
+ jdbcTemplate.execute("DELETE FROM test2 WHERE ID='verdi'");
}
}
Modified: syncope/trunk/core/src/test/resources/content.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/content.xml?rev=1605825&r1=1605824&r2=1605825&view=diff
==============================================================================
--- syncope/trunk/core/src/test/resources/content.xml (original)
+++ syncope/trunk/core/src/test/resources/content.xml Thu Jun 26 15:45:35 2014
@@ -893,7 +893,7 @@ under the License.
<Task DTYPE="SyncTask" id="12" name="VirAttrCache test" resource_name="resource-csv"
performCreate="0" performUpdate="1" performDelete="0" syncStatus="0" fullReconciliation="1"
jobClassName="org.apache.syncope.core.sync.impl.SyncJob"/>
- <Task DTYPE="PushTask" id="13" name="Export on resource-testdb" resource_name="resource-testdb2"
+ <Task DTYPE="PushTask" id="13" name="Export on resource-testdb2" resource_name="resource-testdb2"
performCreate="1" performUpdate="1" performDelete="1" syncStatus="1"
jobClassName="org.apache.syncope.core.sync.impl.PushJob"/>