hi julian On 13/05/16 15:13, "Julian Reschke" <[email protected]> wrote:
>...with this change, change? hasn't the test just been introduced with that commit? *confused* >testSyncExternalUsersLastSyncedProperty fails >reliably on my machines, because the two timestamps are the same. ok... > >Maybe there's code missing ensuring that System.currentTimeMillis() >actually changed before doing the operation that's suppose to lead to a >new timestamp? that might well be. i will take a look. thanks for reporting angela > >Best regards, Julian > > >On 2016-05-11 09:12, [email protected] wrote: >> Author: angela >> Date: Wed May 11 07:12:43 2016 >> New Revision: 1743322 >> >> URL: http://svn.apache.org/viewvc?rev=1743322&view=rev >> Log: >> OAK-4264 : Improve testing of SyncMBeanImpl (WIP) >> >> Modified: >> >>jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbi >>t/oak/spi/security/authentication/external/TestIdentityProvider.java >> >>jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbi >>t/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.jav >>a >> >> Modified: >>jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbi >>t/oak/spi/security/authentication/external/TestIdentityProvider.java >> URL: >>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/t >>est/java/org/apache/jackrabbit/oak/spi/security/authentication/external/T >>estIdentityProvider.java?rev=1743322&r1=1743321&r2=1743322&view=diff >> >>========================================================================= >>===== >> --- >>jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbi >>t/oak/spi/security/authentication/external/TestIdentityProvider.java >>(original) >> +++ >>jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbi >>t/oak/spi/security/authentication/external/TestIdentityProvider.java Wed >>May 11 07:12:43 2016 >> @@ -40,14 +40,14 @@ public class TestIdentityProvider implem >> private final Map<String, ExternalUser> externalUsers = new >>HashMap<String, ExternalUser>(); >> >> public TestIdentityProvider() { >> - addGroup(new TestGroup("aa")); >> - addGroup(new TestGroup("aaa")); >> - addGroup(new TestGroup("a").withGroups("aa", "aaa")); >> - addGroup(new TestGroup("b").withGroups("a")); >> - addGroup(new TestGroup("c")); >> - addGroup(new TestGroup("secondGroup")); >> + addGroup(new TestGroup("aa", getName())); >> + addGroup(new TestGroup("aaa", getName())); >> + addGroup(new TestGroup("a", getName()).withGroups("aa", >>"aaa")); >> + addGroup(new TestGroup("b", getName()).withGroups("a")); >> + addGroup(new TestGroup("c", getName())); >> + addGroup(new TestGroup("secondGroup", getName())); >> >> - addUser(new TestUser(ID_TEST_USER) >> + addUser(new TestUser(ID_TEST_USER, getName()) >> .withProperty("name", "Test User") >> .withProperty("profile/name", "Public Name") >> .withProperty("profile/age", 72) >> @@ -55,7 +55,7 @@ public class TestIdentityProvider implem >> .withGroups("a", "b", "c") >> ); >> >> - addUser(new TestUser(ID_SECOND_USER) >> + addUser(new TestUser(ID_SECOND_USER, getName()) >> .withProperty("profile/name", "Second User") >> .withProperty("age", 24) >> .withProperty("col", ImmutableList.of("v1", "v2", >>"v3")) >> @@ -141,17 +141,17 @@ public class TestIdentityProvider implem >> private final Map<String, Object> props = new HashMap<String, >>Object>(); >> >> public TestIdentity() { >> - this("externalId", "principalName"); >> + this("externalId", "principalName", "test"); >> } >> >> public TestIdentity(@Nonnull String userId) { >> - this(userId, userId); >> + this(userId, userId, "test"); >> } >> >> - public TestIdentity(@Nonnull String userId, @Nonnull String >>principalName) { >> + public TestIdentity(@Nonnull String userId, @Nonnull String >>principalName, @Nonnull String idpName) { >> this.userId = userId; >> this.principalName = principalName; >> - id = new ExternalIdentityRef(userId, "test"); >> + id = new ExternalIdentityRef(userId, idpName); >> } >> >> public TestIdentity(@Nonnull ExternalIdentity base) { >> @@ -202,7 +202,7 @@ public class TestIdentityProvider implem >> >> protected TestIdentity withGroups(String ... grps) { >> for (String grp: grps) { >> - groups.add(new ExternalIdentityRef(grp, "test")); >> + groups.add(new ExternalIdentityRef(grp, >>id.getProviderName())); >> } >> return this; >> } >> @@ -210,8 +210,8 @@ public class TestIdentityProvider implem >> >> private static class TestUser extends TestIdentity implements >>ExternalUser { >> >> - private TestUser(String userId) { >> - super(userId); >> + private TestUser(String userId, @Nonnull String idpName) { >> + super(userId, userId, idpName); >> } >> >> public String getPassword() { >> @@ -222,8 +222,8 @@ public class TestIdentityProvider implem >> >> private static class TestGroup extends TestIdentity implements >>ExternalGroup { >> >> - private TestGroup(String userId) { >> - super(userId); >> + private TestGroup(@Nonnull String userId, @Nonnull String >>idpName) { >> + super(userId, userId, idpName); >> } >> >> @Nonnull >> @@ -236,26 +236,14 @@ public class TestIdentityProvider implem >> public static final class ForeignExternalUser extends >>TestIdentityProvider.TestIdentity implements ExternalUser { >> >> public ForeignExternalUser() { >> - super(); >> - } >> - >> - @Nonnull >> - @Override >> - public ExternalIdentityRef getExternalId() { >> - return new ExternalIdentityRef(getId(), >>"AnotherExternalIDP"); >> + super("externalId", "principalName", "AnotherExternalIDP"); >> } >> } >> >> public static final class ForeignExternalGroup extends >>TestIdentityProvider.TestIdentity implements ExternalGroup { >> >> public ForeignExternalGroup() { >> - super(); >> - } >> - >> - @Nonnull >> - @Override >> - public ExternalIdentityRef getExternalId() { >> - return new ExternalIdentityRef(getId(), >>"AnotherExternalIDP"); >> + super("externalId", "principalName", "AnotherExternalIDP"); >> } >> >> @Nonnull >> >> Modified: >>jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbi >>t/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.jav >>a >> URL: >>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/t >>est/java/org/apache/jackrabbit/oak/spi/security/authentication/external/i >>mpl/jmx/SyncMBeanImplTest.java?rev=1743322&r1=1743321&r2=1743322&view=dif >>f >> >>========================================================================= >>===== >> --- >>jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbi >>t/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.jav >>a (original) >> +++ >>jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbi >>t/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.jav >>a Wed May 11 07:12:43 2016 >> @@ -16,23 +16,45 @@ >> */ >> package >>org.apache.jackrabbit.oak.spi.security.authentication.external.impl.jmx; >> >> +import java.util.Iterator; >> import javax.annotation.CheckForNull; >> import javax.annotation.Nonnull; >> import javax.jcr.Repository; >> +import javax.jcr.Session; >> +import javax.jcr.SimpleCredentials; >> >> +import com.google.common.collect.Iterators; >> +import org.apache.jackrabbit.api.JackrabbitSession; >> +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.jcr.Jcr; >> +import >>org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalGr >>oup; >> +import >>org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalId >>entity; >> import >>org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalId >>entityProvider; >> import >>org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalId >>entityProviderManager; >> +import >>org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalId >>entityRef; >> +import >>org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalUs >>er; >> +import >>org.apache.jackrabbit.oak.spi.security.authentication.external.SyncContex >>t; >> import >>org.apache.jackrabbit.oak.spi.security.authentication.external.SyncHandle >>r; >> import >>org.apache.jackrabbit.oak.spi.security.authentication.external.SyncManage >>r; >> +import >>org.apache.jackrabbit.oak.spi.security.authentication.external.SyncResult >>; >> import >>org.apache.jackrabbit.oak.spi.security.authentication.external.TestIdenti >>tyProvider; >> import >>org.apache.jackrabbit.oak.spi.security.authentication.external.basic.Defa >>ultSyncConfig; >> +import >>org.apache.jackrabbit.oak.spi.security.authentication.external.basic.Defa >>ultSyncContext; >> import >>org.apache.jackrabbit.oak.spi.security.authentication.external.impl.Defau >>ltSyncHandler; >> +import org.apache.jackrabbit.oak.spi.security.user.UserConstants; >> +import org.junit.After; >> import org.junit.Before; >> import org.junit.BeforeClass; >> +import org.junit.Ignore; >> import org.junit.Test; >> >> import static org.junit.Assert.assertEquals; >> +import static org.junit.Assert.assertNotNull; >> +import static org.junit.Assert.assertNull; >> +import static org.junit.Assert.assertTrue; >> import static org.junit.Assert.fail; >> >> public class SyncMBeanImplTest { >> @@ -42,10 +64,15 @@ public class SyncMBeanImplTest { >> private static Repository REPOSITORY; >> >> private ExternalIdentityProvider idp; >> + private ExternalIdentityProvider foreignIDP; >> + private DefaultSyncConfig syncConfig; >> + private SyncMBeanImpl syncMBean; >> + >> private SyncManager syncMgr; >> - ExternalIdentityProviderManager idpMgr; >> + private ExternalIdentityProviderManager idpMgr; >> >> - private SyncMBeanImpl syncMBean; >> + private Session session; >> + private UserManager userManager; >> >> @BeforeClass >> public static void beforeClass() { >> @@ -53,15 +80,24 @@ public class SyncMBeanImplTest { >> } >> >> @Before >> - public void before() { >> - // TODO : proper setup >> + public void before() throws Exception { >> idp = new TestIdentityProvider(); >> + foreignIDP = new TestIdentityProvider() { >> + @Nonnull >> + public String getName() { >> + return "anotherIDP"; >> + } >> + >> + }; >> + syncConfig = new DefaultSyncConfig(); >> + syncConfig.user().setMembershipNestingDepth(1); >> + >> syncMgr = new SyncManager() { >> @CheckForNull >> @Override >> public SyncHandler getSyncHandler(@Nonnull String name) { >> if (SYNC_NAME.equals(name)) { >> - return new DefaultSyncHandler(new >>DefaultSyncConfig()); >> + return new DefaultSyncHandler(syncConfig); >> } else { >> return null; >> } >> @@ -79,8 +115,49 @@ public class SyncMBeanImplTest { >> } >> }; >> syncMBean = new SyncMBeanImpl(REPOSITORY, syncMgr, SYNC_NAME, >>idpMgr, idp.getName()); >> + >> + session = REPOSITORY.login(new SimpleCredentials("admin", >>"admin".toCharArray())); >> + if (!(session instanceof JackrabbitSession)) { >> + throw new IllegalStateException(); >> + } else { >> + userManager = ((JackrabbitSession) >>session).getUserManager(); >> + } >> } >> >> + @After >> + public void after() throws Exception { >> + try { >> + session.refresh(false); >> + Iterator<ExternalIdentity> extIdentities = >>Iterators.concat(idp.listGroups(), idp.listUsers()); >> + while (extIdentities.hasNext()) { >> + Authorizable a = >>userManager.getAuthorizable(extIdentities.next().getId()); >> + if (a != null) { >> + a.remove(); >> + } >> + } >> + session.save(); >> + } finally { >> + session.logout(); >> + } >> + } >> + >> + private static void assertResultMessages(@Nonnull String[] >>resultMessages, int expectedSize, @Nonnull String... expectedOperations) >>{ >> + assertEquals(expectedSize, resultMessages.length); >> + for (int i = 0; i < resultMessages.length; i++) { >> + String rm = resultMessages[i]; >> + String op = rm.substring(rm.indexOf(":") + 2, >>rm.indexOf("\",")); >> + assertEquals(expectedOperations[i], op); >> + } >> + } >> + >> + private SyncResult sync(@Nonnull ExternalIdentityProvider idp, >>@Nonnull String id, boolean isGroup) throws Exception { >> + SyncContext ctx = new DefaultSyncContext(syncConfig, idp, >>userManager, session.getValueFactory()); >> + SyncResult res = ctx.sync((isGroup) ? idp.getGroup(id) : >>idp.getUser(id)); >> + session.save(); >> + return res; >> + } >> + >> + >> @Test >> public void testGetSyncHandlerName() { >> assertEquals(SYNC_NAME, syncMBean.getSyncHandlerName()); >> @@ -119,18 +196,245 @@ public class SyncMBeanImplTest { >> } >> } >> >> + /** >> + * test users have never been synced before => result must be NSA >> + */ >> @Test >> - public void testSyncUsers() { >> - // TODO >> + public void testSyncUsersBefore() { >> + String[] userIds = new String[] >>{TestIdentityProvider.ID_TEST_USER, TestIdentityProvider.ID_SECOND_USER}; >> + >> + String[] result = syncMBean.syncUsers(userIds, false); >> + assertResultMessages(result, userIds.length, "nsa", "nsa"); >> + >> + result = syncMBean.syncUsers(userIds, true); >> + assertResultMessages(result, userIds.length, "nsa", "nsa"); >> } >> >> @Test >> - public void testSyncAllUsers() { >> - // TODO >> + public void testSyncUsers() throws Exception { >> + sync(idp, TestIdentityProvider.ID_TEST_USER, false); >> + >> + String[] userIds = new >>String[]{TestIdentityProvider.ID_TEST_USER, >>TestIdentityProvider.ID_SECOND_USER}; >> + String[] result = syncMBean.syncUsers(userIds, false); >> + assertResultMessages(result, userIds.length, "upd", "nsa"); >> + >> + result = syncMBean.syncUsers(userIds, true); >> + assertResultMessages(result, userIds.length, "upd", "nsa"); >> + } >> + >> + @Test >> + public void testSyncUsersAlwaysForcesSync() throws Exception { >> + sync(idp, TestIdentityProvider.ID_TEST_USER, false); >> + >> + String[] userIds = new >>String[]{TestIdentityProvider.ID_TEST_USER, >>TestIdentityProvider.ID_SECOND_USER}; >> + syncConfig.user().setExpirationTime(Long.MAX_VALUE); >> + >> + String[]result = syncMBean.syncUsers(userIds, false); >> + assertResultMessages(result, userIds.length, "upd", "nsa"); >> + } >> + >> + @Test >> + public void testSyncGroups() throws Exception { >> + sync(idp, "a", true); >> + >> + String[] ids = new String[]{"a"}; >> + syncConfig.group().setExpirationTime(Long.MAX_VALUE); >> + >> + // force group sync is true by default => exp time is ignored >> + String[] result = syncMBean.syncUsers(ids, false); >> + assertResultMessages(result, ids.length, "upd"); >> + } >> + >> + @Test >> + public void testSyncUsersPurge() throws Exception { >> + User u = userManager.createUser("thirdUser", null); >> + u.setProperty(DefaultSyncContext.REP_EXTERNAL_ID, >>session.getValueFactory().createValue(new ExternalIdentityRef(u.getID(), >>idp.getName()).getString())); >> + session.save(); >> + >> + String[] ids = new String[]{u.getID()}; >> + String[] result = syncMBean.syncUsers(ids, false); >> + assertResultMessages(result, ids.length, "mis"); >> + assertNotNull(userManager.getAuthorizable(u.getID())); >> + >> + result = syncMBean.syncUsers(ids, true); >> + assertResultMessages(result, ids.length, "del"); >> + assertNull(userManager.getAuthorizable(u.getID())); >> + } >> + >> + @Test >> + public void testSyncUsersNonExisting() { >> + String[] result = syncMBean.syncUsers(new String[] >>{"nonExisting"}, false); >> + assertResultMessages(result, 1, "nsa"); >> + } >> + >> + @Test >> + public void testSyncUsersLocal() { >> + String[] result = syncMBean.syncUsers(new String[] >>{UserConstants.DEFAULT_ANONYMOUS_ID}, false); >> + assertResultMessages(result, 1, "for"); >> + } >> + >> + @Test >> + public void testSyncUsersLocalPurge() throws Exception { >> + String[] result = syncMBean.syncUsers(new String[] >>{UserConstants.DEFAULT_ANONYMOUS_ID}, true); >> + assertResultMessages(result, 1, "for"); >> + >> + >>assertNotNull(userManager.getAuthorizable(UserConstants.DEFAULT_ANONYMOUS >>_ID)); >> } >> >> @Test >> - public void testSyncExternalUsers() { >> + public void testSyncUsersForeign() throws Exception { >> + // sync user from foreign IDP into the repository >> + SyncResult res = sync(foreignIDP, >>TestIdentityProvider.ID_TEST_USER, false); >> + >>assertNotNull(userManager.getAuthorizable(TestIdentityProvider.ID_TEST_US >>ER)); >> + >>assertEquals(foreignIDP.getUser(TestIdentityProvider.ID_TEST_USER).getExt >>ernalId(), res.getIdentity().getExternalIdRef()); >> + >> + // syncUsers with testIDP must detect the foreign status >> + String[] result = syncMBean.syncUsers(new >>String[]{TestIdentityProvider.ID_TEST_USER}, false); >> + assertResultMessages(result, 1, "for"); >> + >>assertNotNull(userManager.getAuthorizable(TestIdentityProvider.ID_TEST_US >>ER)); >> + >> + // same expected with 'purge' set to true >> + result = syncMBean.syncUsers(new String[] >>{TestIdentityProvider.ID_TEST_USER}, true); >> + assertResultMessages(result, 1, "for"); >> + >>assertNotNull(userManager.getAuthorizable(TestIdentityProvider.ID_TEST_US >>ER)); >> + } >> + >> + @Test >> + public void testSyncGroupsForeign() throws Exception { >> + // sync user from foreign IDP into the repository >> + SyncResult res = sync(foreignIDP, "a", true); >> + assertNotNull(userManager.getAuthorizable("a")); >> + assertEquals(foreignIDP.getGroup("a").getExternalId(), >>res.getIdentity().getExternalIdRef()); >> + >> + // syncUsers with testIDP must detect the foreign status >> + String[] result = syncMBean.syncUsers(new String[]{"a"}, >>false); >> + assertResultMessages(result, 1, "for"); >> + assertNotNull(userManager.getAuthorizable("a")); >> + >> + // same expected with 'purge' set to true >> + result = syncMBean.syncUsers(new String[] {"a"}, true); >> + assertResultMessages(result, 1, "for"); >> + assertNotNull(userManager.getAuthorizable("a")); >> + } >> + >> + @Test >> + public void testInitialSyncExternalUsers() throws Exception { >> + ExternalUser externalUser = >>idp.getUser(TestIdentityProvider.ID_TEST_USER); >> + String[] externalId = new String[] >>{externalUser.getExternalId().getString()}; >> + >> + String[] result = syncMBean.syncExternalUsers(externalId); >> + assertResultMessages(result, 1, "add"); >> + >> + User testUser = >>userManager.getAuthorizable(externalUser.getId(), User.class); >> + assertNotNull(testUser); >> + >> + for (ExternalIdentityRef groupRef : >>externalUser.getDeclaredGroups()) { >> + >>assertNotNull(userManager.getAuthorizable(groupRef.getId())); >> + } >> + } >> + >> + @Test >> + public void testInitialSyncExternalUsersNoNesting() throws >>Exception { >> + syncConfig.user().setMembershipNestingDepth(-1); >> + >> + ExternalUser externalUser = >>idp.getUser(TestIdentityProvider.ID_TEST_USER); >> + String[] externalId = new String[] >>{externalUser.getExternalId().getString()}; >> + >> + String[] result = syncMBean.syncExternalUsers(externalId); >> + assertResultMessages(result, 1, "add"); >> + >> + User testUser = >>userManager.getAuthorizable(externalUser.getId(), User.class); >> + assertNotNull(testUser); >> + >> + for (ExternalIdentityRef groupRef : >>externalUser.getDeclaredGroups()) { >> + assertNull(userManager.getAuthorizable(groupRef.getId())); >> + } >> + } >> + >> + @Test >> + public void testSyncExternalUsersLastSyncedProperty() throws >>Exception { >> + ExternalUser externalUser = >>idp.getUser(TestIdentityProvider.ID_TEST_USER); >> + String[] externalId = new >>String[]{externalUser.getExternalId().getString()}; >> + >> + syncMBean.syncExternalUsers(externalId); >> + User testUser = >>userManager.getAuthorizable(externalUser.getId(), User.class); >> + >> + long lastSynced = >>testUser.getProperty(DefaultSyncContext.REP_LAST_SYNCED)[0].getLong(); >> + for (ExternalIdentityRef groupRef : >>externalUser.getDeclaredGroups()) { >> + Group gr = userManager.getAuthorizable(groupRef.getId(), >>Group.class); >> + long groupLastSynced = >>gr.getProperty(DefaultSyncContext.REP_LAST_SYNCED)[0].getLong(); >> + >> + assertTrue(lastSynced == groupLastSynced); >> + } >> + >> + // default value for forceGroup sync is defined to be 'true' >>=> verify result >> + syncMBean.syncExternalUsers(externalId); >> + testUser = userManager.getAuthorizable(externalUser.getId(), >>User.class); >> + long lastSynced2 = >>testUser.getProperty(DefaultSyncContext.REP_LAST_SYNCED)[0].getLong(); >> + >> + assertTrue(lastSynced < lastSynced2); >> + for (ExternalIdentityRef groupRef : >>externalUser.getDeclaredGroups()) { >> + Group gr = userManager.getAuthorizable(groupRef.getId(), >>Group.class); >> + long groupLastSynced = >>gr.getProperty(DefaultSyncContext.REP_LAST_SYNCED)[0].getLong(); >> + >> + assertTrue(lastSynced2 == groupLastSynced); >> + } >> + } >> + >> + @Test >> + public void testInitialSyncExternalGroup() throws Exception { >> + ExternalGroup externalGroup = idp.getGroup("a"); >> + String[] externalId = new String[] >>{externalGroup.getExternalId().getString()}; >> + >> + String[] result = syncMBean.syncExternalUsers(externalId); >> + assertResultMessages(result, 1, "add"); >> + >> + Group aGroup = >>userManager.getAuthorizable(externalGroup.getId(), Group.class); >> + assertNotNull(aGroup); >> + >> + // membership of groups are not synced (unless imposed by >>user-sync with membership depth) >> + for (ExternalIdentityRef groupRef : >>externalGroup.getDeclaredGroups()) { >> + assertNull(userManager.getAuthorizable(groupRef.getId())); >> + } >> + } >> + >> + @Test >> + public void testSyncExternalNonExisting() throws Exception { >> + ExternalIdentityRef ref = new >>ExternalIdentityRef("nonExisting", idp.getName()); >> + >> + String[] result = syncMBean.syncExternalUsers(new >>String[]{ref.getString()}); >> + assertResultMessages(result, 1, "nsi"); >> + } >> + >> + /** >> + * @see <a >>href="https://issues.apache.org/jira/browse/OAK-4346">OAK-4346</a> >> + */ >> + @Ignore("OAK-4346") >> + @Test >> + public void testSyncExternalLocal() throws Exception { >> + ExternalIdentityRef ref = new >>ExternalIdentityRef(UserConstants.DEFAULT_ANONYMOUS_ID, null); >> + >> + String[] result = syncMBean.syncExternalUsers(new >>String[]{ref.getString()}); >> + assertResultMessages(result, 1, "for"); >> + } >> + >> + /** >> + * @see <a >>href="https://issues.apache.org/jira/browse/OAK-4346">OAK-4346</a> >> + */ >> + @Ignore("OAK-4346") >> + @Test >> + public void testSyncExternalForeign() throws Exception { >> + ExternalIdentityRef ref = new >>ExternalIdentityRef(TestIdentityProvider.ID_TEST_USER, "anotherIDP"); >> + >> + String[] result = syncMBean.syncExternalUsers(new >>String[]{ref.getString()}); >> + assertResultMessages(result, 1, "for"); >> + >> + result = syncMBean.syncExternalUsers(new String[] >>{ref.getString()}); >> + assertResultMessages(result, 1, "for"); >> + } >> + >> + @Test >> + public void testSyncAllUsers() { >> // TODO >> } >> >> >> >> > > >-- ><green/>bytes GmbH, Hafenweg 16, D-48155 Münster, Germany >Amtsgericht Münster: HRB5782
