Author: angela
Date: Tue Dec 18 16:48:19 2018
New Revision: 1849195

URL: http://svn.apache.org/viewvc?rev=1849195&view=rev
Log:
OAK-7966 : Avoid adding excluded principal to cug policy

Modified:
    
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImpl.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java?rev=1849195&r1=1849194&r2=1849195&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
 Tue Dec 18 16:48:19 2018
@@ -43,6 +43,7 @@ import org.apache.jackrabbit.oak.namepat
 import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.PolicyOwner;
+import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugExclude;
 import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugPolicy;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
@@ -68,16 +69,19 @@ class CugAccessControlManager extends Ab
     private static final Logger log = 
LoggerFactory.getLogger(CugAccessControlManager.class);
 
     private final Set<String> supportedPaths;
+    private final CugExclude cugExclude;
     private final ConfigurationParameters config;
     private final PrincipalManager principalManager;
 
     CugAccessControlManager(@NotNull Root root,
-                                   @NotNull NamePathMapper namePathMapper,
-                                   @NotNull SecurityProvider securityProvider,
-                                   @NotNull Set<String> supportedPaths) {
+                            @NotNull NamePathMapper namePathMapper,
+                            @NotNull SecurityProvider securityProvider,
+                            @NotNull Set<String> supportedPaths,
+                            @NotNull CugExclude cugExclude) {
         super(root, namePathMapper, securityProvider);
 
         this.supportedPaths = supportedPaths;
+        this.cugExclude = cugExclude;
 
         config = 
securityProvider.getConfiguration(AuthorizationConfiguration.class).getParameters();
         principalManager = 
securityProvider.getConfiguration(PrincipalConfiguration.class).getPrincipalManager(root,
 namePathMapper);
@@ -139,7 +143,7 @@ class CugAccessControlManager extends Ab
         } else {
             CugPolicy cug = getCugPolicy(oakPath);
             if (cug == null) {
-                cug = new CugPolicyImpl(oakPath, getNamePathMapper(), 
principalManager, CugUtil.getImportBehavior(config));
+                cug = new CugPolicyImpl(oakPath, getNamePathMapper(), 
principalManager, CugUtil.getImportBehavior(config), cugExclude);
                 return new 
AccessControlPolicyIteratorAdapter(ImmutableSet.of(cug));
             } else {
                 return AccessControlPolicyIteratorAdapter.EMPTY;
@@ -246,7 +250,7 @@ class CugAccessControlManager extends Ab
     private CugPolicy getCugPolicy(@NotNull String oakPath, @NotNull Tree 
tree) {
         Tree cug = tree.getChild(REP_CUG_POLICY);
         if (CugUtil.definesCug(cug)) {
-            return new CugPolicyImpl(oakPath, getNamePathMapper(), 
principalManager, CugUtil.getImportBehavior(config), getPrincipals(cug));
+            return new CugPolicyImpl(oakPath, getNamePathMapper(), 
principalManager, CugUtil.getImportBehavior(config), cugExclude, 
getPrincipals(cug));
         } else {
             return null;
         }

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java?rev=1849195&r1=1849194&r2=1849195&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java
 Tue Dec 18 16:48:19 2018
@@ -120,7 +120,7 @@ public class CugConfiguration extends Co
     @NotNull
     @Override
     public AccessControlManager getAccessControlManager(@NotNull Root root, 
@NotNull NamePathMapper namePathMapper) {
-        return new CugAccessControlManager(root, namePathMapper, 
getSecurityProvider(), supportedPaths);
+        return new CugAccessControlManager(root, namePathMapper, 
getSecurityProvider(), supportedPaths, getExclude());
     }
 
     @NotNull

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImpl.java?rev=1849195&r1=1849194&r2=1849195&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImpl.java
 Tue Dec 18 16:48:19 2018
@@ -27,6 +27,7 @@ import com.google.common.collect.Iterabl
 import com.google.common.collect.Sets;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugExclude;
 import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugPolicy;
 import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
 import org.jetbrains.annotations.NotNull;
@@ -46,22 +47,24 @@ class CugPolicyImpl implements CugPolicy
     private final NamePathMapper namePathMapper;
     private final PrincipalManager principalManager;
     private final int importBehavior;
+    private final CugExclude cugExclude;
 
     private final Set<Principal> principals = new HashSet<>();
 
     CugPolicyImpl(@NotNull String oakPath, @NotNull NamePathMapper 
namePathMapper,
-                  @NotNull PrincipalManager principalManager, int 
importBehavior) {
-        this(oakPath, namePathMapper, principalManager, importBehavior, 
Collections.<Principal>emptySet());
+                  @NotNull PrincipalManager principalManager, int 
importBehavior, @NotNull CugExclude cugExclude) {
+        this(oakPath, namePathMapper, principalManager, importBehavior, 
cugExclude, Collections.<Principal>emptySet());
     }
 
     CugPolicyImpl(@NotNull String oakPath, @NotNull NamePathMapper 
namePathMapper,
                   @NotNull PrincipalManager principalManager, int 
importBehavior,
-                  @NotNull Set<Principal> principals) {
+                  @NotNull CugExclude cugExclude, @NotNull Set<Principal> 
principals) {
         ImportBehavior.nameFromValue(importBehavior);
         this.oakPath = oakPath;
         this.namePathMapper = namePathMapper;
         this.principalManager = principalManager;
         this.importBehavior = importBehavior;
+        this.cugExclude = cugExclude;
         this.principals.addAll(principals);
     }
 
@@ -128,6 +131,11 @@ class CugPolicyImpl implements CugPolicy
             throw new AccessControlException("Invalid principal " + name);
         }
 
+        if (cugExclude.isExcluded(Collections.singleton(principal))) {
+            log.warn("Attempt to add excluded principal {} to CUG.", 
principal);
+            return false;
+        }
+
         boolean isValid = true;
         switch (importBehavior) {
             case ImportBehavior.ABORT:
@@ -137,7 +145,7 @@ class CugPolicyImpl implements CugPolicy
                 break;
             case ImportBehavior.IGNORE:
                 if (!principalManager.hasPrincipal(name)) {
-                    log.debug("Ignoring unknown principal " + name);
+                    log.debug("Ignoring unknown principal {}", name);
                     isValid = false;
                 }
                 break;

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java?rev=1849195&r1=1849194&r2=1849195&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java
 Tue Dec 18 16:48:19 2018
@@ -43,6 +43,7 @@ import org.apache.jackrabbit.oak.spi.nod
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
+import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugExclude;
 import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugPolicy;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
@@ -190,6 +191,10 @@ public class AbstractCugTest extends Abs
         root.commit();
     }
 
+    CugExclude getExclude() {
+        return new CugExclude.Default();
+    }
+
     void createCug(@NotNull String absPath, @NotNull Principal principal) 
throws RepositoryException {
         AccessControlManager acMgr = getAccessControlManager(root);
         AccessControlPolicyIterator it = acMgr.getApplicablePolicies(absPath);

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java?rev=1849195&r1=1849194&r2=1849195&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
 Tue Dec 18 16:48:19 2018
@@ -65,11 +65,11 @@ public class CugAccessControlManagerTest
     public void before() throws Exception {
         super.before();
 
-        cugAccessControlManager = new CugAccessControlManager(root, 
NamePathMapper.DEFAULT, getSecurityProvider(), 
ImmutableSet.copyOf(SUPPORTED_PATHS));
+        cugAccessControlManager = new CugAccessControlManager(root, 
NamePathMapper.DEFAULT, getSecurityProvider(), 
ImmutableSet.copyOf(SUPPORTED_PATHS), getExclude());
     }
 
     private CugPolicy createCug(@NotNull String path) {
-        return new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
getPrincipalManager(root), ImportBehavior.ABORT);
+        return new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
getPrincipalManager(root), ImportBehavior.ABORT, getExclude());
     }
 
     private CugPolicy getApplicableCug(@NotNull String path) throws 
RepositoryException {
@@ -224,7 +224,7 @@ public class CugAccessControlManagerTest
         ConfigurationParameters config = 
ConfigurationParameters.of(AuthorizationConfiguration.NAME, 
ConfigurationParameters.of(
                     CugConstants.PARAM_CUG_SUPPORTED_PATHS, SUPPORTED_PATHS,
                     CugConstants.PARAM_CUG_ENABLED, false));
-        CugAccessControlManager acMgr = new CugAccessControlManager(root, 
NamePathMapper.DEFAULT, CugSecurityProvider.newTestSecurityProvider(config), 
ImmutableSet.copyOf(SUPPORTED_PATHS));
+        CugAccessControlManager acMgr = new CugAccessControlManager(root, 
NamePathMapper.DEFAULT, CugSecurityProvider.newTestSecurityProvider(config), 
ImmutableSet.copyOf(SUPPORTED_PATHS), getExclude());
         AccessControlPolicy[] policies = 
acMgr.getEffectivePolicies(SUPPORTED_PATH);
         assertEquals(0, policies.length);
 
@@ -313,7 +313,7 @@ public class CugAccessControlManagerTest
         Tree supportedTree = root.getTree(SUPPORTED_PATH);
         new NodeUtil(supportedTree).addChild(REP_CUG_POLICY, 
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
 
-        cugAccessControlManager.setPolicy(SUPPORTED_PATH, new 
CugPolicyImpl(SUPPORTED_PATH, NamePathMapper.DEFAULT, 
getPrincipalManager(root), ImportBehavior.BESTEFFORT));
+        cugAccessControlManager.setPolicy(SUPPORTED_PATH, new 
CugPolicyImpl(SUPPORTED_PATH, NamePathMapper.DEFAULT, 
getPrincipalManager(root), ImportBehavior.BESTEFFORT, getExclude()));
     }
 
     @Test
@@ -380,7 +380,7 @@ public class CugAccessControlManagerTest
         Tree supportedTree = root.getTree(SUPPORTED_PATH);
         new NodeUtil(supportedTree).addChild(REP_CUG_POLICY, 
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
 
-        cugAccessControlManager.removePolicy(SUPPORTED_PATH, new 
CugPolicyImpl(SUPPORTED_PATH, NamePathMapper.DEFAULT, 
getPrincipalManager(root), ImportBehavior.BESTEFFORT));
+        cugAccessControlManager.removePolicy(SUPPORTED_PATH, new 
CugPolicyImpl(SUPPORTED_PATH, NamePathMapper.DEFAULT, 
getPrincipalManager(root), ImportBehavior.BESTEFFORT, getExclude()));
     }
 
     @Test(expected = PathNotFoundException.class)

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java?rev=1849195&r1=1849194&r2=1849195&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java
 Tue Dec 18 16:48:19 2018
@@ -16,30 +16,32 @@
  */
 package org.apache.jackrabbit.oak.spi.security.authorization.cug.impl;
 
-import java.security.Principal;
-import java.util.Iterator;
-import java.util.Set;
-import javax.jcr.security.AccessControlException;
-
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.api.security.authorization.PrincipalSetPolicy;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
-import org.apache.jackrabbit.oak.namepath.impl.LocalNameMapper;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.namepath.impl.LocalNameMapper;
 import org.apache.jackrabbit.oak.namepath.impl.NamePathMapperImpl;
+import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugExclude;
 import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugPolicy;
+import org.apache.jackrabbit.oak.spi.security.principal.AdminPrincipal;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
+import org.apache.jackrabbit.oak.spi.security.principal.SystemUserPrincipal;
 import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
 import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertTrue;
+import javax.jcr.security.AccessControlException;
+import java.security.Principal;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+import static org.junit.Assert.*;
 
 public class CugPolicyImplTest extends AbstractSecurityTest {
 
@@ -48,6 +50,8 @@ public class CugPolicyImplTest extends A
     private Principal testPrincipal = new PrincipalImpl("test");
     Set<Principal> principals = ImmutableSet.of(testPrincipal);
 
+    private CugExclude exclude = new CugExclude.Default();
+
     @Override
     public void before() throws Exception {
         super.before();
@@ -56,13 +60,29 @@ public class CugPolicyImplTest extends A
     }
 
     private CugPolicyImpl createEmptyCugPolicy() {
-        return new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.ABORT);
+        return createEmptyCugPolicy(ImportBehavior.ABORT);
+    }
+
+    private CugPolicyImpl createEmptyCugPolicy(int importBehavior) {
+        return new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, importBehavior, exclude);
     }
 
     private CugPolicyImpl createCugPolicy(@NotNull Set<Principal> principals) {
-        return new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.ABORT, principals);
+        return createCugPolicy(ImportBehavior.ABORT, principals);
+    }
+
+    private CugPolicyImpl createCugPolicy(int importBehavior, @NotNull 
Set<Principal> principals) {
+        return new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, importBehavior, exclude, principals);
     }
 
+    private Principal getExcludedPrincipal() {
+        return new SystemUserPrincipal() {
+            @Override
+            public String getName() {
+                return "excluded";
+            }
+        };
+    }
     @Test
     public void testPrincipalSetPolicy() {
         assertTrue(createCugPolicy(principals) instanceof PrincipalSetPolicy);
@@ -115,7 +135,7 @@ public class CugPolicyImplTest extends A
 
     @Test(expected = AccessControlException.class)
     public void testAddInvalidPrincipalsAbort() throws Exception {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.ABORT);
+        CugPolicy cug = createEmptyCugPolicy(ImportBehavior.ABORT);
         cug.addPrincipals(
                 EveryonePrincipal.getInstance(),
                 new PrincipalImpl("unknown"));
@@ -123,7 +143,7 @@ public class CugPolicyImplTest extends A
 
     @Test
     public void testAddInvalidPrincipalsBestEffort() throws Exception {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.BESTEFFORT, principals);
+        CugPolicy cug = createCugPolicy(ImportBehavior.BESTEFFORT, principals);
         assertTrue(cug.addPrincipals(
                 EveryonePrincipal.getInstance(),
                 new PrincipalImpl("unknown")));
@@ -134,7 +154,7 @@ public class CugPolicyImplTest extends A
 
     @Test
     public void testAddInvalidPrincipalsIgnore() throws Exception {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.IGNORE, principals);
+        CugPolicy cug = createCugPolicy(ImportBehavior.IGNORE, principals);
         assertTrue(cug.addPrincipals(
                 new PrincipalImpl("unknown"),
                 EveryonePrincipal.getInstance()));
@@ -147,7 +167,7 @@ public class CugPolicyImplTest extends A
 
     @Test
     public void testAddContainedPrincipal() throws Exception {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.BESTEFFORT, principals);
+        CugPolicy cug = createCugPolicy(ImportBehavior.BESTEFFORT, principals);
         assertFalse(cug.addPrincipals(
                 new PrincipalImpl("test")));
 
@@ -156,7 +176,7 @@ public class CugPolicyImplTest extends A
 
     @Test
     public void testAddNullPrincipal() throws Exception {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.ABORT, principals);
+        CugPolicy cug = createCugPolicy(ImportBehavior.ABORT, principals);
         assertTrue(cug.addPrincipals(EveryonePrincipal.getInstance(), null));
 
         
assertTrue(cug.getPrincipals().contains(EveryonePrincipal.getInstance()));
@@ -165,13 +185,13 @@ public class CugPolicyImplTest extends A
 
     @Test(expected = AccessControlException.class)
     public void testAddEmptyPrincipalName() throws Exception {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.BESTEFFORT);
+        CugPolicy cug = createEmptyCugPolicy(ImportBehavior.BESTEFFORT);
         cug.addPrincipals(new PrincipalImpl(""));
     }
 
     @Test(expected = AccessControlException.class)
     public void testAddNullPrincipalName() throws Exception {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.BESTEFFORT);
+        CugPolicy cug = createEmptyCugPolicy(ImportBehavior.BESTEFFORT);
         cug.addPrincipals(new Principal() {
             @Override
             public String getName() {
@@ -182,9 +202,7 @@ public class CugPolicyImplTest extends A
 
     @Test
     public void testRemovePrincipals() throws Exception {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager,
-                ImportBehavior.BESTEFFORT,
-                ImmutableSet.of(testPrincipal, 
EveryonePrincipal.getInstance()));
+        CugPolicy cug = createCugPolicy(ImportBehavior.BESTEFFORT, 
ImmutableSet.of(testPrincipal, EveryonePrincipal.getInstance()));
 
         assertFalse(cug.removePrincipals(new PrincipalImpl("unknown")));
         assertTrue(cug.removePrincipals(testPrincipal, 
EveryonePrincipal.getInstance(), new PrincipalImpl("unknown")));
@@ -193,7 +211,7 @@ public class CugPolicyImplTest extends A
 
     @Test
     public void testRemoveNullPrincipal() throws Exception {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, ImportBehavior.ABORT, principals);
+        CugPolicy cug = createCugPolicy(ImportBehavior.ABORT, principals);
         assertTrue(cug.removePrincipals(testPrincipal, null));
 
         assertTrue(cug.getPrincipals().isEmpty());
@@ -210,12 +228,42 @@ public class CugPolicyImplTest extends A
         String oakPath = "/oak:testPath";
         NamePathMapper mapper = new NamePathMapperImpl(new 
LocalNameMapper(root, ImmutableMap.of("quercus", 
"http://jackrabbit.apache.org/oak/ns/1.0";)));
 
-        CugPolicy empty = new CugPolicyImpl(oakPath, mapper, principalManager, 
ImportBehavior.ABORT);
+        CugPolicy empty = new CugPolicyImpl(oakPath, mapper, principalManager, 
ImportBehavior.ABORT, exclude);
         assertEquals("/quercus:testPath", empty.getPath());
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void testInvalidImportBehavior() {
-        CugPolicy cug = new CugPolicyImpl(path, NamePathMapper.DEFAULT, 
principalManager, -1, principals);
+        CugPolicy cug = createCugPolicy(-1, principals);
+    }
+
+    @Test
+    public void testAddSingleExcludedPrincipal() throws Exception {
+        CugPolicy cug = createEmptyCugPolicy(ImportBehavior.ABORT);
+
+        assertFalse(cug.addPrincipals(getExcludedPrincipal()));
+    }
+
+    @Test
+    public void testAddExcludedPrincipal() throws Exception {
+        CugPolicyImpl cug = createEmptyCugPolicy(ImportBehavior.ABORT);
+
+        Principal excluded = getExcludedPrincipal();
+        assertTrue(cug.addPrincipals(EveryonePrincipal.getInstance(), 
excluded));
+        assertFalse(Iterables.contains(cug.getPrincipalNames(), 
excluded.getName()));
+    }
+
+    @Test
+    public void testExcludedPrincipalAddedBefore() throws Exception {
+        Principal excluded = getExcludedPrincipal();
+        CugPolicyImpl cug = createCugPolicy(ImportBehavior.ABORT, 
Collections.singleton(excluded));
+        assertTrue(Iterables.contains(cug.getPrincipalNames(), 
excluded.getName()));
+    }
+
+    @Test
+    public void removeExcludedPrincipal() throws Exception {
+        Principal excluded = getExcludedPrincipal();
+        CugPolicyImpl cug = createCugPolicy(ImportBehavior.ABORT, 
Collections.singleton(excluded));
+        assertTrue(cug.removePrincipals(excluded));
     }
 }


Reply via email to