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 2017/05/15 10:29:54 UTC

svn commit: r1795162 - in /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak: security/authorization/restriction/ spi/security/authorization/restriction/

Author: angela
Date: Mon May 15 10:29:54 2017
New Revision: 1795162

URL: http://svn.apache.org/viewvc?rev=1795162&view=rev
Log:
OAK-6038 : Drop dependency of spi.security.* tests from AbstractSecurityTest

Added:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/AbstractRestrictionProviderTest.java
      - copied, changed from r1794697, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/CompositeRestrictionProviderTest.java
      - copied, changed from r1794697, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/TestProvider.java
      - copied, changed from r1794697, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/TestProvider.java
Removed:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/TestProvider.java
Modified:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java

Copied: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/AbstractRestrictionProviderTest.java (from r1794697, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/AbstractRestrictionProviderTest.java?p2=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/AbstractRestrictionProviderTest.java&p1=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java&r1=1794697&r2=1795162&rev=1795162&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/AbstractRestrictionProviderTest.java Mon May 15 10:29:54 2017
@@ -14,9 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.spi.security.authorization.restriction;
+package org.apache.jackrabbit.oak.security.authorization.restriction;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import javax.jcr.PropertyType;
@@ -34,18 +33,24 @@ import org.apache.jackrabbit.oak.api.Typ
 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.accesscontrol.AccessControlConstants;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.AbstractRestrictionProvider;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.Restriction;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinition;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinitionImpl;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionImpl;
 import org.apache.jackrabbit.oak.util.NodeUtil;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+/**
+ * Additional tests for {@link AbstractRestrictionProvider} that require a full
+ * oak repository.
+ */
 public class AbstractRestrictionProviderTest extends AbstractSecurityTest implements AccessControlConstants {
 
     private String unsupportedPath = null;
@@ -97,187 +102,6 @@ public class AbstractRestrictionProvider
         return ace;
     }
 
-
-    @Test
-    public void testGetSupportedRestrictions() throws Exception {
-        Set<RestrictionDefinition> defs = restrictionProvider.getSupportedRestrictions(testPath);
-        assertNotNull(defs);
-        assertEquals(supported.size(), defs.size());
-        for (RestrictionDefinition def : supported.values()) {
-            assertTrue(defs.contains(def));
-        }
-    }
-
-    @Test
-    public void testGetSupportedRestrictionsForUnsupportedPath() throws Exception {
-        Set<RestrictionDefinition> defs = restrictionProvider.getSupportedRestrictions(unsupportedPath);
-        assertNotNull(defs);
-        assertTrue(defs.isEmpty());
-    }
-
-    @Test
-    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
-        }
-    }
-
-    @Test
-    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
-        }
-    }
-
-    @Test
-    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
-        }
-    }
-
-    @Test
-    public void testCreateForUnsupportedMultiValues() throws Exception {
-        try {
-            restrictionProvider.createRestriction(testPath, REP_GLOB,
-                    valueFactory.createValue("*"),
-                    valueFactory.createValue("/a/*"));
-            fail();
-        } catch (AccessControlException e) {
-            // success
-        }
-    }
-
-    @Test
-    public void testCreateRestriction() throws Exception {
-        Restriction r = restrictionProvider.createRestriction(testPath, REP_GLOB, globValue);
-        assertNotNull(r);
-        assertEquals(REP_GLOB, r.getDefinition().getName());
-        assertEquals(globValue.getString(), r.getProperty().getValue(Type.STRING));
-    }
-
-    @Test
-    public void testCreateRestrictionFromArray() throws Exception {
-        Restriction r = restrictionProvider.createRestriction(testPath, REP_GLOB, new Value[] {globValue});
-        assertNotNull(r);
-        assertEquals(REP_GLOB, r.getDefinition().getName());
-        assertEquals(globValue.getString(), r.getProperty().getValue(Type.STRING));
-        assertFalse(r.getProperty().isArray());
-    }
-
-    @Test
-    public void testCreateMvRestriction() throws Exception {
-        Restriction r = restrictionProvider.createRestriction(testPath, REP_NT_NAMES,
-                valueFactory.createValue("nt:folder", PropertyType.NAME),
-                valueFactory.createValue("nt:file", PropertyType.NAME));
-        assertNotNull(r);
-        assertEquals(REP_NT_NAMES, r.getDefinition().getName());
-        assertEquals(Type.NAMES, r.getDefinition().getRequiredType());
-
-        PropertyState ps = r.getProperty();
-        assertTrue(ps.isArray());
-        assertEquals(Type.NAMES, ps.getType());
-
-        List<Value> vs = ValueFactoryImpl.createValues(ps, namePathMapper);
-        assertArrayEquals(nameValues, vs.toArray(new Value[vs.size()]));
-    }
-
-    @Test
-    public void testCreateMvRestriction2() throws Exception {
-        Restriction r = restrictionProvider.createRestriction(testPath, REP_NT_NAMES, nameValues);
-        assertNotNull(r);
-        assertEquals(REP_NT_NAMES, r.getDefinition().getName());
-        assertEquals(Type.NAMES, r.getDefinition().getRequiredType());
-
-        PropertyState ps = r.getProperty();
-        assertTrue(ps.isArray());
-        assertEquals(Type.NAMES, ps.getType());
-
-        List<Value> vs = ValueFactoryImpl.createValues(ps, namePathMapper);
-        assertArrayEquals(nameValues, vs.toArray(new Value[vs.size()]));
-    }
-
-    @Test
-    public void testCreateMvRestriction3() throws Exception {
-        Restriction r = restrictionProvider.createRestriction(testPath, REP_NT_NAMES, nameValue);
-        assertNotNull(r);
-        assertEquals(REP_NT_NAMES, r.getDefinition().getName());
-        assertEquals(Type.NAMES, r.getDefinition().getRequiredType());
-
-        assertTrue(r.getProperty().isArray());
-        assertEquals(Type.NAMES, r.getProperty().getType());
-
-        List<Value> vs = ValueFactoryImpl.createValues(r.getProperty(), namePathMapper);
-        assertArrayEquals(new Value[] {nameValue}, vs.toArray(new Value[vs.size()]));
-    }
-
-    @Test
-    public void testCreateEmptyMvRestriction() throws Exception {
-        Restriction r = restrictionProvider.createRestriction(testPath, REP_NT_NAMES);
-        assertNotNull(r);
-        assertEquals(REP_NT_NAMES, r.getDefinition().getName());
-        assertEquals(Type.NAMES, r.getDefinition().getRequiredType());
-
-        assertTrue(r.getProperty().isArray());
-        assertEquals(Type.NAMES, r.getProperty().getType());
-
-        List<Value> vs = ValueFactoryImpl.createValues(r.getProperty(), namePathMapper);
-        assertNotNull(vs);
-        assertEquals(0, vs.size());
-    }
-
-    @Test
-    public void testCreateEmptyMvRestriction2() throws Exception {
-        Restriction r = restrictionProvider.createRestriction(testPath, REP_NT_NAMES, new Value[0]);
-        assertNotNull(r);
-        assertEquals(REP_NT_NAMES, r.getDefinition().getName());
-        assertEquals(Type.NAMES, r.getDefinition().getRequiredType());
-
-        assertTrue(r.getProperty().isArray());
-        assertEquals(Type.NAMES, r.getProperty().getType());
-
-        List<Value> vs = ValueFactoryImpl.createValues(r.getProperty(), namePathMapper);
-        assertNotNull(vs);
-        assertEquals(0, vs.size());
-    }
-
-    @Test
-    public void testReadRestrictionsForUnsupportedPath() throws Exception {
-        Set<Restriction> restrictions = restrictionProvider.readRestrictions(unsupportedPath, getAceTree());
-        assertTrue(restrictions.isEmpty());
-    }
-
     @Test
     public void testReadRestrictions() throws Exception {
         Restriction r = restrictionProvider.createRestriction(testPath, REP_GLOB, globValue);

Copied: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/CompositeRestrictionProviderTest.java (from r1794697, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/CompositeRestrictionProviderTest.java?p2=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/CompositeRestrictionProviderTest.java&p1=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java&r1=1794697&r2=1795162&rev=1795162&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/CompositeRestrictionProviderTest.java Mon May 15 10:29:54 2017
@@ -14,13 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.spi.security.authorization.restriction;
+package org.apache.jackrabbit.oak.security.authorization.restriction;
 
-import java.util.Collections;
-import java.util.Map;
 import java.util.Set;
 import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
 import javax.jcr.security.AccessControlException;
@@ -31,6 +28,13 @@ import org.apache.jackrabbit.oak.Abstrac
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.CompositePattern;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.CompositeRestrictionProvider;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.Restriction;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinition;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinitionImpl;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionImpl;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
 import org.apache.jackrabbit.oak.util.NodeUtil;
 import org.junit.After;
 import org.junit.Before;
@@ -38,10 +42,13 @@ import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+/**
+ * Additional tests for {@link CompositeRestrictionProvider} that require a full
+ * oak repository.
+ */
 public class CompositeRestrictionProviderTest extends AbstractSecurityTest implements AccessControlConstants {
 
     private RestrictionProvider rp1 = new TestProvider(ImmutableMap.<String, RestrictionDefinition>of(
@@ -81,114 +88,6 @@ public class CompositeRestrictionProvide
         }
     }
 
-    @Test
-    public void testEmpty() {
-        assertSame(RestrictionProvider.EMPTY, CompositeRestrictionProvider.newInstance(Collections.<RestrictionProvider>emptySet()));
-    }
-
-    @Test
-    public void testSingle() {
-        RestrictionProvider rp = new TestProvider(Collections.<String, RestrictionDefinition>emptyMap());
-        assertSame(rp, CompositeRestrictionProvider.newInstance(Collections.singleton(rp)));
-    }
-
-    @Test
-    public void testNewInstance() {
-        RestrictionProvider crp = CompositeRestrictionProvider.newInstance(ImmutableSet.of(rp1, rp2));
-        RestrictionProvider crp2 = CompositeRestrictionProvider.newInstance(rp1, rp2);
-
-        assertEquals(crp.getSupportedRestrictions("/testPath"), crp2.getSupportedRestrictions("/testPath"));
-
-    }
-
-    @Test
-    public void testGetSupportedRestrictions() {
-        String[] paths = new String[] {null, "/testPath"};
-        for (String path : paths) {
-            Set<RestrictionDefinition> defs = provider.getSupportedRestrictions(path);
-            int expectedSize = rp1.getSupportedRestrictions(path).size() + rp2.getSupportedRestrictions(path).size();
-            assertEquals(expectedSize, defs.size());
-            assertTrue(defs.containsAll(rp1.getSupportedRestrictions(path)));
-            assertTrue(defs.containsAll(rp2.getSupportedRestrictions(path)));
-        }
-    }
-
-    @Test
-    public void testCreateRestriction() throws Exception {
-        Map<String, Value> valid = ImmutableMap.of(
-                "boolean", vf.createValue(true),
-                "longs", vf.createValue(10),
-                REP_GLOB, vf.createValue("*")
-        );
-        for (String name : valid.keySet()) {
-            provider.createRestriction("/testPath", name, valid.get(name));
-        }
-    }
-
-    @Test
-    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
-        }
-    }
-
-    @Test
-    public void testCreateInvalidRestriction() throws Exception {
-        Map<String, Value> invalid = ImmutableMap.of(
-                "boolean", vf.createValue("wrong_type"),
-                REP_GLOB, vf.createValue(true)
-        );
-        for (String name : invalid.keySet()) {
-            try {
-                provider.createRestriction("/testPath", name, invalid.get(name));
-                fail("invalid restriction " + name);
-            } catch (AccessControlException e) {
-                // success
-            }
-        }
-    }
-
-    @Test
-    public void testMvCreateRestriction() throws RepositoryException {
-        Map<String, Value[]> valid = ImmutableMap.of(
-                "longs", new Value[] {vf.createValue(100)},
-                REP_NT_NAMES, new Value[] {vf.createValue("nt:base", PropertyType.NAME), vf.createValue("nt:unstructured", PropertyType.NAME)}
-        );
-        for (String name : valid.keySet()) {
-            provider.createRestriction("/testPath", name, valid.get(name));
-        }
-    }
-
-    @Test
-    public void testCreateMvRestrictionWithInvalidPath() throws Exception {
-        try {
-            provider.createRestriction(null, REP_NT_NAMES, new Value[] {vf.createValue("nt:base", PropertyType.NAME)});
-            fail("rep:glob not supported at 'null' path");
-        } catch (AccessControlException e) {
-            // success
-        }
-    }
-
-    @Test
-    public void testCreateInvalidMvRestriction() throws Exception {
-        Map<String, Value[]> invalid = ImmutableMap.of(
-                "boolean", new Value[] {vf.createValue(true), vf.createValue(false)},
-                "longs", new Value[] {vf.createValue("wrong_type")},
-                REP_NT_NAMES, new Value[] {vf.createValue(true)}
-        );
-        for (String name : invalid.keySet()) {
-            try {
-                provider.createRestriction("/testPath", name, invalid.get(name));
-                fail("invalid restriction " + name);
-            } catch (AccessControlException e) {
-                // success
-            }
-        }
-    }
-
     @Test
     public void testReadRestrictions() throws Exception {
         NodeUtil aceNode = new NodeUtil(root.getTree("/")).addChild("test", NT_REP_GRANT_ACE);

Copied: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/TestProvider.java (from r1794697, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/TestProvider.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/TestProvider.java?p2=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/TestProvider.java&p1=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/TestProvider.java&r1=1794697&r2=1795162&rev=1795162&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/TestProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/restriction/TestProvider.java Mon May 15 10:29:54 2017
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.spi.security.authorization.restriction;
+package org.apache.jackrabbit.oak.security.authorization.restriction;
 
 import java.util.HashSet;
 import java.util.Map;
@@ -25,6 +25,12 @@ import javax.annotation.Nullable;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.AbstractRestrictionProvider;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.Restriction;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinition;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinitionImpl;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionImpl;
+import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionPattern;
 
 /**
  * RestrictionProvider for tests.

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java?rev=1795162&r1=1795161&r2=1795162&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java Mon May 15 10:29:54 2017
@@ -16,28 +16,30 @@
  */
 package org.apache.jackrabbit.oak.spi.security.authorization.restriction;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.jcr.PropertyType;
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
 import javax.jcr.security.AccessControlException;
 
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
 import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 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.accesscontrol.AccessControlConstants;
-import org.apache.jackrabbit.oak.util.NodeUtil;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
@@ -45,8 +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.when;
 
-public class AbstractRestrictionProviderTest extends AbstractSecurityTest implements AccessControlConstants {
+public class AbstractRestrictionProviderTest implements AccessControlConstants {
 
     private String unsupportedPath = null;
     private String testPath = "/testRoot";
@@ -55,16 +58,14 @@ public class AbstractRestrictionProvider
     private Value[] nameValues;
     private Value nameValue;
 
+    private final NamePathMapper namePathMapper = NamePathMapper.DEFAULT;
     private ValueFactory valueFactory;
     private Map<String, ? extends RestrictionDefinition> supported;
     private AbstractRestrictionProvider restrictionProvider;
 
     @Before
-    @Override
     public void before() throws Exception {
-        super.before();
-
-        valueFactory = new ValueFactoryImpl(root, namePathMapper);
+        valueFactory = new ValueFactoryImpl(Mockito.mock(Root.class), namePathMapper);
         globValue = valueFactory.createValue("*");
         nameValue = valueFactory.createValue("nt:file", PropertyType.NAME);
         nameValues = new Value[] {
@@ -76,28 +77,41 @@ public class AbstractRestrictionProvider
         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);
-        restrictionProvider = new TestProvider(supported);
-    }
-
-    @After
-    @Override
-    public void after() throws Exception {
-        try {
-            root.refresh();
-        } finally {
-            super.after();
-        }
+        restrictionProvider = new AbstractRestrictionProvider(supported) {
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Set<Restriction> restrictions) {
+                throw new UnsupportedOperationException();
+            }
+        };
     }
 
     private Tree getAceTree(Restriction... restrictions) throws Exception {
-        NodeUtil rootNode = new NodeUtil(root.getTree("/"));
-        NodeUtil tmp = rootNode.addChild("testRoot", JcrConstants.NT_UNSTRUCTURED);
-        Tree ace = tmp.addChild("rep:policy", NT_REP_ACL).addChild("ace0", NT_REP_GRANT_ACE).getTree();
-        restrictionProvider.writeRestrictions(tmp.getTree().getPath(), ace, ImmutableSet.copyOf(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));
+        List<PropertyState> properties = new ArrayList();
+        for (Restriction r : restrictions) {
+            when(restrictionsTree.getProperty(r.getDefinition().getName())).thenReturn(r.getProperty());
+            properties.add(r.getProperty());
+        }
+        when(restrictionsTree.getProperties()).thenReturn((Iterable)properties);
+        when(restrictionsTree.exists()).thenReturn(true);
+
+        Tree ace = Mockito.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);
+
         return ace;
     }
 
-
     @Test
     public void testGetSupportedRestrictions() throws Exception {
         Set<RestrictionDefinition> defs = restrictionProvider.getSupportedRestrictions(testPath);
@@ -289,30 +303,6 @@ public class AbstractRestrictionProvider
     }
 
     @Test
-    public void testWriteRestrictions() throws Exception {
-        Restriction r = restrictionProvider.createRestriction(testPath, REP_GLOB, globValue);
-        Tree aceTree = getAceTree();
-
-        restrictionProvider.writeRestrictions(testPath, aceTree, ImmutableSet.<Restriction>of(r));
-
-        assertTrue(aceTree.hasChild(REP_RESTRICTIONS));
-        Tree restr = aceTree.getChild(REP_RESTRICTIONS);
-        assertEquals(r.getProperty(), restr.getProperty(REP_GLOB));
-    }
-
-    @Test
-    public void testWriteInvalidRestrictions() throws Exception {
-        PropertyState ps = PropertyStates.createProperty(REP_GLOB, valueFactory.createValue(false));
-        Tree aceTree = getAceTree();
-
-        restrictionProvider.writeRestrictions(testPath, aceTree, ImmutableSet.<Restriction>of(new RestrictionImpl(ps, false)));
-
-        assertTrue(aceTree.hasChild(REP_RESTRICTIONS));
-        Tree restr = aceTree.getChild(REP_RESTRICTIONS);
-        assertEquals(ps, restr.getProperty(REP_GLOB));
-    }
-
-    @Test
     public void testValidateRestrictionsUnsupportedPath() throws Exception {
         // empty restrictions => must succeed
         restrictionProvider.validateRestrictions(null, getAceTree());
@@ -332,8 +322,7 @@ public class AbstractRestrictionProvider
     public void testValidateRestrictionsWrongType() throws Exception {
         Restriction mand = restrictionProvider.createRestriction(testPath, "mandatory", valueFactory.createValue(true));
         try {
-            Tree ace = getAceTree(mand);
-            new NodeUtil(ace).getChild(REP_RESTRICTIONS).setBoolean(REP_GLOB, true);
+            Tree ace = getAceTree(mand, new RestrictionImpl(PropertyStates.createProperty(REP_GLOB, true), false));
 
             restrictionProvider.validateRestrictions(testPath, ace);
             fail("wrong type with restriction 'rep:glob");
@@ -346,9 +335,7 @@ public class AbstractRestrictionProvider
     public void testValidateRestrictionsUnsupportedRestriction() throws Exception {
         Restriction mand = restrictionProvider.createRestriction(testPath, "mandatory", valueFactory.createValue(true));
         try {
-            Tree ace = getAceTree(mand);
-            new NodeUtil(ace).getChild(REP_RESTRICTIONS).setString("Unsupported", "value");
-
+            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) {

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java?rev=1795162&r1=1795161&r2=1795162&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProviderTest.java Mon May 15 10:29:54 2017
@@ -16,69 +16,110 @@
  */
 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;
-import javax.jcr.PropertyType;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
 import javax.jcr.security.AccessControlException;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.JcrConstants;
+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.api.Type;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 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.accesscontrol.AccessControlConstants;
-import org.apache.jackrabbit.oak.util.NodeUtil;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.when;
 
-public class CompositeRestrictionProviderTest extends AbstractSecurityTest implements AccessControlConstants {
+public class CompositeRestrictionProviderTest implements AccessControlConstants {
 
-    private RestrictionProvider rp1 = new TestProvider(ImmutableMap.<String, RestrictionDefinition>of(
-            REP_GLOB, new RestrictionDefinitionImpl(REP_GLOB, Type.STRING, false),
-            REP_NT_NAMES, new RestrictionDefinitionImpl(REP_NT_NAMES, Type.NAMES, false),
-            REP_PREFIXES, new RestrictionDefinitionImpl(REP_PREFIXES, Type.STRINGS, false)
-    ));
-    private RestrictionProvider rp2 = new TestProvider(ImmutableMap.of(
-            "boolean", new RestrictionDefinitionImpl("boolean", Type.BOOLEAN, true),
-            "longs", new RestrictionDefinitionImpl("longs", Type.LONGS, false)
-    ));
-
-    private RestrictionProvider rp3 = new TestProvider(ImmutableMap.of(
-            "string", new RestrictionDefinitionImpl("string", Type.STRING, false)),
-            true
-    );
+    private static final String NAME_LONGS = "longs";
+    private static final String NAME_BOOLEAN = "boolean";
 
-    private Set<String> supported = ImmutableSet.of("boolean", "longs", REP_NT_NAMES, REP_GLOB);
+    private static final Restriction GLOB_RESTRICTION = new RestrictionImpl(PropertyStates.createProperty(REP_GLOB, "*"), false);
+    private static final Restriction NT_PREFIXES_RESTRICTION = new RestrictionImpl(PropertyStates.createProperty(REP_PREFIXES, ImmutableList.of(), Type.STRINGS), false);
+    private static final Restriction MANDATORY_BOOLEAN_RESTRICTION = new RestrictionImpl(PropertyStates.createProperty(NAME_BOOLEAN, true, Type.BOOLEAN), true);
+    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()
+    )) {
+        @Nonnull
+        @Override
+        public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Nonnull
+        @Override
+        public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Set<Restriction> restrictions) {
+            throw new UnsupportedOperationException();
+        }
+    };
+    private RestrictionProvider rp2 = new AbstractRestrictionProvider(ImmutableMap.of(
+            NAME_BOOLEAN, MANDATORY_BOOLEAN_RESTRICTION.getDefinition(),
+            NAME_LONGS, LONGS_RESTRICTION.getDefinition()
+    )) {
+        @Nonnull
+        @Override
+        public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Nonnull
+        @Override
+        public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Set<Restriction> restrictions) {
+            throw new UnsupportedOperationException();
+        }
+    };
+
+    private Set<String> supported = ImmutableSet.of(
+            MANDATORY_BOOLEAN_RESTRICTION.getDefinition().getName(),
+            LONGS_RESTRICTION.getDefinition().getName(),
+            REP_PREFIXES,
+            REP_GLOB);
     private RestrictionProvider provider = CompositeRestrictionProvider.newInstance(rp1, rp2);
 
-    private ValueFactory vf;
+    private ValueFactory vf = new ValueFactoryImpl(Mockito.mock(Root.class), NamePathMapper.DEFAULT);
 
-    @Override
-    @Before
-    public void before() throws Exception {
-        super.before();
-        vf = getValueFactory();
-    }
-
-    @Override
-    @After
-    public void after() throws Exception {
-        try {
-            root.refresh();
-        } finally {
-            super.after();
+    private Tree getAceTree(Restriction... restrictions) throws Exception {
+        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));
+        List<PropertyState> properties = new ArrayList();
+        for (Restriction r : restrictions) {
+            when(restrictionsTree.getProperty(r.getDefinition().getName())).thenReturn(r.getProperty());
+            properties.add(r.getProperty());
         }
+        when(restrictionsTree.getProperties()).thenReturn((Iterable)properties);
+        when(restrictionsTree.exists()).thenReturn(true);
+
+        Tree ace = Mockito.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);
+
+        return ace;
     }
 
     @Test
@@ -88,8 +129,7 @@ public class CompositeRestrictionProvide
 
     @Test
     public void testSingle() {
-        RestrictionProvider rp = new TestProvider(Collections.<String, RestrictionDefinition>emptyMap());
-        assertSame(rp, CompositeRestrictionProvider.newInstance(Collections.singleton(rp)));
+        assertSame(rp1, CompositeRestrictionProvider.newInstance(Collections.singleton(rp1)));
     }
 
     @Test
@@ -116,8 +156,8 @@ public class CompositeRestrictionProvide
     @Test
     public void testCreateRestriction() throws Exception {
         Map<String, Value> valid = ImmutableMap.of(
-                "boolean", vf.createValue(true),
-                "longs", vf.createValue(10),
+                NAME_BOOLEAN, vf.createValue(true),
+                NAME_LONGS, vf.createValue(10),
                 REP_GLOB, vf.createValue("*")
         );
         for (String name : valid.keySet()) {
@@ -138,7 +178,7 @@ public class CompositeRestrictionProvide
     @Test
     public void testCreateInvalidRestriction() throws Exception {
         Map<String, Value> invalid = ImmutableMap.of(
-                "boolean", vf.createValue("wrong_type"),
+                NAME_BOOLEAN, vf.createValue("wrong_type"),
                 REP_GLOB, vf.createValue(true)
         );
         for (String name : invalid.keySet()) {
@@ -154,30 +194,25 @@ public class CompositeRestrictionProvide
     @Test
     public void testMvCreateRestriction() throws RepositoryException {
         Map<String, Value[]> valid = ImmutableMap.of(
-                "longs", new Value[] {vf.createValue(100)},
-                REP_NT_NAMES, new Value[] {vf.createValue("nt:base", PropertyType.NAME), vf.createValue("nt:unstructured", PropertyType.NAME)}
+                NAME_LONGS, new Value[] {vf.createValue(100)},
+                REP_PREFIXES, new Value[] {vf.createValue("prefix"), vf.createValue("prefix2")}
         );
         for (String name : valid.keySet()) {
             provider.createRestriction("/testPath", name, valid.get(name));
         }
     }
 
-    @Test
+    @Test(expected = AccessControlException.class)
     public void testCreateMvRestrictionWithInvalidPath() throws Exception {
-        try {
-            provider.createRestriction(null, REP_NT_NAMES, new Value[] {vf.createValue("nt:base", PropertyType.NAME)});
-            fail("rep:glob not supported at 'null' path");
-        } catch (AccessControlException e) {
-            // success
-        }
+        provider.createRestriction(null, REP_PREFIXES, new Value[] {vf.createValue("jcr")});
     }
 
     @Test
     public void testCreateInvalidMvRestriction() throws Exception {
         Map<String, Value[]> invalid = ImmutableMap.of(
-                "boolean", new Value[] {vf.createValue(true), vf.createValue(false)},
-                "longs", new Value[] {vf.createValue("wrong_type")},
-                REP_NT_NAMES, new Value[] {vf.createValue(true)}
+                NAME_BOOLEAN, new Value[] {vf.createValue(true), vf.createValue(false)},
+                NAME_LONGS, new Value[] {vf.createValue("wrong_type")},
+                REP_PREFIXES, new Value[] {vf.createValue(true)}
         );
         for (String name : invalid.keySet()) {
             try {
@@ -191,16 +226,10 @@ public class CompositeRestrictionProvide
 
     @Test
     public void testReadRestrictions() throws Exception {
-        NodeUtil aceNode = new NodeUtil(root.getTree("/")).addChild("test", NT_REP_GRANT_ACE);
-        aceNode.setBoolean("boolean", true);
-        aceNode.setValues("longs", new Value[] {vf.createValue(10), vf.createValue(290)});
-        aceNode.setString(REP_GLOB, "*");
-        aceNode.setNames(REP_NT_NAMES); // empty array
-        aceNode.setString("invalid", "val");
-        aceNode.setStrings("invalid2", "val1", "val2", "val3");
+        Tree aceTree = getAceTree(NT_PREFIXES_RESTRICTION, MANDATORY_BOOLEAN_RESTRICTION, UNKNOWN_RESTRICTION);
 
-        Set<Restriction> restrictions = provider.readRestrictions("/test", aceNode.getTree());
-        assertEquals(4, restrictions.size());
+        Set<Restriction> restrictions = provider.readRestrictions("/test", aceTree);
+        assertEquals(2, restrictions.size());
         for (Restriction r : restrictions) {
             String name = r.getDefinition().getName();
             if (!supported.contains(name)) {
@@ -209,123 +238,122 @@ public class CompositeRestrictionProvide
         }
     }
 
-    @Test
-    public void testWriteRestrictions() throws Exception {
-        NodeUtil aceNode = new NodeUtil(root.getTree("/")).addChild("test", NT_REP_GRANT_ACE);
-        Set<Restriction> restrictions = ImmutableSet.of(
-                provider.createRestriction("/test","boolean", vf.createValue(true)),
-                provider.createRestriction("/test", "longs"),
-                provider.createRestriction("/test", REP_GLOB, vf.createValue("*")),
-                provider.createRestriction("/test", REP_NT_NAMES, vf.createValue("nt:base", PropertyType.NAME), vf.createValue("nt:version", PropertyType.NAME)));
-        provider.writeRestrictions("/test", aceNode.getTree(), restrictions);
-    }
-
-    @Test
-    public void testWriteUnsupportedRestrictions() throws Exception {
-        NodeUtil aceNode = new NodeUtil(root.getTree("/")).addChild("test", NT_REP_GRANT_ACE);
-        Restriction invalid = new RestrictionImpl(PropertyStates.createProperty("invalid", vf.createValue(true)), false);
-        try {
-            provider.writeRestrictions("/test", aceNode.getTree(), ImmutableSet.<Restriction>of(invalid));
-            fail("AccessControlException expected");
-        } catch (AccessControlException e) {
-            // success
-        }
-    }
+    @Test(expected = AccessControlException.class)
+    public void testValidateRestrictionsMissingMandatory() throws Exception {
+        Tree aceTree = getAceTree(GLOB_RESTRICTION);
+        provider.validateRestrictions("/test", aceTree);
+    }
+
+    @Test(expected = AccessControlException.class)
+    public void testValidateRestrictionsWrongType() throws Exception {
+        Tree aceTree = getAceTree(new RestrictionImpl(PropertyStates.createProperty(MANDATORY_BOOLEAN_RESTRICTION.getDefinition().getName(), "string"), true));
+        provider.validateRestrictions("/test", aceTree);
+    }
+
+    @Test(expected = AccessControlException.class)
+    public void testValidateRestrictionsInvalidDefinition() throws Exception {
+        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())) {
+            @Nonnull
+            @Override
+            public Set<Restriction> readRestrictions(String oakPath, @Nonnull Tree aceTree) {
+                return ImmutableSet.of(rWithInvalidDefinition);
+            }
 
-    @Test
-    public void testValidateRestrictions() throws Exception {
-        NodeUtil aceNode = new NodeUtil(root.getTree("/")).addChild("test", NT_REP_GRANT_ACE);
-        NodeUtil rNode = aceNode.addChild(REP_RESTRICTIONS, NT_REP_RESTRICTIONS);
-        rNode.setBoolean("boolean", true);
-        rNode.setValues("longs", new Value[] {vf.createValue(10), vf.createValue(290)});
-        rNode.setString(REP_GLOB, "*");
-        rNode.setNames(REP_NT_NAMES); // empty array
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree) {
+                throw new UnsupportedOperationException();
+            }
 
-        provider.validateRestrictions("/test", aceNode.getTree());
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Set<Restriction> restrictions) {
+                throw new UnsupportedOperationException();
+            }
+        };
+        RestrictionProvider cp = CompositeRestrictionProvider.newInstance(rp, rp2);
+        cp.validateRestrictions("/test", aceTree);
+    }
 
-        // remove mandatory restriction
-        rNode.removeProperty("boolean");
-        try {
-            provider.validateRestrictions("/test", aceNode.getTree());
-            fail("validation should detect missing mandatory restrictions");
-        } catch (AccessControlException e) {
-            // success
-        }
+    @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())) {
+            @Nonnull
+            @Override
+            public Set<Restriction> readRestrictions(String oakPath, @Nonnull Tree aceTree) {
+                return ImmutableSet.of(UNKNOWN_RESTRICTION);
+            }
 
-        // set with wrong type
-        rNode.setName("boolean", "nt:base");
-        try {
-            provider.validateRestrictions("/test", aceNode.getTree());
-            fail("validation should detect wrong restriction type");
-        } catch (AccessControlException e) {
-            // success
-        } finally {
-            rNode.setBoolean("boolean", true);
-        }
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree) {
+                throw new UnsupportedOperationException();
+            }
 
-        rNode.setStrings(REP_GLOB, "*", "/jcr:content");
-        try {
-            provider.validateRestrictions("/test", aceNode.getTree());
-            fail("validation should detect wrong restriction type (multi vs single valued)");
-        } catch (AccessControlException e) {
-            // success
-        }
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Set<Restriction> restrictions) {
+                throw new UnsupportedOperationException();
+            }
+        };
+        RestrictionProvider cp = CompositeRestrictionProvider.newInstance(rp, rp2);
+        cp.validateRestrictions("/test", aceTree);
     }
 
     @Test
-    public void testValidateRestrictionsAtEntryNode() throws Exception {
-        NodeUtil aceNode = new NodeUtil(root.getTree("/")).addChild("test", NT_REP_GRANT_ACE);
-        aceNode.setBoolean("boolean", true);
-        aceNode.setValues("longs", new Value[] {vf.createValue(10), vf.createValue(290)});
-        aceNode.setString(REP_GLOB, "*");
-        aceNode.setNames(REP_NT_NAMES); // empty array
-
-        provider.validateRestrictions("/test", aceNode.getTree());
+    public void testGetRestrictionPatternEmptyComposite() throws Exception {
+        assertSame(RestrictionPattern.EMPTY, CompositeRestrictionProvider.newInstance().getPattern("/test", ImmutableSet.of(GLOB_RESTRICTION)));
     }
 
-    @Test
-    public void testValidateInvalidRestrictionDef() throws Exception {
-        RestrictionProvider rp = CompositeRestrictionProvider.newInstance(rp1, rp3);
-
-        NodeUtil aceNode = new NodeUtil(root.getTree("/")).addChild("test", NT_REP_GRANT_ACE);
-        NodeUtil rNode = aceNode.addChild(REP_RESTRICTIONS, NT_REP_RESTRICTIONS);
-        rNode.setValues(REP_GLOB, new Value[]{vf.createValue(10), vf.createValue(290)});
-
-        try {
-            rp.validateRestrictions("/test", aceNode.getTree());
-            fail("Validation must detect invalid restriction definition");
-        } catch (AccessControlException e) {
-            // success
-        }
-    }
 
     @Test
-    public void testValidateUnsupportedRestriction() throws Exception {
-        RestrictionProvider rp = CompositeRestrictionProvider.newInstance(rp1, rp3);
-
-        NodeUtil aceNode = new NodeUtil(root.getTree("/")).addChild("test", NT_REP_GRANT_ACE);
-        NodeUtil rNode = aceNode.addChild(REP_RESTRICTIONS, NT_REP_RESTRICTIONS);
-        rNode.setString("unsupported", "value");
+    public void testGetRestrictionPatternSingleEmpty() throws Exception {
+        assertSame(RestrictionPattern.EMPTY, CompositeRestrictionProvider.newInstance(new AbstractRestrictionProvider(ImmutableMap.of()) {
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree) {
+                return RestrictionPattern.EMPTY;
+            }
 
-        try {
-            rp.validateRestrictions("/test", aceNode.getTree());
-            fail("Validation must detect unsupported restriction");
-        } catch (AccessControlException e) {
-            // success
-        }
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Set<Restriction> restrictions) {
+                return RestrictionPattern.EMPTY;
+            }
+        }).getPattern("/test", ImmutableSet.of(GLOB_RESTRICTION)));
     }
 
     @Test
-    public void testGetRestrictionPattern() throws Exception {
-        NodeUtil aceNode = new NodeUtil(root.getTree("/")).addChild("test", NT_REP_GRANT_ACE);
-        NodeUtil rNode = aceNode.addChild(REP_RESTRICTIONS, NT_REP_RESTRICTIONS);
-        rNode.setString(REP_GLOB, "*");
-
-        assertFalse(provider.getPattern("/test", aceNode.getTree()) instanceof CompositePattern);
+    public void testGetRestrictionPatternAllEmpty() throws Exception {
+        assertSame(RestrictionPattern.EMPTY, CompositeRestrictionProvider.newInstance(new AbstractRestrictionProvider(ImmutableMap.of()) {
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree) {
+                return RestrictionPattern.EMPTY;
+            }
 
-        rNode.setBoolean("boolean", true);
-        rNode.setValues("longs", new Value[]{vf.createValue(10), vf.createValue(290)});
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Set<Restriction> restrictions) {
+                return RestrictionPattern.EMPTY;
+            }
+        }, new AbstractRestrictionProvider(ImmutableMap.of()) {
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree) {
+                return RestrictionPattern.EMPTY;
+            }
 
-        assertTrue(provider.getPattern("/test", rNode.getTree()) instanceof CompositePattern);
+            @Nonnull
+            @Override
+            public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Set<Restriction> restrictions) {
+                return RestrictionPattern.EMPTY;
+            }
+        }).getPattern("/test", getAceTree(NT_PREFIXES_RESTRICTION)));
     }
 }
\ No newline at end of file