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

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.

Repository: incubator-usergrid
Updated Branches:
  refs/heads/USERGRID=745 47db44c89 -> 242384064


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/USERGRID=745
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,