Author: angela
Date: Wed May 11 12:41:21 2016
New Revision: 1743348

URL: http://svn.apache.org/viewvc?rev=1743348&view=rev
Log:
OAK-4264 : Improve testing of SyncMBeanImpl (WIP)

Modified:
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestIdentityProvider.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestIdentityProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestIdentityProvider.java?rev=1743348&r1=1743347&r2=1743348&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestIdentityProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestIdentityProvider.java
 Wed May 11 12:41:21 2016
@@ -81,6 +81,10 @@ public class TestIdentityProvider implem
 
     @Override
     public ExternalIdentity getIdentity(@Nonnull ExternalIdentityRef ref) 
throws ExternalIdentityException {
+        if (ID_EXCEPTION.equals(ref.getId())) {
+            throw new ExternalIdentityException(ID_EXCEPTION);
+        }
+
         ExternalIdentity id = externalUsers.get(ref.getId().toLowerCase());
         if (id != null) {
             return id;

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java?rev=1743348&r1=1743347&r2=1743348&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java
 Wed May 11 12:41:21 2016
@@ -30,6 +30,7 @@ import javax.jcr.SimpleCredentials;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Sets;
 import org.apache.jackrabbit.api.JackrabbitSession;
@@ -40,6 +41,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.oak.jcr.Jcr;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalGroup;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentity;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityException;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityProvider;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityProviderManager;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityRef;
@@ -204,6 +206,21 @@ public class SyncMBeanImplTest {
         return res;
     }
 
+    private Map<String, String> getExpectedUserResult(String expectedOp, 
boolean includeGroups) throws ExternalIdentityException {
+        Map<String, String> expected = new HashMap<>();
+        Iterator<ExternalUser> it = idp.listUsers();
+        while (it.hasNext()) {
+            ExternalUser eu = it.next();
+            expected.put(eu.getId(), expectedOp);
+            if (includeGroups) {
+                for (ExternalIdentityRef ref : eu.getDeclaredGroups()) {
+                    expected.put(ref.getId(), expectedOp);
+                }
+            }
+        }
+        return expected;
+    }
+
 
     @Test
     public void testGetSyncHandlerName() {
@@ -370,6 +387,20 @@ public class SyncMBeanImplTest {
         assertNotNull(userManager.getAuthorizable("a"));
     }
 
+    /**
+     * @see <a 
href="https://issues.apache.org/jira/browse/OAK-4360";>OAK-4360</a>
+     */
+    @Ignore("OAK-4360")
+    @Test
+    public void testSyncUserException() throws Exception {
+        User u = userManager.createUser(TestIdentityProvider.ID_EXCEPTION, 
null);
+        u.setProperty(DefaultSyncContext.REP_EXTERNAL_ID, 
session.getValueFactory().createValue(new 
ExternalIdentityRef(TestIdentityProvider.ID_EXCEPTION, 
idp.getName()).getString()));
+        session.save();
+
+        String[] result = syncMBean.syncUsers(new 
String[]{TestIdentityProvider.ID_EXCEPTION}, false);
+        assertResultMessages(result, 1, "ERR");
+    }
+
     @Test
     public void testInitialSyncExternalUsers() throws Exception {
         ExternalUser externalUser = 
idp.getUser(TestIdentityProvider.ID_TEST_USER);
@@ -486,6 +517,12 @@ public class SyncMBeanImplTest {
         assertResultMessages(result, 1, "for");
     }
 
+    @Test
+    public void testSyncExternalUserException() throws Exception {
+        String[] result = syncMBean.syncExternalUsers(new String[] 
{TestIdentityProvider.ID_EXCEPTION});
+        assertResultMessages(result, 1, "ERR");
+    }
+
     /**
      * test users have never been synced before => result must be empty
      */
@@ -503,16 +540,7 @@ public class SyncMBeanImplTest {
         // verify effect of syncAllUsers
         String[] result = syncMBean.syncAllUsers(false);
 
-        Map<String, String> expected = new HashMap();
-        Iterator<ExternalUser> it = idp.listUsers();
-        while (it.hasNext()) {
-            ExternalUser eu = it.next();
-            expected.put(eu.getId(), "upd");
-            for (ExternalIdentityRef ref : eu.getDeclaredGroups()) {
-                expected.put(ref.getId(), "upd");
-            }
-        }
-
+        Map<String, String> expected = getExpectedUserResult("upd", true);
         assertResultMessages(result, expected.size(), 
expected.values().toArray(new String[expected.size()]));
         for (String id : expected.keySet()) {
             ExternalIdentity ei = idp.getUser(id);
@@ -598,17 +626,126 @@ public class SyncMBeanImplTest {
     }
 
     @Test
-    public void testSyncAllExternalUsers() {
-        // TODO
+    public void testSyncAllUsersException() throws Exception {
+        User u = userManager.createUser(TestIdentityProvider.ID_EXCEPTION, 
null);
+        u.setProperty(DefaultSyncContext.REP_EXTERNAL_ID, 
session.getValueFactory().createValue(new 
ExternalIdentityRef(TestIdentityProvider.ID_EXCEPTION, 
idp.getName()).getString()));
+        session.save();
+
+        String[] result = syncMBean.syncAllUsers(false);
+        assertResultMessages(result, 1, "ERR");
+
+        result = syncMBean.syncAllUsers(true);
+        assertResultMessages(result, 1, "ERR");
     }
 
     @Test
-    public void testListOrphanedUsers() {
-        // TODO
+    public void testInitialSyncAllExternalUsers() throws Exception {
+        String[] result = syncMBean.syncAllExternalUsers();
+
+        Map<String, String> expected = getExpectedUserResult("add", false);
+        assertResultMessages(result, expected.size(), 
expected.values().toArray(new String[expected.size()]));
+        for (String id : expected.keySet()) {
+            ExternalIdentity ei = idp.getUser(id);
+            if (ei == null) {
+                ei = idp.getGroup(id);
+            }
+            assertSync(ei, userManager);
+        }
     }
 
     @Test
-    public void testPurgeOrphanedUsers() {
-        // TODO
+    public void testSyncAllExternalUsersAgain() throws Exception {
+        syncMBean.syncAllExternalUsers();
+
+        // sync again
+        String[] result = syncMBean.syncAllExternalUsers();
+
+        // verify result
+        Map<String, String> expected = getExpectedUserResult("upd", false);
+        assertResultMessages(result, expected.size(), 
expected.values().toArray(new String[expected.size()]));
+        for (String id : expected.keySet()) {
+            ExternalIdentity ei = idp.getUser(id);
+            if (ei == null) {
+                ei = idp.getGroup(id);
+            }
+            assertSync(ei, userManager);
+        }
+    }
+
+    @Test
+    public void testListOrphanedUsers() throws Exception {
+        syncMBean.syncAllExternalUsers();
+
+        String[] result = syncMBean.listOrphanedUsers();
+        assertEquals(0, result.length);
+
+        sync(new TestIdentityProvider.TestUser("thirdUser", idp.getName()), 
idp);
+        sync(new TestIdentityProvider.TestGroup("g", idp.getName()), idp);
+
+        result = syncMBean.listOrphanedUsers();
+        assertEquals(2, result.length);
+        assertEquals(ImmutableSet.of("thirdUser", "g"), 
ImmutableSet.copyOf(result));
+    }
+
+    @Test
+    public void testListOrphanedUsersForeign() throws Exception {
+        sync(foreignIDP, "a", true);
+        sync(foreignIDP, TestIdentityProvider.ID_TEST_USER, false);
+
+        String[] result = syncMBean.listOrphanedUsers();
+        assertEquals(0, result.length);
+    }
+
+    @Test
+    public void testListOrphanedUsersException () throws Exception {
+        User u = userManager.createUser(TestIdentityProvider.ID_EXCEPTION, 
null);
+        u.setProperty(DefaultSyncContext.REP_EXTERNAL_ID, 
session.getValueFactory().createValue(new 
ExternalIdentityRef(TestIdentityProvider.ID_EXCEPTION, 
idp.getName()).getString()));
+        session.save();
+
+        String[] result = syncMBean.listOrphanedUsers();
+        // TODO: verify if this really the intended result!
+        assertEquals(0, result.length);
+    }
+
+    @Test
+    public void testPurgeOrphanedUsersNoPurge() {
+        syncMBean.syncAllExternalUsers();
+
+        String[] result = syncMBean.purgeOrphanedUsers();
+        assertEquals(0, result.length);
+    }
+
+    @Test
+    public void testPurgeOrphanedUsers() throws Exception {
+        syncMBean.syncAllExternalUsers();
+
+        sync(new TestIdentityProvider.TestUser("thirdUser", idp.getName()), 
idp);
+        sync(new TestIdentityProvider.TestGroup("g", idp.getName()), idp);
+
+        String[] result = syncMBean.purgeOrphanedUsers();
+        assertResultMessages(result, 2, "del", "del");
+
+        assertNull(userManager.getAuthorizable("thirdUser"));
+        assertNull(userManager.getAuthorizable("g"));
+    }
+
+    @Test
+    public void testPurgeOrphanedUsersForeign() throws Exception {
+        sync(foreignIDP, "a", true);
+        sync(foreignIDP, TestIdentityProvider.ID_TEST_USER, false);
+
+        String[] result = syncMBean.purgeOrphanedUsers();
+        assertEquals(0, result.length);
+    }
+
+    @Test
+    public void testPurgeOrphanedUsersException() throws Exception {
+        User u = userManager.createUser(TestIdentityProvider.ID_EXCEPTION, 
null);
+        u.setProperty(DefaultSyncContext.REP_EXTERNAL_ID, 
session.getValueFactory().createValue(new 
ExternalIdentityRef(TestIdentityProvider.ID_EXCEPTION, 
idp.getName()).getString()));
+        session.save();
+
+        String[] result = syncMBean.purgeOrphanedUsers();
+        // TODO: verify if this really the intended result!
+        assertEquals(0, result.length);
     }
 }
\ No newline at end of file


Reply via email to