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 2015/01/23 17:41:36 UTC

[14/15] syncope git commit: FIT server integration tests

FIT server integration tests


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/80589a1b
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/80589a1b
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/80589a1b

Branch: refs/heads/2_0_X
Commit: 80589a1b9b384f07670afe4f1581c3ceb2794501
Parents: b7d9add
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jan 23 17:40:48 2015 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jan 23 17:40:48 2015 +0100

----------------------------------------------------------------------
 .../syncope/core/util/ContentExporter.java      |    8 +-
 pom.xml                                         |    1 +
 .../common/lib/AttributableOperations.java      |   28 +-
 .../lib/annotation/FormAttributeField.java      |    2 +-
 .../common/lib/mod/AbstractAttributableMod.java |    4 +-
 .../lib/report/AbstractReportletConf.java       |    3 +-
 .../common/lib/report/RoleReportletConf.java    |   18 +-
 .../common/lib/report/UserReportletConf.java    |   18 +-
 .../syncope/common/lib/to/ConnObjectTO.java     |    2 +-
 .../apache/syncope/common/lib/to/LoggerTO.java  |   10 +-
 .../apache/syncope/common/lib/to/RoleTO.java    |   10 +-
 .../common/lib/types/ClientExceptionType.java   |   21 +-
 .../common/lib/types/IntMappingType.java        |   12 +-
 syncope620/common/rest-api/pom.xml              |    1 +
 .../common/rest/api/CollectionWrapper.java      |    4 +-
 .../syncope/common/rest/api/RESTHeaders.java    |    2 +-
 .../common/rest/api/service/ReportService.java  |   18 +-
 .../rest/api/service/ResourceService.java       |    2 +-
 .../common/rest/api/service/RoleService.java    |    5 +-
 .../rest/api/service/UserSelfService.java       |    6 +-
 .../rest/api/service/WorkflowService.java       |    4 +-
 syncope620/fit/reference/pom.xml                |  121 +
 .../DoubleValueAttributableTransformer.java     |   75 +
 .../fit/server/reference/TestSyncActions.java   |   83 +
 .../fit/server/reference/TestSyncRule.java      |   37 +
 .../src/main/resources/connid.properties        |    5 +
 .../src/main/resources/logic.properties         |   18 +
 .../fit/server/reference/AbstractITCase.java    |  365 +++
 .../fit/server/reference/ActivitiDetector.java  |   36 +
 .../server/reference/AuthenticationITCase.java  |  440 ++++
 .../server/reference/ConfigurationITCase.java   |  210 ++
 .../fit/server/reference/ConnectorITCase.java   |  723 ++++++
 .../fit/server/reference/DerSchemaITCase.java   |  151 ++
 .../fit/server/reference/LoggerITCase.java      |  215 ++
 .../server/reference/NotificationITCase.java    |  172 ++
 .../fit/server/reference/PlainSchemaITCase.java |  317 +++
 .../fit/server/reference/PolicyITCase.java      |  238 ++
 .../fit/server/reference/ReportITCase.java      |  252 ++
 .../fit/server/reference/ResourceITCase.java    |  590 +++++
 .../fit/server/reference/RoleITCase.java        |  797 ++++++
 .../fit/server/reference/SearchITCase.java      |  182 ++
 .../reference/SecurityQuestionITCase.java       |   99 +
 .../fit/server/reference/TaskITCase.java        | 1385 ++++++++++
 .../fit/server/reference/UserITCase.java        | 2442 ++++++++++++++++++
 .../fit/server/reference/UserSelfITCase.java    |  342 +++
 .../server/reference/UserWorkflowITCase.java    |  299 +++
 .../fit/server/reference/VirAttrITCase.java     |  872 +++++++
 .../fit/server/reference/VirSchemaITCase.java   |  122 +
 .../fit/server/reference/WorkflowITCase.java    |   86 +
 .../reference/src/test/resources/favicon.jpg    |  Bin 0 -> 557 bytes
 .../fit/reference/src/test/resources/test.csv   |   10 +
 .../src/test/resources/testJDBCContext.xml      |   33 +
 syncope620/pom.xml                              |  144 +-
 .../syncope/server/logic/LoggerLogic.java       |    8 +-
 .../syncope/server/logic/ReportLogic.java       |   40 +-
 .../server/logic/SpringBeanJobFactory.java      |   97 -
 .../apache/syncope/server/logic/TaskLogic.java  |    6 +-
 .../apache/syncope/server/logic/UserLogic.java  |    2 +-
 .../server/logic/init/JobInstanceLoader.java    |   41 -
 .../logic/init/JobInstanceLoaderImpl.java       |    1 +
 .../server/logic/report/RoleReportlet.java      |    6 +-
 .../server/logic/report/UserReportlet.java      |    8 +-
 .../syncope/server/logic/NotificationTest.java  |   16 +-
 .../logic/src/test/resources/logicTest.xml      |    2 +-
 .../syncope/server/misc/ConnObjectUtil.java     |    8 +-
 .../apache/syncope/server/misc/MappingUtil.java |   18 +-
 .../misc/policy/AccountPolicyEnforcer.java      |    1 +
 .../misc/policy/PasswordPolicyEnforcer.java     |    7 +-
 .../server/misc/policy/UserSuspender.java       |   26 -
 .../server/misc/security/AuthContextUtil.java   |    2 +-
 .../jpa/content/XMLContentExporter.java         |    9 +-
 .../jpa/dao/JPASubjectSearchDAO.java            |   29 +-
 .../server/persistence/jpa/dao/JPATaskDAO.java  |    2 +-
 .../server/persistence/jpa/dao/JPAUserDAO.java  |    3 +
 .../jpa/entity/AbstractAttrTemplate.java        |   14 -
 .../jpa/entity/AbstractDerAttrTemplate.java     |   41 +
 .../jpa/entity/AbstractPlainAttrTemplate.java   |   27 +
 .../jpa/entity/AbstractPlainSchema.java         |    3 +-
 .../jpa/entity/AbstractVirAttrTemplate.java     |   41 +
 .../jpa/entity/JPAAttributableUtil.java         |   12 +-
 .../persistence/jpa/entity/JPAConnInstance.java |    4 +-
 .../persistence/jpa/entity/JPAReport.java       |    2 -
 .../entity/membership/JPAMDerAttrTemplate.java  |    4 +-
 .../membership/JPAMPlainAttrTemplate.java       |   13 +-
 .../entity/membership/JPAMVirAttrTemplate.java  |    4 +-
 .../jpa/entity/role/JPARDerAttrTemplate.java    |    4 +-
 .../jpa/entity/role/JPARPlainAttrTemplate.java  |   13 +-
 .../jpa/entity/role/JPARVirAttrTemplate.java    |    4 +-
 .../jpa/entity/task/JPATaskUtil.java            |   32 +-
 .../entity/EntityValidationListener.java        |   28 +-
 .../src/main/resources/META-INF/orm.xml         |   20 +-
 .../jpa/entity/AttributableSearchTest.java      |   30 +-
 .../jpa/entity/NotificationTest.java            |    6 +-
 .../persistence/jpa/entity/ResourceTest.java    |   10 +-
 .../jpa/relationship/ResourceTest.java          |    7 +-
 .../src/test/resources/content.xml              |  100 +-
 .../server/provisioning/api/UserSuspender.java  |   26 +
 .../provisioning/api/job/JobInstanceLoader.java |   41 +
 .../api/sync/ProvisioningActions.java           |    5 +-
 .../api/sync/RolePushResultHandler.java         |   23 +
 .../api/sync/RoleSyncResultHandler.java         |   26 +
 .../api/sync/SyncopePushResultHandler.java      |   26 +
 .../api/sync/SyncopeSyncResultHandler.java      |   29 +
 .../api/sync/UserPushResultHandler.java         |   23 +
 .../api/sync/UserSyncResultHandler.java         |   23 +
 .../provisioning/java/AsyncConnectorFacade.java |   26 +-
 .../provisioning/java/ConnectorFacadeProxy.java |   13 +-
 .../java/DefaultRoleProvisioningManager.java    |    2 +-
 .../java/DefaultUserProvisioningManager.java    |   27 +-
 .../provisioning/java/UserSuspenderImpl.java    |   51 +
 .../data/AbstractAttributableDataBinder.java    |    8 +-
 .../java/data/ReportDataBinderImpl.java         |   14 +-
 .../java/data/RoleDataBinderImpl.java           |   12 +-
 .../java/data/SchemaDataBinderImpl.java         |   13 +-
 .../java/data/TaskDataBinderImpl.java           |   16 +-
 .../java/job/SpringBeanJobFactory.java          |   97 +
 .../java/notification/NotificationManager.java  |    2 +-
 .../PriorityPropagationTaskExecutor.java        |    4 +-
 .../java/sync/AbstractProvisioningJob.java      |    7 +-
 .../java/sync/AbstractPushResultHandler.java    |  374 +++
 .../sync/AbstractSubjectPushResultHandler.java  |  371 ---
 .../sync/AbstractSubjectSyncResultHandler.java  |  624 -----
 .../java/sync/AbstractSyncResultHandler.java    |  617 +++++
 .../java/sync/DefaultPushActions.java           |    6 +-
 .../java/sync/DefaultSyncActions.java           |    6 +-
 .../java/sync/LDAPMembershipSyncActions.java    |   16 +-
 .../provisioning/java/sync/PushJobImpl.java     |   28 +-
 .../java/sync/RolePushResultHandler.java        |  154 --
 .../java/sync/RolePushResultHandlerImpl.java    |  155 ++
 .../java/sync/RoleSyncResultHandler.java        |  167 --
 .../java/sync/RoleSyncResultHandlerImpl.java    |  169 ++
 .../provisioning/java/sync/SyncJobImpl.java     |   32 +-
 .../provisioning/java/sync/SyncUtilities.java   |   27 +-
 .../java/sync/UserPushResultHandler.java        |  159 --
 .../java/sync/UserPushResultHandlerImpl.java    |  160 ++
 .../java/sync/UserSyncResultHandler.java        |  155 --
 .../java/sync/UserSyncResultHandlerImpl.java    |  149 ++
 .../main/resources/mailTemplates/optin.html.vm  |    8 +-
 .../main/resources/mailTemplates/optin.txt.vm   |    8 +-
 .../src/main/resources/provisioningContext.xml  |   10 +-
 .../java/data/ResourceDataBinderTest.java       |    2 +-
 .../rest/cxf/service/AbstractServiceImpl.java   |    4 +-
 .../rest/cxf/service/LoggerServiceImpl.java     |    2 +-
 .../rest/cxf/service/ReportServiceImpl.java     |   12 +-
 .../cxf/service/RestServiceExceptionMapper.java |    3 +-
 145 files changed, 13494 insertions(+), 2229 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/core/src/main/java/org/apache/syncope/core/util/ContentExporter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/syncope/core/util/ContentExporter.java b/core/src/main/java/org/apache/syncope/core/util/ContentExporter.java
index e7fd35b..84e2bc4 100644
--- a/core/src/main/java/org/apache/syncope/core/util/ContentExporter.java
+++ b/core/src/main/java/org/apache/syncope/core/util/ContentExporter.java
@@ -70,9 +70,9 @@ public class ContentExporter extends AbstractContentDealer {
                 "SYNCOPEUSER", "UATTR", "UATTRVALUE", "UATTRUNIQUEVALUE", "UDERATTR", "UVIRATTR",
                 "MEMBERSHIP", "MATTR", "MATTRVALUE", "MATTRUNIQUEVALUE", "MDERATTR", "MVIRATTR"
             }));
-    
+
     protected final static Set<String> TABLE_SUFFIXES_TO_BE_INCLUDED =
-            new HashSet<String>(Arrays.asList(new String[] {"TEMPLATE"}));
+            new HashSet<String>(Arrays.asList(new String[] { "TEMPLATE" }));
 
     protected static final Map<String, String> TABLES_TO_BE_FILTERED =
             Collections.singletonMap("TASK", "DTYPE <> 'PropagationTask'");
@@ -85,10 +85,10 @@ public class ContentExporter extends AbstractContentDealer {
         for (String prefix : TABLE_PREFIXES_TO_BE_EXCLUDED) {
             if (tableName.toUpperCase().startsWith(prefix)) {
                 for (String suffix : TABLE_SUFFIXES_TO_BE_INCLUDED) {
-                    if (!tableName.toUpperCase().endsWith(suffix)) {                       
+                    if (!tableName.toUpperCase().endsWith(suffix)) {
                         allowed = false;
                     }
-                }               
+                }
             }
         }
         return allowed;

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 924b4aa..26a6cb2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1428,6 +1428,7 @@ under the License.
             <exclude>**/.*</exclude>
             <exclude>**/deb/control/conffiles</exclude>
             <exclude>**/deb/control/control</exclude>
+            <exclude>**/syncope620/**</exclude>
           </excludes>
         </configuration>
         <executions>

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java
index 983cee4..ad5d322 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java
@@ -81,7 +81,7 @@ public final class AttributableOperations {
                 if (virtuals) {
                     result.getVirAttrsToUpdate().add(mod);
                 } else {
-                    result.getAttrsToUpdate().add(mod);
+                    result.getPlainAttrsToUpdate().add(mod);
                 }
             } else if (!updatedValues.equals(originalValues)) {
                 // avoid unwanted inputs
@@ -93,7 +93,7 @@ public final class AttributableOperations {
                         if (virtuals) {
                             result.getVirAttrsToRemove().add(mod.getSchema());
                         } else {
-                            result.getAttrsToRemove().add(mod.getSchema());
+                            result.getPlainAttrsToRemove().add(mod.getSchema());
                         }
                     }
                 }
@@ -104,7 +104,7 @@ public final class AttributableOperations {
                     if (virtuals) {
                         result.getVirAttrsToUpdate().add(mod);
                     } else {
-                        result.getAttrsToUpdate().add(mod);
+                        result.getPlainAttrsToUpdate().add(mod);
                     }
                 }
             }
@@ -124,15 +124,15 @@ public final class AttributableOperations {
         result.setKey(updated.getKey());
 
         // 2. attributes
-        Map<String, AttrTO> updatedAttrs = new HashMap<>(updated.getAttrMap());
-        Map<String, AttrTO> originalAttrs = new HashMap<>(original.getAttrMap());
+        Map<String, AttrTO> updatedAttrs = new HashMap<>(updated.getPlainAttrMap());
+        Map<String, AttrTO> originalAttrs = new HashMap<>(original.getPlainAttrMap());
 
         Set<String> originalAttrNames = new HashSet<>(originalAttrs.keySet());
         originalAttrNames.removeAll(updatedAttrs.keySet());
 
         if (!incremental) {
-            result.getAttrsToRemove().clear();
-            result.getAttrsToRemove().addAll(originalAttrNames);
+            result.getPlainAttrsToRemove().clear();
+            result.getPlainAttrsToRemove().addAll(originalAttrNames);
         }
 
         Set<String> emptyUpdatedAttrs = new HashSet<>();
@@ -144,7 +144,7 @@ public final class AttributableOperations {
         }
         for (String emptyUpdatedAttr : emptyUpdatedAttrs) {
             updatedAttrs.remove(emptyUpdatedAttr);
-            result.getAttrsToRemove().add(emptyUpdatedAttr);
+            result.getPlainAttrsToRemove().add(emptyUpdatedAttr);
         }
 
         populate(updatedAttrs, originalAttrs, result);
@@ -269,8 +269,8 @@ public final class AttributableOperations {
                     attrMod.getValuesToBeAdded().addAll(attr.getValues());
 
                     if (!attrMod.isEmpty()) {
-                        membMod.getAttrsToUpdate().add(attrMod);
-                        membMod.getAttrsToRemove().add(attrMod.getSchema());
+                        membMod.getPlainAttrsToUpdate().add(attrMod);
+                        membMod.getPlainAttrsToRemove().add(attrMod.getSchema());
                     }
                 }
                 for (AttrTO attr : entry.getValue().getDerAttrs()) {
@@ -283,7 +283,7 @@ public final class AttributableOperations {
 
                     if (!attrMod.isEmpty()) {
                         membMod.getVirAttrsToUpdate().add(attrMod);
-                        membMod.getAttrsToRemove().add(attrMod.getSchema());
+                        membMod.getPlainAttrsToRemove().add(attrMod.getSchema());
                     }
                 }
             }
@@ -333,7 +333,7 @@ public final class AttributableOperations {
         result.setInheritTemplates(updated.isInheritTemplates());
         result.setInheritAccountPolicy(updated.isInheritAccountPolicy());
         result.setInheritPasswordPolicy(updated.isInheritPasswordPolicy());
-        result.setInheritPlainAttrs(updated.isInheritAttrs());
+        result.setInheritPlainAttrs(updated.isInheritPlainAttrs());
         result.setInheritDerAttrs(updated.isInheritDerAttrs());
         result.setInheritVirAttrs(updated.isInheritVirAttrs());
 
@@ -448,8 +448,8 @@ public final class AttributableOperations {
             final K mod, final T result) {
 
         // 1. attributes
-        result.getPlainAttrs().addAll(getUpdateValues(to.getAttrMap(),
-                mod.getAttrsToRemove(), mod.getAttrsToUpdate()));
+        result.getPlainAttrs().addAll(getUpdateValues(to.getPlainAttrMap(),
+                mod.getPlainAttrsToRemove(), mod.getPlainAttrsToUpdate()));
 
         // 2. derived attributes
         Map<String, AttrTO> attrs = to.getDerAttrMap();

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/FormAttributeField.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/FormAttributeField.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/FormAttributeField.java
index f007020..2c1c980 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/FormAttributeField.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/annotation/FormAttributeField.java
@@ -32,5 +32,5 @@ public @interface FormAttributeField {
 
     boolean roleSearch() default false;
 
-    IntMappingType schema() default IntMappingType.UserSchema;
+    IntMappingType schema() default IntMappingType.UserPlainSchema;
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AbstractAttributableMod.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AbstractAttributableMod.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AbstractAttributableMod.java
index 5d6b982..aa5d442 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AbstractAttributableMod.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AbstractAttributableMod.java
@@ -61,14 +61,14 @@ public abstract class AbstractAttributableMod extends AbstractBaseBean {
     @XmlElementWrapper(name = "plainAttrsToRemove")
     @XmlElement(name = "attribute")
     @JsonProperty("plainAttrsToRemove")
-    public Set<String> getAttrsToRemove() {
+    public Set<String> getPlainAttrsToRemove() {
         return plainAttrsToRemove;
     }
 
     @XmlElementWrapper(name = "plainAttrsToUpdate")
     @XmlElement(name = "attributeMod")
     @JsonProperty("plainAttrsToUpdate")
-    public Set<AttrMod> getAttrsToUpdate() {
+    public Set<AttrMod> getPlainAttrsToUpdate() {
         return plainAttrsToUpdate;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/AbstractReportletConf.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/AbstractReportletConf.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/AbstractReportletConf.java
index 6efdb32..0082591 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/AbstractReportletConf.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/AbstractReportletConf.java
@@ -20,6 +20,7 @@ package org.apache.syncope.common.lib.report;
 
 import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlType;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.AbstractBaseBean;
 
 @XmlType
@@ -31,7 +32,7 @@ public abstract class AbstractReportletConf extends AbstractBaseBean implements
     private String name;
 
     public AbstractReportletConf() {
-        this("");
+        this(StringUtils.EMPTY);
         setName(getClass().getName());
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java
index 295316b..e91252d 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java
@@ -52,16 +52,16 @@ public class RoleReportletConf extends AbstractReportletConf {
     @FormAttributeField(userSearch = true)
     private String matchingCond;
 
-    @FormAttributeField(schema = IntMappingType.RoleSchema)
-    private final List<String> attrs = new ArrayList<String>();
+    @FormAttributeField(schema = IntMappingType.RolePlainSchema)
+    private final List<String> attrs = new ArrayList<>();
 
     @FormAttributeField(schema = IntMappingType.RoleDerivedSchema)
-    private final List<String> derAttrs = new ArrayList<String>();
+    private final List<String> derAttrs = new ArrayList<>();
 
     @FormAttributeField(schema = IntMappingType.RoleVirtualSchema)
-    private final List<String> virAttrs = new ArrayList<String>();
+    private final List<String> virAttrs = new ArrayList<>();
 
-    private final List<Feature> features = new ArrayList<Feature>();
+    private final List<Feature> features = new ArrayList<>();
 
     public RoleReportletConf() {
         super();
@@ -71,10 +71,10 @@ public class RoleReportletConf extends AbstractReportletConf {
         super(name);
     }
 
-    @XmlElementWrapper(name = "attributes")
-    @XmlElement(name = "attribute")
-    @JsonProperty("attributes")
-    public List<String> getAttrs() {
+    @XmlElementWrapper(name = "plainAttributes")
+    @XmlElement(name = "plainAttribute")
+    @JsonProperty("plainAttributes")
+    public List<String> getPlainAttrs() {
         return attrs;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java
index afd806a..c82052c 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java
@@ -57,16 +57,16 @@ public class UserReportletConf extends AbstractReportletConf {
     @FormAttributeField(userSearch = true)
     private String matchingCond;
 
-    @FormAttributeField(schema = IntMappingType.UserSchema)
-    private final List<String> attrs = new ArrayList<String>();
+    @FormAttributeField(schema = IntMappingType.UserPlainSchema)
+    private final List<String> attrs = new ArrayList<>();
 
     @FormAttributeField(schema = IntMappingType.UserDerivedSchema)
-    private final List<String> derAttrs = new ArrayList<String>();
+    private final List<String> derAttrs = new ArrayList<>();
 
     @FormAttributeField(schema = IntMappingType.UserVirtualSchema)
-    private final List<String> virAttrs = new ArrayList<String>();
+    private final List<String> virAttrs = new ArrayList<>();
 
-    private final List<Feature> features = new ArrayList<Feature>();
+    private final List<Feature> features = new ArrayList<>();
 
     public UserReportletConf() {
         super();
@@ -76,10 +76,10 @@ public class UserReportletConf extends AbstractReportletConf {
         super(name);
     }
 
-    @XmlElementWrapper(name = "attributes")
-    @XmlElement(name = "attribute")
-    @JsonProperty("attributes")
-    public List<String> getAttrs() {
+    @XmlElementWrapper(name = "plainAttributes")
+    @XmlElement(name = "plainAttribute")
+    @JsonProperty("plainAttributes")
+    public List<String> getPlainAttrs() {
         return attrs;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java
index d298609..78256ba 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java
@@ -46,7 +46,7 @@ public class ConnObjectTO extends AbstractAnnotatedBean {
     }
 
     @JsonIgnore
-    public Map<String, AttrTO> getAttrMap() {
+    public Map<String, AttrTO> getPlainAttrMap() {
         Map<String, AttrTO> result = new HashMap<>(attrs.size());
         for (AttrTO attributeTO : attrs) {
             result.put(attributeTO.getSchema(), attributeTO);

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java
index 263ab97..810a143 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/LoggerTO.java
@@ -29,7 +29,7 @@ public class LoggerTO extends AbstractBaseBean {
 
     private static final long serialVersionUID = -7794833835668648505L;
 
-    private String name;
+    private String key;
 
     private LoggerLevel level;
 
@@ -41,11 +41,11 @@ public class LoggerTO extends AbstractBaseBean {
         this.level = level;
     }
 
-    public String getName() {
-        return name;
+    public String getKey() {
+        return key;
     }
 
-    public void setName(final String name) {
-        this.name = name;
+    public void setKey(final String key) {
+        this.key = key;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
index 6e24929..2a353cf 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
@@ -47,7 +47,7 @@ public class RoleTO extends AbstractSubjectTO {
 
     private boolean inheritTemplates;
 
-    private boolean inheritAttrs;
+    private boolean inheritPlainAttrs;
 
     private boolean inheritDerAttrs;
 
@@ -123,12 +123,12 @@ public class RoleTO extends AbstractSubjectTO {
         this.inheritTemplates = inheritTemplates;
     }
 
-    public boolean isInheritAttrs() {
-        return inheritAttrs;
+    public boolean isInheritPlainAttrs() {
+        return inheritPlainAttrs;
     }
 
-    public void setInheritAttrs(final boolean inheritAttrs) {
-        this.inheritAttrs = inheritAttrs;
+    public void setInheritPlainAttrs(final boolean inheritPlainAttrs) {
+        this.inheritPlainAttrs = inheritPlainAttrs;
     }
 
     public boolean isInheritDerAttrs() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
index 0c272a9..c55cebd 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
@@ -29,30 +29,25 @@ public enum ClientExceptionType {
     EntityExists(Response.Status.CONFLICT),
     GenericPersistence(Response.Status.BAD_REQUEST),
     InvalidSecurityAnswer(Response.Status.BAD_REQUEST),
+    InvalidEntity(Response.Status.BAD_REQUEST),
     InvalidLogger(Response.Status.BAD_REQUEST),
     InvalidConnInstance(Response.Status.BAD_REQUEST),
     InvalidConnIdConf(Response.Status.BAD_REQUEST),
     InvalidPolicy(Response.Status.BAD_REQUEST),
-    InvalidSyncopeConf(Response.Status.BAD_REQUEST),
-    InvalidSyncopeRole(Response.Status.BAD_REQUEST),
+    InvalidConf(Response.Status.BAD_REQUEST),
+    InvalidRole(Response.Status.BAD_REQUEST),
+    InvalidReport(Response.Status.BAD_REQUEST),
     InvalidReportExec(Response.Status.BAD_REQUEST),
     InvalidRoles(Response.Status.BAD_REQUEST),
     InvalidSchemaDefinition(Response.Status.BAD_REQUEST),
     InvalidSearchExpression(Response.Status.BAD_REQUEST),
     InvalidPageOrSize(Response.Status.BAD_REQUEST),
     InvalidPropagationTaskExecReport(Response.Status.BAD_REQUEST),
-    InvalidUSchema(Response.Status.BAD_REQUEST),
-    InvalidUDerSchema(Response.Status.BAD_REQUEST),
-    InvalidUVirSchema(Response.Status.BAD_REQUEST),
-    InvalidRSchema(Response.Status.BAD_REQUEST),
-    InvalidRDerSchema(Response.Status.BAD_REQUEST),
-    InvalidRVirSchema(Response.Status.BAD_REQUEST),
-    InvalidMSchema(Response.Status.BAD_REQUEST),
-    InvalidMDerSchema(Response.Status.BAD_REQUEST),
-    InvalidMVirSchema(Response.Status.BAD_REQUEST),
-    InvalidCSchema(Response.Status.BAD_REQUEST),
+    InvalidPlainSchema(Response.Status.BAD_REQUEST),
+    InvalidDerSchema(Response.Status.BAD_REQUEST),
+    InvalidVirSchema(Response.Status.BAD_REQUEST),
     InvalidSchemaMapping(Response.Status.BAD_REQUEST),
-    InvalidSyncopeUser(Response.Status.BAD_REQUEST),
+    InvalidUser(Response.Status.BAD_REQUEST),
     InvalidExternalResource(Response.Status.BAD_REQUEST),
     InvalidNotification(Response.Status.BAD_REQUEST),
     InvalidPropagationTask(Response.Status.BAD_REQUEST),

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java
index 5fefcc9..7dd60d6 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java
@@ -35,7 +35,7 @@ public enum IntMappingType {
     // -------------------------
     // User attribute types (the same in UserMappingType)
     // -------------------------
-    UserSchema(AttributableType.USER),
+    UserPlainSchema(AttributableType.USER),
     UserDerivedSchema(AttributableType.USER),
     UserVirtualSchema(AttributableType.USER),
     UserId(AttributableType.USER),
@@ -44,7 +44,7 @@ public enum IntMappingType {
     // -------------------------
     // Role attribute types (the same in RoleMappingType)
     // -------------------------
-    RoleSchema(AttributableType.ROLE),
+    RolePlainSchema(AttributableType.ROLE),
     RoleDerivedSchema(AttributableType.ROLE),
     RoleVirtualSchema(AttributableType.ROLE),
     RoleId(AttributableType.ROLE),
@@ -53,7 +53,7 @@ public enum IntMappingType {
     // -------------------------
     // Membership attribute types (the same in MembershipMappingType)
     // -------------------------
-    MembershipSchema(AttributableType.MEMBERSHIP),
+    MembershipPlainSchema(AttributableType.MEMBERSHIP),
     MembershipDerivedSchema(AttributableType.MEMBERSHIP),
     MembershipVirtualSchema(AttributableType.MEMBERSHIP),
     MembershipId(AttributableType.MEMBERSHIP);
@@ -164,7 +164,7 @@ public enum IntMappingType {
      */
     private enum UserMappingType {
 
-        UserSchema,
+        UserPlainSchema,
         UserDerivedSchema,
         UserVirtualSchema,
         UserId,
@@ -178,7 +178,7 @@ public enum IntMappingType {
      */
     private enum RoleMappingType {
 
-        RoleSchema,
+        RolePlainSchema,
         RoleDerivedSchema,
         RoleVirtualSchema,
         RoleId,
@@ -192,7 +192,7 @@ public enum IntMappingType {
      */
     private enum MembershipMappingType {
 
-        MembershipSchema,
+        MembershipPlainSchema,
         MembershipDerivedSchema,
         MembershipVirtualSchema,
         MembershipId;

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/rest-api/pom.xml
----------------------------------------------------------------------
diff --git a/syncope620/common/rest-api/pom.xml b/syncope620/common/rest-api/pom.xml
index 967573e..addc3b9 100644
--- a/syncope620/common/rest-api/pom.xml
+++ b/syncope620/common/rest-api/pom.xml
@@ -73,6 +73,7 @@ under the License.
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-javadoc-plugin</artifactId>
+        <inherited>true</inherited>
         <executions>
           <execution>
             <id>attach-javadocs</id>

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
----------------------------------------------------------------------
diff --git a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
index 070f73c..1ab407d 100644
--- a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
+++ b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/CollectionWrapper.java
@@ -59,7 +59,7 @@ public final class CollectionWrapper {
         List<AuditLoggerName> respons = new ArrayList<AuditLoggerName>();
         for (LoggerTO l : logger) {
             try {
-                respons.add(AuditLoggerName.fromLoggerName(l.getName()));
+                respons.add(AuditLoggerName.fromLoggerName(l.getKey()));
             } catch (Exception ignore) {
                 // ignore
             }
@@ -71,7 +71,7 @@ public final class CollectionWrapper {
         List<LoggerTO> respons = new ArrayList<LoggerTO>();
         for (AuditLoggerName l : auditNames) {
             LoggerTO loggerTO = new LoggerTO();
-            loggerTO.setName(l.toLoggerName());
+            loggerTO.setKey(l.toLoggerName());
             loggerTO.setLevel(LoggerLevel.DEBUG);
             respons.add(loggerTO);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
----------------------------------------------------------------------
diff --git a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
index 715270b..20e58c6 100644
--- a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
+++ b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/RESTHeaders.java
@@ -77,7 +77,7 @@ public final class RESTHeaders {
     /**
      * Declares the type of exception being raised.
      *
-     * @see ClientExceptionType
+     * @see org.apache.syncope.common.lib.types.ClientExceptionType
      */
     public static final String ERROR_CODE = "X-Application-Error-Code";
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java
----------------------------------------------------------------------
diff --git a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java
index b8f2826..1e9f943 100644
--- a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java
+++ b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReportService.java
@@ -72,13 +72,13 @@ public interface ReportService extends JAXRSService {
     /**
      * Returns report execution with matching key.
      *
-     * @param executionId report execution id to be selected
+     * @param executionKey report execution id to be selected
      * @return report execution with matching key
      */
     @GET
-    @Path("executions/{executionId}")
+    @Path("executions/{executionKey}")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    ReportExecTO readExecution(@NotNull @PathParam("executionId") Long executionId);
+    ReportExecTO readExecution(@NotNull @PathParam("executionKey") Long executionKey);
 
     /**
      * Returns a paged list of all existing reports.
@@ -163,11 +163,11 @@ public interface ReportService extends JAXRSService {
     /**
      * Deletes report execution with matching key.
      *
-     * @param executionId key of execution report to be deleted
+     * @param executionKey key of execution report to be deleted
      */
     @DELETE
-    @Path("executions/{executionId}")
-    void deleteExecution(@NotNull @PathParam("executionId") Long executionId);
+    @Path("executions/{executionKey}")
+    void deleteExecution(@NotNull @PathParam("executionKey") Long executionKey);
 
     /**
      * Executes the report with matching key.
@@ -183,13 +183,13 @@ public interface ReportService extends JAXRSService {
     /**
      * Exports the report execution with matching key in the requested format.
      *
-     * @param executionId key of execution report to be selected
+     * @param executionKey key of execution report to be selected
      * @param fmt file-format selection
      * @return a stream for content download
      */
     @GET
-    @Path("executions/{executionId}/stream")
+    @Path("executions/{executionKey}/stream")
     @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    Response exportExecutionResult(@NotNull @PathParam("executionId") Long executionId,
+    Response exportExecutionResult(@NotNull @PathParam("executionKey") Long executionKey,
             @QueryParam("format") ReportExecExportFormat fmt);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
----------------------------------------------------------------------
diff --git a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
index 9b62de3..044025b 100644
--- a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
+++ b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
@@ -58,7 +58,7 @@ public interface ResourceService extends JAXRSService {
      * @return connector object from the external resource, for the given type and key
      */
     @GET
-    @Path("{resourceKey}/{type}/{id}")
+    @Path("{resourceKey}/{type}/{key}")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
     ConnObjectTO getConnectorObject(@NotNull @PathParam("resourceKey") String resourceKey,
             @NotNull @PathParam("type") SubjectType type, @NotNull @PathParam("key") Long key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java
----------------------------------------------------------------------
diff --git a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java
index f0bbf08..5d1b737 100644
--- a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java
+++ b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java
@@ -264,7 +264,7 @@ public interface RoleService extends JAXRSService {
      * @param type resource association action type
      * @param resourceNames external resources to be used for propagation-related operations
      * @return <tt>Response</tt> object featuring
-     * {@link org.apache.syncope.common.reqres.BulkActionResult} as <tt>Entity</tt>
+     * {@link BulkActionResult} as <tt>Entity</tt>
      */
     @Descriptions({
         @Description(target = DocTarget.RESPONSE,
@@ -284,8 +284,7 @@ public interface RoleService extends JAXRSService {
      * @param roleKey role id.
      * @param type resource association action type
      * @param resourceNames external resources to be used for propagation-related operations
-     * @return <tt>Response</tt> object featuring {@link org.apache.syncope.common.reqres.BulkActionResult}
-     * as <tt>Entity</tt>
+     * @return <tt>Response</tt> object featuring {@link BulkActionResult} as <tt>Entity</tt>
      */
     @Descriptions({
         @Description(target = DocTarget.RESPONSE,

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserSelfService.java
----------------------------------------------------------------------
diff --git a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserSelfService.java b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserSelfService.java
index cd3a302..75b6af2 100644
--- a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserSelfService.java
+++ b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserSelfService.java
@@ -48,9 +48,9 @@ public interface UserSelfService extends JAXRSService {
      *
      * @return <tt>Response</tt> contains special Syncope HTTP header indicating if user self registration and / or
      * password reset is allowed
-     * @see org.apache.syncope.common.types.RESTHeaders#SELFREG_ALLOWED
-     * @see org.apache.syncope.common.types.RESTHeaders#PWDRESET_ALLOWED
-     * @see org.apache.syncope.common.types.RESTHeaders#PWDRESET_NEEDS_SECURITYQUESTIONS
+     * @see org.apache.syncope.common.rest.api.RESTHeaders#SELFREG_ALLOWED
+     * @see org.apache.syncope.common.rest.api.RESTHeaders#PWDRESET_ALLOWED
+     * @see org.apache.syncope.common.rest.api.RESTHeaders#PWDRESET_NEEDS_SECURITYQUESTIONS
      */
     @Descriptions({
         @Description(target = DocTarget.RESPONSE,

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java
----------------------------------------------------------------------
diff --git a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java
index 709ab37..7b8aded 100644
--- a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java
+++ b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java
@@ -46,8 +46,8 @@ public interface WorkflowService extends JAXRSService {
      * @param kind user or role
      * @return <tt>Response</tt> contains special syncope HTTP header indicating if Activiti is enabled for
      * users / roles
-     * @see org.apache.syncope.common.types.RESTHeaders#ACTIVITI_USER_ENABLED
-     * @see org.apache.syncope.common.types.RESTHeaders#ACTIVITI_ROLE_ENABLED
+     * @see org.apache.syncope.common.rest.api.RESTHeaders#ACTIVITI_USER_ENABLED
+     * @see org.apache.syncope.common.rest.api.RESTHeaders#ACTIVITI_ROLE_ENABLED
      */
     @Descriptions({
         @Description(target = DocTarget.RESPONSE,

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/fit/reference/pom.xml
----------------------------------------------------------------------
diff --git a/syncope620/fit/reference/pom.xml b/syncope620/fit/reference/pom.xml
index 148c71a..564d8f0 100644
--- a/syncope620/fit/reference/pom.xml
+++ b/syncope620/fit/reference/pom.xml
@@ -132,6 +132,24 @@ under the License.
       <groupId>org.webjars</groupId>
       <artifactId>highlightjs</artifactId>
     </dependency>
+    
+    <!-- TEST -->
+    <dependency>
+      <groupId>org.apache.syncope.client</groupId>
+      <artifactId>syncope-client-lib</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
@@ -161,6 +179,45 @@ under the License.
       </plugin>
       
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <inherited>true</inherited>
+        <executions>
+          <execution>
+            <id>setupCSV</id>
+            <phase>pre-integration-test</phase>
+            <configuration>
+              <target>
+                <copy file="${project.build.directory}/test-classes/test.csv" todir="${test.csvdir.path}" overwrite="true"/>
+              </target>
+            </configuration>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-failsafe-plugin</artifactId>
+        <inherited>true</inherited>
+        <configuration>
+          <systemPropertyVariables>
+            <jaxrsContentType>${jaxrs.content.type}</jaxrsContentType>
+          </systemPropertyVariables>
+        </configuration>
+        <executions>
+          <execution>
+            <id>verify</id>
+            <goals>
+              <goal>verify</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      
+      <plugin>
         <groupId>org.codehaus.cargo</groupId>
         <artifactId>cargo-maven2-plugin</artifactId>
         <inherited>true</inherited>
@@ -270,12 +327,22 @@ under the License.
         <filtering>true</filtering>
       </resource>
     </resources>
+    <testResources>
+      <testResource>
+        <directory>src/test/resources</directory>
+        <filtering>true</filtering>
+      </testResource>
+    </testResources>
   </build>
   
   <profiles>
     <profile>
       <id>debug</id>
 
+      <properties>
+        <skipTests>true</skipTests>
+      </properties>
+
       <build>
         <defaultGoal>clean verify cargo:run</defaultGoal>
 
@@ -306,5 +373,59 @@ under the License.
         </plugins>
       </build>
     </profile>
+    
+    <profile>
+      <id>skipTests</id>
+
+      <dependencies>
+        <dependency>
+          <groupId>com.h2database</groupId>
+          <artifactId>h2</artifactId>
+        </dependency>
+      </dependencies>
+
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-failsafe-plugin</artifactId>
+            <inherited>true</inherited>
+            <configuration>
+              <skipTests>${skipTests}</skipTests>
+            </configuration>
+          </plugin>
+
+          <plugin>
+            <groupId>org.codehaus.cargo</groupId>
+            <artifactId>cargo-maven2-plugin</artifactId>
+            <inherited>true</inherited>
+            <configuration>
+              <deployables>
+                <deployable>
+                  <location>${project.build.directory}/${project.build.finalName}.war</location>
+                </deployable>
+              </deployables>
+            </configuration>
+            <executions>
+              <execution>
+                <id>install-container</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>install</goal>
+                </goals>
+              </execution>
+              <execution>
+                <id>start-container</id>
+                <phase>none</phase>
+              </execution>
+              <execution>
+                <id>stop-container</id>
+                <phase>none</phase>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
   </profiles>
 </project>

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/DoubleValueAttributableTransformer.java
----------------------------------------------------------------------
diff --git a/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/DoubleValueAttributableTransformer.java b/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/DoubleValueAttributableTransformer.java
new file mode 100644
index 0000000..da25a34
--- /dev/null
+++ b/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/DoubleValueAttributableTransformer.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.fit.server.reference;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.common.lib.mod.AbstractAttributableMod;
+import org.apache.syncope.common.lib.mod.AttrMod;
+import org.apache.syncope.common.lib.to.AbstractAttributableTO;
+import org.apache.syncope.common.lib.to.AttrTO;
+import org.apache.syncope.server.provisioning.api.AttributableTransformer;
+
+/**
+ * Class for integration tests: transform (by making it double) any attribute value for defined schema.
+ */
+public class DoubleValueAttributableTransformer implements AttributableTransformer {
+
+    private static final String NAME = "makeItDouble";
+
+    @Override
+    public <T extends AbstractAttributableTO> T transform(final T input) {
+        for (AttrTO attr : input.getPlainAttrs()) {
+            if (NAME.equals(attr.getSchema())) {
+                List<String> values = new ArrayList<>(attr.getValues().size());
+                for (String value : attr.getValues()) {
+                    try {
+                        values.add(String.valueOf(2 * Long.valueOf(value)));
+                    } catch (NumberFormatException e) {
+                        // ignore
+                    }
+                }
+                attr.getValues().clear();
+                attr.getValues().addAll(values);
+            }
+        }
+
+        return input;
+    }
+
+    @Override
+    public <T extends AbstractAttributableMod> T transform(final T input) {
+        for (AttrMod attr : input.getPlainAttrsToUpdate()) {
+            if (NAME.equals(attr.getSchema())) {
+                List<String> values = new ArrayList<>(attr.getValuesToBeAdded().size());
+                for (String value : attr.getValuesToBeAdded()) {
+                    try {
+                        values.add(String.valueOf(2 * Long.valueOf(value)));
+                    } catch (NumberFormatException e) {
+                        // ignore
+                    }
+                }
+                attr.getValuesToBeAdded().clear();
+                attr.getValuesToBeAdded().addAll(values);
+            }
+        }
+
+        return input;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/TestSyncActions.java
----------------------------------------------------------------------
diff --git a/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/TestSyncActions.java b/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/TestSyncActions.java
new file mode 100644
index 0000000..01da2c9
--- /dev/null
+++ b/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/TestSyncActions.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.fit.server.reference;
+
+import org.apache.syncope.common.lib.mod.AbstractSubjectMod;
+import org.apache.syncope.common.lib.mod.AttrMod;
+import org.apache.syncope.common.lib.to.AbstractSubjectTO;
+import org.apache.syncope.common.lib.to.AttrTO;
+import org.apache.syncope.server.provisioning.api.sync.ProvisioningProfile;
+import org.apache.syncope.server.provisioning.java.sync.DefaultSyncActions;
+import org.identityconnectors.framework.common.objects.SyncDelta;
+import org.quartz.JobExecutionException;
+
+public class TestSyncActions extends DefaultSyncActions {
+
+    private int counter = 0;
+
+    @Override
+    public <T extends AbstractSubjectTO> SyncDelta beforeProvision(
+            final ProvisioningProfile<?, ?> profile,
+            final SyncDelta delta,
+            final T subject) throws JobExecutionException {
+
+        AttrTO attrTO = null;
+        for (int i = 0; i < subject.getPlainAttrs().size(); i++) {
+            if ("fullname".equals(subject.getPlainAttrs().get(i).getSchema())) {
+                attrTO = subject.getPlainAttrs().get(i);
+            }
+        }
+        if (attrTO == null) {
+            attrTO = new AttrTO();
+            attrTO.setSchema("fullname");
+            subject.getPlainAttrs().add(attrTO);
+        }
+        attrTO.getValues().clear();
+        attrTO.getValues().add(String.valueOf(counter++));
+
+        return delta;
+    }
+
+    @Override
+    public <T extends AbstractSubjectTO, K extends AbstractSubjectMod> SyncDelta beforeUpdate(
+            final ProvisioningProfile<?, ?> profile,
+            final SyncDelta delta,
+            final T subject,
+            final K subjectMod) throws JobExecutionException {
+
+        subjectMod.getPlainAttrsToRemove().add("fullname");
+
+        AttrMod fullnameMod = null;
+        for (AttrMod attrMod : subjectMod.getPlainAttrsToUpdate()) {
+            if ("fullname".equals(attrMod.getSchema())) {
+                fullnameMod = attrMod;
+            }
+        }
+        if (fullnameMod == null) {
+            fullnameMod = new AttrMod();
+            fullnameMod.setSchema("fullname");
+            subjectMod.getPlainAttrsToUpdate().add(fullnameMod);
+        }
+
+        fullnameMod.getValuesToBeAdded().clear();
+        fullnameMod.getValuesToBeAdded().add(String.valueOf(counter++));
+
+        return delta;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/TestSyncRule.java
----------------------------------------------------------------------
diff --git a/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/TestSyncRule.java b/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/TestSyncRule.java
new file mode 100644
index 0000000..8454ec6
--- /dev/null
+++ b/syncope620/fit/reference/src/main/java/org/apache/syncope/fit/server/reference/TestSyncRule.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.fit.server.reference;
+
+import org.apache.syncope.server.persistence.api.dao.search.AttributeCond;
+import org.apache.syncope.server.persistence.api.dao.search.SearchCond;
+import org.apache.syncope.server.provisioning.api.sync.SyncCorrelationRule;
+import org.identityconnectors.framework.common.objects.ConnectorObject;
+
+public class TestSyncRule implements SyncCorrelationRule {
+
+    @Override
+    public SearchCond getSearchCond(ConnectorObject connObj) {
+        AttributeCond cond = new AttributeCond();
+        cond.setSchema("email");
+        cond.setType(AttributeCond.Type.EQ);
+        cond.setExpression(connObj.getName().getNameValue());
+
+        return SearchCond.getLeafCond(cond);
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/fit/reference/src/main/resources/connid.properties
----------------------------------------------------------------------
diff --git a/syncope620/fit/reference/src/main/resources/connid.properties b/syncope620/fit/reference/src/main/resources/connid.properties
index 54d83c3..40d649c 100644
--- a/syncope620/fit/reference/src/main/resources/connid.properties
+++ b/syncope620/fit/reference/src/main/resources/connid.properties
@@ -16,3 +16,8 @@
 # under the License.
 connid.locations=${connid.location},\
 connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}
+
+## for test only
+testdb.url=${testdb.url}
+connid.soap.version=${connid.soap.version}
+connid.db.table.version=${connid.db.table.version}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/fit/reference/src/main/resources/logic.properties
----------------------------------------------------------------------
diff --git a/syncope620/fit/reference/src/main/resources/logic.properties b/syncope620/fit/reference/src/main/resources/logic.properties
new file mode 100644
index 0000000..2477c4b
--- /dev/null
+++ b/syncope620/fit/reference/src/main/resources/logic.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+attributableTransformer=org.apache.syncope.fit.server.reference.DoubleValueAttributableTransformer
+logicInvocationHandler=org.apache.syncope.server.logic.LogicInvocationHandler

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/fit/reference/src/test/java/org/apache/syncope/fit/server/reference/AbstractITCase.java
----------------------------------------------------------------------
diff --git a/syncope620/fit/reference/src/test/java/org/apache/syncope/fit/server/reference/AbstractITCase.java b/syncope620/fit/reference/src/test/java/org/apache/syncope/fit/server/reference/AbstractITCase.java
new file mode 100644
index 0000000..fc81657
--- /dev/null
+++ b/syncope620/fit/reference/src/test/java/org/apache/syncope/fit/server/reference/AbstractITCase.java
@@ -0,0 +1,365 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.fit.server.reference;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.io.InputStream;
+import java.net.URI;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Properties;
+import java.util.UUID;
+import javax.naming.Context;
+import javax.naming.directory.InitialDirContext;
+import javax.sql.DataSource;
+import javax.ws.rs.core.Response;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
+import org.apache.syncope.common.lib.mod.AttrMod;
+import org.apache.syncope.common.lib.mod.RoleMod;
+import org.apache.syncope.common.lib.mod.UserMod;
+import org.apache.syncope.common.lib.to.AbstractPolicyTO;
+import org.apache.syncope.common.lib.to.AbstractSchemaTO;
+import org.apache.syncope.common.lib.to.AttrTO;
+import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.to.RoleTO;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.types.AttributableType;
+import org.apache.syncope.common.lib.types.ConnConfProperty;
+import org.apache.syncope.common.lib.types.SchemaType;
+import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.service.ConfigurationService;
+import org.apache.syncope.common.rest.api.service.ConnectorService;
+import org.apache.syncope.common.rest.api.service.EntitlementService;
+import org.apache.syncope.common.rest.api.service.LoggerService;
+import org.apache.syncope.common.rest.api.service.NotificationService;
+import org.apache.syncope.common.rest.api.service.PolicyService;
+import org.apache.syncope.common.rest.api.service.ReportService;
+import org.apache.syncope.common.rest.api.service.ResourceService;
+import org.apache.syncope.common.rest.api.service.RoleService;
+import org.apache.syncope.common.rest.api.service.SchemaService;
+import org.apache.syncope.common.rest.api.service.SecurityQuestionService;
+import org.apache.syncope.common.rest.api.service.TaskService;
+import org.apache.syncope.common.rest.api.service.UserSelfService;
+import org.apache.syncope.common.rest.api.service.UserService;
+import org.apache.syncope.common.rest.api.service.UserWorkflowService;
+import org.apache.syncope.common.rest.api.service.WorkflowService;
+import org.identityconnectors.common.security.Encryptor;
+import org.junit.BeforeClass;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = { "classpath:testJDBCContext.xml" })
+public abstract class AbstractITCase {
+
+    /**
+     * Logger.
+     */
+    protected static final Logger LOG = LoggerFactory.getLogger(AbstractITCase.class);
+
+    protected static final String ADMIN_UNAME = "admin";
+
+    protected static final String ADMIN_PWD = "password";
+
+    private static final String ADDRESS = "http://localhost:9080/syncope/rest";
+
+    private static final String ENV_KEY_CONTENT_TYPE = "jaxrsContentType";
+
+    protected static final SyncopeClientFactoryBean clientFactory = new SyncopeClientFactoryBean().setAddress(ADDRESS);
+
+    protected static final String RESOURCE_NAME_WS1 = "ws-target-resource-1";
+
+    protected static final String RESOURCE_NAME_WS2 = "ws-target-resource-2";
+
+    protected static final String RESOURCE_NAME_LDAP = "resource-ldap";
+
+    protected static final String RESOURCE_NAME_TESTDB = "resource-testdb";
+
+    protected static final String RESOURCE_NAME_TESTDB2 = "resource-testdb2";
+
+    protected static final String RESOURCE_NAME_CSV = "resource-csv";
+
+    protected static final String RESOURCE_NAME_DBSYNC = "resource-db-sync";
+
+    protected static final String RESOURCE_NAME_DBVIRATTR = "resource-db-virattr";
+
+    protected static final String RESOURCE_NAME_NOPROPAGATION = "ws-target-resource-nopropagation";
+
+    protected static final String RESOURCE_NAME_NOPROPAGATION2 = "ws-target-resource-nopropagation2";
+
+    protected static final String RESOURCE_NAME_NOPROPAGATION3 = "ws-target-resource-nopropagation3";
+
+    protected static final String RESOURCE_NAME_NOPROPAGATION4 = "ws-target-resource-nopropagation4";
+
+    protected static final String RESOURCE_NAME_RESETSYNCTOKEN = "ws-target-resource-update-resetsynctoken";
+
+    protected static final String RESOURCE_NAME_TIMEOUT = "ws-target-resource-timeout";
+
+    protected static final String RESOURCE_NAME_MAPPINGS1 = "ws-target-resource-list-mappings-1";
+
+    protected static final String RESOURCE_NAME_MAPPINGS2 = "ws-target-resource-list-mappings-2";
+
+    protected static final String RESOURCE_NAME_CREATE = "ws-target-resource-create";
+
+    protected static final String RESOURCE_NAME_CREATE_SINGLE = "ws-target-resource-create-single";
+
+    protected static final String RESOURCE_NAME_CREATE_WRONG = "ws-target-resource-create-wrong";
+
+    protected static final String RESOURCE_NAME_DELETE = "ws-target-resource-delete";
+
+    protected static final String RESOURCE_NAME_UPDATE = "ws-target-resource-update";
+
+    protected static final String RESOURCE_NAME_CREATE_NONE = "ws-target-resource-create-none";
+
+    protected static String ANONYMOUS_UNAME;
+
+    protected static String ANONYMOUS_KEY;
+
+    protected static SyncopeClient adminClient;
+
+    protected static UserService userService;
+
+    protected static UserSelfService userSelfService;
+
+    protected static UserWorkflowService userWorkflowService;
+
+    protected static RoleService roleService;
+
+    protected static ResourceService resourceService;
+
+    protected static EntitlementService entitlementService;
+
+    protected static ConfigurationService configurationService;
+
+    protected static ConnectorService connectorService;
+
+    protected static LoggerService loggerService;
+
+    protected static ReportService reportService;
+
+    protected static TaskService taskService;
+
+    protected static WorkflowService workflowService;
+
+    protected static NotificationService notificationService;
+
+    protected static SchemaService schemaService;
+
+    protected static PolicyService policyService;
+
+    protected static SecurityQuestionService securityQuestionService;
+
+    @Autowired
+    protected DataSource testDataSource;
+
+    @BeforeClass
+    public static void securitySetup() {
+        InputStream propStream = null;
+        try {
+            propStream = Encryptor.class.getResourceAsStream("/security.properties");
+            Properties props = new Properties();
+            props.load(propStream);
+
+            ANONYMOUS_UNAME = props.getProperty("anonymousUser");
+            ANONYMOUS_KEY = props.getProperty("anonymousKey");
+        } catch (Exception e) {
+            LOG.error("Could not read secretKey", e);
+        } finally {
+            IOUtils.closeQuietly(propStream);
+        }
+
+        assertNotNull(ANONYMOUS_UNAME);
+        assertNotNull(ANONYMOUS_KEY);
+    }
+
+    @BeforeClass
+    public static void restSetup() {
+        final String envContentType = System.getProperty(ENV_KEY_CONTENT_TYPE);
+        if (StringUtils.isNotBlank(envContentType)) {
+            clientFactory.setContentType(envContentType);
+        }
+        LOG.info("Performing IT with content type {}", clientFactory.getContentType().getMediaType());
+
+        adminClient = clientFactory.create(ADMIN_UNAME, ADMIN_PWD);
+
+        userService = adminClient.getService(UserService.class);
+        userSelfService = adminClient.getService(UserSelfService.class);
+        userWorkflowService = adminClient.getService(UserWorkflowService.class);
+        roleService = adminClient.getService(RoleService.class);
+        resourceService = adminClient.getService(ResourceService.class);
+        entitlementService = adminClient.getService(EntitlementService.class);
+        configurationService = adminClient.getService(ConfigurationService.class);
+        connectorService = adminClient.getService(ConnectorService.class);
+        loggerService = adminClient.getService(LoggerService.class);
+        reportService = adminClient.getService(ReportService.class);
+        taskService = adminClient.getService(TaskService.class);
+        policyService = adminClient.getService(PolicyService.class);
+        workflowService = adminClient.getService(WorkflowService.class);
+        notificationService = adminClient.getService(NotificationService.class);
+        schemaService = adminClient.getService(SchemaService.class);
+        securityQuestionService = adminClient.getService(SecurityQuestionService.class);
+    }
+
+    protected static String getUUIDString() {
+        return UUID.randomUUID().toString().substring(0, 8);
+    }
+
+    protected static AttrTO attrTO(final String schema, final String value) {
+        AttrTO attr = new AttrTO();
+        attr.setSchema(schema);
+        attr.getValues().add(value);
+        return attr;
+    }
+
+    protected static AttrMod attrMod(final String schema, final String valueToBeAdded) {
+        AttrMod attr = new AttrMod();
+        attr.setSchema(schema);
+        attr.getValuesToBeAdded().add(valueToBeAdded);
+        return attr;
+    }
+
+    protected UserTO createUser(final UserTO userTO) {
+        return createUser(userTO, true);
+    }
+
+    protected UserTO createUser(final UserTO userTO, final boolean storePassword) {
+        Response response = userService.create(userTO, storePassword);
+        if (response.getStatusInfo().getStatusCode() != Response.Status.CREATED.getStatusCode()) {
+            Exception ex = clientFactory.getExceptionMapper().fromResponse(response);
+            if (ex != null) {
+                throw (RuntimeException) ex;
+            }
+        }
+        return response.readEntity(UserTO.class);
+    }
+
+    protected UserTO readUser(final String username) {
+        return userService.read(Long.valueOf(
+                userService.getUserId(username).getHeaderString(RESTHeaders.USER_ID)));
+    }
+
+    protected UserTO updateUser(final UserMod userMod) {
+        return userService.update(userMod.getKey(), userMod).readEntity(UserTO.class);
+    }
+
+    protected UserTO deleteUser(final Long id) {
+        return userService.delete(id).readEntity(UserTO.class);
+    }
+
+    public <T> T getObject(final URI location, final Class<?> serviceClass, final Class<T> resultClass) {
+        WebClient webClient = WebClient.fromClient(WebClient.client(adminClient.getService(serviceClass)));
+        webClient.accept(clientFactory.getContentType().getMediaType()).to(location.toASCIIString(), false);
+
+        return webClient.get(resultClass);
+    }
+
+    @SuppressWarnings("unchecked")
+    protected <T extends AbstractSchemaTO> T createSchema(final AttributableType kind,
+            final SchemaType type, final T schemaTO) {
+
+        Response response = schemaService.create(kind, type, schemaTO);
+        if (response.getStatusInfo().getStatusCode() != Response.Status.CREATED.getStatusCode()) {
+            Exception ex = clientFactory.getExceptionMapper().fromResponse(response);
+            if (ex != null) {
+                throw (RuntimeException) ex;
+            }
+        }
+
+        return (T) getObject(response.getLocation(), SchemaService.class, schemaTO.getClass());
+    }
+
+    protected RoleTO createRole(final RoleTO newRoleTO) {
+        Response response = roleService.create(newRoleTO);
+        if (response.getStatusInfo().getStatusCode() != Response.Status.CREATED.getStatusCode()) {
+            Exception ex = clientFactory.getExceptionMapper().fromResponse(response);
+            if (ex != null) {
+                throw (RuntimeException) ex;
+            }
+        }
+        return getObject(response.getLocation(), RoleService.class, RoleTO.class);
+    }
+
+    protected RoleTO updateRole(final RoleMod roleMod) {
+        return roleService.update(roleMod.getKey(), roleMod).readEntity(RoleTO.class);
+    }
+
+    protected RoleTO deleteRole(final Long id) {
+        return roleService.delete(id).readEntity(RoleTO.class);
+    }
+
+    @SuppressWarnings("unchecked")
+    protected <T extends AbstractPolicyTO> T createPolicy(final T policy) {
+        Response response = policyService.create(policy);
+        if (response.getStatusInfo().getStatusCode() != Response.Status.CREATED.getStatusCode()) {
+            Exception ex = clientFactory.getExceptionMapper().fromResponse(response);
+            if (ex != null) {
+                throw (RuntimeException) ex;
+            }
+        }
+        return (T) getObject(response.getLocation(), PolicyService.class, policy.getClass());
+    }
+
+    protected ResourceTO createResource(final ResourceTO resourceTO) {
+        Response response = resourceService.create(resourceTO);
+        if (response.getStatusInfo().getStatusCode() != Response.Status.CREATED.getStatusCode()) {
+            Exception ex = clientFactory.getExceptionMapper().fromResponse(response);
+            if (ex != null) {
+                throw (RuntimeException) ex;
+            }
+        }
+        return getObject(response.getLocation(), ResourceService.class, ResourceTO.class);
+    }
+
+    protected Object getLdapRemoteObject(final String objectDn) {
+        return getLdapRemoteObject(null, null, objectDn);
+    }
+
+    @SuppressWarnings({ "unchecked", "rawtypes", "UseOfObsoleteCollectionType" })
+    protected Object getLdapRemoteObject(final String bindDn, final String bindPwd, final String objectDn) {
+        ResourceTO ldapRes = resourceService.read(RESOURCE_NAME_LDAP);
+        final Map<String, ConnConfProperty> ldapConnConf =
+                connectorService.read(ldapRes.getConnectorId()).getConfigurationMap();
+
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+        env.put(Context.PROVIDER_URL, "ldap://" + ldapConnConf.get("host").getValues().get(0)
+                + ":" + ldapConnConf.get("port").getValues().get(0) + "/");
+        env.put(Context.SECURITY_AUTHENTICATION, "simple");
+        env.put(Context.SECURITY_PRINCIPAL,
+                bindDn == null ? ldapConnConf.get("principal").getValues().get(0) : bindDn);
+        env.put(Context.SECURITY_CREDENTIALS,
+                bindPwd == null ? ldapConnConf.get("credentials").getValues().get(0) : bindPwd);
+
+        try {
+            final InitialDirContext ctx = new InitialDirContext(env);
+            return ctx.lookup(objectDn);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/80589a1b/syncope620/fit/reference/src/test/java/org/apache/syncope/fit/server/reference/ActivitiDetector.java
----------------------------------------------------------------------
diff --git a/syncope620/fit/reference/src/test/java/org/apache/syncope/fit/server/reference/ActivitiDetector.java b/syncope620/fit/reference/src/test/java/org/apache/syncope/fit/server/reference/ActivitiDetector.java
new file mode 100644
index 0000000..ae35a23
--- /dev/null
+++ b/syncope620/fit/reference/src/test/java/org/apache/syncope/fit/server/reference/ActivitiDetector.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.fit.server.reference;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: REMOVE!!!
+public class ActivitiDetector {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ActivitiDetector.class);
+
+    public static boolean isActivitiEnabledForUsers() {
+        return false;
+    }
+
+    public static boolean isActivitiEnabledForRoles() {
+        return false;
+    }
+}