aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-08-25 17:06:47 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-08-25 17:06:47 +0200
commitab22c2320230889336f7ad5c3f642c6598d367cb (patch)
treed9d33cefc7a54bfaeae821179becf30c8ae740c4 /controller-server
parent1d5ffb9f0996c44f1b1fa29fd9773a14b477973c (diff)
Allow deployment of application package without deployOptions
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParser.java5
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java15
3 files changed, 19 insertions, 3 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index 20aa96e890d..7da8ac74936 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -1955,7 +1955,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
}
private static Map<String, byte[]> parseDataParts(HttpRequest request) {
- String contentHash = request.getHeader("x-Content-Hash");
+ String contentHash = request.getHeader("X-Content-Hash");
if (contentHash == null)
return new MultipartParser().parse(request);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParser.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParser.java
index 3125a8a363a..b49b47e0cc7 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParser.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParser.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.controller.restapi.application;
import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.vespa.hosted.controller.api.application.v4.EnvironmentResource;
import org.apache.commons.fileupload.MultipartStream;
import org.apache.commons.fileupload.ParameterParser;
@@ -38,8 +39,10 @@ public class MultipartParser {
try {
ParameterParser parameterParser = new ParameterParser();
Map<String, String> contentType = parameterParser.parse(contentTypeHeader, ';');
+ if (contentType.containsKey("application/zip"))
+ return Map.of(EnvironmentResource.APPLICATION_ZIP, data.readAllBytes());
if ( ! contentType.containsKey("multipart/form-data"))
- throw new IllegalArgumentException("Expected a multipart message, but got Content-Type: " + contentTypeHeader);
+ throw new IllegalArgumentException("Expected a multipart or application/zip message, but got Content-Type: " + contentTypeHeader);
String boundary = contentType.get("boundary");
if (boundary == null)
throw new IllegalArgumentException("Missing boundary property in Content-Type header");
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
index 57397cfd856..2f514bd05cd 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
@@ -1367,7 +1367,6 @@ public class ApplicationApiTest extends ControllerContainerTest {
.data(entity)
.userIdentity(userId),
"{\"message\":\"Deployment started in run 1 of dev-us-east-1 for tenant1.application1.new-user. This may take about 15 minutes the first time.\",\"run\":1}");
-
}
@Test
@@ -1426,6 +1425,20 @@ public class ApplicationApiTest extends ControllerContainerTest {
"{\"message\":\"Deployment started in run 2 of dev-us-east-1 for sandbox.myapp. This may take about 15 minutes the first time.\",\"run\":2}",
200);
+
+ // POST (deploy) an application package as content type application/zip — not multipart
+ tester.assertResponse(request("/application/v4/tenant/sandbox/application/myapp/instance/default/deploy/dev-us-east-1", POST)
+ .data(applicationPackageInstance1.zippedContent())
+ .contentType("application/zip")
+ .userIdentity(developer2),
+ "{\"message\":\"Deployment started in run 3 of dev-us-east-1 for sandbox.myapp. This may take about 15 minutes the first time.\",\"run\":3}");
+
+ // POST (deploy) an application package not as content type application/zip — not multipart — is disallowed
+ tester.assertResponse(request("/application/v4/tenant/sandbox/application/myapp/instance/default/deploy/dev-us-east-1", POST)
+ .data(applicationPackageInstance1.zippedContent())
+ .contentType("application/gzip")
+ .userIdentity(developer2),
+ "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Expected a multipart or application/zip message, but got Content-Type: application/gzip\"}", 400);
}
@Test