You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2015/06/22 17:40:54 UTC

[22/22] incubator-usergrid git commit: Merge branch 'two-dot-o' into two-dot-o-dev.

Merge branch 'two-dot-o' into two-dot-o-dev.

Conflicts:
	stack/rest/src/main/java/org/apache/usergrid/rest/IndexResource.java
	stack/rest/src/test/java/org/apache/usergrid/rest/IndexResourceIT.java
	stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/ClientSetup.java
	stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/RestClient.java
	stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/ApplicationResource.java


Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/69aecffb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/69aecffb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/69aecffb

Branch: refs/heads/two-dot-o-dev
Commit: 69aecffb754f8cb213f4a9728839587bb7c79080
Parents: 2423840 81082f3
Author: Dave Johnson <dm...@apigee.com>
Authored: Mon Jun 22 11:21:30 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Mon Jun 22 11:21:30 2015 -0400

----------------------------------------------------------------------
 .../main/resources/usergrid-core-context.xml    |   2 +-
 .../org/apache/usergrid/rest/IndexResource.java |  39 +-
 .../apache/usergrid/rest/IndexResourceIT.java   |  14 +-
 .../applications/ApplicationResourceIT.java     | 126 +++-
 .../rest/test/resource2point0/ClientSetup.java  |  32 +-
 .../rest/test/resource2point0/RestClient.java   |   8 +-
 .../endpoints/NamedResource.java                |  29 +-
 .../endpoints/SystemResource.java               |  21 +
 .../endpoints/mgmt/ApplicationResource.java     |   2 +-
 stack/rest/src/test/resources/log4j.properties  |  30 +-
 .../cassandra/ManagementServiceImpl.java        |   3 +-
 .../apache/usergrid/security/shiro/Realm.java   |   2 +-
 .../security/shiro/utils/SubjectUtils.java      |   4 +-
 .../apache/usergrid/management/EmailFlowIT.java |   6 +-
 .../org/apache/usergrid/tools/ExportAdmins.java | 469 +++++++++++----
 .../org/apache/usergrid/tools/ImportAdmins.java | 598 ++++++++++++++-----
 16 files changed, 999 insertions(+), 386 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/core/src/main/resources/usergrid-core-context.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/rest/src/main/java/org/apache/usergrid/rest/IndexResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/main/java/org/apache/usergrid/rest/IndexResource.java
index 2c26fd3,f32824f..9cf6672
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/IndexResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/IndexResource.java
@@@ -20,43 -20,26 +20,32 @@@
  
  package org.apache.usergrid.rest;
  
 +
- import java.util.HashMap;
- import java.util.Map;
- import java.util.UUID;
- 
- import javax.ws.rs.DefaultValue;
- import javax.ws.rs.POST;
- import javax.ws.rs.PUT;
- import javax.ws.rs.Path;
- import javax.ws.rs.PathParam;
- import javax.ws.rs.Produces;
- import javax.ws.rs.QueryParam;
- import javax.ws.rs.core.Context;
- import javax.ws.rs.core.MediaType;
- import javax.ws.rs.core.UriInfo;
- 
- import com.google.common.base.Optional;
- import org.apache.usergrid.corepersistence.util.CpNamingUtils;
++import com.google.common.base.Preconditions;
+ import com.sun.jersey.api.json.JSONWithPadding;
 -import org.apache.usergrid.persistence.EntityManagerFactory;
 -import org.apache.usergrid.persistence.EntityRef;
++import org.apache.usergrid.corepersistence.index.ReIndexRequestBuilder;
++import org.apache.usergrid.corepersistence.index.ReIndexRequestBuilderImpl;
++import org.apache.usergrid.corepersistence.index.ReIndexService;
 +import org.apache.usergrid.persistence.EntityManager;
 +import org.apache.usergrid.persistence.index.utils.ConversionUtils;
+ import org.apache.usergrid.persistence.index.utils.UUIDUtils;
+ import org.apache.usergrid.rest.security.annotations.RequireSystemAccess;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.context.annotation.Scope;
  import org.springframework.stereotype.Component;
  
- import org.apache.usergrid.corepersistence.index.ReIndexRequestBuilder;
- import org.apache.usergrid.corepersistence.index.ReIndexRequestBuilderImpl;
- import org.apache.usergrid.corepersistence.index.ReIndexService;
- import org.apache.usergrid.persistence.index.utils.UUIDUtils;
- import org.apache.usergrid.rest.security.annotations.RequireSystemAccess;
- 
- import com.google.common.base.Preconditions;
- import com.sun.jersey.api.json.JSONWithPadding;
+ import javax.ws.rs.*;
+ import javax.ws.rs.core.Context;
+ import javax.ws.rs.core.MediaType;
+ import javax.ws.rs.core.UriInfo;
++import java.util.HashMap;
+ import java.util.Map;
 -import java.util.Set;
+ import java.util.UUID;
  
 +
  /**
 - * Classy class class.
 + * system/index/otherstuff
   */
  @Component
  @Scope( "singleton" )

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/rest/src/test/java/org/apache/usergrid/rest/IndexResourceIT.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/IndexResourceIT.java
index dc140bc,a310368..7820358
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/IndexResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/IndexResourceIT.java
@@@ -20,10 -20,7 +20,11 @@@
  
  package org.apache.usergrid.rest;
  
 -import com.fasterxml.jackson.databind.JsonNode;
 +import com.sun.jersey.api.client.WebResource;
 +import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
- import org.apache.usergrid.rest.test.resource2point0.model.*;
- 
++import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
++import org.apache.usergrid.rest.test.resource2point0.model.QueryParameters;
++import org.apache.usergrid.rest.test.resource2point0.model.Token;
  import org.junit.Ignore;
  import org.junit.Rule;
  import org.junit.Test;
@@@ -33,23 -30,24 +34,16 @@@ import org.slf4j.LoggerFactory
  import javax.ws.rs.core.MediaType;
  import java.util.HashMap;
  import java.util.Map;
--import java.util.UUID;
 -
 -import org.apache.usergrid.rest.test.resource2point0.AbstractRestIT;
 -import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
 -import org.apache.usergrid.rest.test.resource2point0.model.Entity;
 -import org.apache.usergrid.rest.test.resource2point0.model.QueryParameters;
 -import org.apache.usergrid.rest.test.resource2point0.model.Token;
  
  import static org.junit.Assert.assertNotNull;
 -import static org.junit.Assert.assertNull;
  import static org.junit.Assert.fail;
- import org.apache.usergrid.rest.test.resource2point0.AbstractRestIT;
- import org.apache.usergrid.rest.test.resource2point0.model.*;
- import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
- 
- import static org.junit.Assert.assertNotNull;
  
 +
  /**
   * test index creation
   */
 -public class IndexResourceIT extends AbstractRestIT {
 -
 +public class IndexResourceIT extends org.apache.usergrid.rest.test.resource2point0.AbstractRestIT {
  
- 
      @Rule
      public TestContextSetup context = new TestContextSetup( this );
      //Used for all MUUserResourceITTests
@@@ -58,6 -56,35 +52,7 @@@
      public IndexResourceIT(){
  
      }
 -//TODO: convert over and recheck intention of test.
 -//    @Ignore( "will finish when tests are working from rest" )
 -//    @Test
 -//    public void TestAddIndex() throws Exception{
 -//        String superToken = superAdminToken();
 -//
 -//        Map<String, Object> data = new HashMap<String, Object>();
 -//        data.put( "replicas", 0 );
 -//        data.put( "shards", 1 );
 -//        data.put( "writeConsistency", "one" );
 -//
 -//        UUID appId = this.context.getAppUuid();
 -//
 -//        // change the password as admin. The old password isn't required
 -//        JsonNode node = null;
 -//        try {
 -//            node = mapper.readTree(resource().path("/system/index/" + appId)
 -//                    .queryParam("access_token", superToken)
 -//                    .accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON_TYPE)
 -//                    .post(String.class, data));
 -//        } catch (Exception e) {
 -//            LOG.error("failed", e);
 -//            fail(e.toString());
 -//        }
 -//        assertNull( getError( node ) );
 -//
 -//        refreshIndex("test-organization", "test-app");
 -//
 -//    }
++
      @Test
      public void testCaseReindexEndpoint() {
  
@@@ -90,36 -118,4 +85,35 @@@
          assertNotNull( result );
  
      }
 +
 +    @Ignore
 +    @Test
 +    public void TestAddIndex() throws Exception{
 +
 +
 +        Map<String, Object> data = new HashMap<String, Object>();
 +        data.put( "replicas", 0 );
 +        data.put( "shards", 1 );
 +        data.put( "writeConsistency", "one" );
 +
 +        String appId = this.clientSetup.getAppUuid();
 +
 +        // change the password as admin. The old password isn't required
 +        org.apache.usergrid.rest.test.resource2point0.model.ApiResponse node = null;
 +        try {
 +
 +            WebResource resource = this.clientSetup.getRestClient().pathResource("/system/index/" + appId).getResource();
 +
 +            //added httpBasicauth filter to all setup calls because they all do verification this way.
 +            HTTPBasicAuthFilter httpBasicAuthFilter = new HTTPBasicAuthFilter( clientSetup.getSuperuserName(),clientSetup.getSuperuserPassword() );
 +            resource.addFilter( httpBasicAuthFilter );
 +
 +            node = resource.type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )
 +                .get( org.apache.usergrid.rest.test.resource2point0.model.ApiResponse.class);
 +        } catch (Exception e) {
 +            LOG.error("failed", e);
 +            fail(e.toString());
 +        }
 +        assertNotNull( node );
- 
 +    }
  }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java
index d4a3e06,8629ccb..f296d06
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationResourceIT.java
@@@ -21,17 -21,11 +21,14 @@@ import com.sun.jersey.api.client.Client
  import com.sun.jersey.api.client.UniformInterfaceException;
  import com.sun.jersey.api.client.WebResource;
  import com.sun.jersey.api.representation.Form;
++import org.apache.commons.lang.RandomStringUtils;
  import org.apache.shiro.codec.Base64;
 -import org.apache.usergrid.management.ApplicationInfo;
++import org.apache.usergrid.cassandra.SpringResource;
++import org.apache.usergrid.management.ManagementService;
  import org.apache.usergrid.rest.test.resource2point0.AbstractRestIT;
  import org.apache.usergrid.rest.test.resource2point0.endpoints.mgmt.OrganizationResource;
- import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
- import org.apache.usergrid.rest.test.resource2point0.model.Application;
- import org.apache.usergrid.rest.test.resource2point0.model.Collection;
- import org.apache.usergrid.rest.test.resource2point0.model.Credentials;
- import org.apache.usergrid.rest.test.resource2point0.model.Entity;
- import org.apache.usergrid.rest.test.resource2point0.model.QueryParameters;
- import org.apache.usergrid.rest.test.resource2point0.model.Token;
- import org.apache.usergrid.rest.test.resource2point0.model.User;
+ import org.apache.usergrid.rest.test.resource2point0.model.*;
++import org.apache.usergrid.setup.ConcurrentProcessSingleton;
  import org.apache.usergrid.utils.MapUtils;
  import org.junit.Ignore;
  import org.junit.Test;
@@@ -42,6 -36,6 +39,7 @@@ import javax.ws.rs.core.MediaType
  import java.io.IOException;
  import java.util.HashMap;
  import java.util.Map;
++import java.util.UUID;
  
  import static org.apache.usergrid.utils.MapUtils.hashMap;
  import static org.junit.Assert.*;
@@@ -97,6 -95,106 +95,109 @@@ public class ApplicationResourceIT exte
      }
  
      /**
+      * Retrieve an collection using the application client credentials
+      */
+     @Test
+     public void applicationCollectionWithAppCredentials() throws Exception {
+ 
+         //retrieve the credentials
+         Credentials appCredentials = getAppCredentials();
+ 
+         //retrieve the app using only the org credentials
+         ApiResponse apiResponse = this.app().collection( "roles" ).getResource( false )
 -                                      .queryParam("grant_type", "client_credentials")
++                                      .queryParam( "grant_type", "client_credentials" )
+                                       .queryParam("client_id", appCredentials.getClientId())
+                                       .queryParam("client_secret", appCredentials.getClientSecret())
+                                       .accept(MediaType.APPLICATION_JSON)
+                                       .type(MediaType.APPLICATION_JSON_TYPE)
+                                       .get(ApiResponse.class);
+         //assert that a valid response is returned without error
+         assertNotNull(apiResponse);
+         assertNull(apiResponse.getError());
+ 
+         Collection roles = new Collection(apiResponse);
+         //assert that we have the correct number of default roles
+         assertEquals(3, roles.getNumOfEntities());
+     }
+ 
 -    // TODO: rewrite with new framework in two-dot-o-dev
 -//    /**
 -//     * Retrieve an collection using the application client credentials
 -//     */
 -//    @Test
 -//    public void applicationCollectionWithAppToken() throws Exception {
 -//
 -//        Credentials appCredentials = getAppCredentials();
 -//
 -//        QueryParameters queryParameters = new QueryParameters();
 -//        queryParameters.addParam("grant_type", "client_credentials");
 -//        queryParameters.addParam("client_id", appCredentials.getClientId());
 -//        queryParameters.addParam("client_secret", appCredentials.getClientSecret());
 -//
 -//        Entity testUser = new Entity(  );
 -//        testUser.chainPut( "name","temp" ).chainPut( "password","temp1" );
 -//
 -//        Token appToken = this.app().token().post(
 -//            new Token("client_credentials",appCredentials.getClientId(),appCredentials.getClientSecret() ));
 -//
 -//        String orgName = "MiXedApplicationResourceTest";
 -//        String appName = "mgmt-org-app-test";
 -//
 -//        //create new org
 -//        Map payload = hashMap( "email", "test-user-1@mockserver.com" ).map( "username", "ApplicationAppCredsTest" )
 -//                                                                      .map( "name", "App Creds User" )
 -//                                                                      .map( "password", "password" )
 -//                                                                      .map( "organization", orgName );
 -//
 -//        resource().path( "/management/organizations" ).accept( MediaType.APPLICATION_JSON )
 -//                                  .type( MediaType.APPLICATION_JSON_TYPE ).post( JsonNode.class, payload );
 -//
 -//        //create new app
 -//        Map<String, String> data = new HashMap<String, String>();
 -//        data.put( "name", appName );
 -//
 -//        JsonNode appdata = resource().path( "/management/orgs/" + orgName + "/applications" )
 -//                                     .queryParam( "access_token", superAdminToken() ).accept( MediaType.APPLICATION_JSON )
 -//                                     .type( MediaType.APPLICATION_JSON_TYPE ).post( JsonNode.class, data );
 -//
 -//
 -//        ApplicationInfo appInfo = setup.getMgmtSvc().getApplicationInfo(orgName+"/"+appName );//"test-organization/test-app" );
 -//
 -//        //don't know what kind of creds these are but they sure aren't app creds...
 -//        String clientId = setup.getMgmtSvc().getClientIdForApplication( appInfo.getId() );
 -//        String clientSecret = setup.getMgmtSvc().getClientSecretForApplication( appInfo.getId() );
 -//
 -//        JsonNode applicationCredentials = resource().path( "/"+orgName.toLowerCase()+"/"+appName+"/credentials" ).queryParam( "client_id", clientId )
 -//
 -//                                                    .queryParam( "client_secret", clientSecret ).accept( MediaType.APPLICATION_JSON )
 -//                                                    .type( MediaType.APPLICATION_JSON_TYPE ).get( JsonNode.class );
 -//
 -//        JsonNode node = resource().path( "/"+orgName.toLowerCase()+"/"+appName+"/users" ).queryParam( "client_id", applicationCredentials.get( "credentials" ).get( "client_id" ).asText())
 -//                .queryParam( "client_secret", applicationCredentials.get( "credentials" ).get( "client_secret" ).asText() ).accept( MediaType.APPLICATION_JSON )
 -//                .type( MediaType.APPLICATION_JSON_TYPE ).get( JsonNode.class );
 -//
 -//
 -//        //retrieve the credentials
 -//
 -//        //retrieve the app using only the org credentials
 -//        ApiResponse apiResponse = this.app().collection( "roles" ).getResource( true, appToken )
 -//                                      .accept( MediaType.APPLICATION_JSON )
 -//                                      .type(MediaType.APPLICATION_JSON_TYPE)
 -//                                      .get(ApiResponse.class);
 -//        //assert that a valid response is returned without error
 -//        assertNotNull(apiResponse);
 -//        assertNull(apiResponse.getError());
 -//
 -//        Collection roles = new Collection(apiResponse);
 -//        //assert that we have the correct number of default roles
 -//        assertEquals(3, roles.getNumOfEntities());
 -//    }
++    /**
++     * Retrieve an collection using the application client credentials.
++     */
++    @Test
++    public void applicationCollectionWithAppToken() throws Exception {
++
++        String username = RandomStringUtils.randomAlphanumeric( 20 );
++        String orgName = "MiXedApplicationResourceTest_" + username;
++        String appName = "mgmt-org-app-test";
++
++        // create new org with mixed case name
++
++        Map payload = hashMap( "email", username + "@example.com" )
++            .map( "username", username )
++            .map( "name", "App Creds User" )
++            .map( "password", "password" )
++            .map( "organization", orgName );
++
++        QueryParameters tokenParams = new QueryParameters();
++        tokenParams.addParam( "access_token", getAdminToken("superuser","superpassword").getAccessToken() );
++
++        pathResource( "management/organizations" ).post( false, payload, tokenParams );
++
++        // create new app
++
++        Map<String, String> data = new HashMap<String, String>();
++        data.put( "name", appName );
++
++        ApiResponse appResponse = pathResource( "management/orgs/" + orgName + "/applications" )
++            .post( false, data, tokenParams );
++        UUID appId = appResponse.getEntities().get(0).getUuid();
++
++        // wait for app to become available and then get app creds
++
++        String clientId = null;
++        String clientSecret = null;
++
++        Map<String, String> loginMap = new HashMap<String, String>() {{
++            put("username", username);
++            put("password", "password");
++            put("grant_type", "password");
++        }};
++        ApiResponse authResponse = pathResource( "management/token" ).post( loginMap );
++
++        // TODO: rewrite to use REST rather
++
++        int tries = 0;
++        SpringResource springResource = ConcurrentProcessSingleton.getInstance().getSpringResource();
++        ManagementService mgmt = springResource.getBean( ManagementService.class );
++        while ( tries++ < 20 ) {
++            try {
++                clientId = mgmt.getClientIdForApplication( appId );
++                clientSecret = mgmt.getClientSecretForApplication( appId );
++            } catch ( Exception intentionallyIgnored ) {}
++            if ( clientId != null && clientSecret != null ) {
++                break;
++            }
++            logger.info( "Waiting for app to become available" );
++            Thread.sleep(500);
++            refreshIndex();
++        }
++        assertNotNull( clientId );
++        assertNotNull( clientSecret );
++
++        QueryParameters adminTokenParams = new QueryParameters();
++        adminTokenParams
++            .addParam( "grant_type", "client_credentials" )
++            .addParam( "client_id", clientId )
++            .addParam( "client_secret", clientSecret );
+ 
++        ApiResponse rolesResponse = pathResource( orgName.toLowerCase() + "/" + appName + "/roles" )
++            .get( ApiResponse.class, adminTokenParams, false );
++
++        assertTrue( rolesResponse.getEntityCount() > 0 );
++
++    }
+ 
+     /**
       * Verifies that we return JSON even when no accept header is specified.
       * (for backwards compatibility)
       */
@@@ -493,7 -591,7 +594,8 @@@
          payload.add("redirect_uri", "http://www.my_test.com");
  
          //POST the form to the authorization endpoint
-         String apiResponse = clientSetup.getRestClient().management().authorize().getResource().type( MediaType.APPLICATION_FORM_URLENCODED_TYPE ).accept(MediaType.TEXT_HTML).post(String.class, payload);
 -        String apiResponse = clientSetup.getRestClient().management().authorize().post(String.class, payload);
++        String apiResponse = clientSetup.getRestClient().management().authorize().getResource()
++            .type( MediaType.APPLICATION_FORM_URLENCODED_TYPE ).accept(MediaType.TEXT_HTML).post(String.class, payload);
  
          //Assert that an appropriate error message is returned
          assertTrue(apiResponse.contains("Username or password do not match"));
@@@ -540,7 -637,7 +642,8 @@@
  
          try {
              //POST the form to the authorization endpoint
-             clientSetup.getRestClient().management().authorize().getResource().accept(MediaType.TEXT_HTML).post(String.class, payload);
 -            clientSetup.getRestClient().management().authorize().post(String.class, payload);
++            clientSetup.getRestClient().management().authorize()
++                .getResource().accept(MediaType.TEXT_HTML).post(String.class, payload);
          } catch (UniformInterfaceException uie) {
              assertEquals(String.valueOf(Status.TEMPORARY_REDIRECT.getStatusCode()), uie.getResponse().getStatus());
          }
@@@ -756,7 -863,8 +859,8 @@@
       */
      public Credentials getOrgCredentials() throws IOException {
          String orgName = clientSetup.getOrganizationName().toLowerCase();
-         return new Credentials( clientSetup.getRestClient().management().orgs().org( orgName ).credentials().get(ApiResponse.class,null,true) );
 -        return clientSetup.getRestClient().management().orgs().organization(orgName).credentials().get();
++        return new Credentials( clientSetup.getRestClient().management()
++            .orgs().org( orgName ).credentials().get(ApiResponse.class,null,true) );
  
      }
  }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/ClientSetup.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/ClientSetup.java
index 821b80a,7dc4eb5..d9bda7c
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/ClientSetup.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/ClientSetup.java
@@@ -21,22 -21,24 +21,17 @@@
  package org.apache.usergrid.rest.test.resource2point0;
  
  
--import java.io.IOException;
 -import java.util.LinkedHashMap;
 -import java.util.UUID;
--
 -import org.apache.usergrid.rest.test.resource2point0.model.Application;
 -import org.apache.usergrid.rest.test.resource2point0.model.Entity;
 -import org.apache.usergrid.rest.test.resource2point0.model.Token;
 +import org.apache.usergrid.corepersistence.util.CpNamingUtils;
- import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
- import org.apache.usergrid.rest.test.resource2point0.model.Application;
- import org.apache.usergrid.rest.test.resource2point0.model.Credentials;
- import org.apache.usergrid.rest.test.resource2point0.model.Token;
++import org.apache.usergrid.persistence.index.utils.UUIDUtils;
++import org.apache.usergrid.rest.test.resource2point0.model.*;
  import org.junit.rules.TestRule;
  import org.junit.runner.Description;
  import org.junit.runners.model.Statement;
--
--import org.apache.usergrid.persistence.index.utils.UUIDUtils;
--import org.apache.usergrid.rest.test.resource2point0.model.Organization;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
 -import javax.ws.rs.core.MediaType;
++import java.io.IOException;
+ 
  
  /**
   * This class is used to setup the client rule that will setup the RestClient and create default applications.
@@@ -55,10 -57,9 +50,10 @@@ public class ClientSetup implements Tes
      protected Token superuserToken;
      protected String superuserName = "superuser";
      protected String superuserPassword = "superpassword";
 +    protected Credentials clientCredentials;
  
      protected Organization organization;
-     protected Application application;
+     protected Entity application;
  
  
      public ClientSetup (String serverUrl) {
@@@ -113,21 -114,18 +108,21 @@@
          orgName = "org_"+name+UUIDUtils.newTimeUUID();
          appName = "app_"+name+UUIDUtils.newTimeUUID();
  
-         organization = restClient.management().orgs()
-                                  .post( new Organization( orgName, username, username + "@usergrid.com", username,
-                                      username, null ) );
 -        organization = restClient.management().orgs().post(new Organization( orgName,username,username+"@usergrid.com",username,username, null  ));
 -
 -        refreshIndex();
++        organization = restClient.management().orgs().post(
++            new Organization( orgName, username, username + "@usergrid.com", username, username, null ) );
  
 -        restClient.management().token().post(new Token(username,username));
 +        restClient.management().token().get(username,password);
  
-         // refreshIndex();
 -        application = restClient.management().orgs().organization(organization.getName()).app().post(new Application(appName));
 -       // application = restClient.management().orgs().organization(organization.getName()).app().get();
 -        appUuid = (String)((LinkedHashMap)application.getDynamicProperties().get( "data" )).get( orgName+"/"+appName );
 +        clientCredentials = restClient.management().orgs().org( orgName ).credentials().get(Credentials.class);
-         //refreshIndex();
  
- 
-         ApiResponse appResponse = restClient.management().orgs().org( organization.getName() ).app().post(new Application(appName));
++        ApiResponse appResponse = restClient.management().orgs()
++            .org( organization.getName() ).app().post(new Application(appName));
 +        appUuid = ( String ) appResponse.getEntities().get( 0 ).get( "uuid" );
++        application = new Application( appResponse );
          refreshIndex();
  
++        restClient.management().token().post(new Token(username,username));
++        refreshIndex();
      }
  
      public String getUsername(){return username;}
@@@ -158,16 -154,8 +153,17 @@@
          return superuserPassword;
      }
  
 +    public Credentials getClientCredentials() {
 +        return clientCredentials;
 +    }
 +
      public void refreshIndex() {
-         this.restClient.refreshIndex(getOrganizationName(),getAppName(), CpNamingUtils.getManagementApplicationId().getUuid().toString());
 -        this.restClient.refreshIndex(getOrganizationName(),getAppName());
++        this.restClient.refreshIndex(getOrganizationName(),getAppName(),
++            CpNamingUtils.getManagementApplicationId().getUuid().toString());
 +
 +        if(!CpNamingUtils.getManagementApplicationId().getUuid().toString().equals(getAppUuid())) {
 +            this.restClient.refreshIndex(getOrganizationName(), getAppName(), getAppUuid());
 +        }
      }
  
      public RestClient getRestClient(){

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/RestClient.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/RestClient.java
index 0d8f981,0cfeb40..cc24ebe
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/RestClient.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/RestClient.java
@@@ -16,19 -16,21 +16,17 @@@
   */
  package org.apache.usergrid.rest.test.resource2point0;
  
- import org.apache.usergrid.rest.test.resource2point0.endpoints.*;
 -import org.apache.usergrid.rest.test.resource2point0.endpoints.SystemResource;
 -import org.apache.usergrid.rest.test.resource2point0.endpoints.TokenResource;
--import org.apache.usergrid.rest.test.resource2point0.endpoints.mgmt.ManagementResource;
 -import org.apache.usergrid.rest.test.resource2point0.endpoints.OrganizationResource;
 -import org.apache.usergrid.rest.test.resource2point0.endpoints.UrlResource;
--import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
--
  import com.fasterxml.jackson.databind.JsonNode;
  import com.sun.jersey.api.client.Client;
  import com.sun.jersey.api.client.WebResource;
  import com.sun.jersey.api.client.config.ClientConfig;
  import com.sun.jersey.api.client.config.DefaultClientConfig;
  import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
++import org.apache.usergrid.rest.test.resource2point0.endpoints.*;
++import org.apache.usergrid.rest.test.resource2point0.endpoints.mgmt.ManagementResource;
++import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
  
  import javax.ws.rs.core.MediaType;
- import java.util.UUID;
  
  
  /**

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
index 7e717b7,bf5dbf0..c80516f
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
@@@ -17,28 -17,17 +17,22 @@@
  package org.apache.usergrid.rest.test.resource2point0.endpoints;
  
  
++import com.sun.jersey.api.client.GenericType;
++import com.sun.jersey.api.client.WebResource;
++import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
++import com.sun.jersey.api.representation.Form;
 +import com.sun.jersey.multipart.FormDataMultiPart;
 +import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
 +import org.apache.usergrid.rest.test.resource2point0.model.Entity;
  import org.apache.usergrid.rest.test.resource2point0.model.QueryParameters;
  import org.apache.usergrid.rest.test.resource2point0.model.Token;
  import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
  
- import com.sun.jersey.api.client.GenericType;
--import com.sun.jersey.api.client.WebResource;
--
 -import java.util.HashMap;
++import javax.ws.rs.core.MediaType;
 +import java.io.InputStream;
- import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.Set;
--import java.util.UUID;
- 
- import javax.ws.rs.core.MediaType;
- 
- import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
- import com.sun.jersey.api.representation.Form;
- import org.jclouds.openstack.v2_0.domain.Extension;
  
  
  /**
@@@ -77,10 -66,7 +71,11 @@@ public class NamedResource implements U
      public WebResource getResource(boolean useToken,Token token) {
          WebResource resource = parent.getResource().path( getPath() );
          token = token !=null ? token : this.context.getToken();
 -        return  useToken    ? resource.queryParam("access_token",token.getAccessToken()) :  parent.getResource().path( getPath() );
 +        //error checking
-         if(token == null)
++        if (token == null) {
 +            return resource;
++        }
 +        return  useToken    ? resource.queryParam("access_token",token.getAccessToken()) :  resource;
      }
  
      protected WebResource addParametersToResource(WebResource resource, final QueryParameters parameters){
@@@ -119,237 -105,5 +114,239 @@@
          return resource;
      }
  
 +    protected String getMatrixValue(final QueryParameters parameters) {
 +
 +        StringBuilder sb = new StringBuilder();
 +        if (parameters == null) {
 +            return null;
 +        }
 +        if (parameters.getQuery() != null) {
 +            sb.append(";");
 +            sb.append("ql").append("=").append(parameters.getQuery());
 +        }
 +
 +        if (parameters.getCursor() != null) {
 +            sb.append(";");
 +            sb.append("cursor").append("=").append(parameters.getCursor());
 +        }
 +        if (parameters.getStart() != null) {
 +            sb.append(";");
 +            sb.append("start").append("=").append(parameters.getStart());
 +        }
 +        if (parameters.getLimit() != null) {
 +            sb.append(";");
 +            sb.append("limit").append("=").append(parameters.getLimit());
 +        }
 +        //We can also post the params as queries
 +        if (parameters.getFormPostData().size() > 0) {
 +            Map<String, String> formData = parameters.getFormPostData();
 +            Set<String> keySet = formData.keySet();
 +            Iterator<String> keyIterator = keySet.iterator();
 +
 +
 +            while (keyIterator.hasNext()) {
 +                if (sb.length() > 0)
 +                    sb.append(";");
 +                String key = keyIterator.next();
 +                String value = formData.get(key);
 +                sb.append(key).append("=").append(value);
 +            }
 +        }
 +        return sb.toString();
 +    }
 +
 +    /**
 +     * Need to refactor all instances of tokens to either be passed in or manually set during the test.
 +     * There isn't any reason we would want a rest forwarding framework to set something on behave of the user.
 +     * @param map
 +     * @return
 +     */
 +    //For edge cases like Organizations and Tokens
-     public ApiResponse  post(Map map) {
-         return post(true,ApiResponse.class,map,null,false);
++    public ApiResponse post(Map map) {
++        return post( true, ApiResponse.class, map, null, false );
 +
 +    }
++
 +    //For edge cases like Organizations and Tokens
-     public ApiResponse  post(boolean useToken, Map map, QueryParameters queryParameters) {
-         return post(useToken,ApiResponse.class,map,queryParameters,false);
++    public ApiResponse post(boolean useToken, Map map, QueryParameters queryParameters) {
++        return post( useToken, ApiResponse.class, map, queryParameters, false );
 +
 +    }
++
 +    /**
 +     * Need to refactor all instances of tokens to either be passed in or manually set during the test.
 +     * There isn't any reason we would want a rest forwarding framework to set something on behave of the user.
 +     * @param type
 +     * @param <T>
 +     * @return
 +     */
 +    //For edge cases like Organizations and Tokens
 +    public <T> T post(Class<T> type) {
 +        return post(true,type,null,null,false);
 +
 +    }
 +
 +    /**
 +     * Need to refactor all instances of tokens to either be passed in or manually set during the test.
 +     * There isn't any reason we would want a rest forwarding framework to set something on behave of the user.
 +     * @param type
 +     * @param requestEntity
 +     * @param <T>
 +     * @return
 +     */
 +    //For edge cases like Organizations and Tokens
 +    public <T> T post(Class<T> type, Entity requestEntity) {
 +        return post(true,type,requestEntity,null,false);
 +
 +    }
 +
 +    /**
 +     * Need to refactor all instances of tokens to either be passed in or manually set during the test.
 +     * There isn't any reason we would want a rest forwarding framework to set something on behave of the user.
 +     * @param type
 +     * @param requestEntity
 +     * @param <T>
 +     * @return
 +     */
 +    //For edge cases like Organizations and Tokens
 +    public <T> T post(Class<T> type, Map requestEntity) {
 +        return post(true,type,requestEntity,null,false);
 +
 +    }
 +
 +    /**
 +     * Used to test POST using form payloads.
 +     * @param type
 +     * @param requestEntity
 +     * @param <T>
 +     * @return
 +     */
 +    public <T> T post(Class<T> type, Form requestEntity) {
 +        GenericType<T> gt = new GenericType<>((Class) type);
 +        return getResource()
 +            .accept(MediaType.APPLICATION_JSON)
 +            .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
 +            .entity(requestEntity, MediaType.APPLICATION_FORM_URLENCODED_TYPE)
 +            .post(gt.getRawClass());
 +
 +    }
 +
 +
 +    //Used for empty posts
 +    public <T> T post( boolean useToken, Class<T> type, Map entity, final QueryParameters queryParameters) {
 +        WebResource resource = getResource(useToken);
 +        resource = addParametersToResource(resource, queryParameters);
 +        WebResource.Builder builder = resource
 +            .type(MediaType.APPLICATION_JSON_TYPE)
 +            .accept( MediaType.APPLICATION_JSON );
 +
 +        if(entity!=null){
 +            builder.entity(entity);
 +        }
 +        GenericType<T> gt = new GenericType<>((Class) type);
 +        return builder
 +            .post(gt.getRawClass());
 +
 +    }
 +
 +    //Used for empty posts
 +    public <T> T post( boolean useToken, Class<T> type, Map entity, final QueryParameters queryParameters, boolean useBasicAuthentication ) {
 +        WebResource resource = getResource(useToken);
 +        resource = addParametersToResource(resource, queryParameters);
 +        WebResource.Builder builder = resource
 +            .type(MediaType.APPLICATION_JSON_TYPE)
 +            .accept( MediaType.APPLICATION_JSON );
 +
 +        if(entity!=null){
 +            builder.entity(entity);
 +        }
 +
 +        if(useBasicAuthentication){
 +            //added httpBasicauth filter to all setup calls because they all do verification this way.
 +            HTTPBasicAuthFilter httpBasicAuthFilter = new HTTPBasicAuthFilter( "superuser","superpassword" );
 +            resource.addFilter( httpBasicAuthFilter );
 +        }
 +
 +        GenericType<T> gt = new GenericType<>((Class) type);
 +        return builder
 +            .post(gt.getRawClass());
 +
 +    }
 +
 +    //For edge cases like Organizations and Tokens without any payload
 +    public <T> T get(Class<T> type) {
 +        return get(type,null,true);
 +
 +    }
 +
 +    //For edge cases like Organizations and Tokens without any payload
 +    public <T> T get(Class<T> type, boolean useToken) {
 +        return get(type,null,useToken);
 +    }
 +
 +
 +
 +    public <T> T get(Class<T> type,QueryParameters queryParameters) {
 +        return get(type,queryParameters,true);
 +    }
 +
 +    public <T> T get(Class<T> type,QueryParameters queryParameters, boolean useToken) {
 +        WebResource resource = getResource(useToken);
 +        if(queryParameters!=null) {
 +            resource = addParametersToResource(resource, queryParameters);
 +        }
 +        GenericType<T> gt = new GenericType<>((Class) type);
 +        return resource.type(MediaType.APPLICATION_JSON_TYPE)
 +            .accept( MediaType.APPLICATION_JSON )
 +            .get( gt.getRawClass() );
 +
 +    }
 +
 +    public String getMatrix() {
 +        return "";
 +    }
 +
 +    public ApiResponse post( boolean useToken, FormDataMultiPart multiPartForm ) {
 +        WebResource resource = getResource( useToken );
 +        return resource.type( MediaType.MULTIPART_FORM_DATA_TYPE ).post( ApiResponse.class, multiPartForm );
 +    }
 +
 +    public ApiResponse post( FormDataMultiPart multiPartForm ) {
 +        return post( true, multiPartForm );
 +    }
 +
 +    public ApiResponse put( boolean useToken, byte[] data, MediaType type ) {
 +        WebResource resource = getResource(useToken);
 +        return resource.type( type ).put( ApiResponse.class, data );
 +    }
 +
 +    public ApiResponse put( byte[] data, MediaType type ) {
 +        return put( true, data, type );
 +    }
  
 +    public ApiResponse put( boolean useToken, FormDataMultiPart multiPartForm ) {
 +        WebResource resource = getResource(useToken);
 +        return resource.type( MediaType.MULTIPART_FORM_DATA_TYPE ).put( ApiResponse.class, multiPartForm );
 +    }
 +
 +    public ApiResponse put( FormDataMultiPart multiPartForm ) {
 +        return put( true, multiPartForm );
 +    }
 +
 +    public InputStream getAssetAsStream( boolean useToken ) {
 +        WebResource resource = getResource(useToken);
 +        return resource.accept( MediaType.APPLICATION_OCTET_STREAM_TYPE ).get( InputStream.class );
 +    }
 +
 +    public InputStream getAssetAsStream() {
 +        return getAssetAsStream( true );
 +    }
 +
 +    public ApiResponse delete( ) {
 +        return delete(true);
 +    }
 +
 +    public ApiResponse delete( boolean useToken ) {
 +        return getResource(useToken).delete( ApiResponse.class );
 +    }
  }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/ApplicationResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/ApplicationResource.java
index c02c48b,e9947e3..1e8f1f1
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/ApplicationResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/ApplicationResource.java
@@@ -58,28 -46,14 +58,28 @@@ public class ApplicationResource extend
      }
  
  
 -    public Application post(Application application) {
 -        return getResource(true).type(MediaType.APPLICATION_JSON_TYPE)
 -            .accept(MediaType.APPLICATION_JSON).post(Application.class,application);
 +    public ApiResponse post(Application application) {
 +        ApiResponse apiResponse =getResource(true).type(MediaType.APPLICATION_JSON_TYPE)
-             .accept(MediaType.APPLICATION_JSON).post(ApiResponse.class,application);
++            .accept(MediaType.APPLICATION_JSON).post(ApiResponse.class, application);
 +        return apiResponse;
      }
  
 -    public Entity post(Entity payload){
 -        ApiResponse response = getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
 -            .post(ApiResponse.class, payload);
 +    public Entity post(Entity payload) {
 +
 +        String responseString = getResource(true)
 +            .type( MediaType.APPLICATION_JSON_TYPE )
 +            .accept(MediaType.APPLICATION_JSON)
 +            .post(String.class, payload);
 +
 +        logger.debug("Response from post: " + responseString);
 +
 +        ApiResponse response;
 +        try {
 +            response = mapper.readValue(new StringReader(responseString), ApiResponse.class);
 +        } catch (IOException e) {
 +            throw new RuntimeException("Error parsing response", e);
 +        }
 +
          return new Entity(response);
      }
  

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/rest/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --cc stack/rest/src/test/resources/log4j.properties
index ab700af,4d3d764..71dd540
--- a/stack/rest/src/test/resources/log4j.properties
+++ b/stack/rest/src/test/resources/log4j.properties
@@@ -29,21 -29,24 +29,21 @@@ log4j.appender.stdout.layout.Conversion
  log4j.logger.org.apache.usergrid=INFO
  #log4j.logger.org.apache.usergrid.cassandra=DEBUG
  #log4j.logger.org.apache.usergrid.persistence.cassandra=DEBUG
 -=======
--log4j.category.org.apache=ERROR, stdout
--log4j.category.org.apache.usergrid=WARN, stdout
--log4j.category.org.apache.usergrid.rest=INFO, stdout
 ->>>>>>> master
++log4j.category.org.apache=ERROR
++log4j.category.org.apache.usergrid=WARN
++log4j.category.org.apache.usergrid.rest=INFO
  
--log4j.logger.org.apache.usergrid.persistence.cassandra.CounterUtils=ERROR, stdout
--log4j.logger.org.apache.usergrid.persistence.cassandra.DB=WARN, stdout
--log4j.logger.org.apache.usergrid.persistence.cassandra.BATCH=WARN, stdout
--log4j.logger.org.apache.usergrid.persistence.cassandra.EntityManagerFactoryImpl=WARN, stdout
--log4j.logger.org.apache.usergrid.persistence.cassandra.DaoUtils=WARN, stdout
--log4j.logger.org.apache.usergrid.persistence.cassandra.EntityManagerImpl=WARN, stdout
--log4j.logger.org.apache.usergrid.persistence.cassandra.ConnectionRefImpl=WARN, stdout
--log4j.logger.me.prettyprint.cassandra.hector.TimingLogger=WARN, stdout
--log4j.logger.org.apache.usergrid.rest.security.AllowAjaxFilter=WARN, stdout
--log4j.logger.me.prettyprint.hector.api.beans.AbstractComposite=ERROR, stdout
--log4j.logger.org.apache.usergrid.locking.singlenode.SingleNodeLockManagerImpl=DEBUG, stdout
++log4j.logger.org.apache.usergrid.persistence.cassandra.CounterUtils=ERROR
++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
  log4j.logger.org.apache.usergrid.rest.filters.MeteringFilter=ERROR
  
  #log4j.logger.org.apache.usergrid.corepersistence=DEBUG
@@@ -56,7 -60,7 +56,7 @@@
  #log4j.logger.org.apache.usergrid.persistence.collection=INFO
  
  #log4j.logger.org.apache.usergrid.services=DEBUG
--#log4j.logger.org.apache.cassandra.service.StorageProxy=DEBUG, stdout
++#log4j.logger.org.apache.cassandra.service.StorageProxy=DEBUG
  
  #log4j.logger.org.apache.usergrid.rest=INFO
  #log4j.logger.org.apache.usergrid.rest.NotificationsIT=DEBUG

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/services/src/main/java/org/apache/usergrid/security/shiro/Realm.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/69aecffb/stack/services/src/test/java/org/apache/usergrid/management/EmailFlowIT.java
----------------------------------------------------------------------