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

Reply via email to