You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2017/03/02 13:45:12 UTC

svn commit: r1785136 - in /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak: security/principal/ security/user/ spi/security/ spi/security/authorization/permission/ spi/security/principal/ spi/security/user/ spi/security/user/actio...

Author: angela
Date: Thu Mar  2 13:45:12 2017
New Revision: 1785136

URL: http://svn.apache.org/viewvc?rev=1785136&view=rev
Log:
OAK-5793 : Improve coverage for security code in oak-core (wip)

Added:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java
      - copied, changed from r1785084, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/AbstractPrincipalProviderTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtilTest.java
Removed:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/AbstractPrincipalProviderTest.java
Modified:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/AbstractCompositeConfigurationTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/AuthorizableTypeTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProviderTest.java

Copied: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java (from r1785084, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/AbstractPrincipalProviderTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java?p2=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java&p1=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/AbstractPrincipalProviderTest.java&r1=1785084&r2=1785136&rev=1785136&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/AbstractPrincipalProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java Thu Mar  2 13:45:12 2017
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.spi.security.principal;
+package org.apache.jackrabbit.oak.security.principal;
 
 import java.security.Principal;
 import java.util.ArrayList;
@@ -32,6 +32,11 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.spi.security.principal.AdminPrincipal;
+import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
+import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
+import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
+import org.apache.jackrabbit.oak.spi.security.principal.SystemUserPrincipal;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java?rev=1785136&r1=1785135&r2=1785136&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java Thu Mar  2 13:45:12 2017
@@ -25,7 +25,6 @@ import com.google.common.collect.Immutab
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.oak.spi.security.principal.AbstractPrincipalProviderTest;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
 import org.junit.Test;

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java?rev=1785136&r1=1785135&r2=1785136&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java Thu Mar  2 13:45:12 2017
@@ -25,7 +25,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.oak.spi.security.principal.AbstractPrincipalProviderTest;
+import org.apache.jackrabbit.oak.security.principal.AbstractPrincipalProviderTest;
 import org.apache.jackrabbit.oak.spi.security.principal.AdminPrincipal;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java?rev=1785136&r1=1785135&r2=1785136&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java Thu Mar  2 13:45:12 2017
@@ -46,7 +46,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.security.ConfigurationBase;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.authentication.SystemSubject;
-import org.apache.jackrabbit.oak.spi.security.principal.AbstractPrincipalProviderTest;
+import org.apache.jackrabbit.oak.security.principal.AbstractPrincipalProviderTest;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/AbstractCompositeConfigurationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/AbstractCompositeConfigurationTest.java?rev=1785136&r1=1785135&r2=1785136&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/AbstractCompositeConfigurationTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/AbstractCompositeConfigurationTest.java Thu Mar  2 13:45:12 2017
@@ -22,6 +22,10 @@ public abstract class AbstractCompositeC
 
     protected CompositeConfiguration<T> compositeConfiguration;
 
+    public T getComposite() {
+        return (T) compositeConfiguration;
+    }
+
     public List<T> getConfigurations() {
         return compositeConfiguration.getConfigurations();
     }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java?rev=1785136&r1=1785135&r2=1785136&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/permission/PermissionsTest.java Thu Mar  2 13:45:12 2017
@@ -21,6 +21,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import javax.annotation.Nonnull;
 import javax.jcr.Session;
 
 import com.google.common.base.Joiner;
@@ -30,15 +31,21 @@ import com.google.common.collect.Immutab
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
+import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.api.JackrabbitSession;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.name.NamespaceConstants;
 import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
 import org.apache.jackrabbit.oak.plugins.version.VersionConstants;
+import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
 import org.apache.jackrabbit.util.Text;
+import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -46,9 +53,10 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.when;
 
 
-public class PermissionsTest extends AbstractSecurityTest {
+public class PermissionsTest {
 
     private static final Map<Long, Set<Long>> TEST = ImmutableMap.<Long, Set<Long>>of(
             Permissions.ADD_NODE|Permissions.ADD_PROPERTY,
@@ -61,6 +69,28 @@ public class PermissionsTest extends Abs
             ImmutableSet.of(Permissions.NAMESPACE_MANAGEMENT,Permissions.WORKSPACE_MANAGEMENT,Permissions.NODE_TYPE_DEFINITION_MANAGEMENT,Permissions.PRIVILEGE_MANAGEMENT)
     );
 
+    private Tree existingTree;
+
+    @Before
+    public void before() {
+        existingTree = Mockito.mock(Tree.class);
+        when(existingTree.exists()).thenReturn(true);
+        when(existingTree.getName()).thenReturn(PathUtils.ROOT_NAME);
+        when(existingTree.getPath()).thenReturn(PathUtils.ROOT_PATH);
+        when(existingTree.hasProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(true);
+        when(existingTree.getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JcrConstants.JCR_PRIMARYTYPE, "rep:root"));
+    }
+
+    private static TreeLocation createNonExistingTreeLocation(@Nonnull String path) {
+        String name = Text.getName(path);
+        Tree nonExistingTree = Mockito.mock(Tree.class);
+        when(nonExistingTree.exists()).thenReturn(false);
+        when(nonExistingTree.getName()).thenReturn(name);
+        when(nonExistingTree.getPath()).thenReturn(path);
+        when(nonExistingTree.getChild(name)).thenReturn(nonExistingTree);
+        return TreeLocation.create(nonExistingTree);
+    }
+
     @Test
     public void testGetNamesSinglePermission() {
         for (long permission : Permissions.aggregates(Permissions.ALL)) {
@@ -304,7 +334,7 @@ public class PermissionsTest extends Abs
 
     @Test
     public void testGetPermissionsFromActions() {
-        TreeLocation tl = TreeLocation.create(root.getTree("/"));
+        TreeLocation tl = TreeLocation.create(existingTree);
         Map<String, Long> map = ImmutableMap.of(
                 Session.ACTION_READ, Permissions.READ_NODE,
                 Session.ACTION_READ + "," + Session.ACTION_REMOVE, Permissions.READ_NODE|Permissions.REMOVE_NODE
@@ -317,7 +347,7 @@ public class PermissionsTest extends Abs
 
     @Test
     public void testGetPermissionsFromPermissionNameActions() {
-        TreeLocation tl = TreeLocation.create(root.getTree("/"));
+        TreeLocation tl = TreeLocation.create(existingTree);
         long permissions = Permissions.NODE_TYPE_MANAGEMENT|Permissions.LOCK_MANAGEMENT|Permissions.VERSION_MANAGEMENT;
         Set<String> names = Permissions.getNames(permissions);
         String jcrActions = Text.implode(names.toArray(new String[names.size()]), ",");
@@ -326,7 +356,7 @@ public class PermissionsTest extends Abs
 
     @Test
     public void testGetPermissionsFromInvalidActions() {
-        TreeLocation tl = TreeLocation.create(root.getTree("/"));
+        TreeLocation tl = TreeLocation.create(existingTree);
         List<String> l = ImmutableList.of(
                 Session.ACTION_READ + ",invalid", "invalid", "invalid," + Session.ACTION_REMOVE
         );
@@ -343,7 +373,7 @@ public class PermissionsTest extends Abs
 
     @Test
     public void testGetPermissionsFromJackrabbitActions() {
-        TreeLocation tl = TreeLocation.create(root.getTree("/"));
+        TreeLocation tl = TreeLocation.create(existingTree);
         Map<String, Long> map = new HashMap<String, Long>();
         map.put(Session.ACTION_ADD_NODE, Permissions.ADD_NODE);
         map.put(JackrabbitSession.ACTION_ADD_PROPERTY, Permissions.ADD_PROPERTY);
@@ -364,7 +394,7 @@ public class PermissionsTest extends Abs
 
     @Test
     public void testGetPermissionsOnAccessControlledNode() {
-        TreeLocation tl = TreeLocation.create(root.getTree("/rep:policy"));
+        TreeLocation tl = createNonExistingTreeLocation(PathUtils.ROOT_PATH + AccessControlConstants.REP_POLICY);
         Map<String, Long> map = new HashMap<String, Long>();
 
         // read -> mapped to read-access-control
@@ -396,22 +426,22 @@ public class PermissionsTest extends Abs
 
     @Test
     public void testActionRead() {
-        TreeLocation treeLocation = TreeLocation.create(root.getTree("/"));
+        TreeLocation treeLocation = TreeLocation.create(existingTree);
         assertNull(treeLocation.getProperty());
         assertEquals(Permissions.READ_NODE, Permissions.getPermissions(Session.ACTION_READ, treeLocation, false));
         assertEquals(Permissions.READ_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_READ, treeLocation, true));
 
-        TreeLocation nonExistingTree = TreeLocation.create(root.getTree("/nonExisting"));
+        TreeLocation nonExistingTree = createNonExistingTreeLocation("/nonExisting");
         assertNull(nonExistingTree.getProperty());
         assertEquals(Permissions.READ, Permissions.getPermissions(Session.ACTION_READ, nonExistingTree, false));
         assertEquals(Permissions.READ_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_READ, nonExistingTree, true));
 
-        TreeLocation nonExistingProp = TreeLocation.create(root, "/nonExisting");
+        TreeLocation nonExistingProp = createNonExistingTreeLocation("/nonExisting").getChild("nonExisting");
         assertNull(nonExistingProp.getProperty());
         assertEquals(Permissions.READ, Permissions.getPermissions(Session.ACTION_READ, nonExistingProp, false));
         assertEquals(Permissions.READ_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_READ, nonExistingProp, true));
 
-        TreeLocation existingProp = TreeLocation.create(root, "/jcr:primaryType");
+        TreeLocation existingProp = treeLocation.getChild(JcrConstants.JCR_PRIMARYTYPE);
         assertNotNull(existingProp.getProperty());
         assertEquals(Permissions.READ_PROPERTY, Permissions.getPermissions(Session.ACTION_READ, existingProp, false));
         assertEquals(Permissions.READ_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_READ, existingProp, true));
@@ -419,22 +449,22 @@ public class PermissionsTest extends Abs
 
     @Test
     public void testActionSetProperty() {
-        TreeLocation treeLocation = TreeLocation.create(root.getTree("/"));
+        TreeLocation treeLocation = TreeLocation.create(existingTree);
         assertNull(treeLocation.getProperty());
         assertEquals(Permissions.ADD_PROPERTY, Permissions.getPermissions(Session.ACTION_SET_PROPERTY, treeLocation, false));
         assertEquals(Permissions.MODIFY_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_SET_PROPERTY, treeLocation, true));
 
-        TreeLocation nonExistingTree = TreeLocation.create(root.getTree("/nonExisting"));
+        TreeLocation nonExistingTree = createNonExistingTreeLocation("/nonExisting");
         assertNull(nonExistingTree.getProperty());
         assertEquals(Permissions.ADD_PROPERTY, Permissions.getPermissions(Session.ACTION_SET_PROPERTY, nonExistingTree, false));
         assertEquals(Permissions.MODIFY_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_SET_PROPERTY, nonExistingTree, true));
 
-        TreeLocation nonExistingProp = TreeLocation.create(root, "/nonExisting");
+        TreeLocation nonExistingProp = createNonExistingTreeLocation("/nonExisting").getChild("nonExisting");
         assertNull(nonExistingProp.getProperty());
         assertEquals(Permissions.ADD_PROPERTY, Permissions.getPermissions(Session.ACTION_SET_PROPERTY, nonExistingProp, false));
         assertEquals(Permissions.MODIFY_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_SET_PROPERTY, nonExistingProp, true));
 
-        TreeLocation existingProp = TreeLocation.create(root, "/jcr:primaryType");
+        TreeLocation existingProp = treeLocation.getChild(JcrConstants.JCR_PRIMARYTYPE);
         assertNotNull(existingProp.getProperty());
         assertEquals(Permissions.MODIFY_PROPERTY, Permissions.getPermissions(Session.ACTION_SET_PROPERTY, existingProp, false));
         assertEquals(Permissions.MODIFY_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_SET_PROPERTY, existingProp, true));
@@ -442,22 +472,22 @@ public class PermissionsTest extends Abs
 
     @Test
     public void testActionRemove() {
-        TreeLocation treeLocation = TreeLocation.create(root.getTree("/"));
+        TreeLocation treeLocation = TreeLocation.create(existingTree);
         assertNull(treeLocation.getProperty());
         assertEquals(Permissions.REMOVE_NODE, Permissions.getPermissions(Session.ACTION_REMOVE, treeLocation, false));
         assertEquals(Permissions.MODIFY_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_REMOVE, treeLocation, true));
 
-        TreeLocation nonExistingTree = TreeLocation.create(root.getTree("/nonExisting"));
+        TreeLocation nonExistingTree = createNonExistingTreeLocation("/nonExisting");
         assertNull(nonExistingTree.getProperty());
         assertEquals(Permissions.REMOVE, Permissions.getPermissions(Session.ACTION_REMOVE, nonExistingTree, false));
         assertEquals(Permissions.MODIFY_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_REMOVE, nonExistingTree, true));
 
-        TreeLocation nonExistingProp = TreeLocation.create(root, "/nonExisting");
+        TreeLocation nonExistingProp = createNonExistingTreeLocation("/nonExisting").getChild("nonExisting");
         assertNull(nonExistingProp.getProperty());
         assertEquals(Permissions.REMOVE, Permissions.getPermissions(Session.ACTION_REMOVE, nonExistingProp, false));
         assertEquals(Permissions.MODIFY_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_REMOVE, nonExistingProp, true));
 
-        TreeLocation existingProp = TreeLocation.create(root, "/jcr:primaryType");
+        TreeLocation existingProp = treeLocation.getChild(JcrConstants.JCR_PRIMARYTYPE);
         assertNotNull(existingProp.getProperty());
         assertEquals(Permissions.REMOVE_PROPERTY, Permissions.getPermissions(Session.ACTION_REMOVE, existingProp, false));
         assertEquals(Permissions.MODIFY_ACCESS_CONTROL, Permissions.getPermissions(Session.ACTION_SET_PROPERTY, existingProp, true));

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java?rev=1785136&r1=1785135&r2=1785136&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java Thu Mar  2 13:45:12 2017
@@ -29,20 +29,32 @@ import javax.annotation.Nullable;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterators;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.spi.security.AbstractCompositeConfigurationTest;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationBase;
+import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
+import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
-public class CompositePrincipalConfigurationTest extends AbstractSecurityTest {
+public class CompositePrincipalConfigurationTest extends AbstractCompositeConfigurationTest<PrincipalConfiguration> {
 
-    private CompositePrincipalConfiguration cpConfig = new CompositePrincipalConfiguration();
+    private final Root root = Mockito.mock(Root.class);
+
+    private PrincipalConfiguration principalConfigurationMock;
+
+    @Before
+    public void before() {
+        compositeConfiguration = new CompositePrincipalConfiguration();
+        principalConfigurationMock = Mockito.mock(PrincipalConfiguration.class);
+        Mockito.when(principalConfigurationMock.getParameters()).thenReturn(ConfigurationParameters.EMPTY);
+    }
 
     private static void assertSize(int expected, CompositePrincipalProvider pp) throws Exception {
         Field f = CompositePrincipalProvider.class.getDeclaredField("providers");
@@ -54,13 +66,13 @@ public class CompositePrincipalConfigura
 
     @Test
     public void testEmptyGetPrincipalManager() {
-        PrincipalManager pMgr = cpConfig.getPrincipalManager(root, NamePathMapper.DEFAULT);
+        PrincipalManager pMgr = getComposite().getPrincipalManager(root, NamePathMapper.DEFAULT);
         assertTrue(pMgr instanceof PrincipalManagerImpl);
     }
 
     @Test
     public void testEmptyGetProvider() throws Exception {
-        PrincipalProvider pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        PrincipalProvider pp = getComposite().getPrincipalProvider(root, NamePathMapper.DEFAULT);
         assertFalse(pp instanceof CompositePrincipalProvider);
         assertSame(EmptyPrincipalProvider.INSTANCE, pp);
     }
@@ -68,18 +80,18 @@ public class CompositePrincipalConfigura
     @Test
     public void testSingleGetPrincipalManager() {
         PrincipalConfiguration testConfig = new TestPrincipalConfiguration();
-        cpConfig.addConfiguration(testConfig);
+        addConfiguration(testConfig);
 
-        PrincipalManager pMgr = cpConfig.getPrincipalManager(root, NamePathMapper.DEFAULT);
+        PrincipalManager pMgr = getComposite().getPrincipalManager(root, NamePathMapper.DEFAULT);
         assertTrue(pMgr instanceof PrincipalManagerImpl);
     }
 
     @Test
     public void testSingleGetProvider() throws Exception {
         PrincipalConfiguration testConfig = new TestPrincipalConfiguration();
-        cpConfig.addConfiguration(testConfig);
+        addConfiguration(testConfig);
 
-        PrincipalProvider pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        PrincipalProvider pp = getComposite().getPrincipalProvider(root, NamePathMapper.DEFAULT);
 
         assertFalse(pp instanceof CompositePrincipalProvider);
         assertEquals(testConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT).getClass(), pp.getClass());
@@ -87,19 +99,19 @@ public class CompositePrincipalConfigura
 
     @Test
     public void testMultipleGetPrincipalManager() {
-        cpConfig.addConfiguration(getSecurityProvider().getConfiguration(PrincipalConfiguration.class));
-        cpConfig.addConfiguration(new TestPrincipalConfiguration());
+        addConfiguration(principalConfigurationMock);
+        addConfiguration(new TestPrincipalConfiguration());
 
-        PrincipalManager pMgr = cpConfig.getPrincipalManager(root, NamePathMapper.DEFAULT);
+        PrincipalManager pMgr = getComposite().getPrincipalManager(root, NamePathMapper.DEFAULT);
         assertTrue(pMgr instanceof PrincipalManagerImpl);
     }
 
     @Test
     public void testMultipleGetPrincipalProvider() throws Exception {
-        cpConfig.addConfiguration(getSecurityProvider().getConfiguration(PrincipalConfiguration.class));
-        cpConfig.addConfiguration(new TestPrincipalConfiguration());
+        addConfiguration(principalConfigurationMock);
+        addConfiguration(new TestPrincipalConfiguration());
 
-        PrincipalProvider pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        PrincipalProvider pp = getComposite().getPrincipalProvider(root, NamePathMapper.DEFAULT);
 
         assertTrue(pp instanceof CompositePrincipalProvider);
         assertSize(2, (CompositePrincipalProvider) pp);
@@ -107,21 +119,21 @@ public class CompositePrincipalConfigura
 
     @Test
     public void testWithEmptyPrincipalProvider() throws Exception {
-        cpConfig.addConfiguration(new TestEmptyConfiguration());
-        PrincipalProvider pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        addConfiguration(new TestEmptyConfiguration());
+        PrincipalProvider pp = getComposite().getPrincipalProvider(root, NamePathMapper.DEFAULT);
         assertSame(EmptyPrincipalProvider.INSTANCE, pp);
 
-        cpConfig.addConfiguration(new TestPrincipalConfiguration());
-        pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        addConfiguration(new TestPrincipalConfiguration());
+        pp = getComposite().getPrincipalProvider(root, NamePathMapper.DEFAULT);
         assertFalse(pp instanceof CompositePrincipalProvider);
 
-        cpConfig.addConfiguration(getSecurityProvider().getConfiguration(PrincipalConfiguration.class));
-        pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        addConfiguration(principalConfigurationMock);
+        pp = getComposite().getPrincipalProvider(root, NamePathMapper.DEFAULT);
         assertTrue(pp instanceof CompositePrincipalProvider);
         assertSize(2, (CompositePrincipalProvider) pp);
 
-        cpConfig.addConfiguration(new TestEmptyConfiguration());
-        pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        addConfiguration(new TestEmptyConfiguration());
+        pp = getComposite().getPrincipalProvider(root, NamePathMapper.DEFAULT);
         assertTrue(pp instanceof CompositePrincipalProvider);
         assertSize(2, (CompositePrincipalProvider) pp);
     }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/AuthorizableTypeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/AuthorizableTypeTest.java?rev=1785136&r1=1785135&r2=1785136&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/AuthorizableTypeTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/AuthorizableTypeTest.java Thu Mar  2 13:45:12 2017
@@ -16,42 +16,31 @@
  */
 package org.apache.jackrabbit.oak.spi.security.user;
 
-import java.util.UUID;
-
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
-public class AuthorizableTypeTest extends AbstractSecurityTest {
+public class AuthorizableTypeTest {
 
+    private User user;
     private Group gr;
 
-    @Override
-    public void before() throws Exception {
-        super.before();
-
-        gr = getUserManager(root).createGroup("gr" + UUID.randomUUID().toString());
-        root.commit();
-    }
-
-    @Override
-    public void after() throws Exception {
-        try {
-            if (gr != null) {
-                gr.remove();
-                root.commit();
-            }
-        } finally {
-            super.after();
-        }
+    @Before
+    public void before() {
+        user = Mockito.mock(User.class);
+        Mockito.when(user.isGroup()).thenReturn(false);
+
+        gr = Mockito.mock(Group.class);
+        Mockito.when(gr.isGroup()).thenReturn(true);
     }
 
     @Test
@@ -69,14 +58,14 @@ public class AuthorizableTypeTest extend
     @Test
     public void testIsTypeUser() throws Exception {
         assertFalse(AuthorizableType.USER.isType(null));
-        assertTrue(AuthorizableType.USER.isType(getTestUser()));
+        assertTrue(AuthorizableType.USER.isType(user));
         assertFalse(AuthorizableType.USER.isType(gr));
     }
 
     @Test
     public void testIsTypeGroup() throws Exception {
         assertFalse(AuthorizableType.GROUP.isType(null));
-        assertFalse(AuthorizableType.GROUP.isType(getTestUser()));
+        assertFalse(AuthorizableType.GROUP.isType(user));
         assertTrue(AuthorizableType.GROUP.isType(gr));
 
     }
@@ -84,7 +73,7 @@ public class AuthorizableTypeTest extend
     @Test
     public void testIsTypeAuthorizable() throws Exception {
         assertFalse(AuthorizableType.AUTHORIZABLE.isType(null));
-        assertTrue(AuthorizableType.AUTHORIZABLE.isType(getTestUser()));
+        assertTrue(AuthorizableType.AUTHORIZABLE.isType(user));
         assertTrue(AuthorizableType.AUTHORIZABLE.isType(gr));
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProviderTest.java?rev=1785136&r1=1785135&r2=1785136&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProviderTest.java Thu Mar  2 13:45:12 2017
@@ -20,15 +20,28 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
 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.junit.Test;
+import org.mockito.Mockito;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
 
-public class DefaultAuthorizableActionProviderTest extends AbstractSecurityTest {
+public class DefaultAuthorizableActionProviderTest {
+
+    private SecurityProvider getSecurityProvider() {
+        AuthorizationConfiguration ac = Mockito.mock(AuthorizationConfiguration.class);
+        when(ac.getParameters()).thenReturn(ConfigurationParameters.EMPTY);
+
+        SecurityProvider sp = Mockito.mock(SecurityProvider.class);
+        when(sp.getConfiguration(AuthorizationConfiguration.class)).thenReturn(ac);
+
+        return sp;
+    }
 
     @Test
     public void testNoConfig() {

Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtilTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtilTest.java?rev=1785136&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtilTest.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtilTest.java Thu Mar  2 13:45:12 2017
@@ -0,0 +1,392 @@
+/*
+ * 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.user.util;
+
+import java.util.List;
+import java.util.Map;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.AuthorizableTypeException;
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.api.security.user.User;
+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.spi.security.ConfigurationParameters;
+import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
+import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
+import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
+import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+
+public class UserUtilTest {
+
+    @Nonnull
+    private static Tree createTree(@CheckForNull String ntName) {
+        return createTree(ntName, null, null);
+    }
+
+    @Nonnull
+    private static Tree createTree(@CheckForNull String ntName, @CheckForNull String id) {
+        return createTree(ntName, id, null);
+    }
+
+    @Nonnull
+    private static Tree createTree(@CheckForNull String ntName, @CheckForNull String id, @CheckForNull String nodeName) {
+        Tree t = Mockito.mock(Tree.class);
+        if (ntName != null) {
+            when(t.getProperty(JcrConstants.JCR_PRIMARYTYPE)).thenReturn(PropertyStates.createProperty(JcrConstants.JCR_PRIMARYTYPE, ntName, Type.NAME));
+        }
+        if (id != null) {
+            when(t.getProperty(UserConstants.REP_AUTHORIZABLE_ID)).thenReturn(PropertyStates.createProperty(UserConstants.REP_AUTHORIZABLE_ID, id, Type.STRING));
+        }
+        if (nodeName != null) {
+            when(t.getName()).thenReturn(nodeName);
+        }
+        return t;
+    }
+
+    @Test
+    public void testIsAdmin() {
+        String altAdminId = "test";
+        ConfigurationParameters config = ConfigurationParameters.of(UserConstants.PARAM_ADMIN_ID, altAdminId);
+
+        assertTrue(UserUtil.isAdmin(ConfigurationParameters.EMPTY, UserConstants.DEFAULT_ADMIN_ID));
+        assertFalse(UserUtil.isAdmin(ConfigurationParameters.EMPTY, altAdminId));
+
+        assertFalse(UserUtil.isAdmin(config, UserConstants.DEFAULT_ADMIN_ID));
+        assertTrue(UserUtil.isAdmin(config, altAdminId));
+    }
+
+    @Test
+    public void testGetAdminId() {
+        String altAdminId = "test";
+        ConfigurationParameters config = ConfigurationParameters.of(UserConstants.PARAM_ADMIN_ID, altAdminId);
+
+        assertEquals(UserConstants.DEFAULT_ADMIN_ID, UserUtil.getAdminId(ConfigurationParameters.EMPTY));
+        assertEquals(altAdminId, UserUtil.getAdminId(config));
+    }
+
+    @Test
+    public void testGetAnonymousId() {
+        String altAnonymousId = "test";
+        ConfigurationParameters config = ConfigurationParameters.of(UserConstants.PARAM_ANONYMOUS_ID, altAnonymousId);
+
+        assertEquals(UserConstants.DEFAULT_ANONYMOUS_ID, UserUtil.getAnonymousId(ConfigurationParameters.EMPTY));
+        assertEquals(altAnonymousId, UserUtil.getAnonymousId(config));
+    }
+
+    @Test
+    public void testIsTypeNullTree() {
+        assertFalse(UserUtil.isType(null, AuthorizableType.GROUP));
+        assertFalse(UserUtil.isType(null, AuthorizableType.USER));
+        assertFalse(UserUtil.isType(null, AuthorizableType.AUTHORIZABLE));
+    }
+
+    @Test
+    public void testIsTypeGroupFromTree() {
+        Map<String, Boolean> test = ImmutableMap.of(
+                UserConstants.NT_REP_GROUP, true,
+                UserConstants.NT_REP_USER, false,
+                UserConstants.NT_REP_SYSTEM_USER, false,
+                UserConstants.NT_REP_AUTHORIZABLE, false,
+                JcrConstants.NT_FILE, false
+        );
+
+        for (String key : test.keySet()) {
+            assertEquals(test.get(key), UserUtil.isType(createTree(key), AuthorizableType.GROUP));
+        }
+    }
+
+    @Test
+    public void testIsTypeUserFromTree() {
+        Map<String, Boolean> test = ImmutableMap.of(
+                UserConstants.NT_REP_GROUP, false,
+                UserConstants.NT_REP_USER, true,
+                UserConstants.NT_REP_SYSTEM_USER, true,
+                UserConstants.NT_REP_AUTHORIZABLE, false,
+                JcrConstants.NT_FILE, false
+        );
+
+        for (String ntName : test.keySet()) {
+            boolean expected = test.get(ntName);
+            assertEquals(ntName, expected, UserUtil.isType(createTree(ntName), AuthorizableType.USER));
+        }
+    }
+
+    @Test
+    public void testIsTypeAuthorizableFromTree() {
+        Map<String, Boolean> test = ImmutableMap.of(
+                UserConstants.NT_REP_GROUP, true,
+                UserConstants.NT_REP_USER, true,
+                UserConstants.NT_REP_SYSTEM_USER, true,
+                UserConstants.NT_REP_AUTHORIZABLE, false,
+                JcrConstants.NT_FILE, false
+        );
+
+        for (String ntName : test.keySet()) {
+            boolean expected = test.get(ntName);
+            assertEquals(ntName, expected, UserUtil.isType(createTree(ntName), AuthorizableType.AUTHORIZABLE));
+        }
+    }
+
+    @Test
+    public void testGetTypeFromTree() {
+        Map<String, AuthorizableType> test = ImmutableMap.of(
+                UserConstants.NT_REP_GROUP, AuthorizableType.GROUP,
+                UserConstants.NT_REP_USER, AuthorizableType.USER,
+                UserConstants.NT_REP_SYSTEM_USER, AuthorizableType.USER
+        );
+
+        for (String ntName : test.keySet()) {
+            AuthorizableType expected = test.get(ntName);
+            assertEquals(ntName, expected, UserUtil.getType(createTree(ntName)));
+        }
+    }
+
+    @Test
+    public void testGetTypeFromTree2() {
+        List<String> test = ImmutableList.of(
+                UserConstants.NT_REP_AUTHORIZABLE,
+                JcrConstants.NT_FILE
+        );
+
+        for (String ntName : test) {
+            assertNull(UserUtil.getType(createTree(ntName)));
+        }
+    }
+
+    @Test
+    public void testGetTypeFromNt() {
+        assertEquals(AuthorizableType.GROUP, UserUtil.getType(UserConstants.NT_REP_GROUP));
+        assertEquals(AuthorizableType.USER, UserUtil.getType(UserConstants.NT_REP_USER));
+        assertEquals(AuthorizableType.USER, UserUtil.getType(UserConstants.NT_REP_SYSTEM_USER));
+    }
+
+    @Test
+    public void testGetTypeFromNtReturnsNull() {
+        // abstract primary type 'rep:Authorizable'
+        assertNull(UserUtil.getType(UserConstants.NT_REP_AUTHORIZABLE));
+
+        // another node type name
+        assertNull(UserUtil.getType(JcrConstants.NT_FILE));
+
+        // null or empty name
+        assertNull(UserUtil.getType((String) null));
+        assertNull(UserUtil.getType(""));
+    }
+
+    @Test
+    public void testIsSystemUserNullTree() {
+        assertFalse(UserUtil.isSystemUser(null));
+    }
+
+    @Test
+    public void testIsSystemUser() {
+        Map<String, Boolean> test = ImmutableMap.of(
+                UserConstants.NT_REP_GROUP, false,
+                UserConstants.NT_REP_USER, false,
+                UserConstants.NT_REP_SYSTEM_USER, true,
+                UserConstants.NT_REP_AUTHORIZABLE, false,
+                JcrConstants.NT_FILE, false
+        );
+
+        for (String ntName : test.keySet()) {
+            boolean expected = test.get(ntName);
+            assertEquals(ntName, expected, UserUtil.isSystemUser(createTree(ntName)));
+        }
+    }
+
+    @Test
+    public void testGetAuthorizableRootPathDefault() {
+        assertEquals(UserConstants.DEFAULT_GROUP_PATH, UserUtil.getAuthorizableRootPath(ConfigurationParameters.EMPTY, AuthorizableType.GROUP));
+        assertEquals(UserConstants.DEFAULT_USER_PATH, UserUtil.getAuthorizableRootPath(ConfigurationParameters.EMPTY, AuthorizableType.USER));
+        assertEquals("/rep:security/rep:authorizables", UserUtil.getAuthorizableRootPath(ConfigurationParameters.EMPTY, AuthorizableType.AUTHORIZABLE));
+    }
+
+    @Test
+    public void testGetAuthorizableRootPath() {
+        ConfigurationParameters config = ConfigurationParameters.of(
+                UserConstants.PARAM_GROUP_PATH, "/groups",
+                UserConstants.PARAM_USER_PATH, "/users");
+
+        assertEquals("/groups", UserUtil.getAuthorizableRootPath(config, AuthorizableType.GROUP));
+        assertEquals("/users", UserUtil.getAuthorizableRootPath(config, AuthorizableType.USER));
+        assertEquals("/", UserUtil.getAuthorizableRootPath(config, AuthorizableType.AUTHORIZABLE));
+    }
+
+    @Test
+    public void testGetAuthorizableRootPathNullType() {
+        assertNull(UserUtil.getAuthorizableRootPath(ConfigurationParameters.EMPTY, null));
+    }
+
+
+    @Test(expected = NullPointerException.class)
+    public void testGetAuthorizableIdNullTree() {
+        UserUtil.getAuthorizableId(null);
+    }
+
+    @Test
+    public void testGetAuthorizableId() {
+        List<String> test = ImmutableList.of(UserConstants.NT_REP_GROUP, UserConstants.NT_REP_SYSTEM_USER, UserConstants.NT_REP_USER);
+        for (String ntName : test) {
+            assertEquals("id", UserUtil.getAuthorizableId(createTree(ntName, "id")));
+        }
+    }
+
+    @Test
+    public void testGetAuthorizableIdFallback() {
+        List<String> test = ImmutableList.of(UserConstants.NT_REP_GROUP, UserConstants.NT_REP_SYSTEM_USER, UserConstants.NT_REP_USER);
+        for (String ntName : test) {
+            assertEquals("nName", UserUtil.getAuthorizableId(createTree(ntName, null, "nName")));
+        }
+    }
+
+    @Test
+    public void testGetAuthorizableIdNoAuthorizableType() {
+        List<String> test = ImmutableList.of(UserConstants.NT_REP_AUTHORIZABLE, JcrConstants.NT_UNSTRUCTURED);
+        for (String ntName : test) {
+            assertNull(UserUtil.getAuthorizableId(createTree(ntName, "id")));
+        }
+    }
+
+    @Test
+    public void testGetAuthorizableIdWithType() {
+        Map<AuthorizableType, String[]> test = ImmutableMap.<AuthorizableType,String[]>builder().
+                put(AuthorizableType.USER, new String[] {UserConstants.NT_REP_USER, UserConstants.NT_REP_SYSTEM_USER}).
+                put(AuthorizableType.AUTHORIZABLE, new String[] {UserConstants.NT_REP_USER, UserConstants.NT_REP_SYSTEM_USER, UserConstants.NT_REP_GROUP}).
+                put(AuthorizableType.GROUP, new String[] {UserConstants.NT_REP_GROUP}).build();
+
+        for (AuthorizableType type : test.keySet()) {
+            for (String ntName : test.get(type)) {
+                assertEquals("id", UserUtil.getAuthorizableId(createTree(ntName, "id"), type));
+            }
+        }
+    }
+
+    @Test
+    public void testGetAuthorizableIdWithTypeFallback() {
+        Map<AuthorizableType, String[]> test = ImmutableMap.<AuthorizableType,String[]>builder().
+                put(AuthorizableType.USER, new String[]{UserConstants.NT_REP_USER, UserConstants.NT_REP_SYSTEM_USER}).
+                put(AuthorizableType.AUTHORIZABLE, new String[]{UserConstants.NT_REP_USER, UserConstants.NT_REP_SYSTEM_USER, UserConstants.NT_REP_GROUP}).
+                put(AuthorizableType.GROUP, new String[]{UserConstants.NT_REP_GROUP}).build();
+
+        for (AuthorizableType type : test.keySet()) {
+            for (String ntName : test.get(type)) {
+                assertEquals("nodeName", UserUtil.getAuthorizableId(createTree(ntName, null, "nodeName"), type));
+            }
+        }
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testGetAuthorizableIdTypeNotGroup() {
+        UserUtil.getAuthorizableId(createTree(UserConstants.NT_REP_USER, "id"), AuthorizableType.GROUP);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testGetAuthorizableIdWithTypeNotGrou() {
+        UserUtil.getAuthorizableId(createTree(UserConstants.NT_REP_SYSTEM_USER, "id"), AuthorizableType.GROUP);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testGetAuthorizableIdWithTypeNotUser() {
+        UserUtil.getAuthorizableId(createTree(UserConstants.NT_REP_GROUP, "id"), AuthorizableType.USER);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testGetAuthorizableIdTypeNotUser() {
+        UserUtil.getAuthorizableId(createTree(JcrConstants.NT_UNSTRUCTURED, "id"), AuthorizableType.USER);
+    }
+
+    @Test
+    public void testCastNullAuthorizable() throws Exception {
+        assertNull(UserUtil.castAuthorizable(null, null));
+        assertNull(UserUtil.castAuthorizable(null, User.class));
+        assertNull(UserUtil.castAuthorizable(null, Group.class));
+    }
+
+    @Test(expected = AuthorizableTypeException.class)
+    public void testCastNullClass() throws Exception {
+        UserUtil.castAuthorizable(Mockito.mock(User.class), null);
+    }
+
+    @Test(expected = AuthorizableTypeException.class)
+    public void testCastUserToGroup() throws Exception {
+        UserUtil.castAuthorizable(Mockito.mock(User.class), Group.class);
+    }
+
+    @Test(expected = AuthorizableTypeException.class)
+    public void testCastGroupToUser() throws Exception {
+        UserUtil.castAuthorizable(Mockito.mock(Group.class), User.class);
+    }
+
+    @Test(expected = AuthorizableTypeException.class)
+    public void testCastAuthorizableToUser() throws Exception {
+        UserUtil.castAuthorizable(Mockito.mock(Authorizable.class), User.class);
+    }
+
+    @Test(expected = AuthorizableTypeException.class)
+    public void testCastAuthorizableToGroup() throws Exception {
+        UserUtil.castAuthorizable(Mockito.mock(Authorizable.class), Group.class);
+    }
+
+    @Test
+    public void testCastUserToUser() throws Exception {
+        UserUtil.castAuthorizable(Mockito.mock(User.class), User.class);
+    }
+
+    @Test
+    public void testCastUserToAuthorizable() throws Exception {
+        UserUtil.castAuthorizable(Mockito.mock(User.class), Authorizable.class);
+    }
+
+    @Test
+    public void testCastGroupToGroup() throws Exception {
+        UserUtil.castAuthorizable(Mockito.mock(Group.class), Group.class);
+    }
+
+    @Test
+    public void testCastGroupToAuthorizable() throws Exception {
+        UserUtil.castAuthorizable(Mockito.mock(Group.class), Authorizable.class);
+    }
+
+    @Test
+    public void testGetImportBehavior() {
+        Map<ConfigurationParameters, Integer> testMap = ImmutableMap.of(
+                ConfigurationParameters.EMPTY, ImportBehavior.IGNORE,
+                ConfigurationParameters.of(ProtectedItemImporter.PARAM_IMPORT_BEHAVIOR, "anyString"), ImportBehavior.ABORT,
+                ConfigurationParameters.of(ProtectedItemImporter.PARAM_IMPORT_BEHAVIOR, ImportBehavior.BESTEFFORT), ImportBehavior.ABORT,
+                ConfigurationParameters.of(ProtectedItemImporter.PARAM_IMPORT_BEHAVIOR, ImportBehavior.NAME_BESTEFFORT), ImportBehavior.BESTEFFORT
+        );
+
+        for (Map.Entry<ConfigurationParameters, Integer> entry : testMap.entrySet()) {
+            assertEquals(entry.getValue().intValue(), UserUtil.getImportBehavior(entry.getKey()));
+        }
+    }
+}
\ No newline at end of file