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/06/18 22:28:36 UTC

[2/2] incubator-usergrid git commit: Rewrote all six tests in AssetResourceIT to use the new test framework, and made some small additions to the framework to support assets.

Rewrote all six tests in AssetResourceIT to use the new test framework, and made some small additions to the framework to support assets.


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

Branch: refs/heads/two-dot-o-dev
Commit: 2423840642a58365b3c57c1d6fd4b71e3d242c7c
Parents: 47db44c
Author: Dave Johnson <dm...@apigee.com>
Authored: Thu Jun 18 16:09:23 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Thu Jun 18 16:09:23 2015 -0400

----------------------------------------------------------------------
 .../applications/assets/AssetResourceIT.java    | 407 +++++--------------
 .../endpoints/NamedResource.java                |  48 ++-
 .../endpoints/mgmt/OrgResource.java             |   5 -
 .../endpoints/mgmt/OrganizationResource.java    |  15 +-
 4 files changed, 161 insertions(+), 314 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/24238406/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
index 2b0cbf7..493d140 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
@@ -17,15 +17,14 @@
 package org.apache.usergrid.rest.applications.assets;
 
 
-import com.fasterxml.jackson.databind.JsonNode;
 import com.sun.jersey.multipart.FormDataMultiPart;
 import org.apache.commons.io.IOUtils;
-import org.apache.usergrid.rest.applications.utils.UserRepo;
 import org.apache.usergrid.rest.test.resource2point0.AbstractRestIT;
+import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
+import org.apache.usergrid.rest.test.resource2point0.model.Entity;
 import org.apache.usergrid.services.assets.data.AssetUtils;
 import org.junit.Assert;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,9 +35,7 @@ import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
-import java.util.concurrent.TimeoutException;
 
-import static org.apache.usergrid.utils.JsonUtils.mapToFormattedJsonString;
 import static org.apache.usergrid.utils.MapUtils.hashMap;
 import static org.junit.Assert.*;
 
@@ -47,111 +44,49 @@ public class AssetResourceIT extends AbstractRestIT {
 
     private String access_token;
     private Logger LOG = LoggerFactory.getLogger( AssetResourceIT.class );
-    UserRepo userRepo;
 
     @Before
     public void setup(){
-        userRepo = new UserRepo(this.clientSetup);
         access_token = this.getAdminToken().getAccessToken();
     }
 
 
-    /** @Deprecated Tests legacy API */
-    @Test
-    public void verifyBinaryCrud() throws Exception {
-
-        userRepo.load();
-
-        this.refreshIndex();
-
-        UUID userId = userRepo.getByUserName( "user1" );
-        Map<String, String> payload =
-                hashMap( "path", "my/clean/path" ).map( "owner", userId.toString() ).map( "someprop", "somevalue" );
-
-        String orgAppPath = clientSetup.getOrganizationName() + "/" + clientSetup.getAppName();
-
-        JsonNode node =
-                mapper.readTree( resource().path( orgAppPath + "/assets" ).queryParam( "access_token", access_token )
-                    .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
-                    .post( String.class, payload ) );
-        JsonNode idNode = node.get( "entities" ).get( 0 ).get( "uuid" );
-        UUID id = UUID.fromString( idNode.textValue() );
-        assertNotNull( idNode.textValue() );
-
-        byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/cassandra_eye.jpg" ) );
-        resource().path( orgAppPath + "/assets/" + id.toString() + "/data" )
-                .queryParam( "access_token", access_token ).type( MediaType.APPLICATION_OCTET_STREAM_TYPE ).put( data );
-
-        refreshIndex();
-        InputStream is = resource().path( orgAppPath + "/assets/" + id.toString() + "/data" )
-                .queryParam( "access_token", access_token ).get( InputStream.class );
-
-        byte[] foundData = IOUtils.toByteArray( is );
-        assertEquals( 7979, foundData.length );
-
-        refreshIndex();
-
-        node = mapper.readTree( resource().path( orgAppPath + "/assets/my/clean/path" )
-            .queryParam( "access_token", access_token ).accept( MediaType.APPLICATION_JSON_TYPE )
-            .get( String.class ) );
-
-        idNode = node.get( "entities" ).get( 0 ).get( "uuid" );
-        assertEquals( id.toString(), idNode.textValue() );
-    }
-
-
     @Test
     public void octetStreamOnDynamicEntity() throws Exception {
 
         this.refreshIndex();
 
+        //  post an asset entity
+
         Map<String, String> payload = hashMap( "name", "assetname" );
+        ApiResponse postResponse = pathResource( getOrgAppPath( "foos" )).post( payload );
+        UUID assetId = postResponse.getEntities().get(0).getUuid();
+        assertNotNull(assetId);
 
-        String orgAppPath = clientSetup.getOrganizationName() + "/" + clientSetup.getAppName();
+        // post a binary asset to that entity
 
-        JsonNode node = mapper.readTree( resource().path( orgAppPath + "/foos" )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON )
-            .type( MediaType.APPLICATION_JSON_TYPE )
-            .post( String.class, payload ) );
+        byte[] data = IOUtils.toByteArray( getClass().getResourceAsStream( "/cassandra_eye.jpg" ) );
+        ApiResponse putResponse = pathResource( getOrgAppPath("foos/" + assetId) )
+            .put( data, MediaType.APPLICATION_OCTET_STREAM_TYPE );
 
-        JsonNode idNode = node.get( "entities" ).get( 0 ).get( "uuid" );
-        String uuid = idNode.textValue();
-        assertNotNull( uuid );
+        // check that the asset entity has asset metadata
 
-        byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/cassandra_eye.jpg" ) );
-        resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .type( MediaType.APPLICATION_OCTET_STREAM_TYPE )
-            .put( data );
-
-        // get entity
-        node = mapper.readTree( resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON_TYPE )
-            .get( String.class ));
-        LOG.info( "Node: " + mapToFormattedJsonString( node ) );
-
-        Assert.assertEquals( "image/jpeg", node.findValue( AssetUtils.CONTENT_TYPE ).textValue() );
-        Assert.assertEquals( 7979, node.findValue( "content-length" ).intValue() );
-        idNode = node.get( "entities" ).get( 0 ).get( "uuid" );
-        assertEquals( uuid, idNode.textValue() );
-
-        // get data by UUID
-        InputStream is = resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_OCTET_STREAM_TYPE )
-            .get( InputStream.class );
+        ApiResponse getResponse = pathResource( getOrgAppPath( "foos/" + assetId) ).get( ApiResponse.class );
+        Entity entity = getResponse.getEntities().get(0);
+        Map<String, Object> fileMetadata = (Map<String, Object>)entity.get("file-metadata");
+        Assert.assertEquals( "image/jpeg", fileMetadata.get( "content-type" ) );
+        Assert.assertEquals( 7979,         fileMetadata.get( "content-length" ));
+        assertEquals( assetId, entity.getUuid() );
+
+        // get binary asset by UUID
 
+        InputStream is = pathResource( getOrgAppPath("foos/" + assetId) ).getAssetAsStream();
         byte[] foundData = IOUtils.toByteArray( is );
         assertEquals( 7979, foundData.length );
 
-        refreshIndex();
-
-        // get data by name
-        is = resource().path( orgAppPath + "/foos/assetname" ).queryParam( "access_token", access_token )
-                .accept( MediaType.APPLICATION_OCTET_STREAM_TYPE ).get( InputStream.class );
+        // get binary asset by name
 
+        is = pathResource( getOrgAppPath("foos/assetname") ).getAssetAsStream();
         foundData = IOUtils.toByteArray( is );
         assertEquals( 7979, foundData.length );
     }
@@ -162,37 +97,25 @@ public class AssetResourceIT extends AbstractRestIT {
 
         this.refreshIndex();
 
+        // post data larger than 5M
+
         byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/file-bigger-than-5M" ) );
         FormDataMultiPart form = new FormDataMultiPart().field( "file", data, MediaType.MULTIPART_FORM_DATA_TYPE );
+        ApiResponse putResponse = pathResource(getOrgAppPath("foos")).post(form);
+        this.refreshIndex();
 
-        String orgAppPath = clientSetup.getOrganizationName() + "/" + clientSetup.getAppName();
-
-        JsonNode node = mapper.readTree( resource().path( orgAppPath + "/foos" )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON )
-            .type( MediaType.MULTIPART_FORM_DATA )
-            .post( String.class, form ));
-
-        JsonNode idNode = node.get( "entities" ).get( 0 ).get( "uuid" );
-        String uuid = idNode.textValue();
-        assertNotNull(uuid);
+        UUID assetId = putResponse.getEntities().get(0).getUuid();
+        assertNotNull(assetId);
 
-        this.refreshIndex();
+        // retry until upload complete and we can get the data
 
         int retries = 0;
         boolean done = false;
         byte[] foundData = new byte[0];
-
-        // retry until upload complete
         while ( !done && retries < 30 ) {
 
-            // get data
             try {
-                InputStream is = resource().path( orgAppPath + "/foos/" + uuid )
-                        .queryParam( "access_token", access_token )
-                        .accept( MediaType.APPLICATION_OCTET_STREAM_TYPE )
-                        .get( InputStream.class );
-
+                InputStream is = pathResource( getOrgAppPath( "foos/" + assetId ) ).getAssetAsStream();
                 foundData = IOUtils.toByteArray( is );
                 done = true;
 
@@ -202,13 +125,11 @@ public class AssetResourceIT extends AbstractRestIT {
             retries++;
         }
 
+        //  did we get expected number of bytes of data?
+
         assertEquals( 5324800, foundData.length );
 
-        // delete
-        node = mapper.readTree( resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON_TYPE )
-            .delete( String.class ));
+        pathResource( getOrgAppPath( "foos/" + assetId ) ).delete();
     }
 
 
@@ -217,66 +138,47 @@ public class AssetResourceIT extends AbstractRestIT {
 
         this.refreshIndex();
 
-        Map<String, String> payload = hashMap( "foo", "bar" );
+        // post an entity
 
-        String orgAppPath = clientSetup.getOrganizationName() + "/" + clientSetup.getAppName();
-
-        JsonNode node = mapper.readTree( resource().path( orgAppPath + "/foos" )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON )
-            .type( MediaType.APPLICATION_JSON_TYPE )
-            .post( String.class, payload ));
+        Map<String, String> payload = hashMap( "foo", "bar" );
+        ApiResponse postResponse = pathResource( getOrgAppPath( "foos" ) ).post( payload );
+        UUID assetId = postResponse.getEntities().get(0).getUuid();
+        assertNotNull( assetId );
 
-        JsonNode idNode = node.get( "entities" ).get( 0 ).get( "uuid" );
-        String uuid = idNode.textValue();
-        assertNotNull( uuid );
+        // post asset to that entity
 
-        // set file & assetname
         byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/cassandra_eye.jpg" ) );
-        FormDataMultiPart form = new FormDataMultiPart().field( "foo", "bar2" )
-                                                        .field( "file", data, MediaType.MULTIPART_FORM_DATA_TYPE );
+        FormDataMultiPart form = new FormDataMultiPart()
+            .field( "foo", "bar2" )
+            .field( "file", data, MediaType.MULTIPART_FORM_DATA_TYPE );
+        ApiResponse putResponse = pathResource( getOrgAppPath( "foos/" + assetId ) ).put( form );
+        this.refreshIndex();
 
-        long created = System.currentTimeMillis();
-        node = mapper.readTree( resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON )
-            .type( MediaType.MULTIPART_FORM_DATA )
-            .put( String.class, form ));
+        // get entity and check asset metadata
 
-        this.refreshIndex();
+        ApiResponse getResponse = pathResource( getOrgAppPath( "foos/" + assetId ) ).get( ApiResponse.class );
+        Entity entity = getResponse.getEntities().get( 0 );
+        Map<String, Object> fileMetadata = (Map<String, Object>)entity.get("file-metadata");
+        long lastModified = Long.parseLong( fileMetadata.get( AssetUtils.LAST_MODIFIED ).toString() );
 
-        // get entity
-        node = mapper.readTree( resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON_TYPE )
-            .get( String.class ));
-        LOG.debug( mapToFormattedJsonString(node) );
-
-        assertEquals( "image/jpeg", node.findValue( AssetUtils.CONTENT_TYPE ).textValue() );
-        assertEquals( 7979, node.findValue( AssetUtils.CONTENT_LENGTH ).intValue() );
-        idNode = node.get( "entities" ).get( 0 ).get( "uuid" );
-        assertEquals( uuid, idNode.textValue() );
-        JsonNode nameNode = node.get( "entities" ).get( 0 ).get( "foo" );
-        assertEquals( "bar2", nameNode.textValue() );
-        long lastModified = node.findValue( AssetUtils.LAST_MODIFIED ).longValue();
-        Assert.assertEquals( created, lastModified, 500 );
-
-        // get data
-        InputStream is = resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .accept( "image/jpeg" )
-            .get( InputStream.class );
+        assertEquals( assetId,      entity.getUuid() );
+        assertEquals( "bar2",       entity.get("foo") );
+        assertEquals( "image/jpeg", fileMetadata.get( AssetUtils.CONTENT_TYPE ) );
+        assertEquals( 7979,         fileMetadata.get( AssetUtils.CONTENT_LENGTH ));
 
+        // get asset and check size
+
+        InputStream is = pathResource( getOrgAppPath( "foos/" + assetId ) ).getAssetAsStream();
         byte[] foundData = IOUtils.toByteArray( is );
         assertEquals( 7979, foundData.length );
 
-        // post new data
-        node = mapper.readTree( resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON )
-            .type( MediaType.MULTIPART_FORM_DATA )
-            .put( String.class, form ) );
-        Assert.assertTrue( lastModified != node.findValue( AssetUtils.LAST_MODIFIED ).longValue() );
+        // upload new asset to entity, then check that it was updated
+
+        ApiResponse putResponse2 = pathResource( getOrgAppPath( "foos/" + assetId ) ).put( form );
+        entity = putResponse2.getEntities().get( 0 );
+        fileMetadata = (Map<String, Object>)entity.get("file-metadata");
+        long justModified = Long.parseLong( fileMetadata.get( AssetUtils.LAST_MODIFIED ).toString() );
+        assertNotEquals( lastModified, justModified );
     }
 
 
@@ -285,45 +187,26 @@ public class AssetResourceIT extends AbstractRestIT {
 
         this.refreshIndex();
 
+        // upload file larger than 5MB
+
         byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/file-bigger-than-5M" ) );
         FormDataMultiPart form = new FormDataMultiPart().field( "file", data, MediaType.MULTIPART_FORM_DATA_TYPE );
+        ApiResponse postResponse = pathResource( getOrgAppPath( "foos" ) ).post( form );
+        UUID assetId = postResponse.getEntities().get(0).getUuid();
+        LOG.info( "Waiting for upload to finish..." );
+        Thread.sleep( 2000 );
 
-        String orgAppPath = clientSetup.getOrganizationName() + "/" + clientSetup.getAppName();
-
-        // send data
-        JsonNode node = mapper.readTree( resource().path( orgAppPath + "/foos" )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON )
-            .type( MediaType.MULTIPART_FORM_DATA )
-            .post( String.class, form ) );
-        JsonNode idNode = node.get( "entities" ).get( 0 ).get( "uuid" );
-        String uuid = idNode.textValue();
-
-        // get entity
-        //TODO: seperate tests for s3 and local system property tests.
-            LOG.info( "Waiting for upload to finish..." );
-            Thread.sleep( 2000 );
-            node = mapper.readTree( resource().path( orgAppPath + "/foos/" + uuid )
-                .queryParam( "access_token", access_token )
-                .accept( MediaType.APPLICATION_JSON_TYPE )
-                .get( String.class ) );
+        // check that entire file was uploaded
 
+        ApiResponse getResponse = pathResource( getOrgAppPath( "foos/" +assetId ) ).get( ApiResponse.class );
         LOG.info( "Upload complete!" );
-
-        // get data
-        InputStream is = resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_OCTET_STREAM_TYPE )
-            .get( InputStream.class );
-
+        InputStream is = pathResource( getOrgAppPath( "foos/" + assetId ) ).getAssetAsStream();
         byte[] foundData = IOUtils.toByteArray( is );
         assertEquals( data.length, foundData.length );
 
-        // delete
-        node = mapper.readTree( resource().path( orgAppPath + "/foos/" + uuid )
-            .queryParam( "access_token", access_token )
-            .accept( MediaType.APPLICATION_JSON_TYPE )
-            .delete( String.class ) );
+        // delete file
+
+        pathResource( getOrgAppPath( "foos/" + assetId ) ).delete();
     }
 
     @Test
@@ -331,53 +214,37 @@ public class AssetResourceIT extends AbstractRestIT {
 
         this.refreshIndex();
 
+        // set max file size down to 6mb
+
         Map<String, String> props = new HashMap<String, String>();
         props.put( "usergrid.binary.max-size-mb", "6" );
-        resource().path( "/testproperties" )
-                .queryParam( "access_token", access_token )
-                .accept( MediaType.APPLICATION_JSON )
-                .type( MediaType.APPLICATION_JSON_TYPE ).post( props );
+        pathResource( "testproperties" ).post( props );
 
         try {
 
-            //UserRepo.INSTANCE.load( resource(), access_token );
+            // upload a file larger than 6mb
 
             byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/cat-larger-than-6mb.jpg" ) );
             FormDataMultiPart form = new FormDataMultiPart().field( "file", data, MediaType.MULTIPART_FORM_DATA_TYPE );
+            ApiResponse postResponse = pathResource( getOrgAppPath( "bars" ) ).post( form );
+            UUID assetId = postResponse.getEntities().get(0).getUuid();
 
-            String orgAppPath = clientSetup.getOrganizationName() + "/" + clientSetup.getAppName();
-
-            // send data
-            JsonNode node = resource().path( orgAppPath + "/bars" ).queryParam( "access_token", access_token )
-                    .accept( MediaType.APPLICATION_JSON ).type( MediaType.MULTIPART_FORM_DATA )
-                    .post( JsonNode.class, form );
-            //logNode( node );
-            JsonNode idNode = node.get( "entities" ).get( 0 ).get( "uuid" );
-            String uuid = idNode.textValue();
-
-            // get entity
             String errorMessage = null;
-            //TODO: seperate tests for s3 and local system property tests.
-                LOG.info( "Waiting for upload to finish..." );
-                Thread.sleep( 2000 );
-                node = resource().path( orgAppPath + "/bars/" + uuid )
-                        .queryParam( "access_token", access_token ).accept( MediaType.APPLICATION_JSON_TYPE )
-                        .get( JsonNode.class );
+            LOG.info( "Waiting for upload to finish..." );
+            Thread.sleep( 2000 );
 
-                // check for the error
-                if (node.findValue( "error" ) != null) {
-                    errorMessage = node.findValue("error").asText();
-                }
+            // attempt to get asset entity, it should contain error
 
-            assertTrue( errorMessage.startsWith("Asset size "));
+            ApiResponse getResponse = pathResource( getOrgAppPath( "bars/" +assetId ) ).get( ApiResponse.class );
+            Map<String, Object> fileMetadata = (Map<String, Object>)getResponse.getEntities().get(0).get("file-metadata");
+            assertTrue( fileMetadata.get( "error" ).toString().startsWith( "Asset size " ) );
 
         } finally {
-            props = new HashMap<String, String>();
+
+            // set max upload size back to default 25mb
+
             props.put( "usergrid.binary.max-size-mb", "25" );
-            resource().path( "/testproperties" )
-                    .queryParam( "access_token", access_token )
-                    .accept( MediaType.APPLICATION_JSON )
-                    .type( MediaType.APPLICATION_JSON_TYPE ).post( props );
+            pathResource( "testproperties" ).post( props );
         }
     }
 
@@ -389,108 +256,60 @@ public class AssetResourceIT extends AbstractRestIT {
 
         this.refreshIndex();
 
-        final String uuid;
-
-        access_token = this.getAdminToken().getAccessToken();
-
-        String orgAppPath = clientSetup.getOrganizationName() + "/" + clientSetup.getAppName();
-
         // create the entity that will be the asset, an image
 
         Map<String, String> payload = hashMap("name", "cassandra_eye.jpg");
-
-        JsonNode node = resource().path(orgAppPath + "/foos")
-                .queryParam("access_token", access_token)
-                .accept(MediaType.APPLICATION_JSON)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(JsonNode.class, payload);
-
-        JsonNode idNode = node.get("entities").get(0).get("uuid");
-        uuid = idNode.textValue();
+        ApiResponse postReponse = pathResource( getOrgAppPath( "foos" ) ).post( payload );
+        final UUID uuid = postReponse.getEntities().get(0).getUuid();
 
         // post image data to the asset entity
 
         byte[] data = IOUtils.toByteArray(this.getClass().getResourceAsStream("/cassandra_eye.jpg"));
-        resource().path(orgAppPath + "/foos/" + uuid)
-                .queryParam("access_token", access_token)
-                .type(MediaType.APPLICATION_OCTET_STREAM_TYPE)
-                .put(data);
+        pathResource( getOrgAppPath( "foos/" + uuid ) ).put( data, MediaType.APPLICATION_OCTET_STREAM_TYPE );
 
         // create an imagegallery entity
 
         Map<String, String> imageGalleryPayload = hashMap("name", "my image gallery");
 
-        JsonNode imageGalleryNode = resource().path(orgAppPath + "/imagegalleries")
-                .queryParam("access_token", access_token)
-                .accept(MediaType.APPLICATION_JSON)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(JsonNode.class, imageGalleryPayload);
-
-        JsonNode imageGalleryIdNode = imageGalleryNode.get("entities").get(0).get("uuid");
-        String imageGalleryId = imageGalleryIdNode.textValue();
+        ApiResponse postResponse2 = pathResource( getOrgAppPath( "imagegalleries" ) ).post( imageGalleryPayload );
+        UUID imageGalleryId = postResponse2.getEntities().get(0).getUuid();
 
         // connect imagegallery to asset
 
-        JsonNode connectNode = resource()
-                .path(orgAppPath + "/imagegalleries/" + imageGalleryId + "/contains/" + uuid)
-                .queryParam("access_token", access_token)
-                .accept(MediaType.APPLICATION_JSON)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(JsonNode.class);
-        LOG.debug( mapToFormattedJsonString(connectNode) );
-
+        ApiResponse connectResponse = pathResource(
+            getOrgAppPath( "imagegalleries/" + imageGalleryId + "/contains/" + uuid ) ).post( ApiResponse.class );
         this.refreshIndex();
 
         // verify connection from imagegallery to asset
 
-        JsonNode listConnectionsNode = resource()
-                .path(orgAppPath + "/imagegalleries/" + imageGalleryId + "/contains/")
-                .queryParam("access_token", access_token)
-                .accept(MediaType.APPLICATION_JSON)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .get(JsonNode.class);
-        LOG.debug( mapToFormattedJsonString(listConnectionsNode) );
-        assertEquals(uuid, listConnectionsNode.get("entities").get(0).get("uuid").textValue());
+        ApiResponse containsResponse = pathResource(
+            getOrgAppPath( "imagegalleries/" + imageGalleryId + "/contains/" ) ).get( ApiResponse.class );
+        assertEquals( uuid, containsResponse.getEntities().get(0).getUuid() );
 
         // delete the connection
 
-        resource().path(orgAppPath + "/imagegalleries/" + imageGalleryId + "/contains/" + uuid)
-                .queryParam("access_token", access_token)
-                .accept(MediaType.APPLICATION_JSON)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .delete();
-
+        pathResource( getOrgAppPath( "imagegalleries/" + imageGalleryId + "/contains/" + uuid ) ).delete();
         this.refreshIndex();
 
         // verify that connection is gone
 
-        listConnectionsNode = resource()
-                .path(orgAppPath + "/imagegalleries/" + imageGalleryId + "/contains/")
-                .queryParam("access_token", access_token)
-                .accept(MediaType.APPLICATION_JSON)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .get(JsonNode.class);
-        assertFalse(listConnectionsNode.get("entities").elements().hasNext());
+        ApiResponse listResponse = pathResource(
+            getOrgAppPath( "imagegalleries/" + imageGalleryId + "/contains/" )).get( ApiResponse.class );
+        assertEquals( 0, listResponse.getEntityCount() );
 
         // asset should still be there
 
-        JsonNode assetNode = resource().path(orgAppPath + "/foos/" + uuid)
-                .queryParam("access_token", access_token)
-                .accept(MediaType.APPLICATION_JSON_TYPE)
-                .get(JsonNode.class);
+        ApiResponse getResponse2 = pathResource( getOrgAppPath( "foos/" + uuid ) ).get( ApiResponse.class );
+        Entity entity = getResponse2.getEntities().get(0);
+        Map<String, Object> fileMetadata = (Map<String, Object>)entity.get("file-metadata");
 
-        Assert.assertEquals("image/jpeg", assetNode.findValue(AssetUtils.CONTENT_TYPE).textValue());
-        Assert.assertEquals(7979, assetNode.findValue("content-length").intValue());
-        JsonNode assetIdNode = assetNode.get("entities").get(0).get("uuid");
-        assertEquals(uuid, assetIdNode.textValue());
+        Assert.assertEquals("image/jpeg", fileMetadata.get( AssetUtils.CONTENT_TYPE ));
+        Assert.assertEquals(7979, fileMetadata.get( AssetUtils.CONTENT_LENGTH ));
+        assertEquals(uuid, entity.getUuid());
 
         // asset data should still be there
 
-        InputStream assetIs = resource().path(orgAppPath + "/foos/" + uuid)
-                .queryParam("access_token", access_token)
-                .accept(MediaType.APPLICATION_OCTET_STREAM_TYPE)
-                .get(InputStream.class);
-
+        InputStream assetIs = pathResource( getOrgAppPath( "foos/" + uuid ) ).getAssetAsStream();
         byte[] foundData = IOUtils.toByteArray(assetIs);
         assertEquals(7979, foundData.length);
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/24238406/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
index 69d2fcf..7e717b7 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
@@ -17,6 +17,7 @@
 package org.apache.usergrid.rest.test.resource2point0.endpoints;
 
 
+import com.sun.jersey.multipart.FormDataMultiPart;
 import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
 import org.apache.usergrid.rest.test.resource2point0.model.Entity;
 import org.apache.usergrid.rest.test.resource2point0.model.QueryParameters;
@@ -26,6 +27,7 @@ import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
 import com.sun.jersey.api.client.GenericType;
 import com.sun.jersey.api.client.WebResource;
 
+import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -283,10 +285,10 @@ public class NamedResource implements UrlResource {
     //For edge cases like Organizations and Tokens without any payload
     public <T> T get(Class<T> type, boolean useToken) {
         return get(type,null,useToken);
-
     }
 
 
+
     public <T> T get(Class<T> type,QueryParameters queryParameters) {
         return get(type,queryParameters,true);
     }
@@ -306,4 +308,48 @@ public class NamedResource implements UrlResource {
     public String getMatrix() {
         return "";
     }
+
+    public ApiResponse post( boolean useToken, FormDataMultiPart multiPartForm ) {
+        WebResource resource = getResource( useToken );
+        return resource.type( MediaType.MULTIPART_FORM_DATA_TYPE ).post( ApiResponse.class, multiPartForm );
+    }
+
+    public ApiResponse post( FormDataMultiPart multiPartForm ) {
+        return post( true, multiPartForm );
+    }
+
+    public ApiResponse put( boolean useToken, byte[] data, MediaType type ) {
+        WebResource resource = getResource(useToken);
+        return resource.type( type ).put( ApiResponse.class, data );
+    }
+
+    public ApiResponse put( byte[] data, MediaType type ) {
+        return put( true, data, type );
+    }
+
+    public ApiResponse put( boolean useToken, FormDataMultiPart multiPartForm ) {
+        WebResource resource = getResource(useToken);
+        return resource.type( MediaType.MULTIPART_FORM_DATA_TYPE ).put( ApiResponse.class, multiPartForm );
+    }
+
+    public ApiResponse put( FormDataMultiPart multiPartForm ) {
+        return put( true, multiPartForm );
+    }
+
+    public InputStream getAssetAsStream( boolean useToken ) {
+        WebResource resource = getResource(useToken);
+        return resource.accept( MediaType.APPLICATION_OCTET_STREAM_TYPE ).get( InputStream.class );
+    }
+
+    public InputStream getAssetAsStream() {
+        return getAssetAsStream( true );
+    }
+
+    public ApiResponse delete( ) {
+        return delete(true);
+    }
+
+    public ApiResponse delete( boolean useToken ) {
+        return getResource(useToken).delete( ApiResponse.class );
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/24238406/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrgResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrgResource.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrgResource.java
index cd7165c..9f99e25 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrgResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrgResource.java
@@ -160,11 +160,6 @@ public class OrgResource  extends NamedResource {
         throw new UnsupportedOperationException("service doesn't exist");
     }
 
-    public void delete(){
-        ApiResponse response = getResource().type( MediaType.APPLICATION_JSON_TYPE )
-            .accept(MediaType.APPLICATION_JSON)
-            .delete(ApiResponse.class);
-    }
     public CredentialsResource credentials(){
         return new CredentialsResource(  context ,this );
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/24238406/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrganizationResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrganizationResource.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrganizationResource.java
index eb0a4fd..128c3ff 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrganizationResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/OrganizationResource.java
@@ -52,20 +52,7 @@ public class OrganizationResource extends NamedResource {
         return org;
     }
 
-
-    /**
-     * This has not been implemented and will return an error.
-     *
-     * @return
-     */
-    public Organization delete() {
-        Map<String, Object> response = getResource(true).type(MediaType.APPLICATION_JSON_TYPE)
-            .accept(MediaType.APPLICATION_JSON).delete(Organization.class);
-        Organization org = new Organization().mapOrgResponse(response);
-        return org;
-    }
-
-    //Doesn't return anything useful server side so this was made as a void. .
+    // Doesn't return anything useful server side so this was made as a void. .
     public void put(Organization organization) {
         Map<String, Object> response = getResource(true).type(MediaType.APPLICATION_JSON_TYPE)
             .accept(MediaType.APPLICATION_JSON).put(Organization.class,