You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by mm...@apache.org on 2020/03/17 08:51:04 UTC

[syncope] branch SYNCOPE-163-1 updated (8f6dc3f -> 7b3c16d)

This is an automated email from the ASF dual-hosted git repository.

mmoayyed pushed a change to branch SYNCOPE-163-1
in repository https://gitbox.apache.org/repos/asf/syncope.git.


    from 8f6dc3f  [SYNCOPE-160] missing fixes for maps for JAX-RS compatibility and fixed license headers formatting
     new 83aa8f4  SYNCOPE-160: additional inner/outer tests
     new 7b3c16d  SYNCOPE-160: additional inner/outer tests

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../api/entity/authentication/ClientApp.java       |   5 +
 .../dao/authentication/JPAOIDCRelyingPartyDAO.java |   4 +-
 .../entity/authentication/AbstractClientApp.java   |  16 +++
 .../jpa/inner/AbstractClientAppTest.java           |  22 ++++
 .../core/persistence/jpa/inner/PolicyTest.java     |  14 +++
 .../core/persistence/jpa/outer/PolicyTest.java     | 122 +++++++++++++++++++++
 6 files changed, 181 insertions(+), 2 deletions(-)
 create mode 100644 core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PolicyTest.java


[syncope] 01/02: SYNCOPE-160: additional inner/outer tests

Posted by mm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mmoayyed pushed a commit to branch SYNCOPE-163-1
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit 83aa8f4e8da9cc6090c26e81c02086b425cc3442
Author: Misagh Moayyed <mm...@gmail.com>
AuthorDate: Tue Mar 17 12:18:51 2020 +0330

    SYNCOPE-160: additional inner/outer tests
---
 .../api/entity/authentication/ClientApp.java       |   5 +
 .../dao/authentication/JPAOIDCRelyingPartyDAO.java |   4 +-
 .../entity/authentication/AbstractClientApp.java   |  16 +++
 .../jpa/inner/AbstractClientAppTest.java           |  22 ++++
 .../core/persistence/jpa/inner/PolicyTest.java     |  14 +++
 .../core/persistence/jpa/outer/PolicyTest.java     | 118 +++++++++++++++++++++
 6 files changed, 177 insertions(+), 2 deletions(-)

diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/authentication/ClientApp.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/authentication/ClientApp.java
index 4a6cee1..fd4dbd0 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/authentication/ClientApp.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/authentication/ClientApp.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.api.entity.authentication;
 
 import org.apache.syncope.core.persistence.api.entity.Entity;
+import org.apache.syncope.core.persistence.api.entity.Realm;
 import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.AuthenticationPolicy;
@@ -44,4 +45,8 @@ public interface ClientApp extends Entity {
     AttrReleasePolicy getAttrReleasePolicy();
 
     void setAttrReleasePolicy(AttrReleasePolicy policy);
+
+    Realm getRealm();
+
+    void setRealm(Realm realm);
 }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/authentication/JPAOIDCRelyingPartyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/authentication/JPAOIDCRelyingPartyDAO.java
index a20d9fd..f09c849 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/authentication/JPAOIDCRelyingPartyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/authentication/JPAOIDCRelyingPartyDAO.java
@@ -82,8 +82,8 @@ public class JPAOIDCRelyingPartyDAO extends AbstractDAO<OIDCRelyingParty>
     }
 
     @Override
-    public OIDCRelyingParty save(final OIDCRelyingParty rpTO) {
-        return entityManager().merge(rpTO);
+    public OIDCRelyingParty save(final OIDCRelyingParty rp) {
+        return entityManager().merge(rp);
     }
 
     @Override
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/authentication/AbstractClientApp.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/authentication/AbstractClientApp.java
index d7c274f..0934236 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/authentication/AbstractClientApp.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/authentication/AbstractClientApp.java
@@ -18,11 +18,13 @@
  */
 package org.apache.syncope.core.persistence.jpa.entity.authentication;
 
+import org.apache.syncope.core.persistence.api.entity.Realm;
 import org.apache.syncope.core.persistence.api.entity.authentication.ClientApp;
 import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.AuthenticationPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
 import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
+import org.apache.syncope.core.persistence.jpa.entity.JPARealm;
 import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAttrReleasePolicy;
 import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAuthenticationPolicy;
 import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccessPolicy;
@@ -43,6 +45,9 @@ public class AbstractClientApp extends AbstractGeneratedKeyEntity implements Cli
     private String description;
 
     @ManyToOne(fetch = FetchType.EAGER)
+    private JPARealm realm;
+    
+    @ManyToOne(fetch = FetchType.EAGER)
     private JPAAuthenticationPolicy authenticationPolicy;
 
     @ManyToOne(fetch = FetchType.EAGER)
@@ -101,4 +106,15 @@ public class AbstractClientApp extends AbstractGeneratedKeyEntity implements Cli
         checkType(policy, JPAAccessPolicy.class);
         this.attrReleasePolicy = (JPAAttrReleasePolicy) policy;
     }
+
+    @Override
+    public Realm getRealm() {
+        return realm;
+    }
+
+    @Override
+    public void setRealm(final Realm realm) {
+        checkType(realm, JPARealm.class);
+        this.realm = (JPARealm) realm;
+    }
 }
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AbstractClientAppTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AbstractClientAppTest.java
index 65516fe..5156a7a 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AbstractClientAppTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AbstractClientAppTest.java
@@ -21,12 +21,14 @@ package org.apache.syncope.core.persistence.jpa.inner;
 import java.util.List;
 import java.util.Map;
 import org.apache.syncope.common.lib.access.DefaultAccessPolicyConf;
+import org.apache.syncope.common.lib.attrs.AllowedAttrReleasePolicyConf;
 import org.apache.syncope.common.lib.authentication.policy.DefaultAuthenticationPolicyConf;
 import org.apache.syncope.common.lib.types.AMImplementationType;
 import org.apache.syncope.common.lib.types.ImplementationEngine;
 import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
 import org.apache.syncope.core.persistence.api.entity.Implementation;
 import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.AuthenticationPolicy;
 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
 import org.apache.syncope.core.persistence.jpa.AbstractTest;
@@ -41,6 +43,26 @@ public class AbstractClientAppTest extends AbstractTest {
     @Autowired
     protected ImplementationDAO implementationDAO;
 
+    protected AttrReleasePolicy buildAndSaveAttrRelPolicy() {
+        AttrReleasePolicy attrRelPolicy = entityFactory.newEntity(AttrReleasePolicy.class);
+        attrRelPolicy.setName("AttrRelPolicyTest");
+        attrRelPolicy.setDescription("This is a sample access policy");
+
+        AllowedAttrReleasePolicyConf conf = new AllowedAttrReleasePolicyConf();
+        conf.setName("Example Attr Rel Policy for an application");
+        conf.getAllowedAttributes().addAll(List.of("cn", "givenName"));
+        
+        Implementation type = entityFactory.newEntity(Implementation.class);
+        type.setKey("AttrRelPolicyTest");
+        type.setEngine(ImplementationEngine.JAVA);
+        type.setType(AMImplementationType.ATTR_RELEASE_POLICY_CONFIGURATIONS);
+        type.setBody(POJOHelper.serialize(conf));
+        type = implementationDAO.save(type);
+        attrRelPolicy.addConfiguration(type);
+        return policyDAO.save(attrRelPolicy);
+
+    }
+
     protected AccessPolicy buildAndSaveAccessPolicy() {
         AccessPolicy accessPolicy = entityFactory.newEntity(AccessPolicy.class);
         accessPolicy.setName("AccessPolicyTest");
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
index 39432ff..39fa8f0 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
@@ -124,6 +124,20 @@ public class PolicyTest extends AbstractTest {
     }
 
     @Test
+    public void findByPolicyImpl() {
+        AccessPolicy accessPolicy = policyDAO.find("419935c7-deb3-40b3-8a9a-683037e523a2");
+        assertNotNull(accessPolicy);
+        AuthenticationPolicy authenticationPolicy = policyDAO.find("b912a0d4-a890-416f-9ab8-84ab077eb028");
+        assertNotNull(authenticationPolicy);
+        AttrReleasePolicy attrReleasePolicy = policyDAO.find("319935c7-deb3-40b3-8a9a-683037e523a2");
+        assertNotNull(attrReleasePolicy);
+
+        accessPolicy.getConfigurations().forEach(cfg -> assertFalse(policyDAO.findByAccessPolicy(cfg).isEmpty()));
+        authenticationPolicy.getConfigurations().forEach(cfg -> assertFalse(policyDAO.findByAuthenticationPolicy(cfg).isEmpty()));
+        attrReleasePolicy.getConfigurations().forEach(cfg -> assertFalse(policyDAO.findByAttrReleasePolicy(cfg).isEmpty()));
+    }
+
+    @Test
     public void findByType() {
         List<PullPolicy> pullPolicies = policyDAO.find(PullPolicy.class);
         assertNotNull(pullPolicies);
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PolicyTest.java
new file mode 100644
index 0000000..48e9209
--- /dev/null
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PolicyTest.java
@@ -0,0 +1,118 @@
+/*
+ * 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.outer;
+
+import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.core.persistence.api.dao.RealmDAO;
+import org.apache.syncope.core.persistence.api.dao.authentication.OIDCRelyingPartyDAO;
+import org.apache.syncope.core.persistence.api.entity.Realm;
+import org.apache.syncope.core.persistence.api.entity.authentication.OIDCRelyingParty;
+import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
+import org.apache.syncope.core.persistence.api.entity.policy.AuthenticationPolicy;
+import org.apache.syncope.core.persistence.jpa.inner.AbstractClientAppTest;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.PersistenceException;
+
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+@Transactional("Master")
+public class PolicyTest extends AbstractClientAppTest {
+    @Autowired
+    private OIDCRelyingPartyDAO openIdConnectRelyingPartyDAO;
+
+    @Autowired
+    private RealmDAO realmDAO;
+
+    @Test
+    public void policyCannotBeRemovedForApps() {
+        // Create new policy
+        AccessPolicy accessPolicy = buildAndSaveAccessPolicy();
+        AuthenticationPolicy authPolicy = buildAndSaveAuthenticationPolicy();
+
+        // Create new client app and assign policy
+        OIDCRelyingParty rp = entityFactory.newEntity(OIDCRelyingParty.class);
+        rp.setName("OIDC");
+        rp.setDescription("This is a sample OIDC RP");
+        rp.setClientId(UUID.randomUUID().toString());
+        rp.setClientSecret("secret");
+        rp.setAccessPolicy(accessPolicy);
+        rp.setAuthenticationPolicy(authPolicy);
+
+        rp = openIdConnectRelyingPartyDAO.save(rp);
+        assertNotNull(rp);
+
+        assertThrows(PersistenceException.class, () -> {
+            this.policyDAO.delete(accessPolicy);
+            entityManager().flush();
+        });
+    }
+
+    @Test
+    public void authPolicyCanBeNull() {
+        Realm realm = realmDAO.findByFullPath("/odd");
+        assertNotNull(realm);
+
+        // Create new client app and assign policy
+        OIDCRelyingParty rp = entityFactory.newEntity(OIDCRelyingParty.class);
+        rp.setName("OIDC");
+        rp.setDescription("This is a sample OIDC RP");
+        rp.setClientId(UUID.randomUUID().toString());
+        rp.setClientSecret("secret");
+        rp.setRealm(realm);
+        
+        assertDoesNotThrow(() -> {
+            openIdConnectRelyingPartyDAO.save(rp);
+            entityManager().flush();
+        });
+    }
+
+    @Test
+    public void policyForRealmsCanBeRemoved() {
+        AuthenticationPolicy authPolicy = buildAndSaveAuthenticationPolicy();
+        AccessPolicy accessPolicy = buildAndSaveAccessPolicy();
+        AttrReleasePolicy attrPolicy = buildAndSaveAttrRelPolicy();
+
+        Realm realm = realmDAO.findByFullPath(SyncopeConstants.ROOT_REALM);
+        assertNotNull(realm);
+        realm.setAuthenticationPolicy(authPolicy);
+        realm.setAccessPolicy(accessPolicy);
+        realm.setAttrReleasePolicy(attrPolicy);
+        realm = realmDAO.save(realm);
+
+        assertNotNull(realm);
+
+        this.policyDAO.delete(authPolicy);
+        this.policyDAO.delete(accessPolicy);
+        this.policyDAO.delete(attrPolicy);
+        entityManager().flush();
+        assertNull(this.policyDAO.find(authPolicy.getKey()));
+        assertNull(this.policyDAO.find(accessPolicy.getKey()));
+        assertNull(this.policyDAO.find(attrPolicy.getKey()));
+    }
+}


[syncope] 02/02: SYNCOPE-160: additional inner/outer tests

Posted by mm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mmoayyed pushed a commit to branch SYNCOPE-163-1
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit 7b3c16d01f8a0f096a7e87e04251715b1d850ddf
Author: Misagh Moayyed <mm...@gmail.com>
AuthorDate: Tue Mar 17 12:20:50 2020 +0330

    SYNCOPE-160: additional inner/outer tests
---
 .../org/apache/syncope/core/persistence/jpa/outer/PolicyTest.java     | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PolicyTest.java
index 48e9209..af3251f 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PolicyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PolicyTest.java
@@ -71,6 +71,10 @@ public class PolicyTest extends AbstractClientAppTest {
             this.policyDAO.delete(accessPolicy);
             entityManager().flush();
         });
+        assertThrows(PersistenceException.class, () -> {
+            this.policyDAO.delete(authPolicy);
+            entityManager().flush();
+        });
     }
 
     @Test