You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2019/02/08 15:54:15 UTC

svn commit: r1853226 [1/2] - in /jackrabbit/oak/trunk/oak-security-spi: ./ src/test/java/org/apache/jackrabbit/oak/plugins/tree/ src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ src/test/java/org/apache/jackrabbit/oak/s...

Author: angela
Date: Fri Feb  8 15:54:14 2019
New Revision: 1853226

URL: http://svn.apache.org/viewvc?rev=1853226&view=rev
Log:
OAK-8036 : Improve test in oak-security-spi

Added:
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/NullLocationTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/PropertyLocationTest.java
Modified:
    jackrabbit/oak/trunk/oak-security-spi/pom.xml
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeLocationTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeUtilTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlManagerTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ImmutableACLTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/TestACL.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionDefinitionImplTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionImplTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsTest.java
    jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/xml/PropInfoTest.java

Modified: jackrabbit/oak/trunk/oak-security-spi/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/pom.xml?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-security-spi/pom.xml Fri Feb  8 15:54:14 2019
@@ -34,7 +34,7 @@
   <properties>
     <!-- enable execution of jacoco and set minimal line coverage -->
     <skip.coverage>false</skip.coverage>
-    <minimum.coverage>0.89</minimum.coverage>
+    <minimum.coverage>0.91</minimum.coverage>
   </properties>
 
   <build>

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTreeTest.java Fri Feb  8 15:54:14 2019
@@ -33,7 +33,9 @@ import static org.mockito.Mockito.withSe
 
 public class AbstractTreeTest {
 
+    static final String NON_EXISTING_PATH = "/nonExisting";
     static final String CHILD_PATH = "/z/child";
+    static final String PROPERTY_PATH = CHILD_PATH + "/p";
     static final String STRING_VALUE = "value";
     static final long LONG_VALUE = 1;
 
@@ -50,11 +52,11 @@ public class AbstractTreeTest {
         when(rootTree.hasProperty("p")).thenReturn(true);
         when(rootTree.getProperty("p")).thenReturn(PropertyStates.createProperty("p", LONG_VALUE));
 
-        nonExisting = mockTree("/nonExisting", rootTree, false, NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+        nonExisting = mockTree(NON_EXISTING_PATH, rootTree, false, NodeTypeConstants.NT_OAK_UNSTRUCTURED);
 
         Tree x = mockTree("/x", rootTree, true);
         z = mockTree("/z", rootTree, true, NodeTypeConstants.NT_OAK_UNSTRUCTURED);
-        child = mockTree("/z/child", z, true, NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+        child = mockTree(CHILD_PATH, z, true, NodeTypeConstants.NT_OAK_UNSTRUCTURED);
         when(child.hasProperty("p")).thenReturn(true);
         when(child.getProperty("p")).thenReturn(PropertyStates.createProperty("p", STRING_VALUE));
         when(child.hasProperty("pp")).thenReturn(true);
@@ -71,7 +73,8 @@ public class AbstractTreeTest {
         when(rootTree.getChild("nonExisting")).thenReturn(nonExisting);
 
         root = Mockito.mock(Root.class);
-        when(root.getTree("/")).thenReturn(rootTree);
+        when(root.getTree(PathUtils.ROOT_PATH)).thenReturn(rootTree);
+        when(root.getTree(CHILD_PATH)).thenReturn(child);
     }
 
     public Tree mockTree(String path, boolean exists) {
@@ -112,7 +115,6 @@ public class AbstractTreeTest {
         when(t.hasProperty("nonExisting")).thenReturn(false);
         when(t.hasChild("nonExisting")).thenReturn(false);
         when(t.getChild("nonExisting")).thenReturn(nonExisting);
-        when(t.remove()).thenThrow(new UnsupportedOperationException());
         return t;
     }
 }
\ No newline at end of file

Added: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/NullLocationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/NullLocationTest.java?rev=1853226&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/NullLocationTest.java (added)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/NullLocationTest.java Fri Feb  8 15:54:14 2019
@@ -0,0 +1,106 @@
+/*
+ * 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.plugins.tree;
+
+import org.apache.jackrabbit.util.Text;
+import org.junit.Before;
+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.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+public class NullLocationTest extends AbstractTreeTest {
+
+    private static final String NULL_LOCATION_PATH = PROPERTY_PATH + "/null";
+
+    private TreeLocation nullLocation;
+
+    @Before
+    public void before() throws Exception {
+        super.before();
+
+        nullLocation = TreeLocation.create(root, NULL_LOCATION_PATH);
+    }
+
+    @Test
+    public void testExists() {
+        assertFalse(nullLocation.exists());
+    }
+
+    @Test
+    public void testGetTree() {
+        assertNull(nullLocation.getTree());
+    }
+
+    @Test
+    public void testGetProperty() {
+        assertNull(nullLocation.getProperty());
+    }
+
+    @Test
+    public void testGetName() {
+        assertEquals("null", nullLocation.getName());
+    }
+
+    @Test
+    public void testGetPath() {
+        assertEquals(NULL_LOCATION_PATH, nullLocation.getPath());
+    }
+
+    @Test
+    public void testRemove() {
+        assertFalse(nullLocation.remove());
+    }
+
+    @Test
+    public void testGetChild() {
+        TreeLocation child = nullLocation.getChild("child");
+        assertNotNull(child);
+        assertFalse(child.exists());
+        assertNull(child.getTree());
+        assertNull(child.getProperty());
+        assertEquals("child", child.getName());
+    }
+
+
+    @Test
+    public void testGetDeepChild() {
+        TreeLocation child = nullLocation.getChild("b").getChild("c");
+        assertEquals(NULL_LOCATION_PATH + "/b/c", child.getPath());
+
+        TreeLocation b = child.getParent();
+        assertEquals(NULL_LOCATION_PATH + "/b", b.getPath());
+        assertEquals("b", b.getName());
+    }
+
+    @Test
+    public void testToString() {
+        assertEquals(TreeLocation.create(root, PROPERTY_PATH).getChild("null").toString(), nullLocation.toString());
+    }
+
+    @Test
+    public void testRootParent() {
+        TreeLocation nullLocation = TreeLocation.create(root).getParent();
+        assertSame(nullLocation, nullLocation.getParent());
+        assertTrue(nullLocation.getName().isEmpty());
+        assertTrue(nullLocation.getPath().isEmpty());
+    }
+}
\ No newline at end of file

Added: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/PropertyLocationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/PropertyLocationTest.java?rev=1853226&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/PropertyLocationTest.java (added)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/PropertyLocationTest.java Fri Feb  8 15:54:14 2019
@@ -0,0 +1,83 @@
+/*
+ * 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.plugins.tree;
+
+import org.apache.jackrabbit.util.Text;
+import org.junit.Before;
+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.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+public class PropertyLocationTest extends AbstractTreeTest {
+
+    private TreeLocation propertyLocation;
+
+    @Before
+    public void before() throws Exception {
+        super.before();
+
+        propertyLocation = TreeLocation.create(root, PROPERTY_PATH);
+    }
+
+    @Test
+    public void testExists() {
+        assertTrue(propertyLocation.exists());
+    }
+
+    @Test
+    public void testGetName() {
+        assertEquals(Text.getName(PROPERTY_PATH), propertyLocation.getName());
+    }
+
+    @Test
+    public void testGetTree() {
+        assertNull(propertyLocation.getTree());
+    }
+
+    @Test
+    public void testGetProperty() {
+        assertEquals(root.getTree(CHILD_PATH).getProperty(propertyLocation.getName()), propertyLocation.getProperty());
+    }
+
+    @Test
+    public void testGetChild() {
+        TreeLocation child = propertyLocation.getChild("child");
+        assertFalse(child.exists());
+        assertEquals(propertyLocation.getProperty(), child.getParent().getProperty());
+    }
+
+    @Test
+    public void testGetParent() {
+        TreeLocation parent = propertyLocation.getParent();
+        assertTrue(parent.exists());
+        assertEquals(CHILD_PATH, parent.getPath());
+        assertNotNull(parent.getTree());
+    }
+
+    @Test
+    public void testRemovePropertyLocation() {
+        String propName = propertyLocation.getName();
+        assertTrue(propertyLocation.remove());
+        verify(child, times(1)).removeProperty(propName);
+    }
+}
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeLocationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeLocationTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeLocationTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeLocationTest.java Fri Feb  8 15:54:14 2019
@@ -18,6 +18,8 @@
  */
 package org.apache.jackrabbit.oak.plugins.tree;
 
+import org.apache.jackrabbit.util.Text;
+import org.junit.Before;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -26,113 +28,103 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
+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 TreeLocationTest extends AbstractTreeTest {
 
-    @Test
-    public void testNullLocation() {
-        TreeLocation nullLocation = TreeLocation.create(root).getParent();
-        assertNull(nullLocation.getTree());
-        assertTrue(nullLocation.getName().isEmpty());
+    private TreeLocation nodeLocation;
 
-        TreeLocation child = nullLocation.getChild("any");
-        assertNotNull(child);
-        assertNull(child.getTree());
-        assertNull(child.getProperty());
+    @Before
+    public void before() throws Exception {
+        super.before();
+        nodeLocation = TreeLocation.create(child);
+    }
 
-        TreeLocation child2 = nullLocation.getChild("x");
-        assertNotNull(child2);
-        assertNull(child.getTree());
-        assertNull(child.getProperty());
+    @Test
+    public void testExists() {
+        assertTrue(nodeLocation.exists());
     }
 
     @Test
-    public void testParentOfRoot() {
-        TreeLocation nullLocation = TreeLocation.create(root).getParent();
-        assertSame(nullLocation, nullLocation.getParent());
-        assertTrue(nullLocation.getName().isEmpty());
+    public void testGetName() {
+        assertEquals(Text.getName(CHILD_PATH), nodeLocation.getName());
     }
 
     @Test
-    public void testNodeLocation() {
-        TreeLocation x = TreeLocation.create(root, "/x");
-        assertNotNull(x.getTree());
+    public void testGetPath() {
+        assertEquals(CHILD_PATH, nodeLocation.getPath());
+    }
 
-        assertEquals(rootTree, x.getParent().getTree());
+    @Test
+    public void testGetTree() {
+        assertEquals(child, nodeLocation.getTree());
     }
 
     @Test
-    public void testPropertyLocation() {
-        TreeLocation propLocation = TreeLocation.create(root, "/p");
-        assertNotNull(propLocation.getProperty());
-        assertEquals("p", propLocation.getName());
-        assertTrue(propLocation.exists());
+    public void testGetProperty() {
+        assertNull(nodeLocation.getProperty());
+    }
 
-        TreeLocation abc = propLocation.getChild("b").getChild("c");
-        assertEquals("/p/b/c", abc.getPath());
-        assertNull(abc.getProperty());
+    @Test
+    public void testGetParent() {
+        assertEquals(z, nodeLocation.getParent().getTree());
+        assertEquals(rootTree, nodeLocation.getParent().getParent().getTree());
+    }
 
-        TreeLocation ab = abc.getParent();
-        assertEquals("/p/b", ab.getPath());
-        assertEquals("b", ab.getName());
-        assertNull(ab.getProperty());
+    @Test
+    public void testGetChild() {
+        TreeLocation propertyChild = nodeLocation.getChild(Text.getName(PROPERTY_PATH));
+        assertNotNull(propertyChild);
+        assertTrue(propertyChild.exists());
 
-        assertEquals(propLocation.getProperty(), ab.getParent().getProperty());
+        assertEquals(child, nodeLocation.getParent().getChild(nodeLocation.getName()).getTree());
     }
 
     @Test
-    public void testRemovePropertyLocation() {
-        TreeLocation propLocation = TreeLocation.create(root, "/p");
-        assertTrue(propLocation.remove());
+    public void testGetNonExistingChild() {
+        TreeLocation location = nodeLocation.getChild(Text.getName(NON_EXISTING_PATH));
+        assertFalse(location.exists());
+        assertNull(location.getTree());
     }
 
     @Test
-    public void getDeepLocation() {
-        TreeLocation child = TreeLocation.create(root, "/z/child");
-        assertNotNull(child.getTree());
-        assertEquals("child", child.getName());
-        assertNull(child.getProperty());
+    public void testRemove() {
+        when(child.remove()).thenReturn(true);
 
-        TreeLocation p = TreeLocation.create(root, "/z/child/p");
-        assertNotNull(p.getProperty());
-        assertNull(p.getTree());
-        assertEquals("/z/child/p", p.getPath());
-
-        TreeLocation n = TreeLocation.create(root, "/z/child/p/3/4");
-        assertNull(n.getTree());
-        assertNull(n.getProperty());
-        assertEquals("/z/child/p/3/4", n.getPath());
-        assertFalse(n.exists());
-        assertFalse(n.remove());
+        assertTrue(nodeLocation.remove());
+        verify(child).remove();
+    }
 
-        TreeLocation t = n.getParent().getParent();
-        assertNull(t.getTree());
-        assertNotNull(t.getProperty());
+    @Test
+    public void testRemove2() {
+        when(child.remove()).thenReturn(false);
 
-        TreeLocation t2 = t.getParent();
-        assertNotNull(t2.getTree());
-        assertEquals("/z/child", t2.getPath());
+        assertFalse(nodeLocation.remove());
+        verify(child).remove();
     }
 
-    @Test(expected = UnsupportedOperationException.class)
-    public void testRemoveExisting() {
-        TreeLocation child = TreeLocation.create(root, "/z/child");
-        child.remove();
+    @Test
+    public void testGetNonExisting() {
+        TreeLocation location = TreeLocation.create(root, NON_EXISTING_PATH);
+        assertFalse(location.exists());
+        assertNull(location.getTree());
+        assertEquals(Text.getName(NON_EXISTING_PATH), nonExisting.getName());
+        assertEquals(NON_EXISTING_PATH, nonExisting.getPath());
     }
 
     @Test
     public void testRemoveNonExisting() {
-        TreeLocation nonExisting = TreeLocation.create(root, "/nonExisting");
-        // remove must not throw as it doesn't exist
-        assertFalse(nonExisting.remove());
+        TreeLocation location = TreeLocation.create(root, NON_EXISTING_PATH);
+        assertFalse(location.remove());
+        verify(nonExisting, never()).remove();
     }
 
     @Test
-    public void testNonExisting() {
-        TreeLocation nonExisting = TreeLocation.create(root, "/nonExisting");
-        assertNull(nonExisting.getTree());
-
-        assertEquals("nonExisting", nonExisting.getName());
-        assertEquals("/nonExisting", nonExisting.getPath());
+    public void testToString() {
+        TreeLocation location = TreeLocation.create(rootTree);
+        assertEquals(TreeLocation.create(rootTree).toString(), location.toString());
     }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeUtilTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeUtilTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeUtilTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/plugins/tree/TreeUtilTest.java Fri Feb  8 15:54:14 2019
@@ -21,18 +21,23 @@ import java.util.UUID;
 import javax.jcr.AccessDeniedException;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.LazyValue;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
 import org.junit.Test;
 
+import static org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants.NT_OAK_UNSTRUCTURED;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 public class TreeUtilTest extends AbstractTreeTest {
@@ -56,7 +61,7 @@ public class TreeUtilTest extends Abstra
         typeRoot = rootTree; // TODO
 
         ntDef = mockTree("/typeDef", typeRoot, true);
-        when(typeRoot.getChild(NodeTypeConstants.NT_OAK_UNSTRUCTURED)).thenReturn(ntDef);
+        when(typeRoot.getChild(NT_OAK_UNSTRUCTURED)).thenReturn(ntDef);
         when(typeRoot.getChild(NodeTypeConstants.MIX_LOCKABLE)).thenReturn(ntDef);
         when(typeRoot.getChild(NodeTypeConstants.MIX_VERSIONABLE)).thenReturn(ntDef);
         when(typeRoot.getChild("rep:NonExistingType")).thenReturn(nonExisting);
@@ -66,11 +71,72 @@ public class TreeUtilTest extends Abstra
 
     @Test
     public void testGetPrimaryTypeName() {
-        assertEquals(NodeTypeConstants.NT_OAK_UNSTRUCTURED, TreeUtil.getPrimaryTypeName(child));
+        assertEquals(NT_OAK_UNSTRUCTURED, TreeUtil.getPrimaryTypeName(child));
         assertNull(TreeUtil.getPrimaryTypeName(rootTree.getChild("x")));
     }
 
     @Test
+    public void testGetPrimaryTypeNameUnusedLazy() {
+        assertEquals(NT_OAK_UNSTRUCTURED, TreeUtil.getPrimaryTypeName(child, mock(LazyValue.class)));
+    }
+
+    @Test
+    public void testGetPrimaryTypeNameNewTreeLazy() {
+        Tree newTree = when(rootTree.getChild("x").getStatus()).thenReturn(Tree.Status.NEW).getMock();
+        assertNull(TreeUtil.getPrimaryTypeName(newTree, new LazyValue<Tree>() {
+            @Override
+            protected Tree createValue() {
+                throw new RuntimeException("should not get here");
+            }
+        }));
+    }
+
+    @Test
+    public void testGetPrimaryTypeNameFromLazy() {
+        assertEquals(NT_OAK_UNSTRUCTURED, TreeUtil.getPrimaryTypeName(rootTree.getChild("x"), new LazyValue<Tree>() {
+            @Override
+            protected Tree createValue() {
+                return when(mock(Tree.class).getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JcrConstants.JCR_PRIMARYTYPE, NT_OAK_UNSTRUCTURED, Type.NAME)).getMock();
+            }
+        }));
+    }
+
+    @Test
+    public void testGetMixinTypes() {
+        assertTrue(Iterables.elementsEqual(TreeUtil.getNames(child, JcrConstants.JCR_MIXINTYPES), TreeUtil.getMixinTypeNames(child)));
+        assertTrue(Iterables.elementsEqual(TreeUtil.getNames(rootTree, JcrConstants.JCR_MIXINTYPES), TreeUtil.getMixinTypeNames(rootTree)));
+    }
+
+    @Test
+    public void testGetMixinTypeNamesUnusedLazy() {
+        assertTrue(Iterables.elementsEqual(
+                TreeUtil.getNames(child, JcrConstants.JCR_MIXINTYPES),
+                TreeUtil.getMixinTypeNames(child, mock(LazyValue.class))));
+    }
+
+    @Test
+    public void testGetMixinTypeNamesNewTreeLazy() {
+        Tree newTree = when(rootTree.getChild("x").getStatus()).thenReturn(Tree.Status.NEW).getMock();
+        assertTrue(Iterables.isEmpty(TreeUtil.getMixinTypeNames(newTree, new LazyValue<Tree>() {
+            @Override
+            protected Tree createValue() {
+                throw new RuntimeException("should not get here");
+            }
+        })));
+    }
+
+    @Test
+    public void testGetMixinTypeNamesFromLazy() {
+        assertTrue(Iterables.elementsEqual(TreeUtil.getNames(child, JcrConstants.JCR_MIXINTYPES), TreeUtil.getMixinTypeNames(rootTree.getChild("x"), new LazyValue<Tree>() {
+            @Override
+            protected Tree createValue() {
+                return child;
+            }
+        })));
+    }
+
+
+    @Test
     public void testGetStrings() {
         assertNull(TreeUtil.getStrings(nonExisting, "pp"));
         Iterable<String> values = TreeUtil.getStrings(child, "pp");
@@ -172,22 +238,22 @@ public class TreeUtilTest extends Abstra
 
     @Test(expected = AccessDeniedException.class)
     public void testAddChildNonExisting() throws Exception {
-        TreeUtil.addChild(rootTree, nonExisting.getName(), NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+        TreeUtil.addChild(rootTree, nonExisting.getName(), NT_OAK_UNSTRUCTURED);
     }
 
     @Test
     public void testAddChild() throws Exception {
-        assertEquals(z.getPath(), TreeUtil.addChild(rootTree, z.getName(), NodeTypeConstants.NT_OAK_UNSTRUCTURED).getPath());
+        assertEquals(z.getPath(), TreeUtil.addChild(rootTree, z.getName(), NT_OAK_UNSTRUCTURED).getPath());
     }
 
     @Test(expected = AccessDeniedException.class)
     public void testGetOrAddChildNonExisting() throws Exception {
-        TreeUtil.getOrAddChild(rootTree, nonExisting.getName(), NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+        TreeUtil.getOrAddChild(rootTree, nonExisting.getName(), NT_OAK_UNSTRUCTURED);
     }
 
     @Test
     public void testGetOrAddChild() throws Exception {
-        assertEquals(z.getPath(), TreeUtil.getOrAddChild(rootTree, z.getName(), NodeTypeConstants.NT_OAK_UNSTRUCTURED).getPath());
+        assertEquals(z.getPath(), TreeUtil.getOrAddChild(rootTree, z.getName(), NT_OAK_UNSTRUCTURED).getPath());
     }
 
     @Test(expected = AccessDeniedException.class)
@@ -239,7 +305,7 @@ public class TreeUtilTest extends Abstra
 
     @Test
     public void testIsNodeType() {
-        assertTrue(TreeUtil.isNodeType(child, NodeTypeConstants.NT_OAK_UNSTRUCTURED, typeRoot));
+        assertTrue(TreeUtil.isNodeType(child, NT_OAK_UNSTRUCTURED, typeRoot));
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACETest.java Fri Feb  8 15:54:14 2019
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol;
 
+import java.util.Collections;
 import java.util.Set;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
@@ -27,8 +28,11 @@ import javax.jcr.security.Privilege;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
 import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
 import org.apache.jackrabbit.oak.spi.security.authorization.restriction.Restriction;
@@ -43,11 +47,14 @@ import org.mockito.Mockito;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
 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;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
 
 /**
  * Tests for {@link ACE}
@@ -60,7 +67,7 @@ public class ACETest extends AbstractAcc
 
     @Before
     public void before() throws Exception {
-        ValueFactory valueFactory = new ValueFactoryImpl(Mockito.mock(Root.class), getNamePathMapper());
+        ValueFactory valueFactory = new ValueFactoryImpl(mock(Root.class), getNamePathMapper());
         globValue = valueFactory.createValue("*");
         nameValue = valueFactory.createValue("nt:file", PropertyType.NAME);
         nameValues = new Value[] {
@@ -141,24 +148,51 @@ public class ACETest extends AbstractAcc
         assertEquals(expected, bits);
     }
 
+    @Test(expected = AccessControlException.class)
+    public void testNullPrivileges() throws Exception {
+        new ACE(testPrincipal, null, true, Collections.emptySet(), getNamePathMapper()) {
+            @Override
+            public Privilege[] getPrivileges() {
+                return new Privilege[0];
+            }
+        };
+    }
+
+    @Test(expected = AccessControlException.class)
+    public void testEmptyPrivileges() throws Exception {
+        new ACE(testPrincipal, PrivilegeBits.EMPTY, true, null, getNamePathMapper()) {
+            @Override
+            public Privilege[] getPrivileges() {
+                return new Privilege[0];
+            }
+        };
+    }
+
     @Test
-    public void testNullPrivileges() {
-        try {
-            new EmptyACE(null);
-            fail("Privileges must not be null");
-        } catch (AccessControlException e) {
-            // success
-        }
+    public void testNullRestrictions() throws Exception {
+        ACE ace = new ACE(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true, null, getNamePathMapper()) {
+            @Override
+            public Privilege[] getPrivileges() {
+                return new Privilege[0];
+            }
+        };
+        assertTrue(ace.getRestrictions().isEmpty());
     }
 
     @Test
-    public void testEmptyPrivileges() {
-        try {
-            new EmptyACE(PrivilegeBits.EMPTY);
-            fail("Privileges must not be empty.");
-        } catch (AccessControlException e) {
-            // success
-        }
+    public void testRestrictions() throws Exception {
+        Restriction r = new RestrictionImpl(PropertyStates.createProperty("r", "v"), false);
+        Restriction r2 = new RestrictionImpl(PropertyStates.createProperty("r2", ImmutableList.of("v"), Type.STRINGS), false);
+        Set<Restriction> restrictions = Sets.newHashSet(r, r2);
+        ACE ace = new ACE(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true, restrictions, getNamePathMapper()) {
+            @Override
+            public Privilege[] getPrivileges() {
+                return new Privilege[0];
+            }
+        };
+        assertFalse(ace.getRestrictions().isEmpty());
+        assertNotSame(restrictions, ace.getRestrictions());
+        assertTrue(Iterables.elementsEqual(restrictions, ace.getRestrictions()));
     }
 
     @Test
@@ -310,7 +344,7 @@ public class ACETest extends AbstractAcc
     public void testEqualsSameACE() throws Exception {
         ACE ace = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true);
 
-        assertTrue(ace.equals(ace));
+        assertEquals(ace, ace);
     }
 
     @Test
@@ -318,14 +352,14 @@ public class ACETest extends AbstractAcc
         ACE ace = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true);
         ACE ace2 = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true);
 
-        assertTrue(ace.equals(ace2));
+        assertEquals(ace, ace2);
     }
 
     @Test
     public void testEqualsOtherEntryImpl() throws Exception {
         ACE ace = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true);
 
-        assertFalse(ace.equals(Mockito.mock(JackrabbitAccessControlEntry.class)));
+        assertNotEquals(ace, mock(JackrabbitAccessControlEntry.class));
     }
 
     @Test
@@ -333,7 +367,7 @@ public class ACETest extends AbstractAcc
         ACE ace = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true);
         ACE ace2 = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), false);
 
-        assertFalse(ace.equals(ace2));
+        assertNotEquals(ace, ace2);
     }
 
     @Test
@@ -341,7 +375,7 @@ public class ACETest extends AbstractAcc
         ACE ace = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true);
         ACE ace2 = createEntry(EveryonePrincipal.getInstance(), PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true);
 
-        assertFalse(ace.equals(ace2));
+        assertNotEquals(ace, ace2);
     }
 
     @Test
@@ -349,7 +383,7 @@ public class ACETest extends AbstractAcc
         ACE ace = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true);
         ACE ace2 = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_ADD_CHILD_NODES), true);
 
-        assertFalse(ace.equals(ace2));
+        assertNotEquals(ace, ace2);
     }
 
     @Test
@@ -357,7 +391,7 @@ public class ACETest extends AbstractAcc
         ACE ace = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true, createRestriction("name2", "val"));
         ACE ace2 = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true, createRestriction("name", "val"));
 
-        assertFalse(ace.equals(ace2));
+        assertNotEquals(ace, ace2);
     }
 
     @Test
@@ -365,18 +399,6 @@ public class ACETest extends AbstractAcc
         ACE ace = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true, createRestriction("name", "val"));
         ACE ace2 = createEntry(testPrincipal, PrivilegeBits.BUILT_IN.get(PrivilegeConstants.JCR_READ), true, createRestriction("name", "val2"));
 
-        assertFalse(ace.equals(ace2));
-    }
-
-    private class EmptyACE extends ACE {
-
-        public EmptyACE(PrivilegeBits privilegeBits) throws AccessControlException {
-            super(testPrincipal, privilegeBits, true, null, getNamePathMapper());
-        }
-
-        @Override
-        public Privilege[] getPrivileges() {
-            return new Privilege[0];
-        }
+        assertNotEquals(ace, ace2);
     }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java Fri Feb  8 15:54:14 2019
@@ -25,6 +25,8 @@ import java.util.Map;
 import java.util.Set;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.security.Privilege;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
@@ -51,6 +53,11 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 /**
@@ -269,4 +276,36 @@ public class AbstractAccessControlListTe
     public void testIsMultiValueRestrictionForUnknownName() {
         assertFalse(createEmptyACL().isMultiValueRestriction("unknownRestrictionName"));
     }
+
+    @Test
+    public void testAddAccessControlEntry() throws Exception {
+        AbstractAccessControlList acl = spy(createEmptyACL());
+
+        Privilege[] privs =  new Privilege[0];
+        acl.addAccessControlEntry(testPrincipal, privs);
+
+        verify(acl, never()).addEntry(testPrincipal, privs, true);
+        verify(acl, times(1)).addEntry(testPrincipal, privs, true, Collections.emptyMap());
+    }
+
+    @Test
+    public void testAddEntry() throws Exception {
+        AbstractAccessControlList acl = spy(createEmptyACL());
+
+        Privilege[] privs = new Privilege[0];
+        acl.addEntry(testPrincipal, privs, false);
+
+        verify(acl, times(1)).addEntry(testPrincipal, privs, false, Collections.emptyMap());
+    }
+
+    @Test
+    public void testAddEntryWithRestrictions() throws Exception {
+        AbstractAccessControlList acl = spy(createEmptyACL());
+
+        Privilege[] privs =  new Privilege[0];
+        Map<String, Value> restrictions = Collections.singletonMap("name", mock(Value.class));
+        acl.addEntry(testPrincipal, privs, false, restrictions);
+
+        verify(acl, times(1)).addEntry(testPrincipal, privs, false, restrictions, null);
+    }
 }

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlManagerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlManagerTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlManagerTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlManagerTest.java Fri Feb  8 15:54:14 2019
@@ -62,6 +62,9 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class AbstractAccessControlManagerTest extends AbstractAccessControlTest {
@@ -268,14 +271,9 @@ public class AbstractAccessControlManage
         }
     }
 
-    @Test
+    @Test(expected = PathNotFoundException.class)
     public void testGetSupportedPrivilegesNonExistingPath() throws Exception {
-        try {
-            acMgr.getSupportedPrivileges(nonExistingPath);
-            fail("Nonexisting node -> PathNotFoundException expected.");
-        } catch (PathNotFoundException e) {
-            // success
-        }
+        acMgr.getSupportedPrivileges(nonExistingPath);
     }
 
     //--------------------------------------------------< privilegeFromName >---
@@ -420,6 +418,17 @@ public class AbstractAccessControlManage
     }
 
     @Test
+    public void testGetPrivilegesSessionPrincipalSet() throws Exception {
+        AbstractAccessControlManager mgr = spy(acMgr);
+        Privilege[] privileges = mgr.getPrivileges(testPath, testPrincipals);
+        assertArrayEquals(acMgr.getPrivileges(testPath), privileges);
+
+        // getPrivileges(String,Set) for the principals attached to the content session,
+        // must result in forwarding the call to getPrivilege(String)
+        verify(mgr, times(1)).getPrivileges(testPath);
+    }
+
+    @Test
     public void testGetRepoPrivileges() throws Exception {
         assertArrayEquals(allPrivileges, acMgr.getPrivileges(null));
     }
@@ -434,7 +443,7 @@ public class AbstractAccessControlManage
         assertArrayEquals(new Privilege[0], acMgr.getPrivileges(null, ImmutableSet.<Principal>of()));
     }
 
-    private final class TestAcMgr extends AbstractAccessControlManager {
+    private class TestAcMgr extends AbstractAccessControlManager {
 
         protected TestAcMgr(@NotNull Root root, @NotNull NamePathMapper namePathMapper, @NotNull SecurityProvider securityProvider) {
             super(root, namePathMapper, securityProvider);

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ImmutableACLTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ImmutableACLTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ImmutableACLTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ImmutableACLTest.java Fri Feb  8 15:54:14 2019
@@ -16,14 +16,6 @@
  */
 package org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import javax.jcr.Value;
-import javax.jcr.security.AccessControlEntry;
-import javax.jcr.security.AccessControlException;
-import javax.jcr.security.Privilege;
-
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
@@ -38,6 +30,14 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 
+import javax.jcr.Value;
+import javax.jcr.security.AccessControlEntry;
+import javax.jcr.security.AccessControlException;
+import javax.jcr.security.Privilege;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
@@ -240,4 +240,22 @@ public class ImmutableACLTest extends Ab
         assertSame(aacl.getNamePathMapper(), iacl.getNamePathMapper());
 
     }
+
+    @Override
+    @Test(expected = AccessControlException.class)
+    public void testAddAccessControlEntry() throws Exception {
+        createEmptyACL().addAccessControlEntry(testPrincipal, new Privilege[0]);
+    }
+
+    @Override
+    @Test(expected = AccessControlException.class)
+    public void testAddEntry() throws Exception {
+        createEmptyACL().addEntry(testPrincipal, new Privilege[0], true);
+    }
+
+    @Override
+    @Test(expected = AccessControlException.class)
+    public void testAddEntryWithRestrictions() throws Exception {
+        createEmptyACL().addEntry(testPrincipal, new Privilege[0], true, Collections.emptyMap());
+    }
 }

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/TestACL.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/TestACL.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/TestACL.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/TestACL.java Fri Feb  8 15:54:14 2019
@@ -34,7 +34,7 @@ import org.jetbrains.annotations.Nullabl
 /**
  * Test implementation of AbstractAccessControlList
  */
-public final class TestACL extends AbstractAccessControlList {
+public class TestACL extends AbstractAccessControlList {
 
     private final List<JackrabbitAccessControlEntry> entries = new ArrayList<>();
     private final RestrictionProvider restrictionProvider;
@@ -66,14 +66,8 @@ public final class TestACL extends Abstr
     }
 
     @Override
-    public boolean addEntry(Principal principal, Privilege[] privileges,
-                            boolean isAllow, Map<String, Value> restrictions) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
     public boolean addEntry(Principal principal, Privilege[] privileges, boolean isAllow, Map<String, Value> restrictions, Map<String, Value[]> mvRestrictions) {
-        throw new UnsupportedOperationException();
+        return false;
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java Fri Feb  8 15:54:14 2019
@@ -257,6 +257,14 @@ public class PermissionsTest {
     }
 
     @Test
+    public void testIsRepositoryPermission() {
+        Set<Long> repoPermissions = ImmutableSet.of(Permissions.NAMESPACE_MANAGEMENT, Permissions.NODE_TYPE_DEFINITION_MANAGEMENT, Permissions.PRIVILEGE_MANAGEMENT, Permissions.WORKSPACE_MANAGEMENT);
+        for (long permission : Permissions.aggregates(Permissions.ALL)) {
+            assertEquals(repoPermissions.contains(permission), Permissions.isRepositoryPermission(permission));
+        }
+    }
+
+    @Test
     public void testRespectParentPermissions() {
         List<Long> permissions = ImmutableList.of(
                 Permissions.ALL,

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java Fri Feb  8 15:54:14 2019
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.oak.spi.security.authorization.restriction;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -25,6 +26,7 @@ import javax.jcr.Value;
 import javax.jcr.security.AccessControlException;
 
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
@@ -45,6 +47,9 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class AbstractRestrictionProviderTest implements AccessControlConstants {
@@ -74,7 +79,11 @@ public class AbstractRestrictionProvider
         RestrictionDefinition glob = new RestrictionDefinitionImpl(REP_GLOB, Type.STRING, false);
         RestrictionDefinition nts  = new RestrictionDefinitionImpl(REP_NT_NAMES, Type.NAMES, false);
         RestrictionDefinition mand = new RestrictionDefinitionImpl("mandatory", Type.BOOLEAN, true);
-        supported = ImmutableMap.of(glob.getName(), glob, nts.getName(), nts, mand.getName(), mand);
+        RestrictionDefinition undef = mock(RestrictionDefinition.class);
+        when(undef.getName()).thenReturn("undefined");
+        when(undef.getRequiredType()).thenReturn((Type) Type.UNDEFINED);
+
+        supported = ImmutableMap.of(glob.getName(), glob, nts.getName(), nts, mand.getName(), mand, undef.getName(), undef);
         restrictionProvider = new AbstractRestrictionProvider(supported) {
             @NotNull
             @Override
@@ -93,12 +102,17 @@ public class AbstractRestrictionProvider
     private Tree getAceTree(Restriction... restrictions) {
         Tree restrictionsTree = Mockito.mock(Tree.class);;
         when(restrictionsTree.getName()).thenReturn(REP_RESTRICTIONS);
-        when(restrictionsTree.getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_RESTRICTIONS, Type.NAME));
+        PropertyState primaryType = PropertyStates.createProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_RESTRICTIONS, Type.NAME);
+        when(restrictionsTree.getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(primaryType);
+
         List<PropertyState> properties = new ArrayList<>();
         for (Restriction r : restrictions) {
             when(restrictionsTree.getProperty(r.getDefinition().getName())).thenReturn(r.getProperty());
             properties.add(r.getProperty());
         }
+        properties.add(primaryType);
+        properties.add(PropertyStates.createProperty(Iterables.get(AccessControlConstants.ACE_PROPERTY_NAMES, 0), "value"));
+
         when(restrictionsTree.getProperties()).thenReturn((Iterable)properties);
         when(restrictionsTree.exists()).thenReturn(true);
 
@@ -127,68 +141,28 @@ public class AbstractRestrictionProvider
         assertTrue(defs.isEmpty());
     }
 
-    @Test
+    @Test(expected = AccessControlException.class)
     public void testCreateForUnsupportedPath() throws Exception {
-        try {
-            restrictionProvider.createRestriction(unsupportedPath, REP_GLOB, globValue);
-            fail();
-        } catch (AccessControlException e) {
-            // success
-        }
-
-        try {
-            restrictionProvider.createRestriction(unsupportedPath, REP_NT_NAMES, nameValues);
-            fail();
-        } catch (AccessControlException e) {
-            // success
-        }
+        restrictionProvider.createRestriction(unsupportedPath, REP_GLOB, globValue);
     }
 
-    @Test
+    @Test(expected = AccessControlException.class)
     public void testCreateForUnsupportedName() throws Exception {
-        try {
-            restrictionProvider.createRestriction(testPath, "unsupported", globValue);
-            fail();
-        } catch (AccessControlException e) {
-            // success
-        }
-
-        try {
-            restrictionProvider.createRestriction(testPath, "unsupported", nameValues);
-            fail();
-        } catch (AccessControlException e) {
-            // success
-        }
+        restrictionProvider.createRestriction(testPath, "unsupported", nameValue);
     }
 
-    @Test
+    @Test(expected = AccessControlException.class)
     public void testCreateForUnsupportedType() throws Exception {
-        try {
-            restrictionProvider.createRestriction(testPath, REP_GLOB, valueFactory.createValue(true));
-            fail();
-        } catch (AccessControlException e) {
-            // success
-        }
-        try {
-            restrictionProvider.createRestriction(testPath, REP_NT_NAMES,
-                    valueFactory.createValue("nt:file", PropertyType.NAME),
-                    valueFactory.createValue(true));
-            fail();
-        } catch (AccessControlException e) {
-            // success
-        }
+        restrictionProvider.createRestriction(testPath, REP_NT_NAMES,
+                valueFactory.createValue("nt:file", PropertyType.NAME),
+                valueFactory.createValue(true));
     }
 
-    @Test
+    @Test(expected = AccessControlException.class)
     public void testCreateForUnsupportedMultiValues() throws Exception {
-        try {
-            restrictionProvider.createRestriction(testPath, REP_GLOB,
-                    valueFactory.createValue("*"),
-                    valueFactory.createValue("/a/*"));
-            fail();
-        } catch (AccessControlException e) {
-            // success
-        }
+        restrictionProvider.createRestriction(testPath, REP_GLOB,
+                valueFactory.createValue("*"),
+                valueFactory.createValue("/a/*"));
     }
 
     @Test
@@ -285,6 +259,16 @@ public class AbstractRestrictionProvider
     }
 
     @Test
+    public void testCreatedUndefinedType() throws Exception {
+        Restriction r = restrictionProvider.createRestriction(testPath, "undefined", valueFactory.createValue(23));
+    }
+
+    @Test(expected = AccessControlException.class)
+    public void testCreateUndefinedTypeMV() throws Exception {
+        Restriction r2 = restrictionProvider.createRestriction(testPath, "undefined", valueFactory.createValue(23), valueFactory.createValue(false));
+    }
+
+    @Test
     public void testReadRestrictionsForUnsupportedPath() {
         Set<Restriction> restrictions = restrictionProvider.readRestrictions(unsupportedPath, getAceTree());
         assertTrue(restrictions.isEmpty());
@@ -301,55 +285,36 @@ public class AbstractRestrictionProvider
     }
 
     @Test
-    public void testValidateRestrictionsUnsupportedPath() throws Exception {
+    public void testValidateRestrictionsUnsupportedPathEmptyRestrictions() throws Exception {
         // empty restrictions => must succeed
         restrictionProvider.validateRestrictions(null, getAceTree());
+    }
 
-
+    @Test(expected = AccessControlException.class)
+    public void testValidateRestrictionsUnsupportedPath() throws Exception {
         // non-empty restrictions => must fail
-        try {
-            Restriction restr = restrictionProvider.createRestriction(testPath, REP_GLOB, globValue);
-            restrictionProvider.validateRestrictions(null, getAceTree(restr));
-            fail();
-        } catch (AccessControlException e) {
-            // success
-        }
+        Restriction restr = restrictionProvider.createRestriction(testPath, REP_GLOB, globValue);
+        restrictionProvider.validateRestrictions(null, getAceTree(restr));
     }
 
-    @Test
+    @Test(expected = AccessControlException.class)
     public void testValidateRestrictionsWrongType() throws Exception {
         Restriction mand = restrictionProvider.createRestriction(testPath, "mandatory", valueFactory.createValue(true));
-        try {
-            Tree ace = getAceTree(mand, new RestrictionImpl(PropertyStates.createProperty(REP_GLOB, true), false));
-
-            restrictionProvider.validateRestrictions(testPath, ace);
-            fail("wrong type with restriction 'rep:glob");
-        } catch (AccessControlException e) {
-            // success
-        }
+        Tree ace = getAceTree(mand, new RestrictionImpl(PropertyStates.createProperty(REP_GLOB, true), false));
+        restrictionProvider.validateRestrictions(testPath, ace);
     }
 
-    @Test
+    @Test(expected = AccessControlException.class)
     public void testValidateRestrictionsUnsupportedRestriction() throws Exception {
         Restriction mand = restrictionProvider.createRestriction(testPath, "mandatory", valueFactory.createValue(true));
-        try {
-            Tree ace = getAceTree(mand, new RestrictionImpl(PropertyStates.createProperty("unsupported", "value"), false));
-            restrictionProvider.validateRestrictions(testPath, ace);
-            fail("wrong type with restriction 'rep:glob");
-        } catch (AccessControlException e) {
-            // success
-        }
+        Tree ace = getAceTree(mand, new RestrictionImpl(PropertyStates.createProperty("unsupported", "value"), false));
+        restrictionProvider.validateRestrictions(testPath, ace);
     }
 
-    @Test
+    @Test(expected = AccessControlException.class)
     public void testValidateRestrictionsMissingMandatory() throws Exception {
         Restriction glob = restrictionProvider.createRestriction(testPath, REP_GLOB, globValue);
-        try {
-            restrictionProvider.validateRestrictions(testPath, getAceTree(glob));
-            fail("missing mandatory restriction");
-        } catch (AccessControlException e) {
-            // success
-        }
+        restrictionProvider.validateRestrictions(testPath, getAceTree(glob));
     }
 
     @Test
@@ -363,4 +328,33 @@ public class AbstractRestrictionProvider
         restrictionProvider.validateRestrictions(testPath, getAceTree(mand, ntNames));
         restrictionProvider.validateRestrictions(testPath, getAceTree(mand, glob, ntNames));
     }
+
+    @Test
+    public void testGetRestrictionTree() {
+        Tree aceTree = getAceTree();
+        Tree restrictionTree = restrictionProvider.getRestrictionsTree(aceTree);
+        assertEquals(aceTree.getChild(REP_RESTRICTIONS), restrictionTree);
+    }
+
+    @Test
+    public void testGetRestrictionTreeMissing() {
+        Tree aceTree = when(mock(Tree.class).getChild(REP_RESTRICTIONS)).thenReturn(mock(Tree.class)).getMock();
+        Tree restrictionTree = restrictionProvider.getRestrictionsTree(aceTree);
+        assertEquals(aceTree, restrictionTree);
+    }
+
+    @Test
+    public void testWriteEmptyRestrictions() throws Exception {
+        restrictionProvider.writeRestrictions(null, getAceTree(), Collections.emptySet());
+    }
+
+    @Test
+    public void testWriteRestrictions() throws Exception {
+        Restriction ntNames = restrictionProvider.createRestriction(testPath, REP_NT_NAMES, nameValues);
+        Tree aceTree = getAceTree();
+        restrictionProvider.writeRestrictions(null, aceTree, Collections.singleton(ntNames));
+
+        verify(aceTree, times(1)).getChild(REP_RESTRICTIONS);
+        verify(aceTree.getChild(REP_RESTRICTIONS), times(1)).setProperty(ntNames.getProperty());
+    }
 }

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java Fri Feb  8 15:54:14 2019
@@ -29,6 +29,7 @@ import javax.jcr.security.AccessControlE
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Root;
@@ -47,6 +48,10 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class CompositeRestrictionProviderTest implements AccessControlConstants {
@@ -60,38 +65,8 @@ public class CompositeRestrictionProvide
     private static final Restriction LONGS_RESTRICTION = new RestrictionImpl(PropertyStates.createProperty(NAME_LONGS, ImmutableList.of(Long.MAX_VALUE), Type.LONGS), false);
     private static final Restriction UNKNOWN_RESTRICTION = new RestrictionImpl(PropertyStates.createProperty("unknown", "string"), false);
 
-    private RestrictionProvider rp1 = new AbstractRestrictionProvider(ImmutableMap.<String, RestrictionDefinition>of(
-            REP_GLOB, GLOB_RESTRICTION.getDefinition(),
-            REP_PREFIXES, NT_PREFIXES_RESTRICTION.getDefinition()
-    )) {
-        @NotNull
-        @Override
-        public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Tree tree) {
-            throw new UnsupportedOperationException();
-        }
-
-        @NotNull
-        @Override
-        public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Set<Restriction> restrictions) {
-            throw new UnsupportedOperationException();
-        }
-    };
-    private RestrictionProvider rp2 = new AbstractRestrictionProvider(ImmutableMap.of(
-            NAME_BOOLEAN, MANDATORY_BOOLEAN_RESTRICTION.getDefinition(),
-            NAME_LONGS, LONGS_RESTRICTION.getDefinition()
-    )) {
-        @NotNull
-        @Override
-        public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Tree tree) {
-            throw new UnsupportedOperationException();
-        }
-
-        @NotNull
-        @Override
-        public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Set<Restriction> restrictions) {
-            throw new UnsupportedOperationException();
-        }
-    };
+    private RestrictionProvider rp1 = spy(createRestrictionProvider(GLOB_RESTRICTION.getDefinition(), NT_PREFIXES_RESTRICTION.getDefinition()));
+    private RestrictionProvider rp2 = spy(createRestrictionProvider(MANDATORY_BOOLEAN_RESTRICTION.getDefinition(), LONGS_RESTRICTION.getDefinition()));
 
     private Set<String> supported = ImmutableSet.of(
             MANDATORY_BOOLEAN_RESTRICTION.getDefinition().getName(),
@@ -100,21 +75,66 @@ public class CompositeRestrictionProvide
             REP_GLOB);
     private RestrictionProvider provider = CompositeRestrictionProvider.newInstance(rp1, rp2);
 
-    private ValueFactory vf = new ValueFactoryImpl(Mockito.mock(Root.class), NamePathMapper.DEFAULT);
+    private ValueFactory vf = new ValueFactoryImpl(mock(Root.class), NamePathMapper.DEFAULT);
+
+    @NotNull
+    private AbstractRestrictionProvider createRestrictionProvider(@NotNull RestrictionDefinition... supportedDefinitions) {
+        return createRestrictionProvider(null, null, supportedDefinitions);
+    }
+
+    @NotNull
+    private AbstractRestrictionProvider createRestrictionProvider(@Nullable RestrictionPattern pattern, @Nullable Restriction toRead, @NotNull RestrictionDefinition... supportedDefinitions) {
+        ImmutableMap.Builder<String, RestrictionDefinition> builder = ImmutableMap.builder();
+        for (RestrictionDefinition def : supportedDefinitions) {
+            builder.put(def.getName(), def);
+        }
+        return new AbstractRestrictionProvider(builder.build()) {
+            @Override
+            public @NotNull Set<Restriction> readRestrictions(String oakPath, @NotNull Tree aceTree) {
+                if (toRead != null) {
+                    return ImmutableSet.of(toRead);
+                } else {
+                    return super.readRestrictions(oakPath, aceTree);
+                }
+            }
+
+            @NotNull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Tree tree) {
+                return getPattern();
+            }
+
+            @NotNull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Set<Restriction> restrictions) {
+                return getPattern();
+            }
+
+            private @NotNull RestrictionPattern getPattern() {
+                if (pattern == null) {
+                    throw new UnsupportedOperationException();
+                } else {
+                    return pattern;
+                }
+            }
+        };
+    }
 
     private Tree getAceTree(Restriction... restrictions) {
-        Tree restrictionsTree = Mockito.mock(Tree.class);;
+        Tree restrictionsTree = mock(Tree.class);;
         when(restrictionsTree.getName()).thenReturn(REP_RESTRICTIONS);
         when(restrictionsTree.getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_RESTRICTIONS, Type.NAME));
         List<PropertyState> properties = new ArrayList<>();
         for (Restriction r : restrictions) {
-            when(restrictionsTree.getProperty(r.getDefinition().getName())).thenReturn(r.getProperty());
+            String name = r.getDefinition().getName();
+            when(restrictionsTree.getProperty(name)).thenReturn(r.getProperty());
+            when(restrictionsTree.hasProperty(name)).thenReturn(true);
             properties.add(r.getProperty());
         }
         when(restrictionsTree.getProperties()).thenReturn((Iterable)properties);
         when(restrictionsTree.exists()).thenReturn(true);
 
-        Tree ace = Mockito.mock(Tree.class);
+        Tree ace = mock(Tree.class);
         when(ace.getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_GRANT_ACE, Type.NAME));
         when(ace.getChild(REP_RESTRICTIONS)).thenReturn(restrictionsTree);
         when(ace.exists()).thenReturn(true);
@@ -138,7 +158,6 @@ public class CompositeRestrictionProvide
         RestrictionProvider crp2 = CompositeRestrictionProvider.newInstance(rp1, rp2);
 
         assertEquals(crp.getSupportedRestrictions("/testPath"), crp2.getSupportedRestrictions("/testPath"));
-
     }
 
     @Test
@@ -165,14 +184,9 @@ public class CompositeRestrictionProvide
         }
     }
 
-    @Test
+    @Test(expected = AccessControlException.class)
     public void testCreateRestrictionWithInvalidPath() throws Exception {
-        try {
-            provider.createRestriction(null, REP_GLOB, vf.createValue("*"));
-            fail("rep:glob not supported at 'null' path");
-        } catch (AccessControlException e) {
-            // success
-        }
+        provider.createRestriction(null, REP_GLOB, vf.createValue("*"));
     }
 
     @Test
@@ -238,6 +252,19 @@ public class CompositeRestrictionProvide
         }
     }
 
+    @Test
+    public void testWriteEmptyRestrictions() throws Exception {
+        provider.writeRestrictions("/test", getAceTree(), Collections.emptySet());
+    }
+
+    @Test
+    public void testWriteRestrictions() throws Exception {
+        Tree aceTree = getAceTree();
+        provider.writeRestrictions("/test", aceTree, ImmutableSet.of(LONGS_RESTRICTION, GLOB_RESTRICTION));
+        verify(rp1, times(1)).writeRestrictions("/test", aceTree, Collections.singleton(GLOB_RESTRICTION));
+        verify(rp2, times(1)).writeRestrictions("/test", aceTree, Collections.singleton(LONGS_RESTRICTION));
+    }
+
     @Test(expected = AccessControlException.class)
     public void testValidateRestrictionsMissingMandatory() throws Exception {
         Tree aceTree = getAceTree(GLOB_RESTRICTION);
@@ -255,57 +282,66 @@ public class CompositeRestrictionProvide
         Restriction rWithInvalidDefinition = new RestrictionImpl(PropertyStates.createProperty(REP_GLOB, ImmutableList.of("str", "str2"), Type.STRINGS), false);
         Tree aceTree = getAceTree(rWithInvalidDefinition, MANDATORY_BOOLEAN_RESTRICTION);
 
-        RestrictionProvider rp = new AbstractRestrictionProvider(ImmutableMap.of(REP_GLOB, GLOB_RESTRICTION.getDefinition())) {
-            @NotNull
-            @Override
-            public Set<Restriction> readRestrictions(String oakPath, @NotNull Tree aceTree) {
-                return ImmutableSet.of(rWithInvalidDefinition);
-            }
-
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Tree tree) {
-                throw new UnsupportedOperationException();
-            }
-
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Set<Restriction> restrictions) {
-                throw new UnsupportedOperationException();
-            }
-        };
+        RestrictionProvider rp = createRestrictionProvider(null, rWithInvalidDefinition, GLOB_RESTRICTION.getDefinition());
         RestrictionProvider cp = CompositeRestrictionProvider.newInstance(rp, rp2);
         cp.validateRestrictions("/test", aceTree);
     }
 
     @Test(expected = AccessControlException.class)
     public void testValidateRestrictionsUnsupported() throws Exception {
-        Tree aceTree = getAceTree(UNKNOWN_RESTRICTION, MANDATORY_BOOLEAN_RESTRICTION);
-
-        RestrictionProvider rp = new AbstractRestrictionProvider(ImmutableMap.of(REP_GLOB, GLOB_RESTRICTION.getDefinition())) {
-            @NotNull
-            @Override
-            public Set<Restriction> readRestrictions(String oakPath, @NotNull Tree aceTree) {
-                return ImmutableSet.of(UNKNOWN_RESTRICTION);
-            }
-
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Tree tree) {
-                throw new UnsupportedOperationException();
-            }
+        Tree aceTree = getAceTree(UNKNOWN_RESTRICTION, NT_PREFIXES_RESTRICTION);
 
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Set<Restriction> restrictions) {
-                throw new UnsupportedOperationException();
-            }
-        };
+        RestrictionProvider rp = createRestrictionProvider(null, UNKNOWN_RESTRICTION, GLOB_RESTRICTION.getDefinition());
         RestrictionProvider cp = CompositeRestrictionProvider.newInstance(rp, rp2);
         cp.validateRestrictions("/test", aceTree);
     }
 
     @Test
+    public void testValidateRestrictions() throws Exception {
+        Tree aceTree = getAceTree(LONGS_RESTRICTION, MANDATORY_BOOLEAN_RESTRICTION);
+        provider.validateRestrictions("/test", aceTree);
+    }
+
+    @Test
+    public void testValidateRestrictionsTreeNotExisting() throws Exception {
+        Tree aceTree = getAceTree(NT_PREFIXES_RESTRICTION);
+        when(aceTree.getChild(REP_RESTRICTIONS).exists()).thenReturn(false);
+
+        CompositeRestrictionProvider.newInstance(
+                rp1,
+                createRestrictionProvider(LONGS_RESTRICTION.getDefinition())
+        ).validateRestrictions("/test", aceTree);
+    }
+
+    @Test
+    public void testValidateRestrictionsMissingProperty() throws Exception {
+        Tree aceTree = getAceTree();
+        when(aceTree.getChild(REP_RESTRICTIONS).exists()).thenReturn(true);
+
+        CompositeRestrictionProvider.newInstance(
+                rp1,
+                createRestrictionProvider(null, GLOB_RESTRICTION, LONGS_RESTRICTION.getDefinition())
+        ).validateRestrictions("/test", aceTree);
+    }
+
+    @Test
+    public void testValidateRestrictionsOnAceNode() throws Exception {
+        List<PropertyState> properties = new ArrayList<>();
+
+        Tree aceTree = getAceTree();
+        properties.add(aceTree.getProperty(JcrConstants.JCR_PRIMARYTYPE));
+
+        when(aceTree.getChild(REP_RESTRICTIONS).exists()).thenReturn(false);
+
+        when(aceTree.hasProperty(NAME_BOOLEAN)).thenReturn(true);
+        when(aceTree.getProperty(NAME_BOOLEAN)).thenReturn(MANDATORY_BOOLEAN_RESTRICTION.getProperty());
+        properties.add(MANDATORY_BOOLEAN_RESTRICTION.getProperty());
+        when(aceTree.getProperties()).thenReturn((Iterable)properties);
+
+        provider.validateRestrictions("/test", aceTree);
+    }
+
+    @Test
     public void testGetRestrictionPatternEmptyComposite() {
         assertSame(RestrictionPattern.EMPTY, CompositeRestrictionProvider.newInstance().getPattern("/test", ImmutableSet.of(GLOB_RESTRICTION)));
     }
@@ -313,47 +349,34 @@ public class CompositeRestrictionProvide
 
     @Test
     public void testGetRestrictionPatternSingleEmpty() {
-        assertSame(RestrictionPattern.EMPTY, CompositeRestrictionProvider.newInstance(new AbstractRestrictionProvider(ImmutableMap.of()) {
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Tree tree) {
-                return RestrictionPattern.EMPTY;
-            }
-
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Set<Restriction> restrictions) {
-                return RestrictionPattern.EMPTY;
-            }
-        }).getPattern("/test", ImmutableSet.of(GLOB_RESTRICTION)));
+        assertSame(RestrictionPattern.EMPTY, CompositeRestrictionProvider.newInstance(
+                createRestrictionProvider(RestrictionPattern.EMPTY, null)).
+                getPattern("/test", ImmutableSet.of(GLOB_RESTRICTION)));
     }
 
     @Test
     public void testGetRestrictionPatternAllEmpty() {
-        assertSame(RestrictionPattern.EMPTY, CompositeRestrictionProvider.newInstance(new AbstractRestrictionProvider(ImmutableMap.of()) {
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Tree tree) {
-                return RestrictionPattern.EMPTY;
-            }
+        assertSame(RestrictionPattern.EMPTY, CompositeRestrictionProvider.newInstance(
+                createRestrictionProvider(RestrictionPattern.EMPTY, null),
+                createRestrictionProvider(RestrictionPattern.EMPTY, null)).
+                getPattern("/test", getAceTree(NT_PREFIXES_RESTRICTION)));
+    }
 
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Set<Restriction> restrictions) {
-                return RestrictionPattern.EMPTY;
-            }
-        }, new AbstractRestrictionProvider(ImmutableMap.of()) {
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Tree tree) {
-                return RestrictionPattern.EMPTY;
-            }
+    @Test
+    public void testGetRestrictionPattern() {
+        RestrictionPattern pattern = mock(RestrictionPattern.class);
+        RestrictionProvider cp = CompositeRestrictionProvider.newInstance(
+                createRestrictionProvider(pattern, null, LONGS_RESTRICTION.getDefinition()),
+                createRestrictionProvider(RestrictionPattern.EMPTY, null, GLOB_RESTRICTION.getDefinition()));
+        assertSame(pattern, cp.getPattern("/test", getAceTree(LONGS_RESTRICTION)));
+        assertSame(pattern, cp.getPattern("/test", getAceTree(GLOB_RESTRICTION)));
+    }
 
-            @NotNull
-            @Override
-            public RestrictionPattern getPattern(@Nullable String oakPath, @NotNull Set<Restriction> restrictions) {
-                return RestrictionPattern.EMPTY;
-            }
-        }).getPattern("/test", getAceTree(NT_PREFIXES_RESTRICTION)));
+    @Test
+    public void testGetCompositeRestrictionPattern() {
+        RestrictionProvider cp = CompositeRestrictionProvider.newInstance(
+                createRestrictionProvider(mock(RestrictionPattern.class), null, NT_PREFIXES_RESTRICTION.getDefinition()),
+                createRestrictionProvider(mock(RestrictionPattern.class), null, MANDATORY_BOOLEAN_RESTRICTION.getDefinition()));
+        assertTrue(cp.getPattern("/test", getAceTree(LONGS_RESTRICTION)) instanceof CompositePattern);
     }
 }

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionDefinitionImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionDefinitionImplTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionDefinitionImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionDefinitionImplTest.java Fri Feb  8 15:54:14 2019
@@ -25,6 +25,7 @@ import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -57,21 +58,14 @@ public class RestrictionDefinitionImplTe
         assertTrue(definition.isMandatory());
     }
 
-    @Test
-    public void testInvalid() {
-        try {
-            new RestrictionDefinitionImpl(null, Type.BOOLEAN, false);
-            fail("Creating RestrictionDefinition with null name should fail.");
-        } catch (NullPointerException e) {
-            // success
-        }
+    @Test(expected = NullPointerException.class)
+    public void testNullName() {
+        new RestrictionDefinitionImpl(null, Type.BOOLEAN, false);
+    }
 
-        try {
-            new RestrictionDefinitionImpl(name, Type.UNDEFINED, false);
-            fail("Creating RestrictionDefinition with undefined required type should fail.");
-        } catch (IllegalArgumentException e) {
-            // success
-        }
+    @Test(expected = IllegalArgumentException.class)
+    public void testUndefinedType() {
+        new RestrictionDefinitionImpl(name, Type.UNDEFINED, false);
     }
 
     @Test
@@ -111,7 +105,7 @@ public class RestrictionDefinitionImplTe
         });
 
         for (RestrictionDefinition rd : defs) {
-            assertFalse(definition.equals(rd));
+            assertNotEquals(definition, rd);
         }
     }
 }

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionImplTest.java?rev=1853226&r1=1853225&r2=1853226&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionImplTest.java Fri Feb  8 15:54:14 2019
@@ -84,14 +84,9 @@ public class RestrictionImplTest {
         assertTrue(restriction.getDefinition().isMandatory());
     }
 
-    @Test
-    public void testInvalid() {
-        try {
-            new RestrictionImpl(null, false);
-            fail("Creating RestrictionDefinition with null name should fail.");
-        } catch (NullPointerException e) {
-            // success
-        }
+    @Test(expected = NullPointerException.class)
+    public void testNullProperty() {
+        new RestrictionImpl(null, false);
     }
 
     @Test
@@ -141,7 +136,7 @@ public class RestrictionImplTest {
         });
 
         for (Restriction r : rs) {
-            assertFalse(restriction.equals(r));
+            assertNotEquals(restriction, r);
         }
     }