Author: stillalex
Date: Mon Jun 11 13:56:52 2018
New Revision: 1833329

URL: http://svn.apache.org/viewvc?rev=1833329&view=rev
Log:
OAK-6027 UserImporter.Impersonators : use Oak path to user instead of ID
 - merged r1790006 into 1.6 branch



Modified:
    jackrabbit/oak/branches/1.6/   (props changed)
    jackrabbit/oak/branches/1.6/oak-core/   (props changed)
    
jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserImporter.java
    
jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserImporterTest.java

Propchange: jackrabbit/oak/branches/1.6/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 11 13:56:52 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785283,1785652,1785838,1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789534,1789925,1789940,1789987,1790382,1790502-1790503,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799924,1800244,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119,1801675,1802260,1802262,1802286,1802548,1802905,1802934,1802938
 
,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808022,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809253,1809255-1809256,1809289,1809745,1811071-1811072,1811155,1811380,1811655,1811952,1811963,1811986,1813192,1814189,1814332,1814397,1815201,1815438,1815926,1817326,1817919,1817987-1817988,1817990,1818038,1818042,1818056,1818124,1818554,1818576,1818645,1819048,1819050,1821325,1821358,1821495,1821516,1822850,1823172,1825471,1826237,1826338,1826532,1826640,1826932,1826957,1827472,1827486,1827977,1829569,1829987,1830019,1830160,1830748,1831374,1832379,1832535
+/jackrabbit/oak/trunk:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785283,1785652,1785838,1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789534,1789925,1789940,1789987,1790006,1790382,1790502-1790503,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799924,1800244,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119,1801675,1802260,1802262,1802286,1802548,1802905,1802934
 
,1802938,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808022,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809253,1809255-1809256,1809289,1809745,1811071-1811072,1811155,1811380,1811655,1811952,1811963,1811986,1813192,1814189,1814332,1814397,1815201,1815438,1815926,1817326,1817919,1817987-1817988,1817990,1818038,1818042,1818056,1818124,1818554,1818576,1818645,1819048,1819050,1821325,1821358,1821495,1821516,1822850,1823172,1825471,1826237,1826338,1826532,1826640,1826932,1826957,1827472,1827486,1827977,1829569,1829987,1830019,1830160,1830748,1831374,1832379,1832535
 /jackrabbit/trunk:1345480

Propchange: jackrabbit/oak/branches/1.6/oak-core/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 11 13:56:52 2018
@@ -1,5 +1,5 @@
 /jackrabbit/oak/branches/1.0/oak-core:1665962
 /jackrabbit/oak/trunk/oak-blob-plugins:1819950
-/jackrabbit/oak/trunk/oak-core:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785283,1785652,1785838,1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789441,1789534,1789925,1789940,1789987,1790382,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799861,1799924,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119,1801675,1802260,1802262,1802286,1802548,1802905,1802934,180293
 
8,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809253,1809255-1809256,1811380,1811952,1811963,1811986,1814332,1818645,1821325,1821358,1821516,1830160
+/jackrabbit/oak/trunk/oak-core:1781068,1781075,1781248,1781386,1781846,1781907,1782000,1782029,1782196,1782447,1782476,1782770,1782945,1782966,1782973,1782990,1783061,1783066,1783089,1783104-1783105,1783110,1783619,1783720,1783731,1783733,1783738,1783742,1783773,1783855,1783891,1784023,1784034,1784130,1784162,1784251,1784401,1784551,1784574,1784689,1785095,1785108,1785283,1785652,1785838,1785917,1785919,1785946,1786122,1787074,1787145,1787151,1787217,1787425,1788056,1788378,1788387-1788389,1788463,1788476,1788850,1789056,1789441,1789534,1789925,1789940,1789987,1790006,1790382,1792049,1792463,1792742,1792746,1793013,1793088,1793618,1793627,1793644,1794393,1794417,1794683,1795138,1795314,1795330,1795475,1795488,1795491,1795502,1795594,1795613,1795618,1796144,1796230,1796239,1796274,1796278,1796988,1797378,1798035,1798832,1798834,1799219,1799389,1799393,1799861,1799924,1800269,1800606,1800613,1800974,1801011,1801013,1801118-1801119,1801675,1802260,1802262,1802286,1802548,1802905,180293
 
4,1802938,1802973,1803026,1803247-1803249,1803951,1803953-1803955,1804437,1805851-1805852,1806668,1807308,1807688,1808125,1808128,1808142,1808240,1808246,1809024,1809026,1809131,1809163,1809253,1809255-1809256,1811380,1811952,1811963,1811986,1814332,1818645,1821325,1821358,1821516,1830160
 
/jackrabbit/oak/trunk/oak-store-document:1809866,1811575,1811702,1811709,1811823,1811835,1811931,1812739,1812750,1812753,1814407,1814499,1814579,1815450,1815466,1815940,1816436,1817379,1818301,1818303,1818903,1818906,1819421,1820199,1820661,1821130,1821477,1821487,1823163,1823169,1824962,1825442,1825470
 /jackrabbit/trunk/oak-core:1345480

Modified: 
jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserImporter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserImporter.java?rev=1833329&r1=1833328&r2=1833329&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserImporter.java
 (original)
+++ 
jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserImporter.java
 Mon Jun 11 13:56:52 2018
@@ -297,7 +297,7 @@ class UserImporter implements ProtectedP
                 // since impersonators may be imported later on, postpone 
processing
                 // to the end.
                 // see -> process References
-                referenceTracker.processedReference(new 
Impersonators(a.getID(), propInfo.getTextValues()));
+                referenceTracker.processedReference(new 
Impersonators(parent.getPath(), propInfo.getTextValues()));
                 return true;
 
             } else if (REP_DISABLED.equals(propName)) {
@@ -665,20 +665,20 @@ class UserImporter implements ProtectedP
      */
     private final class Impersonators {
 
-        private final String userId;
+        private final String userPath;
         private final Set<String> principalNames = new HashSet<String>();
 
-        private Impersonators(String userId, List<? extends TextValue> values) 
{
-            this.userId = userId;
+        private Impersonators(String userPath, List<? extends TextValue> 
values) {
+            this.userPath = userPath;
             for (TextValue v : values) {
                 principalNames.add(v.getString());
             }
         }
 
         private void process() throws RepositoryException {
-            Authorizable a = userManager.getAuthorizable(userId);
+            Authorizable a = userManager.getAuthorizableByOakPath(userPath);
             if (a == null || a.isGroup()) {
-                throw new RepositoryException(userId + " does not represent a 
valid user.");
+                throw new RepositoryException(userPath + " does not represent 
a valid user.");
             }
 
             Impersonation imp = checkNotNull(((User) a).getImpersonation());

Modified: 
jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserImporterTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserImporterTest.java?rev=1833329&r1=1833328&r2=1833329&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserImporterTest.java
 (original)
+++ 
jackrabbit/oak/branches/1.6/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserImporterTest.java
 Mon Jun 11 13:56:52 2018
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.oak.security.user;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import javax.annotation.Nonnull;
 import javax.jcr.ImportUUIDBehavior;
@@ -29,6 +30,7 @@ import javax.jcr.nodetype.PropertyDefini
 import javax.jcr.nodetype.PropertyDefinitionTemplate;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.api.JackrabbitSession;
@@ -38,19 +40,23 @@ 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.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
 import org.apache.jackrabbit.oak.spi.security.user.action.AuthorizableAction;
 import 
org.apache.jackrabbit.oak.spi.security.user.action.AuthorizableActionProvider;
 import org.apache.jackrabbit.oak.spi.security.user.action.GroupAction;
+import org.apache.jackrabbit.oak.spi.security.user.util.PasswordUtil;
 import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
 import org.apache.jackrabbit.oak.spi.xml.PropInfo;
 import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
@@ -63,6 +69,7 @@ import org.mockito.Mockito;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.when;
@@ -70,6 +77,7 @@ import static org.mockito.Mockito.when;
 public class UserImporterTest extends AbstractSecurityTest implements 
UserConstants {
 
     private static final String TEST_USER_ID = "uid";
+    private static final String TEST_GROUP_ID = "gid";
 
     private TestAction testAction;
     AuthorizableActionProvider actionProvider = new 
AuthorizableActionProvider() {
@@ -79,8 +87,11 @@ public class UserImporterTest extends Ab
             return (testAction == null) ? 
ImmutableList.<AuthorizableAction>of() : ImmutableList.of(testAction);
         }
     };
+
     private User testUser;
 
+    private ReferenceChangeTracker refTracker = new ReferenceChangeTracker();
+
     UserImporter importer;
 
     @Override
@@ -94,6 +105,7 @@ public class UserImporterTest extends Ab
     @Override
     public void after() throws Exception {
         try {
+            refTracker.clear();
             root.refresh();
         } finally {
             super.after();
@@ -136,7 +148,7 @@ public class UserImporterTest extends Ab
         if (createAction) {
             testAction = new TestAction();
         }
-        return importer.init(mockJackrabbitSession(), root, 
getNamePathMapper(), isWorkspaceImport(), 
ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING, new 
ReferenceChangeTracker(), getSecurityProvider());
+        return importer.init(mockJackrabbitSession(), root, 
getNamePathMapper(), isWorkspaceImport(), 
ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING, refTracker, 
getSecurityProvider());
     }
 
     private Tree createUserTree() {
@@ -153,26 +165,32 @@ public class UserImporterTest extends Ab
         NodeUtil node = new NodeUtil(root.getTree(PathUtils.ROOT_PATH));
         NodeUtil groupRoot = 
node.getOrAddTree(PathUtils.relativize(PathUtils.ROOT_PATH, groupPath), 
NT_REP_AUTHORIZABLE_FOLDER);
 
-        return groupRoot.addChild("testGroup", NT_REP_GROUP).getTree();
-    }
-
-    private PropInfo createPropInfo(@Nonnull String name, final String value) {
-        return new PropInfo(name, PropertyType.STRING, new TextValue() {
-            @Override
-            public String getString() {
-                return value;
-            }
-
-            @Override
-            public Value getValue(int targetType) throws RepositoryException {
-                return getValueFactory(root).createValue(value, targetType);
-            }
-
-            @Override
-            public void dispose() {
-                //nop
-            }
-        });
+        Tree groupTree = groupRoot.addChild("testGroup", 
NT_REP_GROUP).getTree();
+        groupTree.setProperty(JcrConstants.JCR_UUID, new UserProvider(root, 
ConfigurationParameters.EMPTY).getContentID(TEST_GROUP_ID));
+        return groupTree;
+    }
+
+    private PropInfo createPropInfo(@Nonnull String name, final String... 
values) {
+        List<TextValue> txtValues = Lists.newArrayList();
+        for (final String v : values) {
+            txtValues.add(new TextValue() {
+                @Override
+                public String getString() {
+                    return v;
+                }
+
+                @Override
+                public Value getValue(int targetType) throws 
RepositoryException {
+                    return getValueFactory(root).createValue(v, targetType);
+                }
+
+                @Override
+                public void dispose() {
+                    //nop
+                }
+            });
+        }
+        return new PropInfo(name, PropertyType.STRING, txtValues);
     }
 
     private PropertyDefinition mockPropertyDefinition(@Nonnull String 
declaringNt, boolean mv) throws Exception {
@@ -275,6 +293,166 @@ public class UserImporterTest extends Ab
         assertTrue(importer.handlePropInfo(userTree, 
createPropInfo(REP_AUTHORIZABLE_ID, TEST_USER_ID), 
mockPropertyDefinition(NT_REP_USER, false)));
     }
 
+    @Test
+    public void testHandlePrincipalName() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertTrue(importer.handlePropInfo(userTree, 
createPropInfo(REP_PRINCIPAL_NAME, "principalName"), 
mockPropertyDefinition(NT_REP_AUTHORIZABLE, false)));
+        assertEquals("principalName", 
userTree.getProperty(REP_PRINCIPAL_NAME).getValue(Type.STRING));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testHandleEmptyPrincipalName() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        importer.handlePropInfo(userTree, createPropInfo(REP_PRINCIPAL_NAME, 
""), mockPropertyDefinition(NT_REP_AUTHORIZABLE, false));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testHandleEveryonePrincipalNameOnUser() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        importer.handlePropInfo(userTree, createPropInfo(REP_PRINCIPAL_NAME, 
EveryonePrincipal.NAME), mockPropertyDefinition(NT_REP_AUTHORIZABLE, false));
+    }
+
+    @Test
+    public void testHandlePrincipalNameMvPropertyDef() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo(REP_PRINCIPAL_NAME, "principalName"), 
mockPropertyDefinition(NT_REP_AUTHORIZABLE, true)));
+        assertNull(userTree.getProperty(REP_PRINCIPAL_NAME));
+    }
+
+    @Test
+    public void testHandlePrincipalNameOtherDeclNtDef() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo(REP_PRINCIPAL_NAME, "principalName"), 
mockPropertyDefinition(NT_REP_AUTHORIZABLE_FOLDER, false)));
+        assertNull(userTree.getProperty(REP_PRINCIPAL_NAME));
+    }
+
+    @Test
+    public void testHandlePassword() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        String pwHash = PasswordUtil.buildPasswordHash("pw");
+        assertTrue(importer.handlePropInfo(userTree, 
createPropInfo(REP_PASSWORD, pwHash), mockPropertyDefinition(NT_REP_USER, 
false)));
+        assertEquals(pwHash, 
userTree.getProperty(REP_PASSWORD).getValue(Type.STRING));
+    }
+
+    @Test
+    public void testHandlePasswordOnSystemUser() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        userTree.setProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_SYSTEM_USER, 
Type.NAME);
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo(REP_PASSWORD, PasswordUtil.buildPasswordHash("pw")), 
mockPropertyDefinition(NT_REP_USER, false)));
+    }
+
+    @Test
+    public void testHandlePasswordOnGroup() throws Exception {
+        init();
+        Tree groupTree = createGroupTree();
+        assertFalse(importer.handlePropInfo(groupTree, 
createPropInfo(REP_PASSWORD, PasswordUtil.buildPasswordHash("pw")), 
mockPropertyDefinition(NT_REP_USER, false)));
+    }
+
+    @Test
+    public void testHandlePasswordMvPropertyDef() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo(REP_PASSWORD, PasswordUtil.buildPasswordHash("pw")), 
mockPropertyDefinition(NT_REP_USER, true)));
+        assertNull(userTree.getProperty(REP_PASSWORD));
+    }
+
+    @Test
+    public void testHandlePasswordOtherDeclNtDef() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo(REP_PASSWORD, PasswordUtil.buildPasswordHash("pw")), 
mockPropertyDefinition(NT_REP_AUTHORIZABLE, false)));
+        assertNull(userTree.getProperty(REP_PASSWORD));
+    }
+
+    @Test
+    public void testHandleImpersonators() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertTrue(importer.handlePropInfo(userTree, 
createPropInfo(REP_IMPERSONATORS, "impersonator1", "impersonator2"), 
mockPropertyDefinition(NT_REP_USER, true)));
+        // writing is postponed though and the ref-tracker must not be empty
+        assertNull(userTree.getProperty(REP_IMPERSONATORS));
+        assertTrue(refTracker.getProcessedReferences().hasNext());
+    }
+
+    @Test
+    public void testHandleImpersonatorsOnGroup() throws Exception {
+        init();
+        Tree groupTree = createGroupTree();
+        assertFalse(importer.handlePropInfo(groupTree, 
createPropInfo(REP_IMPERSONATORS, "impersonator1"), 
mockPropertyDefinition(NT_REP_USER, true)));
+    }
+
+    @Test
+    public void testHandleImpersonatorsSinglePropertyDef() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo(REP_IMPERSONATORS, "impersonator1"), 
mockPropertyDefinition(NT_REP_USER, false)));
+        assertNull(userTree.getProperty(REP_IMPERSONATORS));
+    }
+
+    @Test
+    public void testHandleImpersonatorsOtherDeclNtDef() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo(REP_IMPERSONATORS, "impersonator1"), 
mockPropertyDefinition(NT_REP_AUTHORIZABLE, true)));
+        assertNull(userTree.getProperty(REP_IMPERSONATORS));
+    }
+
+    @Test
+    public void testHandleDisabled() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertTrue(importer.handlePropInfo(userTree, 
createPropInfo(REP_DISABLED, "disabled"), mockPropertyDefinition(NT_REP_USER, 
false)));
+        PropertyState property = userTree.getProperty(REP_DISABLED);
+        assertNotNull(property);
+        assertEquals("disabled", property.getValue(Type.STRING));
+    }
+
+    @Test
+    public void testHandleDisabledOnGroup() throws Exception {
+        init();
+        Tree groupTree = createGroupTree();
+        assertFalse(importer.handlePropInfo(groupTree, 
createPropInfo(REP_DISABLED, "disabled"), mockPropertyDefinition(NT_REP_USER, 
false)));
+        assertNull(groupTree.getProperty(REP_DISABLED));
+    }
+
+    @Test(expected = RepositoryException.class)
+    public void testHandleDisabledMvProperty() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        importer.handlePropInfo(userTree, createPropInfo(REP_DISABLED, 
"disabled", "disabled"), mockPropertyDefinition(NT_REP_USER, false));
+    }
+
+    @Test
+    public void testHandleDisabledMvPropertyDef() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo(REP_DISABLED, "disabled"), mockPropertyDefinition(NT_REP_USER, 
true)));
+        assertNull(userTree.getProperty(REP_DISABLED));
+    }
+
+    @Test
+    public void testHandleDisabledOtherDeclNtDef() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo(REP_DISABLED, "disabled"), 
mockPropertyDefinition(NT_REP_AUTHORIZABLE, false)));
+        assertNull(userTree.getProperty(REP_DISABLED));
+    }
+
+    @Test
+    public void testHandleUnknownProperty() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertFalse(importer.handlePropInfo(userTree, 
createPropInfo("unknownProperty", "value"), 
mockPropertyDefinition(NodeTypeConstants.NT_OAK_UNSTRUCTURED, false)));
+        assertNull(userTree.getProperty("unknownProperty"));
+    }
+
     //--------------------------------------------------< processReferences 
>---
 
     @Test(expected = IllegalStateException.class)
@@ -282,6 +460,32 @@ public class UserImporterTest extends Ab
         importer.processReferences();
     }
 
+    @Test
+    public void testProcessUnknownImpersonators() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertTrue(importer.handlePropInfo(userTree, 
createPropInfo(REP_IMPERSONATORS, "impersonator1", "impersonator2"), 
mockPropertyDefinition(NT_REP_USER, true)));
+
+        importer.processReferences();
+
+        // default importbehavior == IGNORE
+        PropertyState impersonators = userTree.getProperty(REP_IMPERSONATORS);
+        assertNull(impersonators);
+    }
+
+    @Test
+    public void testProcessImpersonators() throws Exception {
+        init();
+        Tree userTree = createUserTree();
+        assertTrue(importer.handlePropInfo(userTree, 
createPropInfo(REP_IMPERSONATORS, testUser.getPrincipal().getName()), 
mockPropertyDefinition(NT_REP_USER, true)));
+
+        importer.processReferences();
+
+        PropertyState impersonators = userTree.getProperty(REP_IMPERSONATORS);
+        assertNotNull(impersonators);
+        assertEquals(ImmutableList.of(testUser.getPrincipal().getName()), 
impersonators.getValue(Type.STRINGS));
+    }
+
     //------------------------------------------------< propertiesCompleted 
>---
 
     @Test


Reply via email to