aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java
new file mode 100644
index 00000000000..aa115421f6a
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java
@@ -0,0 +1,113 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.deployment;
+
+import com.yahoo.config.application.api.ValidationId;
+import com.yahoo.config.provision.Environment;
+import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.charset.StandardCharsets;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * A builder that builds application packages for testing purposes.
+ *
+ * @author mpolden
+ */
+public class ApplicationPackageBuilder {
+
+ private String upgradePolicy = null;
+ private Environment environment = Environment.prod;
+ private final StringBuilder environmentBody = new StringBuilder();
+ private final StringBuilder validationOverridesBody = new StringBuilder();
+
+ public ApplicationPackageBuilder upgradePolicy(String upgradePolicy) {
+ this.upgradePolicy = upgradePolicy;
+ return this;
+ }
+
+ public ApplicationPackageBuilder environment(Environment environment) {
+ this.environment = environment;
+ return this;
+ }
+
+ public ApplicationPackageBuilder region(String regionName) {
+ environmentBody.append(" <region active='true'>");
+ environmentBody.append(regionName);
+ environmentBody.append("</region>\n");
+ return this;
+ }
+
+ public ApplicationPackageBuilder delay(Duration delay) {
+ environmentBody.append(" <delay seconds='");
+ environmentBody.append(delay.getSeconds());
+ environmentBody.append("'/>\n");
+ return this;
+ }
+
+ public ApplicationPackageBuilder allow(ValidationId validationId) {
+ validationOverridesBody.append(" <allow until='");
+ validationOverridesBody.append(asIso8601String(Instant.now().plus(Duration.ofDays(29))));
+ validationOverridesBody.append("'>");
+ validationOverridesBody.append(validationId.value());
+ validationOverridesBody.append("</allow>\n");
+ return this;
+ }
+
+ private byte[] deploymentSpec() {
+ StringBuilder xml = new StringBuilder("<deployment version='1.0'>\n");
+ if (upgradePolicy != null) {
+ xml.append("<upgrade policy='");
+ xml.append(upgradePolicy);
+ xml.append("'/>\n");
+ }
+ xml.append(" <");
+ xml.append(environment.value());
+ xml.append(">\n");
+ xml.append(environmentBody);
+ xml.append(" </");
+ xml.append(environment.value());
+ xml.append(">\n</deployment>");
+ return xml.toString().getBytes(StandardCharsets.UTF_8);
+ }
+
+ private byte[] validationOverrides() {
+ String xml = "<validation-overrides version='1.0'>\n" +
+ validationOverridesBody +
+ "</validation-overrides>\n";
+ return xml.getBytes(StandardCharsets.UTF_8);
+ }
+
+ public ApplicationPackage build() {
+ ByteArrayOutputStream zip = new ByteArrayOutputStream();
+ ZipOutputStream out = new ZipOutputStream(zip);
+ try {
+ out.putNextEntry(new ZipEntry("deployment.xml"));
+ out.write(deploymentSpec());
+ out.closeEntry();
+ out.putNextEntry(new ZipEntry("validation-overrides.xml"));
+ out.write(validationOverrides());
+ out.closeEntry();
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ } finally {
+ try {
+ out.close();
+ } catch (IOException ignored) {}
+ }
+ return new ApplicationPackage(zip.toByteArray());
+ }
+
+ private static String asIso8601String(Instant instant) {
+ DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE.withZone(ZoneId.systemDefault() );
+ return formatter.format(instant);
+ }
+
+}