summaryrefslogtreecommitdiffstats
path: root/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java91
1 files changed, 91 insertions, 0 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java
index f7f0c9ce58e..67e5358678a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java
@@ -2,18 +2,56 @@ package com.yahoo.vespa.hosted.controller.application;
import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.application.api.ValidationId;
+import org.junit.Assert;
import org.junit.Test;
+import java.io.ByteArrayInputStream;
+import java.nio.file.NoSuchFileException;
import java.time.Instant;
import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* @author valerijf
+ * @author jonmv
*/
public class ApplicationPackageTest {
+
+ private static final String deploymentXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<deployment version=\"1.0\">\n" +
+ " <test />\n" +
+ " <prod>\n" +
+ " <parallel>\n" +
+ " <region active=\"true\">us-central-1</region>\n" +
+ " </parallel>\n" +
+ " </prod>\n" +
+ "</deployment>\n";
+
+ private static final String servicesXml = "<services version='1.0' xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\">\n" +
+ " <preprocess:include file='jdisc.xml' />\n" +
+ " <content version='1.0' if='foo' />\n" +
+ " <content version='1.0' id='foo' deploy:environment='staging prod' deploy:region='us-east-3 us-central-1'>\n" +
+ " <preprocess:include file='content/content.xml' />\n" +
+ " </content>\n" +
+ " <preprocess:include file='not_found.xml' required='false' />\n" +
+ "</services>\n";
+
+ private static final String jdiscXml = "<container id='stateless' version='1.0' />\n";
+
+ private static final String contentXml = "<documents>\n" +
+ " <document type=\"music.sd\" mode=\"index\" />\n" +
+ "</documents>\n" +
+ "<preprocess:include file=\"nodes.xml\" />";
+
+ private static final String nodesXml = "<nodes>\n" +
+ " <node hostalias=\"node0\" distribution-key=\"0\" />\n" +
+ "</nodes>";
+
@Test
public void test_createEmptyForDeploymentRemoval() {
ApplicationPackage app = ApplicationPackage.deploymentRemoval();
@@ -24,4 +62,57 @@ public class ApplicationPackageTest {
assertTrue(app.validationOverrides().allows(validationId, Instant.now()));
}
}
+
+ @Test
+ public void testMetaData() {
+ byte[] zip = ApplicationPackage.filesZip(Map.of("services.xml", servicesXml.getBytes(UTF_8),
+ "jdisc.xml", jdiscXml.getBytes(UTF_8),
+ "content/content.xml", contentXml.getBytes(UTF_8),
+ "content/nodes.xml", nodesXml.getBytes(UTF_8),
+ "gurba", "gurba".getBytes(UTF_8)));
+
+ assertEquals(Map.of("services.xml", servicesXml,
+ "jdisc.xml", jdiscXml,
+ "content/content.xml", contentXml,
+ "content/nodes.xml", nodesXml),
+ unzip(new ApplicationPackage(zip, false).metaDataZip()));
+ }
+
+ @Test
+ public void testMetaDataWithLegacyApplicationDirectory() {
+ byte[] zip = ApplicationPackage.filesZip(Map.of("application/deployment.xml", deploymentXml.getBytes(UTF_8),
+ "application/services.xml", servicesXml.getBytes(UTF_8),
+ "application/jdisc.xml", jdiscXml.getBytes(UTF_8),
+ "application/content/content.xml", contentXml.getBytes(UTF_8),
+ "application/content/nodes.xml", nodesXml.getBytes(UTF_8),
+ "application/gurba", "gurba".getBytes(UTF_8)));
+
+ assertEquals(Map.of("deployment.xml", deploymentXml,
+ "services.xml", servicesXml,
+ "jdisc.xml", jdiscXml,
+ "content/content.xml", contentXml,
+ "content/nodes.xml", nodesXml),
+ unzip(new ApplicationPackage(zip, false).metaDataZip()));
+ }
+
+ @Test
+ public void testMetaDataWithMissingFiles() {
+ byte[] zip = ApplicationPackage.filesZip(Map.of("services.xml", servicesXml.getBytes(UTF_8)));
+
+ try {
+ new ApplicationPackage(zip, false).metaDataZip();
+ Assert.fail("Should fail on missing include file");
+ }
+ catch (RuntimeException e) {
+ assertEquals("./jdisc.xml", e.getCause().getMessage());
+ }
+ }
+
+ private static Map<String, String> unzip(byte[] zip) {
+ return new ZipStreamReader(new ByteArrayInputStream(zip), __ -> true, 1 << 10)
+ .entries().stream()
+ .collect(Collectors.toMap(entry -> entry.zipEntry().getName(),
+ entry -> new String(entry.content(), UTF_8)));
+ }
+
}