Author: angela
Date: Fri Apr 26 10:26:13 2019
New Revision: 1858190

URL: http://svn.apache.org/viewvc?rev=1858190&view=rev
Log:
OAK-8281 : Improve coverage for 
org.apache.jackrabbit.oak.security.authorization.composite

Added:
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderGetTreePermissionTest.java
   (with props)
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderSupportedTest.java
   (with props)
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositionTypeTest.java
   (with props)
Modified:
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAccessControlManagerTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java?rev=1858190&r1=1858189&r2=1858190&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java
 Fri Apr 26 10:26:13 2019
@@ -16,13 +16,6 @@
  */
 package org.apache.jackrabbit.oak.security.authorization.composite;
 
-import java.security.Principal;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.jcr.Session;
-import javax.jcr.security.AccessControlManager;
-
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -53,6 +46,13 @@ import org.jetbrains.annotations.NotNull
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
 
+import javax.jcr.Session;
+import javax.jcr.security.AccessControlManager;
+import java.security.Principal;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
@@ -598,7 +598,7 @@ public abstract class AbstractCompositeP
     }
 
     @Test
-    public void testGetRepositoryPermissionInstance() throws Exception {
+    public void testGetRepositoryPermissionInstance() {
         RepositoryPermission rp = 
createPermissionProvider().getRepositoryPermission();
         
assertTrue(rp.getClass().getName().endsWith("CompositeRepositoryPermission"));
         RepositoryPermission rpO = 
createPermissionProviderOR().getRepositoryPermission();
@@ -606,7 +606,7 @@ public abstract class AbstractCompositeP
     }
 
     @Test
-    public void testRepositoryPermissionIsNotGranted() throws Exception {
+    public void testRepositoryPermissionIsNotGranted() {
         RepositoryPermission rp = 
createPermissionProvider().getRepositoryPermission();
         assertFalse(rp.isGranted(Permissions.PRIVILEGE_MANAGEMENT));
         
assertFalse(rp.isGranted(Permissions.NAMESPACE_MANAGEMENT|Permissions.PRIVILEGE_MANAGEMENT));

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAccessControlManagerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAccessControlManagerTest.java?rev=1858190&r1=1858189&r2=1858190&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAccessControlManagerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAccessControlManagerTest.java
 Fri Apr 26 10:26:13 2019
@@ -16,37 +16,51 @@
  */
 package org.apache.jackrabbit.oak.security.authorization.composite;
 
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import javax.jcr.security.AccessControlException;
-import javax.jcr.security.AccessControlList;
-import javax.jcr.security.AccessControlManager;
-import javax.jcr.security.AccessControlPolicy;
-import javax.jcr.security.AccessControlPolicyIterator;
-import javax.jcr.security.Privilege;
-
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlManager;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlPolicy;
 import 
org.apache.jackrabbit.commons.iterator.AccessControlPolicyIteratorAdapter;
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
 import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.PolicyOwner;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.jackrabbit.oak.util.NodeUtil;
 import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 
+import javax.jcr.security.AccessControlException;
+import javax.jcr.security.AccessControlList;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.AccessControlPolicy;
+import javax.jcr.security.AccessControlPolicyIterator;
+import javax.jcr.security.Privilege;
+import java.security.Principal;
+import java.util.Collections;
+import java.util.Set;
+
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.withSettings;
 
 public class CompositeAccessControlManagerTest extends AbstractSecurityTest {
 
@@ -58,11 +72,10 @@ public class CompositeAccessControlManag
     public void before() throws Exception {
         super.before();
 
-        List<AccessControlManager> acMgrs = 
ImmutableList.of(getAccessControlManager(root), new TestAcMgr());
-        acMgr = new CompositeAccessControlManager(root, 
NamePathMapper.DEFAULT, getSecurityProvider(), acMgrs);
+        acMgr = createComposite(getAccessControlManager(root), new 
TestAcMgr());
 
-        NodeUtil node = new NodeUtil(root.getTree("/"));
-        node.addChild("test", NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+        Tree tree = root.getTree(PathUtils.ROOT_PATH);
+        TreeUtil.addChild(tree,"test", NodeTypeConstants.NT_OAK_UNSTRUCTURED);
 
         root.commit();
     }
@@ -78,6 +91,11 @@ public class CompositeAccessControlManag
         }
     }
 
+    @NotNull
+    private CompositeAccessControlManager createComposite(@NotNull 
AccessControlManager... acMgrs) {
+        return new CompositeAccessControlManager(root, NamePathMapper.DEFAULT, 
getSecurityProvider(), ImmutableList.copyOf(acMgrs));
+    }
+
     @Test
     public void testGetSupportedPrivileges() throws Exception {
         Set<Privilege> expected = 
ImmutableSet.copyOf(getPrivilegeManager(root).getRegisteredPrivileges());
@@ -104,6 +122,18 @@ public class CompositeAccessControlManag
     }
 
     @Test
+    public void testGetApplicablePoliciesNotPolicyOwner() throws Exception {
+        AccessControlPolicy policy = mock(AccessControlPolicy.class);
+        AccessControlManager mgr = 
when(mock(AccessControlManager.class).getApplicablePolicies(anyString())).thenReturn(new
 AccessControlPolicyIteratorAdapter(ImmutableSet.of(policy))).getMock();
+
+        CompositeAccessControlManager composite = createComposite(mgr);
+        AccessControlPolicyIterator it = 
composite.getApplicablePolicies(PathUtils.ROOT_PATH);
+        assertFalse(it.hasNext());
+
+        verify(mgr, never()).getApplicablePolicies(PathUtils.ROOT_PATH);
+    }
+
+    @Test
     public void testGetPolicies() throws Exception {
         int len = 0;
         AccessControlPolicy[] policies = acMgr.getPolicies(TEST_PATH);
@@ -181,6 +211,35 @@ public class CompositeAccessControlManag
         assertEquals(2, cnt);
     }
 
+    @Test(expected = AccessControlException.class)
+    public void testSetPoliciesNotPolicyOwner() throws Exception {
+        AccessControlPolicy policy = mock(AccessControlPolicy.class);
+        AccessControlManager mgr = 
when(mock(AccessControlManager.class).getPolicies(anyString())).thenReturn(new 
AccessControlPolicy[] {policy}).getMock();
+
+        try {
+            CompositeAccessControlManager composite = createComposite(mgr);
+            composite.setPolicy(PathUtils.ROOT_PATH, policy);
+        } finally {
+            verify(mgr, never()).setPolicy(PathUtils.ROOT_PATH, policy);
+        }
+    }
+
+    @Test(expected = AccessControlException.class)
+    public void testSetPoliciesPolicyOwnerPathNotDefined() throws Exception {
+        AccessControlPolicy policy = mock(AccessControlPolicy.class);
+        AccessControlManager mgr = mock(AccessControlManager.class, 
withSettings().extraInterfaces(PolicyOwner.class));
+        when(mgr.getPolicies(anyString())).thenReturn(new 
AccessControlPolicy[] {policy}).getMock();
+        when(((PolicyOwner) mgr).defines(anyString(), 
any(AccessControlPolicy.class))).thenReturn(false);
+
+        try {
+            CompositeAccessControlManager composite = createComposite(mgr);
+            composite.setPolicy(PathUtils.ROOT_PATH, policy);
+        } finally {
+            verify(mgr, never()).setPolicy(PathUtils.ROOT_PATH, policy);
+            verify(((PolicyOwner) mgr), times(1)).defines(PathUtils.ROOT_PATH, 
policy);
+        }
+    }
+
     @Test
     public void testRemovePolicy() throws Exception {
         AccessControlPolicyIterator it = 
acMgr.getApplicablePolicies(TEST_PATH);
@@ -201,6 +260,129 @@ public class CompositeAccessControlManag
         assertEquals(0, acMgr.getPolicies(TEST_PATH).length);
     }
 
+    @Test(expected = AccessControlException.class)
+    public void testRemovePoliciesNotPolicyOwner() throws Exception {
+        AccessControlPolicy policy = mock(AccessControlPolicy.class);
+        AccessControlManager mgr = 
when(mock(AccessControlManager.class).getPolicies(anyString())).thenReturn(new 
AccessControlPolicy[] {policy}).getMock();
+
+        try {
+            CompositeAccessControlManager composite = createComposite(mgr);
+            composite.removePolicy(PathUtils.ROOT_PATH, policy);
+        } finally {
+            verify(mgr, never()).removePolicy(PathUtils.ROOT_PATH, policy);
+        }
+    }
+
+    @Test(expected = AccessControlException.class)
+    public void testRemovePoliciesPolicyOwnerPathNotDefined() throws Exception 
{
+        AccessControlPolicy policy = mock(AccessControlPolicy.class);
+        AccessControlManager mgr = mock(AccessControlManager.class, 
withSettings().extraInterfaces(PolicyOwner.class));
+        when(mgr.getPolicies(anyString())).thenReturn(new 
AccessControlPolicy[] {policy}).getMock();
+        when(((PolicyOwner) mgr).defines(anyString(), 
any(AccessControlPolicy.class))).thenReturn(false);
+
+        try {
+            CompositeAccessControlManager composite = createComposite(mgr);
+            composite.removePolicy(PathUtils.ROOT_PATH, policy);
+        } finally {
+            verify(mgr, never()).removePolicy(PathUtils.ROOT_PATH, policy);
+            verify(((PolicyOwner) mgr), times(1)).defines(PathUtils.ROOT_PATH, 
policy);
+        }
+    }
+
+    @Test
+    public void testGetApplicablePoliciesByPrincipalNotOwnerPolicy() throws 
Exception {
+        JackrabbitAccessControlPolicy policy = 
mock(JackrabbitAccessControlPolicy.class);
+        JackrabbitAccessControlManager mgr = 
mock(JackrabbitAccessControlManager.class);
+        when(mgr.getApplicablePolicies(any(Principal.class))).thenReturn(new 
JackrabbitAccessControlPolicy[] {policy}).getMock();
+
+        CompositeAccessControlManager composite = createComposite(mgr);
+        JackrabbitAccessControlPolicy[] applicable = 
composite.getApplicablePolicies(EveryonePrincipal.getInstance());
+        assertEquals(0, applicable.length);
+
+        verify(mgr, 
never()).getApplicablePolicies(EveryonePrincipal.getInstance());
+    }
+
+    @Test
+    public void testGetApplicablePoliciesByPrincipalNotJackrabbitAcMgr() 
throws Exception {
+        AccessControlManager mgr = mock(AccessControlManager.class, 
withSettings().extraInterfaces(PolicyOwner.class));
+
+        CompositeAccessControlManager composite = createComposite(mgr);
+        JackrabbitAccessControlPolicy[] applicable = 
composite.getApplicablePolicies(EveryonePrincipal.getInstance());
+        assertEquals(0, applicable.length);
+
+        verifyZeroInteractions(mgr);
+    }
+
+    @Test
+    public void testGetApplicablePoliciesByPrincipal() throws Exception {
+        JackrabbitAccessControlPolicy policy = 
mock(JackrabbitAccessControlPolicy.class);
+        JackrabbitAccessControlManager mgr = 
mock(JackrabbitAccessControlManager.class, 
withSettings().extraInterfaces(PolicyOwner.class));
+        when(mgr.getApplicablePolicies(any(Principal.class))).thenReturn(new 
JackrabbitAccessControlPolicy[] {policy}).getMock();
+
+        CompositeAccessControlManager composite = createComposite(mgr);
+        JackrabbitAccessControlPolicy[] applicable = 
composite.getApplicablePolicies(EveryonePrincipal.getInstance());
+        assertArrayEquals(new JackrabbitAccessControlPolicy[] {policy}, 
applicable);
+
+        verify(mgr, 
times(1)).getApplicablePolicies(EveryonePrincipal.getInstance());
+    }
+
+    @Test
+    public void testGetPoliciesByPrincipalNotPolicyOwner() throws Exception {
+        AccessControlManager mgr = mock(AccessControlManager.class);
+
+        CompositeAccessControlManager composite = createComposite(mgr);
+        assertEquals(0, 
composite.getPolicies(EveryonePrincipal.getInstance()).length);
+
+        verifyZeroInteractions(mgr);
+    }
+
+    @Test
+    public void testGetPoliciesByPrincipalNotJackrabbitAcMgr() throws 
Exception {
+        JackrabbitAccessControlPolicy policy = 
mock(JackrabbitAccessControlPolicy.class);
+        JackrabbitAccessControlManager mgr = 
mock(JackrabbitAccessControlManager.class);
+        when(mgr.getPolicies(any(Principal.class))).thenReturn(new 
JackrabbitAccessControlPolicy[] {policy}).getMock();
+
+        CompositeAccessControlManager composite = createComposite(mgr);
+        assertArrayEquals(new JackrabbitAccessControlPolicy[] {policy}, 
composite.getPolicies(EveryonePrincipal.getInstance()));
+
+        verify(mgr, times(1)).getPolicies(EveryonePrincipal.getInstance());
+    }
+
+    @Test
+    public void testGetPoliciesByPrincipal() throws Exception {
+        JackrabbitAccessControlPolicy policy = 
mock(JackrabbitAccessControlPolicy.class);
+        JackrabbitAccessControlManager mgr = 
mock(JackrabbitAccessControlManager.class, 
withSettings().extraInterfaces(PolicyOwner.class));
+        when(mgr.getPolicies(any(Principal.class))).thenReturn(new 
JackrabbitAccessControlPolicy[] {policy}).getMock();
+
+        CompositeAccessControlManager composite = createComposite(mgr);
+        assertArrayEquals(new JackrabbitAccessControlPolicy[] {policy}, 
composite.getPolicies(EveryonePrincipal.getInstance()));
+
+        verify(mgr, times(1)).getPolicies(EveryonePrincipal.getInstance());
+    }
+
+    @Test
+    public void testEffectivePoliciesByPrincipalNotJackrabbitAcMgr() throws 
Exception {
+        AccessControlManager mgr = mock(AccessControlManager.class);
+
+        Set<Principal> principalSet = 
ImmutableSet.of(EveryonePrincipal.getInstance());
+        CompositeAccessControlManager composite = createComposite(mgr);
+        assertEquals(0, composite.getEffectivePolicies(principalSet).length);
+
+        verifyZeroInteractions(mgr);
+    }
+
+    @Test
+    public void testEffectivePoliciesByPrincipal() throws Exception {
+        JackrabbitAccessControlPolicy policy = 
mock(JackrabbitAccessControlPolicy.class);
+        JackrabbitAccessControlManager mgr = 
mock(JackrabbitAccessControlManager.class, 
withSettings().extraInterfaces(PolicyOwner.class));
+        when(mgr.getEffectivePolicies(any(Set.class))).thenReturn(new 
JackrabbitAccessControlPolicy[] {policy});
+
+        Set<Principal> principalSet = 
ImmutableSet.of(EveryonePrincipal.getInstance());
+        CompositeAccessControlManager composite = createComposite(mgr);
+        assertArrayEquals(new JackrabbitAccessControlPolicy[] {policy}, 
composite.getEffectivePolicies(principalSet));
+
+        verify(mgr, times(1)).getEffectivePolicies(principalSet);
+    }
 
     private final static class TestAcMgr implements AccessControlManager, 
PolicyOwner {
 

Added: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderGetTreePermissionTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderGetTreePermissionTest.java?rev=1858190&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderGetTreePermissionTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderGetTreePermissionTest.java
 Fri Apr 26 10:26:13 2019
@@ -0,0 +1,140 @@
+/*
+ * 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.security.authorization.composite;
+
+import com.google.common.collect.ImmutableList;
+import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.tree.TreeType;
+import org.apache.jackrabbit.oak.plugins.tree.TreeTypeProvider;
+import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.spi.security.Context;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Test;
+
+import static 
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.AND;
+import static 
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.OR;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class CompositeProviderGetTreePermissionTest extends 
AbstractSecurityTest {
+
+    private CompositePermissionProvider createProvider(@NotNull 
CompositeAuthorizationConfiguration.CompositionType compositionType,
+                                                       @NotNull 
AggregatedPermissionProvider... providers) {
+        return new CompositePermissionProvider(root, 
ImmutableList.copyOf(providers), Context.DEFAULT, compositionType, 
getRootProvider(), getTreeProvider());
+    }
+
+    @Test
+    public void testEmptyProvidersRootTree() {
+        AggregatedPermissionProvider composite = createProvider(OR);
+
+        Tree rootTree = root.getTree(PathUtils.ROOT_PATH);
+        assertSame(TreePermission.EMPTY, composite.getTreePermission(rootTree, 
TreeType.DEFAULT, TreePermission.EMPTY));
+    }
+
+    @Test
+    public void testEmptyProvidersCompositeParentPermission() {
+        TreePermission tp = mock(TreePermission.class);
+        AggregatedPermissionProvider aggr = 
when(mock(AggregatedPermissionProvider.class).getTreePermission(any(Tree.class),
 any(TreeType.class), any(TreePermission.class))).thenReturn(tp).getMock();
+
+        // parent-TreePermission is CompositeTreePermission
+        Tree rootTree = 
getRootProvider().createReadOnlyRoot(root).getTree(PathUtils.ROOT_PATH);
+        AggregatedPermissionProvider[] providers = new 
AggregatedPermissionProvider[]{aggr, new FullScopeProvider(root)};
+        CompositeTreePermission parentTp = (CompositeTreePermission) 
CompositeTreePermission.create(rootTree, getTreeProvider(), new 
TreeTypeProvider(Context.DEFAULT), providers, OR);
+
+        // getTreePermission from compositePP -> aggregated-providers as taken 
from parent-permission
+        AggregatedPermissionProvider composite = createProvider(AND);
+        Tree systemTree = rootTree.getChild(JcrConstants.JCR_SYSTEM);
+        assertTrue(composite.getTreePermission(systemTree, TreeType.HIDDEN, 
parentTp) instanceof CompositeTreePermission);
+
+        verify(aggr, times(1)).getTreePermission(rootTree, TreeType.DEFAULT, 
TreePermission.EMPTY);
+        verify(aggr, times(1)).getTreePermission(systemTree, TreeType.HIDDEN, 
tp);
+    }
+
+    @Test
+    public void testEmptyProvidersMockParentPermission() {
+        TreePermission tp = mock(TreePermission.class);
+        when(tp.getChildPermission(anyString(), 
any(NodeState.class))).thenReturn(tp);
+
+        AggregatedPermissionProvider composite = createProvider(OR);
+
+        Tree ntTree = 
getRootProvider().createReadOnlyRoot(root).getTree(NodeTypeConstants.NODE_TYPES_PATH);
+        assertSame(tp, composite.getTreePermission(ntTree, TreeType.DEFAULT, 
tp));
+
+        verify(tp, times(1)).getChildPermission(ntTree.getName(), 
getTreeProvider().asNodeState(ntTree));
+    }
+
+    @Test
+    public void testSingleProvider() {
+        TreePermission tp = mock(TreePermission.class);
+        when(tp.getChildPermission(anyString(), 
any(NodeState.class))).thenReturn(tp);
+        AggregatedPermissionProvider aggr = 
when(mock(AggregatedPermissionProvider.class).getTreePermission(any(Tree.class),
 any(TreeType.class), any(TreePermission.class))).thenReturn(tp).getMock();
+
+        AggregatedPermissionProvider composite = createProvider(AND, aggr);
+
+        Tree rootTree = 
getRootProvider().createReadOnlyRoot(root).getTree(PathUtils.ROOT_PATH);
+        TreePermission rootTreePermission = 
composite.getTreePermission(rootTree, TreeType.HIDDEN, TreePermission.EMPTY);
+        assertSame(tp, rootTreePermission);
+
+        // type param is ignored for the root tree
+        verify(aggr, times(1)).getTreePermission(rootTree, TreeType.DEFAULT, 
TreePermission.EMPTY);
+        verify(aggr, never()).getTreePermission(rootTree, TreeType.HIDDEN, 
TreePermission.EMPTY);
+
+        Tree systemTree = rootTree.getChild(JcrConstants.JCR_SYSTEM);
+        assertSame(tp, composite.getTreePermission(systemTree, 
TreeType.INTERNAL, rootTreePermission));
+
+        verify(aggr, never()).getTreePermission(systemTree, TreeType.INTERNAL, 
rootTreePermission);
+        verify(aggr, never()).getTreePermission(systemTree, TreeType.DEFAULT, 
rootTreePermission);
+        verify(tp, times(1)).getChildPermission(systemTree.getName(), 
getTreeProvider().asNodeState(systemTree));
+    }
+
+    @Test
+    public void testTwoProvider() {
+        TreePermission tp = mock(TreePermission.class);
+        when(tp.getChildPermission(anyString(), 
any(NodeState.class))).thenReturn(tp);
+        AggregatedPermissionProvider aggr = 
when(mock(AggregatedPermissionProvider.class).getTreePermission(any(Tree.class),
 any(TreeType.class), any(TreePermission.class))).thenReturn(tp).getMock();
+
+        AggregatedPermissionProvider composite = createProvider(OR, aggr, new 
FullScopeProvider(root));
+
+        Tree rootTree = 
getRootProvider().createReadOnlyRoot(root).getTree(PathUtils.ROOT_PATH);
+        TreePermission rootTreePermission = 
composite.getTreePermission(rootTree, TreeType.VERSION, TreePermission.EMPTY);
+        assertTrue(rootTreePermission instanceof CompositeTreePermission);
+
+        // type param is ignored for the root tree
+        verify(aggr, times(1)).getTreePermission(rootTree, TreeType.DEFAULT, 
TreePermission.EMPTY);
+        verify(aggr, never()).getTreePermission(rootTree, TreeType.VERSION, 
TreePermission.EMPTY);
+
+        Tree systemTree = rootTree.getChild(JcrConstants.JCR_SYSTEM);
+        assertTrue(composite.getTreePermission(systemTree, 
TreeType.ACCESS_CONTROL, rootTreePermission) instanceof 
CompositeTreePermission);
+
+        verify(aggr, times(1)).getTreePermission(systemTree, 
TreeType.ACCESS_CONTROL, tp);
+        verify(aggr, never()).getTreePermission(systemTree, TreeType.DEFAULT, 
rootTreePermission);
+        verify(tp, never()).getChildPermission(systemTree.getName(), 
getTreeProvider().asNodeState(systemTree));
+    }
+}
\ No newline at end of file

Propchange: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderGetTreePermissionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderSupportedTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderSupportedTest.java?rev=1858190&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderSupportedTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderSupportedTest.java
 Fri Apr 26 10:26:13 2019
@@ -0,0 +1,137 @@
+/*
+ * 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.security.authorization.composite;
+
+import com.google.common.collect.ImmutableList;
+import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
+import org.apache.jackrabbit.oak.spi.security.Context;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Test;
+
+import static 
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.AND;
+import static 
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.OR;
+import static 
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions.READ_ACCESS_CONTROL;
+import static 
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions.READ_NODE;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class CompositeProviderSupportedTest extends AbstractSecurityTest {
+
+    private long[] supportedPermissions = new long[] {READ_NODE, READ_NODE, 
Permissions.NO_PERMISSION, READ_ACCESS_CONTROL};
+    private AggregatedPermissionProvider[] pps = new 
AggregatedPermissionProvider[] {
+            mock(AggregatedPermissionProvider.class),
+            mock(AggregatedPermissionProvider.class),
+            mock(AggregatedPermissionProvider.class),
+            mock(AggregatedPermissionProvider.class)
+    };
+
+    private CompositePermissionProvider cppAND;
+    private CompositePermissionProvider cppOR;
+
+    private long expectedPermissions = READ_NODE|READ_ACCESS_CONTROL;
+    private PrivilegeBits expectedBits;
+
+    private PrivilegeBitsProvider pbp;
+
+    @Override
+    public void before() throws Exception {
+        super.before();
+
+        pbp = new PrivilegeBitsProvider(root);
+        for (int i = 0; i < pps.length; i++) {
+            when(pps[i].supportedPermissions(any(Tree.class), 
any(PropertyState.class), anyLong())).thenReturn(supportedPermissions[i]);
+            when(pps[i].supportedPermissions(any(Tree.class), isNull(), 
anyLong())).thenReturn(supportedPermissions[i]);
+            when(pps[i].supportedPermissions((Tree) isNull(), isNull(), 
anyLong())).thenReturn(supportedPermissions[i]);
+            when(pps[i].supportedPermissions(any(TreePermission.class), 
any(PropertyState.class), anyLong())).thenReturn(supportedPermissions[i]);
+            when(pps[i].supportedPermissions(any(TreePermission.class), 
isNull(), anyLong())).thenReturn(supportedPermissions[i]);
+            when(pps[i].supportedPermissions(any(TreeLocation.class), 
anyLong())).thenReturn(supportedPermissions[i]);
+
+            PropertyState ps = PropertyStates.createProperty("any", 
supportedPermissions[i], Type.LONG);
+            PrivilegeBits bts = (supportedPermissions[i] == 
Permissions.NO_PERMISSION) ? PrivilegeBits.EMPTY : 
PrivilegeBits.getInstance(ps);
+            when(pps[i].supportedPrivileges(any(Tree.class), 
any(PrivilegeBits.class))).thenReturn(bts);
+            when(pps[i].supportedPrivileges(isNull(), 
any(PrivilegeBits.class))).thenReturn(bts);
+        }
+
+        cppAND = createProvider(AND, pps);
+        cppOR = createProvider(OR, pps);
+
+        expectedBits = 
PrivilegeBits.getInstance(PropertyStates.createProperty("any", 
expectedPermissions, Type.LONG)).unmodifiable();
+    }
+
+    private CompositePermissionProvider createProvider(@NotNull 
CompositeAuthorizationConfiguration.CompositionType compositionType, @NotNull 
AggregatedPermissionProvider... aggregated) {
+        return new CompositePermissionProvider(root, 
ImmutableList.copyOf(aggregated), Context.DEFAULT, compositionType, 
getRootProvider(), getTreeProvider());
+    }
+
+    @Test
+    public void testSupportedPermissionsFromTree() {
+        Tree tree = mock(Tree.class);
+        PropertyState ps = mock(PropertyState.class);
+
+        for (CompositePermissionProvider ccp : new 
CompositePermissionProvider[] {cppAND, cppOR}) {
+            assertEquals(expectedPermissions, ccp.supportedPermissions((Tree) 
null, null, Permissions.ALL));
+            assertEquals(expectedPermissions, ccp.supportedPermissions(tree, 
null, Permissions.ALL));
+            assertEquals(expectedPermissions, ccp.supportedPermissions(tree, 
ps, Permissions.ALL));
+        }
+    }
+
+    @Test
+    public void testSupportedPermissionsFromTreePermission() {
+        TreePermission tp = mock(TreePermission.class);
+        PropertyState ps = mock(PropertyState.class);
+
+        for (CompositePermissionProvider ccp : new 
CompositePermissionProvider[] {cppAND, cppOR}) {
+            assertEquals(expectedPermissions, ccp.supportedPermissions(tp, 
null, Permissions.ALL));
+            assertEquals(expectedPermissions, ccp.supportedPermissions(tp, ps, 
Permissions.ALL));
+        }
+    }
+
+    @Test
+    public void testSupportedPermissionsFromLocation() {
+        TreeLocation location = TreeLocation.create(root, 
PathUtils.concat(PathUtils.ROOT_PATH, "any"));
+
+        for (CompositePermissionProvider ccp : new 
CompositePermissionProvider[] {cppAND, cppOR}) {
+            assertEquals(expectedPermissions, 
ccp.supportedPermissions(location, Permissions.ALL));
+            assertEquals(expectedPermissions, 
ccp.supportedPermissions(location, Permissions.ALL));
+        }
+    }
+
+    @Test
+    public void testSupportedPrivilegeBits() {
+        PrivilegeBits all = pbp.getBits(PrivilegeConstants.JCR_ALL);
+        Tree tree = root.getTree(PathUtils.ROOT_PATH);
+        for (CompositePermissionProvider ccp : new 
CompositePermissionProvider[] {cppAND, cppOR}) {
+            assertEquals(expectedBits, ccp.supportedPrivileges(null, 
all).unmodifiable());
+            assertEquals(expectedBits, ccp.supportedPrivileges(tree, 
all).unmodifiable());
+        }
+    }
+}
\ No newline at end of file

Propchange: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderSupportedTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java?rev=1858190&r1=1858189&r2=1858190&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java
 Fri Apr 26 10:26:13 2019
@@ -16,17 +16,16 @@
  */
 package org.apache.jackrabbit.oak.security.authorization.composite;
 
-import java.lang.reflect.Field;
-import java.util.Arrays;
-
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.tree.TreeType;
-import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.plugins.tree.TreeTypeProvider;
 import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
+import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.spi.security.Context;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
@@ -35,6 +34,8 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 
+import java.lang.reflect.Field;
+
 import static 
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.AND;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -51,7 +52,6 @@ import static org.mockito.Mockito.when;
 
 public class CompositeTreePermissionTest extends AbstractSecurityTest {
 
-    private Root readOnlyRoot;
     private Tree rootTree;
 
     private AggregatedPermissionProvider fullScopeProvider;
@@ -60,12 +60,12 @@ public class CompositeTreePermissionTest
     public void before() throws Exception {
         super.before();
 
-        Tree rootNode = root.getTree("/");
+        Tree rootNode = root.getTree(PathUtils.ROOT_PATH);
         TreeUtil.addChild(rootNode, "test", 
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
         root.commit();
 
-        readOnlyRoot = getRootProvider().createReadOnlyRoot(root);
-        rootTree = readOnlyRoot.getTree("/");
+        Root readOnlyRoot = getRootProvider().createReadOnlyRoot(root);
+        rootTree = readOnlyRoot.getTree(PathUtils.ROOT_PATH);
 
         fullScopeProvider = new FullScopeProvider(readOnlyRoot);
     }
@@ -88,8 +88,7 @@ public class CompositeTreePermissionTest
 
     @NotNull
     TreePermission createRootTreePermission(@NotNull 
AggregatedPermissionProvider... providers) {
-        return new CompositePermissionProvider(readOnlyRoot, 
Arrays.asList(providers), Context.DEFAULT, getCompositionType(), 
getRootProvider(), getTreeProvider())
-                .getTreePermission(rootTree, TreePermission.EMPTY);
+        return CompositeTreePermission.create(rootTree, getTreeProvider(), new 
TreeTypeProvider(Context.DEFAULT), providers, getCompositionType());
     }
 
     private static void assertCompositeTreePermission(boolean expected, 
@NotNull TreePermission tp) {
@@ -294,8 +293,63 @@ public class CompositeTreePermissionTest
     }
 
     @Test
-    public void testParentNoRecourse() throws Exception {
+    public void testParentNoRecourse() {
         TreePermission rootTp = createRootTreePermission(new 
NoScopeProvider(root));
         assertSame(TreePermission.NO_RECOURSE, rootTp);
     }
+
+    @Test
+    public void testCreateWithTreeType() throws Exception {
+        TreePermission mockTp = mock(TreePermission.class);
+        AggregatedPermissionProvider mockPP = 
mock(AggregatedPermissionProvider.class);
+        when(mockPP.getTreePermission(any(Tree.class), any(TreeType.class), 
any(TreePermission.class))).thenReturn(mockTp);
+
+        TreePermission parent = createRootTreePermission(mockPP, 
fullScopeProvider);
+        assertCompositeTreePermission(true, parent);
+
+        Tree t = rootTree.getChild("test");
+        TreePermission tp = CompositeTreePermission.create(t, 
getTreeProvider(), (CompositeTreePermission) parent, TreeType.INTERNAL);
+        assertCompositeTreePermission(true, tp);
+
+        Field typeF = CompositeTreePermission.class.getDeclaredField("type");
+        typeF.setAccessible(true);
+        assertSame(TreeType.INTERNAL, typeF.get(tp));
+
+        verify(mockPP, times(1)).getTreePermission(rootTree, TreeType.DEFAULT, 
TreePermission.EMPTY);
+        verify(mockPP, times(1)).getTreePermission(t, TreeType.INTERNAL, 
mockTp);
+        verify(mockPP, never()).getTreePermission(t, TreeType.DEFAULT, parent);
+    }
+
+    @Test
+    public void testCreateSingleWithInvalidParent() {
+        AggregatedPermissionProvider mockPP = 
mock(AggregatedPermissionProvider.class);
+        when(mockPP.getTreePermission(any(Tree.class), any(TreeType.class), 
any(TreePermission.class))).thenReturn(TreePermission.NO_RECOURSE);
+
+        TreePermission parent = createRootTreePermission(mockPP, 
fullScopeProvider);
+        Tree t = rootTree.getChild("test");
+        TreePermission tp = CompositeTreePermission.create(t, 
getTreeProvider(), (CompositeTreePermission) parent, TreeType.DEFAULT);
+        assertCompositeTreePermission(false, tp);
+    }
+
+    @Test
+    public void testCreateMultipleWithInvalidParent() {
+        AggregatedPermissionProvider mockPP = 
mock(AggregatedPermissionProvider.class);
+        when(mockPP.getTreePermission(any(Tree.class), any(TreeType.class), 
any(TreePermission.class))).thenReturn(TreePermission.NO_RECOURSE);
+
+        TreePermission parent = createRootTreePermission(mockPP, 
fullScopeProvider, fullScopeProvider);
+        Tree t = rootTree.getChild("test");
+        TreePermission tp = CompositeTreePermission.create(t, 
getTreeProvider(), (CompositeTreePermission) parent, TreeType.DEFAULT);
+        assertCompositeTreePermission(true, tp);
+    }
+
+    @Test
+    public void testCreateWithInvalidParent() {
+        AggregatedPermissionProvider mockPP = 
mock(AggregatedPermissionProvider.class);
+        when(mockPP.getTreePermission(any(Tree.class), any(TreeType.class), 
any(TreePermission.class))).thenReturn(TreePermission.NO_RECOURSE);
+
+        TreePermission parent = createRootTreePermission(mockPP, mockPP, 
mockPP);
+        Tree t = rootTree.getChild("test");
+        TreePermission tp = CompositeTreePermission.create(t, 
getTreeProvider(), (CompositeTreePermission) parent, TreeType.DEFAULT);
+        assertSame(TreePermission.EMPTY, tp);
+    }
 }

Added: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositionTypeTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositionTypeTest.java?rev=1858190&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositionTypeTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositionTypeTest.java
 Fri Apr 26 10:26:13 2019
@@ -0,0 +1,42 @@
+/*
+ * 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.security.authorization.composite;
+
+import org.junit.Test;
+
+import static 
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.AND;
+import static 
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.OR;
+import static org.junit.Assert.assertSame;
+
+public class CompositionTypeTest {
+
+    @Test
+    public void testOrFromString() {
+        String[] orNames = new String[] {OR.name(), OR.toString(), 
OR.name().toLowerCase(), OR.name().toUpperCase()};
+        for (String s : orNames) {
+            assertSame(OR, 
CompositeAuthorizationConfiguration.CompositionType.fromString(s));
+        }
+    }
+
+    @Test
+    public void testAndFromString() {
+        String[] andNames = new String[] {AND.name(), AND.toString(), 
AND.name().toLowerCase(), AND.name().toUpperCase(), "any", ""};
+        for (String s : andNames) {
+            assertSame(AND, 
CompositeAuthorizationConfiguration.CompositionType.fromString(s));
+        }
+    }
+}
\ No newline at end of file

Propchange: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositionTypeTest.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to