Repository: ambari
Updated Branches:
  refs/heads/trunk 989492ba8 -> 88b170d49


AMBARI-6816. POST calls to /recommendations and /validations should return 
200-OK


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/88b170d4
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/88b170d4
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/88b170d4

Branch: refs/heads/trunk
Commit: 88b170d49d17dc03d5a2fc48f41afaccea836307
Parents: 989492b
Author: Srimanth Gunturi <[email protected]>
Authored: Mon Aug 11 09:50:34 2014 -0700
Committer: Srimanth Gunturi <[email protected]>
Committed: Mon Aug 11 10:13:43 2014 -0700

----------------------------------------------------------------------
 .../server/api/handlers/CreateHandler.java      |  6 ++++-
 .../server/api/handlers/QueryCreateHandler.java |  6 ++++-
 .../api/resources/BaseResourceDefinition.java   |  6 +++++
 .../RecommendationResourceDefinition.java       |  4 ++++
 .../api/resources/ResourceDefinition.java       | 11 +++++++++
 .../resources/ValidationResourceDefinition.java |  5 ++++
 .../server/api/handlers/CreateHandlerTest.java  | 24 +++++++++++++++-----
 .../api/handlers/QueryCreateHandlerTest.java    |  2 ++
 8 files changed, 56 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java
index 91903d1..c1bd91b 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java
@@ -38,7 +38,11 @@ public class CreateHandler extends BaseManagementHandler {
       result = createResult(status);
 
       if (result.isSynchronous()) {
-        result.setResultStatus(new ResultStatus(ResultStatus.STATUS.CREATED));
+        if (resource.getResourceDefinition().isCreatable()) {
+          result.setResultStatus(new 
ResultStatus(ResultStatus.STATUS.CREATED));
+        } else {
+          result.setResultStatus(new ResultStatus(ResultStatus.STATUS.OK));
+        }
       } else {
         result.setResultStatus(new ResultStatus(ResultStatus.STATUS.ACCEPTED));
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java
index 040a1f1..1bc4a0f 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java
@@ -170,7 +170,11 @@ public class QueryCreateHandler extends 
BaseManagementHandler {
       result = createResult(status);
 
       if (result.isSynchronous()) {
-        result.setResultStatus(new ResultStatus(ResultStatus.STATUS.CREATED));
+        if (resource.getResourceDefinition().isCreatable()) {
+          result.setResultStatus(new 
ResultStatus(ResultStatus.STATUS.CREATED));
+        } else {
+          result.setResultStatus(new ResultStatus(ResultStatus.STATUS.OK));
+        }
       } else {
         result.setResultStatus(new ResultStatus(ResultStatus.STATUS.ACCEPTED));
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java
index ef92302..a5a7234 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java
@@ -112,6 +112,12 @@ public abstract class BaseResourceDefinition implements 
ResourceDefinition {
     return m_type.hashCode();
   }
 
+  @Override
+  public boolean isCreatable() {
+    // by default all resources are creatable
+    return true;
+  }
+
   class BaseHrefPostProcessor implements PostProcessor {
     @Override
     public void process(Request request, TreeNode<Resource> resultNode, String 
href) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java
index 5333b2b..203fc44 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java
@@ -41,4 +41,8 @@ public class RecommendationResourceDefinition extends 
BaseResourceDefinition {
     return "recommendation";
   }
 
+  @Override
+  public boolean isCreatable() {
+    return false;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java
index 1e0a4db..7632e64 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java
@@ -90,6 +90,17 @@ public interface ResourceDefinition {
   public Collection<String> getCreateDirectives();
 
   /**
+   * Defines if resource is actually created on the server side during POST
+   * operation.
+   * 
+   * @see <a
+   *      href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5";>
+   *      http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5</a>
+   * @return {@code true} if resource is creatable, {@code false} otherwise
+   */
+  public boolean isCreatable();
+
+  /**
    * Resource specific result processor.
    * Used to provide resource specific processing of a result.
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java
index 027ee4b..cc2cc0e 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java
@@ -40,4 +40,9 @@ public class ValidationResourceDefinition extends 
BaseResourceDefinition {
   public String getSingularName() {
     return "validation";
   }
+
+  @Override
+  public boolean isCreatable() {
+    return false;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java
index f7747f3..c2562bd 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java
@@ -21,6 +21,7 @@ package org.apache.ambari.server.api.handlers;
 import org.apache.ambari.server.api.query.Query;
 import org.apache.ambari.server.api.query.render.DefaultRenderer;
 import org.apache.ambari.server.api.query.render.Renderer;
+import org.apache.ambari.server.api.resources.ResourceDefinition;
 import org.apache.ambari.server.api.resources.ResourceInstance;
 import org.apache.ambari.server.api.services.*;
 import org.apache.ambari.server.api.services.persistence.PersistenceManager;
@@ -44,6 +45,7 @@ public class CreateHandlerTest {
     Request request = createNiceMock(Request.class);
     RequestBody body = createNiceMock(RequestBody.class);
     ResourceInstance resource = createNiceMock(ResourceInstance.class);
+    ResourceDefinition resourceDefinition = 
createNiceMock(ResourceDefinition.class);
     Query query = createStrictMock(Query.class);
     PersistenceManager pm = createStrictMock(PersistenceManager.class);
     RequestStatus status = createNiceMock(RequestStatus.class);
@@ -63,6 +65,8 @@ public class CreateHandlerTest {
 
     expect(resource.getQuery()).andReturn(query);
     query.setRenderer(renderer);
+    
expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
+    expect(resourceDefinition.isCreatable()).andReturn(true).anyTimes();
 
     expect(pm.create(resource, body)).andReturn(status);
     expect(status.getStatus()).andReturn(RequestStatus.Status.Complete);
@@ -70,7 +74,7 @@ public class CreateHandlerTest {
     expect(resource1.getType()).andReturn(Resource.Type.Cluster).anyTimes();
     expect(resource2.getType()).andReturn(Resource.Type.Cluster).anyTimes();
 
-    replay(request, body, resource, query, pm, status, resource1, resource2);
+    replay(request, body, resource, resourceDefinition, query, pm, status, 
resource1, resource2);
 
     Result result = new TestCreateHandler(pm).handleRequest(request);
 
@@ -93,7 +97,7 @@ public class CreateHandlerTest {
     }
 
     assertEquals(ResultStatus.STATUS.CREATED, result.getStatus().getStatus());
-    verify(request, body, resource, query, pm, status, resource1, resource2);
+    verify(request, body, resource, resourceDefinition, query, pm, status, 
resource1, resource2);
   }
 
   @Test
@@ -101,6 +105,7 @@ public class CreateHandlerTest {
     Request request = createNiceMock(Request.class);
     RequestBody body = createNiceMock(RequestBody.class);
     ResourceInstance resource = createNiceMock(ResourceInstance.class);
+    ResourceDefinition resourceDefinition = 
createNiceMock(ResourceDefinition.class);
     Query query = createStrictMock(Query.class);
     PersistenceManager pm = createStrictMock(PersistenceManager.class);
     RequestStatus status = createNiceMock(RequestStatus.class);
@@ -120,6 +125,8 @@ public class CreateHandlerTest {
 
     expect(resource.getQuery()).andReturn(query);
     query.setRenderer(renderer);
+    
expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
+    expect(resourceDefinition.isCreatable()).andReturn(true).anyTimes();
 
     expect(pm.create(resource, body)).andReturn(status);
     expect(status.getStatus()).andReturn(RequestStatus.Status.Complete);
@@ -127,7 +134,7 @@ public class CreateHandlerTest {
     expect(resource1.getType()).andReturn(Resource.Type.Cluster).anyTimes();
     expect(resource2.getType()).andReturn(Resource.Type.Cluster).anyTimes();
 
-    replay(request, body, resource, query, pm, status, resource1, resource2);
+    replay(request, body, resource, resourceDefinition, query, pm, status, 
resource1, resource2);
 
     Result result = new TestCreateHandler(pm).handleRequest(request);
 
@@ -149,7 +156,7 @@ public class CreateHandlerTest {
       }
     }
     assertEquals(ResultStatus.STATUS.CREATED, result.getStatus().getStatus());
-    verify(request, body, resource, query, pm, status, resource1, resource2);
+    verify(request, body, resource, resourceDefinition, query, pm, status, 
resource1, resource2);
   }
 
   @Test
@@ -157,6 +164,7 @@ public class CreateHandlerTest {
     Request request = createNiceMock(Request.class);
     RequestBody body = createNiceMock(RequestBody.class);
     ResourceInstance resource = createNiceMock(ResourceInstance.class);
+    ResourceDefinition resourceDefinition = 
createNiceMock(ResourceDefinition.class);
     Query query = createStrictMock(Query.class);
     PersistenceManager pm = createStrictMock(PersistenceManager.class);
     RequestStatus status = createNiceMock(RequestStatus.class);
@@ -177,6 +185,8 @@ public class CreateHandlerTest {
 
     expect(resource.getQuery()).andReturn(query);
     query.setRenderer(renderer);
+    
expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
+    expect(resourceDefinition.isCreatable()).andReturn(true).anyTimes();
 
     expect(pm.create(resource, body)).andReturn(status);
     expect(status.getStatus()).andReturn(RequestStatus.Status.Accepted);
@@ -185,7 +195,8 @@ public class CreateHandlerTest {
     expect(resource2.getType()).andReturn(Resource.Type.Cluster).anyTimes();
     expect(status.getRequestResource()).andReturn(requestResource).anyTimes();
 
-    replay(request, body, resource, query, pm, status, resource1, resource2, 
requestResource);
+    replay(request, body, resource, resourceDefinition, query, pm, status, 
resource1, resource2,
+        requestResource);
 
     Result result = new TestCreateHandler(pm).handleRequest(request);
 
@@ -213,7 +224,8 @@ public class CreateHandlerTest {
     assertSame(requestResource, statusNode.getObject());
 
     assertEquals(ResultStatus.STATUS.ACCEPTED, result.getStatus().getStatus());
-    verify(request, body, resource, query, pm, status, resource1, resource2, 
requestResource);
+    verify(request, body, resource, resourceDefinition, query, pm, status, 
resource1, resource2,
+        requestResource);
   }
 
   private class TestCreateHandler extends CreateHandler {

http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java
index f6e3ebd..fa35940 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java
@@ -153,6 +153,7 @@ public class QueryCreateHandlerTest {
     
expect(resourceInstance.getSubResources()).andReturn(mapSubResources).anyTimes();
 
     
expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes();
+    expect(resourceDefinition.isCreatable()).andReturn(true).anyTimes();
 
     
expect(subResource.getResourceDefinition()).andReturn(subResourceDefinition).anyTimes();
     
expect(subResourceDefinition.getType()).andReturn(Resource.Type.Component).anyTimes();
@@ -169,6 +170,7 @@ public class QueryCreateHandlerTest {
 
     expect(resourceInstanceFactory.createResource(Resource.Type.Component, 
mapIds)).
         andReturn(createResource).anyTimes();
+    
expect(createResource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes();
 
     expect(pm.create(same(createResource), 
capture(bodyCapture))).andReturn(status);
     
expect(status.getStatus()).andReturn(RequestStatus.Status.Complete).anyTimes();

Reply via email to