From e83ae405a0d6b4388909f33e926d13e8a2ed23cc Mon Sep 17 00:00:00 2001
From: Alfusainey Jallow <alf.jallow@gmail.com>
Date: Thu, 8 Dec 2016 10:41:19 +0000
Subject: [PATCH] address JCR-3995

---
 .../acl/AccessControlManagerImplTest.java          | 30 +++++++++++++++++-----
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlManagerImplTest.java b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlManagerImplTest.java
index 8243dba..d49182b 100644
--- a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlManagerImplTest.java
+++ b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlManagerImplTest.java
@@ -30,6 +30,8 @@ import javax.jcr.security.Privilege;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
 import org.apache.jackrabbit.test.NotExecutableException;
 import org.apache.jackrabbit.test.api.security.AbstractAccessControlTest;
+import org.junit.After;
+import org.junit.Test;
 
 public class AccessControlManagerImplTest extends AbstractAccessControlTest {    
 
@@ -41,7 +43,7 @@ public class AccessControlManagerImplTest extends AbstractAccessControlTest {
     private Principal getUnknownPrincipal() throws NotExecutableException, RepositoryException {
         return getHelper().getUnknownPrincipal(superuser);
     }
-    
+    @Test
     public void testGetAndHasPrivileges() throws Exception {
         Privilege[] privileges = acMgr.getPrivileges(testRoot);
         assertNotNull(privileges);
@@ -52,6 +54,7 @@ public class AccessControlManagerImplTest extends AbstractAccessControlTest {
      * Tests the binding state of a policy.
      * @throws Exception
      */
+    @Test
     public void testGetPolicesAfterSetPoliciesCall() throws Exception {
         try {
             AccessControlPolicyIterator policies = acMgr.getApplicablePolicies(testRoot);
@@ -73,6 +76,7 @@ public class AccessControlManagerImplTest extends AbstractAccessControlTest {
      * take the transient changes into account.
      * @throws Exception
      */
+    @Test
     public void testRemovePolicyAfterASetPoliciesCall() throws Exception {
         try {
             AccessControlPolicyIterator policies = acMgr.getApplicablePolicies(testRoot);
@@ -99,6 +103,7 @@ public class AccessControlManagerImplTest extends AbstractAccessControlTest {
     /**
      * Test removing an effective policy.
      */
+    @Test
     public void testRemovePolicyAfterASaveCall() throws Exception {
         try {
             AccessControlList[] acl = (AccessControlList[]) acMgr.getPolicies(testRoot);
@@ -128,6 +133,7 @@ public class AccessControlManagerImplTest extends AbstractAccessControlTest {
      * be absolute and points to an existing node.
      * @throws Exception
      */
+    @Test
     public void testGetPrivilegesOnNonExistingNode() throws Exception {
         try {
             acMgr.getPrivileges(getPathToNonExistingNode());
@@ -144,16 +150,11 @@ public class AccessControlManagerImplTest extends AbstractAccessControlTest {
      * NOTE: That Jackrabbit-core tries to internally merge the entries that belongs to the same 
      * principal, which is not the case for the client-side ACM implementation.
      */
+    @Test
     public void testAddingFourAccessControlEntries() throws Exception {
         try {
             AccessControlList acl = (AccessControlList) getACL(testRoot);
 
-            // check precondition,see JCR-3995
-            if (testRootNode.hasNode("rep:policy")) {
-                assertEquals("should not have any ace nodes at this point", 0,
-                        testRootNode.getNode("rep:policy").getNodes().getSize());
-            }
-
             acl.addAccessControlEntry(getUnknownPrincipal(), privilegesFromName(Privilege.JCR_READ));
             acl.addAccessControlEntry(getUnknownPrincipal(), privilegesFromName(Privilege.JCR_READ));
             acl.addAccessControlEntry(getUnknownPrincipal(), privilegesFromName(Privilege.JCR_READ));
@@ -178,6 +179,7 @@ public class AccessControlManagerImplTest extends AbstractAccessControlTest {
      * Test retrieving a policy after a save call.
      * @throws Exception
      */
+    @Test
     public void testGetPoliciesAfterASaveCall() throws Exception {
         try {
             JackrabbitAccessControlList policy = (JackrabbitAccessControlList) getACL(testRoot);
@@ -217,4 +219,18 @@ public class AccessControlManagerImplTest extends AbstractAccessControlTest {
         return acl;
     }
 
+    /**
+     * See JCR-3995
+     * 
+     * Remove all the policies set at the given path
+     * @param absPath
+     * @throws RepositoryException
+     */
+    @After
+    public void removeAllPolicies(String absPath) throws RepositoryException {
+    	for (AccessControlPolicy policy : acMgr.getPolicies(absPath)) {
+    		acMgr.removePolicy(absPath, policy);
+    	}
+    	superuser.save();
+    }
 }
-- 
1.9.1

