You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:50:27 UTC

[sling-org-apache-sling-jcr-repoinit] 03/14: SLING-6423 - GeneralAclTest, including tests that fail until ACLOptions are implemented here - contributed by Nitin Nizhawan, thanks!

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

rombert pushed a commit to annotated tag org.apache.sling.jcr.repoinit-1.1.4
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-repoinit.git

commit 80890cc3957d01f8e40ccec926839711a171da00
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Mon Jan 16 10:49:27 2017 +0000

    SLING-6423 - GeneralAclTest, including tests that fail until ACLOptions are implemented here - contributed by Nitin Nizhawan, thanks!
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/repoinit@1779005 13f79535-47bb-0310-9956-ffa450edef68
---
 .../apache/sling/jcr/repoinit/GeneralAclTest.java  | 257 +++++++++++++++++++++
 1 file changed, 257 insertions(+)

diff --git a/src/test/java/org/apache/sling/jcr/repoinit/GeneralAclTest.java b/src/test/java/org/apache/sling/jcr/repoinit/GeneralAclTest.java
index 764fa10..8799937 100644
--- a/src/test/java/org/apache/sling/jcr/repoinit/GeneralAclTest.java
+++ b/src/test/java/org/apache/sling/jcr/repoinit/GeneralAclTest.java
@@ -42,12 +42,20 @@ public class GeneralAclTest {
     public final SlingContext context = new SlingContext(ResourceResolverType.JCR_OAK);
     
     private TestUtil U;
+    private String userA;
+    private String userB;
+
     private Session s;
     
     @Before
     public void setup() throws RepositoryException, RepoInitParsingException {
         U = new TestUtil(context);
+        userA = "userA_" + U.id;
+        userB = "userB_" + U.id;
         U.parseAndExecute("create service user " + U.username);
+        U.parseAndExecute("create service user " + userA);
+        U.parseAndExecute("create service user " + userB);
+
         s = U.loginService(U.username);
     }
 
@@ -136,4 +144,253 @@ public class GeneralAclTest {
             s.logout();
         }
     }
+
+
+    /**
+     * Verifies success/failure of adding a child
+     * @param username
+     * @param nodeName
+     * @param successExpected
+     * @throws RepositoryException
+     */
+   private void verifyAddChildNode(String username,String nodeName, boolean successExpected) throws RepositoryException {
+       Session userSession = U.loginService(username);
+       try {
+           Node rootNode = userSession.getRootNode();
+           rootNode.addNode(nodeName);
+           userSession.save();
+           assertTrue(successExpected);
+       } catch(Exception e) {
+           assertTrue(!successExpected);
+       } finally {
+           if(userSession != null) {
+               userSession.logout();
+           }
+       }
+   }
+
+    /**
+     * Verifies success/failure of adding a properties
+     * @param username
+     * @param nodeName
+     * @param propertyName
+     * @param successExpected
+     * @throws RepositoryException
+     */
+    private void verifyAddProperty(String username,String nodeName,String propertyName, boolean successExpected) throws RepositoryException {
+        Session userSession = U.loginService(username);
+        try {
+            Node rootNode = userSession.getRootNode();
+            Node node = rootNode.getNode(nodeName);
+            node.setProperty(propertyName,"test");
+            userSession.save();
+            assertTrue(successExpected);
+        } catch(Exception e) {
+            assertTrue(!successExpected);
+        } finally {
+            if(userSession != null) {
+                userSession.logout();
+            }
+        }
+    }
+
+
+
+   /**
+    * Verifies that ACEs for existing principal are replaced
+    */
+  // @Test
+   public void mergeMode_ReplaceExistingPrincipalTest() throws Exception {
+      final String initialAclSetup = 
+                     " set ACL for " + userA + "\n"
+                     + "allow jcr:read,jcr:addChildNodes on / \n"
+                     + "end"
+                     ;
+
+      final String aclsToBeMerged =
+                     " set ACL for " + userA + " (ACLOptions=merge)\n"
+                     + "allow jcr:read on / \n"
+                     + "allow jcr:modifyProperties on / \n"
+                     + "end"
+                     ;
+
+      U.parseAndExecute(initialAclSetup);
+      // verify that setup is correct
+      verifyAddChildNode(userA, "A1_" + U.id, true); // add node should succeed
+      verifyAddProperty(userA,"A1_"+U.id,"Prop1",false); // add property should fail
+
+      //now merge acls
+      U.parseAndExecute(aclsToBeMerged);
+
+      //verify merged ACLs
+      verifyAddChildNode(userA, "A2_" + U.id, false); // add node should fail
+      verifyAddProperty(userA,"A1_"+U.id,"prop2",true);// add property should succeed
+
+   }
+
+
+    /**
+     * Verify that ACLs for new principal are added
+     * @throws Exception
+     */
+  //  @Test
+    public void mergeMode_AddAceTest() throws Exception {
+        final String initialAclSetup =
+                "set ACL for " + userA + "\n"
+                + "allow jcr:read,jcr:write on /\n"
+                + "end \n"
+                ;
+
+        // userA,jcr:write ACE will be removed,
+        // userB ACE will be added
+        final String aclsToBeMerged =
+                    "set ACL on / (ACLOptions=merge) \n"
+                    + "allow jcr:read for " + userA + "\n"
+                    + "allow jcr:read,jcr:write for " + userB + "\n"
+                    + "end \n"
+                ;
+
+        U.parseAndExecute(initialAclSetup);
+        // verify that setup is correct
+        verifyAddChildNode(userA, "A1_" + U.id, true);
+        verifyAddChildNode(userB, "B1_" + U.id, false);
+        //now merge acls
+        U.parseAndExecute(aclsToBeMerged);
+
+        //verify merged ACLs
+        verifyAddChildNode(userA, "A2_" + U.id, false);
+        verifyAddChildNode(userB, "B2_" + U.id, true);
+
+    }
+
+    /**
+     * Verify that ACEs for unspecified principal are preserved
+     * @throws Exception
+     */
+    //@Test
+    public void mergeMode_PreserveAceTest() throws Exception {
+        final String initialAclSetup =
+                        "set ACL on / \n"
+                        + "allow jcr:read,jcr:write for " + userA + "\n"
+                        + "allow jcr:read,jcr:write for " + userB + "\n"
+                        + "end \n"
+                        ;
+
+        // userB ACE will be preserved
+        final String aclsToBeMerged =
+                        "set ACL on / (ACLOptions=merge) \n"
+                        + "allow jcr:read for " + userA + "\n"
+                        + "end \n"
+                        ;
+
+        U.parseAndExecute(initialAclSetup);
+        // verify that setup is correct
+        verifyAddChildNode(userA, "A1_" + U.id, true);
+        verifyAddChildNode(userB, "B1_" + U.id, true);
+
+        //now merge acls
+        U.parseAndExecute(aclsToBeMerged);
+
+        //verify merged ACLs
+        verifyAddChildNode(userA, "A2_" + U.id, false);
+        verifyAddChildNode(userB, "B2_" + U.id, true);
+
+    }
+
+
+    /**
+     * Verifiy that ACE for non-existing principal are added
+     * @throws Exception
+     */
+    //@Test
+    public void mergePreserveMode_AddAceTest() throws Exception{
+        final String initialAclSetup =
+                " set ACL for " + userB + "\n"
+                + "allow jcr:read,jcr:write on /\n"
+                + "end \n"
+                ;
+
+        final String aclsToBeMerged =
+                "set ACL for " + userA + " (ACLOptions=mergePreserve)\n"
+                + "allow jcr:read,jcr:write on / \n"
+                + "end \n"
+                ;
+
+        U.parseAndExecute(initialAclSetup);
+        // verify that setup is correct
+        verifyAddChildNode(userA, "A1_" + U.id, false);
+        verifyAddChildNode(userB, "B1_" + U.id, true);
+
+        //now merge acls
+        U.parseAndExecute(aclsToBeMerged);
+
+        //verify merged ACLs
+        verifyAddChildNode(userA, "A2_" + U.id, true);
+        verifyAddChildNode(userB, "B2_" + U.id, true);
+    }
+
+
+    /**
+     * Verify that ACE for existing principal are ignored
+     * @throws Exception
+     */
+   //@Test
+    public void mergePreserveMode_IgnoreAceTest() throws Exception {
+        final String initialAclSetup =
+                "set ACL for " + userA + "\n"
+                + "allow jcr:read,jcr:addChildNodes on /\n"
+                + "end"
+                ;
+
+        final String aclsToBeMerged =
+                " set ACL for " + userA + " (ACLOptions=mergePreserve) \n"
+                + "allow jcr:read,jcr:modifyProperties on / \n"
+                + "end \n"
+                ;
+
+        U.parseAndExecute(initialAclSetup);
+        // verify that setup is correct
+        verifyAddChildNode(userA, "A1_" + U.id, true); // add node should succeed
+        verifyAddProperty(userA, "A1_" + U.id, "Prop1", false); // add property should fail
+
+        //now merge acls
+        U.parseAndExecute(aclsToBeMerged);
+
+        //verify merged ACLs
+        verifyAddChildNode(userA, "A2_" + U.id, true); // add node should succeed
+        verifyAddProperty(userA, "A2_" + U.id, "Prop1", false); // add property should fail
+    }
+
+
+    /**
+     * Verify that ACE for unspecified principal are preserved
+     * @throws Exception
+     */
+    //@Test
+    public void mergePreserveMode_PreserveAceTest() throws Exception {
+        final String initialAclSetup =
+                " set ACL on /\n"
+                + "allow jcr:read, jcr:write for " + userA + " , " + userB + "\n"
+                + "end \n"
+                ;
+
+        // ACL for userA will be ignored but added for userB
+        final String aclsToBeMerged =
+                " set ACL for " + userA + " (ACLOptions=mergePreserve) \n"
+                + "allow jcr:read on / \n"
+                + "end \n"
+                ;
+
+        U.parseAndExecute(initialAclSetup);
+        // verify that setup is correct
+        verifyAddChildNode(userA, "A1_" + U.id, true);
+        verifyAddChildNode(userB, "B1_" + U.id, true);
+
+        //now merge acls
+        U.parseAndExecute(aclsToBeMerged);
+
+        //verify merged ACLs
+        verifyAddChildNode(userA, "A2_" + U.id, true);
+        verifyAddChildNode(userB, "B2_" + U.id, true);
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.