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 2018/05/09 15:38:38 UTC

svn commit: r1831261 [2/2] - in /jackrabbit/oak/trunk: oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/impl/ oak-core/src/main/java/org/apa...

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java Wed May  9 15:38:38 2018
@@ -16,19 +16,16 @@
  */
 package org.apache.jackrabbit.oak.security.authorization.composite;
 
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_NAMESPACE_MANAGEMENT;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_NODE_TYPE_MANAGEMENT;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_READ;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_WRITE;
-import static org.junit.Assert.assertEquals;
-
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.apache.jackrabbit.oak.api.PropertyState;
@@ -48,10 +45,11 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_NAMESPACE_MANAGEMENT;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_NODE_TYPE_MANAGEMENT;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_READ;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_WRITE;
+import static org.junit.Assert.assertEquals;
 
 public class CompositeProviderCustomMixTest extends AbstractSecurityTest {
 
@@ -232,7 +230,7 @@ public class CompositeProviderCustomMixT
 
         AuthorizationConfiguration config = getConfig(AuthorizationConfiguration.class);
         List<AggregatedPermissionProvider> composite = ImmutableList.of(a1, a2);
-        return new CompositePermissionProvider(root, composite, config.getContext(), type, getRootProvider());
+        return new CompositePermissionProvider(root, composite, config.getContext(), type, getRootProvider(), getTreeProvider());
     }
 
     private static class CustomProvider implements AggregatedPermissionProvider {
@@ -351,7 +349,7 @@ public class CompositeProviderCustomMixT
         }
     }
 
-    private static class CustomTreePermission implements TreePermission {
+    private static final class CustomTreePermission implements TreePermission {
 
         private final Set<String> granted;
         private final Map<String, Long> grantMap;

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderNoScopeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderNoScopeTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderNoScopeTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderNoScopeTest.java Wed May  9 15:38:38 2018
@@ -30,7 +30,6 @@ import org.apache.jackrabbit.api.Jackrab
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
 import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider;
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
@@ -124,7 +123,7 @@ public class CompositeProviderNoScopeTes
         List<String> childNames = ImmutableList.of("test", "a", "b", "c", "nonexisting");
 
         Tree rootTree = readOnlyRoot.getTree(ROOT_PATH);
-        NodeState ns = ((ImmutableTree) rootTree).getNodeState();
+        NodeState ns = getTreeProvider().asNodeState(rootTree);
         TreePermission tp = createPermissionProvider().getTreePermission(rootTree, TreePermission.EMPTY);
         assertCompositeTreePermission(tp);
 
@@ -141,7 +140,7 @@ public class CompositeProviderNoScopeTes
         List<String> childNames = ImmutableList.of("test", "a", "b", "c", "nonexisting");
 
         Tree rootTree = readOnlyRoot.getTree(ROOT_PATH);
-        NodeState ns = ((ImmutableTree) rootTree).getNodeState();
+        NodeState ns = getTreeProvider().asNodeState(rootTree);
         TreePermission tp = createPermissionProviderOR().getTreePermission(rootTree, TreePermission.EMPTY);
         assertCompositeTreePermission(tp);
 
@@ -438,7 +437,7 @@ public class CompositeProviderNoScopeTes
 
 
         Tree rootTree = readOnlyRoot.getTree(ROOT_PATH);
-        NodeState ns = ((ImmutableTree) rootTree).getNodeState();
+        NodeState ns = getTreeProvider().asNodeState(rootTree);
         TreePermission tp = cppTestUser.getTreePermission(rootTree, TreePermission.EMPTY);
         assertEquals(2, ((TreePermission[]) tpField.get(tp)).length);
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java Wed May  9 15:38:38 2018
@@ -26,7 +26,6 @@ import org.apache.jackrabbit.oak.api.Roo
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
 import org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType;
 import org.apache.jackrabbit.oak.spi.security.Context;
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider;
@@ -43,7 +42,7 @@ import static org.junit.Assert.assertSam
 public class CompositeTreePermissionTest extends AbstractSecurityTest {
 
     private Root readOnlyRoot;
-    private ImmutableTree rootTree;
+    private Tree rootTree;
 
     private AggregatedPermissionProvider fullScopeProvider;
 
@@ -56,7 +55,7 @@ public class CompositeTreePermissionTest
         root.commit();
 
         readOnlyRoot = getRootProvider().createReadOnlyRoot(root);
-        rootTree = (ImmutableTree) readOnlyRoot.getTree("/");
+        rootTree = readOnlyRoot.getTree("/");
 
         fullScopeProvider = new FullScopeProvider(readOnlyRoot);
     }
@@ -73,7 +72,7 @@ public class CompositeTreePermissionTest
     }
 
     private TreePermission createRootTreePermission(AggregatedPermissionProvider... providers) {
-        return new CompositePermissionProvider(readOnlyRoot, Arrays.asList(providers), Context.DEFAULT, CompositionType.AND, getRootProvider())
+        return new CompositePermissionProvider(readOnlyRoot, Arrays.asList(providers), Context.DEFAULT, CompositionType.AND, getRootProvider(), getTreeProvider())
                 .getTreePermission(rootTree, TreePermission.EMPTY);
     }
 
@@ -96,7 +95,7 @@ public class CompositeTreePermissionTest
         assertCompositeTreePermission(false, rootTp);
         assertEquals(expected, rootTp.getClass());
 
-        TreePermission testTp = rootTp.getChildPermission("test", rootTree.getChild("test").getNodeState());
+        TreePermission testTp = rootTp.getChildPermission("test", getTreeProvider().asNodeState(rootTree.getChild("test")));
         assertEquals(expected, testTp.getClass());
     }
 
@@ -105,7 +104,7 @@ public class CompositeTreePermissionTest
         TreePermission rootTp = createRootTreePermission(fullScopeProvider, fullScopeProvider);
         assertCompositeTreePermission(true, rootTp);
 
-        TreePermission testTp = rootTp.getChildPermission("test", rootTree.getChild("test").getNodeState());
+        TreePermission testTp = rootTp.getChildPermission("test", getTreeProvider().asNodeState(rootTree.getChild("test")));
         assertCompositeTreePermission(true, testTp);
     }
 
@@ -114,7 +113,7 @@ public class CompositeTreePermissionTest
         TreePermission rootTp = createRootTreePermission(new NoScopeProvider(root), new NoScopeProvider(root));
         assertCompositeTreePermission(true, rootTp);
 
-        assertSame(TreePermission.EMPTY, rootTp.getChildPermission("test", rootTree.getChild("test").getNodeState()));
+        assertSame(TreePermission.EMPTY, rootTp.getChildPermission("test", getTreeProvider().asNodeState(rootTree.getChild("test"))));
     }
 
     @Test
@@ -122,7 +121,7 @@ public class CompositeTreePermissionTest
         TreePermission rootTp = createRootTreePermission(fullScopeProvider, new NoScopeProvider(root), new NoScopeProvider(root));
         assertCompositeTreePermission(true, rootTp);
 
-        NodeState childState = rootTree.getChild("test").getNodeState();
+        NodeState childState = getTreeProvider().asNodeState(rootTree.getChild("test"));
         TreePermission testTp = rootTp.getChildPermission("test", childState);
         TreePermission expected = fullScopeProvider.getTreePermission(rootTree, TreePermission.EMPTY).getChildPermission("test", childState);
         assertEquals(expected.getClass(), testTp.getClass());

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/FullScopeProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/FullScopeProvider.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/FullScopeProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/FullScopeProvider.java Wed May  9 15:38:38 2018
@@ -31,7 +31,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.RepositoryPermission;
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
-import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermissionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermissionTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermissionTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermissionTest.java Wed May  9 15:38:38 2018
@@ -32,7 +32,6 @@ import org.apache.jackrabbit.oak.commons
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
 import org.apache.jackrabbit.oak.plugins.version.ReadOnlyVersionManager;
 import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
@@ -165,17 +164,17 @@ public class VersionTreePermissionTest e
     public void testGetChild() throws Exception {
         Tree versionHistory = checkNotNull(vMgr.getVersionHistory(testTree));
 
-        ImmutableTree t = (ImmutableTree) getRootProvider().createReadOnlyRoot(root).getTree("/");
+        Tree t = getRootProvider().createReadOnlyRoot(root).getTree("/");
         TreePermission tp = pp.getTreePermission(t, TreePermission.EMPTY);
         for (String name : PathUtils.elements(versionHistory.getPath())) {
             t = t.getChild(name);
-            tp = tp.getChildPermission(name, t.getNodeState());
+            tp = tp.getChildPermission(name, getTreeProvider().asNodeState(t));
         }
 
         String expectedPath = "/test";
         assertVersionPermission(tp, "/test", true);
 
-        NodeState ns = t.getChild("1.0").getNodeState();
+        NodeState ns = getTreeProvider().asNodeState(t.getChild("1.0"));
         tp = tp.getChildPermission("1.0", ns);
         assertVersionPermission(tp, "/test", true);
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImplTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImplTest.java Wed May  9 15:38:38 2018
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.tree.impl.RootProviderService;
+import org.apache.jackrabbit.oak.plugins.tree.impl.TreeProviderService;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.MoveTracker;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
@@ -43,6 +44,7 @@ public class PrivilegeConfigurationImplT
     @Before
     public void before() {
         configuration.setRootProvider(new RootProviderService());
+        configuration.setTreeProvider(new TreeProviderService());
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorTest.java Wed May  9 15:38:38 2018
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.JcrConstant
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 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.plugins.memory.EmptyNodeState;
@@ -64,10 +65,19 @@ public class PrivilegeValidatorTest exte
         return privTree;
     }
 
+    private void register(@Nonnull String privName, @Nonnull String... aggr) throws Exception {
+        getPrivilegeManager(root).registerPrivilege(privName, false, aggr);
+    }
+
     private static void setPrivilegeBits(Tree tree, String name, long value) {
         tree.setProperty(PropertyStates.createProperty(name, Collections.singleton(value), Type.LONGS));
     }
 
+    private PrivilegeValidator createPrivilegeValidator() {
+        Root immutable = getRootProvider().createReadOnlyRoot(root);
+        return new PrivilegeValidator(immutable, immutable, getTreeProvider());
+    }
+
     @Test
     public void testMissingPrivilegeBits() {
         try {
@@ -180,7 +190,7 @@ public class PrivilegeValidatorTest exte
         NodeState privilegeDefinition = nb.getNodeState();
         assertTrue(NT_REP_PRIVILEGE.equals(NodeStateUtils.getPrimaryTypeName(privilegeDefinition)));
 
-        PrivilegeValidator pv = new PrivilegeValidator(root, root);
+        PrivilegeValidator pv = new PrivilegeValidator(root, root, getTreeProvider());
         try {
             pv.childNodeChanged("test", privilegeDefinition, EmptyNodeState.EMPTY_NODE);
         } catch (CommitFailedException e) {
@@ -199,7 +209,7 @@ public class PrivilegeValidatorTest exte
         NodeState privilegeDefinition = nb.getNodeState();
         assertTrue(NT_REP_PRIVILEGE.equals(NodeStateUtils.getPrimaryTypeName(privilegeDefinition)));
 
-        PrivilegeValidator pv = new PrivilegeValidator(root, root);
+        PrivilegeValidator pv = new PrivilegeValidator(root, root, getTreeProvider());
         assertNull(pv.childNodeChanged("test", privilegeDefinition, privilegeDefinition));
     }
 
@@ -227,7 +237,7 @@ public class PrivilegeValidatorTest exte
             PropertyState before = PropertyStates.createProperty(REP_AGGREGATES, ImmutableList.of(REP_READ_NODES, REP_READ_PROPERTIES), Type.NAMES);
             PropertyState after = PropertyStates.createProperty(REP_AGGREGATES, ImmutableList.of(REP_READ_NODES), Type.NAMES);
 
-            PrivilegeValidator validator = new PrivilegeValidator(root, root);
+            PrivilegeValidator validator = new PrivilegeValidator(root, root, getTreeProvider());
             validator.propertyChanged(before, after);
             fail("modifying property in privilege store must fail.");
         } catch (CommitFailedException e) {
@@ -242,7 +252,7 @@ public class PrivilegeValidatorTest exte
         try {
             PropertyState before = PropertyStates.createProperty(REP_AGGREGATES, ImmutableList.of(REP_READ_NODES, REP_READ_PROPERTIES), Type.NAMES);
 
-            PrivilegeValidator validator = new PrivilegeValidator(root, root);
+            PrivilegeValidator validator = new PrivilegeValidator(root, root, getTreeProvider());
             validator.propertyDeleted(before);
             fail("removing property from privilege store must fail.");
         } catch (CommitFailedException e) {
@@ -272,7 +282,7 @@ public class PrivilegeValidatorTest exte
                     .setProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_PRIVILEGE)
                     .getNodeState();
 
-            PrivilegeValidator validator = new PrivilegeValidator(root, root);
+            PrivilegeValidator validator = createPrivilegeValidator();
             validator.childNodeAdded("test", newDef);
             fail("missing priv bits must be detected.");
         } catch (CommitFailedException e) {
@@ -290,7 +300,7 @@ public class PrivilegeValidatorTest exte
                     .setProperty(REP_AGGREGATES, ImmutableList.of("unknown", JCR_READ), Type.NAMES)
                     .getNodeState();
 
-            PrivilegeValidator validator = new PrivilegeValidator(root, root);
+            PrivilegeValidator validator = createPrivilegeValidator();
             validator.childNodeAdded("test", newDef);
             fail("unknown aggregate must be detected.");
         } catch (CommitFailedException e) {
@@ -300,9 +310,9 @@ public class PrivilegeValidatorTest exte
     }
 
     @Test
-    public void testCircularAggregate() {
+    public void testCircularAggregate() throws Exception {
         try {
-            createPrivilegeTree("test");
+            register("test");
 
             NodeState newDef = new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE)
                     .setProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_PRIVILEGE)
@@ -310,9 +320,9 @@ public class PrivilegeValidatorTest exte
                     .setProperty(REP_AGGREGATES, ImmutableList.of("test", JCR_READ), Type.NAMES)
                     .getNodeState();
 
-            PrivilegeValidator validator = new PrivilegeValidator(root, root);
+            PrivilegeValidator validator = createPrivilegeValidator();
             validator.childNodeAdded("test", newDef);
-            fail("unknown aggregate must be detected.");
+            fail("circular aggregate must be detected.");
         } catch (CommitFailedException e) {
             assertTrue(e.isConstraintViolation());
             assertEquals(52, e.getCode());
@@ -320,9 +330,10 @@ public class PrivilegeValidatorTest exte
     }
 
     @Test
-    public void testCircularAggregate2() {
+    public void testCircularAggregate2() throws Exception {
         try {
-            createPrivilegeTree("test2", "test");
+            register("test");
+            register("test2", "test", PrivilegeConstants.JCR_READ);
 
             NodeState newDef = new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE)
                     .setProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_PRIVILEGE)
@@ -330,9 +341,9 @@ public class PrivilegeValidatorTest exte
                     .setProperty(REP_AGGREGATES, ImmutableList.of("test2", JCR_READ), Type.NAMES)
                     .getNodeState();
 
-            PrivilegeValidator validator = new PrivilegeValidator(root, root);
+            PrivilegeValidator validator = createPrivilegeValidator();
             validator.childNodeAdded("test", newDef);
-            fail("unknown aggregate must be detected.");
+            fail("circular aggregate must be detected.");
         } catch (CommitFailedException e) {
             assertTrue(e.isConstraintViolation());
             assertEquals(52, e.getCode());

Modified: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/TreeProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/TreeProvider.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/TreeProvider.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/TreeProvider.java Wed May  9 15:38:38 2018
@@ -30,4 +30,7 @@ public interface TreeProvider {
 
     @Nonnull
     Tree createReadOnlyTree(@Nonnull Tree readOnlyParent, @Nonnull String childName, @Nonnull NodeState childState);
+
+    @Nonnull
+    NodeState asNodeState(@Nonnull Tree readOnlyTree);
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/package-info.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/package-info.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/package-info.java Wed May  9 15:38:38 2018
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("3.0.1")
+@Version("3.1.0")
 package org.apache.jackrabbit.oak.plugins.tree;
 
 import org.osgi.annotation.versioning.Version;