Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBaseTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBaseTest.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBaseTest.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBaseTest.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,499 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import com.google.common.collect.Iterators;
+import org.apache.jackrabbit.api.JackrabbitRepository;
+import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlManager;
+import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.api.security.user.UserManager;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.jcr.Jcr;
+import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
+import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
+import
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
+import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
+import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.jcr.ImportUUIDBehavior;
+import javax.jcr.Node;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.nodetype.ConstraintViolationException;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.security.Principal;
+import java.util.List;
+import java.util.UUID;
+
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants.REP_GLOB;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.MIX_REP_PRINCIPAL_BASED_MIXIN;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.NT_REP_PRINCIPAL_ENTRY;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.NT_REP_PRINCIPAL_POLICY;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.NT_REP_RESTRICTIONS;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_EFFECTIVE_PATH;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_PRINCIPAL_NAME;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_PRINCIPAL_POLICY;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_PRIVILEGES;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_RESTRICTIONS;
+import static
org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_NAMESPACE_MANAGEMENT;
+import static
org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_READ;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+public abstract class ImportBaseTest extends AbstractPrincipalBasedTest {
+
+ private Repository repo;
+ private JackrabbitSession adminSession;
+
+ private String testPath;
+ private String uid;
+ private Principal testPrincipal;
+ private String testPrincipalName;
+
+ @Before
+ public void before() throws Exception {
+ super.before();
+
+ Jcr jcr = new Jcr();
+ jcr.with(getSecurityProvider());
+ jcr.with(getQueryEngineSettings());
+ repo = jcr.createRepository();
+ adminSession = (JackrabbitSession) repo.login(new
SimpleCredentials(UserConstants.DEFAULT_ADMIN_ID,
UserConstants.DEFAULT_ADMIN_ID.toCharArray()));
+
+ User u = getUserManager().createSystemUser("testSystemUser" +
UUID.randomUUID(), getNamePathMapper().getJcrPath(INTERMEDIATE_PATH));
+ adminSession.save();
+ uid = u.getID();
+ testPath = u.getPath();
+ testPrincipal = u.getPrincipal();
+ testPrincipalName = testPrincipal.getName();
+ }
+
+ @After
+ public void after() throws Exception {
+ try {
+ adminSession.refresh(false);
+ User u = getUserManager().getAuthorizable(uid, User.class);
+ if (u != null) {
+ u.remove();
+ }
+ adminSession.removeItem(SUPPORTED_PATH);
+ adminSession.save();
+ } finally {
+ adminSession.logout();
+ if (repo instanceof JackrabbitRepository) {
+ ((JackrabbitRepository) repo).shutdown();
+ }
+ super.after();
+ }
+ }
+
+ @Override
+ protected ConfigurationParameters getSecurityConfigParameters() {
+ return ConfigurationParameters.of(AuthorizationConfiguration.NAME,
+
ConfigurationParameters.of(ProtectedItemImporter.PARAM_IMPORT_BEHAVIOR,
getImportBehavior())
+ );
+ }
+
+ abstract String getImportBehavior();
+
+ UserManager getUserManager() throws RepositoryException {
+ return adminSession.getUserManager();
+ }
+
+ JackrabbitSession getSession() {
+ return adminSession;
+ }
+
+ JackrabbitAccessControlManager getAccessControlManager() throws
RepositoryException {
+ return (JackrabbitAccessControlManager)
adminSession.getAccessControlManager();
+ }
+
+ void doImport(String parentPath, String xml) throws Exception {
+ doImport(adminSession, parentPath, xml,
ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+ }
+
+ void doImport(Session importSession, String parentPath, String xml, int
importUUIDBehavior) throws Exception {
+ InputStream in;
+ if (xml.charAt(0) == '<') {
+ in = new ByteArrayInputStream(xml.getBytes());
+ } else {
+ in = getClass().getResourceAsStream(xml);
+ }
+ try {
+ importSession.importXML(parentPath, in, importUUIDBehavior);
+ } finally {
+ in.close();
+ }
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testPolicyWithoutPrincipalName() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "</sv:node>";
+ adminSession.getNode(testPath).addMixin(MIX_REP_PRINCIPAL_BASED_MIXIN);
+ doImport(testPath, xml);
+
+
assertTrue(adminSession.getNode(testPath).hasNode(REP_PRINCIPAL_POLICY));
+ adminSession.save();
+ }
+
+ @Test
+ public void testEmptyPolicyMissingMixinType() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>" + testPrincipalName +
"</sv:value></sv:property>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+
+
assertTrue(adminSession.getNode(testPath).isNodeType(MIX_REP_PRINCIPAL_BASED_MIXIN));
+
assertTrue(adminSession.getNode(testPath).hasNode(REP_PRINCIPAL_POLICY));
+ adminSession.save();
+ }
+
+ @Test
+ public void testEmptyPolicy() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>" + testPrincipalName +
"</sv:value></sv:property>" +
+ "</sv:node>";
+ adminSession.getNode(testPath).addMixin(MIX_REP_PRINCIPAL_BASED_MIXIN);
+ doImport(testPath, xml);
+
+ PrincipalPolicyImpl policy = getPrincipalPolicyImpl(testPrincipal,
getAccessControlManager());
+ assertTrue(policy.isEmpty());
+ adminSession.save();
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testEmptyPolicyWithInvalidNodeName() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\"someOtherNode\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>" + testPrincipalName +
"</sv:value></sv:property>" +
+ "</sv:node>";
+
+ adminSession.getNode(testPath).addMixin(MIX_REP_PRINCIPAL_BASED_MIXIN);
+ doImport(testPath, xml);
+ adminSession.save();
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testEmptyPolicyPrincipalNameTypeMismatch() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"Name\"><sv:value>" + getTestUser().getPrincipal().getName() +
"</sv:value></sv:property>" +
+ "</sv:node>";
+ adminSession.getNode(testPath).addMixin(MIX_REP_PRINCIPAL_BASED_MIXIN);
+ doImport(testPath, xml);
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testEmptyPolicyPrincipalNameMultiple() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\" sv:multiple=\"true\"><sv:value>" + testPrincipalName +
"</sv:value></sv:property>" +
+ "</sv:node>";
+ adminSession.getNode(testPath).addMixin(MIX_REP_PRINCIPAL_BASED_MIXIN);
+ doImport(testPath, xml);
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testNestedPolicy() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>" + testPrincipalName +
"</sv:value></sv:property>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>" + testPrincipalName +
"</sv:value></sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+
+ adminSession.getNode(testPath).addMixin(MIX_REP_PRINCIPAL_BASED_MIXIN);
+ doImport(testPath, xml);
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testEmptyPolicyWithInvalidPrincipalName() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+getTestUser().getPrincipal().getName()+"</sv:value></sv:property>"
+
+ "</sv:node>";
+
+ adminSession.getNode(testPath).addMixin(MIX_REP_PRINCIPAL_BASED_MIXIN);
+ doImport(testPath, xml);
+ //adminSession.save();
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testEntryWithMissingEffectivePath() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testEntryWithEffectivePathTypeMismatch() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"String\"><sv:value>/content</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ }
+
+ @Test(expected = RepositoryException.class)
+ public void testEntryWithEffectivePathMV() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"
sv:multiple=\"true\"><sv:value>/content</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testEntryWithMissingPrivileges() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"><sv:value>/content</sv:value></sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testEntryWithPrivilegesTypeMismatch() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"><sv:value>/content</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"String\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ }
+
+ @Test
+ public void testEntryWithPrivilegesSingleValue() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"><sv:value>/content</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ adminSession.save();
+
+ Node policyNode = adminSession.getNode(PathUtils.concat(testPath,
REP_PRINCIPAL_POLICY));
+ Node entry = Iterators.<Node>getOnlyElement(policyNode.getNodes());
+ assertTrue(entry.isNodeType(NT_REP_PRINCIPAL_ENTRY));
+ assertTrue(entry.getProperty(REP_PRIVILEGES).isMultiple());
+ }
+
+ @Test
+ public void testTwoIdenticalEntries() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"><sv:value>/content</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "<sv:node sv:name=\"entry1\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"><sv:value>/content</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ adminSession.save();
+
+ PrincipalPolicyImpl policy = getPrincipalPolicyImpl(testPrincipal,
getAccessControlManager());
+ assertEquals(1, policy.size());
+ }
+
+ @Test
+ public void testTwoDifferentEntries() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"><sv:value>/content</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "<sv:node sv:name=\"entry1\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"><sv:value></sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+
"<sv:value>"+JCR_NAMESPACE_MANAGEMENT+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ adminSession.save();
+
+ PrincipalPolicyImpl policy = getPrincipalPolicyImpl(testPrincipal,
getAccessControlManager());
+ assertEquals(2, policy.size());
+ List<PrincipalPolicyImpl.EntryImpl> entries = policy.getEntries();
+ assertEquals("/content", entries.get(0).getEffectivePath());
+ assertNull(entries.get(1).getEffectivePath());
+ }
+
+ @Test
+ public void testEffectivePathInRestriction() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "<sv:node sv:name=\""+REP_RESTRICTIONS+"\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_RESTRICTIONS+"</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+
AccessControlConstants.REP_NODE_PATH+"\"
sv:type=\"String\"><sv:value>/content</sv:value></sv:property>" +
+ "</sv:node>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ adminSession.save();
+
+ PrincipalPolicyImpl policy = getPrincipalPolicyImpl(testPrincipal,
getAccessControlManager());
+ assertEquals(1, policy.size());
+ PrincipalPolicyImpl.EntryImpl entry = policy.getEntries().get(0);
+ assertEquals("/content", entry.getOakPath());
+ assertTrue(entry.getRestrictions().isEmpty());
+ }
+
+ @Test(expected = ConstraintViolationException.class)
+ public void testUnsupportedPath() throws Exception {
+ // move user node outside of supported path.
+ String unsupportedPath =
PathUtils.concat(PathUtils.getAncestorPath(testPath, 2),
PathUtils.getName(testPath));
+ adminSession.move(testPath, unsupportedPath);
+ adminSession.save();
+
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"><sv:value>/content</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "</sv:node>" +
+ "</sv:node>";
+
+ // import will leave incomplete policy
+ doImport(unsupportedPath, xml);
+ adminSession.save();
+ }
+
+ @Test
+ public void testEntryWithRestriction() throws Exception {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+testPrincipalName+"</sv:value></sv:property>" +
+ "<sv:node sv:name=\"entry0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_ENTRY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_EFFECTIVE_PATH+"\"
sv:type=\"Path\"><sv:value>/content</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+REP_PRIVILEGES+"\"
sv:type=\"Name\" sv:multiple=\"true\">" +
+ "<sv:value>"+JCR_READ+"</sv:value>" +
+ "</sv:property>" +
+ "<sv:node sv:name=\""+REP_RESTRICTIONS+"\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_RESTRICTIONS+"</sv:value></sv:property>" +
+ "<sv:property sv:name=\""+ REP_GLOB+"\"
sv:type=\"String\"><sv:value>*</sv:value></sv:property>" +
+ "</sv:node>" +
+ "</sv:node>" +
+ "</sv:node>";
+ doImport(testPath, xml);
+ adminSession.save();
+
+ PrincipalPolicyImpl policy = getPrincipalPolicyImpl(testPrincipal,
getAccessControlManager());
+ assertEquals(1, policy.size());
+ PrincipalPolicyImpl.EntryImpl entry = policy.getEntries().get(0);
+ assertEquals("*", entry.getRestriction(REP_GLOB).getString());
+ }
+}
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBaseTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBesteffortTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBesteffortTest.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBesteffortTest.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBesteffortTest.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,52 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlManager;
+import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
+import org.junit.Test;
+
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.NT_REP_PRINCIPAL_POLICY;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_PRINCIPAL_NAME;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_PRINCIPAL_POLICY;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class ImportBesteffortTest extends ImportBaseTest {
+
+ @Override
+ String getImportBehavior() {
+ return ImportBehavior.NAME_BESTEFFORT;
+ }
+
+ @Test
+ public void testTransientPrincipal() throws Exception {
+ User transientSystemUser =
getUserManager().createSystemUser("transientSystemUser", INTERMEDIATE_PATH);
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+transientSystemUser.getPrincipal().getName()+"</sv:value></sv:property>"
+
+ "</sv:node>";
+ doImport(transientSystemUser.getPath(), xml);
+
+ PrincipalPolicyImpl policy =
getPrincipalPolicyImpl(transientSystemUser.getPrincipal(),
getAccessControlManager());
+ assertEquals(policy.getPrincipal().getName(),
transientSystemUser.getPrincipal().getName());
+ assertTrue(policy.isEmpty());
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBesteffortTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportIgnoreTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportIgnoreTest.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportIgnoreTest.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportIgnoreTest.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,58 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
+import org.junit.Test;
+
+import javax.jcr.Node;
+import javax.jcr.security.AccessControlPolicy;
+
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.NT_REP_PRINCIPAL_POLICY;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_PRINCIPAL_NAME;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_PRINCIPAL_POLICY;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class ImportIgnoreTest extends ImportBaseTest {
+
+ @Override
+ String getImportBehavior() {
+ return ImportBehavior.NAME_IGNORE;
+ }
+
+ @Test
+ public void testTransientPrincipal() throws Exception {
+ User transientSystemUser =
getUserManager().createSystemUser("transientSystemUser", INTERMEDIATE_PATH);
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sv:node sv:name=\""+REP_PRINCIPAL_POLICY+"\"
xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"
xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"
xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\"
xmlns:fn=\"http://www.w3.org/2005/xpath-functions\"
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\"
xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" +
+ "<sv:property sv:name=\""+JCR_PRIMARYTYPE+"\"
sv:type=\"Name\"><sv:value>"+NT_REP_PRINCIPAL_POLICY+"</sv:value></sv:property>"
+
+ "<sv:property sv:name=\""+REP_PRINCIPAL_NAME+"\"
sv:type=\"String\"><sv:value>"+transientSystemUser.getPrincipal().getName()+"</sv:value></sv:property>"
+
+ "</sv:node>";
+ doImport(transientSystemUser.getPath(), xml);
+
+
assertTrue(getSession().getNode(transientSystemUser.getPath()).hasNode(REP_PRINCIPAL_POLICY));
+ Node policy =
getSession().getNode(transientSystemUser.getPath()).getNode(REP_PRINCIPAL_POLICY);
+ assertTrue(policy.hasProperty(REP_PRINCIPAL_NAME));
+
+ // but looking up policy doesn't work because of transient principal.
+ AccessControlPolicy[] policies =
getAccessControlManager().getPolicies(transientSystemUser.getPrincipal());
+ assertEquals(0, policies.length);
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportIgnoreTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImplTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImplTest.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImplTest.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImplTest.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,135 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import org.apache.jackrabbit.api.security.authorization.PrivilegeManager;
+import org.apache.jackrabbit.api.security.principal.PrincipalManager;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
+import
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
+import static org.mockito.Mockito.mock;
+
+public class MgrProviderImplTest extends AbstractPrincipalBasedTest {
+
+ private MgrProviderImpl mgrProvider;
+
+ @Before
+ @Override
+ public void before() throws Exception {
+ super.before();
+
+ mgrProvider = (MgrProviderImpl) getMgrProvider(root);
+ }
+
+ @Test
+ public void testGetContext() {
+ assertSame(getConfig(AuthorizationConfiguration.class).getContext(),
mgrProvider.getContext());
+ }
+
+ @Test
+ public void testGetNamePathMapper() {
+ assertSame(getNamePathMapper(), mgrProvider.getNamePathMapper());
+ }
+
+ @Test
+ public void testGetNamePathMapper2() {
+ MgrProvider mp = new
MgrProviderImpl(mock(PrincipalBasedAuthorizationConfiguration.class));
+ assertSame(NamePathMapper.DEFAULT, mp.getNamePathMapper());
+ }
+
+ @Test
+ public void testGetRoot() {
+ assertSame(root, mgrProvider.getRoot());
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testRootNotInitialized() {
+ MgrProvider mp = new
MgrProviderImpl(mock(PrincipalBasedAuthorizationConfiguration.class));
+ mp.getRoot();
+ }
+
+ @Test
+ public void testReset() {
+ MgrProvider mp = new
MgrProviderImpl(mock(PrincipalBasedAuthorizationConfiguration.class));
+ Root r = mock(Root.class);
+ NamePathMapper mapper = mock(NamePathMapper.class);
+ mp.reset(r, mapper);
+ assertSame(r, mp.getRoot());
+ assertSame(mapper, mp.getNamePathMapper());
+ }
+
+ @Test
+ public void testGetPrincipalManager() {
+ PrincipalManager pm = mgrProvider.getPrincipalManager();
+ assertSame(pm, mgrProvider.getPrincipalManager());
+
+ mgrProvider.reset(root, getNamePathMapper());
+ assertNotSame(pm, mgrProvider.getPrincipalManager());
+ }
+
+ @Test
+ public void testGetPrivilegeManager() {
+ PrivilegeManager pm = mgrProvider.getPrivilegeManager();
+ assertSame(pm, mgrProvider.getPrivilegeManager());
+
+ mgrProvider.reset(root, getNamePathMapper());
+ assertNotSame(pm, mgrProvider.getPrivilegeManager());
+ }
+
+ @Test
+ public void testGetPrivilegeBitsProvider() {
+ PrivilegeBitsProvider pbp = mgrProvider.getPrivilegeBitsProvider();
+ assertSame(pbp, mgrProvider.getPrivilegeBitsProvider());
+
+ mgrProvider.reset(root, getNamePathMapper());
+ assertNotSame(pbp, mgrProvider.getPrivilegeBitsProvider());
+ }
+
+ @Test
+ public void testGetRestrictionProvider() {
+ RestrictionProvider rp = mgrProvider.getRestrictionProvider();
+ assertSame(rp, mgrProvider.getRestrictionProvider());
+
+ mgrProvider.reset(root, getNamePathMapper());
+ assertSame(rp, mgrProvider.getRestrictionProvider());
+ }
+
+ @Test
+ public void testGetSecurityProvider() {
+ assertSame(getSecurityProvider(), mgrProvider.getSecurityProvider());
+ assertSame(mgrProvider.getSecurityProvider(),
mgrProvider.getSecurityProvider());
+ }
+
+ @Test
+ public void testGetTreeProvider() {
+ assertSame(getTreeProvider(), mgrProvider.getTreeProvider());
+ assertSame(mgrProvider.getTreeProvider(),
mgrProvider.getTreeProvider());
+ }
+
+ @Test
+ public void testGetRootProvider() {
+ assertSame(getRootProvider(), mgrProvider.getRootProvider());
+ assertSame(mgrProvider.getRootProvider(),
mgrProvider.getRootProvider());
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImplTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MockUtility.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MockUtility.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MockUtility.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MockUtility.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,114 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import com.google.common.collect.ImmutableList;
+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.commons.PathUtils;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.plugins.tree.ReadOnly;
+import org.apache.jackrabbit.oak.plugins.tree.TreeType;
+import org.apache.jackrabbit.oak.plugins.tree.TreeTypeAware;
+import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.Filter;
+import
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.FilterProvider;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.mockito.Mockito;
+
+import java.util.Set;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.withSettings;
+
+final class MockUtility {
+
+ private MockUtility() {}
+
+ static Tree mockTree(@NotNull String name, @Nullable String ntName,
boolean exists, @NotNull String... propertyNames) {
+ Tree t = mock(Tree.class);
+ when(t.exists()).thenReturn(exists);
+ when(t.getName()).thenReturn(name);
+ if (ntName != null) {
+
when(t.getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(createPrimaryTypeProperty(ntName));
+ }
+ for (String propertyName : propertyNames) {
+ when(t.hasProperty(propertyName)).thenReturn(true);
+
when(t.getProperty(propertyName)).thenReturn(PropertyStates.createProperty(propertyName,
"anyValue"));
+ }
+ return t;
+ }
+
+ static Tree mockTree(@NotNull String name, @NotNull String ntName,
@NotNull String path, @NotNull String... propertyNames) {
+ Tree t = mock(Tree.class);
+ when(t.exists()).thenReturn(true);
+ when(t.getName()).thenReturn(name);
+ if (ntName != null) {
+
when(t.getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(createPrimaryTypeProperty(ntName));
+ }
+ when(t.getPath()).thenReturn(path);
+ when(t.isRoot()).thenReturn(PathUtils.denotesRoot(path));
+ for (String propertyName : propertyNames) {
+ when(t.hasProperty(propertyName)).thenReturn(true);
+
when(t.getProperty(propertyName)).thenReturn(PropertyStates.createProperty(propertyName,
"anyValue"));
+ }
+ return t;
+ }
+
+ static Tree mockTree(@NotNull String path, boolean exists) {
+ Tree tree = Mockito.mock(Tree.class);
+ when(tree.getPath()).thenReturn(path);
+ when(tree.exists()).thenReturn(exists);
+ when(tree.isRoot()).thenReturn(PathUtils.denotesRoot(path));
+ return tree;
+ }
+
+ static Tree mockReadOnlyTree(@NotNull TreeType type) {
+ Tree readOnly = mock(Tree.class,
withSettings().extraInterfaces(ReadOnly.class, TreeTypeAware.class));
+ when(((TreeTypeAware) readOnly).getType()).thenReturn(type);
+ return readOnly;
+ }
+
+ static NodeState mockNodeState(@NotNull String primaryType) {
+ return
when(mock(NodeState.class).getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(createPrimaryTypeProperty(primaryType)).getMock();
+ }
+
+ static PropertyState createPrimaryTypeProperty(@NotNull String ntName) {
+ return PropertyStates.createProperty(JcrConstants.JCR_PRIMARYTYPE,
ntName, Type.NAME);
+ }
+
+ static PropertyState createMixinTypesProperty(@NotNull String...
mixinTypes) {
+ return PropertyStates.createProperty(JcrConstants.JCR_MIXINTYPES,
ImmutableList.copyOf(mixinTypes), Type.NAMES);
+ }
+
+ static FilterProvider mockFilterProvider(boolean canHandle) {
+ Filter filter = mock(Filter.class);
+ when(filter.canHandle(any(Set.class))).thenReturn(canHandle);
+ FilterProvider fp = mock(FilterProvider.class);
+ when(fp.getFilter(any(SecurityProvider.class), any(Root.class),
any(NamePathMapper.class))).thenReturn(filter);
+ return fp;
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MockUtility.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderAccessControlTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderAccessControlTest.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderAccessControlTest.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderAccessControlTest.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,349 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.plugins.tree.TreeType;
+import
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
+import
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.jcr.Value;
+import java.security.Principal;
+import java.util.Map;
+import java.util.Set;
+
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants.REP_GLOB;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_EFFECTIVE_PATH;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_PRINCIPAL_POLICY;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_PRIVILEGES;
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.Constants.REP_RESTRICTIONS;
+import static
org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_MODIFY_ACCESS_CONTROL;
+import static
org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_READ;
+import static
org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_READ_ACCESS_CONTROL;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+public class PermissionProviderAccessControlTest extends
AbstractPrincipalBasedTest {
+
+ private Principal testPrincipal;
+ private PrincipalBasedPermissionProvider permissionProvider;
+
+ private String contentPath;
+ private String childPath;
+ private String grandchildPath;
+
+ private String child2Path;
+
+ private String accessControlledPath;
+
+ @Before
+ public void before() throws Exception {
+ super.before();
+
+ testPrincipal = getTestSystemUser().getPrincipal();
+ setupContentTrees(TEST_OAK_PATH);
+ setupContentTrees("/oak:content/child2/grandchild2");
+
+ contentPath = PathUtils.getAncestorPath(TEST_OAK_PATH, 3);
+ childPath = PathUtils.getAncestorPath(TEST_OAK_PATH, 2);
+ grandchildPath = PathUtils.getAncestorPath(TEST_OAK_PATH, 1);
+
+ child2Path = "/oak:content/child2";
+
+ PrincipalPolicyImpl policy =
setupPrincipalBasedAccessControl(testPrincipal,
getNamePathMapper().getJcrPath(contentPath), JCR_READ);
+ addPrincipalBasedEntry(policy,
getNamePathMapper().getJcrPath(childPath),
PrivilegeConstants.JCR_READ_ACCESS_CONTROL);
+ addPrincipalBasedEntry(policy,
getNamePathMapper().getJcrPath(child2Path),
PrivilegeConstants.JCR_MODIFY_ACCESS_CONTROL);
+ accessControlledPath = policy.getOakPath();
+ root.commit();
+
+ permissionProvider = createPermissionProvider(root, testPrincipal);
+ }
+
+ @Override
+ protected NamePathMapper getNamePathMapper() {
+ return NamePathMapper.DEFAULT;
+ }
+
+ @Test
+ public void testGetTreePermission() throws Exception {
+ String oakPath = PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY);
+ Tree tree = root.getTree(PathUtils.ROOT_PATH);
+ TreePermission tp = permissionProvider.getTreePermission(tree,
TreePermission.EMPTY);
+ for (String elem : PathUtils.elements(oakPath)) {
+ tree = tree.getChild(elem);
+ tp = permissionProvider.getTreePermission(tree, tp);
+ }
+
+ assertTrue(tp instanceof AbstractTreePermission);
+ assertSame(TreeType.ACCESS_CONTROL, ((AbstractTreePermission)
tp).getType());
+ }
+
+ @Test
+ public void testIsGrantedOnAccessControlledTree() throws Exception {
+ Tree accessControlledTree =
root.getTree(getNamePathMapper().getOakPath(accessControlledPath));
+ assertFalse(permissionProvider.isGranted(accessControlledTree, null,
Permissions.READ));
+ assertFalse(permissionProvider.isGranted(accessControlledTree, null,
Permissions.READ_ACCESS_CONTROL));
+
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ);
+ root.commit();
+ permissionProvider.refresh();
+
+ assertTrue(permissionProvider.isGranted(accessControlledTree, null,
Permissions.READ));
+
+ }
+
+ @Test
+ public void testIsGrantedOnPolicyTree() throws Exception {
+ Tree policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ assertFalse(permissionProvider.isGranted(policyTree, null,
Permissions.READ));
+ assertFalse(permissionProvider.isGranted(policyTree, null,
Permissions.READ_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(policyTree, null,
Permissions.READ_ACCESS_CONTROL|Permissions.MODIFY_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(policyTree, null,
Permissions.WRITE));
+ }
+
+ @Test
+ public void testIsGrantedOnPolicyTreePrincipalReadable() throws Exception {
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ);
+ root.commit();
+ permissionProvider.refresh();
+
+ Tree policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ assertTrue(permissionProvider.isGranted(policyTree, null,
Permissions.READ));
+ assertFalse(permissionProvider.isGranted(policyTree, null,
Permissions.READ_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(policyTree, null,
Permissions.READ_ACCESS_CONTROL|Permissions.MODIFY_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(policyTree, null,
Permissions.WRITE));
+ }
+
+ @Test
+ public void testIsGrantedOnPolicyTreePrincipalAccessControlReadable()
throws Exception {
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ, JCR_READ_ACCESS_CONTROL);
+ root.commit();
+ permissionProvider.refresh();
+
+ Tree policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ assertTrue(permissionProvider.isGranted(policyTree, null,
Permissions.READ));
+ assertTrue(permissionProvider.isGranted(policyTree, null,
Permissions.READ_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(policyTree, null,
Permissions.READ_ACCESS_CONTROL|Permissions.MODIFY_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(policyTree, null,
Permissions.WRITE));
+ }
+
+ @Test
+ public void testIsGrantedOnEntryTree() throws Exception {
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ, JCR_READ_ACCESS_CONTROL);
+ root.commit();
+ permissionProvider.refresh();
+
+ Tree policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ for (Tree child : policyTree.getChildren()) {
+ assertTrue(permissionProvider.isGranted(child, null,
Permissions.READ|Permissions.READ_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(child, null,
Permissions.MODIFY_ACCESS_CONTROL));
+ }
+ }
+
+ @Test
+ public void testIsGrantedOnEntryTreeAccessControlModifiable() throws
Exception {
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ, JCR_MODIFY_ACCESS_CONTROL);
+ root.commit();
+ permissionProvider.refresh();
+
+ Tree policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ for (Tree child : policyTree.getChildren()) {
+ assertTrue(permissionProvider.isGranted(child, null,
Permissions.READ));
+
+ String effectivePath =
child.getProperty(REP_EFFECTIVE_PATH).getValue(STRING);
+ if (contentPath.equals(effectivePath)) {
+ assertFalse(permissionProvider.isGranted(child, null,
Permissions.READ_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(child, null,
Permissions.MODIFY_ACCESS_CONTROL));
+ } else if (childPath.equals(effectivePath)) {
+ assertFalse(permissionProvider.isGranted(child, null,
Permissions.READ_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(child, null,
Permissions.MODIFY_ACCESS_CONTROL));
+ } else if (child2Path.equals(effectivePath)) {
+ assertFalse(permissionProvider.isGranted(child, null,
Permissions.READ_ACCESS_CONTROL));
+ assertTrue(permissionProvider.isGranted(child, null,
Permissions.MODIFY_ACCESS_CONTROL));
+ }
+ }
+ }
+
+ @Test
+ public void testIsGrantedOnEntryTreeAccessMgt() throws Exception {
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ, JCR_READ_ACCESS_CONTROL, JCR_MODIFY_ACCESS_CONTROL);
+ root.commit();
+ permissionProvider.refresh();
+
+ Tree policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ for (Tree child : policyTree.getChildren()) {
+ assertTrue(permissionProvider.isGranted(child, null,
Permissions.READ|Permissions.READ_ACCESS_CONTROL));
+ assertTrue(permissionProvider.isGranted(child,
child.getProperty(REP_EFFECTIVE_PATH), Permissions.READ_ACCESS_CONTROL));
+ assertTrue(permissionProvider.isGranted(child,
child.getProperty(REP_PRIVILEGES), Permissions.READ_ACCESS_CONTROL));
+
+ String effectivePath =
child.getProperty(REP_EFFECTIVE_PATH).getValue(STRING);
+ if (contentPath.equals(effectivePath)) {
+ assertFalse(permissionProvider.isGranted(child, null,
Permissions.MODIFY_ACCESS_CONTROL));
+ } else if (childPath.equals(effectivePath)) {
+ assertFalse(permissionProvider.isGranted(child, null,
Permissions.MODIFY_ACCESS_CONTROL));
+ } else if (child2Path.equals(effectivePath)) {
+ assertTrue(permissionProvider.isGranted(child, null,
Permissions.MODIFY_ACCESS_CONTROL));
+ }
+ }
+ }
+
+ @Test
+ public void testIsGrantedOnNonExistingRestrictionTree() throws Exception {
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ_ACCESS_CONTROL, JCR_MODIFY_ACCESS_CONTROL);
+ root.commit();
+ permissionProvider.refresh();
+
+ Tree policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ for (Tree child : policyTree.getChildren()) {
+ Tree restr = child.getChild(REP_RESTRICTIONS);
+ PropertyState propertyState =
PropertyStates.createProperty(REP_GLOB, "any");
+
+ assertFalse(permissionProvider.isGranted(restr, null,
Permissions.READ));
+
+ String effectivePath =
child.getProperty(REP_EFFECTIVE_PATH).getValue(STRING);
+ if (contentPath.equals(effectivePath)) {
+ assertTrue(permissionProvider.isGranted(restr, null,
Permissions.READ_ACCESS_CONTROL));
+ assertTrue(permissionProvider.isGranted(restr, propertyState,
Permissions.READ_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(restr, null,
Permissions.MODIFY_ACCESS_CONTROL));
+ } else if (childPath.equals(effectivePath)) {
+ assertTrue(permissionProvider.isGranted(restr, null,
Permissions.READ_ACCESS_CONTROL));
+ assertTrue(permissionProvider.isGranted(restr, propertyState,
Permissions.READ_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(restr, null,
Permissions.MODIFY_ACCESS_CONTROL));
+ } else if (child2Path.equals(effectivePath)) {
+ assertTrue(permissionProvider.isGranted(restr, null,
Permissions.READ_ACCESS_CONTROL|Permissions.MODIFY_ACCESS_CONTROL));
+ assertTrue(permissionProvider.isGranted(restr, propertyState,
Permissions.READ_ACCESS_CONTROL|Permissions.MODIFY_ACCESS_CONTROL));
+ }
+ }
+ }
+
+ @Test
+ public void testIsGrantedOnRestrictionTree() throws Exception {
+ PrincipalPolicyImpl policy = getPrincipalPolicyImpl(testPrincipal,
getAccessControlManager(root));
+ Map<String, Value> restr =
ImmutableMap.of(getNamePathMapper().getJcrName(REP_GLOB),
getValueFactory(root).createValue(REP_RESTRICTIONS + "*"));
+ policy.addEntry(accessControlledPath,
privilegesFromNames(JCR_READ_ACCESS_CONTROL), restr, ImmutableMap.of());
+ root.commit();
+ permissionProvider.refresh();
+
+ Tree policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ for (Tree child : policyTree.getChildren()) {
+ assertFalse(permissionProvider.isGranted(child, null,
Permissions.READ));
+ if (child.hasChild(REP_RESTRICTIONS)) {
+ Tree restrTree = child.getChild(REP_RESTRICTIONS);
+ assertTrue(permissionProvider.isGranted(restrTree, null,
Permissions.READ_ACCESS_CONTROL));
+ assertFalse(permissionProvider.isGranted(restrTree, null,
Permissions.READ));
+ assertFalse(permissionProvider.isGranted(restrTree, null,
Permissions.READ_ACCESS_CONTROL|Permissions.MODIFY_ACCESS_CONTROL));
+ for (PropertyState ps : restrTree.getProperties()) {
+ assertTrue(permissionProvider.isGranted(restrTree, ps,
Permissions.READ_ACCESS_CONTROL));
+ }
+ break;
+ }
+ }
+ }
+
+ @Test
+ public void testIsGrantedByPath() throws Exception {
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ, JCR_READ_ACCESS_CONTROL, JCR_MODIFY_ACCESS_CONTROL);
+ root.commit();
+ permissionProvider.refresh();
+
+ assertTrue(permissionProvider.isGranted(accessControlledPath,
Permissions.getString(Permissions.READ|Permissions.READ_ACCESS_CONTROL|Permissions.MODIFY_ACCESS_CONTROL)));
+ assertFalse(permissionProvider.isGranted(accessControlledPath,
Permissions.getString(Permissions.READ|Permissions.WRITE)));
+
+ String policyPath = PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY);
+ assertTrue(permissionProvider.isGranted(policyPath,
Permissions.getString(Permissions.READ_PROPERTY|Permissions.READ_NODE|Permissions.READ_ACCESS_CONTROL|Permissions.MODIFY_ACCESS_CONTROL)));
+
+ for (Tree child : root.getTree(policyPath).getChildren()) {
+ String childPath = child.getPath();
+ String effectivePath =
child.getProperty(REP_EFFECTIVE_PATH).getValue(STRING);
+ if (contentPath.equals(effectivePath)) {
+ assertTrue(permissionProvider.isGranted(childPath,
Permissions.getString(Permissions.READ|Permissions.READ_ACCESS_CONTROL)));
+ assertFalse(permissionProvider.isGranted(childPath,
Permissions.getString(Permissions.MODIFY_ACCESS_CONTROL)));
+ } else if (childPath.equals(effectivePath)) {
+ assertTrue(permissionProvider.isGranted(childPath,
Permissions.getString(Permissions.READ|Permissions.READ_ACCESS_CONTROL)));
+ assertFalse(permissionProvider.isGranted(childPath,
Permissions.getString(Permissions.READ|Permissions.MODIFY_ACCESS_CONTROL)));
+ } else if (child2Path.equals(effectivePath)) {
+ assertTrue(permissionProvider.isGranted(childPath,
Permissions.getString(Permissions.READ|Permissions.READ_ACCESS_CONTROL)));
+ assertTrue(permissionProvider.isGranted(childPath,
Permissions.getString(Permissions.READ|Permissions.MODIFY_ACCESS_CONTROL)));
+ }
+ }
+ }
+
+ @Test
+ public void testGetPrivileges() throws Exception {
+
assertTrue(permissionProvider.getPrivileges(root.getTree(accessControlledPath)).isEmpty());
+ Tree policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ assertTrue(permissionProvider.getPrivileges(policyTree).isEmpty());
+ for (Tree child : policyTree.getChildren()) {
+ assertTrue(permissionProvider.getPrivileges(policyTree).isEmpty());
+ }
+
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ);
+ root.commit();
+ permissionProvider.refresh();
+
+ Set<String> expectedPrivNames = ImmutableSet.of(JCR_READ);
+ assertEquals(expectedPrivNames,
permissionProvider.getPrivileges(root.getTree(accessControlledPath)));
+ policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ assertEquals(expectedPrivNames,
permissionProvider.getPrivileges(policyTree));
+ for (Tree child : policyTree.getChildren()) {
+ assertEquals(expectedPrivNames,
permissionProvider.getPrivileges(policyTree));
+ }
+
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_READ_ACCESS_CONTROL);
+ root.commit();
+ permissionProvider.refresh();
+
+ expectedPrivNames = ImmutableSet.of(JCR_READ, JCR_READ_ACCESS_CONTROL);
+ assertEquals(expectedPrivNames,
permissionProvider.getPrivileges(root.getTree(accessControlledPath)));
+ policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ assertEquals(expectedPrivNames,
permissionProvider.getPrivileges(policyTree));
+ for (Tree child : policyTree.getChildren()) {
+ assertEquals(ImmutableSet.of(JCR_READ, JCR_READ_ACCESS_CONTROL),
permissionProvider.getPrivileges(child));
+ }
+
+ setupPrincipalBasedAccessControl(testPrincipal, accessControlledPath,
JCR_MODIFY_ACCESS_CONTROL);
+ root.commit();
+ permissionProvider.refresh();
+
+ expectedPrivNames = ImmutableSet.of(JCR_READ, JCR_READ_ACCESS_CONTROL,
JCR_MODIFY_ACCESS_CONTROL);
+ assertEquals(expectedPrivNames,
permissionProvider.getPrivileges(root.getTree(accessControlledPath)));
+ policyTree = root.getTree(PathUtils.concat(accessControlledPath,
REP_PRINCIPAL_POLICY));
+ assertEquals(expectedPrivNames,
permissionProvider.getPrivileges(policyTree));
+ for (Tree child : policyTree.getChildren()) {
+ String effectivePath =
child.getProperty(REP_EFFECTIVE_PATH).getValue(STRING);
+ if (contentPath.equals(effectivePath)) {
+ assertEquals(ImmutableSet.of(JCR_READ,
JCR_READ_ACCESS_CONTROL), permissionProvider.getPrivileges(child));
+ } else if (childPath.equals(effectivePath)) {
+ assertEquals(ImmutableSet.of(JCR_READ,
JCR_READ_ACCESS_CONTROL), permissionProvider.getPrivileges(child));
+ } else if (child2Path.equals(effectivePath)) {
+ assertEquals(ImmutableSet.of(JCR_READ,
JCR_READ_ACCESS_CONTROL, JCR_MODIFY_ACCESS_CONTROL),
permissionProvider.getPrivileges(child));
+ }
+ }
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderAccessControlTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderHiddenTypeTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderHiddenTypeTest.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderHiddenTypeTest.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderHiddenTypeTest.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,87 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
+import org.apache.jackrabbit.oak.plugins.tree.TreeType;
+import
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
+import
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.junit.Before;
+import org.junit.Test;
+
+import static
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.MockUtility.mockReadOnlyTree;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+
+public class PermissionProviderHiddenTypeTest extends
AbstractPrincipalBasedTest {
+
+ private PrincipalBasedPermissionProvider permissionProvider;
+
+ @Before
+ public void before() throws Exception {
+ super.before();
+
+ permissionProvider = createPermissionProvider(root,
getTestSystemUser().getPrincipal());
+ }
+
+
+ @Override
+ protected NamePathMapper getNamePathMapper() {
+ return NamePathMapper.DEFAULT;
+ }
+
+ @Test
+ public void testGetPrivileges() {
+
assertTrue(permissionProvider.getPrivileges(mockReadOnlyTree(TreeType.HIDDEN)).isEmpty());
+ }
+
+ @Test
+ public void testHasPrivileges() {
+
assertFalse(permissionProvider.hasPrivileges(mockReadOnlyTree(TreeType.HIDDEN),
PrivilegeConstants.REP_READ_NODES));
+ }
+
+ @Test
+ public void testIsGranted() {
+
assertTrue(permissionProvider.isGranted(mockReadOnlyTree(TreeType.HIDDEN),
null, Permissions.ALL));
+
assertTrue(permissionProvider.isGranted(mockReadOnlyTree(TreeType.HIDDEN),
mock(PropertyState.class), Permissions.ALL));
+ }
+ @Test
+ public void testGetTreePermission() throws Exception {
+ assertSame(TreePermission.ALL,
permissionProvider.getTreePermission(mockReadOnlyTree(TreeType.HIDDEN),
TreeType.HIDDEN, mock(AbstractTreePermission.class)));
+ }
+
+ @Test
+ public void testGetChildTreePermission() {
+ String indexPath = "/" + IndexConstants.INDEX_DEFINITIONS_NAME +
"/acPrincipalName/" + IndexConstants.INDEX_CONTENT_NODE_NAME;
+ Tree readOnly =
getRootProvider().createReadOnlyRoot(root).getTree(PathUtils.ROOT_PATH);
+ TreePermission tp = (AbstractTreePermission)
permissionProvider.getTreePermission(readOnly, TreePermission.EMPTY);
+ NodeState ns = getTreeProvider().asNodeState(readOnly);
+ for (String elem : PathUtils.elements(indexPath)) {
+ ns = ns.getChildNode(elem);
+ tp = permissionProvider.getTreePermission(elem, ns,
(AbstractTreePermission) tp);
+ }
+ assertSame(TreePermission.ALL, tp);
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderHiddenTypeTest.java
------------------------------------------------------------------------------
svn:eol-style = native