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 2014/03/06 20:21:58 UTC

[43/50] [abbrv] git commit: Added error checking to rest endpoint, with test cases for each exception thrown. Renamed returned entity from export job “Export Entity”

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/pull/60/merge
Commit: dde48e2843de8a2c763f438257ed6f8c4b8b9da8
Parents: 9e716a6
Author: grey <gr...@apigee.com>
Authored: Thu Mar 6 09:46:11 2014 -0800
Committer: grey <gr...@apigee.com>
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();