summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authortoby <smorgrav@yahoo-inc.com>2016-06-23 15:19:37 +0200
committertoby <smorgrav@yahoo-inc.com>2016-06-23 15:19:37 +0200
commit1a06bef285b64a19f18b8784f22088d4874e275b (patch)
treed6d0cee9a00a01a7e200a1c2a5de00e16ab81e33 /node-repository
parent07330b25ea06fc413f6a1b5628cd0f559088978d (diff)
Add unit testing of PATCH for POST feature
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java13
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java16
2 files changed, 26 insertions, 3 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
index ea05e71e48c..64dd9922f8a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
@@ -14,10 +14,10 @@ import com.yahoo.vespa.config.SlimeUtils;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Configuration;
+import com.yahoo.vespa.hosted.provision.node.NodeFlavors;
import com.yahoo.vespa.hosted.provision.node.filter.ApplicationFilter;
import com.yahoo.vespa.hosted.provision.node.filter.NodeFilter;
import com.yahoo.vespa.hosted.provision.node.filter.NodeHostFilter;
-import com.yahoo.vespa.hosted.provision.node.NodeFlavors;
import com.yahoo.vespa.hosted.provision.node.filter.ParentHostFilter;
import com.yahoo.vespa.hosted.provision.node.filter.StateFilter;
import com.yahoo.vespa.hosted.provision.restapi.v2.NodesResponse.ResponseType;
@@ -232,7 +232,14 @@ public class NodesApiHandler extends LoggingRequestHandler {
private boolean isPatchOverride(HttpRequest request) {
//Since Jersey's HttpUrlConnector does not support PATCH we support this by override this on POST requests.
String override = request.getHeader("X-HTTP-Method-Override");
- return override != null && override.equals("PATCH");
+ if (override != null) {
+ if (override.equals("PATCH")) {
+ return true;
+ } else {
+ String msg = String.format("Illegal X-HTTP-Method-Override header for POST request. Accepts 'PATCH' but got '%s'", override);
+ throw new IllegalArgumentException(msg);
+ }
+ }
+ return false;
}
-
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
index 922e0038ea5..dce79327b4f 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
@@ -151,6 +151,22 @@ public class RestApiTest {
}
@Test
+ public void post_with_patch_method_override_in_header_is_handled_as_patch() throws IOException {
+ Request req = new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com",
+ Utf8.toBytes("{\"currentRestartGeneration\": 1}"), Request.Method.POST);
+ req.getHeaders().add("X-HTTP-Method-Override", "PATCH");
+ assertResponse(req, "{\"message\":\"Updated host4.yahoo.com\"}");
+ }
+
+ @Test
+ public void post_with_invalid_method_override_in_header_gives_sane_error_message() throws IOException {
+ Request req = new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com",
+ Utf8.toBytes("{\"currentRestartGeneration\": 1}"), Request.Method.POST);
+ req.getHeaders().add("X-HTTP-Method-Override", "GET");
+ assertResponse(req, 400, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Illegal X-HTTP-Method-Override header for POST request. Accepts 'PATCH' but got 'GET'\"}");
+ }
+
+ @Test
public void testInvalidRequests() throws IOException {
// Attempt to DELETE a node which is not put in failed first
assertResponse(new Request("http://localhost:8080/nodes/v2/node/host8.yahoo.com",