Author: angela
Date: Wed Apr 24 12:39:26 2019
New Revision: 1858042

URL: http://svn.apache.org/viewvc?rev=1858042&view=rev
Log:
OAK-8270 : Add variant of PermissionUtil.getReadOnlyTree that never returns null

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
 Wed Apr 24 12:39:26 2019
@@ -94,7 +94,7 @@ class CompositePermissionProvider implem
     @NotNull
     @Override
     public Set<String> getPrivileges(@Nullable Tree tree) {
-        Tree immutableTree = PermissionUtil.getReadOnlyTree(tree, 
immutableRoot);
+        Tree immutableTree = PermissionUtil.getReadOnlyTreeOrNull(tree, 
immutableRoot);
 
         PrivilegeBits result = PrivilegeBits.getInstance();
         PrivilegeBits denied = PrivilegeBits.getInstance();
@@ -123,7 +123,7 @@ class CompositePermissionProvider implem
 
     @Override
     public boolean hasPrivileges(@Nullable Tree tree, @NotNull String... 
privilegeNames) {
-        Tree immutableTree = PermissionUtil.getReadOnlyTree(tree, 
immutableRoot);
+        Tree immutableTree = PermissionUtil.getReadOnlyTreeOrNull(tree, 
immutableRoot);
         PrivilegeBits privilegeBits = 
privilegeBitsProvider.getBits(privilegeNames);
         if (privilegeBits.isEmpty()) {
             return true;

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
 Wed Apr 24 12:39:26 2019
@@ -88,12 +88,12 @@ public class PermissionProviderImpl impl
     @NotNull
     @Override
     public Set<String> getPrivileges(@Nullable Tree tree) {
-        return 
getCompiledPermissions().getPrivileges(PermissionUtil.getReadOnlyTree(tree, 
immutableRoot));
+        return 
getCompiledPermissions().getPrivileges(PermissionUtil.getReadOnlyTreeOrNull(tree,
 immutableRoot));
     }
 
     @Override
     public boolean hasPrivileges(@Nullable Tree tree, @NotNull String... 
privilegeNames) {
-        return 
getCompiledPermissions().hasPrivileges(PermissionUtil.getReadOnlyTree(tree, 
immutableRoot), privilegeNames);
+        return 
getCompiledPermissions().hasPrivileges(PermissionUtil.getReadOnlyTreeOrNull(tree,
 immutableRoot), privilegeNames);
     }
 
     @NotNull

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
 Wed Apr 24 12:39:26 2019
@@ -107,11 +107,20 @@ public final class PermissionUtil implem
     }
 
     @Nullable
-    public static Tree getReadOnlyTree(@Nullable Tree tree, @NotNull Root 
readOnlyRoot) {
+    public static Tree getReadOnlyTreeOrNull(@Nullable Tree tree, @NotNull 
Root readOnlyRoot) {
         if (tree instanceof ReadOnly) {
             return tree;
         } else {
             return (tree == null) ? null : 
readOnlyRoot.getTree(tree.getPath());
         }
     }
+
+    @NotNull
+    public static Tree getReadOnlyTree(@NotNull Tree tree, @NotNull Root 
readOnlyRoot) {
+        if (tree instanceof ReadOnly) {
+            return tree;
+        } else {
+            return readOnlyRoot.getTree(tree.getPath());
+        }
+    }
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
 Wed Apr 24 12:39:26 2019
@@ -28,6 +28,8 @@ import org.apache.jackrabbit.oak.Abstrac
 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.tree.ReadOnly;
 import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
 import org.apache.jackrabbit.oak.plugins.tree.TreeType;
 import 
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType;
@@ -49,6 +51,8 @@ import static org.apache.jackrabbit.oak.
 import static 
org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_READ;
 import static 
org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_WRITE;
 import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.withSettings;
 
 public class CompositeProviderCustomMixTest extends AbstractSecurityTest {
 
@@ -93,6 +97,7 @@ public class CompositeProviderCustomMixT
         actionMap.put(JCR_NODE_TYPE_MANAGEMENT, 
JackrabbitSession.ACTION_NODE_TYPE_MANAGEMENT);
         actionMap.put(JCR_WRITE, JackrabbitSession.ACTION_ADD_NODE);
 
+        Tree tree = mock(Tree.class, 
withSettings().extraInterfaces(ReadOnly.class));
         // tests all possible 256 shuffles
         for (CompositionType type : CompositionType.values()) {
             for (Set<String> granted1 : Sets.powerSet(supp1)) {
@@ -101,7 +106,7 @@ public class CompositeProviderCustomMixT
                         CompositePermissionProvider cpp = buildCpp(supp1, 
granted1, supp2, granted2, type, grantMap);
                         boolean expected = expected(ps, supp1, granted1, 
supp2, granted2, type, false);
 
-                        boolean result1 = cpp.isGranted(null, null, 
mapToPermissions(ps, grantMap));
+                        boolean result1 = cpp.isGranted(tree, null, 
mapToPermissions(ps, grantMap));
                         String err1 = "[isGranted1] Checking " + ps + " in 
{supported: " + supp1 + ", granted: "
                                 + granted1 + "} " + type + " {supported: " + 
supp2 + ", granted: " + granted2 + "}";
                         assertEquals(err1, expected, result1);

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java
 Wed Apr 24 12:39:26 2019
@@ -131,6 +131,34 @@ public class PermissionUtilTest {
     }
 
     @Test
+    public void testGetReadOnlyTreeOrNullFromNull() {
+        Root r = mock(Root.class);
+
+        assertNull(PermissionUtil.getReadOnlyTreeOrNull(null, r));
+        verify(r, never()).getTree(anyString());
+    }
+
+    @Test
+    public void testGetReadOnlyTreeOrNull() {
+        Tree readOnlyTree = mock(Tree.class, 
withSettings().extraInterfaces(ReadOnly.class));
+        Root r = mock(Root.class);
+
+        assertSame(readOnlyTree, 
PermissionUtil.getReadOnlyTreeOrNull(readOnlyTree, r));
+        verify(r, never()).getTree(anyString());
+    }
+
+    @Test
+    public void testGetReadOnlyTreeOrNullFromTree() {
+        Tree readOnlyTree = mock(Tree.class, 
withSettings().extraInterfaces(ReadOnly.class));
+
+        Root r = 
when(mock(Root.class).getTree("/path")).thenReturn(readOnlyTree).getMock();
+        Tree t = 
when(mock(Tree.class).getPath()).thenReturn("/path").getMock();
+
+        assertSame(readOnlyTree, PermissionUtil.getReadOnlyTreeOrNull(t, r));
+        verify(r, times(1)).getTree("/path");
+    }
+
+    @Test
     public void testGetReadOnlyTree() {
         Tree readOnlyTree = mock(Tree.class, 
withSettings().extraInterfaces(ReadOnly.class));
         Root r = mock(Root.class);


Reply via email to