You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sf...@apache.org on 2015/09/21 00:04:07 UTC

[31/31] usergrid git commit: merge from 1022

merge from 1022


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

Branch: refs/heads/USERGRID-1022
Commit: 684bf2afdc0a8c1dec271736e03b1b9ecb586beb
Parents: a2389e6 549be61
Author: Shawn Feldman <sf...@apache.org>
Authored: Sun Sep 20 18:02:51 2015 -0400
Committer: Shawn Feldman <sf...@apache.org>
Committed: Sun Sep 20 18:02:51 2015 -0400

----------------------------------------------------------------------
 .../usergrid/corepersistence/CoreModule.java    |   4 -
 .../corepersistence/CpEntityManager.java        |  31 +-
 .../corepersistence/CpRelationManager.java      |  27 +-
 .../asyncevents/EventBuilderImpl.java           |  44 +--
 .../corepersistence/index/IndexServiceImpl.java |  26 +-
 .../read/search/CandidateEntityFilter.java      |  15 +-
 .../pipeline/read/search/CandidateIdFilter.java |  14 +-
 .../usergrid/persistence/EntityManager.java     |   2 +
 .../corepersistence/StaleIndexCleanupTest.java  |  14 +-
 .../usergrid/persistence/CollectionIT.java      |  10 +-
 .../usergrid/persistence/PermissionsIT.java     |   7 +-
 .../core/future/FutureObservable.java           |  44 ---
 .../persistence/index/EntityIndexBatch.java     |   8 +-
 .../usergrid/persistence/index/IndexFig.java    |  18 --
 .../persistence/index/guice/IndexModule.java    |   2 +-
 .../index/impl/EsEntityIndexBatchImpl.java      |  21 +-
 .../index/impl/EsEntityIndexFactoryImpl.java    |   8 +-
 .../index/impl/EsEntityIndexImpl.java           |   6 +-
 .../index/impl/EsIndexBufferConsumerImpl.java   | 286 -------------------
 .../index/impl/EsIndexProducerImpl.java         | 218 ++++++++++++++
 .../index/impl/IndexBufferConsumer.java         |  36 ---
 .../index/impl/IndexOperationMessage.java       |  18 --
 .../persistence/index/impl/IndexProducer.java   |  39 +++
 .../index/impl/IndexRefreshCommandImpl.java     |   4 +-
 .../persistence/index/impl/EntityIndexTest.java |  66 ++---
 .../persistence/index/impl/GeoPagingTest.java   |   5 +-
 .../index/impl/IndexLoadTestsIT.java            |   6 +-
 .../usergrid/rest/ApplicationsResource.java     | 166 -----------
 .../apache/usergrid/rest/DatabaseResource.java  |  99 -------
 .../apache/usergrid/rest/SystemResource.java    |  19 +-
 .../rest/system/ApplicationsResource.java       | 168 +++++++++++
 .../usergrid/rest/system/DatabaseResource.java  | 101 +++++++
 .../rest/system/QueueSystemResource.java        |  77 +++++
 .../apache/usergrid/rest/SystemResourceIT.java  |  24 +-
 .../collection/groups/GroupResourceIT.java      |   6 +-
 .../test/resource/endpoints/NamedResource.java  | 163 ++++++-----
 .../test/resource/endpoints/RootResource.java   |   5 +
 .../test/resource/endpoints/SubResource.java    |  37 +++
 .../test/resource/endpoints/SystemResource.java |   7 +-
 .../test/resource/endpoints/UrlResource.java    |   8 +
 .../services/notifications/gcm/GCMAdapter.java  |   7 +-
 .../usergrid/services/roles/RolesService.java   |  12 -
 42 files changed, 956 insertions(+), 922 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/main/java/org/apache/usergrid/rest/SystemResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/main/java/org/apache/usergrid/rest/SystemResource.java
index 3497621,fd85d94..1514e48
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/SystemResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/SystemResource.java
@@@ -24,12 -30,11 +30,15 @@@ import org.slf4j.LoggerFactory
  import org.springframework.context.annotation.Scope;
  import org.springframework.stereotype.Component;
  
+ import org.apache.usergrid.rest.security.annotations.RequireSystemAccess;
+ 
 -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;
 +
  
+ 
  @Path( "/system" )
  @Component
  @Scope( "singleton" )
@@@ -49,12 -54,9 +58,11 @@@ public class SystemResource extends Abs
  
      @RequireSystemAccess
      @GET
 +
      @Path( "superuser/setup" )
-     @JSONP
 -    public JSONWithPadding getSetupSuperuser( @Context UriInfo ui,
 -                                              @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback )
 +    @Produces({MediaType.APPLICATION_JSON, "application/javascript"})
 +    public ApiResponse getSetupSuperuser( @Context UriInfo ui,
 +           @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback )
          throws Exception {
  
          ApiResponse response = createApiResponse();

http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/main/java/org/apache/usergrid/rest/system/ApplicationsResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/main/java/org/apache/usergrid/rest/system/ApplicationsResource.java
index 0000000,724a8cf..82bc4c8
mode 000000,100644..100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/system/ApplicationsResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/system/ApplicationsResource.java
@@@ -1,0 -1,168 +1,168 @@@
+ /*
+  *
+  *  * Licensed to the Apache Software Foundation (ASF) under one or more
+  *  *  contributor license agreements.  The ASF licenses this file to You
+  *  * under the Apache License, Version 2.0 (the "License"); you may not
+  *  * use this file except in compliance with the License.
+  *  * You may obtain a copy of the License at
+  *  *
+  *  *     http://www.apache.org/licenses/LICENSE-2.0
+  *  *
+  *  * Unless required by applicable law or agreed to in writing, software
+  *  * distributed under the License is distributed on an "AS IS" BASIS,
+  *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  *  * See the License for the specific language governing permissions and
+  *  * limitations under the License.  For additional information regarding
+  *  * copyright in this work, please see the NOTICE file in the top level
+  *  * directory of this distribution.
+  *
+  */
+ package org.apache.usergrid.rest.system;
+ 
 -import com.sun.jersey.api.json.JSONWithPadding;
++import com.fasterxml.jackson.jaxrs.json.annotation.JSONP;
+ import org.apache.usergrid.corepersistence.service.StatusService;
+ import org.apache.usergrid.persistence.EntityManager;
+ import org.apache.usergrid.persistence.model.util.UUIDGenerator;
+ import org.apache.usergrid.rest.AbstractContextResource;
+ import org.apache.usergrid.rest.ApiResponse;
+ 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 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.LinkedHashMap;
+ import java.util.Map;
+ import java.util.UUID;
+ import java.util.concurrent.atomic.AtomicInteger;
+ 
+ /**
+  * Classy class class.
+  */
+ @Component
+ @Scope( "singleton" )
+ @Produces( {
+     MediaType.APPLICATION_JSON, "application/javascript", "application/x-javascript", "text/ecmascript",
+     "application/ecmascript", "text/jscript"
+ } )
+ public class ApplicationsResource extends AbstractContextResource {
+ 
+     private static final Logger logger = LoggerFactory.getLogger(ApplicationsResource.class);
+ 
+ 
+     public ApplicationsResource() {
 -
+         logger.info( "ApplicationsResource initialized" );
 -    } {
 -
+     }
+ 
+     @RequireSystemAccess
+     @DELETE
++    @JSONP
+     @Path( "{applicationId}" )
 -    public JSONWithPadding clearApplication( @Context UriInfo ui,
 -                                             @PathParam("applicationId") UUID applicationId,
 -                                             @QueryParam( "confirmApplicationName" ) String confirmApplicationName,
 -                                             @QueryParam( "limit" ) int limit,
 -                                             @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback )
++    public ApiResponse clearApplication(
++        @Context UriInfo ui,
++        @PathParam("applicationId") UUID applicationId,
++        @QueryParam( "confirmApplicationName" ) String confirmApplicationName,
++        @QueryParam( "limit" ) int limit,
++        @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback )
++
+         throws Exception {
+ 
+         if(confirmApplicationName == null){
+             throw new IllegalArgumentException("please make add a QueryString for confirmApplicationName");
+         }
+ 
+         final UUID jobId = UUIDGenerator.newTimeUUID();
+ 
+         final EntityManager em =  emf.getEntityManager(applicationId);
+         final String name =  em.getApplication().getApplicationName();
+         if(!name.toLowerCase().equals(confirmApplicationName.toLowerCase())){
 -            throw new IllegalArgumentException("confirmApplicationName: " + confirmApplicationName + " does not equal " + name);
++            throw new IllegalArgumentException(
++                "confirmApplicationName: " + confirmApplicationName + " does not equal " + name);
+         }
+         final StatusService statusService = injector.getInstance(StatusService.class);
+ 
+         final ApiResponse response = createApiResponse();
+ 
+         response.setAction( "clear application" );
+ 
+         logger.info("clearing up application");
+ 
 -
+         final Thread delete = new Thread() {
+ 
+             @Override
+             public void run() {
+                 final AtomicInteger itemsDeleted = new AtomicInteger(0);
+                 try {
+                     management.deleteAllEntities(applicationId, limit)
+                         .map(id -> itemsDeleted.incrementAndGet())
+                         .doOnNext(count -> {
+                             if( count % 100 == 0 ){
+                                 Map<String,Object> map = new LinkedHashMap<>();
+                                 map.put("count",itemsDeleted.intValue());
+                                 final StatusService statusService = injector.getInstance(StatusService.class);
+                                 statusService.setStatus(applicationId, jobId, StatusService.Status.INPROGRESS,map).subscribe();
+                             }
+                         })
+                         .doOnCompleted(() ->{
+                             Map<String,Object> map = new LinkedHashMap<>();
+                             map.put("count",itemsDeleted.intValue());
+                             final StatusService statusService = injector.getInstance(StatusService.class);
+                             statusService.setStatus(applicationId,jobId, StatusService.Status.COMPLETE,map).subscribe();
+                         })
+                         .subscribe();
+ 
+                 } catch ( Exception e ) {
+                     Map<String,Object> map = new LinkedHashMap<>();
+                     map.put("exception",e);
+                     statusService.setStatus(applicationId,jobId, StatusService.Status.FAILED,map).subscribe();
+                     logger.error( "Failed to delete appid:"+applicationId + " jobid:"+jobId+" count:"+itemsDeleted, e );
+                 }
+             }
+         };
+ 
+         delete.setName("Delete for app : " + applicationId + " job: " + jobId);
+         delete.setDaemon(true);
+         delete.start();
+ 
+         statusService.setStatus(applicationId,jobId, StatusService.Status.STARTED,new LinkedHashMap<>()).subscribe();
+ 
+         Map<String,Object> data = new HashMap<>();
+         data.put("jobId",jobId);
+         data.put("status",StatusService.Status.STARTED);
+         response.setData(data);
+         response.setSuccess();
 -        return new JSONWithPadding( response, callback );
++        return response;
+     }
+ 
+     @RequireSystemAccess
+     @GET
+     @Path( "{applicationId}/job/{jobId}" )
 -    public JSONWithPadding getStatus( @Context UriInfo ui,
 -                                             @PathParam("applicationId") UUID applicationId,
 -                                            @PathParam("jobId") UUID jobId,
 -                                             @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback ) throws Exception{
++    public ApiResponse getStatus(
++        @Context UriInfo ui,
++        @PathParam("applicationId") UUID applicationId,
++        @PathParam("jobId") UUID jobId,
++        @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback ) throws Exception{
++
+         final StatusService statusService = injector.getInstance(StatusService.class);
+ 
+         final ApiResponse response = createApiResponse();
+ 
+         response.setAction( "clear application" );
+ 
+         StatusService.JobStatus jobStatus = statusService.getStatus(applicationId, jobId).toBlocking().lastOrDefault(null);
+ 
+         Map<String,Object> data = new HashMap<>();
+         data.put("jobId",jobId);
+         data.put( "status", jobStatus.getStatus().toString() );
+         data.put( "metadata", jobStatus.getData() );
+         response.setData(data);
+         response.setSuccess();
 -
 -        return new JSONWithPadding( response, callback );
 -
++        return response;
+     }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/main/java/org/apache/usergrid/rest/system/DatabaseResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/main/java/org/apache/usergrid/rest/system/DatabaseResource.java
index 0000000,f24bfc8..b261c96
mode 000000,100644..100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/system/DatabaseResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/system/DatabaseResource.java
@@@ -1,0 -1,100 +1,101 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package org.apache.usergrid.rest.system;
+ 
+ 
+ import javax.ws.rs.DefaultValue;
+ import javax.ws.rs.PUT;
+ import javax.ws.rs.Path;
+ 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 org.apache.usergrid.rest.AbstractContextResource;
+ import org.apache.usergrid.rest.ApiResponse;
++import com.fasterxml.jackson.jaxrs.json.annotation.JSONP;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ import org.springframework.context.annotation.Scope;
+ import org.springframework.stereotype.Component;
+ 
+ import org.apache.usergrid.rest.security.annotations.RequireSystemAccess;
+ 
 -import com.sun.jersey.api.json.JSONWithPadding;
 -
+ 
+ @Component
+ @Scope( "singleton" )
+ @Produces( {
+     MediaType.APPLICATION_JSON, "application/javascript", "application/x-javascript", "text/ecmascript",
+     "application/ecmascript", "text/jscript"
+ } )
+ public class DatabaseResource extends AbstractContextResource {
+ 
+     private static final Logger logger = LoggerFactory.getLogger( DatabaseResource.class );
+ 
+ 
+     public DatabaseResource() {
+         logger.info( "DatabaseResource initialized" );
+     }
+ 
+ 
+     @RequireSystemAccess
+     @PUT
++    @JSONP
+     @Path( "setup" )
 -    public JSONWithPadding runDatabaseSetup( @Context UriInfo ui,
 -                                             @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback )
++    public ApiResponse runDatabaseSetup( @Context UriInfo ui,
++        @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback )
+         throws Exception {
+ 
+         ApiResponse response = createApiResponse();
+         response.setAction( "cassandra setup" );
+ 
+         logger.info( "Setting up Cassandra" );
+ 
+ 
+         emf.setup();
+ 
+ 
+         response.setSuccess();
+ 
 -        return new JSONWithPadding( response, callback );
++        return response;
+     }
+ 
+ 
+     @RequireSystemAccess
+     @PUT
++    @JSONP
+     @Path( "bootstrap" )
 -    public JSONWithPadding runSystemSetup( @Context UriInfo ui,
 -                                           @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback )
++    public ApiResponse runSystemSetup( @Context UriInfo ui,
++        @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback )
+         throws Exception {
+ 
+         ApiResponse response = createApiResponse();
+         response.setAction( "cassandra setup" );
+ 
+         logger.info( "Setting up Cassandra" );
+ 
+ 
+         emf.boostrap();
+         management.setup();
+ 
+         response.setSuccess();
+ 
 -        return new JSONWithPadding( response, callback );
++        return response;
+     }
+ }
+ 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/main/java/org/apache/usergrid/rest/system/QueueSystemResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/main/java/org/apache/usergrid/rest/system/QueueSystemResource.java
index 0000000,0721d89..15bdb34
mode 000000,100644..100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/system/QueueSystemResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/system/QueueSystemResource.java
@@@ -1,0 -1,78 +1,77 @@@
+ /*
+  *
+  *  * Licensed to the Apache Software Foundation (ASF) under one or more
+  *  *  contributor license agreements.  The ASF licenses this file to You
+  *  * under the Apache License, Version 2.0 (the "License"); you may not
+  *  * use this file except in compliance with the License.
+  *  * You may obtain a copy of the License at
+  *  *
+  *  *     http://www.apache.org/licenses/LICENSE-2.0
+  *  *
+  *  * Unless required by applicable law or agreed to in writing, software
+  *  * distributed under the License is distributed on an "AS IS" BASIS,
+  *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  *  * See the License for the specific language governing permissions and
+  *  * limitations under the License.  For additional information regarding
+  *  * copyright in this work, please see the NOTICE file in the top level
+  *  * directory of this distribution.
+  *
+  */
+ package org.apache.usergrid.rest.system;
+ 
+ import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+ import com.fasterxml.jackson.databind.node.ObjectNode;
 -import com.sun.jersey.api.json.JSONWithPadding;
+ import org.apache.usergrid.corepersistence.asyncevents.AsyncEventService;
+ import org.apache.usergrid.rest.AbstractContextResource;
+ import org.apache.usergrid.rest.ApiResponse;
+ 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 javax.ws.rs.*;
+ import javax.ws.rs.core.MediaType;
+ 
+ /**
+  * retrieves queue stats
+  */
+ @Component
+ @Scope( "singleton" )
+ @Produces( {
+     MediaType.APPLICATION_JSON, "application/javascript", "application/x-javascript", "text/ecmascript",
+     "application/ecmascript", "text/jscript"
+ } )
+ public class QueueSystemResource extends AbstractContextResource {
+     private static final Logger logger = LoggerFactory.getLogger(QueueSystemResource.class);
+ 
+     public QueueSystemResource(){logger.info("queue resource initialized");}
+ 
+     /**
+      * Return queue depth of this Usergrid instance in JSON format.
+      *
+      * By Default this end-point will ignore errors but if you call it with ignore_status=false
+      * then it will return HTTP 500 if either the Entity store or the Index for the management
+      * application are in a bad state.
+      *
+      */
+     @GET
+     @RequireSystemAccess
+     @Path("size")
 -    public JSONWithPadding getQueueDepth(
++    public ApiResponse getQueueDepth(
+         @QueryParam("callback") @DefaultValue("callback") String callback ) {
+ 
+         ApiResponse response = createApiResponse();
+         response.setAction( "get queue depth" );
+ 
+         AsyncEventService eventService = injector.getInstance(AsyncEventService.class);
+         ObjectNode node = JsonNodeFactory.instance.objectNode();
+ 
+         node.put("queueDepth", eventService.getQueueDepth());
+ 
+         response.setProperty( "data", node );
+ 
 -        return new JSONWithPadding( response, callback );
++        return response;
+     }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
index ae9a2c2,44fa036..dd2a733
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
@@@ -20,9 -20,11 +20,10 @@@ package org.apache.usergrid.rest
  import org.apache.usergrid.rest.test.resource.AbstractRestIT;
  import org.apache.usergrid.rest.test.resource.model.Entity;
  import org.apache.usergrid.rest.test.resource.model.QueryParameters;
 +import org.junit.Test;
  
  import java.util.LinkedHashMap;
+ import java.util.Map;
  import java.util.UUID;
  
  import static org.junit.Assert.assertEquals;
@@@ -61,8 -64,7 +62,7 @@@ public class SystemResourceIT extends A
          queryParameters.addParam( "access_token", clientSetup.getSuperuserToken().getAccessToken() );
          queryParameters.addParam("confirmApplicationName", this.clientSetup.getAppName());
  
-         org.apache.usergrid.rest.test.resource.model.ApiResponse result =
-             clientSetup.getRestClient().system().applications(this.clientSetup.getAppUuid()).delete( queryParameters);
 -        org.apache.usergrid.rest.test.resource.model.ApiResponse result = clientSetup.getRestClient().system().getSubResource("applications/" + this.clientSetup.getAppUuid()).delete(false, true, queryParameters);
++        org.apache.usergrid.rest.test.resource.model.ApiResponse result = clientSetup.getRestClient().system().getSubResource("applications/" + this.clientSetup.getAppUuid()).delete(false, queryParameters);
  
          assertNotNull(result);
          assertNotNull("ok", result.getStatus());
@@@ -97,6 -99,18 +97,18 @@@
          result = clientSetup.getRestClient().system().database().bootstrap().put( queryParameters );
  
          assertNotNull( result );
-         assertNotNull( "ok", ( String ) result.get( "status" ) );
+         assertNotNull("ok", (String) result.get("status"));
+     }
+     @Test
+     public void testQueueDepth() {
+         QueryParameters queryParameters = new QueryParameters();
+         queryParameters.addParam("access_token", clientSetup.getSuperuserToken().getAccessToken());
+ 
 -        Entity result = clientSetup.getRestClient().system().getSubResource("queue/size").get(Entity.class, queryParameters,false,true);
++        Entity result = clientSetup.getRestClient().system().getSubResource("queue/size").get(Entity.class, queryParameters,false);
+ 
+         assertNotNull( result );
+         assertEquals(0, ((Map) result.get("data")).get("queueDepth"));
+ 
+ 
      }
  }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/groups/GroupResourceIT.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/groups/GroupResourceIT.java
index 0db7601,a1bd03c..abf2be5
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/groups/GroupResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/groups/GroupResourceIT.java
@@@ -296,11 -302,11 +298,11 @@@ public class GroupResourceIT extends Ab
  
          //9. do a GET to make sure the role was deleted
          try {
-             this.app().collection("role").entity(role).get();
+             Entity entity1 = this.app().collection("role").entity(role).get();
              fail("Entity still exists");
 -        } catch (UniformInterfaceException e) {
 +        } catch (ClientErrorException e) {
              //verify the correct error was returned
 -            JsonNode node = mapper.readTree( e.getResponse().getEntity( String.class ));
 +            JsonNode node = mapper.readTree( e.getResponse().readEntity( String.class ));
              assertEquals( "entity_not_found", node.get( "error" ).textValue() );
          }
  

http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/NamedResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/NamedResource.java
index c8979f0,79ecb9e..0254d18
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/NamedResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/NamedResource.java
@@@ -17,6 -17,11 +17,7 @@@
  package org.apache.usergrid.rest.test.resource.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.resource.model.ApiResponse;
  import org.apache.usergrid.rest.test.resource.model.Entity;
  import org.apache.usergrid.rest.test.resource.model.QueryParameters;
@@@ -44,16 -41,17 +45,18 @@@ import java.util.Set
   */
  public class NamedResource implements UrlResource {
  
--    public static String SLASH ="/" ;
++    public static String SLASH = "/";
  
      protected final String name;
      protected final ClientContext context;
 -    /* Stores the path of the parent that called it.
 -    i.e If we had a ApplicationResource ( an instance of a namedResource ) this would contain the OrganizationResource.
 +
-     /** Stores the path of the parent that called it. i.e If we had a ApplicationResource
-        (an instance of a namedResource) this would contain the OrganizationResource. */
++    /**
++     * Stores the path of the parent that called it. i.e If we had a ApplicationResource
++     * (an instance of a namedResource) this would contain the OrganizationResource.
+      */
      protected final UrlResource parent;
  
 -
--    public NamedResource( final String name, final ClientContext context, final UrlResource parent ) {
++    public NamedResource(final String name, final ClientContext context, final UrlResource parent) {
          this.name = name;
          this.context = context;
          this.parent = parent;
@@@ -65,59 -64,57 +68,64 @@@
      }
  
      @Override
 -    public WebResource getResource() {
 -        return getResource(false);
 +    public WebTarget getTarget() {
-         return getTarget( false );
++        return getTarget(false);
++    }
++
++    @Override
++    public ClientContext getContext() {
++        return context;
      }
 -    public WebResource getResource(boolean useToken) {
 -        return getResource(useToken,null);
 +
 +    public WebTarget getTarget(boolean useToken) {
-         return getTarget( useToken, null );
++        return getTarget(useToken, null);
      }
 -    public WebResource getResource(boolean useToken,Token token) {
 -        WebResource resource = parent.getResource().path( getPath() );
 -        token = token !=null ? token : this.context.getToken();
 +
 +    public WebTarget getTarget(boolean useToken, Token token) {
-         WebTarget resource = parent.getTarget().path( getPath() );
-         token = token !=null ? token : this.context.getToken();
++        WebTarget resource = parent.getTarget().path(getPath());
++        token = token != null ? token : this.context.getToken();
          //error checking
          if (token == null) {
              return resource;
          }
-         return useToken ? resource.queryParam("access_token", token.getAccessToken()) :  resource;
 -        return  useToken    ? resource.queryParam("access_token",token.getAccessToken()) :  resource;
++        return useToken ? resource.queryParam("access_token", token.getAccessToken()) : resource;
      }
  
-     protected WebTarget addParametersToResource(WebTarget resource, final QueryParameters parameters){
 -    protected WebResource addParametersToResource(WebResource resource, final QueryParameters parameters){
++    protected WebTarget addParametersToResource(WebTarget resource, final QueryParameters parameters) {
  
--        if(parameters == null){
++        if (parameters == null) {
              return resource;
          }
--        if ( parameters.getQuery() != null ) {
--            resource = resource.queryParam( "ql", parameters.getQuery() );
++        if (parameters.getQuery() != null) {
++            resource = resource.queryParam("ql", parameters.getQuery());
          }
  
--        if ( parameters.getCursor() != null ) {
--           resource = resource.queryParam( "cursor", parameters.getCursor() );
++        if (parameters.getCursor() != null) {
++            resource = resource.queryParam("cursor", parameters.getCursor());
          }
  
--        if ( parameters.getStart() != null ) {
++        if (parameters.getStart() != null) {
              resource = resource.queryParam("start", parameters.getStart().toString());
          }
  
--        if ( parameters.getLimit() != null ) {
++        if (parameters.getLimit() != null) {
              resource = resource.queryParam("limit", parameters.getLimit().toString());
          }
  
--        if ( parameters.getConnections() != null ) {
++        if (parameters.getConnections() != null) {
              resource = resource.queryParam("connections", parameters.getConnections());
          }
          //We can also post the params as queries
--        if ( parameters.getFormPostData().size() > 0){
--            Map<String,String> formData = parameters.getFormPostData();
++        if (parameters.getFormPostData().size() > 0) {
++            Map<String, String> formData = parameters.getFormPostData();
              Set<String> keySet = formData.keySet();
              Iterator<String> keyIterator = keySet.iterator();
  
  
--            while(keyIterator.hasNext()){
++            while (keyIterator.hasNext()) {
                  String key = keyIterator.next();
--                String value = formData.get( key );
--                resource = resource.queryParam( key, value );
++                String value = formData.get(key);
++                resource = resource.queryParam(key, value);
              }
          }
          return resource;
@@@ -167,6 -164,6 +175,7 @@@
      /**
       * 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
       */
@@@ -178,89 -175,112 +187,89 @@@
  
      //For edge cases like Organizations and Tokens
      public ApiResponse post(boolean useToken, Map map, QueryParameters queryParameters) {
--        return post( useToken, ApiResponse.class, map, queryParameters, false );
++        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
       */
 -    //For edge cases like Organizations and Tokens
      public <T> T post(Class<T> type) {
--        return post(true,type,null,null,false);
++        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.
       */
 -    //For edge cases like Organizations and Tokens
      public <T> T post(Class<T> type, Entity requestEntity) {
-         return post( true, type, requestEntity, null, false);
 -        return post(true,type,requestEntity,null,false);
++        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
       */
 -    //For edge cases like Organizations and Tokens
      public <T> T post(Class<T> type, Map requestEntity) {
--        return post(true,type,requestEntity,null,false);
++        return post(true, type, requestEntity, null, false);
  
      }
  
--    public <T> T post( boolean useToken, Class<T> type, Map requestEntity) {
++    public <T> T post(boolean useToken, Class<T> type, Map requestEntity) {
          return post(useToken, 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) {
 +    public <T> T post(Class<T> type, Form form) {
          GenericType<T> gt = new GenericType<>((Class) type);
 -        return getResource()
 +        return getTarget().request()
-             .accept( MediaType.APPLICATION_JSON )
-             .post( javax.ws.rs.client.Entity.entity( form, MediaType.APPLICATION_FORM_URLENCODED_TYPE ), gt );
+             .accept(MediaType.APPLICATION_JSON)
 -            .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
 -            .entity(requestEntity, MediaType.APPLICATION_FORM_URLENCODED_TYPE)
 -            .post(gt.getRawClass());
 -
++            .post(javax.ws.rs.client.Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE), gt);
      }
  
  
 -    //Used for empty posts
 -    public <T> T post( boolean useToken, Class<T> type, Map entity, final QueryParameters queryParameters) {
 -        WebResource resource = getResource(useToken);
 +    // Used for empty posts
-     public <T> T post( boolean useToken, Class<T> type, Map entity, final QueryParameters queryParameters) {
-         WebTarget resource = getTarget( useToken );
-         resource = addParametersToResource( resource, queryParameters );
++    public <T> T post(boolean useToken, Class<T> type, Map entity, final QueryParameters queryParameters) {
++        WebTarget resource = getTarget(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());
 +        Invocation.Builder builder = resource.request()
-             .accept( MediaType.APPLICATION_JSON );
++            .accept(MediaType.APPLICATION_JSON);
  
 +        // it's OK for the entity to be null
 +        GenericType<T> gt = new GenericType<>((Class) type);
-         return builder.post( javax.ws.rs.client.Entity.json( entity ), gt );
++        return builder.post(javax.ws.rs.client.Entity.json(entity), gt);
      }
  
 -    //Used for empty posts
 -    public <T> T post( boolean useToken, Class<T> type, Map entity, final QueryParameters queryParameters, boolean useBasicAuthentication ) {
 -        WebResource resource = getResource(useToken);
 +    // Used for empty posts
-     public <T> T post( boolean useToken, Class<T> type, Map entity,
-                        final QueryParameters queryParameters, boolean useBasicAuthentication ) {
++    public <T> T post(boolean useToken, Class<T> type, Map entity,
++                      final QueryParameters queryParameters, boolean useBasicAuthentication) {
 +
-         WebTarget resource = getTarget( useToken );
++        WebTarget resource = getTarget(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);
  
-         if ( useBasicAuthentication ) {
 -        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);
++        if (useBasicAuthentication) {
 +            HttpAuthenticationFeature feature = HttpAuthenticationFeature.basicBuilder()
-                 .credentials( "superuser", "superpassword" ).build();
-             return resource.register( feature ).request()
-                 .accept( MediaType.APPLICATION_JSON )
-                 .post( javax.ws.rs.client.Entity.json( entity ), gt );
++                .credentials("superuser", "superpassword").build();
++            return resource.register(feature).request()
++                .accept(MediaType.APPLICATION_JSON)
++                .post(javax.ws.rs.client.Entity.json(entity), gt);
          }
  
 -        GenericType<T> gt = new GenericType<>((Class) type);
 -        return builder.post(gt.getRawClass());
 -
 +        return resource.request()
-             .accept( MediaType.APPLICATION_JSON )
-             .post( javax.ws.rs.client.Entity.json( entity ), gt );
++            .accept(MediaType.APPLICATION_JSON)
++            .post(javax.ws.rs.client.Entity.json(entity), gt);
      }
  
      //For edge cases like Organizations and Tokens without any payload
@@@ -271,82 -291,104 +280,88 @@@
  
      //For edge cases like Organizations and Tokens without any payload
      public <T> T get(Class<T> type, boolean useToken) {
--        return get( type, null, 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) {
+         return get(type, queryParameters, true);
      }
 -    public <T> T get(Class<T> type,QueryParameters queryParameters, boolean useToken) {
 -        return get(type,queryParameters,useToken,false);
 -    }
 -    public <T> T get(Class<T> type,QueryParameters queryParameters, boolean useToken, boolean useSupertoken) {
 -        WebResource resource = getResource(useToken);
 -        if(queryParameters!=null) {
 +
 +    public <T> T get(Class<T> type, QueryParameters queryParameters, boolean useToken) {
-         WebTarget resource = getTarget( useToken );
++
++        WebTarget resource = getTarget(useToken);
 +        if (queryParameters != null) {
              resource = addParametersToResource(resource, queryParameters);
          }
 -        if(useSupertoken) {
 -            //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 resource.type(MediaType.APPLICATION_JSON_TYPE)
 -            .accept( MediaType.APPLICATION_JSON )
 -            .get(gt.getRawClass());
+ 
 +        GenericType<T> gt = new GenericType<>((Class) type);
 +        return resource.request()
-             .accept( MediaType.APPLICATION_JSON )
-             .get( gt );
++            .accept(MediaType.APPLICATION_JSON)
++            .get(gt);
      }
  
      public String getMatrix() {
          return "";
      }
  
-     public ApiResponse post( boolean useToken, MultiPart multiPartForm ) {
-         WebTarget resource = getTarget( useToken );
 -    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(boolean useToken, MultiPart multiPartForm) {
++        WebTarget resource = getTarget(useToken);
 +        return resource.request().post(
-             javax.ws.rs.client.Entity.entity( multiPartForm, multiPartForm.getMediaType() ), ApiResponse.class );
++            javax.ws.rs.client.Entity.entity(multiPartForm, multiPartForm.getMediaType()), ApiResponse.class);
      }
  
-     public ApiResponse post( MultiPart multiPartForm ) {
-         return post( true, multiPartForm );
 -    public ApiResponse post( FormDataMultiPart multiPartForm ) {
++    public ApiResponse post(MultiPart multiPartForm) {
+         return post(true, multiPartForm);
      }
  
--    public ApiResponse put( boolean useToken, byte[] data, MediaType type ) {
-         WebTarget resource = getTarget( useToken );
 -        WebResource resource = getResource(useToken);
 -        return resource.type( type ).put(ApiResponse.class, data);
++    public ApiResponse put(boolean useToken, byte[] data, MediaType type) {
++        WebTarget resource = getTarget(useToken);
 +        return resource.request().put(
-             javax.ws.rs.client.Entity.entity(data, type), ApiResponse.class );
++            javax.ws.rs.client.Entity.entity(data, type), ApiResponse.class);
      }
  
--    public ApiResponse put( byte[] data, MediaType type ) {
++    public ApiResponse put(byte[] data, MediaType type) {
          return put(true, data, type);
      }
  
--    public ApiResponse put( boolean useToken, FormDataMultiPart multiPartForm ) {
-         WebTarget resource = getTarget(useToken );
 -        WebResource resource = getResource(useToken);
 -        return resource.type( MediaType.MULTIPART_FORM_DATA_TYPE ).put(ApiResponse.class, multiPartForm);
++    public ApiResponse put(boolean useToken, FormDataMultiPart multiPartForm) {
++        WebTarget resource = getTarget(useToken);
 +        return resource.request().put(
-             javax.ws.rs.client.Entity.entity(multiPartForm, multiPartForm.getMediaType()), ApiResponse.class );
++            javax.ws.rs.client.Entity.entity(multiPartForm, multiPartForm.getMediaType()), ApiResponse.class);
      }
  
--    public ApiResponse put( FormDataMultiPart multiPartForm ) {
++    public ApiResponse put(FormDataMultiPart multiPartForm) {
          return put(true, multiPartForm);
      }
  
--    public InputStream getAssetAsStream( boolean useToken ) {
-         WebTarget resource = getTarget(useToken );
-         return resource.request().accept( MediaType.APPLICATION_OCTET_STREAM_TYPE ).get( InputStream.class );
 -        WebResource resource = getResource(useToken);
 -        return resource.accept( MediaType.APPLICATION_OCTET_STREAM_TYPE ).get(InputStream.class);
++    public InputStream getAssetAsStream(boolean useToken) {
++        WebTarget resource = getTarget(useToken);
++        return resource.request().accept(MediaType.APPLICATION_OCTET_STREAM_TYPE).get(InputStream.class);
      }
  
      public InputStream getAssetAsStream() {
          return getAssetAsStream(true);
      }
  
--    public ApiResponse delete( ) {
++    public ApiResponse delete() {
          return delete(true);
      }
  
--    public ApiResponse delete( boolean useToken ) {
-         return getTarget(useToken).request().delete( ApiResponse.class );
 -        return getResource(useToken).delete(ApiResponse.class);
++    public ApiResponse delete(boolean useToken) {
++        return getTarget(useToken).request().delete(ApiResponse.class);
      }
 -    public ApiResponse delete( boolean useToken, QueryParameters queryParameters ) {
 -        return delete(useToken,false,queryParameters);
 -    }
 -    public ApiResponse delete( boolean useToken, boolean useSupertoken, QueryParameters queryParameters ) {
 -        WebResource resource = getResource(useToken);
 -        if(queryParameters!=null) {
 -            resource = addParametersToResource(resource, queryParameters);
 -        }
 -        if(useSupertoken) {
 -            //added httpBasicauth filter to all setup calls because they all do verification this way.
 -            HTTPBasicAuthFilter httpBasicAuthFilter = new HTTPBasicAuthFilter("superuser", "superpassword");
 -            resource.addFilter(httpBasicAuthFilter);
 -        }
 -        return resource.delete(ApiResponse.class);
 -    }
 -
  
-     public ApiResponse delete( boolean useToken, QueryParameters queryParameters ) {
++    public ApiResponse delete(boolean useToken, QueryParameters queryParameters) {
 +        WebTarget resource = getTarget(useToken);
-         if(queryParameters!=null) {
+ 
 -    public ClientContext getContext(){
 -        return context;
++        if (queryParameters != null) {
 +            resource = addParametersToResource(resource, queryParameters);
 +        }
-         return resource.request().delete( ApiResponse.class );
++        return resource.request().delete(ApiResponse.class);
+     }
+ 
 -    public NamedResource getSubResource(final String path){
 -        return SubResource.getInstance(path,this);
++    public NamedResource getSubResource(String path) {
++        return new NamedResource(path,context,this);
      }
  }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/RootResource.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
index 96e8fa5,1a7b594..82b0468
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
@@@ -58,33 -58,27 +58,38 @@@ public class SystemResource extends Nam
  
          public ApiResponse get(QueryParameters queryParameters){
  
 -            WebResource resource = getResource();
 +            WebTarget resource = getTarget();
              resource = addParametersToResource( resource, queryParameters );
  
 -            //added httpBasicauth filter to all setup calls because they all do verification this way.
 -            HTTPBasicAuthFilter httpBasicAuthFilter = new HTTPBasicAuthFilter( "superuser","superpassword" );
 -            resource.addFilter(httpBasicAuthFilter);
 +            HttpAuthenticationFeature feature = HttpAuthenticationFeature.basicBuilder()
 +                .credentials( "superuser", "superpassword" ).build();
  
 -            return resource.type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )
 +            return resource.register( feature ).request().accept( MediaType.APPLICATION_JSON )
                  .get(ApiResponse.class);
          }
 -        public ApiResponse delete(QueryParameters queryParameters){
  
 -            WebResource resource = getResource();
 +
 +        public ApiResponse delete(QueryParameters queryParameters) {
 +
 +            WebTarget resource = getTarget();
              resource = addParametersToResource( resource, queryParameters );
  
 -            //added httpBasicauth filter to all setup calls because they all do verification this way.
 -            HTTPBasicAuthFilter httpBasicAuthFilter = new HTTPBasicAuthFilter( "superuser","superpassword" );
 -            resource.addFilter(httpBasicAuthFilter);
 +            HttpAuthenticationFeature feature = HttpAuthenticationFeature.basicBuilder()
 +                .credentials( "superuser", "superpassword" ).build();
 +
-             return resource.register( feature ).request().delete( ApiResponse.class );
++            return resource.register(feature).request().delete(ApiResponse.class);
 +
 +        }
+ 
 -            return resource.type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )
 -                .delete(ApiResponse.class);
++        @Override
++        public ClientContext getContext() {
++            return context;
+         }
      }
 +
 +    public ApiResponse put(){
 +        ApiResponse response = getTarget(true).request().accept(MediaType.APPLICATION_JSON)
 +                .put( javax.ws.rs.client.Entity.json(""), ApiResponse.class);
 +        return response;
 +    }
  }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/684bf2af/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/UrlResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/UrlResource.java
index 6e5ee1b,b040aee..d16ae70
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/UrlResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/UrlResource.java
@@@ -17,7 -17,10 +17,9 @@@
  package org.apache.usergrid.rest.test.resource.endpoints;
  
  
+ import org.apache.usergrid.rest.test.resource.state.ClientContext;
+ 
 -import com.sun.jersey.api.client.WebResource;
 -
 +import javax.ws.rs.client.WebTarget;
  
  /**
   * Interface that returns the path that is currently being pointed to.
@@@ -35,7 -38,13 +37,13 @@@ public interface UrlResource 
       * Get the resource
       * @return
       */
 -    public WebResource getResource();
 +    public WebTarget getTarget();
  
+     /**
+      * get context
+      * @return
+      */
+     public ClientContext getContext();
+ 
  
  }