aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--controller-server/pom.xml6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java19
-rw-r--r--hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java8
3 files changed, 24 insertions, 9 deletions
diff --git a/controller-server/pom.xml b/controller-server/pom.xml
index f22142db727..3e7247bd44b 100644
--- a/controller-server/pom.xml
+++ b/controller-server/pom.xml
@@ -131,6 +131,12 @@
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>hosted-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
<!-- test -->
<dependency>
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 d3f0f423089..b7b4e278ca3 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
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.restapi.application;
+import ai.vespa.hosted.api.MultiPartStreamer;
import com.yahoo.application.container.handler.Request;
import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
@@ -58,6 +59,7 @@ import com.yahoo.vespa.hosted.controller.restapi.ContainerControllerTester;
import com.yahoo.vespa.hosted.controller.restapi.ContainerTester;
import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest;
import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant;
+import com.yahoo.yolean.Exceptions;
import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
@@ -1406,16 +1408,12 @@ public class ApplicationApiTest extends ControllerContainerTest {
return builder.build();
}
- private HttpEntity createApplicationSubmissionData(ApplicationPackage applicationPackage) {
- MultipartEntityBuilder builder = MultipartEntityBuilder.create();
- builder.addTextBody(EnvironmentResource.SUBMIT_OPTIONS,
- "{\"repository\":\"repo\",\"branch\":\"master\",\"commit\":\"d00d\",\"authorEmail\":\"a@b\"}",
- ContentType.APPLICATION_JSON);
- builder.addBinaryBody(EnvironmentResource.APPLICATION_ZIP, applicationPackage.zippedContent());
- builder.addBinaryBody(EnvironmentResource.APPLICATION_TEST_ZIP, "content".getBytes());
- return builder.build();
+ private MultiPartStreamer createApplicationSubmissionData(ApplicationPackage applicationPackage) {
+ return new MultiPartStreamer().addJson(EnvironmentResource.SUBMIT_OPTIONS, "{\"repository\":\"repo\",\"branch\":\"master\",\"commit\":\"d00d\",\"authorEmail\":\"a@b\"}")
+ .addBytes(EnvironmentResource.APPLICATION_ZIP, applicationPackage.zippedContent())
+ .addBytes(EnvironmentResource.APPLICATION_TEST_ZIP, "content".getBytes());
}
-
+
private String deployOptions(boolean deployDirectly, Optional<ApplicationVersion> applicationVersion) {
return "{\"vespaVersion\":null," +
"\"ignoreValidationErrors\":false," +
@@ -1618,6 +1616,9 @@ public class ApplicationApiTest extends ControllerContainerTest {
private RequestBuilder data(byte[] data) { this.data = data; return this; }
private RequestBuilder data(String data) { return data(data.getBytes(StandardCharsets.UTF_8)); }
+ private RequestBuilder data(MultiPartStreamer streamer) {
+ return Exceptions.uncheck(() -> data(streamer.data().readAllBytes()).contentType(streamer.contentType()));
+ }
private RequestBuilder data(HttpEntity data) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
diff --git a/hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java b/hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java
index 7ed86210957..6b2f5596fd6 100644
--- a/hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java
+++ b/hosted-api/src/main/java/ai/vespa/hosted/api/MultiPartStreamer.java
@@ -56,6 +56,14 @@ public class MultiPartStreamer {
return this;
}
+ /** Adds the given data as a named part in this, using the {@code "application/octet-stream" content type}. */
+ public MultiPartStreamer addBytes(String name, byte[] data) {
+ streams.add(() -> separator(name, "application/octet-stream"));
+ streams.add(() -> new ByteArrayInputStream(data));
+
+ return this;
+ }
+
/** Adds the contents of the file at the given path as a named part in this. */
public MultiPartStreamer addFile(String name, Path path) {
streams.add(() -> separator(name, path));