Author: angela
Date: Tue Aug 20 15:23:14 2019
New Revision: 1865540
URL: http://svn.apache.org/viewvc?rev=1865540&view=rev
Log:
OAK-8562 : Improve cug tests
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/pom.xml
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugContextTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugEvaluationTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeDefaultTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImportBaseTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPermissionProviderTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugTreePermissionTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/NestedCugHookTest.java
Modified: jackrabbit/oak/trunk/oak-authorization-cug/pom.xml
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/pom.xml?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-authorization-cug/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-authorization-cug/pom.xml Tue Aug 20 15:23:14 2019
@@ -27,8 +27,8 @@
<properties>
<!-- enable execution of jacoco and set minimal line coverage -->
<skip.coverage>false</skip.coverage>
- <minimum.line.coverage>0.97</minimum.line.coverage>
- <minimum.branch.coverage>0.93</minimum.branch.coverage>
+ <minimum.line.coverage>0.99</minimum.line.coverage>
+ <minimum.branch.coverage>0.98</minimum.branch.coverage>
</properties>
<artifactId>oak-authorization-cug</artifactId>
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/AbstractCugTest.java
Tue Aug 20 15:23:14 2019
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.spi.se
import java.security.Principal;
import java.util.Set;
import java.util.UUID;
+import javax.jcr.AccessDeniedException;
import javax.jcr.RepositoryException;
import javax.jcr.SimpleCredentials;
import javax.jcr.security.AccessControlList;
@@ -37,6 +38,7 @@ import org.apache.jackrabbit.oak.Abstrac
import org.apache.jackrabbit.oak.api.ContentSession;
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.plugins.tree.TreeUtil;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
@@ -49,7 +51,6 @@ import org.apache.jackrabbit.oak.spi.sec
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.jackrabbit.oak.util.NodeUtil;
import org.apache.jackrabbit.util.Text;
import org.jetbrains.annotations.NotNull;
@@ -94,17 +95,12 @@ public class AbstractCugTest extends Abs
* + testNode
* + child
*/
- NodeUtil rootNode = new NodeUtil(root.getTree("/"));
+ Tree rootNode = root.getTree("/");
- NodeUtil content = rootNode.addChild("content",
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
- content.addChild("subtree", NodeTypeConstants.NT_OAK_UNSTRUCTURED);
-
- rootNode.addChild("content2", NodeTypeConstants.NT_OAK_UNSTRUCTURED);
-
- rootNode.addChild("some",
NodeTypeConstants.NT_OAK_UNSTRUCTURED).addChild("content",
NodeTypeConstants.NT_OAK_UNSTRUCTURED).addChild("tree",
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
-
- NodeUtil testNode = rootNode.addChild("testNode",
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
- testNode.addChild("child", NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ createTrees(rootNode, NT_OAK_UNSTRUCTURED, "content", "subtree");
+ createTrees(rootNode, NT_OAK_UNSTRUCTURED, "content2");
+ createTrees(rootNode, NT_OAK_UNSTRUCTURED, "some", "content", "tree");
+ createTrees(rootNode, NT_OAK_UNSTRUCTURED, "testNode", "child");
root.commit();
}
@@ -152,6 +148,13 @@ public class AbstractCugTest extends Abs
return new CugPermissionProvider(root,
root.getContentSession().getWorkspaceName(), ImmutableSet.copyOf(principals),
supportedPaths, getConfig(AuthorizationConfiguration.class).getContext(),
getRootProvider(), getTreeProvider());
}
+ void createTrees(@NotNull Tree tree, @NotNull String ntName, @NotNull
String... names) throws AccessDeniedException {
+ Tree parent = tree;
+ for (String n : names) {
+ parent = TreeUtil.addChild(parent, n, ntName);
+ }
+ }
+
void setupCugsAndAcls() throws Exception {
UserManager uMgr = getUserManager(root);
Principal testGroupPrincipal = getTestGroupPrincipal();
@@ -163,9 +166,9 @@ public class AbstractCugTest extends Abs
User testUser = getTestUser();
// add more child nodes
- NodeUtil n = new NodeUtil(root.getTree(SUPPORTED_PATH));
- n.addChild("a", NT_OAK_UNSTRUCTURED).addChild("b",
NT_OAK_UNSTRUCTURED).addChild("c", NT_OAK_UNSTRUCTURED);
- n.addChild("aa", NT_OAK_UNSTRUCTURED).addChild("bb",
NT_OAK_UNSTRUCTURED).addChild("cc", NT_OAK_UNSTRUCTURED);
+ Tree n = root.getTree(SUPPORTED_PATH);
+ createTrees(n, NT_OAK_UNSTRUCTURED, "a", "b", "c");
+ createTrees(n, NT_OAK_UNSTRUCTURED, "aa", "bb", "cc");
// create cugs
// - /content/a : allow testGroup, deny everyone
@@ -214,7 +217,7 @@ public class AbstractCugTest extends Abs
Preconditions.checkState(tree.exists());
TreeUtil.addMixin(tree, MIX_REP_CUG_MIXIN,
root.getTree(NODE_TYPES_PATH), null);
- new NodeUtil(tree).addChild(REP_CUG_POLICY,
NT_REP_CUG_POLICY).setStrings(REP_PRINCIPAL_NAMES, principalName);
+ TreeUtil.addChild(tree, REP_CUG_POLICY,
NT_REP_CUG_POLICY).setProperty(REP_PRINCIPAL_NAMES,
ImmutableSet.of(principalName), Type.STRINGS);
}
Principal getTestGroupPrincipal() throws Exception {
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
Tue Aug 20 15:23:14 2019
@@ -32,6 +32,8 @@ import javax.jcr.security.Privilege;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlPolicy;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
@@ -46,10 +48,10 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
-import org.apache.jackrabbit.oak.util.NodeUtil;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
+import static org.apache.jackrabbit.oak.api.Type.NAMES;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -92,6 +94,11 @@ public class CugAccessControlManagerTest
}
}
+ @Test
+ public void testGetSupportedPrivilegesNullPath() throws Exception {
+ assertArrayEquals(new Privilege[0],
cugAccessControlManager.getSupportedPrivileges(null));
+ }
+
@Test(expected = PathNotFoundException.class)
public void testGetSupportedPrivilegesInvalidPath() throws Exception {
cugAccessControlManager.getSupportedPrivileges(INVALID_PATH);
@@ -148,8 +155,8 @@ public class CugAccessControlManagerTest
@Test
public void testGetPoliciesAfterManualCreation() throws Exception {
- NodeUtil n = new NodeUtil(root.getTree(SUPPORTED_PATH));
- NodeUtil cug = n.addChild(REP_CUG_POLICY, NT_REP_CUG_POLICY);
+ Tree n = root.getTree(SUPPORTED_PATH);
+ Tree cug = TreeUtil.addChild(n, REP_CUG_POLICY, NT_REP_CUG_POLICY);
AccessControlPolicy[] policies =
cugAccessControlManager.getPolicies(SUPPORTED_PATH);
assertEquals(1, policies.length);
@@ -157,7 +164,7 @@ public class CugAccessControlManagerTest
CugPolicy cugPolicy = (CugPolicy) policies[0];
assertTrue(cugPolicy.getPrincipals().isEmpty());
- cug.setStrings(REP_PRINCIPAL_NAMES, "unknownPrincipalName",
EveryonePrincipal.NAME);
+ cug.setProperty(REP_PRINCIPAL_NAMES,
ImmutableList.of("unknownPrincipalName", EveryonePrincipal.NAME), Type.STRINGS);
policies = cugAccessControlManager.getPolicies(SUPPORTED_PATH);
cugPolicy = (CugPolicy) policies[0];
@@ -275,11 +282,7 @@ public class CugAccessControlManagerTest
public void testSetInvalidPolicy() throws Exception {
List<AccessControlPolicy> invalidPolicies = ImmutableList.of(
new AccessControlPolicy() {},
- new NamedAccessControlPolicy() {
- public String getName() {
- return "name";
- }
- },
+ (NamedAccessControlPolicy) () -> "name",
InvalidCug.INSTANCE
);
@@ -311,12 +314,45 @@ public class CugAccessControlManagerTest
@Test(expected = AccessControlException.class)
public void testSetInvalidCugNode() throws Exception {
Tree supportedTree = root.getTree(SUPPORTED_PATH);
- new NodeUtil(supportedTree).addChild(REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ TreeUtil.addChild(supportedTree, REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
cugAccessControlManager.setPolicy(SUPPORTED_PATH, new
CugPolicyImpl(SUPPORTED_PATH, NamePathMapper.DEFAULT,
getPrincipalManager(root), ImportBehavior.BESTEFFORT, getExclude()));
}
@Test
+ public void testSetPolicyMixinAlreadyPresent() throws Exception {
+ CugPolicy cug = getApplicableCug(SUPPORTED_PATH);
+ cug.addPrincipals(EveryonePrincipal.getInstance());
+
+ TreeUtil.addMixin(root.getTree(SUPPORTED_PATH), MIX_REP_CUG_MIXIN,
root.getTree(NODE_TYPES_PATH), "uid");
+
+ cugAccessControlManager.setPolicy(SUPPORTED_PATH, cug);
+ root.commit();
+
+ ReadOnlyNodeTypeManager ntMgr =
ReadOnlyNodeTypeManager.getInstance(root, NamePathMapper.DEFAULT);
+ assertTrue(ntMgr.isNodeType(root.getTree(SUPPORTED_PATH),
MIX_REP_CUG_MIXIN));
+ }
+
+ @Test
+ public void testResetPolicy() throws Exception {
+ CugPolicy cug = getApplicableCug(SUPPORTED_PATH);
+ cug.addPrincipals(EveryonePrincipal.getInstance());
+ cugAccessControlManager.setPolicy(SUPPORTED_PATH, cug);
+
+ cug = (CugPolicy)
cugAccessControlManager.getPolicies(SUPPORTED_PATH)[0];
+ assertTrue(cug.removePrincipals(EveryonePrincipal.getInstance()));
+ assertTrue(cug.getPrincipals().isEmpty());
+
+ Principal testprincipal = getTestGroupPrincipal();
+ cug.addPrincipals(testprincipal);
+
+ cugAccessControlManager.setPolicy(SUPPORTED_PATH, cug);
+
+ cug = (CugPolicy)
cugAccessControlManager.getPolicies(SUPPORTED_PATH)[0];
+ assertEquals(ImmutableSet.of(testprincipal), cug.getPrincipals());
+ }
+
+ @Test
public void testRemovePolicy() throws Exception {
CugPolicy cug = getApplicableCug(SUPPORTED_PATH);
cugAccessControlManager.setPolicy(SUPPORTED_PATH, cug);
@@ -354,14 +390,29 @@ public class CugAccessControlManagerTest
}
@Test
+ public void testRemovePolicyMixinAlreadyRemoved() throws Exception {
+ ReadOnlyNodeTypeManager ntMgr =
ReadOnlyNodeTypeManager.getInstance(root, NamePathMapper.DEFAULT);
+
+ CugPolicy cug = getApplicableCug(SUPPORTED_PATH);
+ cugAccessControlManager.setPolicy(SUPPORTED_PATH, cug);
+ root.commit();
+
+ Tree tree = root.getTree(SUPPORTED_PATH);
+ Set<String> mixins = Sets.newHashSet(TreeUtil.getNames(tree,
NodeTypeConstants.JCR_MIXINTYPES));
+ mixins.remove(MIX_REP_CUG_MIXIN);
+ tree.setProperty(JcrConstants.JCR_MIXINTYPES, mixins, NAMES);
+
+ assertFalse(ntMgr.isNodeType(root.getTree(SUPPORTED_PATH),
MIX_REP_CUG_MIXIN));
+
+ cugAccessControlManager.removePolicy(SUPPORTED_PATH, cug);
+ root.commit();
+ }
+
+ @Test
public void testRemoveInvalidPolicy() throws Exception {
List<AccessControlPolicy> invalidPolicies = ImmutableList.of(
new AccessControlPolicy() {},
- new NamedAccessControlPolicy() {
- public String getName() {
- return "name";
- }
- },
+ (NamedAccessControlPolicy) () -> "name",
InvalidCug.INSTANCE
);
@@ -378,7 +429,7 @@ public class CugAccessControlManagerTest
@Test(expected = AccessControlException.class)
public void testRemoveInvalidCugNode() throws Exception {
Tree supportedTree = root.getTree(SUPPORTED_PATH);
- new NodeUtil(supportedTree).addChild(REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ TreeUtil.addChild(supportedTree, REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
cugAccessControlManager.removePolicy(SUPPORTED_PATH, new
CugPolicyImpl(SUPPORTED_PATH, NamePathMapper.DEFAULT,
getPrincipalManager(root), ImportBehavior.BESTEFFORT, getExclude()));
}
@@ -419,6 +470,23 @@ public class CugAccessControlManagerTest
assertEquals(0, applicable.length);
}
+ @Test
+ public void testDefinesPathMismatch() {
+ assertFalse(cugAccessControlManager.defines(null,
createCug(SUPPORTED_PATH)));
+ assertFalse(cugAccessControlManager.defines(SUPPORTED_PATH2,
createCug(SUPPORTED_PATH)));
+ }
+
+ @Test
+ public void testDefinesUnsupportedPolicy() {
+
assertFalse(cugAccessControlManager.defines(InvalidCug.INSTANCE.getPath(),
InvalidCug.INSTANCE));
+ }
+
+ @Test
+ public void testDefines() {
+ CugPolicy cugPolicy = createCug(SUPPORTED_PATH);
+ assertTrue(cugAccessControlManager.defines(cugPolicy.getPath(),
cugPolicy));
+ }
+
/**
* An invalid (unsupported) implementation of {@link CugPolicy}.
*/
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfigurationTest.java
Tue Aug 20 15:23:14 2019
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.spi.security.authorization.cug.impl;
+import java.lang.reflect.Field;
import java.security.Principal;
import java.util.List;
import java.util.Set;
@@ -24,13 +25,18 @@ import javax.jcr.security.AccessControlM
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.MoveTracker;
import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
+import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
+import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugExclude;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.EmptyPermissionProvider;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
import
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
@@ -38,13 +44,19 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.spi.security.principal.SystemPrincipal;
import org.apache.jackrabbit.oak.spi.security.principal.SystemUserPrincipal;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.calls;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
public class CugConfigurationTest extends AbstractCugTest {
@@ -177,18 +189,8 @@ public class CugConfigurationTest extend
List<Principal> excluded = ImmutableList.of(
SystemPrincipal.INSTANCE,
- new AdminPrincipal() {
- @Override
- public String getName() {
- return "admin";
- }
- },
- new SystemUserPrincipal() {
- @Override
- public String getName() {
- return "systemUser";
- }
- });
+ (AdminPrincipal) () -> "admin",
+ (SystemUserPrincipal) () -> "systemUser");
for (Principal p : excluded) {
Set<Principal> principals = ImmutableSet.of(p,
EveryonePrincipal.getInstance());
@@ -221,4 +223,44 @@ public class CugConfigurationTest extend
Set<String> expected = ImmutableSet.copyOf(paths);
assertEquals(expected,
configuration.getParameters().getConfigValue(CugConstants.PARAM_CUG_SUPPORTED_PATHS,
ImmutableSet.of()));
}
+
+ @Test
+ public void testUnbindMountInfoProvider() throws Exception {
+ CugConfiguration cugConfiguration =
createConfiguration(ConfigurationParameters.EMPTY);
+
cugConfiguration.unbindMountInfoProvider(mock(MountInfoProvider.class));
+
+ Field f =
cugConfiguration.getClass().getDeclaredField("mountInfoProvider");
+ f.setAccessible(true);
+ assertNull(f.get(cugConfiguration));
+ }
+
+ @Test
+ public void testUnbindCugExclude() throws Exception {
+ CugConfiguration cugConfiguration =
createConfiguration(ConfigurationParameters.EMPTY);
+ cugConfiguration.unbindExclude(mock(CugExclude.class));
+
+ Field f = cugConfiguration.getClass().getDeclaredField("exclude");
+ f.setAccessible(true);
+ assertNull(f.get(cugConfiguration));
+ }
+
+ @Test
+ public void testRepositoryInitializerAlreadyInitialized() {
+ AuthorizationConfiguration ac =
getConfig(AuthorizationConfiguration.class);
+ assertTrue(ac instanceof CompositeAuthorizationConfiguration);
+
+ AuthorizationConfiguration cugConfig = null;
+ for (AuthorizationConfiguration config :
((CompositeAuthorizationConfiguration) ac).getConfigurations()) {
+ if (config instanceof CugConfiguration) {
+ cugConfig = config;
+ break;
+ }
+ }
+ assertNotNull(cugConfig);
+ RepositoryInitializer ri = cugConfig.getRepositoryInitializer();
+ NodeBuilder rootBuilder =
spy(getTreeProvider().asNodeState(root.getTree(PathUtils.ROOT_PATH)).builder());
+ ri.initialize(rootBuilder);
+
+ calls(1);
+ }
}
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugContextTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugContextTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugContextTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugContextTest.java
Tue Aug 20 15:23:14 2019
@@ -28,10 +28,10 @@ import org.apache.jackrabbit.oak.api.Pro
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.jackrabbit.oak.util.NodeUtil;
import org.junit.Before;
import org.junit.Test;
@@ -56,9 +56,9 @@ public class CugContextTest extends Abst
super.before();
// add more child nodes
- NodeUtil n = new NodeUtil(root.getTree(SUPPORTED_PATH));
- n.addChild("a", NT_OAK_UNSTRUCTURED).addChild("b",
NT_OAK_UNSTRUCTURED).addChild("c", NT_OAK_UNSTRUCTURED);
- n.addChild("aa", NT_OAK_UNSTRUCTURED).addChild("bb",
NT_OAK_UNSTRUCTURED).addChild("cc", NT_OAK_UNSTRUCTURED);
+ Tree n = root.getTree(SUPPORTED_PATH);
+ createTrees(n, NT_OAK_UNSTRUCTURED, "a", "b", "c");
+ createTrees(n, NT_OAK_UNSTRUCTURED, "aa", "bb", "cc");
// create cugs
createCug("/content/a", getTestUser().getPrincipal());
@@ -141,7 +141,7 @@ public class CugContextTest extends Abst
PropertyState ps =
PropertyStates.createProperty(CugConstants.REP_PRINCIPAL_NAMES,
ImmutableSet.of(getTestUser().getPrincipal().getName()), Type.STRINGS);
// cug at unsupported path -> context doesn't take supported paths
into account.
- Tree invalidCug = new
NodeUtil(root.getTree(UNSUPPORTED_PATH)).addChild(CugConstants.REP_CUG_POLICY,
CugConstants.NT_REP_CUG_POLICY).getTree();
+ Tree invalidCug = TreeUtil.addChild(root.getTree(UNSUPPORTED_PATH),
CugConstants.REP_CUG_POLICY, CugConstants.NT_REP_CUG_POLICY);
invalidCug.setProperty(ps);
assertTrue(CugContext.INSTANCE.definesContextRoot(invalidCug));
@@ -149,7 +149,7 @@ public class CugContextTest extends Abst
assertTrue(CugContext.INSTANCE.definesProperty(invalidCug,
invalidCug.getProperty(CugConstants.REP_PRINCIPAL_NAMES)));
// 'cug' with wrong node type -> detected as no-cug by context
- invalidCug = new
NodeUtil(root.getTree(UNSUPPORTED_PATH)).addChild(CugConstants.REP_CUG_POLICY,
NT_OAK_UNSTRUCTURED).getTree();
+ invalidCug = TreeUtil.addChild(root.getTree(UNSUPPORTED_PATH),
CugConstants.REP_CUG_POLICY, NT_OAK_UNSTRUCTURED);
invalidCug.setProperty(ps);
assertFalse(CugContext.INSTANCE.definesContextRoot(invalidCug));
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugEvaluationTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugEvaluationTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugEvaluationTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugEvaluationTest.java
Tue Aug 20 15:23:14 2019
@@ -30,6 +30,7 @@ import org.apache.jackrabbit.oak.api.Con
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.tree.TreeUtil;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
import
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
@@ -37,7 +38,6 @@ import org.apache.jackrabbit.oak.spi.sec
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.jackrabbit.oak.util.NodeUtil;
import org.junit.Before;
import org.junit.Test;
@@ -165,8 +165,8 @@ public class CugEvaluationTest extends A
List<String> readOnly = ImmutableList.of("/content", "/content/a/b/c");
for (String p : readOnly) {
try {
- NodeUtil content = new NodeUtil(testRoot.getTree(p));
- content.addChild("writeTest", NT_OAK_UNSTRUCTURED);
+ Tree content = testRoot.getTree(p);
+ TreeUtil.addChild(content, "writeTest", NT_OAK_UNSTRUCTURED);
testRoot.commit();
fail();
} catch (CommitFailedException e) {
@@ -188,8 +188,8 @@ public class CugEvaluationTest extends A
List<String> paths = ImmutableList.of("/content",
"/content/a/b/c");
for (String p : paths) {
- NodeUtil content = new NodeUtil(r.getTree(p));
- content.addChild("writeTest", NT_OAK_UNSTRUCTURED);
+ Tree content = r.getTree(p);
+ TreeUtil.addChild(content, "writeTest", NT_OAK_UNSTRUCTURED);
r.commit();
}
} finally {
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeDefaultTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeDefaultTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeDefaultTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeDefaultTest.java
Tue Aug 20 15:23:14 2019
@@ -60,23 +60,13 @@ public class CugExcludeDefaultTest {
@Test
public void testAdminPrincipal() {
- Set<Principal> principals = ImmutableSet.<Principal>of(new
AdminPrincipal() {
- @Override
- public String getName() {
- return "admin";
- }
- });
+ Set<Principal> principals =
ImmutableSet.<Principal>of((AdminPrincipal) () -> "admin");
assertTrue(exclude.isExcluded(principals));
}
@Test
public void testSystemUserPrincipal() {
- Set<Principal> principals = ImmutableSet.<Principal>of(new
SystemUserPrincipal() {
- @Override
- public String getName() {
- return "test";
- }
- });
+ Set<Principal> principals =
ImmutableSet.<Principal>of((SystemUserPrincipal) () -> "test");
assertTrue(exclude.isExcluded(principals));
}
@@ -107,12 +97,7 @@ public class CugExcludeDefaultTest {
public void testMixedPrincipals() {
Set<Principal> principals = new HashSet<>();
principals.add(new PrincipalImpl("test"));
- principals.add(new SystemUserPrincipal() {
- @Override
- public String getName() {
- return "test";
- }
- });
+ principals.add((SystemUserPrincipal) () -> "test");
assertTrue(exclude.isExcluded(principals));
}
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImportBaseTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImportBaseTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImportBaseTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugImportBaseTest.java
Tue Aug 20 15:23:14 2019
@@ -29,7 +29,6 @@ import javax.jcr.Value;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.security.AccessControlException;
-import com.google.common.base.Function;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import org.apache.jackrabbit.api.JackrabbitRepository;
@@ -47,7 +46,6 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -191,15 +189,11 @@ public abstract class CugImportBaseTest
static void assertPrincipalNames(@NotNull Set<String>
expectedPrincipalNames, @NotNull Value[] principalNames) {
assertEquals(expectedPrincipalNames.size(), principalNames.length);
- Set<String> result =
ImmutableSet.copyOf(Iterables.transform(ImmutableSet.copyOf(principalNames),
new Function<Value, String>() {
- @Nullable
- @Override
- public String apply(@Nullable Value principalName) {
- try {
- return (principalName == null) ? null :
principalName.getString();
- } catch (RepositoryException e) {
- throw new IllegalStateException(e);
- }
+ Set<String> result =
ImmutableSet.copyOf(Iterables.transform(ImmutableSet.copyOf(principalNames),
principalName -> {
+ try {
+ return (principalName == null) ? null :
principalName.getString();
+ } catch (RepositoryException e) {
+ throw new IllegalStateException(e);
}
}));
assertEquals(expectedPrincipalNames, result);
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPermissionProviderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPermissionProviderTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPermissionProviderTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPermissionProviderTest.java
Tue Aug 20 15:23:14 2019
@@ -31,6 +31,13 @@ import com.google.common.collect.Iterabl
import org.apache.jackrabbit.oak.api.ContentSession;
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.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.plugins.tree.TreeUtil;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
@@ -41,7 +48,7 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.jackrabbit.oak.util.NodeUtil;
+import org.apache.jackrabbit.oak.spi.version.VersionConstants;
import org.jetbrains.annotations.NotNull;
import org.junit.Before;
import org.junit.Test;
@@ -49,9 +56,13 @@ import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.withSettings;
public class CugPermissionProviderTest extends AbstractCugTest implements
NodeTypeConstants {
@@ -107,10 +118,10 @@ public class CugPermissionProviderTest e
testGroupPrincipal = getTestGroupPrincipal();
// add more child nodes
- NodeUtil n = new NodeUtil(root.getTree(SUPPORTED_PATH));
- n.addChild("a", NT_OAK_UNSTRUCTURED).addChild("b",
NT_OAK_UNSTRUCTURED).addChild("c", NT_OAK_UNSTRUCTURED);
- n.addChild("aa", NT_OAK_UNSTRUCTURED).addChild("bb",
NT_OAK_UNSTRUCTURED).addChild("cc", NT_OAK_UNSTRUCTURED);
- n.addChild("no", NT_OAK_UNSTRUCTURED).addChild("cug",
NT_OAK_UNSTRUCTURED).addChild("in", NT_OAK_UNSTRUCTURED).addChild("subtree",
NT_OAK_UNSTRUCTURED);
+ Tree n = root.getTree(SUPPORTED_PATH);
+ createTrees(n, NT_OAK_UNSTRUCTURED, "a", "b", "c");
+ createTrees(n, NT_OAK_UNSTRUCTURED, "aa", "bb", "cc");
+ createTrees(n, NT_OAK_UNSTRUCTURED, "no", "cug", "in", "subtree");
createCug("/content/a", testGroupPrincipal);
createCug("/content/a/b/c", EveryonePrincipal.getInstance());
@@ -235,6 +246,20 @@ public class CugPermissionProviderTest e
}
/**
+ * @see
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider#supportedPermissions(org.apache.jackrabbit.oak.api.Tree,
org.apache.jackrabbit.oak.api.PropertyState, long)
+ */
+ @Test
+ public void testSupportedPermissionsByNonExistingVersionTree() {
+ Tree versionTree = mock(Tree.class,
withSettings().extraInterfaces(TreeTypeAware.class, ReadOnly.class));
+ when(versionTree.exists()).thenReturn(false);
+
when(versionTree.getPath()).thenReturn(VersionConstants.VERSION_STORE_PATH +
"/some/version");
+
when(versionTree.getProperty(JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JCR_PRIMARYTYPE,
NT_VERSION, Type.NAME));
+
when(((TreeTypeAware)versionTree).getType()).thenReturn(TreeType.VERSION);
+
+ assertEquals(Permissions.NO_PERMISSION,
cugPermProvider.supportedPermissions(versionTree, null, Permissions.READ));
+ }
+
+ /**
* @see
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider#supportedPermissions(org.apache.jackrabbit.oak.plugins.tree.TreeLocation,
long)
*/
@Test
@@ -269,6 +294,20 @@ public class CugPermissionProviderTest e
}
/**
+ * @see
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider#supportedPermissions(org.apache.jackrabbit.oak.plugins.tree.TreeLocation,
long)
+ */
+ @Test
+ public void testSupportedPermissionsByNullLocation() {
+ Tree t = mock(Tree.class);
+ when(t.getPath()).thenReturn(PathUtils.ROOT_PATH);
+ when(t.exists()).thenReturn(false);
+
+ TreeLocation location = TreeLocation.create(t);
+ assertNull(location.getTree());
+ assertEquals(Permissions.NO_PERMISSION,
cugPermProvider.supportedPermissions(location, Permissions.READ));
+ }
+
+ /**
* @see
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider#supportedPermissions(org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission,
org.apache.jackrabbit.oak.api.PropertyState, long)
*/
@Test
@@ -429,6 +468,24 @@ public class CugPermissionProviderTest e
assertTrue(cugPermProvider.getPrivileges(null).isEmpty());
}
+ /**
+ * @see
PermissionProvider#getPrivileges(org.apache.jackrabbit.oak.api.Tree)
+ */
+ @Test
+ public void testGetPrivilegesWithInvalidCugTree() {
+ Tree invalidCug = mock(Tree.class);
+
when(invalidCug.getProperty(JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JCR_PRIMARYTYPE,
NT_OAK_UNSTRUCTURED, Type.NAME));
+
+ Tree t = mock(Tree.class,
withSettings().extraInterfaces(TreeTypeAware.class, ReadOnly.class));
+ when(t.exists()).thenReturn(true);
+ when(t.getPath()).thenReturn(SUPPORTED_PATH);
+ when(((TreeTypeAware)t).getType()).thenReturn(TreeType.DEFAULT);
+ when(t.hasChild(REP_CUG_POLICY)).thenReturn(true);
+ when(t.getChild(REP_CUG_POLICY)).thenReturn(invalidCug);
+
+ assertTrue(cugPermProvider.getPrivileges(t).isEmpty());
+ }
+
//------------------------------------------------------< hasPrivileges
>---
/**
* @see
PermissionProvider#hasPrivileges(org.apache.jackrabbit.oak.api.Tree, String...)
@@ -487,6 +544,20 @@ public class CugPermissionProviderTest e
assertFalse(cugPermProvider.hasPrivileges(null,
PrivilegeConstants.JCR_READ));
}
+ /**
+ * @see
PermissionProvider#hasPrivileges(org.apache.jackrabbit.oak.api.Tree, String...)
+ */
+ @Test
+ public void testHasPrivilegesNonExistingVersionTree() {
+ Tree versionTree = mock(Tree.class,
withSettings().extraInterfaces(TreeTypeAware.class, ReadOnly.class));
+ when(versionTree.exists()).thenReturn(false);
+
when(versionTree.getPath()).thenReturn(VersionConstants.VERSION_STORE_PATH +
"/some/version");
+
when(versionTree.getProperty(JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JCR_PRIMARYTYPE,
NT_VERSION, Type.NAME));
+
when(((TreeTypeAware)versionTree).getType()).thenReturn(TreeType.VERSION);
+
+ assertFalse(cugPermProvider.hasPrivileges(versionTree,
PrivilegeConstants.JCR_READ));
+ }
+
//--------------------------------------------< getRepositoryPermission
>---
/**
* @see
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider#getRepositoryPermission()
@@ -528,7 +599,7 @@ public class CugPermissionProviderTest e
// false cug-policy node (wrong nt)
Tree aaTree = root.getTree("/content/aa");
- new NodeUtil(aaTree).addChild(CugConstants.REP_CUG_POLICY,
NT_OAK_UNSTRUCTURED);
+ TreeUtil.addChild(aaTree, CugConstants.REP_CUG_POLICY,
NT_OAK_UNSTRUCTURED);
TreePermission aaTp2 =
cugPermProvider.getTreePermission(root.getTree("/content/aa"), contentTp);
assertTrue(aaTp2 instanceof CugTreePermission);
@@ -555,6 +626,16 @@ public class CugPermissionProviderTest e
}
}
+ @Test
+ public void testGetTreePermissionNonExistingVersionTree() {
+ Tree versionTree = mock(Tree.class);
+ when(versionTree.exists()).thenReturn(false);
+
when(versionTree.getProperty(JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JCR_PRIMARYTYPE,
NT_VERSION, Type.NAME));
+
+ TreePermission tp = cugPermProvider.getTreePermission(versionTree,
TreeType.VERSION, mock(TreePermission.class));
+ assertSame(TreePermission.NO_RECOURSE, tp);
+ }
+
//-------------------------------< isGranted(Tree, PropertyState, long)
>---
/**
* @see PermissionProvider#isGranted(org.apache.jackrabbit.oak.api.Tree,
org.apache.jackrabbit.oak.api.PropertyState, long)
@@ -625,4 +706,12 @@ public class CugPermissionProviderTest e
assertFalse(cugPermProvider.isGranted(p, Session.ACTION_ADD_NODE));
assertFalse(cugPermProvider.isGranted(p, Session.ACTION_READ + ',' +
Session.ACTION_ADD_NODE));
}
+
+
//--------------------------------------------------------------------------
+ @Test
+ public void testIsAllowMissingPrincipalNames() {
+ Tree cugTree = root.getTree("/content/a").getChild(REP_CUG_POLICY);
+ cugTree.removeProperty(REP_PRINCIPAL_NAMES);
+ assertFalse(cugPermProvider.isAllow(cugTree));
+ }
}
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugPolicyImplTest.java
Tue Aug 20 15:23:14 2019
@@ -80,7 +80,7 @@ public class CugPolicyImplTest extends A
private Principal getExcludedPrincipal() {
return (SystemUserPrincipal) () -> "excluded";
}
-
+
@Test
public void testPrincipalSetPolicy() {
assertTrue(createCugPolicy(principals) instanceof PrincipalSetPolicy);
@@ -190,12 +190,7 @@ public class CugPolicyImplTest extends A
@Test(expected = AccessControlException.class)
public void testAddNullPrincipalName() throws Exception {
CugPolicy cug = createEmptyCugPolicy(ImportBehavior.BESTEFFORT);
- cug.addPrincipals(new Principal() {
- @Override
- public String getName() {
- return null;
- }
- });
+ cug.addPrincipals((Principal) () -> null);
}
@Test
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugTreePermissionTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugTreePermissionTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugTreePermissionTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugTreePermissionTest.java
Tue Aug 20 15:23:14 2019
@@ -23,11 +23,11 @@ import org.apache.jackrabbit.oak.api.Tre
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
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.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.util.NodeUtil;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
@@ -138,9 +138,9 @@ public class CugTreePermissionTest exten
@Test
public void testIsInCugSupportedPathWithoutCug() throws Exception {
- NodeUtil node = new NodeUtil(root.getTree(SUPPORTED_PATH2));
- Tree c1 = node.addChild("c1", NT_OAK_UNSTRUCTURED).getTree();
- Tree c2 = node.addChild("c2", NT_OAK_UNSTRUCTURED).getTree();
+ Tree node = root.getTree(SUPPORTED_PATH2);
+ Tree c1 = TreeUtil.addChild(node, "c1", NT_OAK_UNSTRUCTURED);
+ Tree c2 = TreeUtil.addChild(node, "c2", NT_OAK_UNSTRUCTURED);
String cugPath = c2.getPath();
createCug(cugPath, getTestGroupPrincipal());
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java
Tue Aug 20 15:23:14 2019
@@ -20,6 +20,7 @@ import java.util.Set;
import com.google.common.collect.ImmutableSet;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
import org.apache.jackrabbit.oak.spi.mount.Mounts;
@@ -28,7 +29,6 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
-import org.apache.jackrabbit.oak.util.NodeUtil;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
@@ -71,8 +71,9 @@ public class CugUtilTest extends Abstrac
assertFalse(CugUtil.hasCug(root.getTree(path)));
}
- new NodeUtil(root.getTree(SUPPORTED_PATH2)).addChild(REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED).getTree();
- assertTrue(CugUtil.hasCug(root.getTree(SUPPORTED_PATH2)));
+ Tree t = root.getTree(SUPPORTED_PATH2);
+ TreeUtil.addChild(t, REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ assertTrue(CugUtil.hasCug(t));
}
@Test
@@ -85,7 +86,7 @@ public class CugUtilTest extends Abstrac
assertFalse(CugUtil.hasCug(getNodeState(root.getTree(path))));
}
- new NodeUtil(root.getTree(SUPPORTED_PATH2)).addChild(REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ TreeUtil.addChild(root.getTree(SUPPORTED_PATH2), REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
assertTrue(CugUtil.hasCug(getNodeState(root.getTree(SUPPORTED_PATH2))));
}
@@ -98,7 +99,7 @@ public class CugUtilTest extends Abstrac
assertFalse(CugUtil.hasCug(getNodeState(root.getTree(path)).builder()));
}
- new NodeUtil(root.getTree(SUPPORTED_PATH2)).addChild(REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ TreeUtil.addChild(root.getTree(SUPPORTED_PATH2), REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
assertTrue(CugUtil.hasCug(getNodeState(root.getTree(SUPPORTED_PATH2)).builder()));
}
@@ -110,7 +111,7 @@ public class CugUtilTest extends Abstrac
assertNull(CugUtil.getCug(root.getTree(path)));
}
- new NodeUtil(root.getTree(SUPPORTED_PATH2)).addChild(REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ TreeUtil.addChild(root.getTree(SUPPORTED_PATH2), REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
assertNull(CugUtil.getCug(root.getTree(SUPPORTED_PATH2)));
}
@@ -119,7 +120,7 @@ public class CugUtilTest extends Abstrac
assertFalse(CugUtil.definesCug(root.getTree(PathUtils.concat(INVALID_PATH,
REP_CUG_POLICY))));
assertTrue(CugUtil.definesCug(root.getTree(PathUtils.concat(SUPPORTED_PATH,
REP_CUG_POLICY))));
- Tree invalid = new
NodeUtil(root.getTree(SUPPORTED_PATH2)).addChild(REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED).getTree();
+ Tree invalid = TreeUtil.addChild(root.getTree(SUPPORTED_PATH2),
REP_CUG_POLICY, NodeTypeConstants.NT_OAK_UNSTRUCTURED);
assertFalse(CugUtil.definesCug(invalid));
}
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
Tue Aug 20 15:23:14 2019
@@ -16,42 +16,49 @@
*/
package org.apache.jackrabbit.oak.spi.security.authorization.cug.impl;
-import javax.jcr.nodetype.NodeDefinitionTemplate;
-import javax.jcr.nodetype.NodeTypeTemplate;
-
+import com.google.common.collect.ImmutableList;
import org.apache.jackrabbit.JcrConstants;
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.spi.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
import
org.apache.jackrabbit.oak.plugins.nodetype.write.ReadWriteNodeTypeManager;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.Validator;
+import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
-import org.apache.jackrabbit.oak.util.NodeUtil;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import org.junit.Test;
+import javax.jcr.nodetype.NodeDefinitionTemplate;
+import javax.jcr.nodetype.NodeTypeTemplate;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
public class CugValidatorTest extends AbstractCugTest {
- private NodeUtil node;
+ private Tree node;
@Override
public void before() throws Exception {
super.before();
- node = new NodeUtil(root.getTree(SUPPORTED_PATH));
+ node = root.getTree(SUPPORTED_PATH);
}
@Test
public void testChangePrimaryType() {
- node = new NodeUtil(root.getTree(SUPPORTED_PATH2));
+ node = root.getTree(SUPPORTED_PATH2);
try {
- node.setName(JcrConstants.JCR_PRIMARYTYPE, NT_REP_CUG_POLICY);
- node.setStrings(REP_PRINCIPAL_NAMES, EveryonePrincipal.NAME);
+ node.setProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_CUG_POLICY,
Type.NAME);
+ node.setProperty(REP_PRINCIPAL_NAMES,
ImmutableList.of(EveryonePrincipal.NAME), Type.STRINGS);
root.commit();
fail();
} catch (CommitFailedException e) {
@@ -61,14 +68,57 @@ public class CugValidatorTest extends Ab
}
@Test
+ public void testPropertyChangedBeforeWasCug() throws Exception {
+ NodeState ns = mock(NodeState.class);
+ Validator validator = new CugValidatorProvider().getRootValidator(ns,
ns, new CommitInfo("sid", "uid"));
+ try {
+ PropertyState before =
PropertyStates.createProperty(JCR_PRIMARYTYPE, NT_REP_CUG_POLICY);
+ PropertyState after =
PropertyStates.createProperty(JCR_PRIMARYTYPE, NT_OAK_UNSTRUCTURED);
+
+ validator.propertyChanged(before, after);
+ fail();
+ } catch (CommitFailedException e) {
+ assertTrue(e.isAccessControlViolation());
+ assertEquals(20, e.getCode());
+ }
+ }
+
+ @Test
+ public void testPropertyChangedAfterIsCug() throws Exception {
+ NodeState ns = mock(NodeState.class);
+ Validator validator = new CugValidatorProvider().getRootValidator(ns,
ns, new CommitInfo("sid", "uid"));
+ try {
+ PropertyState before =
PropertyStates.createProperty(JCR_PRIMARYTYPE, NT_OAK_UNSTRUCTURED);
+ PropertyState after =
PropertyStates.createProperty(JCR_PRIMARYTYPE, NT_REP_CUG_POLICY);
+
+ validator.propertyChanged(before, after);
+ fail();
+ } catch (CommitFailedException e) {
+ assertTrue(e.isAccessControlViolation());
+ assertEquals(20, e.getCode());
+ }
+ }
+
+ @Test
+ public void testPropertyChangedNoCugInvolved() throws Exception {
+ NodeState ns = mock(NodeState.class);
+ Validator validator = new CugValidatorProvider().getRootValidator(ns,
ns, new CommitInfo("sid", "uid"));
+
+ PropertyState before = PropertyStates.createProperty(JCR_PRIMARYTYPE,
NT_OAK_UNSTRUCTURED);
+ PropertyState after = PropertyStates.createProperty(JCR_PRIMARYTYPE,
NT_UNSTRUCTURED);
+
+ validator.propertyChanged(before, after);
+ }
+
+ @Test
public void testChangePrimaryTypeOfCug() throws Exception {
- node.setNames(JcrConstants.JCR_MIXINTYPES, MIX_REP_CUG_MIXIN);
- NodeUtil cug = node.addChild(REP_CUG_POLICY, NT_REP_CUG_POLICY);
- cug.setStrings(REP_PRINCIPAL_NAMES, EveryonePrincipal.NAME);
+ node.setProperty(JcrConstants.JCR_MIXINTYPES,
ImmutableList.of(MIX_REP_CUG_MIXIN), Type.NAMES);
+ Tree cug = TreeUtil.addChild(node, REP_CUG_POLICY, NT_REP_CUG_POLICY);
+ cug.setProperty(REP_PRINCIPAL_NAMES,
ImmutableList.of(EveryonePrincipal.NAME), Type.STRINGS);
root.commit();
try {
- cug.setName(JcrConstants.JCR_PRIMARYTYPE,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ cug.setProperty(JcrConstants.JCR_PRIMARYTYPE,
NodeTypeConstants.NT_OAK_UNSTRUCTURED, Type.NAME);
root.commit();
fail();
} catch (CommitFailedException e) {
@@ -79,8 +129,8 @@ public class CugValidatorTest extends Ab
@Test
public void testInvalidPrimaryType() throws Exception {
- NodeUtil cug = node.addChild(REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
- cug.setStrings(REP_PRINCIPAL_NAMES, EveryonePrincipal.NAME);
+ Tree cug = TreeUtil.addChild(node, REP_CUG_POLICY,
NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ cug.setProperty(REP_PRINCIPAL_NAMES,
ImmutableList.of(EveryonePrincipal.NAME), Type.STRINGS);
try {
root.commit();
@@ -95,8 +145,8 @@ public class CugValidatorTest extends Ab
@Test
public void testMissingMixin() throws Exception {
- NodeUtil cug = node.addChild(REP_CUG_POLICY, NT_REP_CUG_POLICY);
- cug.setStrings(REP_PRINCIPAL_NAMES, EveryonePrincipal.NAME);
+ Tree cug = TreeUtil.addChild(node, REP_CUG_POLICY, NT_REP_CUG_POLICY);
+ cug.setProperty(REP_PRINCIPAL_NAMES,
ImmutableList.of(EveryonePrincipal.NAME), Type.STRINGS);
try {
root.commit();
@@ -111,9 +161,9 @@ public class CugValidatorTest extends Ab
@Test
public void testRemoveMixin() throws Exception {
- node.setNames(JcrConstants.JCR_MIXINTYPES, MIX_REP_CUG_MIXIN);
- NodeUtil cug = node.addChild(REP_CUG_POLICY, NT_REP_CUG_POLICY);
- cug.setStrings(REP_PRINCIPAL_NAMES, EveryonePrincipal.NAME);
+ node.setProperty(JcrConstants.JCR_MIXINTYPES,
ImmutableList.of(MIX_REP_CUG_MIXIN), Type.NAMES);
+ Tree cug = TreeUtil.addChild(node, REP_CUG_POLICY, NT_REP_CUG_POLICY);
+ cug.setProperty(REP_PRINCIPAL_NAMES,
ImmutableList.of(EveryonePrincipal.NAME), Type.STRINGS);
root.commit();
try {
@@ -130,9 +180,9 @@ public class CugValidatorTest extends Ab
@Test
public void testCugPolicyWithDifferentName() throws Exception {
- node.setNames(JcrConstants.JCR_MIXINTYPES, MIX_REP_CUG_MIXIN);
- NodeUtil cug = node.addChild("anotherName", NT_REP_CUG_POLICY);
- cug.setStrings(REP_PRINCIPAL_NAMES, EveryonePrincipal.NAME);
+ node.setProperty(JcrConstants.JCR_MIXINTYPES,
ImmutableList.of(MIX_REP_CUG_MIXIN), Type.NAMES);
+ Tree cug = TreeUtil.addChild(node, "anotherName", NT_REP_CUG_POLICY);
+ cug.setProperty(REP_PRINCIPAL_NAMES,
ImmutableList.of(EveryonePrincipal.NAME), Type.STRINGS);
try {
root.commit();
fail();
@@ -167,4 +217,21 @@ public class CugValidatorTest extends Ab
ntTemplate.getNodeDefinitionTemplates().add(ndt);
ntMgr.registerNodeType(ntTemplate, true);
}
+
+ @Test
+ public void testJcrNodeTypesOutsideOfSystemIsValidated() throws Exception {
+ Tree n = TreeUtil.addChild(node, JCR_NODE_TYPES, NT_OAK_UNSTRUCTURED);
+ Tree cug = TreeUtil.addChild(n, REP_CUG_POLICY, NT_REP_CUG_POLICY);
+ cug.setProperty(REP_PRINCIPAL_NAMES,
ImmutableList.of(EveryonePrincipal.NAME), Type.STRINGS);
+
+ try {
+ root.commit();
+ fail();
+ } catch (CommitFailedException e) {
+ assertTrue(e.isAccessControlViolation());
+ assertEquals(22, e.getCode());
+ } finally {
+ root.refresh();
+ }
+ }
}
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/NestedCugHookTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/NestedCugHookTest.java?rev=1865540&r1=1865539&r2=1865540&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/NestedCugHookTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/NestedCugHookTest.java
Tue Aug 20 15:23:14 2019
@@ -16,28 +16,39 @@
*/
package org.apache.jackrabbit.oak.spi.security.authorization.cug.impl;
-import java.util.Set;
-import javax.jcr.security.AccessControlManager;
-import javax.jcr.security.AccessControlPolicy;
-
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
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.plugins.memory.MemoryChildNodeEntry;
import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugPolicy;
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.AccessControlPolicy;
+import java.util.Collections;
+import java.util.Set;
+
+import static org.apache.jackrabbit.oak.commons.PathUtils.ROOT_PATH;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-import static org.apache.jackrabbit.oak.commons.PathUtils.ROOT_PATH;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
public class NestedCugHookTest extends AbstractCugTest {
@@ -371,4 +382,66 @@ public class NestedCugHookTest extends A
assertNestedCugs(root, getRootProvider(), SUPPORTED_PATH3, true);
assertNestedCugs(root, getRootProvider(), SUPPORTED_PATH2, true,
destPath);
}
+
+ @Test
+ public void testHiddenChildNodeAdded() throws Exception {
+ NestedCugHook nch = new NestedCugHook();
+
+ NodeState before =
getTreeProvider().asNodeState(root.getTree(PathUtils.ROOT_PATH));
+ NodeState after = spy(before);
+
+ NodeState child = mock(NodeState.class);
+ Iterable newCnes = Collections.singleton(new
MemoryChildNodeEntry(":hidden", child));
+ Iterable cnes = Iterables.concat(newCnes,
before.getChildNodeEntries());
+ when(after.getChildNodeEntries()).thenReturn(cnes);
+ when(after.getChildNode(":hidden")).thenReturn(child);
+
+ nch.processCommit(before, after, new CommitInfo("sid", null));
+
+ verify(child, never()).getProperty(anyString());
+ }
+
+ @Test
+ public void testHiddenChildNodeChanged() {
+ NestedCugHook nch = new NestedCugHook();
+
+ NodeState nodeState =
getTreeProvider().asNodeState(root.getTree(PathUtils.ROOT_PATH));
+ NodeState after = spy(nodeState);
+ NodeState before = spy(nodeState);
+
+ NodeState child = mock(NodeState.class);
+ Iterable hidden = Collections.singleton(new
MemoryChildNodeEntry(":hidden", child));
+ Iterable cnes = Iterables.concat(hidden,
nodeState.getChildNodeEntries());
+ when(before.getChildNodeEntries()).thenReturn(cnes);
+ when(before.getChildNode(":hidden")).thenReturn(child);
+
+ NodeState child2 =
when(mock(NodeState.class).exists()).thenReturn(true).getMock();
+ hidden = Collections.singleton(new MemoryChildNodeEntry(":hidden",
child2));
+ cnes = Iterables.concat(hidden, nodeState.getChildNodeEntries());
+ when(after.getChildNodeEntries()).thenReturn(cnes);
+ when(after.getChildNode(":hidden")).thenReturn(child2);
+
+ nch.processCommit(before, after, new CommitInfo("sid", null));
+
+ verify(child, never()).getProperty(anyString());
+ verify(child2, never()).getProperty(anyString());
+ }
+
+ @Test
+ public void testHiddenChildNodeDeleted() {
+ NestedCugHook nch = new NestedCugHook();
+
+ NodeState after =
getTreeProvider().asNodeState(root.getTree(PathUtils.ROOT_PATH));
+ NodeState before = spy(after);
+
+ NodeState child = mock(NodeState.class);
+ Iterable deletedCnes = Collections.singleton(new
MemoryChildNodeEntry(":hidden", child));
+ Iterable cnes = Iterables.concat(deletedCnes,
after.getChildNodeEntries());
+ when(before.getChildNodeEntries()).thenReturn(cnes);
+ when(before.getChildNode(":hidden")).thenReturn(child);
+
+ nch.processCommit(before, after, new CommitInfo("sid", null));
+
+ verify(child, never()).getProperty(anyString());
+ }
}