Author: angela
Date: Fri Jun  2 08:50:31 2017
New Revision: 1797331

URL: http://svn.apache.org/viewvc?rev=1797331&view=rev
Log:
OAK-4612 : Multiplexing support for CugPermissionProvider

Added:
    
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationWithMountsTest.java
   (with props)
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/CugConstants.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImporter.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtil.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/CugConfigurationTest.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImporterTest.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.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=1797331&r1=1797330&r2=1797331&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
 Fri Jun  2 08:50:31 2017
@@ -44,6 +44,7 @@ import org.apache.jackrabbit.oak.api.Typ
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.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.CugPolicy;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
@@ -54,7 +55,6 @@ import org.apache.jackrabbit.oak.spi.sec
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalConfiguration;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,12 +69,18 @@ class CugAccessControlManager extends Ab
 
     private static final Logger log = 
LoggerFactory.getLogger(CugAccessControlManager.class);
 
+    private final Set<String> supportedPaths;
     private final ConfigurationParameters config;
     private final PrincipalManager principalManager;
 
-    public CugAccessControlManager(@Nonnull Root root, @Nonnull NamePathMapper 
namePathMapper, @Nonnull SecurityProvider securityProvider) {
+    public CugAccessControlManager(@Nonnull Root root,
+                                   @Nonnull NamePathMapper namePathMapper,
+                                   @Nonnull SecurityProvider securityProvider,
+                                   @Nonnull Set<String> supportedPaths) {
         super(root, namePathMapper, securityProvider);
 
+        this.supportedPaths = supportedPaths;
+
         config = 
securityProvider.getConfiguration(AuthorizationConfiguration.class).getParameters();
         principalManager = 
securityProvider.getConfiguration(PrincipalConfiguration.class).getPrincipalManager(root,
 namePathMapper);
     }
@@ -224,7 +230,7 @@ class CugAccessControlManager extends Ab
 
     private boolean isSupportedPath(@Nullable String oakPath) throws 
RepositoryException {
         checkValidPath(oakPath);
-        return CugUtil.isSupportedPath(oakPath, config);
+        return CugUtil.isSupportedPath(oakPath, supportedPaths);
     }
 
     private void checkValidPath(@Nullable String oakPath) throws 
RepositoryException {

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=1797331&r1=1797330&r2=1797331&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
 Fri Jun  2 08:50:31 2017
@@ -19,7 +19,6 @@ package org.apache.jackrabbit.oak.spi.se
 import java.io.IOException;
 import java.io.InputStream;
 import java.security.Principal;
-import java.security.PrivilegedActionException;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -29,15 +28,16 @@ import javax.jcr.RepositoryException;
 import javax.jcr.security.AccessControlManager;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
+import org.apache.felix.scr.annotations.Modified;
 import org.apache.felix.scr.annotations.Properties;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
@@ -54,6 +54,8 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.commit.MoveTracker;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
 import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
+import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.security.CompositeConfiguration;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationBase;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
@@ -97,6 +99,15 @@ public class CugConfiguration extends Co
     @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY)
     private CugExclude exclude;
 
+    /**
+     * Reference to service implementing {@link MountInfoProvider} to make the
+     * CUG authorization model multiplexing aware.
+     */
+    @Reference
+    private MountInfoProvider mountInfoProvider;
+
+    private Set<String> supportedPaths = ImmutableSet.of();
+
     @SuppressWarnings("UnusedDeclaration")
     public CugConfiguration() {
         super();
@@ -104,12 +115,15 @@ public class CugConfiguration extends Co
 
     public CugConfiguration(@Nonnull SecurityProvider securityProvider) {
         super(securityProvider, securityProvider.getParameters(NAME));
+
+        mountInfoProvider = 
getParameters().getConfigValue(PARAM_MOUNT_PROVIDER, 
Mounts.defaultMountInfoProvider(), MountInfoProvider.class);
+        supportedPaths = CugUtil.getSupportedPaths(getParameters(), 
mountInfoProvider);
     }
 
     @Nonnull
     @Override
     public AccessControlManager getAccessControlManager(@Nonnull Root root, 
@Nonnull NamePathMapper namePathMapper) {
-        return new CugAccessControlManager(root, namePathMapper, 
getSecurityProvider());
+        return new CugAccessControlManager(root, namePathMapper, 
getSecurityProvider(), supportedPaths);
     }
 
     @Nonnull
@@ -124,7 +138,6 @@ public class CugConfiguration extends Co
         ConfigurationParameters params = getParameters();
         boolean enabled = 
params.getConfigValue(CugConstants.PARAM_CUG_ENABLED, false);
 
-        Set<String> supportedPaths = 
params.getConfigValue(CugConstants.PARAM_CUG_SUPPORTED_PATHS, 
Collections.<String>emptySet());
         if (!enabled || supportedPaths.isEmpty() || 
getExclude().isExcluded(principals)) {
             return EmptyPermissionProvider.getInstance();
         } else {
@@ -170,7 +183,7 @@ public class CugConfiguration extends Co
     @Nonnull
     @Override
     public List<ProtectedItemImporter> getProtectedItemImporters() {
-        return Collections.<ProtectedItemImporter>singletonList(new 
CugImporter());
+        return Collections.<ProtectedItemImporter>singletonList(new 
CugImporter(mountInfoProvider));
     }
 
     @Nonnull
@@ -182,8 +195,16 @@ public class CugConfiguration extends Co
     //----------------------------------------------------< SCR Integration 
>---
     @SuppressWarnings("UnusedDeclaration")
     @Activate
-    protected void activate(Map<String, Object> properties) throws 
IOException, CommitFailedException, PrivilegedActionException, 
RepositoryException {
-        setParameters(ConfigurationParameters.of(properties));
+    protected void activate(Map<String, Object> properties) {
+        ConfigurationParameters params = 
ConfigurationParameters.of(properties);
+        setParameters(params);
+        supportedPaths = CugUtil.getSupportedPaths(params, mountInfoProvider);
+    }
+
+    @SuppressWarnings("UnusedDeclaration")
+    @Modified
+    protected void modified(Map<String, Object> properties) {
+        activate(properties);
     }
 
     
//--------------------------------------------------------------------------

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConstants.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/CugConstants.java?rev=1797331&r1=1797330&r2=1797331&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConstants.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConstants.java
 Fri Jun  2 08:50:31 2017
@@ -77,4 +77,13 @@ interface CugConstants {
      * </ul>
      */
     String PARAM_CUG_ENABLED = "cugEnabled";
+
+    /**
+     * Name of the configuration options specifying the
+     * {@link org.apache.jackrabbit.oak.spi.mount.MountInfoProvider} in 
non-OSGi
+     * setup scenarios.
+     *
+     * @since OAK 1.8
+     */
+    String PARAM_MOUNT_PROVIDER = "mountInfoProvider";
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImporter.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/CugImporter.java?rev=1797331&r1=1797330&r2=1797331&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImporter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImporter.java
 Fri Jun  2 08:50:31 2017
@@ -31,6 +31,7 @@ import org.apache.jackrabbit.oak.api.Roo
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 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;
@@ -50,13 +51,19 @@ class CugImporter implements ProtectedPr
 
     private static final Logger log = 
LoggerFactory.getLogger(CugImporter.class);
 
+    private final MountInfoProvider mountInfoProvider;
+
     private boolean initialized;
 
-    private ConfigurationParameters config;
+    private Set<String> supportedPaths;
     private int importBehavior;
 
     private PrincipalManager principalManager;
 
+    CugImporter(@Nonnull MountInfoProvider mountInfoProvider) {
+        this.mountInfoProvider = mountInfoProvider;
+    }
+
     //----------------------------------------------< ProtectedItemImporter 
>---
     @Override
     public boolean init(@Nonnull Session session, @Nonnull Root root, @Nonnull 
NamePathMapper namePathMapper, boolean isWorkspaceImport, int uuidBehavior, 
@Nonnull ReferenceChangeTracker referenceTracker, @Nonnull SecurityProvider 
securityProvider) {
@@ -64,7 +71,8 @@ class CugImporter implements ProtectedPr
             throw new IllegalStateException("Already initialized");
         }
         try {
-            config = 
securityProvider.getConfiguration(AuthorizationConfiguration.class).getParameters();
+            ConfigurationParameters config = 
securityProvider.getConfiguration(AuthorizationConfiguration.class).getParameters();
+            supportedPaths = CugUtil.getSupportedPaths(config, 
mountInfoProvider);
             importBehavior = CugUtil.getImportBehavior(config);
 
             if (isWorkspaceImport) {
@@ -89,7 +97,7 @@ class CugImporter implements ProtectedPr
 
     @Override
     public boolean handlePropInfo(@Nonnull Tree parent, @Nonnull PropInfo 
protectedPropInfo, @Nonnull PropertyDefinition def) throws RepositoryException {
-        if (CugUtil.definesCug(parent) && isValid(protectedPropInfo, def) && 
CugUtil.isSupportedPath(parent.getPath(), config)) {
+        if (CugUtil.definesCug(parent) && isValid(protectedPropInfo, def) && 
CugUtil.isSupportedPath(parent.getPath(), supportedPaths)) {
             Set<String> principalNames = new HashSet<>();
             for (TextValue txtValue : protectedPropInfo.getTextValues()) {
                 String principalName = txtValue.getString();

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtil.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/CugUtil.java?rev=1797331&r1=1797330&r2=1797331&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtil.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtil.java
 Fri Jun  2 08:50:31 2017
@@ -16,26 +16,34 @@
  */
 package org.apache.jackrabbit.oak.spi.security.authorization.cug.impl;
 
+import java.util.Set;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import com.google.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
+import org.apache.jackrabbit.oak.spi.mount.Mount;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
 import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
-import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
 import org.apache.jackrabbit.util.Text;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Utility methods for this CUG implementation package.
  */
 final class CugUtil implements CugConstants {
 
+    private static final Logger log = LoggerFactory.getLogger(CugUtil.class);
+
     private CugUtil(){}
 
     public static boolean hasCug(@Nonnull Tree tree) {
@@ -76,11 +84,11 @@ final class CugUtil implements CugConsta
         return cugTree.hasProperty(CugConstants.HIDDEN_NESTED_CUGS);
     }
 
-    public static boolean isSupportedPath(@Nullable String oakPath, @Nonnull 
ConfigurationParameters config) {
+    public static boolean isSupportedPath(@Nullable String oakPath, @Nonnull 
Set<String> supportedPaths) {
         if (oakPath == null) {
             return false;
         } else {
-            for (String supportedPath : 
config.getConfigValue(CugConfiguration.PARAM_CUG_SUPPORTED_PATHS, new 
String[0])) {
+            for (String supportedPath : supportedPaths) {
                 if (Text.isDescendantOrEqual(supportedPath, oakPath)) {
                     return true;
                 }
@@ -89,6 +97,24 @@ final class CugUtil implements CugConsta
         return false;
     }
 
+    public static Set<String> getSupportedPaths(@Nonnull 
ConfigurationParameters params, @Nonnull MountInfoProvider mountInfoProvider) {
+        Set<String> supportedPaths = 
params.getConfigValue(CugConstants.PARAM_CUG_SUPPORTED_PATHS, 
ImmutableSet.of());
+        if (!supportedPaths.isEmpty() && 
mountInfoProvider.hasNonDefaultMounts()) {
+            for (Mount mount : mountInfoProvider.getNonDefaultMounts()) {
+                for (String path : supportedPaths) {
+                    if (mount.isUnder(path)) {
+                        log.error("Configured supported CUG path '{}' includes 
node store mount '{}'.", path, mount.getName());
+                        throw new IllegalStateException();
+                    } else if (mount.isMounted(path)) {
+                        log.error("Configured supported CUG path '{}' is part 
of node store mount '{}'.", path, mount.getName());
+                        throw new IllegalStateException();
+                    }
+                }
+            }
+        }
+        return supportedPaths;
+    }
+
     public static int getImportBehavior(ConfigurationParameters config) {
         String importBehaviorStr = 
config.getConfigValue(ProtectedItemImporter.PARAM_IMPORT_BEHAVIOR, 
ImportBehavior.NAME_ABORT);
         return ImportBehavior.valueFromString(importBehaviorStr);

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=1797331&r1=1797330&r2=1797331&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
 Fri Jun  2 08:50:31 2017
@@ -40,6 +40,7 @@ import org.apache.jackrabbit.oak.api.Typ
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
 import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugPolicy;
@@ -47,7 +48,6 @@ import org.apache.jackrabbit.oak.spi.sec
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
 import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
 import org.apache.jackrabbit.oak.util.NodeUtil;
-import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
 import org.junit.Test;
 
 import static org.junit.Assert.assertArrayEquals;
@@ -65,7 +65,7 @@ public class CugAccessControlManagerTest
     public void before() throws Exception {
         super.before();
 
-        cugAccessControlManager = new CugAccessControlManager(root, 
NamePathMapper.DEFAULT, getSecurityProvider());
+        cugAccessControlManager = new CugAccessControlManager(root, 
NamePathMapper.DEFAULT, getSecurityProvider(), 
ImmutableSet.copyOf(SUPPORTED_PATHS));
     }
 
     private CugPolicy createCug(@Nonnull String path) {
@@ -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, new CugSecurityProvider(config));
+        CugAccessControlManager acMgr = new CugAccessControlManager(root, 
NamePathMapper.DEFAULT, new CugSecurityProvider(config), 
ImmutableSet.copyOf(SUPPORTED_PATHS));
         AccessControlPolicy[] policies = 
acMgr.getEffectivePolicies(SUPPORTED_PATH);
         assertEquals(0, policies.length);
 

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationTest.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/CugConfigurationTest.java?rev=1797331&r1=1797330&r2=1797331&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationTest.java
 Fri Jun  2 08:50:31 2017
@@ -27,7 +27,6 @@ import com.google.common.collect.Immutab
 import com.google.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.security.SecurityProviderImpl;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.MoveTracker;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
@@ -50,12 +49,17 @@ import static org.junit.Assert.assertTru
 
 public class CugConfigurationTest extends AbstractSecurityTest {
 
-    private CugConfiguration createConfiguration(ConfigurationParameters 
params) {
-        SecurityProvider sp = new 
SecurityProviderImpl(ConfigurationParameters.of(ImmutableMap.of(AuthorizationConfiguration.NAME,
 params)));
+    private static CugConfiguration 
createConfiguration(ConfigurationParameters params) {
+        SecurityProvider sp = new 
CugSecurityProvider(ConfigurationParameters.of(ImmutableMap.of(AuthorizationConfiguration.NAME,
 params)));
         return new CugConfiguration(sp);
     }
 
     @Test
+    public void testEmptyConstructor() {
+        assertEquals(ConfigurationParameters.EMPTY, new 
CugConfiguration().getParameters());
+    }
+
+    @Test
     public void testGetName() {
         assertEquals(AuthorizationConfiguration.NAME, new 
CugConfiguration().getName());
     }
@@ -198,11 +202,21 @@ public class CugConfigurationTest extend
     public void testActivate() throws Exception {
         CugConfiguration cugConfiguration = new 
CugConfiguration(getSecurityProvider());
         cugConfiguration.activate(ImmutableMap.of(
+                CugConstants.PARAM_CUG_ENABLED, false,
                 CugConstants.PARAM_CUG_SUPPORTED_PATHS, new String[] 
{"/content", "/anotherContent"}
         ));
         assertSupportedPaths(cugConfiguration, "/content", "/anotherContent");
     }
 
+    @Test
+    public void testModified() throws Exception {
+        CugConfiguration cugConfiguration = new 
CugConfiguration(getSecurityProvider());
+        cugConfiguration.modified(ImmutableMap.of(
+                CugConstants.PARAM_CUG_SUPPORTED_PATHS, new 
String[]{"/changed"}
+        ));
+        assertSupportedPaths(cugConfiguration, "/changed");
+    }
+
     private static void assertSupportedPaths(@Nonnull CugConfiguration 
configuration, @Nonnull String... paths) throws Exception {
         Set<String> expected = ImmutableSet.copyOf(paths);
         assertEquals(expected, 
configuration.getParameters().getConfigValue(CugConstants.PARAM_CUG_SUPPORTED_PATHS,
 ImmutableSet.of()));

Added: 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationWithMountsTest.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/CugConfigurationWithMountsTest.java?rev=1797331&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationWithMountsTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationWithMountsTest.java
 Fri Jun  2 08:50:31 2017
@@ -0,0 +1,88 @@
+/*
+ * 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.jackrabbit.oak.spi.security.authorization.cug.impl;
+
+import com.google.common.collect.ImmutableMap;
+import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
+import org.apache.jackrabbit.oak.spi.mount.Mounts;
+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.junit.Test;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertSame;
+
+public class CugConfigurationWithMountsTest extends AbstractSecurityTest {
+
+    private static CugConfiguration createConfiguration(MountInfoProvider mip) 
{
+        ConfigurationParameters params = ConfigurationParameters.of(
+                AbstractCugTest.CUG_CONFIG,
+                ConfigurationParameters.of(CugConstants.PARAM_MOUNT_PROVIDER, 
mip));
+
+        SecurityProvider sp = new 
CugSecurityProvider(ConfigurationParameters.of(ImmutableMap.of(AuthorizationConfiguration.NAME,
 params)));
+        return new CugConfiguration(sp);
+    }
+
+    @Test
+    public void testDefaultMountInfoProvider() {
+        CugConfiguration configuration = 
createConfiguration(Mounts.defaultMountInfoProvider());
+
+        ConfigurationParameters params = configuration.getParameters();
+        assertSame(Mounts.defaultMountInfoProvider(), 
params.get(CugConstants.PARAM_MOUNT_PROVIDER));
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testMountAtCugSupportedPath() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("mnt", 
AbstractCugTest.SUPPORTED_PATH).build();
+        CugConfiguration configuration = createConfiguration(mip);
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testMountBelowCugSupportedPath() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("mnt", 
AbstractCugTest.SUPPORTED_PATH + "/mount").build();
+        CugConfiguration configuration = createConfiguration(mip);
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testMountAboveCugSupportedPath() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("mnt", 
PathUtils.getParentPath(AbstractCugTest.SUPPORTED_PATH3)).build();
+        CugConfiguration configuration = createConfiguration(mip);
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testMountAtRootWithSupportedPaths() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("mnt", 
PathUtils.ROOT_PATH).build();
+        CugConfiguration configuration = createConfiguration(mip);
+    }
+
+    @Test
+    public void testMountAtUnsupportedPath() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("mnt", 
AbstractCugTest.UNSUPPORTED_PATH).build();
+        CugConfiguration configuration = createConfiguration(mip);
+        assertArrayEquals(AbstractCugTest.SUPPORTED_PATHS, 
configuration.getParameters().getConfigValue(CugConstants.PARAM_CUG_SUPPORTED_PATHS,
 new String[0]));
+    }
+
+    @Test
+    public void testMountBelowUnsupportedPath() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("mnt", 
AbstractCugTest.UNSUPPORTED_PATH + "/mount").build();
+        CugConfiguration configuration = createConfiguration(mip);
+        assertArrayEquals(AbstractCugTest.SUPPORTED_PATHS, 
configuration.getParameters().getConfigValue(CugConstants.PARAM_CUG_SUPPORTED_PATHS,
 new String[0]));
+    }
+}
\ No newline at end of file

Propchange: 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationWithMountsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImporterTest.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/CugImporterTest.java?rev=1797331&r1=1797330&r2=1797331&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImporterTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImporterTest.java
 Fri Jun  2 08:50:31 2017
@@ -26,6 +26,7 @@ import javax.jcr.nodetype.PropertyDefini
 import com.google.common.collect.ImmutableList;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.xml.PropInfo;
 import org.apache.jackrabbit.oak.spi.xml.ReferenceChangeTracker;
 import org.apache.jackrabbit.oak.spi.xml.TextValue;
@@ -42,7 +43,7 @@ public class CugImporterTest extends Abs
     @Override
     public void before() throws Exception {
         super.before();
-        importer = new CugImporter();
+        importer = new CugImporter(Mounts.defaultMountInfoProvider());
     }
 
     @Test(expected = IllegalStateException.class)

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.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/CugUtilTest.java?rev=1797331&r1=1797330&r2=1797331&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java
 Fri Jun  2 08:50:31 2017
@@ -16,12 +16,16 @@
  */
 package org.apache.jackrabbit.oak.spi.security.authorization.cug.impl;
 
+import java.util.Set;
 import javax.annotation.Nonnull;
 
+import com.google.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.plugins.tree.impl.AbstractTree;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
+import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -30,8 +34,10 @@ import org.apache.jackrabbit.oak.spi.xml
 import org.apache.jackrabbit.oak.util.NodeUtil;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
@@ -121,13 +127,60 @@ public class CugUtilTest extends Abstrac
 
     @Test
     public void testIsSupportedPath() {
-        assertFalse(CugUtil.isSupportedPath(null, CUG_CONFIG));
-        assertFalse(CugUtil.isSupportedPath(UNSUPPORTED_PATH, CUG_CONFIG));
+        Set<String> configuredPaths = 
CUG_CONFIG.getConfigValue(PARAM_CUG_SUPPORTED_PATHS, ImmutableSet.<String>of());
+        assertFalse(CugUtil.isSupportedPath(null, configuredPaths));
+        assertFalse(CugUtil.isSupportedPath(UNSUPPORTED_PATH, 
configuredPaths));
 
-        assertTrue(CugUtil.isSupportedPath(SUPPORTED_PATH, CUG_CONFIG));
-        assertTrue(CugUtil.isSupportedPath(SUPPORTED_PATH2, CUG_CONFIG));
-        assertTrue(CugUtil.isSupportedPath(SUPPORTED_PATH + "/child", 
CUG_CONFIG));
-        assertTrue(CugUtil.isSupportedPath(SUPPORTED_PATH2 + "/child", 
CUG_CONFIG));
+        assertTrue(CugUtil.isSupportedPath(SUPPORTED_PATH, configuredPaths));
+        assertTrue(CugUtil.isSupportedPath(SUPPORTED_PATH2, configuredPaths));
+        assertTrue(CugUtil.isSupportedPath(SUPPORTED_PATH + "/child", 
configuredPaths));
+        assertTrue(CugUtil.isSupportedPath(SUPPORTED_PATH2 + "/child", 
configuredPaths));
+    }
+
+    @Test
+    public void testGetSupportedPathsDefaultMountInfoProvider() {
+        Set<String> expected = 
CUG_CONFIG.getConfigValue(PARAM_CUG_SUPPORTED_PATHS, ImmutableSet.<String>of());
+        assertEquals(expected, CugUtil.getSupportedPaths(CUG_CONFIG, 
Mounts.defaultMountInfoProvider()));
+    }
+
+    @Test
+    public void testGetSupportedPathsWithDifferentMounts() {
+        Set<String> expected = 
CUG_CONFIG.getConfigValue(PARAM_CUG_SUPPORTED_PATHS, ImmutableSet.<String>of());
+        MountInfoProvider mip = Mounts.newBuilder().mount("private", "/libs", 
"/apps", "/nonCugPath").build();
+        assertNotSame(expected, CugUtil.getSupportedPaths(CUG_CONFIG, mip));
+        assertEquals(expected, CugUtil.getSupportedPaths(CUG_CONFIG, mip));
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testGetSupportedPathsMountsAtSupportedPath() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("private", "/libs", 
SUPPORTED_PATH3).build();
+        CugUtil.getSupportedPaths(CUG_CONFIG, mip);
+    }
+
+
+    @Test(expected = IllegalStateException.class)
+    public void testGetSupportedPathsMountsBelowSupportedPath() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("private", "/libs", 
"/apps" ).build();
+        
CugUtil.getSupportedPaths(ConfigurationParameters.of(PARAM_CUG_SUPPORTED_PATHS, 
new String[] {"/"}), mip);
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testGetSupportedPathsMountsBelowSupportedPath2() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("private", "/libs", 
SUPPORTED_PATH + "/any/path/below").build();
+        CugUtil.getSupportedPaths(CUG_CONFIG, mip);
+    }
+
+
+    @Test(expected = IllegalStateException.class)
+    public void testGetSupportedPathsMountsAboveSupportedPath() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("private", 
PathUtils.ROOT_PATH).build();
+        CugUtil.getSupportedPaths(CUG_CONFIG, mip);
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testGetSupportedPathsMountsAboveSupportedPath2() {
+        MountInfoProvider mip = Mounts.newBuilder().mount("private", 
PathUtils.getAncestorPath(SUPPORTED_PATH3, 2)).build();
+        CugUtil.getSupportedPaths(CUG_CONFIG, mip);
     }
 
     @Test


Reply via email to