You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2013/01/30 18:56:47 UTC

svn commit: r1440561 - in /syncope/trunk: ./ core/src/main/java/org/apache/syncope/core/persistence/beans/ core/src/main/java/org/apache/syncope/core/persistence/beans/user/ core/src/main/java/org/apache/syncope/core/security/ core/src/main/java/org/ap...

Author: ilgrosso
Date: Wed Jan 30 17:56:47 2013
New Revision: 1440561

URL: http://svn.apache.org/viewvc?rev=1440561&view=rev
Log:
[SYNCOPE-301] Merge from 1_0_X

Modified:
    syncope/trunk/   (props changed)
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractBaseBean.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/user/SyncopeUser.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/security/SyncopeAuthenticationProvider.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowResult.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/NoOpUserWorkflowAdapter.java
    syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
    syncope/trunk/core/src/test/resources/content.xml

Propchange: syncope/trunk/
------------------------------------------------------------------------------
  Merged /syncope/branches/1_0_X:r1439847-1440543

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractBaseBean.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractBaseBean.java?rev=1440561&r1=1440560&r2=1440561&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractBaseBean.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractBaseBean.java Wed Jan 30 17:56:47 2013
@@ -26,7 +26,6 @@ import java.text.SimpleDateFormat;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
-
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.apache.syncope.common.SyncopeConstants;
@@ -69,7 +68,7 @@ public abstract class AbstractBaseBean i
      * @param property the integer representing a boolean value
      * @return the boolean value corresponding to the property param
      */
-    public final Boolean isBooleanAsInteger(final Integer property) {
+    public final boolean isBooleanAsInteger(final Integer property) {
         return property != null && property == 1;
     }
 
@@ -99,7 +98,7 @@ public abstract class AbstractBaseBean i
             }
         }
 
-        return excludeFields.toArray(new String[] {});
+        return excludeFields.toArray(new String[]{});
     }
 
     @Override

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/user/SyncopeUser.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/user/SyncopeUser.java?rev=1440561&r1=1440560&r2=1440561&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/user/SyncopeUser.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/user/SyncopeUser.java Wed Jan 30 17:56:47 2013
@@ -492,7 +492,7 @@ public class SyncopeUser extends Abstrac
     }
 
     public Boolean isSuspended() {
-        return isBooleanAsInteger(suspended);
+        return suspended == null ? null : isBooleanAsInteger(suspended);
     }
 
     private String encodePassword(final String password, final CipherAlgorithm cipherAlgoritm)

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/security/SyncopeAuthenticationProvider.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/security/SyncopeAuthenticationProvider.java?rev=1440561&r1=1440560&r2=1440561&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/security/SyncopeAuthenticationProvider.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/security/SyncopeAuthenticationProvider.java Wed Jan 30 17:56:47 2013
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.security;
 
 import java.util.Date;
-
 import org.apache.syncope.common.types.AuditElements.AuthenticationSubCategory;
 import org.apache.syncope.common.types.AuditElements.Category;
 import org.apache.syncope.common.types.AuditElements.Result;
@@ -123,7 +122,7 @@ public class SyncopeAuthenticationProvid
         } else {
             user = userDAO.find(username);
 
-            if (user != null) {
+            if (user != null && user.isSuspended() != null) {
                 if (user.isSuspended()) {
                     throw new DisabledException("User " + user.getUsername() + " is suspended");
                 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java?rev=1440561&r1=1440560&r2=1440561&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java Wed Jan 30 17:56:47 2013
@@ -18,14 +18,15 @@
  */
 package org.apache.syncope.core.sync.impl;
 
+import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.lang.StringUtils;
-import org.apache.syncope.common.mod.AbstractAttributableMod;
 import org.apache.syncope.common.mod.AttributeMod;
 import org.apache.syncope.common.mod.RoleMod;
 import org.apache.syncope.common.mod.UserMod;
@@ -58,6 +59,7 @@ import org.apache.syncope.core.persisten
 import org.apache.syncope.core.persistence.dao.SchemaDAO;
 import org.apache.syncope.core.persistence.dao.UserDAO;
 import org.apache.syncope.core.persistence.validation.attrvalue.ParsingValidationException;
+import org.apache.syncope.core.propagation.PropagationByResource;
 import org.apache.syncope.core.propagation.PropagationException;
 import org.apache.syncope.core.propagation.PropagationTaskExecutor;
 import org.apache.syncope.core.propagation.SyncopeConnector;
@@ -449,6 +451,18 @@ public class SyncopeSyncResultHandler im
         return result;
     }
 
+    protected Boolean readEnabled(final ConnectorObject connectorObject) {
+        Boolean enabled = null;
+        if (syncTask.isSyncStatus()) {
+            Attribute status = AttributeUtil.find(OperationalAttributes.ENABLE_NAME, connectorObject.getAttributes());
+            if (status != null && status.getValue() != null && !status.getValue().isEmpty()) {
+                enabled = (Boolean) status.getValue().get(0);
+            }
+        }
+
+        return enabled;
+    }
+
     protected List<SyncResult> create(SyncDelta delta, final AttributableUtil attrUtil, final boolean dryRun)
             throws JobExecutionException {
 
@@ -477,19 +491,7 @@ public class SyncopeSyncResultHandler im
         } else {
             try {
                 if (AttributableType.USER == attrUtil.getType()) {
-                    // --------------------------
-                    // Check for status synchronization ...
-                    // --------------------------
-                    Boolean enabled = null;
-                    if (syncTask.isSyncStatus()) {
-                        Attribute status = AttributeUtil.find(OperationalAttributes.ENABLE_NAME,
-                                delta.getObject().getAttributes());
-                        if (status != null && status.getValue() != null && !status.getValue().isEmpty()) {
-                            enabled = (Boolean) status.getValue().get(0);
-                        }
-                    }
-                    // --------------------------
-
+                    Boolean enabled = readEnabled(delta.getObject());
                     WorkflowResult<Map.Entry<Long, Boolean>> created =
                             uwfAdapter.create((UserTO) subjectTO, true, enabled);
 
@@ -544,9 +546,106 @@ public class SyncopeSyncResultHandler im
         return Collections.singletonList(result);
     }
 
+    protected void updateUser(final Long id, SyncDelta delta, final boolean dryRun, final SyncResult result)
+            throws Exception {
+
+        UserTO userTO = userDataBinder.getUserTO(id);
+        UserMod userMod = connObjectUtil.getAttributableMod(
+                id, delta.getObject(), userTO, syncTask, AttributableUtil.getInstance(AttributableType.USER));
+
+        delta = actions.beforeUpdate(this, delta, userTO, userMod);
+
+        if (dryRun) {
+            return;
+        }
+
+        WorkflowResult<Map.Entry<Long, Boolean>> updated;
+        try {
+            updated = uwfAdapter.update(userMod);
+        } catch (Exception e) {
+            LOG.error("Update of user {} failed, trying to sync its status anyway (if configured)", id, e);
+
+            result.setStatus(SyncResult.Status.FAILURE);
+            result.setMessage("Update failed, trying to sync status anyway (if configured)\n" + e.getMessage());
+
+            updated = new WorkflowResult<Map.Entry<Long, Boolean>>(
+                    new AbstractMap.SimpleEntry<Long, Boolean>(id, false), new PropagationByResource(),
+                    new HashSet<String>());
+        }
+
+        Boolean enabled = readEnabled(delta.getObject());
+        if (enabled != null) {
+            WorkflowResult<Long> enableUpdate = null;
+
+            SyncopeUser user = userDAO.find(id);
+            enableUpdate = user.isSuspended() == null
+                    ? uwfAdapter.activate(id, null)
+                    : enabled
+                    ? uwfAdapter.reactivate(id)
+                    : uwfAdapter.suspend(id);
+
+            if (enableUpdate != null) {
+                if (enableUpdate.getPropByRes() != null) {
+                    updated.getPropByRes().merge(enableUpdate.getPropByRes());
+                    updated.getPropByRes().purge();
+                }
+                updated.getPerformedTasks().addAll(enableUpdate.getPerformedTasks());
+            }
+        }
+
+        List<PropagationTask> tasks = propagationManager.getUserUpdateTaskIds(updated,
+                userMod.getPassword(),
+                userMod.getVirtualAttributesToBeRemoved(),
+                userMod.getVirtualAttributesToBeUpdated(),
+                Collections.singleton(syncTask.getResource().getName()));
+
+        taskExecutor.execute(tasks);
+
+        notificationManager.createTasks(updated.getResult().getKey(), updated.getPerformedTasks());
+
+        userTO = userDataBinder.getUserTO(updated.getResult().getKey());
+
+        actions.after(this, delta, userTO, result);
+    }
+
+    protected void updateRole(final Long id, SyncDelta delta, final boolean dryRun, final SyncResult result)
+            throws Exception {
+
+        RoleTO roleTO = roleDataBinder.getRoleTO(id);
+        RoleMod roleMod = connObjectUtil.getAttributableMod(
+                id, delta.getObject(), roleTO, syncTask, AttributableUtil.getInstance(AttributableType.ROLE));
+
+        delta = actions.beforeUpdate(this, delta, roleTO, roleMod);
+
+        if (dryRun) {
+            return;
+        }
+
+        WorkflowResult<Long> updated = rwfAdapter.update(roleMod);
+        String roleOwner = null;
+        for (AttributeMod attrMod : roleMod.getAttributesToBeUpdated()) {
+            if (attrMod.getSchema().isEmpty()) {
+                roleOwner = attrMod.getValuesToBeAdded().iterator().next();
+            }
+        }
+        if (roleOwner != null) {
+            roleOwnerMap.put(updated.getResult(), roleOwner);
+        }
+
+        List<PropagationTask> tasks = propagationManager.getRoleUpdateTaskIds(updated,
+                roleMod.getVirtualAttributesToBeRemoved(),
+                roleMod.getVirtualAttributesToBeUpdated(),
+                Collections.singleton(syncTask.getResource().getName()));
+
+        taskExecutor.execute(tasks);
+
+        roleTO = roleDataBinder.getRoleTO(updated.getResult());
+
+        actions.after(this, delta, roleTO, result);
+    }
+
     protected List<SyncResult> update(SyncDelta delta, final List<Long> subjects, final AttributableUtil attrUtil,
-            final boolean dryRun)
-            throws JobExecutionException {
+            final boolean dryRun) throws JobExecutionException {
 
         if (!syncTask.isPerformUpdate()) {
             LOG.debug("SyncTask not configured for update");
@@ -558,79 +657,36 @@ public class SyncopeSyncResultHandler im
         List<SyncResult> updResults = new ArrayList<SyncResult>();
 
         for (Long id : subjects) {
+            LOG.debug("About to update {}", id);
+
             final SyncResult result = new SyncResult();
             result.setOperation(ResourceOperation.UPDATE);
             result.setSubjectType(attrUtil.getType());
+            result.setStatus(SyncResult.Status.SUCCESS);
+            result.setId(id);
 
             try {
-                AbstractAttributableTO subjectTO = AttributableType.USER == attrUtil.getType()
-                        ? userDataBinder.getUserTO(id)
-                        : roleDataBinder.getRoleTO(id);
-                try {
-                    final AbstractAttributableMod mod = connObjectUtil.getAttributableMod(
-                            id, delta.getObject(), subjectTO, syncTask, attrUtil);
-                    delta = actions.beforeUpdate(this, delta, subjectTO, mod);
-
-                    result.setStatus(SyncResult.Status.SUCCESS);
-                    result.setId(mod.getId());
-                    if (mod instanceof UserMod) {
-                        result.setName(((UserMod) mod).getUsername());
-                    }
-                    if (mod instanceof RoleMod) {
-                        result.setName(((RoleMod) mod).getName());
-                    }
-
-                    if (!dryRun) {
-                        if (AttributableType.USER == attrUtil.getType()) {
-                            WorkflowResult<Map.Entry<Long, Boolean>> updated = uwfAdapter.update((UserMod) mod);
-
-                            List<PropagationTask> tasks = propagationManager.getUserUpdateTaskIds(updated,
-                                    ((UserMod) mod).getPassword(), mod.getVirtualAttributesToBeRemoved(),
-                                    mod.getVirtualAttributesToBeUpdated(),
-                                    Collections.singleton(syncTask.getResource().getName()));
-
-                            taskExecutor.execute(tasks);
-
-                            notificationManager.createTasks(updated.getResult().getKey(), updated.getPerformedTasks());
-
-                            subjectTO = userDataBinder.getUserTO(updated.getResult().getKey());
-                        }
-                        if (AttributableType.ROLE == attrUtil.getType()) {
-                            WorkflowResult<Long> updated = rwfAdapter.update((RoleMod) mod);
-                            String roleOwner = null;
-                            for (AttributeMod attrMod : mod.getAttributesToBeUpdated()) {
-                                if (attrMod.getSchema().isEmpty()) {
-                                    roleOwner = attrMod.getValuesToBeAdded().iterator().next();
-                                }
-                            }
-                            if (roleOwner != null) {
-                                roleOwnerMap.put(updated.getResult(), roleOwner);
-                            }
-
-                            List<PropagationTask> tasks = propagationManager.getRoleUpdateTaskIds(updated,
-                                    mod.getVirtualAttributesToBeRemoved(), mod.getVirtualAttributesToBeUpdated(),
-                                    Collections.singleton(syncTask.getResource().getName()));
-
-                            taskExecutor.execute(tasks);
+                if (AttributableType.USER == attrUtil.getType()) {
+                    updateUser(id, delta, dryRun, result);
+                }
 
-                            subjectTO = roleDataBinder.getRoleTO(updated.getResult());
-                        }
-                    }
-                } catch (PropagationException e) {
-                    LOG.error("Could not propagate {} {}", attrUtil.getType(), delta.getUid().getUidValue(), e);
-                } catch (Exception e) {
-                    result.setStatus(SyncResult.Status.SUCCESS);
-                    result.setMessage(e.getMessage());
-                    LOG.error("Could not update {} {}", attrUtil.getType(), delta.getUid().getUidValue(), e);
+                if (AttributableType.ROLE == attrUtil.getType()) {
+                    updateRole(id, delta, dryRun, result);
                 }
+            } catch (PropagationException e) {
+                result.setStatus(SyncResult.Status.FAILURE);
+                result.setMessage(delta.getUid().getUidValue() + "updated but not propagated\n" + e.getMessage());
 
-                actions.after(this, delta, subjectTO, result);
-                updResults.add(result);
-            } catch (NotFoundException e) {
-                LOG.error("Could not find {} {}", attrUtil.getType(), id, e);
-            } catch (UnauthorizedRoleException e) {
-                LOG.error("Not allowed to read {} {}", attrUtil.getType(), id, e);
+                LOG.error("Could not propagate {} {}", attrUtil.getType(), delta.getUid().getUidValue(), e);
+            } catch (Exception e) {
+                result.setStatus(SyncResult.Status.FAILURE);
+                result.setMessage(e.getMessage());
+
+                LOG.error("Could not update {} {}", attrUtil.getType(), delta.getUid().getUidValue(), e);
             }
+            results.add(result);
+
+            LOG.debug("{} {} successfully updated", attrUtil.getType(), id);
         }
 
         return updResults;

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowResult.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowResult.java?rev=1440561&r1=1440560&r2=1440561&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowResult.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/WorkflowResult.java Wed Jan 30 17:56:47 2013
@@ -20,7 +20,6 @@ package org.apache.syncope.core.workflow
 
 import java.util.Collections;
 import java.util.Set;
-
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.apache.commons.lang.builder.ReflectionToStringBuilder;
@@ -36,14 +35,12 @@ public class WorkflowResult<T> {
     private Set<String> performedTasks;
 
     public WorkflowResult(final T result, final PropagationByResource propByRes, final String performedTask) {
-
         this.result = result;
         this.propByRes = propByRes;
         this.performedTasks = Collections.singleton(performedTask);
     }
 
     public WorkflowResult(final T result, final PropagationByResource propByRes, final Set<String> performedTasks) {
-
         this.result = result;
         this.propByRes = propByRes;
         this.performedTasks = performedTasks;

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/NoOpUserWorkflowAdapter.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/NoOpUserWorkflowAdapter.java?rev=1440561&r1=1440560&r2=1440561&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/NoOpUserWorkflowAdapter.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/workflow/user/NoOpUserWorkflowAdapter.java Wed Jan 30 17:56:47 2013
@@ -18,11 +18,11 @@
  */
 package org.apache.syncope.core.workflow.user;
 
+import java.util.AbstractMap;
+import java.util.AbstractMap.SimpleEntry;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.AbstractMap;
-import java.util.AbstractMap.SimpleEntry;
 import java.util.Map;
 import org.apache.syncope.common.mod.UserMod;
 import org.apache.syncope.common.to.UserTO;
@@ -51,6 +51,7 @@ public class NoOpUserWorkflowAdapter ext
     @Override
     public WorkflowResult<Map.Entry<Long, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck)
             throws WorkflowException {
+
         return create(userTO, disablePwdPolicyCheck, null);
     }
 
@@ -62,8 +63,7 @@ public class NoOpUserWorkflowAdapter ext
         SyncopeUser user = new SyncopeUser();
         dataBinder.create(user, userTO);
 
-        // this will make SyncopeUserValidator not to consider
-        // password policies at all
+        // this will make SyncopeUserValidator not to consider password policies at all
         if (disablePwdPolicyCheck) {
             user.removeClearPassword();
         }

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=1440561&r1=1440560&r2=1440561&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 Jan 30 17:56:47 2013
@@ -27,9 +27,7 @@ import static org.junit.Assert.assertTru
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
-
 import javax.ws.rs.core.Response;
-
 import org.apache.syncope.common.search.AttributableCond;
 import org.apache.syncope.common.search.AttributeCond;
 import org.apache.syncope.common.search.MembershipCond;
@@ -56,7 +54,6 @@ import org.apache.syncope.core.sync.Test
 import org.apache.syncope.core.sync.impl.SyncJob;
 import org.apache.syncope.core.workflow.ActivitiDetector;
 import org.junit.FixMethodOrder;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runners.MethodSorters;
 import org.springframework.http.HttpStatus;
@@ -330,11 +327,11 @@ public class TaskTestITCase extends Abst
 
     @Test
     public void reconcileFromDB() {
-        // Update sync task
+        // update sync task
         SyncTaskTO task = taskService.read(TaskType.SYNCHRONIZATION, 7L);
         assertNotNull(task);
 
-        //  add user template
+        // add user template
         UserTO template = new UserTO();
         template.addAttribute(attributeTO("type", "'type a'"));
         template.addAttribute(attributeTO("userId", "'reconciled@syncope.apache.org'"));
@@ -351,14 +348,26 @@ public class TaskTestITCase extends Abst
         assertEquals(new RoleTO(), actual.getRoleTemplate());
 
         TaskExecTO execution = execSyncTask(actual.getId(), 20, false);
+        assertNotNull(execution.getStatus());
+        assertTrue(PropagationTaskExecStatus.valueOf(execution.getStatus()).isSuccessful());
 
-        final String status = execution.getStatus();
-        assertNotNull(status);
-        assertTrue(PropagationTaskExecStatus.valueOf(status).isSuccessful());
-
-        final UserTO userTO = userService.read("testuser1");
+        UserTO userTO = userService.read("testuser1");
         assertNotNull(userTO);
         assertEquals("reconciled@syncope.apache.org", userTO.getAttributeMap().get("userId").getValues().get(0));
+        assertEquals("suspended", userTO.getStatus());
+
+        // enable user on external resource
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
+        jdbcTemplate.execute("UPDATE TEST SET STATUS=TRUE");
+
+        // re-execute the same SyncTask: now user must be active
+        execution = execSyncTask(actual.getId(), 20, false);
+        assertNotNull(execution.getStatus());
+        assertTrue(PropagationTaskExecStatus.valueOf(execution.getStatus()).isSuccessful());
+        
+        userTO = userService.read("testuser1");
+        assertNotNull(userTO);
+        assertEquals("active", userTO.getStatus());
     }
 
     @Test
@@ -716,19 +725,17 @@ public class TaskTestITCase extends Abst
 
     @Test
     public void issueSYNCOPE272() {
+        // create user with testdb resource
+        UserTO userTO = UserTestITCase.getUniqueSampleTO("syncope272@syncope.apache.org");
+        userTO.addResource("resource-testdb");
 
-            //Create user with testdb resource
-            UserTO userTO = UserTestITCase.getUniqueSampleTO("syncope272@syncope.apache.org");
-            userTO.addResource("resource-testdb");
-
-            userTO = createUser(userTO);
-            try {
-
+        userTO = createUser(userTO);
+        try {
             assertNotNull(userTO);
             assertEquals(1, userTO.getPropagationStatusTOs().size());
             assertTrue(userTO.getPropagationStatusTOs().get(0).getStatus().isSuccessful());
 
-            // Update sync task
+            // update sync task
             SyncTaskTO task = taskService.read(TaskType.SYNCHRONIZATION, SYNC_TASK_ID);
             assertNotNull(task);
 

Modified: syncope/trunk/core/src/test/resources/content.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/content.xml?rev=1440561&r1=1440560&r2=1440561&view=diff
==============================================================================
--- syncope/trunk/core/src/test/resources/content.xml (original)
+++ syncope/trunk/core/src/test/resources/content.xml Wed Jan 30 17:56:47 2013
@@ -42,15 +42,15 @@ under the License.
   <Policy DTYPE="PasswordPolicy" id="8" description="sample password policy" type="PASSWORD" specification="%3Corg.apache.syncope.common.types.PasswordPolicySpec%3E%0A++%3ChistoryLength%3E0%3C%2FhistoryLength%3E%0A++%3CmaxLength%3E0%3C%2FmaxLength%3E%0A++%3CminLength%3E10%3C%2FminLength%3E%0A++%3CnonAlphanumericRequired%3Etrue%3C%2FnonAlphanumericRequired%3E%0A++%3CalphanumericRequired%3Efalse%3C%2FalphanumericRequired%3E%0A++%3CdigitRequired%3Etrue%3C%2FdigitRequired%3E%0A++%3ClowercaseRequired%3Etrue%3C%2FlowercaseRequired%3E%0A++%3CuppercaseRequired%3Etrue%3C%2FuppercaseRequired%3E%0A++%3CmustStartWithDigit%3Etrue%3C%2FmustStartWithDigit%3E%0A++%3CmustntStartWithDigit%3Efalse%3C%2FmustntStartWithDigit%3E%0A++%3CmustEndWithDigit%3Etrue%3C%2FmustEndWithDigit%3E%0A++%3CmustntEndWithDigit%3Efalse%3C%2FmustntEndWithDigit%3E%0A++%3CmustStartWithNonAlpha%3Efalse%3C%2FmustStartWithNonAlpha%3E%0A++%3CmustStartWithAlpha%3Efalse%3C%2FmustStartWithAlpha%3E%0A++%3CmustntStartWithNonAl
 pha%3Efalse%3C%2FmustntStartWithNonAlpha%3E%0A++%3CmustntStartWithAlpha%3Efalse%3C%2FmustntStartWithAlpha%3E%0A++%3CmustEndWithNonAlpha%3Efalse%3C%2FmustEndWithNonAlpha%3E%0A++%3CmustEndWithAlpha%3Efalse%3C%2FmustEndWithAlpha%3E%0A++%3CmustntEndWithNonAlpha%3Efalse%3C%2FmustntEndWithNonAlpha%3E%0A++%3CmustntEndWithAlpha%3Efalse%3C%2FmustntEndWithAlpha%3E%0A++%3CprefixesNotPermitted%3E%0A++++%3Cstring%3Enotpermitted1%3C%2Fstring%3E%0A++++%3Cstring%3Enotpermitted2%3C%2Fstring%3E%0A++%3C%2FprefixesNotPermitted%3E%0A%3C%2Forg.apache.syncope.common.types.PasswordPolicySpec%3E"/>
     
   <SyncopeUser id="1" workflowId="0" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               username="user1" creationDate="2010-10-20 11:00:00"/>
+               username="user1" creationDate="2010-10-20 11:00:00" suspended="0"/>
   <SyncopeUser id="2" workflowId="0" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               username="user2" creationDate="2010-10-20 11:00:00"/>
+               username="user2" creationDate="2010-10-20 11:00:00" suspended="0"/>
   <SyncopeUser id="3" workflowId="0" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               username="user3" creationDate="2010-10-20 11:00:00"/>
+               username="user3" creationDate="2010-10-20 11:00:00" suspended="0"/>
   <SyncopeUser id="4" workflowId="0" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               username="user4" creationDate="2010-10-20 11:00:00"/>
+               username="user4" creationDate="2010-10-20 11:00:00" suspended="0"/>
   <SyncopeUser id="5" workflowId="0" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               username="user5" creationDate="2010-10-20 11:00:00"/>
+               username="user5" creationDate="2010-10-20 11:00:00" suspended="0"/>
 
   <SyncopeRole id="1" name="root"/>
   <SyncopeRole id="2" name="child" parent_id="1"/>