You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by to...@apache.org on 2015/06/01 23:48:27 UTC

[18/50] [abbrv] 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/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
	stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
	stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationsResource.java
	stack/rest/src/test/java/org/apache/usergrid/rest/filters/ContentTypeResourceIT.java
	stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
	stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/ClientSetup.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/4b812547
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/4b812547
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/4b812547

Branch: refs/heads/USERGRID-628
Commit: 4b81254776679b9f37a312605017e2537a8e69ee
Parents: 73e2292 a784016
Author: Dave Johnson <dm...@apigee.com>
Authored: Thu May 28 07:51:43 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Thu May 28 07:51:43 2015 -0400

----------------------------------------------------------------------
 README.md                                       |   2 +-
 docs/file-storage-configuration.md              |  39 ++
 docs/get_2.0_running_locally.md                 | 165 ++++++
 docs/index.md                                   |   3 +-
 .../main/resources/usergrid-default.properties  |  24 +-
 .../persistence/cassandra/CassandraService.java |  54 +-
 .../org/apache/usergrid/utils/JsonUtils.java    |   2 +-
 stack/pom.xml                                   |  26 +-
 .../rest/applications/ServiceResource.java      |   2 +-
 .../rest/management/ManagementResource.java     | 403 ++++++++++++++-
 .../organizations/OrganizationsResource.java    |  20 +-
 .../rest/management/users/UserResource.java     |  42 ++
 .../rest/management/users/UsersResource.java    |  45 +-
 .../OAuth2AccessTokenSecurityFilter.java        |   4 +
 .../applications/assets/AssetResourceIT.java    | 302 +++++++----
 .../rest/applications/utils/UserRepo.java       |  36 +-
 .../rest/filters/ContentTypeResourceIT.java     | 177 +++----
 .../rest/management/ManagementResourceIT.java   | 513 ++++++++++++++++++-
 .../rest/management/RegistrationIT.java         | 441 ++++++++--------
 .../rest/test/PropertiesResourceIT.java         |  23 +-
 .../test/resource2point0/AbstractRestIT.java    |   2 -
 .../rest/test/resource2point0/ClientSetup.java  |  19 +-
 .../src/test/resources/cat-larger-than-6mb.jpg  | Bin 0 -> 9799257 bytes
 stack/services/pom.xml                          |  11 +
 .../usergrid/management/ManagementService.java  |   5 +-
 .../cassandra/ManagementServiceImpl.java        |   7 +
 .../apache/usergrid/security/shiro/Realm.java   |  10 +-
 .../usergrid/security/tokens/TokenService.java  |   3 +
 .../tokens/cassandra/TokenServiceImpl.java      |  44 +-
 .../assets/data/AwsSdkS3BinaryStore.java        | 230 +++++++++
 .../services/assets/data/S3BinaryStore.java     | 255 ++++++---
 .../security/tokens/TokenServiceIT.java         |  42 ++
 ugc/README.md                                   |   2 +-
 33 files changed, 2268 insertions(+), 685 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
diff --cc stack/config/src/main/resources/usergrid-default.properties
index 9bc95e5,e5e269e..6dab7a8
--- a/stack/config/src/main/resources/usergrid-default.properties
+++ b/stack/config/src/main/resources/usergrid-default.properties
@@@ -80,11 -78,16 +80,15 @@@ cassandra.url=localhost:916
  # Name of Cassandra cluster
  cassandra.cluster=Test Cluster
  
+ # Keyspace names to be used (see also the locks keyspace below)
+ cassandra.system.keyspace=Usergrid
+ cassandra.application.keyspace=Usergrid_Applications
+ 
  cassandra.keyspace.strategy=org.apache.cassandra.locator.SimpleStrategy
  #cassandra.keyspace.strategy=org.apache.cassandra.locator.NetworkTopologyStrategy
 -#cassandra.keyspace.strategy.options.replication_factor=1
 -#cassandra.keyspace.strategy.options.us-east=1
  
  cassandra.keyspace.replication=replication_factor:1
 +#cassandra.keyspace.replication=us-east:3
  
  cassandra.username=
  cassandra.password=

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
----------------------------------------------------------------------
diff --cc stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
index b998084,fb71b69..a08c543
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
@@@ -17,60 -17,41 +17,39 @@@
  package org.apache.usergrid.persistence.cassandra;
  
  
- import java.nio.ByteBuffer;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.LinkedHashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.Properties;
- import java.util.Set;
- import java.util.UUID;
- 
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- 
- import org.apache.usergrid.locking.LockManager;
- import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
- import org.apache.usergrid.persistence.hector.CountingMutator;
- import org.apache.usergrid.utils.MapUtils;
- 
  import com.google.inject.Injector;
- 
  import me.prettyprint.cassandra.connection.HConnectionManager;
  import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel;
- import me.prettyprint.cassandra.serializers.ByteBufferSerializer;
- import me.prettyprint.cassandra.serializers.BytesArraySerializer;
- import me.prettyprint.cassandra.serializers.DynamicCompositeSerializer;
- import me.prettyprint.cassandra.serializers.LongSerializer;
- import me.prettyprint.cassandra.serializers.StringSerializer;
- import me.prettyprint.cassandra.serializers.UUIDSerializer;
+ import me.prettyprint.cassandra.serializers.*;
  import me.prettyprint.cassandra.service.CassandraHostConfigurator;
  import me.prettyprint.cassandra.service.ThriftKsDef;
- import me.prettyprint.hector.api.Cluster;
- import me.prettyprint.hector.api.ConsistencyLevelPolicy;
- import me.prettyprint.hector.api.HConsistencyLevel;
- import me.prettyprint.hector.api.Keyspace;
- import me.prettyprint.hector.api.Serializer;
+ import me.prettyprint.hector.api.*;
 -import me.prettyprint.hector.api.beans.*;
 +import me.prettyprint.hector.api.beans.ColumnSlice;
 +import me.prettyprint.hector.api.beans.DynamicComposite;
 +import me.prettyprint.hector.api.beans.HColumn;
  import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
  import me.prettyprint.hector.api.ddl.KeyspaceDefinition;
  import me.prettyprint.hector.api.factory.HFactory;
  import me.prettyprint.hector.api.mutation.Mutator;
 -import me.prettyprint.hector.api.query.*;
 +import me.prettyprint.hector.api.query.ColumnQuery;
 +import me.prettyprint.hector.api.query.QueryResult;
 +import me.prettyprint.hector.api.query.SliceQuery;
+ import org.apache.usergrid.locking.LockManager;
 -import org.apache.usergrid.persistence.IndexBucketLocator;
 -import org.apache.usergrid.persistence.IndexBucketLocator.IndexType;
 -import org.apache.usergrid.persistence.cassandra.index.IndexBucketScanner;
 -import org.apache.usergrid.persistence.cassandra.index.IndexScanner;
+ import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+ import org.apache.usergrid.persistence.hector.CountingMutator;
+ import org.apache.usergrid.utils.MapUtils;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ 
+ import java.nio.ByteBuffer;
+ import java.util.*;
  
  import static me.prettyprint.cassandra.service.FailoverPolicy.ON_FAIL_TRY_ALL_AVAILABLE;
- import static me.prettyprint.hector.api.factory.HFactory.createColumn;
- import static me.prettyprint.hector.api.factory.HFactory.createSliceQuery;
- import static me.prettyprint.hector.api.factory.HFactory.createVirtualKeyspace;
+ import static me.prettyprint.hector.api.factory.HFactory.*;
  import static org.apache.commons.collections.MapUtils.getIntValue;
  import static org.apache.commons.collections.MapUtils.getString;
 -import static org.apache.usergrid.persistence.cassandra.ApplicationCF.ENTITY_ID_SETS;
  import static org.apache.usergrid.persistence.cassandra.CassandraPersistenceUtils.batchExecute;
  import static org.apache.usergrid.utils.ConversionUtils.bytebuffer;
 -import static org.apache.usergrid.utils.ConversionUtils.bytebuffers;
  import static org.apache.usergrid.utils.JsonUtils.mapToFormattedJsonString;
  import static org.apache.usergrid.utils.MapUtils.asMap;
  import static org.apache.usergrid.utils.MapUtils.filter;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/OrganizationsResource.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/rest/src/test/java/org/apache/usergrid/rest/filters/ContentTypeResourceIT.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/filters/ContentTypeResourceIT.java
index 4ef693b,10909b4..c9a8468
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/filters/ContentTypeResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/filters/ContentTypeResourceIT.java
@@@ -17,54 -17,31 +17,45 @@@
  package org.apache.usergrid.rest.filters;
  
  
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- 
- import javax.ws.rs.core.HttpHeaders;
- import javax.ws.rs.core.MediaType;
- 
- import org.apache.usergrid.rest.test.resource2point0.endpoints.TokenResource;
- import org.apache.usergrid.rest.test.resource2point0.model.Token;
- import org.apache.usergrid.rest.test.resource2point0.model.User;
- import org.junit.Ignore;
- import org.junit.Rule;
- import org.junit.Test;
- 
- import org.apache.usergrid.rest.AbstractRestIT;
- import org.apache.usergrid.rest.TestContextSetup;
- import org.apache.usergrid.utils.JsonUtils;
- import org.apache.usergrid.utils.UUIDUtils;
- 
+ import com.sun.jersey.api.client.ClientResponse;
+ import com.sun.jersey.api.client.WebResource;
+ import com.sun.jersey.api.representation.Form;
 -import org.apache.usergrid.rest.test.resource2point0.AbstractRestIT;
 +import org.apache.http.Header;
 +import org.apache.http.HttpEntity;
 +import org.apache.http.HttpHost;
 +import org.apache.http.HttpResponse;
- import org.apache.http.NameValuePair;
- import org.apache.http.ParseException;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpGet;
 +import org.apache.http.client.methods.HttpPost;
 +import org.apache.http.entity.StringEntity;
 +import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.message.BasicNameValuePair;
- import org.apache.http.params.BasicHttpParams;
 +import org.apache.http.util.EntityUtils;
++import org.apache.usergrid.rest.test.resource2point0.model.Token;
++import org.apache.usergrid.rest.test.resource2point0.model.User;
+ import org.apache.usergrid.utils.JsonUtils;
+ import org.apache.usergrid.utils.UUIDUtils;
+ import org.junit.Ignore;
+ import org.junit.Test;
+ 
++import javax.ws.rs.core.HttpHeaders;
+ import javax.ws.rs.core.MediaType;
+ import javax.ws.rs.core.MultivaluedMap;
++import java.io.IOException;
++import java.text.ParseException;
+ import java.util.List;
++import java.util.Map;
  
- import static org.junit.Assert.assertEquals;
  import static org.apache.usergrid.utils.MapUtils.hashMap;
+ import static org.junit.Assert.assertEquals;
  
  
- /** @author tnine */
+ /**
+  * @author tnine
+  */
  
  // @Ignore("Client login is causing tests to fail due to socket closure by grizzly.  Need to re-enable once we're not
  // using grizzly to test")
 -public class ContentTypeResourceIT extends AbstractRestIT {
 +public class ContentTypeResourceIT extends org.apache.usergrid.rest.test.resource2point0.AbstractRestIT {
 +
  
- 
- 
      /**
       * Creates a simple entity of type game. Does not set the content type. The type should be set to json to match the
       * body
@@@ -72,35 -49,22 +63,36 @@@
      @Test
      public void correctHeaders() throws Exception {
  
 -        String json = JsonUtils.mapToFormattedJsonString(hashMap("name", "Solitaire1"));
 +        User user = new User("shawn","shawn","shawn@email.com","aliensquirrel");
 +        this.app().collection("users").post(user);
 +        Token token = this.app().token().post(new Token("shawn","aliensquirrel"));
  
 -        WebResource.Builder builder = app().collection("games").getResource(true)
 -            .queryParam("access_token", this.getAdminToken().getAccessToken())
 -            .type(MediaType.APPLICATION_JSON_TYPE)
 -            .accept(MediaType.APPLICATION_JSON);
 +        Map<String, String> data = hashMap( "name", "Solitaire1" );
  
 -        ClientResponse clientResponse = builder.post(ClientResponse.class, json);
 +        String json = JsonUtils.mapToFormattedJsonString(data);
  
 -        assertEquals(200, clientResponse.getStatus());
 +        DefaultHttpClient client = new DefaultHttpClient();
  
 -        MultivaluedMap<String, String> headers = clientResponse.getHeaders();
 +        HttpHost host = new HttpHost( super.getBaseURI().getHost(), super.getBaseURI().getPort() );
 +
 +        HttpPost post = new HttpPost( String.format("/%s/%s/games", this.clientSetup.getOrganization().getName(), this.clientSetup.getAppName()) );
 +        post.setEntity(new StringEntity(json));
 +        post.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + token.getAccessToken());
 +        post.setHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
 +        post.setHeader(HttpHeaders.CONTENT_TYPE, "*/*");
 +
 +        HttpResponse rsp = client.execute( host, post );
 +
 +        printResponse( rsp );
 +
 +        assertEquals( 200, rsp.getStatusLine().getStatusCode() );
 +
 +        Header[] headers = rsp.getHeaders( HttpHeaders.CONTENT_TYPE );
 +
 +        assertEquals( 1, headers.length );
 +
 +        assertEquals( MediaType.APPLICATION_JSON, headers[0].getValue() );
+ 
 -        List<String> contentType = headers.get("Content-Type");
 -        assertEquals(1, contentType.size());
 -        assertEquals(MediaType.APPLICATION_JSON, contentType.get(0));
      }
  
  
@@@ -110,35 -74,22 +102,30 @@@
       */
      @Test
      public void textPlainContentType() throws Exception {
 -        String json = JsonUtils.mapToFormattedJsonString(hashMap("name", "Solitaire2"));
 -        WebResource.Builder builder = app().getResource(true)
 -            .queryParam("access_token", this.getAdminToken().getAccessToken())
 -            .accept(MediaType.APPLICATION_JSON)
 -            .type(MediaType.TEXT_PLAIN_TYPE);
 +        User user = new User("shawn","shawn","shawn@email.com","aliensquirrel");
 +        this.app().collection("users").post(user);
 +        Token token = this.app().token().post(new Token("shawn","aliensquirrel"));
 +        Map<String, String> data = hashMap( "name", "Solitaire2" );
  
 -        ClientResponse clientResponse = builder.post(ClientResponse.class, json);
 +        String json = JsonUtils.mapToFormattedJsonString( data );
  
 -        assertEquals(200, clientResponse.getStatus());
 +        DefaultHttpClient client = new DefaultHttpClient();
  
 -        MultivaluedMap<String, String> headers = clientResponse.getHeaders();
 +        HttpHost host = new HttpHost( super.getBaseURI().getHost(), super.getBaseURI().getPort() );
  
 -        List<String> contentType = headers.get("Content-Type");
 -        assertEquals(1, contentType.size());
 -        assertEquals(MediaType.APPLICATION_JSON, contentType.get(0));
 +        HttpPost post = new HttpPost( String.format("/%s/%s/games", this.clientSetup.getOrganization().getName(), this.clientSetup.getAppName()) );
 +
 +        post.setEntity( new StringEntity( json ) );
 +        post.setHeader( HttpHeaders.AUTHORIZATION, "Bearer " + token.getAccessToken() );
 +        post.setHeader( HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON );
 +        post.setHeader( HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN );
 +
 +        HttpResponse rsp = client.execute( host, post );
 +
 +        printResponse( rsp );
 +
 +        assertEquals( 200, rsp.getStatusLine().getStatusCode() );
  
-         Header[] headers = rsp.getHeaders( HttpHeaders.CONTENT_TYPE );
- 
-         assertEquals( 1, headers.length );
- 
-         assertEquals( MediaType.APPLICATION_JSON, headers[0].getValue() );
      }
  
  
@@@ -259,52 -183,31 +232,54 @@@
       */
      @Test
      public void noAcceptGet() throws Exception {
 +        User user = new User("shawn","shawn","shawn@email.com","aliensquirrel");
 +        this.app().collection("users").post(user);
 +        Token token = this.app().token().post(new Token("shawn", "aliensquirrel"));
 +        Map<String, String> data = hashMap("name", "bar");
 +
 +        String json = JsonUtils.mapToFormattedJsonString( data );
 +
 +        DefaultHttpClient client = new DefaultHttpClient();
 +
 +        HttpHost host = new HttpHost( super.getBaseURI().getHost(), super.getBaseURI().getPort() );
 +
 +        HttpPost post = new HttpPost( String.format("/%s/%s/games", this.clientSetup.getOrganization().getName(), this.clientSetup.getAppName()) );
 +
 +        post.setEntity( new StringEntity( json ) );
 +        post.setHeader( HttpHeaders.AUTHORIZATION, "Bearer " + token.getAccessToken() );
 +        post.setHeader( HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON );
 +        post.setHeader( HttpHeaders.CONTENT_TYPE, "*/*" );
 +
 +        HttpResponse rsp = client.execute( host, post );
 +
-         printResponse( rsp );
  
-         assertEquals( 200, rsp.getStatusLine().getStatusCode() );
+         WebResource.Builder builder = app().collection("games").getResource(true)
+             .queryParam("access_token", this.getAdminToken().getAccessToken())
+             .type(MediaType.APPLICATION_JSON_TYPE);
  
-         Header[] headers = rsp.getHeaders( HttpHeaders.CONTENT_TYPE );
+         ClientResponse clientResponse = builder.post(ClientResponse.class, JsonUtils.mapToJsonString(hashMap("name", "bar")));
  
-         assertEquals( 1, headers.length );
+         assertEquals(200, clientResponse.getStatus());
  
-         assertEquals( MediaType.APPLICATION_JSON, headers[0].getValue() );
+         MultivaluedMap<String, String> headers = clientResponse.getHeaders();
+ 
+         List<String> contentType = headers.get("Content-Type");
+         assertEquals(1, contentType.size());
+         assertEquals(MediaType.APPLICATION_JSON, contentType.get(0));
  
          //do the get with no content type, it should get set to application/json
 +        HttpPost get = new HttpPost( String.format("/%s/%s/games", this.clientSetup.getOrganization().getName(), this.clientSetup.getAppName()) );
 +
 +        get.setHeader( HttpHeaders.AUTHORIZATION, "Bearer " + token.getAccessToken() );
+         clientResponse = builder.get(ClientResponse.class);
  
-         rsp = client.execute( host, get );
- 
-         printResponse( rsp );
- 
-         assertEquals( 200, rsp.getStatusLine().getStatusCode() );
+         assertEquals(200, clientResponse.getStatus());
  
-         headers = rsp.getHeaders( HttpHeaders.CONTENT_TYPE );
+         headers = clientResponse.getHeaders();
  
-         assertEquals( 1, headers.length );
- 
-         assertEquals( MediaType.APPLICATION_JSON, headers[0].getValue() );
+         contentType = headers.get("Content-Type");
+         assertEquals(1, contentType.size());
+         assertEquals(MediaType.APPLICATION_JSON, contentType.get(0));
      }
  
  

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
index c9c27e1,7955ebc..e35d339
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
@@@ -25,44 -21,71 +21,71 @@@ import com.fasterxml.jackson.databind.J
  import com.sun.jersey.api.client.ClientResponse.Status;
  import com.sun.jersey.api.client.UniformInterfaceException;
  import com.sun.jersey.api.representation.Form;
+ import org.apache.commons.lang.RandomStringUtils;
+ import org.apache.usergrid.management.OrganizationOwnerInfo;
+ import org.apache.usergrid.persistence.index.utils.UUIDUtils;
 -import org.apache.usergrid.rest.AbstractRestIT;
+ import org.apache.usergrid.rest.management.organizations.OrganizationsResource;
++import org.apache.usergrid.rest.test.resource2point0.model.*;
++import org.apache.usergrid.rest.test.resource2point0.model.Collection;
+ import org.junit.Test;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
  
+ import javax.ws.rs.core.MediaType;
  import java.io.IOException;
+ import java.util.*;
  
++import static org.apache.usergrid.rest.AbstractRestIT.logNode;
+ import static org.apache.usergrid.rest.management.ManagementResource.USERGRID_CENTRAL_URL;
  import static org.apache.usergrid.utils.MapUtils.hashMap;
- 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.*;
  
 -
  /**
   * @author tnine
   */
--
 -public class ManagementResourceIT extends AbstractRestIT {
 +public class ManagementResourceIT extends org.apache.usergrid.rest.test.resource2point0.AbstractRestIT {
  
+     private static final Logger logger = LoggerFactory.getLogger(ManagementResourceIT.class);
+ 
 -
      public ManagementResourceIT() throws Exception {
  
      }
  
  
      /**
+      * Test if we can reset our password as an admin
+      */
+     @Test
+     public void setSelfAdminPasswordAsAdmin() {
+ 
+         String newPassword = "foo";
+ 
 -        Map<String, String> data = new HashMap<String, String>();
++        Map<String, Object> data = new HashMap<>();
+         data.put( "newpassword", newPassword );
+         data.put( "oldpassword", "test" );
+ 
 -        // change the password as admin. The old password isn't required
 -        JsonNode node = resource().path( "/management/users/test/password" ).accept( MediaType.APPLICATION_JSON )
 -                                  .type( MediaType.APPLICATION_JSON_TYPE ).post( JsonNode.class, data );
 -
 -        assertNull( getError( node ) );
++        JsonNode responseNode = resource().path( "/management/users/test/password" )
++            .accept( MediaType.APPLICATION_JSON )
++            .type( MediaType.APPLICATION_JSON_TYPE )
++            .post( JsonNode.class, data );
++        logNode( responseNode );
+ 
 -        adminAccessToken = mgmtToken( "test", newPassword );
++        String adminAccessToken = context().getToken().getAccessToken();
+ 
+         data.put( "oldpassword", newPassword );
+         data.put( "newpassword", "test" );
+ 
 -        node = resource().path( "/management/users/test/password" ).queryParam( "access_token", adminAccessToken )
 -                         .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
 -                         .post( JsonNode.class, data );
++        responseNode = resource().path( "/management/users/test/password" )
++            .queryParam( "access_token", adminAccessToken )
++            .accept( MediaType.APPLICATION_JSON )
++            .type( MediaType.APPLICATION_JSON_TYPE )
++            .post( JsonNode.class, data );
+ 
 -        assertNull( getError( node ) );
++        logNode( responseNode );
+     }
+ 
+ 
 -
+     /**
       * Test that admins can't view organizations they're not authorized to view.
       */
      @Test
@@@ -211,54 -251,488 +234,490 @@@
          Map<String, String> actorMap = new HashMap<String, String>();
          actorMap.put( "displayName", name );
          actorMap.put( "username", user );
 -        activityPayload.put( "actor", actorMap );
 -        resource().path( "/" + orgInfo.getName() + "/" + appInfo.getName() + "/users/" + user + "/activities" )
 -                  .queryParam( "access_token", this.adminToken() ).accept( MediaType.APPLICATION_JSON )
 -                  .type( MediaType.APPLICATION_JSON_TYPE ).post( String.class, activityPayload );
 +        activityPayload.put("actor", actorMap);
 +        Entity entity = this.app().collection("users").entity(user).collection("activities").post(new Entity(activityPayload));
- 
      }
  
  
      @Test
      public void mgmtCreateAndGetApplication() throws Exception {
  
 -        Map<String, String> data = new HashMap<String, String>();
 -        data.put( "name", "mgmt-org-app" );
  
 -        String orgName = orgInfo.getName();
  
          // POST /applications
 -        JsonNode appdata = mapper.readTree( resource().path( "/management/orgs/" + orgName + "/applications" )
 -                                                      .queryParam( "access_token", this.adminToken() )
 -                                                      .accept( MediaType.APPLICATION_JSON )
 -                                                      .type( MediaType.APPLICATION_JSON_TYPE )
 -                                                      .post( String.class, data ) );
 -        logNode( appdata );
 -        appdata = getEntity( appdata, 0 );
 -
 -        refreshIndex( this.orgInfo.getName(), this.appInfo.getName() );
 -
 -        assertEquals( orgName.toLowerCase() + "/mgmt-org-app", appdata.get( "name" ).asText() );
 -        assertNotNull( appdata.get( "metadata" ) );
 -        assertNotNull( appdata.get( "metadata" ).get( "collections" ) );
 -        assertNotNull( appdata.get( "metadata" ).get( "collections" ).get( "roles" ) );
 -        assertNotNull( appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "title" ) );
 -        assertEquals( "Roles", appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "title" ).asText() );
 -        assertEquals( 3, appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "count" ).asInt() );
 -
 -        refreshIndex( this.orgInfo.getName(), this.appInfo.getName() );
 +        ApiResponse apiResponse = management().orgs().organization(clientSetup.getOrganizationName()).app().post(new Application("mgmt-org-app"));
 +
 +
 +        refreshIndex();
 +
 +        Entity appdata = apiResponse.getEntities().get(0);
 +        assertEquals((clientSetup.getOrganizationName() + "/mgmt-org-app").toLowerCase(), appdata.get("name").toString().toLowerCase());
 +        assertNotNull(appdata.get("metadata"));
 +        Map metadata =(Map) appdata.get( "metadata" );
 +        assertNotNull(metadata.get("collections"));
 +        Map collections =  ((Map)metadata.get("collections"));
 +        assertNotNull(collections.get("roles"));
 +        Map roles =(Map) collections.get("roles");
 +        assertNotNull(roles.get("title"));
 +        assertEquals("Roles", roles.get("title").toString());
 +        assertEquals(3, roles.size());
 +
 +        refreshIndex(   );
  
          // GET /applications/mgmt-org-app
 -        appdata = mapper.readTree(
 -                resource().path( "/management/orgs/" + orgInfo.getUuid() + "/applications/mgmt-org-app" )
 -                          .queryParam( "access_token", this.adminToken() )
 -                          .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
 -                          .get( String.class ) );
 -        logNode( appdata );
 -
 -        assertEquals( orgName.toLowerCase(), appdata.get( "organization" ).asText() );
 -        assertEquals( "mgmt-org-app", appdata.get( "applicationName" ).asText() );
 -        assertEquals( "http://sometestvalue/" + orgName.toLowerCase() + "/mgmt-org-app",
 -                appdata.get( "uri" ).textValue() );
 -        appdata = getEntity( appdata, 0 );
 -
 -        assertEquals( orgName.toLowerCase() + "/mgmt-org-app", appdata.get( "name" ).asText() );
 -        assertEquals( "Roles", appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "title" ).asText() );
 -        assertEquals( 3, appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "count" ).asInt() );
 +
 +
 +        Entity app = management().orgs().organization(clientSetup.getOrganizationName()).app().addToPath("mgmt-org-app").get();
 +
 +
 +        assertEquals(this.clientSetup.getOrganizationName().toLowerCase(), app.get("organization").toString());
 +        assertEquals( "mgmt-org-app", app.get( "applicationName" ).toString() );
 +        assertEquals( "http://sometestvalue/" + this.clientSetup.getOrganizationName().toLowerCase() + "/mgmt-org-app",
 +            app.get( "uri" ).toString() );
 +
 +        assertEquals( clientSetup.getOrganizationName().toLowerCase() + "/mgmt-org-app", app.get( "name" ).toString() );
 +        metadata =(Map) appdata.get( "metadata" );
 +        collections =  ((Map)metadata.get("collections"));
 +        roles =(Map) collections.get("roles");
 +
 +        assertEquals( "Roles", roles.get("title").toString() );
 +        assertEquals(3, roles.size());
      }
+ 
+     @Test
+     public void tokenTtl() throws Exception {
+ 
+         long ttl = 2000;
+ 
+         JsonNode node = resource().path( "/management/token" ).queryParam( "grant_type", "password" )
+                                   .queryParam( "username", "test@usergrid.com" ).queryParam( "password", "test" )
+                                   .queryParam( "ttl", String.valueOf( ttl ) ).accept( MediaType.APPLICATION_JSON )
+                                   .get( JsonNode.class );
+ 
+         long startTime = System.currentTimeMillis();
+ 
+         String token = node.get( "access_token" ).textValue();
+ 
+         assertNotNull( token );
+ 
+         JsonNode userdata = resource().path( "/management/users/test@usergrid.com" ).queryParam( "access_token", token )
+                                       .accept( MediaType.APPLICATION_JSON ).get( JsonNode.class );
+ 
+         assertEquals( "test@usergrid.com", userdata.get( "data" ).get( "email" ).asText() );
+ 
+         // wait for the token to expire
+         Thread.sleep( ttl - (System.currentTimeMillis() - startTime) + 1000 );
+ 
+         Status responseStatus = null;
+         try {
+             userdata = resource().path( "/management/users/test@usergrid.com" ).accept( MediaType.APPLICATION_JSON )
+                                  .type( MediaType.APPLICATION_JSON_TYPE ).get( JsonNode.class );
+         }
+         catch ( UniformInterfaceException uie ) {
+             responseStatus = uie.getResponse().getClientResponseStatus();
+         }
+ 
+         assertEquals( Status.UNAUTHORIZED, responseStatus );
+     }
+ 
+ 
+     @Test
+     public void token() throws Exception {
+         JsonNode node = resource().path( "/management/token" ).queryParam( "grant_type", "password" )
+                                   .queryParam( "username", "test@usergrid.com" ).queryParam( "password", "test" )
+                                   .accept( MediaType.APPLICATION_JSON ).get( JsonNode.class );
+ 
+         logNode( node );
+         String token = node.get( "access_token" ).textValue();
+         assertNotNull( token );
+ 
+         // set an organization property
+         HashMap<String, Object> payload = new HashMap<String, Object>();
+         Map<String, Object> properties = new HashMap<String, Object>();
+         properties.put( "securityLevel", 5 );
+         payload.put( OrganizationsResource.ORGANIZATION_PROPERTIES, properties );
+         node = resource().path( "/management/organizations/test-organization" )
 -                         .queryParam( "access_token", superAdminToken() ).accept( MediaType.APPLICATION_JSON )
 -                         .type( MediaType.APPLICATION_JSON_TYPE ).put( JsonNode.class, payload );
++            .queryParam( "access_token", clientSetup.getSuperuserToken().getAccessToken() )
++            .accept( MediaType.APPLICATION_JSON )
++            .type( MediaType.APPLICATION_JSON_TYPE )
++            .put( JsonNode.class, payload );
+ 
+         // ensure the organization property is included
+         node = resource().path( "/management/token" ).queryParam( "access_token", token )
+                          .accept( MediaType.APPLICATION_JSON ).get( JsonNode.class );
+         logNode( node );
+ 
+         JsonNode securityLevel = node.findValue( "securityLevel" );
+         assertNotNull( securityLevel );
+         assertEquals( 5L, securityLevel.asLong() );
+     }
+ 
+ 
+     @Test
+     public void meToken() throws Exception {
+         JsonNode node = resource().path( "/management/me" ).queryParam( "grant_type", "password" )
+                                   .queryParam( "username", "test@usergrid.com" ).queryParam( "password", "test" )
+                                   .accept( MediaType.APPLICATION_JSON ).get( JsonNode.class );
+ 
+         logNode( node );
+         String token = node.get( "access_token" ).textValue();
+         assertNotNull( token );
+ 
+         node = resource().path( "/management/me" ).queryParam( "access_token", token )
+                          .accept( MediaType.APPLICATION_JSON ).get( JsonNode.class );
+         logNode( node );
+ 
+         assertNotNull( node.get( "passwordChanged" ) );
+         assertNotNull( node.get( "access_token" ) );
+         assertNotNull( node.get( "expires_in" ) );
+         JsonNode userNode = node.get( "user" );
+         assertNotNull( userNode );
+         assertNotNull( userNode.get( "uuid" ) );
+         assertNotNull( userNode.get( "username" ) );
+         assertNotNull( userNode.get( "email" ) );
+         assertNotNull( userNode.get( "name" ) );
+         assertNotNull( userNode.get( "properties" ) );
+         JsonNode orgsNode = userNode.get( "organizations" );
+         assertNotNull( orgsNode );
+         JsonNode orgNode = orgsNode.get( "test-organization" );
+         assertNotNull( orgNode );
+         assertNotNull( orgNode.get( "name" ) );
+         assertNotNull( orgNode.get( "properties" ) );
+     }
+ 
+ 
+     @Test
+     public void meTokenPost() throws Exception {
+         Map<String, String> payload =
+                 hashMap( "grant_type", "password" ).map( "username", "test@usergrid.com" ).map( "password", "test" );
+ 
+         JsonNode node = resource().path( "/management/me" ).accept( MediaType.APPLICATION_JSON )
+                                   .type( MediaType.APPLICATION_JSON_TYPE ).post( JsonNode.class, payload );
+ 
+         logNode( node );
+         String token = node.get( "access_token" ).textValue();
+ 
+         assertNotNull( token );
+ 
+         node = resource().path( "/management/me" ).queryParam( "access_token", token )
+                          .accept( MediaType.APPLICATION_JSON ).get( JsonNode.class );
+         logNode( node );
+     }
+ 
+ 
+     @Test
+     public void meTokenPostForm() {
+ 
+         Form form = new Form();
+         form.add( "grant_type", "password" );
+         form.add( "username", "test@usergrid.com" );
+         form.add( "password", "test" );
+ 
+         JsonNode node = resource().path( "/management/me" ).accept( MediaType.APPLICATION_JSON )
+                                   .type( MediaType.APPLICATION_FORM_URLENCODED_TYPE )
+                                   .entity( form, MediaType.APPLICATION_FORM_URLENCODED_TYPE ).post( JsonNode.class );
+ 
+         logNode( node );
+         String token = node.get( "access_token" ).textValue();
+ 
+         assertNotNull( token );
+ 
+         node = resource().path( "/management/me" ).queryParam( "access_token", token )
+                          .accept( MediaType.APPLICATION_JSON ).get( JsonNode.class );
+         logNode( node );
+     }
+ 
+ 
+     @Test
+     public void ttlNan() throws Exception {
+ 
+         Map<String, String> payload =
+                 hashMap( "grant_type", "password" ).map( "username", "test@usergrid.com" ).map( "password", "test" )
+                                                    .map( "ttl", "derp" );
+ 
+         Status responseStatus = null;
+         try {
+             resource().path( "/management/token" ).accept( MediaType.APPLICATION_JSON )
+                       .type( MediaType.APPLICATION_JSON_TYPE ).post( JsonNode.class, payload );
+         }
+         catch ( UniformInterfaceException uie ) {
+             responseStatus = uie.getResponse().getClientResponseStatus();
+         }
+ 
+         assertEquals( Status.BAD_REQUEST, responseStatus );
+     }
+ 
+ 
+     @Test
+     public void ttlOverMax() throws Exception {
+ 
+         Map<String, String> payload =
+                 hashMap( "grant_type", "password" ).map( "username", "test@usergrid.com" ).map( "password", "test" )
+                                                    .map( "ttl", Long.MAX_VALUE + "" );
+ 
+         Status responseStatus = null;
+ 
+         try {
+             resource().path( "/management/token" ).accept( MediaType.APPLICATION_JSON )
+                       .type( MediaType.APPLICATION_JSON_TYPE ).post( JsonNode.class, payload );
+         }
+         catch ( UniformInterfaceException uie ) {
+             responseStatus = uie.getResponse().getClientResponseStatus();
+         }
+ 
+         assertEquals( Status.BAD_REQUEST, responseStatus );
+     }
+ 
+ 
+     @Test
+     public void revokeToken() throws Exception {
 -        String token1 = super.adminToken();
 -        String token2 = super.adminToken();
++        String token1 = context().getToken().getAccessToken();
++        String token2 = context().getToken().getAccessToken();
+ 
 -        JsonNode response = resource().path( "/management/users/test" ).queryParam( "access_token", token1 )
 -                                      .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
 -                                      .get( JsonNode.class );
++        JsonNode response = resource().path( "/management/users/test" )
++            .queryParam( "access_token", token1 )
++            .accept( MediaType.APPLICATION_JSON )
++            .type( MediaType.APPLICATION_JSON_TYPE )
++            .get( JsonNode.class );
+ 
+         assertEquals( "test@usergrid.com", response.get( "data" ).get( "email" ).asText() );
+ 
 -        response = resource().path( "/management/users/test" ).queryParam( "access_token", token2 )
 -                             .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
 -                             .get( JsonNode.class );
++        response = resource().path( "/management/users/test" )
++            .queryParam( "access_token", token2 )
++            .accept( MediaType.APPLICATION_JSON )
++            .type( MediaType.APPLICATION_JSON_TYPE )
++            .get( JsonNode.class );
+ 
+         assertEquals( "test@usergrid.com", response.get( "data" ).get( "email" ).asText() );
+ 
+         // now revoke the tokens
 -        response =
 -                resource().path( "/management/users/test/revoketokens" ).queryParam( "access_token", superAdminToken() )
 -                          .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
 -                          .post( JsonNode.class );
++        response = resource().path( "/management/users/test/revoketokens" )
++                    .queryParam( "access_token", this.clientSetup.getSuperuserToken().getAccessToken() )
++                    .accept( MediaType.APPLICATION_JSON )
++                    .type( MediaType.APPLICATION_JSON_TYPE )
++                    .post( JsonNode.class );
+ 
+         // the tokens shouldn't work
+ 
+         Status status = null;
+ 
+         try {
+             response = resource().path( "/management/users/test" ).queryParam( "access_token", token1 )
+                                  .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+                                  .get( JsonNode.class );
+         }
+         catch ( UniformInterfaceException uie ) {
+             status = uie.getResponse().getClientResponseStatus();
+         }
+ 
+         assertEquals( Status.UNAUTHORIZED, status );
+ 
+         status = null;
+ 
+         try {
+             response = resource().path( "/management/users/test" ).queryParam( "access_token", token2 )
+                                  .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+                                  .get( JsonNode.class );
+         }
+         catch ( UniformInterfaceException uie ) {
+             status = uie.getResponse().getClientResponseStatus();
+         }
+ 
+         assertEquals( Status.UNAUTHORIZED, status );
+ 
 -        String token3 = super.adminToken();
 -        String token4 = super.adminToken();
++        String token3 = context().getToken().getAccessToken();
++        String token4 = context().getToken().getAccessToken();
+ 
+         response = resource().path( "/management/users/test" ).queryParam( "access_token", token3 )
+                              .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+                              .get( JsonNode.class );
+ 
+         assertEquals( "test@usergrid.com", response.get( "data" ).get( "email" ).asText() );
+ 
+         response = resource().path( "/management/users/test" ).queryParam( "access_token", token4 )
+                              .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+                              .get( JsonNode.class );
+ 
+         assertEquals( "test@usergrid.com", response.get( "data" ).get( "email" ).asText() );
+ 
+         // now revoke the token3
+         response = resource().path( "/management/users/test/revoketoken" ).queryParam( "access_token", token3 )
+                              .queryParam( "token", token3 ).accept( MediaType.APPLICATION_JSON )
+                              .type( MediaType.APPLICATION_JSON_TYPE ).post( JsonNode.class );
+ 
+         // the token3 shouldn't work
+ 
+         status = null;
+ 
+         try {
+             response = resource().path( "/management/users/test" ).queryParam( "access_token", token3 )
+                                  .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+                                  .get( JsonNode.class );
+         }
+         catch ( UniformInterfaceException uie ) {
+             status = uie.getResponse().getClientResponseStatus();
+         }
+ 
+         assertEquals( Status.UNAUTHORIZED, status );
+ 
+         status = null;
+ 
+         try {
+             response = resource().path( "/management/users/test" ).queryParam( "access_token", token4 )
+                                  .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+                                  .get( JsonNode.class );
+ 
+             status = Status.OK;
+         }
+         catch ( UniformInterfaceException uie ) {
+             status = uie.getResponse().getClientResponseStatus();
+         }
+ 
+         assertEquals( Status.OK, status );
+     }
+ 
+ 
+     @Test
+     public void testValidateExternalToken() throws Exception {
+ 
+         // create a new admin user, get access token
+ 
+         String rand = RandomStringUtils.randomAlphanumeric(10);
+         final String username = "user_" + rand;
 -        OrganizationOwnerInfo orgInfo = setup.getMgmtSvc().createOwnerAndOrganization(
 -                username, username, "Test User", username + "@example.com", "password" );
++        management().orgs().post(
++            new Organization( username, username, username+"@example.com", username, "password", null ) );
+ 
+         Map<String, Object> loginInfo = new HashMap<String, Object>() {{
+             put("username", username );
+             put("password", "password");
+             put("grant_type", "password");
+         }};
+         JsonNode accessInfoNode = resource().path("/management/token")
+             .type( MediaType.APPLICATION_JSON_TYPE )
+             .post( JsonNode.class, loginInfo );
+         String accessToken = accessInfoNode.get( "access_token" ).textValue();
+ 
+         // set the Usergrid Central SSO URL because Tomcat port is dynamically assigned
+ 
 -        String suToken = superAdminToken();
++        String suToken = clientSetup.getSuperuserToken().getAccessToken();
+         Map<String, String> props = new HashMap<String, String>();
+         props.put( USERGRID_CENTRAL_URL, getBaseURI().toURL().toExternalForm() );
+         resource().path( "/testproperties" )
+                 .queryParam( "access_token", suToken)
+                 .accept( MediaType.APPLICATION_JSON )
+                 .type( MediaType.APPLICATION_JSON_TYPE )
+                 .post( props );
+ 
+         // attempt to validate the token, must be valid
+ 
+         JsonNode validatedNode = resource().path( "/management/externaltoken" )
+             .queryParam( "access_token", suToken ) // as superuser
+             .queryParam( "ext_access_token", accessToken )
+             .queryParam( "ttl", "1000" )
+             .get( JsonNode.class );
+         String validatedAccessToken = validatedNode.get( "access_token" ).textValue();
+         assertEquals( accessToken, validatedAccessToken );
+ 
+         // attempt to validate an invalid token, must fail
+ 
+         try {
+             resource().path( "/management/externaltoken" )
+                 .queryParam( "access_token", suToken ) // as superuser
+                 .queryParam( "ext_access_token", "rubbish_token")
+                 .queryParam( "ttl", "1000" )
+                 .get( JsonNode.class );
+             fail("Validation should have failed");
+         } catch ( UniformInterfaceException actual ) {
+             assertEquals( 404, actual.getResponse().getStatus() );
+             String errorMsg = actual.getResponse().getEntity( JsonNode.class ).get( "error_description" ).toString();
+             logger.error( "ERROR: " + errorMsg );
+             assertTrue( errorMsg.contains( "Cannot find Admin User" ) );
+         }
+ 
+ 
+ 
+         // TODO: how do we test the create new user and organization case?
+ 
+ 
+ 
+         // unset the Usergrid Central SSO URL so it does not interfere with other tests
+ 
+         props.put( USERGRID_CENTRAL_URL, "" );
+         resource().path( "/testproperties" )
+                 .queryParam( "access_token", suToken)
+                 .accept( MediaType.APPLICATION_JSON )
+                 .type( MediaType.APPLICATION_JSON_TYPE )
+                 .post( props );
+ 
+     }
+ 
+ 
+     @Test
+     public void testSuperuserOnlyWhenValidateExternalTokensEnabled() throws Exception {
+ 
+         // create an org and an admin user
+ 
+         String rand = RandomStringUtils.randomAlphanumeric( 10 );
+         final String username = "user_" + rand;
 -        OrganizationOwnerInfo orgInfo = setup.getMgmtSvc().createOwnerAndOrganization(
 -                username, username, "Test User", username + "@example.com", "password" );
++        management().orgs().post(
++            new Organization( username, username, username+"@example.com", username, "password", null ) );
+ 
+         // turn on validate external tokens by setting the usergrid.central.url
+ 
 -        String suToken = superAdminToken();
++        String suToken = clientSetup.getSuperuserToken().getAccessToken();
+         Map<String, String> props = new HashMap<String, String>();
+         props.put( USERGRID_CENTRAL_URL, getBaseURI().toURL().toExternalForm());
+         resource().path( "/testproperties" )
+                 .queryParam( "access_token", suToken)
+                 .accept( MediaType.APPLICATION_JSON )
+                 .type( MediaType.APPLICATION_JSON_TYPE )
+                 .post( props );
+ 
+         // calls to login as an Admin User must now fail
+ 
+         try {
+ 
+             Map<String, Object> loginInfo = new HashMap<String, Object>() {{
+                 put("username", username );
+                 put("password", "password");
+                 put("grant_type", "password");
+             }};
+             JsonNode accessInfoNode = resource().path("/management/token")
+                     .type( MediaType.APPLICATION_JSON_TYPE )
+                     .post( JsonNode.class, loginInfo );
+             fail("Login as Admin User must fail when validate external tokens is enabled");
+ 
+         } catch ( UniformInterfaceException actual ) {
+             assertEquals( 400, actual.getResponse().getStatus() );
+             String errorMsg = actual.getResponse().getEntity( JsonNode.class ).get( "error_description" ).toString();
+             logger.error( "ERROR: " + errorMsg );
+             assertTrue( errorMsg.contains( "Admin Users must login via" ));
+ 
+         } catch ( Exception e ) {
+             fail( "We expected a UniformInterfaceException" );
+         }
+ 
+         // login as superuser must succeed
+ 
+         Map<String, Object> loginInfo = new HashMap<String, Object>() {{
+             put("username", "superuser");
+             put("password", "superpassword");
+             put("grant_type", "password");
+         }};
+         JsonNode accessInfoNode = resource().path("/management/token")
+                 .type( MediaType.APPLICATION_JSON_TYPE )
+                 .post( JsonNode.class, loginInfo );
+         String accessToken = accessInfoNode.get( "access_token" ).textValue();
+         assertNotNull( accessToken );
+ 
+         // turn off validate external tokens by un-setting the usergrid.central.url
+ 
+         props.put( USERGRID_CENTRAL_URL, "" );
+         resource().path( "/testproperties" )
+                 .queryParam( "access_token", suToken)
+                 .accept( MediaType.APPLICATION_JSON )
+                 .type( MediaType.APPLICATION_JSON_TYPE )
+                 .post( props );
+     }
+ 
  }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
index f949da3,1e94a2d..14c81be
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
@@@ -312,14 -301,13 +301,14 @@@ public class RegistrationIT extends Abs
              String adminUserName = "AdminUserFromOtherOrg";
              String adminUserEmail = "AdminUserFromOtherOrg@otherorg.com";
  
-             UserInfo adminUser = setup.getMgmtSvc().createAdminUser(
-                     adminUserEmail, adminUserEmail, adminUserEmail, "password1", true, false );
 -            User adminUser = (User) management().users().post(new User(adminUserEmail, adminUserEmail, adminUserEmail, "password1"));
++            User adminUser = (User) management().users().post(
++                User.class, new User(adminUserEmail, adminUserEmail, adminUserEmail, "password1"));
  
-             refreshIndex("test-organization", "test-app");
+             refreshIndex();
  
-             assertNotNull( adminUser );
-             Message[] msgs = getMessages( "otherorg.com", adminUserName, "password1" );
-             assertEquals( 1, msgs.length );
+             assertNotNull(adminUser);
+             Message[] msgs = getMessages("otherorg.com", adminUserName, "password1");
+             assertEquals(1, msgs.length);
  
              // add existing admin user to org
  

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/AbstractRestIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/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 207a962,e033c2d..c712605
--- 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
@@@ -95,10 -94,16 +99,17 @@@ public class ClientSetup implements Tes
          String methodName = description.getMethodName();
          String name = testClass + "." + methodName;
  
-         restClient.superuserSetup();
-         superuserToken = restClient.management().token().post(Token.class, new Token( superuserName, superuserPassword ) );
-         restClient.management().token().setToken( superuserToken );
- 
+         try {
+             restClient.superuserSetup();
 -            superuserToken = restClient.management().token().post( new Token( superuserName, superuserPassword ) );
++            superuserToken = restClient.management().token().post(Token.class, new Token( superuserName, superuserPassword ) );
++            restClient.management().token().setToken( superuserToken );
+         } catch ( Exception e ) {
+             if ( logger.isDebugEnabled() ) {
+                 logger.debug( "Error creating superuser, may already exist", e );
+             } else {
+                 logger.warn( "Error creating superuser, may already exist");
+             }
+         }
  
          username = "user_"+name + UUIDUtils.newTimeUUID();
          password = username;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/services/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/services/src/main/java/org/apache/usergrid/management/ManagementService.java
----------------------------------------------------------------------

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

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

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4b812547/stack/services/src/test/java/org/apache/usergrid/security/tokens/TokenServiceIT.java
----------------------------------------------------------------------