You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by md...@apache.org on 2015/02/19 12:50:12 UTC

[1/4] syncope git commit: [SYNCOPE-645] Provide a validator for resource user mapping

Repository: syncope
Updated Branches:
  refs/heads/master fc06e742d -> 9cbeffd39


[SYNCOPE-645] Provide a validator for resource user mapping


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

Branch: refs/heads/master
Commit: 8c38a41fff9c87f7eb62d43303926094f53909de
Parents: d01ed12
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Thu Feb 19 09:35:29 2015 +0100
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Thu Feb 19 09:35:29 2015 +0100

----------------------------------------------------------------------
 .../entity/ExternalResourceValidator.java       | 12 ++++++++++
 .../core/persistence/dao/ResourceTest.java      | 23 ++++++++++++++++++++
 2 files changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/8c38a41f/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java b/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
index eed7add..124033d 100644
--- a/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
+++ b/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
@@ -20,11 +20,13 @@ package org.apache.syncope.core.persistence.validation.entity;
 
 import javax.validation.ConstraintValidatorContext;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.common.types.AttributableType;
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.AbstractMapping;
 import org.apache.syncope.core.persistence.beans.AbstractMappingItem;
 import org.apache.syncope.core.persistence.beans.ExternalResource;
 import org.apache.syncope.core.propagation.PropagationActions;
+import org.apache.syncope.core.persistence.beans.user.UMapping;
 
 public class ExternalResourceValidator extends AbstractValidator<ExternalResourceCheck, ExternalResource> {
 
@@ -74,6 +76,16 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc
             return false;
         }
 
+        final AbstractMappingItem accountId = mapping.getAccountIdItem();
+        if (mapping instanceof UMapping 
+                && AttributableType.ROLE == accountId.getIntMappingType().getAttributableType()) {
+            context.buildConstraintViolationWithTemplate(
+                    getTemplate(EntityViolationType.InvalidMapping,
+                            "Role attribute as accountId is not permitted")).
+                    addNode("attributableType").addConstraintViolation();
+            return false;
+        }
+
         boolean isValid = true;
 
         int passwords = 0;

http://git-wip-us.apache.org/repos/asf/syncope/blob/8c38a41f/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java b/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java
index cd6f735..b5a7527 100644
--- a/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java
+++ b/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java
@@ -263,4 +263,27 @@ public class ResourceTest extends AbstractDAOTest {
             assertTrue(e.hasViolation(EntityViolationType.InvalidName));
         }
     }
+
+    @Test(expected = InvalidEntityException.class)
+    public void issueSYNCOPE645() {
+        ExternalResource resource = new ExternalResource();
+        resource.setName("ws-target-resource-basic-save-invalid");
+
+        ConnInstance connector = resourceDAO.find("ws-target-resource-1").getConnector();
+        resource.setConnector(connector);
+
+        UMapping mapping = new UMapping();
+        resource.setUmapping(mapping);
+
+        final UMappingItem item = new UMappingItem();
+        item.setIntAttrName("icon");
+        item.setExtAttrName("icon");
+        item.setIntMappingType(IntMappingType.RoleSchema);
+        item.setPurpose(MappingPurpose.BOTH);
+        mapping.setAccountIdItem(item);
+
+        // save the resource
+        ExternalResource actual = resourceDAO.save(resource);
+        assertNotNull(actual);
+    }
 }


[3/4] syncope git commit: [SYNCOPE-645] Merge from 1_1_X

Posted by md...@apache.org.
[SYNCOPE-645] Merge from 1_1_X


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

Branch: refs/heads/master
Commit: 583e83905f533293ee621e9fce0d82fecfdb1938
Parents: bef822f
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Thu Feb 19 11:37:00 2015 +0100
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Thu Feb 19 11:37:00 2015 +0100

----------------------------------------------------------------------
 .../persistence/validation/entity/ExternalResourceValidator.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/583e8390/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java b/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
index 5fa4417..7c69b05 100644
--- a/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
+++ b/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
@@ -82,7 +82,7 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc
             context.buildConstraintViolationWithTemplate(
                     getTemplate(EntityViolationType.InvalidMapping,
                             "Role attribute as accountId is not permitted")).
-                    addNode("attributableType").addConstraintViolation();
+                    addPropertyNode("attributableType").addConstraintViolation();
             return false;
         }
 


[4/4] syncope git commit: [SYNCOPE-645] Merge from 1_2_X

Posted by md...@apache.org.
[SYNCOPE-645] Merge from 1_2_X


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

Branch: refs/heads/master
Commit: 9cbeffd396b76cdd52768145be1cb9a5460211a8
Parents: fc06e74 583e839
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Thu Feb 19 12:11:38 2015 +0100
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Thu Feb 19 12:11:38 2015 +0100

----------------------------------------------------------------------
 .../entity/ExternalResourceValidator.java       | 12 ++++++++++
 .../persistence/jpa/entity/ResourceTest.java    | 23 ++++++++++++++++++++
 2 files changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/9cbeffd3/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
----------------------------------------------------------------------
diff --cc core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
index 1d512bb,0000000..2cc90f0
mode 100644,000000..100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java
@@@ -1,130 -1,0 +1,142 @@@
 +/*
 + * 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.core.persistence.jpa.validation.entity;
 +
 +import javax.validation.ConstraintValidatorContext;
 +import org.apache.commons.lang3.StringUtils;
++import org.apache.syncope.common.lib.types.AttributableType;
 +import org.apache.syncope.common.lib.types.EntityViolationType;
 +import org.apache.syncope.core.persistence.api.entity.ExternalResource;
 +import org.apache.syncope.core.persistence.api.entity.Mapping;
 +import org.apache.syncope.core.persistence.api.entity.MappingItem;
 +import org.apache.syncope.core.provisioning.api.propagation.PropagationActions;
++import org.apache.syncope.core.persistence.api.entity.user.UMapping;
 +
 +public class ExternalResourceValidator extends AbstractValidator<ExternalResourceCheck, ExternalResource> {
 +
 +    private boolean isValid(final MappingItem item, final ConstraintValidatorContext context) {
 +        if (StringUtils.isBlank(item.getExtAttrName())) {
 +            context.buildConstraintViolationWithTemplate(
 +                    getTemplate(EntityViolationType.InvalidMapping, item + ".extAttrName is null")).
 +                    addPropertyNode("extAttrName").addConstraintViolation();
 +
 +            return false;
 +        }
 +
 +        if (StringUtils.isBlank(item.getIntAttrName())) {
 +            context.buildConstraintViolationWithTemplate(
 +                    getTemplate(EntityViolationType.InvalidMapping, item + ".intAttrName is null")).
 +                    addPropertyNode("intAttrName").addConstraintViolation();
 +
 +            return false;
 +        }
 +
 +        if (item.getPurpose() == null) {
 +            context.buildConstraintViolationWithTemplate(
 +                    getTemplate(EntityViolationType.InvalidMapping, item + ".purpose is null")).
 +                    addPropertyNode("purpose").addConstraintViolation();
 +
 +            return false;
 +        }
 +
 +        return true;
 +    }
 +
 +    private boolean isValid(final Mapping<?> mapping, final ConstraintValidatorContext context) {
 +        if (mapping == null) {
 +            return true;
 +        }
 +
 +        int accountIds = 0;
 +        for (MappingItem item : mapping.getItems()) {
 +            if (item.isAccountid()) {
 +                accountIds++;
 +            }
 +        }
 +        if (accountIds != 1) {
 +            context.buildConstraintViolationWithTemplate(
 +                    getTemplate(EntityViolationType.InvalidMapping, "One and only one accountId mapping is needed")).
 +                    addPropertyNode("accountId.size").addConstraintViolation();
 +            return false;
 +        }
 +
++        final MappingItem accountId = mapping.getAccountIdItem();
++        if (mapping instanceof UMapping
++                && AttributableType.ROLE == accountId.getIntMappingType().getAttributableType()) {
++            context.buildConstraintViolationWithTemplate(
++                    getTemplate(EntityViolationType.InvalidMapping,
++                            "Role attribute as accountId is not permitted")).
++                    addPropertyNode("attributableType").addConstraintViolation();
++            return false;
++        }
++
 +        boolean isValid = true;
 +
 +        int passwords = 0;
 +        for (MappingItem item : mapping.getItems()) {
 +            isValid &= isValid(item, context);
 +
 +            if (item.isPassword()) {
 +                passwords++;
 +            }
 +        }
 +        if (passwords > 1) {
 +            context.buildConstraintViolationWithTemplate(
 +                    getTemplate(EntityViolationType.InvalidMapping, "One and only one password mapping is allowed")).
 +                    addPropertyNode("password.size").addConstraintViolation();
 +            isValid = false;
 +        }
 +
 +        return isValid;
 +    }
 +
 +    @Override
 +    public boolean isValid(final ExternalResource resource, final ConstraintValidatorContext context) {
 +        context.disableDefaultConstraintViolation();
 +
 +        if (!NAME_PATTERN.matcher(resource.getKey()).matches()) {
 +            context.buildConstraintViolationWithTemplate(
 +                    getTemplate(EntityViolationType.InvalidName, "Invalid Resource name")).
 +                    addPropertyNode("name").addConstraintViolation();
 +            return false;
 +        }
 +
 +        if (!resource.getPropagationActionsClassNames().isEmpty()) {
 +            for (String className : resource.getPropagationActionsClassNames()) {
 +                Class<?> actionsClass = null;
 +                boolean isAssignable = false;
 +                try {
 +                    actionsClass = Class.forName(className);
 +                    isAssignable = PropagationActions.class.isAssignableFrom(actionsClass);
 +                } catch (Exception e) {
 +                    LOG.error("Invalid PropagationActions specified: {}", className, e);
 +                }
 +
 +                if (actionsClass == null || !isAssignable) {
 +                    context.buildConstraintViolationWithTemplate(
 +                            getTemplate(EntityViolationType.InvalidResource, "Invalid actions class name")).
 +                            addPropertyNode("actionsClassName").addConstraintViolation();
 +                    return false;
 +                }
 +            }
 +        }
 +
 +        return isValid(resource.getUmapping(), context) && isValid(resource.getRmapping(), context);
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/syncope/blob/9cbeffd3/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ResourceTest.java
----------------------------------------------------------------------
diff --cc core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ResourceTest.java
index 0ab257a,0000000..103b9bb
mode 100644,000000..100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ResourceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ResourceTest.java
@@@ -1,266 -1,0 +1,289 @@@
 +/*
 + * 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.core.persistence.jpa.entity;
 +
 +import static org.junit.Assert.assertEquals;
 +import static org.junit.Assert.assertFalse;
 +import static org.junit.Assert.assertNotNull;
 +import static org.junit.Assert.assertNull;
 +import static org.junit.Assert.assertTrue;
 +import static org.junit.Assert.fail;
 +
 +import java.util.ArrayList;
 +import java.util.List;
 +import org.apache.syncope.common.lib.types.AttributableType;
 +import org.apache.syncope.common.lib.types.EntityViolationType;
 +import org.apache.syncope.common.lib.types.IntMappingType;
 +import org.apache.syncope.common.lib.types.MappingPurpose;
 +import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
 +import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 +import org.apache.syncope.core.persistence.api.entity.ConnInstance;
 +import org.apache.syncope.core.persistence.api.entity.ExternalResource;
 +import org.apache.syncope.core.persistence.api.entity.user.UMapping;
 +import org.apache.syncope.core.persistence.api.entity.user.UMappingItem;
 +import org.apache.syncope.core.persistence.jpa.AbstractTest;
 +import org.junit.Test;
 +import org.springframework.beans.factory.annotation.Autowired;
 +import org.springframework.transaction.annotation.Transactional;
 +
 +@Transactional
 +public class ResourceTest extends AbstractTest {
 +
 +    @Autowired
 +    private ExternalResourceDAO resourceDAO;
 +
 +    @Test
 +    public void findById() {
 +        ExternalResource resource = resourceDAO.find("ws-target-resource-1");
 +        assertNotNull("findById did not work", resource);
 +
 +        ConnInstance connector = resource.getConnector();
 +        assertNotNull("connector not found", connector);
 +        assertEquals("invalid connector name",
 +                "net.tirasa.connid.bundles.soap.WebServiceConnector", connector.getConnectorName());
 +        assertEquals("invalid bundle name", "net.tirasa.connid.bundles.soap", connector.getBundleName());
 +
 +        assertFalse("no mapping specified", resource.getUmapping().getItems().isEmpty());
 +
 +        List<Long> mappingIds = new ArrayList<>();
 +        for (UMappingItem item : resource.getUmapping().getItems()) {
 +            mappingIds.add(item.getKey());
 +        }
 +        assertTrue(mappingIds.contains(100L));
 +    }
 +
 +    @Test
 +    public void findAll() {
 +        List<ExternalResource> resources = resourceDAO.findAll();
 +        assertNotNull(resources);
 +        assertEquals(18, resources.size());
 +    }
 +
 +    @Test
 +    public void findAllByPriority() {
 +        List<ExternalResource> resources = resourceDAO.findAllByPriority();
 +        assertNotNull(resources);
 +        assertFalse(resources.isEmpty());
 +    }
 +
 +    @Test
 +    public void getAccountId() {
 +        ExternalResource resource = resourceDAO.find("ws-target-resource-2");
 +        assertNotNull(resource);
 +        assertEquals("fullname", resource.getUmapping().getAccountIdItem().getIntAttrName());
 +    }
 +
 +    @Test
 +    public void save() {
 +        ExternalResource resource = entityFactory.newEntity(ExternalResource.class);
 +        resource.setKey("ws-target-resource-basic-save");
 +        resource.setPropagationPriority(2);
 +        resource.setPropagationPrimary(true);
 +
 +        UMapping mapping = entityFactory.newEntity(UMapping.class);
 +        resource.setUmapping(mapping);
 +
 +        UMappingItem accountId = entityFactory.newEntity(UMappingItem.class);
 +        accountId.setExtAttrName("username");
 +        accountId.setIntAttrName("fullname");
 +        accountId.setIntMappingType(IntMappingType.UserId);
 +        accountId.setPurpose(MappingPurpose.BOTH);
 +        mapping.setAccountIdItem(accountId);
 +
 +        ConnInstance connector = resourceDAO.find("ws-target-resource-1").getConnector();
 +        resource.setConnector(connector);
 +
 +        // save the resource
 +        ExternalResource actual = resourceDAO.save(resource);
 +
 +        assertNotNull(actual);
 +        assertNotNull(actual.getConnector());
 +        assertNotNull(actual.getUmapping());
 +        assertFalse(actual.getUmapping().getItems().isEmpty());
 +        assertEquals(Integer.valueOf(2), actual.getPropagationPriority());
 +        assertTrue(actual.isPropagationPrimary());
 +    }
 +
 +    @Test(expected = InvalidEntityException.class)
 +    public void saveInvalidMappingIntAttr() {
 +        ExternalResource resource = entityFactory.newEntity(ExternalResource.class);
 +        resource.setKey("ws-target-resource-basic-save-invalid");
 +
 +        ConnInstance connector = resourceDAO.find("ws-target-resource-1").getConnector();
 +        resource.setConnector(connector);
 +
 +        UMapping mapping = entityFactory.newEntity(UMapping.class);
 +        resource.setUmapping(mapping);
 +
 +        UMappingItem accountId = entityFactory.newEntity(UMappingItem.class);
 +        accountId.setAccountid(true);
 +        accountId.setIntMappingType(IntMappingType.UserPlainSchema);
 +        mapping.addItem(accountId);
 +
 +        // save the resource
 +        ExternalResource actual = resourceDAO.save(resource);
 +        assertNotNull(actual);
 +    }
 +
 +    @Test(expected = IllegalArgumentException.class)
 +    public void saveInvalidAccountIdMapping() {
 +        ExternalResource resource = entityFactory.newEntity(ExternalResource.class);
 +        resource.setKey("ws-target-resource-basic-save-invalid");
 +
 +        ConnInstance connector = resourceDAO.find("ws-target-resource-1").getConnector();
 +        resource.setConnector(connector);
 +
 +        UMapping mapping = entityFactory.newEntity(UMapping.class);
 +        resource.setUmapping(mapping);
 +
 +        UMappingItem accountId = entityFactory.newEntity(UMappingItem.class);
 +        accountId.setAccountid(true);
 +        accountId.setIntMappingType(IntMappingType.UserVirtualSchema);
 +        mapping.setAccountIdItem(accountId);
 +
 +        // save the resource
 +        ExternalResource actual = resourceDAO.save(resource);
 +        assertNotNull(actual);
 +    }
 +
 +    @Test(expected = InvalidEntityException.class)
 +    public void saveInvalidMappingExtAttr() {
 +        ExternalResource resource = entityFactory.newEntity(ExternalResource.class);
 +        resource.setKey("ws-target-resource-basic-save-invalid");
 +
 +        ConnInstance connector = resourceDAO.find("ws-target-resource-1").getConnector();
 +        resource.setConnector(connector);
 +
 +        UMapping mapping = entityFactory.newEntity(UMapping.class);
 +        resource.setUmapping(mapping);
 +
 +        UMappingItem item = entityFactory.newEntity(UMappingItem.class);
 +        item.setAccountid(true);
 +        item.setIntAttrName("fullname");
 +        item.setIntMappingType(IntMappingType.UserPlainSchema);
 +        mapping.addItem(item);
 +
 +        item = entityFactory.newEntity(UMappingItem.class);
 +        item.setIntAttrName("userId");
 +        item.setIntMappingType(IntMappingType.UserPlainSchema);
 +        mapping.addItem(item);
 +
 +        ExternalResource actual = resourceDAO.save(resource);
 +        assertNotNull(actual);
 +    }
 +
 +    @Test
 +    public void saveWithRoleMappingType() {
 +        ExternalResource resource = entityFactory.newEntity(ExternalResource.class);
 +        resource.setKey("ws-target-resource-basic-save-invalid");
 +
 +        ConnInstance connector = resourceDAO.find("ws-target-resource-1").getConnector();
 +        resource.setConnector(connector);
 +
 +        UMapping mapping = entityFactory.newEntity(UMapping.class);
 +        resource.setUmapping(mapping);
 +
 +        UMappingItem item = entityFactory.newEntity(UMappingItem.class);
 +        item.setIntAttrName("fullname");
 +        item.setExtAttrName("fullname");
 +        item.setIntMappingType(IntMappingType.UserPlainSchema);
 +        item.setPurpose(MappingPurpose.BOTH);
 +        mapping.setAccountIdItem(item);
 +
 +        item = entityFactory.newEntity(UMappingItem.class);
 +        item.setIntAttrName("icon");
 +        item.setExtAttrName("icon");
 +        item.setIntMappingType(IntMappingType.RolePlainSchema);
 +        item.setPurpose(MappingPurpose.BOTH);
 +        mapping.addItem(item);
 +
 +        item = entityFactory.newEntity(UMappingItem.class);
 +        item.setIntAttrName("mderiveddata");
 +        item.setExtAttrName("mderiveddata");
 +        item.setIntMappingType(IntMappingType.MembershipDerivedSchema);
 +        item.setPurpose(MappingPurpose.BOTH);
 +        mapping.addItem(item);
 +
 +        // save the resource
 +        ExternalResource actual = resourceDAO.save(resource);
 +        assertNotNull(actual);
 +
 +        int items = 0;
 +        for (UMappingItem mapItem : actual.getUmapping().getItems()) {
 +            items++;
 +
 +            if ("icon".equals(mapItem.getIntAttrName())) {
 +                assertTrue(IntMappingType.contains(AttributableType.ROLE,
 +                        mapItem.getIntMappingType().toString()));
 +            }
 +            if ("mderiveddata".equals(mapItem.getIntAttrName())) {
 +                assertTrue(IntMappingType.contains(AttributableType.MEMBERSHIP,
 +                        mapItem.getIntMappingType().toString()));
 +            }
 +        }
 +        assertEquals(3, items);
 +    }
 +
 +    @Test
 +    public void delete() {
 +        ExternalResource resource = resourceDAO.find("ws-target-resource-2");
 +        assertNotNull(resource);
 +
 +        resourceDAO.delete(resource.getKey());
 +
 +        ExternalResource actual = resourceDAO.find("ws-target-resource-2");
 +        assertNull(actual);
 +    }
 +
 +    @Test
 +    public void issueSYNCOPE418() {
 +        ExternalResource resource = entityFactory.newEntity(ExternalResource.class);
 +        resource.setKey("http://schemas.examples.org/security/authorization/organizationUnit");
 +
 +        try {
 +            resourceDAO.save(resource);
 +            fail();
 +        } catch (InvalidEntityException e) {
 +            assertTrue(e.hasViolation(EntityViolationType.InvalidName));
 +        }
 +    }
++
++    @Test(expected = InvalidEntityException.class)
++    public void issueSYNCOPE645() {
++        ExternalResource resource = entityFactory.newEntity(ExternalResource.class);
++        resource.setKey("ws-target-resource-basic-save-invalid");
++
++        ConnInstance connector = resourceDAO.find("ws-target-resource-1").getConnector();
++        resource.setConnector(connector);
++
++        UMapping mapping = entityFactory.newEntity(UMapping.class);
++        resource.setUmapping(mapping);
++
++        final UMappingItem item = entityFactory.newEntity(UMappingItem.class);
++        item.setIntAttrName("icon");
++        item.setExtAttrName("icon");
++        item.setIntMappingType(IntMappingType.RolePlainSchema);
++        item.setPurpose(MappingPurpose.BOTH);
++        mapping.setAccountIdItem(item);
++
++        // save the resource
++        ExternalResource actual = resourceDAO.save(resource);
++        assertNotNull(actual);
++    }
 +}


[2/4] syncope git commit: Merge branch '1_1_X' into 1_2_X

Posted by md...@apache.org.
Merge branch '1_1_X' into 1_2_X


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

Branch: refs/heads/master
Commit: bef822f39134ff2bb388ba6deedf51ca7d1f2257
Parents: 8f4ba7f 8c38a41
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Thu Feb 19 11:18:56 2015 +0100
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Thu Feb 19 11:18:56 2015 +0100

----------------------------------------------------------------------
 .../entity/ExternalResourceValidator.java       | 12 ++++++++++
 .../core/persistence/dao/ResourceTest.java      | 23 ++++++++++++++++++++
 2 files changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/bef822f3/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/syncope/blob/bef822f3/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java
----------------------------------------------------------------------