diff options
Diffstat (limited to 'config-model-api/src')
3 files changed, 28 insertions, 1 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java index 6519a6f50af..48a675fa182 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java @@ -45,6 +45,7 @@ import java.util.stream.Stream; */ public class DeploymentSpecXmlReader { + private static final String deploymentTag = "deployment"; private static final String instanceTag = "instance"; private static final String majorVersionTag = "major-version"; private static final String testTag = "test"; @@ -93,6 +94,9 @@ public class DeploymentSpecXmlReader { /** Reads a deployment spec from XML */ public DeploymentSpec read(String xmlForm) { Element root = XML.getDocument(xmlForm).getDocumentElement(); + if ( ! root.getTagName().equals(deploymentTag)) + throw new IllegalArgumentException("The root tag must be <deployment>"); + if (isEmptySpec(root)) return DeploymentSpec.empty; @@ -133,7 +137,11 @@ public class DeploymentSpecXmlReader { Element instanceTag, MutableOptional<String> globalServiceId, Element parentTag) { - if (isEmptySpec(instanceTag)) + if (instanceNameString.isBlank()) + throw new IllegalArgumentException("<instance> attribute 'id' must be specified, and not be blank"); + + // If this is an absolutely empty instance, or the implicit "default" instance but without content, ignore it + if (XML.getChildren(instanceTag).isEmpty() && (instanceTag.getAttributes().getLength() == 0 || instanceTag == parentTag)) return List.of(); if (validate) diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java index efaf90e1eed..a793630c8b9 100644 --- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java +++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java @@ -3,6 +3,7 @@ package com.yahoo.config.application.api; import com.google.common.collect.ImmutableSet; import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; import org.junit.Test; @@ -422,6 +423,23 @@ public class DeploymentSpecTest { } @Test + public void testOnlyAthenzServiceDefinedInInstance() { + StringReader r = new StringReader( + "<deployment athenz-domain='domain'>" + + " <instance id='default' athenz-service='service' />" + + "</deployment>" + ); + DeploymentSpec spec = DeploymentSpec.fromXml(r); + + assertEquals("domain", spec.athenzDomain().get().value()); + assertEquals(1, spec.instances().size()); + + DeploymentInstanceSpec instance = spec.instances().get(0); + assertEquals("default", instance.name().value()); + assertEquals("service", instance.athenzService(Environment.prod, RegionName.defaultName()).get().value()); + } + + @Test public void productionSpecWithParallelDeployments() { StringReader r = new StringReader( "<deployment>" + diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java index 79a425f5e26..89972773e1c 100644 --- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java +++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java @@ -3,6 +3,7 @@ package com.yahoo.config.application.api; import com.google.common.collect.ImmutableSet; import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; import org.junit.Test; |