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 2016/05/11 12:41:21 UTC
svn commit: r1743348 - in
/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external:
TestIdentityProvider.java impl/jmx/SyncMBeanImplTest.java
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