Added error checking to rest endpoint, with test cases for each exception 
thrown.
Renamed returned entity from export job “Export Entity”


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

Branch: refs/heads/master
Commit: dde48e2843de8a2c763f438257ed6f8c4b8b9da8
Parents: 9e716a6
Author: grey <[email protected]>
Authored: Thu Mar 6 09:46:11 2014 -0800
Committer: grey <[email protected]>
Committed: Thu Mar 6 09:46:11 2014 -0800

----------------------------------------------------------------------
 .../applications/ApplicationResource.java       |  78 +++++--
 .../rest/management/ManagementResourceIT.java   | 212 ++++++++++++++++++-
 .../management/export/S3ExportImpl.java         |   2 +-
 3 files changed, 265 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/dde48e28/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationResource.java
----------------------------------------------------------------------
diff --git 
a/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationResource.java
 
b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationResource.java
index 73e550b..bf44877 100644
--- 
a/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationResource.java
+++ 
b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationResource.java
@@ -221,20 +221,48 @@ public class ApplicationResource extends 
AbstractContextResource {
         OAuthResponse response = null;
         UUID jobUUID = null;
         Map<String, String> uuidRet = new HashMap<String, String>();
+
+        Map<String,Object> properties;
+        Map<String, Object> storage_info;
+
 //TODO: do input verification here! make sure json map has all correct values.
         try {
             //parse the json into some useful object (the config params)
             //ExportInfo objEx = new ExportInfo( json );
-            if(json.get( "properties" ) == null){
-                throw new NullPointerException();
+            if((properties = ( Map<String, Object> )  json.get( "properties" 
)) == null){
+                throw new NullPointerException("Could not find 'properties'");
+            }
+            storage_info = ( Map<String, Object> ) properties.get( 
"storage_info" );
+            String storage_provider = ( String ) properties.get( 
"storage_provider" );
+            if(storage_provider == null) {
+                throw new NullPointerException( "Could not find field 
'storage_provider'" );
             }
+            if(storage_info == null) {
+                throw new NullPointerException( "Could not find field 
'storage_info'" );
+            }
+
+
+            String bucketName = ( String ) storage_info.get( "bucket_location" 
);
+            String accessId = ( String ) storage_info.get( "s3_access_id" );
+            String secretKey = ( String ) storage_info.get( "s3_key" );
+
+            if(bucketName == null) {
+                throw new NullPointerException( "Could not find field 
'bucketName'" );
+            }
+            if(accessId == null) {
+                throw new NullPointerException( "Could not find field 
's3_access_id'" );
+            }
+            if(secretKey == null) {
+                throw new NullPointerException( "Could not find field 
's3_key'" );
+            }
+
             json.put( "organizationId",organization.getUuid());
             //objEx.setOrganizationId( organization.getUuid() );
             json.put( "applicationId",applicationId);
             //objEx.setApplicationId( applicationId );
 
             jobUUID = exportService.schedule( json );
-            uuidRet.put( "jobUUID", jobUUID.toString() );
+            uuidRet.put( "Export Entity", jobUUID.toString() );
         }
         catch ( NullPointerException e ) {
             return Response.status( SC_BAD_REQUEST ).type( 
JSONPUtils.jsonMediaType( callback ) )
@@ -264,23 +292,43 @@ public class ApplicationResource extends 
AbstractContextResource {
         String colExport = collection_name;
         Map<String, String> uuidRet = new HashMap<String, String>();
 
+        Map<String,Object> properties;
+        Map<String, Object> storage_info;
+
         try {
             //checkJsonExportProperties(json);
-            if(json.get( "properties" ) == null){
-                throw new NullPointerException();
+            if((properties = ( Map<String, Object> )  json.get( "properties" 
)) == null){
+                throw new NullPointerException("Could not find 'properties'");
+            }
+            storage_info = ( Map<String, Object> ) properties.get( 
"storage_info" );
+            String storage_provider = ( String ) properties.get( 
"storage_provider" );
+            if(storage_provider == null) {
+                throw new NullPointerException( "Could not find field 
'storage_provider'" );
+            }
+            if(storage_info == null) {
+                throw new NullPointerException( "Could not find field 
'storage_info'" );
+            }
+
+
+            String bucketName = ( String ) storage_info.get( "bucket_location" 
);
+            String accessId = ( String ) storage_info.get( "s3_access_id" );
+            String secretKey = ( String ) storage_info.get( "s3_key" );
+
+            if(bucketName == null) {
+                throw new NullPointerException( "Could not find field 
'bucketName'" );
+            }
+            if(accessId == null) {
+                throw new NullPointerException( "Could not find field 
's3_access_id'" );
+            }
+            if(secretKey == null) {
+                throw new NullPointerException( "Could not find field 
's3_key'" );
             }
-            //if(json.get( "properties."))
-            //parse the json into some useful object (the config params)
-//            ExportInfo objEx = new ExportInfo( json );
-//            objEx.setOrganizationId( organization.getUuid() );
-//            objEx.setApplicationId( applicationId );
-//            objEx.setCollection( colExport );
             json.put( "organizationId",organization.getUuid() );
             json.put( "applicationId", applicationId);
             json.put( "collectionName", colExport);
 
             jobUUID = exportService.schedule( json );
-            uuidRet.put( "jobUUID", jobUUID.toString() );
+            uuidRet.put( "Export Entity", jobUUID.toString() );
         }
         catch ( NullPointerException e ) {
             return Response.status( SC_BAD_REQUEST ).type( 
JSONPUtils.jsonMediaType( callback ) )
@@ -302,13 +350,13 @@ public class ApplicationResource extends 
AbstractContextResource {
 
     @GET
     @RequireOrganizationAccess
-    @Path("export/{jobUUID: 
[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}}")
-    public Response exportGetJson( @Context UriInfo ui, @PathParam("jobUUID") 
UUID jobUUIDStr,
+    @Path("export/{exportEntity: 
[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}}")
+    public Response exportGetJson( @Context UriInfo ui, 
@PathParam("exportEntity") UUID exportEntityUUIDStr,
                                    @QueryParam("callback") @DefaultValue("") 
String callback ) throws Exception {
 
         Export entity;
         try {
-            entity = smf.getServiceManager( applicationId 
).getEntityManager().get( jobUUIDStr, Export.class );
+            entity = smf.getServiceManager( applicationId 
).getEntityManager().get( exportEntityUUIDStr, Export.class );
         }
         catch ( Exception e ) { //this might not be a bad request and needs 
better error checking
             return Response.status( SC_BAD_REQUEST ).type( 
JSONPUtils.jsonMediaType( callback ) )

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/dde48e28/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
----------------------------------------------------------------------
diff --git 
a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
 
b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
index 7eb9ed1..0c8e99a 100644
--- 
a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
+++ 
b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
@@ -611,7 +611,7 @@ public class ManagementResourceIT extends AbstractRestIT {
         }
 
         assertEquals( Status.ACCEPTED, responseStatus );
-        assertNotNull( node.get( "jobUUID" ) );
+        assertNotNull( node.get( "Export Entity" ) );
     }
 //
     @Test
@@ -634,7 +634,7 @@ public class ManagementResourceIT extends AbstractRestIT {
         }
 
         assertEquals( Status.ACCEPTED, responseStatus );
-        assertNotNull( node.get( "jobUUID" ) );
+        assertNotNull( node.get( "Export Entity" ) );
     }
 
 
@@ -650,7 +650,7 @@ public class ManagementResourceIT extends AbstractRestIT {
         node = resource().path( 
"/management/orgs/test-organization/apps/test-app/export" )
                          .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
                          .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class, payload );
-        String uuid = String.valueOf( node.get( "jobUUID" ) );
+        String uuid = String.valueOf( node.get( "Export Entity" ) );
         uuid = uuid.replaceAll( "\"", "" );
 
         try {
@@ -677,7 +677,7 @@ public class ManagementResourceIT extends AbstractRestIT {
         node = resource().path( 
"/management/orgs/test-organization/apps/test-app/collection/users/export" )
                          .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
                          .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class, payload );
-        String uuid = String.valueOf( node.get( "jobUUID" ) );
+        String uuid = String.valueOf( node.get( "Export Entity" ) );
         uuid = uuid.replaceAll( "\"", "" );
 
         try {
@@ -713,7 +713,7 @@ public class ManagementResourceIT extends AbstractRestIT {
     }
 //
     @Test
-    public void exportPostApplicationNullPointer() throws Exception {
+    public void exportPostApplicationNullPointerProperties() throws Exception {
         JsonNode node = null;
         Status responseStatus = Status.OK;
 
@@ -728,7 +728,6 @@ public class ManagementResourceIT extends AbstractRestIT {
         properties.put( "storage_provider", "s3" );
         properties.put( "storage_info", storage_info );
 
-        payload.put( "path", "test-organization/test-app" );
 
         try {
             node = resource().path( 
"/management/orgs/test-organization/apps/test-app/export" )
@@ -802,6 +801,201 @@ public class ManagementResourceIT extends AbstractRestIT {
         assertEquals( Status.UNAUTHORIZED, responseStatus );
     }
 
+    @Test
+    public void exportPostApplicationNullPointerStorageInfo() throws Exception 
{
+        JsonNode node = null;
+        Status responseStatus = Status.OK;
+
+        HashMap<String, Object> payload = payloadBuilder();
+        HashMap<String, Object> properties = ( HashMap<String, Object> ) 
payload.get("properties");
+        //remove storage_info field
+        properties.remove( "storage_info" );
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+    }
+
+    @Test
+    public void exportPostCollectionNullPointerStorageInfo() throws Exception {
+        JsonNode node = null;
+        Status responseStatus = Status.OK;
+
+        HashMap<String, Object> payload = payloadBuilder();
+        HashMap<String, Object> properties = ( HashMap<String, Object> ) 
payload.get("properties");
+        //remove storage_info field
+        properties.remove( "storage_info" );
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/collection/users/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+    }
+
+    @Test
+    public void exportPostApplicationNullPointerStorageProvider() throws 
Exception {
+        JsonNode node = null;
+        Status responseStatus = Status.OK;
+
+        HashMap<String, Object> payload = payloadBuilder();
+        HashMap<String, Object> properties = ( HashMap<String, Object> ) 
payload.get("properties");
+        //remove storage_info field
+        properties.remove( "storage_provider" );
+
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+    }
+
+    @Test
+    public void exportPostCollectionNullPointerStorageProvider() throws 
Exception {
+        JsonNode node = null;
+        Status responseStatus = Status.OK;
+
+        HashMap<String, Object> payload = payloadBuilder();
+        HashMap<String, Object> properties = ( HashMap<String, Object> ) 
payload.get("properties");
+        //remove storage_info field
+        properties.remove( "storage_provider" );
+
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/collection/users/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+    }
+
+    @Test
+    public void exportPostApplicationNullPointerStorageVerification() throws 
Exception {
+        JsonNode node = null;
+        Status responseStatus = Status.OK;
+
+        HashMap<String, Object> payload = payloadBuilder();
+        HashMap<String, Object> properties = ( HashMap<String, Object> ) 
payload.get("properties");
+        HashMap<String, Object> storage_info = ( HashMap<String, Object> ) 
properties.get("storage_info");
+        //remove storage_key field
+        storage_info.remove( "s3_key" );
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+
+        payload = payloadBuilder();
+        properties = ( HashMap<String, Object> ) payload.get("properties");
+        storage_info = ( HashMap<String, Object> ) 
properties.get("storage_info");
+        //remove storage_key field
+        storage_info.remove( "s3_access_id" );
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+
+        payload = payloadBuilder();
+        properties = ( HashMap<String, Object> ) payload.get("properties");
+        storage_info = ( HashMap<String, Object> ) 
properties.get("storage_info");
+        //remove storage_key field
+        storage_info.remove( "bucket_location" );
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+
+    }
+
+    @Test
+    public void exportPostCollectionNullPointerStorageVerification() throws 
Exception {
+        JsonNode node = null;
+        Status responseStatus = Status.OK;
+
+        HashMap<String, Object> payload = payloadBuilder();
+        HashMap<String, Object> properties = ( HashMap<String, Object> ) 
payload.get("properties");
+        HashMap<String, Object> storage_info = ( HashMap<String, Object> ) 
properties.get("storage_info");
+        //remove storage_key field
+        storage_info.remove( "s3_key" );
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/collection/users/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+
+        payload = payloadBuilder();
+        properties = ( HashMap<String, Object> ) payload.get("properties");
+        storage_info = ( HashMap<String, Object> ) 
properties.get("storage_info");
+        //remove storage_key field
+        storage_info.remove( "s3_access_id" );
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/collection/users/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+
+        payload = payloadBuilder();
+        properties = ( HashMap<String, Object> ) payload.get("properties");
+        storage_info = ( HashMap<String, Object> ) 
properties.get("storage_info");
+        storage_info.remove( "bucket_location" );
+
+        try {
+            node = resource().path( 
"/management/orgs/test-organization/apps/test-app/collection/users/export" )
+                             .queryParam( "access_token", superAdminToken() 
).accept( MediaType.APPLICATION_JSON )
+                             .type( MediaType.APPLICATION_JSON_TYPE ).post( 
JsonNode.class,payload );
+        }
+        catch ( UniformInterfaceException uie ) {
+            responseStatus = uie.getResponse().getClientResponseStatus();
+        }
+        assertEquals( Status.BAD_REQUEST, responseStatus );
+
+    }
+
 
     /*Creates fake payload for testing purposes.*/
     public HashMap<String, Object> payloadBuilder() {
@@ -811,14 +1005,10 @@ public class ManagementResourceIT extends AbstractRestIT 
{
         //TODO: always put dummy values here and ignore this test.
         //TODO: add a ret for when s3 values are invalid.
         storage_info.put( "s3_key", "insert key here" );
-        storage_info.put( "s3_accessId", "insert access id here" );
+        storage_info.put( "s3_access_id", "insert access id here" );
         storage_info.put( "bucket_location", "insert bucket name here" );
-
-
         properties.put( "storage_provider", "s3" );
         properties.put( "storage_info", storage_info );
-
-        payload.put( "path", "test-organization/test-app" );
         payload.put( "properties", properties );
         return payload;
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/dde48e28/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java
 
b/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java
index 7439acf..fd3f376 100644
--- 
a/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java
+++ 
b/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java
@@ -39,7 +39,7 @@ public class S3ExportImpl implements S3Export {
         Map<String, Object> storage_info = (Map<String,Object>)properties.get( 
"storage_info" );
 
         String bucketName = ( String ) storage_info.get( "bucket_location" );
-        String accessId = ( String ) storage_info.get( "s3_accessId" );
+        String accessId = ( String ) storage_info.get( "s3_access_id" );
         String secretKey = ( String ) storage_info.get( "s3_key" );
 
         Properties overrides = new Properties();

Reply via email to