Repository: usergrid Updated Branches: refs/heads/1.x e0be7dda2 -> 14d6cdf97
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7324b5a8/stack/tools/src/test/java/org/apache/usergrid/tools/ExportImportAdminsTest.java ---------------------------------------------------------------------- diff --git a/stack/tools/src/test/java/org/apache/usergrid/tools/ExportImportAdminsTest.java b/stack/tools/src/test/java/org/apache/usergrid/tools/ExportImportAdminsTest.java index 9cce040..260c7ce 100644 --- a/stack/tools/src/test/java/org/apache/usergrid/tools/ExportImportAdminsTest.java +++ b/stack/tools/src/test/java/org/apache/usergrid/tools/ExportImportAdminsTest.java @@ -52,6 +52,7 @@ public class ExportImportAdminsTest { @ClassRule public static ServiceITSetup setup = new ServiceITSetupImpl( ServiceITSuite.cassandraResource ); + @org.junit.Test public void testExportUserAndOrg() throws Exception { http://git-wip-us.apache.org/repos/asf/usergrid/blob/7324b5a8/stack/tools/src/test/java/org/apache/usergrid/tools/MockUserOrgManager.java ---------------------------------------------------------------------- diff --git a/stack/tools/src/test/java/org/apache/usergrid/tools/MockUserOrgManager.java b/stack/tools/src/test/java/org/apache/usergrid/tools/MockUserOrgManager.java new file mode 100644 index 0000000..e8323e4 --- /dev/null +++ b/stack/tools/src/test/java/org/apache/usergrid/tools/MockUserOrgManager.java @@ -0,0 +1,215 @@ +package org.apache.usergrid.tools; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.SetMultimap; +import rx.*; + +import java.util.*; +import java.util.Observable; + +/** + * Mock manager implementation for mockTesting. + */ +class MockUserOrgManager implements UserOrgInterface { + + SetMultimap<Org, OrgUser> usersByOrg = HashMultimap.create(); + + SetMultimap<OrgUser, Org> orgsByUser = HashMultimap.create(); + + SetMultimap<Org, UUID> appsByOrg = HashMultimap.create(); + + Map<UUID, Org> orgsById = new HashMap<UUID, Org>(); + + Map<UUID, OrgUser> usersById = new HashMap<UUID, OrgUser>(); + + /** represents "index" of users by username */ + Map<String, OrgUser> usersByUsername = new HashMap<String, OrgUser>(); + + /** represents "index" of users by email */ + Map<String, OrgUser> usersByEmail = new HashMap<String, OrgUser>(); + + + /** + * Populate manager with orgs and users. + * Will create a number of orgs and a duplicate for each. + * + * @param numOrgs One half of the number of orgs to create. + */ + public MockUserOrgManager(int numOrgs) throws Exception { + + for (int i = 0; i < numOrgs; i++) { + + // create a pair of duplicate orgs + + // org1 is the original and the oldest one, with capital letters + Org org1 = new Org( UUID.randomUUID(), "OrG_" + i ); + orgsById.put( org1.getId(), org1 ); + pause(100); + + // org2 is duplicate, the newest one + Org org2 = new Org( UUID.randomUUID(), "org_" + i ); + orgsById.put( org2.getId(), org2 ); + + // create three users A, B and C + + String base = "user_" + i; + OrgUser usera = new OrgUser( UUID.randomUUID(), base + "_a", base + "[email protected]" ); + OrgUser userb = new OrgUser( UUID.randomUUID(), base + "_b", base + "[email protected]" ); + OrgUser userc = new OrgUser( UUID.randomUUID(), base + "_c", base + "[email protected]" ); + + // org1 gets users A and B + addUserToOrg( usera, org1 ); + addUserToOrg( userb, org1 ); + + // org2 gets users C + addUserToOrg( userc, org2 ); + + // add some apps to the orgs, org1 gets 2 apps + addAppToOrg( UUID.randomUUID(), org1 ); + addAppToOrg( UUID.randomUUID(), org1 ); + + // org2 gets 1 app + addAppToOrg( UUID.randomUUID(), org2 ); + } + } + + void pause( long timems ) { + try { Thread.sleep( timems ); } catch (InterruptedException intentionallyIgnored) {} + } + + @Override + public rx.Observable<Org> getOrgs() throws Exception { + return rx.Observable.from( usersByOrg.keySet() ); + } + + @Override + public rx.Observable<OrgUser> getUsers() throws Exception { + return rx.Observable.from( orgsByUser.keySet() ); + } + + @Override + public Set<Org> getUsersOrgs(OrgUser user) { + return orgsByUser.get( user ); + } + + @Override + public void removeOrg(Org keeper, Org duplicate) throws Exception { + Set<OrgUser> users = usersByOrg.get( duplicate ); + for (OrgUser user : users) { + Set<Org> userOrgs = orgsByUser.get( user ); + userOrgs.remove( duplicate ); + } + usersByOrg.removeAll( duplicate ); + } + + @Override + public Set<OrgUser> getOrgUsers(Org org) throws Exception { + return usersByOrg.get( org ); + } + + @Override + public void removeUserFromOrg(OrgUser user, Org org) throws Exception { + + Set<OrgUser> orgUsers = usersByOrg.get( org ); + orgUsers.remove( user ); + + Set<Org> usersOrgs = orgsByUser.get( user ); + usersOrgs.remove( org ); + } + + @Override + public void addUserToOrg(OrgUser user, Org org) throws Exception { + + Set<Org> usersOrgs = orgsByUser.get( user ); + usersOrgs.add( org ); + + Set<OrgUser> orgsUsers = usersByOrg.get( org ); + orgsUsers.add( user ); + } + + @Override + public Set<UUID> getOrgApps(Org org) { + return appsByOrg.get( org ); + } + + @Override + public void removeAppFromOrg(UUID appId, Org org) throws Exception { + Set<UUID> apps = appsByOrg.get( org ); + apps.remove( appId ); + } + + @Override + public void addAppToOrg(UUID appId, Org org) throws Exception { + Set<UUID> apps = appsByOrg.get( org ); + apps.add(appId); + } + + @Override + public void logDuplicates(Map<String, Set<Org>> duplicatesByName) { + + for (String orgName : duplicatesByName.keySet()) { + Set<Org> orgs = duplicatesByName.get( orgName ); + for (Org org : orgs) { + DuplicateAdminUserRepairTest.logger.info( "Duplicate org {}:{}", orgName, org.getId() ); + } + } + } + + @Override + public Org getOrg(UUID uuid) throws Exception { + return orgsById.get(uuid); + } + + @Override + public OrgUser getOrgUser(UUID id) throws Exception { + return usersById.get(id); + } + + @Override + public OrgUser lookupOrgUserByUsername(String username) { + return usersByUsername.get(username); + } + + @Override + public OrgUser lookupOrgUserByEmail(String email) { + return usersByEmail.get(email); + } + + @Override + public void removeOrgUser(OrgUser orgUser) throws Exception { + + usersById.remove( orgUser.getId() ); + usersByUsername.remove( orgUser.getId() ); + usersByEmail.remove( orgUser.getId() ); + + Set<Org> orgs = orgsByUser.get( orgUser ); + for ( Org org : orgs ) { + removeUserFromOrg( orgUser, org ); + } + } + + @Override + public void updateOrgUser(OrgUser keeper) throws Exception { + // ensure 'keeper' user is the one in the indexes + usersById.put( keeper.getId(), keeper ); + usersByUsername.put( keeper.getUsername(), keeper ); + usersByEmail.put( keeper.getEmail(), keeper ); + } + + @Override + public void setOrgUserName(OrgUser user, String newUserName) throws Exception { + user.setUsername( newUserName ); + updateOrgUser( user ); // re-index user + } + + // implemented for testing only + OrgUser createOrgUser(UUID id, String name, String email) { + OrgUser user = new OrgUser( id, name, email ); + usersById.put( user.getId(), user ); + usersByUsername.put( user.getUsername(), user ); + usersByEmail.put( user.getEmail(), user ); + return user; + } + +} http://git-wip-us.apache.org/repos/asf/usergrid/blob/7324b5a8/stack/tools/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/stack/tools/src/test/resources/log4j.properties b/stack/tools/src/test/resources/log4j.properties new file mode 100644 index 0000000..def47b4 --- /dev/null +++ b/stack/tools/src/test/resources/log4j.properties @@ -0,0 +1,47 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# for production, you should probably set the root to INFO +# and the pattern to %c instead of %l. (%l is slower.) + +# output messages into a rolling log file as well as stdout +log4j.rootLogger=ERROR,stdout + +# stdout +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +#log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d %p (%t) [%c] - %m%n + +log4j.logger.org.apache.usergrid=INFO +log4j.logger.org.apache.usergrid.tools=DEBUG + +log4j.logger.org.apache.usergrid.management.cassandra=WARN +log4j.logger.org.apache.usergrid.persistence.cassandra.DB=WARN +log4j.logger.org.apache.usergrid.persistence.cassandra.BATCH=WARN +log4j.logger.org.apache.usergrid.persistence.cassandra.EntityManagerFactoryImpl=WARN +log4j.logger.org.apache.usergrid.persistence.cassandra.DaoUtils=WARN +log4j.logger.org.apache.usergrid.persistence.cassandra.EntityManagerImpl=WARN +log4j.logger.org.apache.usergrid.persistence.cassandra.ConnectionRefImpl=WARN +log4j.logger.me.prettyprint.cassandra.hector.TimingLogger=WARN +log4j.logger.org.apache.usergrid.rest.security.AllowAjaxFilter=WARN +log4j.logger.me.prettyprint.hector.api.beans.AbstractComposite=ERROR +#log4j.logger.org.apache.usergrid.locking.singlenode.SingleNodeLockManagerImpl=DEBUG, stdout + +log4j.logger.org.apache.usergrid.persistence.hector.CountingMutator=INFO + +#log4j.logger.org.apache.cassandra.service.StorageProxy=DEBUG, stdout +
