From b7cbd0e7b2afe292bf85ad6eb887f4c502688ab2 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Tue, 8 Oct 2019 11:03:11 +0200 Subject: Allow non-existing instances when appropriate --- config-model-api/abi-spec.json | 6 +- .../config/application/api/DeploymentSpec.java | 81 ++++++--- .../api/xml/DeploymentSpecXmlReader.java | 2 + .../config/application/api/DeploymentSpecTest.java | 198 ++++++++++++--------- .../api/DeploymentSpecWithoutInstanceTest.java | 170 +++++++++--------- 5 files changed, 252 insertions(+), 205 deletions(-) (limited to 'config-model-api') diff --git a/config-model-api/abi-spec.json b/config-model-api/abi-spec.json index 315b03c301a..d08cda06e5d 100644 --- a/config-model-api/abi-spec.json +++ b/config-model-api/abi-spec.json @@ -329,7 +329,7 @@ "public" ], "methods": [ - "public void (java.util.List, java.util.Optional, java.lang.String)", + "public void (java.util.List, java.util.Optional, java.util.Optional, java.util.Optional, java.lang.String)", "public void (java.util.Optional, com.yahoo.config.application.api.DeploymentSpec$UpgradePolicy, java.util.Optional, java.util.List, java.util.List, java.lang.String, java.util.Optional, java.util.Optional, com.yahoo.config.application.api.Notifications, java.util.List)", "public java.util.Optional globalServiceId()", "public com.yahoo.config.application.api.DeploymentSpec$UpgradePolicy upgradePolicy()", @@ -341,12 +341,12 @@ "public java.util.List zones()", "public java.util.Optional athenzDomain()", "public java.util.Optional athenzService(com.yahoo.config.provision.Environment, com.yahoo.config.provision.RegionName)", + "public java.util.Optional athenzService(com.yahoo.config.provision.InstanceName, com.yahoo.config.provision.Environment, com.yahoo.config.provision.RegionName)", "public com.yahoo.config.application.api.Notifications notifications()", "public java.util.List endpoints()", "public java.lang.String xmlForm()", "public boolean includes(com.yahoo.config.provision.Environment, java.util.Optional)", - "public com.yahoo.config.application.api.DeploymentInstanceSpec instance(java.lang.String)", - "public com.yahoo.config.application.api.DeploymentInstanceSpec instance(com.yahoo.config.provision.InstanceName)", + "public java.util.Optional instance(com.yahoo.config.provision.InstanceName)", "public com.yahoo.config.application.api.DeploymentInstanceSpec requireInstance(java.lang.String)", "public com.yahoo.config.application.api.DeploymentInstanceSpec requireInstance(com.yahoo.config.provision.InstanceName)", "public java.util.List instances()", diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java index 71af050174b..9b0454cffee 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java @@ -47,11 +47,18 @@ public class DeploymentSpec { List.of()); private final List steps; + + // Attributes which can be set on the root tag and which must be available outside of any particular instance private final Optional majorVersion; + private final Optional athenzDomain; + private final Optional athenzService; + private final String xmlForm; public DeploymentSpec(List steps, Optional majorVersion, + Optional athenzDomain, + Optional athenzService, String xmlForm) { if (singleInstance(steps)) { // TODO: Remove this clause after November 2019 var singleInstance = (DeploymentInstanceSpec)steps.get(0); @@ -61,6 +68,8 @@ public class DeploymentSpec { this.steps = List.copyOf(completeSteps(steps)); } this.majorVersion = majorVersion; + this.athenzDomain = athenzDomain; + this.athenzService = athenzService; this.xmlForm = xmlForm; validateTotalDelay(steps); } @@ -81,6 +90,8 @@ public class DeploymentSpec { notifications, endpoints)), majorVersion, + athenzDomain, + athenzService, xmlForm); } @@ -137,7 +148,7 @@ public class DeploymentSpec { } // TODO: Remove after October 2019 - private DeploymentInstanceSpec defaultInstance() { + private DeploymentInstanceSpec singleInstance() { if (singleInstance(steps)) return (DeploymentInstanceSpec)steps.get(0); throw new IllegalArgumentException("This deployment spec does not support the legacy API " + "as it has multiple instances: " + @@ -145,56 +156,74 @@ public class DeploymentSpec { } // TODO: Remove after October 2019 - public Optional globalServiceId() { return defaultInstance().globalServiceId(); } + public Optional globalServiceId() { return singleInstance().globalServiceId(); } // TODO: Remove after October 2019 - public UpgradePolicy upgradePolicy() { return defaultInstance().upgradePolicy(); } + public UpgradePolicy upgradePolicy() { return singleInstance().upgradePolicy(); } /** Returns the major version this application is pinned to, or empty (default) to allow all major versions */ public Optional majorVersion() { return majorVersion; } // TODO: Remove after November 2019 - public boolean canUpgradeAt(Instant instant) { return defaultInstance().canUpgradeAt(instant); } + public boolean canUpgradeAt(Instant instant) { return singleInstance().canUpgradeAt(instant); } // TODO: Remove after November 2019 - public boolean canChangeRevisionAt(Instant instant) { return defaultInstance().canChangeRevisionAt(instant); } + public boolean canChangeRevisionAt(Instant instant) { return singleInstance().canChangeRevisionAt(instant); } // TODO: Remove after November 2019 - public List changeBlocker() { return defaultInstance().changeBlocker(); } + public List changeBlocker() { return singleInstance().changeBlocker(); } /** Returns the deployment steps of this in the order they will be performed */ public List steps() { - if (singleInstance(steps)) return defaultInstance().steps(); // TODO: Remove line after November 2019 + if (singleInstance(steps)) return singleInstance().steps(); // TODO: Remove line after November 2019 return steps; } // TODO: Remove after November 2019 public List zones() { - return defaultInstance().steps().stream() - .flatMap(step -> step.zones().stream()) - .collect(Collectors.toList()); + return singleInstance().steps().stream() + .flatMap(step -> step.zones().stream()) + .collect(Collectors.toList()); } - // TODO: Remove after November 2019 - public Optional athenzDomain() { return defaultInstance().athenzDomain(); } + /** Returns the Athenz domain set on the root tag, if any */ + public Optional athenzDomain() { return athenzDomain; } + /** Returns the Athenz service to use for the given environment and region, if any */ // TODO: Remove after November 2019 public Optional athenzService(Environment environment, RegionName region) { - return defaultInstance().athenzService(environment, region); + Optional service = Optional.empty(); + if (singleInstance(steps)) + service = singleInstance().athenzService(environment, region); + if (service.isPresent()) + return service; + return this.athenzService; + } + + /** + * Returns the Athenz service to use for the given instance, environment and region, if any. + * This returns the default set on the deploy tag (if any) if nothing is set for this particular + * combination of instance, environment and region, and also if that combination is not specified + * at all in services. + */ + public Optional athenzService(InstanceName instanceName, Environment environment, RegionName region) { + Optional instance = instance(instanceName); + if (instance.isEmpty()) return this.athenzService; + return instance.get().athenzService(environment, region).or(() -> this.athenzService); } // TODO: Remove after November 2019 - public Notifications notifications() { return defaultInstance().notifications(); } + public Notifications notifications() { return singleInstance().notifications(); } // TODO: Remove after November 2019 - public List endpoints() { return defaultInstance().endpoints(); } + public List endpoints() { return singleInstance().endpoints(); } /** Returns the XML form of this spec, or null if it was not created by fromXml, nor is empty */ public String xmlForm() { return xmlForm; } // TODO: Remove after November 2019 public boolean includes(Environment environment, Optional region) { - return defaultInstance().deploysTo(environment, region); + return singleInstance().deploysTo(environment, region); } // TODO: Remove after November 2019 @@ -202,31 +231,25 @@ public class DeploymentSpec { return steps.size() == 1 && steps.get(0) instanceof DeploymentInstanceSpec; } - /** Returns the instance step containing the given instance name, or null if not present */ - public DeploymentInstanceSpec instance(String name) { - return instance(InstanceName.from(name)); - } - - /** Returns the instance step containing the given instance name, or null if not present */ - public DeploymentInstanceSpec instance(InstanceName name) { + /** Returns the instance step containing the given instance name */ + public Optional instance(InstanceName name) { for (DeploymentInstanceSpec instance : instances()) { if (instance.name().equals(name)) - return instance; + return Optional.of(instance); } - return null; + return Optional.empty(); } - /** Returns the instance step containing the given instance name, or throws an IllegalArgumentException if not present */ public DeploymentInstanceSpec requireInstance(String name) { return requireInstance(InstanceName.from(name)); } public DeploymentInstanceSpec requireInstance(InstanceName name) { - DeploymentInstanceSpec instance = instance(name); - if (instance == null) + Optional instance = instance(name); + if (instance.isEmpty()) throw new IllegalArgumentException("No instance '" + name + "' in deployment.xml'. Instances: " + instances().stream().map(spec -> spec.name().toString()).collect(Collectors.joining(","))); - return instance; + return instance.get(); } /** Returns the steps of this which are instances */ 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 cb645813290..59b31985376 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 @@ -108,6 +108,8 @@ public class DeploymentSpecXmlReader { return new DeploymentSpec(steps, optionalIntegerAttribute(majorVersionTag, root), + stringAttribute(athenzDomainAttribute, root).map(AthenzDomain::from), + stringAttribute(athenzServiceAttribute, root).map(AthenzService::from), xmlForm); } 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 b75801de7ea..c6035ac8d46 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; @@ -39,14 +40,14 @@ public class DeploymentSpecTest { StringReader r = new StringReader(specXml); DeploymentSpec spec = DeploymentSpec.fromXml(r); assertEquals(specXml, spec.xmlForm()); - assertEquals(1, spec.instance("default").steps().size()); + assertEquals(1, spec.requireInstance("default").steps().size()); assertFalse(spec.majorVersion().isPresent()); - assertTrue(spec.instance("default").steps().get(0).deploysTo(Environment.test)); - assertTrue(spec.instance("default").includes(Environment.test, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); - assertFalse(spec.instance("default").includes(Environment.staging, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.prod, Optional.empty())); - assertFalse(spec.instance("default").globalServiceId().isPresent()); + assertTrue(spec.requireInstance("default").steps().get(0).deploysTo(Environment.test)); + assertTrue(spec.requireInstance("default").includes(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); + assertFalse(spec.requireInstance("default").includes(Environment.staging, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.prod, Optional.empty())); + assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); } @Test @@ -60,7 +61,7 @@ public class DeploymentSpecTest { StringReader r = new StringReader(specXml); DeploymentSpec spec = DeploymentSpec.fromXml(r); assertEquals(specXml, spec.xmlForm()); - assertEquals(1, spec.instance("default").steps().size()); + assertEquals(1, spec.requireInstance("default").steps().size()); assertTrue(spec.majorVersion().isPresent()); assertEquals(6, (int)spec.majorVersion().get()); } @@ -76,14 +77,14 @@ public class DeploymentSpecTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(2, spec.instance("default").steps().size()); - assertTrue(spec.instance("default").steps().get(0).deploysTo(Environment.test)); - assertTrue(spec.instance("default").steps().get(1).deploysTo(Environment.staging)); - assertTrue(spec.instance("default").includes(Environment.test, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); - assertTrue(spec.instance("default").includes(Environment.staging, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.prod, Optional.empty())); - assertFalse(spec.instance("default").globalServiceId().isPresent()); + assertEquals(2, spec.requireInstance("default").steps().size()); + assertTrue(spec.requireInstance("default").steps().get(0).deploysTo(Environment.test)); + assertTrue(spec.requireInstance("default").steps().get(1).deploysTo(Environment.staging)); + assertTrue(spec.requireInstance("default").includes(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); + assertTrue(spec.requireInstance("default").includes(Environment.staging, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.prod, Optional.empty())); + assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); } @Test @@ -100,27 +101,27 @@ public class DeploymentSpecTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(4, spec.instance("default").steps().size()); + assertEquals(4, spec.requireInstance("default").steps().size()); - assertTrue(spec.instance("default").steps().get(0).deploysTo(Environment.test)); + assertTrue(spec.requireInstance("default").steps().get(0).deploysTo(Environment.test)); - assertTrue(spec.instance("default").steps().get(1).deploysTo(Environment.staging)); + assertTrue(spec.requireInstance("default").steps().get(1).deploysTo(Environment.staging)); - assertTrue(spec.instance("default").steps().get(2).deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); - assertFalse(((DeploymentSpec.DeclaredZone)spec.instance("default").steps().get(2)).active()); + assertTrue(spec.requireInstance("default").steps().get(2).deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertFalse(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(2)).active()); - assertTrue(spec.instance("default").steps().get(3).deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); - assertTrue(((DeploymentSpec.DeclaredZone)spec.instance("default").steps().get(3)).active()); + assertTrue(spec.requireInstance("default").steps().get(3).deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertTrue(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(3)).active()); - assertTrue(spec.instance("default").includes(Environment.test, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); - assertTrue(spec.instance("default").includes(Environment.staging, Optional.empty())); - assertTrue(spec.instance("default").includes(Environment.prod, Optional.of(RegionName.from("us-east1")))); - assertTrue(spec.instance("default").includes(Environment.prod, Optional.of(RegionName.from("us-west1")))); - assertFalse(spec.instance("default").includes(Environment.prod, Optional.of(RegionName.from("no-such-region")))); - assertFalse(spec.instance("default").globalServiceId().isPresent()); + assertTrue(spec.requireInstance("default").includes(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); + assertTrue(spec.requireInstance("default").includes(Environment.staging, Optional.empty())); + assertTrue(spec.requireInstance("default").includes(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertTrue(spec.requireInstance("default").includes(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertFalse(spec.requireInstance("default").includes(Environment.prod, Optional.of(RegionName.from("no-such-region")))); + assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); - assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, spec.instance("default").upgradePolicy()); + assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, spec.requireInstance("default").upgradePolicy()); } @Test @@ -140,7 +141,7 @@ public class DeploymentSpecTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertCorrectFirstInstance(spec.instance("default")); + assertCorrectFirstInstance(spec.requireInstance("default")); } @Test @@ -166,9 +167,9 @@ public class DeploymentSpecTest { DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertCorrectFirstInstance(spec.instance("instance1")); + assertCorrectFirstInstance(spec.requireInstance("instance1")); - DeploymentInstanceSpec instance2 = spec.instance("instance2"); + DeploymentInstanceSpec instance2 = spec.requireInstance("instance2"); assertEquals(1, instance2.steps().size()); assertEquals(1, instance2.zones().size()); @@ -193,8 +194,8 @@ public class DeploymentSpecTest { DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertCorrectFirstInstance(spec.instance("instance1")); - assertCorrectFirstInstance(spec.instance("instance2")); + assertCorrectFirstInstance(spec.requireInstance("instance1")); + assertCorrectFirstInstance(spec.requireInstance("instance2")); } private void assertCorrectFirstInstance(DeploymentInstanceSpec instance) { @@ -237,7 +238,7 @@ public class DeploymentSpecTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(spec.instance("default").globalServiceId(), Optional.of("query")); + assertEquals(spec.requireInstance("default").globalServiceId(), Optional.of("query")); } @Test(expected=IllegalArgumentException.class) @@ -281,7 +282,7 @@ public class DeploymentSpecTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals("qrs", spec.instance("default").globalServiceId().get()); + assertEquals("qrs", spec.requireInstance("default").globalServiceId().get()); } @Test @@ -300,7 +301,7 @@ public class DeploymentSpecTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals("canary", spec.instance("default").upgradePolicy().toString()); + assertEquals("canary", spec.requireInstance("default").upgradePolicy().toString()); } @Test @@ -317,8 +318,8 @@ public class DeploymentSpecTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals("conservative", spec.instance("instance1").upgradePolicy().toString()); - assertEquals("canary", spec.instance("instance2").upgradePolicy().toString()); + assertEquals("conservative", spec.requireInstance("instance1").upgradePolicy().toString()); + assertEquals("canary", spec.requireInstance("instance2").upgradePolicy().toString()); } @Test @@ -349,7 +350,7 @@ public class DeploymentSpecTest { @Test public void testEmpty() { - assertFalse(DeploymentSpec.empty.instance("default").globalServiceId().isPresent()); + assertFalse(DeploymentSpec.empty.requireInstance("default").globalServiceId().isPresent()); assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, DeploymentSpec.empty.upgradePolicy()); assertTrue(DeploymentSpec.empty.steps().isEmpty()); assertEquals("", DeploymentSpec.empty.xmlForm()); @@ -371,7 +372,7 @@ public class DeploymentSpecTest { "" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - DeploymentSpec.ParallelZones parallelZones = ((DeploymentSpec.ParallelZones) spec.instance("default").steps().get(3)); + DeploymentSpec.ParallelZones parallelZones = ((DeploymentSpec.ParallelZones) spec.requireInstance("default").steps().get(3)); assertEquals(2, parallelZones.zones().size()); assertEquals(RegionName.from("us-central-1"), parallelZones.zones().get(0).region().get()); assertEquals(RegionName.from("us-east-3"), parallelZones.zones().get(1).region().get()); @@ -546,23 +547,23 @@ public class DeploymentSpecTest { "" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(2, spec.instance("default").changeBlocker().size()); - assertTrue(spec.instance("default").changeBlocker().get(0).blocksVersions()); - assertFalse(spec.instance("default").changeBlocker().get(0).blocksRevisions()); - assertEquals(ZoneId.of("UTC"), spec.instance("default").changeBlocker().get(0).window().zone()); + assertEquals(2, spec.requireInstance("default").changeBlocker().size()); + assertTrue(spec.requireInstance("default").changeBlocker().get(0).blocksVersions()); + assertFalse(spec.requireInstance("default").changeBlocker().get(0).blocksRevisions()); + assertEquals(ZoneId.of("UTC"), spec.requireInstance("default").changeBlocker().get(0).window().zone()); - assertTrue(spec.instance("default").changeBlocker().get(1).blocksVersions()); - assertTrue(spec.instance("default").changeBlocker().get(1).blocksRevisions()); - assertEquals(ZoneId.of("CET"), spec.instance("default").changeBlocker().get(1).window().zone()); + assertTrue(spec.requireInstance("default").changeBlocker().get(1).blocksVersions()); + assertTrue(spec.requireInstance("default").changeBlocker().get(1).blocksRevisions()); + assertEquals(ZoneId.of("CET"), spec.requireInstance("default").changeBlocker().get(1).window().zone()); - assertTrue(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-18T14:15:30.00Z"))); - assertFalse(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-18T15:15:30.00Z"))); - assertFalse(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-18T16:15:30.00Z"))); - assertTrue(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-18T17:15:30.00Z"))); + assertTrue(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-18T14:15:30.00Z"))); + assertFalse(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-18T15:15:30.00Z"))); + assertFalse(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-18T16:15:30.00Z"))); + assertTrue(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-18T17:15:30.00Z"))); - assertTrue(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-23T09:15:30.00Z"))); - assertFalse(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-23T08:15:30.00Z"))); // 10 in CET - assertTrue(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-23T10:15:30.00Z"))); + assertTrue(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-23T09:15:30.00Z"))); + assertFalse(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-23T08:15:30.00Z"))); // 10 in CET + assertTrue(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-23T10:15:30.00Z"))); } @Test @@ -582,13 +583,13 @@ public class DeploymentSpecTest { String inheritedChangeBlocker = "change blocker revision=false version=true window=time window for hour(s) [15, 16] on [monday, tuesday] in UTC"; - assertEquals(2, spec.instance("instance1").changeBlocker().size()); - assertEquals(inheritedChangeBlocker, spec.instance("instance1").changeBlocker().get(0).toString()); + assertEquals(2, spec.requireInstance("instance1").changeBlocker().size()); + assertEquals(inheritedChangeBlocker, spec.requireInstance("instance1").changeBlocker().get(0).toString()); assertEquals("change blocker revision=true version=true window=time window for hour(s) [10] on [saturday] in CET", - spec.instance("instance1").changeBlocker().get(1).toString()); + spec.requireInstance("instance1").changeBlocker().get(1).toString()); - assertEquals(1, spec.instance("instance2").changeBlocker().size()); - assertEquals(inheritedChangeBlocker, spec.instance("instance2").changeBlocker().get(0).toString()); + assertEquals(1, spec.requireInstance("instance2").changeBlocker().size()); + assertEquals(inheritedChangeBlocker, spec.requireInstance("instance2").changeBlocker().get(0).toString()); } @Test @@ -603,8 +604,16 @@ public class DeploymentSpecTest { "" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(spec.instance("instance1").athenzDomain().get().value(), "domain"); - assertEquals(spec.instance("instance1").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "service"); + assertEquals("domain", spec.athenzDomain().get().value()); + assertEquals("service", spec.athenzService(InstanceName.from("instance1"), + Environment.prod, + RegionName.from("us-west-1")).get().value()); + assertEquals("service", spec.athenzService(InstanceName.from("non-existent"), + Environment.prod, + RegionName.from("us-west-1")).get().value()); + assertEquals("domain", spec.requireInstance("instance1").athenzDomain().get().value()); + assertEquals("service", spec.requireInstance("instance1").athenzService(Environment.prod, + RegionName.from("us-west-1")).get().value()); } @Test @@ -619,8 +628,11 @@ public class DeploymentSpecTest { "" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(spec.instance("default").athenzDomain().get().value(), "domain"); - assertEquals(spec.instance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "service"); + assertEquals(spec.requireInstance("default").athenzDomain().get().value(), "domain"); + assertEquals(spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "service"); + assertEquals(Optional.empty(), spec.athenzService(InstanceName.from("non-existent"), + Environment.prod, + RegionName.from("us-west-1"))); } @Test @@ -636,8 +648,18 @@ public class DeploymentSpecTest { "" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(spec.instance("default").athenzDomain().get().value(), "domain"); - assertEquals(spec.instance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "prod-service"); + assertEquals(spec.requireInstance("default").athenzDomain().get().value(), "domain"); + assertEquals(spec.athenzService(InstanceName.from("default"), + Environment.prod, + RegionName.from("us-west-1")).get().value(), + "prod-service"); + assertEquals(spec.requireInstance("default").athenzService(Environment.prod, + RegionName.from("us-west-1")).get().value(), + "prod-service"); + assertEquals(spec.athenzService(InstanceName.from("non-existent"), + Environment.prod, + RegionName.from("us-west-1")).get().value(), + "service"); } @Test(expected = IllegalArgumentException.class) @@ -673,7 +695,7 @@ public class DeploymentSpecTest { assertEquals(Notifications.none(), DeploymentSpec.fromXml("" + " " + - "").instance("default").notifications()); + "").requireInstance("default").notifications()); } @Test @@ -683,7 +705,7 @@ public class DeploymentSpecTest { " " + " " + ""); - assertEquals(Notifications.none(), spec.instance("default").notifications()); + assertEquals(Notifications.none(), spec.requireInstance("default").notifications()); } @Test @@ -697,10 +719,10 @@ public class DeploymentSpecTest { " " + " " + ""); - assertEquals(ImmutableSet.of(author), spec.instance("default").notifications().emailRolesFor(failing)); - assertEquals(ImmutableSet.of(author), spec.instance("default").notifications().emailRolesFor(failingCommit)); - assertEquals(ImmutableSet.of("john@dev", "jane@dev"), spec.instance("default").notifications().emailAddressesFor(failingCommit)); - assertEquals(ImmutableSet.of("jane@dev"), spec.instance("default").notifications().emailAddressesFor(failing)); + assertEquals(ImmutableSet.of(author), spec.requireInstance("default").notifications().emailRolesFor(failing)); + assertEquals(ImmutableSet.of(author), spec.requireInstance("default").notifications().emailRolesFor(failingCommit)); + assertEquals(ImmutableSet.of("john@dev", "jane@dev"), spec.requireInstance("default").notifications().emailAddressesFor(failingCommit)); + assertEquals(ImmutableSet.of("jane@dev"), spec.requireInstance("default").notifications().emailAddressesFor(failing)); } @Test @@ -723,11 +745,11 @@ public class DeploymentSpecTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - DeploymentInstanceSpec instance1 = spec.instance("instance1"); + DeploymentInstanceSpec instance1 = spec.requireInstance("instance1"); assertEquals(Set.of(author), instance1.notifications().emailRolesFor(failing)); assertEquals(Set.of("john@operator"), instance1.notifications().emailAddressesFor(failing)); - DeploymentInstanceSpec instance2 = spec.instance("instance2"); + DeploymentInstanceSpec instance2 = spec.requireInstance("instance2"); assertEquals(Set.of(author), instance2.notifications().emailRolesFor(failingCommit)); assertEquals(Set.of("mary@dev"), instance2.notifications().emailAddressesFor(failingCommit)); } @@ -752,11 +774,11 @@ public class DeploymentSpecTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - DeploymentInstanceSpec instance1 = spec.instance("instance1"); + DeploymentInstanceSpec instance1 = spec.requireInstance("instance1"); assertEquals(Set.of(author), instance1.notifications().emailRolesFor(failing)); assertEquals(Set.of("john@operator"), instance1.notifications().emailAddressesFor(failing)); - DeploymentInstanceSpec instance2 = spec.instance("instance2"); + DeploymentInstanceSpec instance2 = spec.requireInstance("instance2"); assertEquals(Set.of(author), instance2.notifications().emailRolesFor(failingCommit)); assertEquals(Set.of("mary@dev"), instance2.notifications().emailAddressesFor(failingCommit)); } @@ -771,9 +793,9 @@ public class DeploymentSpecTest { " " + " " + ""); - assertEquals(Optional.of("d-1-4-20"), spec.instance("default").steps().get(0).zones().get(0).testerFlavor()); - assertEquals(Optional.empty(), spec.instance("default").steps().get(1).zones().get(0).testerFlavor()); - assertEquals(Optional.of("d-2-8-50"), spec.instance("default").steps().get(2).zones().get(0).testerFlavor()); + assertEquals(Optional.of("d-1-4-20"), spec.requireInstance("default").steps().get(0).zones().get(0).testerFlavor()); + assertEquals(Optional.empty(), spec.requireInstance("default").steps().get(1).zones().get(0).testerFlavor()); + assertEquals(Optional.of("d-2-8-50"), spec.requireInstance("default").steps().get(2).zones().get(0).testerFlavor()); } @Test @@ -781,7 +803,7 @@ public class DeploymentSpecTest { assertEquals(Collections.emptyList(), DeploymentSpec.fromXml("" + " " + - "").instance("default").endpoints()); + "").requireInstance("default").endpoints()); } @Test @@ -791,7 +813,7 @@ public class DeploymentSpecTest { " " + " " + ""); - assertEquals(Collections.emptyList(), spec.instance("default").endpoints()); + assertEquals(Collections.emptyList(), spec.requireInstance("default").endpoints()); } @Test @@ -814,15 +836,15 @@ public class DeploymentSpecTest { assertEquals( List.of("foo", "nalle", "default"), - spec.instance("default").endpoints().stream().map(Endpoint::endpointId).collect(Collectors.toList()) + spec.requireInstance("default").endpoints().stream().map(Endpoint::endpointId).collect(Collectors.toList()) ); assertEquals( List.of("bar", "frosk", "quux"), - spec.instance("default").endpoints().stream().map(Endpoint::containerId).collect(Collectors.toList()) + spec.requireInstance("default").endpoints().stream().map(Endpoint::containerId).collect(Collectors.toList()) ); - assertEquals(Set.of(RegionName.from("us-east")), spec.instance("default").endpoints().get(0).regions()); + assertEquals(Set.of(RegionName.from("us-east")), spec.requireInstance("default").endpoints().get(0).regions()); } @Test @@ -880,7 +902,7 @@ public class DeploymentSpecTest { } private static Set endpointRegions(String endpointId, DeploymentSpec spec) { - return spec.instance("default").endpoints().stream() + return spec.requireInstance("default").endpoints().stream() .filter(endpoint -> endpoint.endpointId().equals(endpointId)) .flatMap(endpoint -> endpoint.regions().stream()) .map(RegionName::value) @@ -899,7 +921,7 @@ public class DeploymentSpecTest { " " + ""; - return DeploymentSpec.fromXml(xml).instance("default").endpoints().stream() + return DeploymentSpec.fromXml(xml).requireInstance("default").endpoints().stream() .map(Endpoint::endpointId) .collect(Collectors.toList()); } 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 33ef3f4bea8..ad5c6375aa6 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 @@ -40,11 +40,11 @@ public class DeploymentSpecWithoutInstanceTest { assertEquals(1, spec.steps().size()); assertFalse(spec.majorVersion().isPresent()); assertTrue(spec.steps().get(0).deploysTo(Environment.test)); - assertTrue(spec.instance("default").includes(Environment.test, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); - assertFalse(spec.instance("default").includes(Environment.staging, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.prod, Optional.empty())); - assertFalse(spec.instance("default").globalServiceId().isPresent()); + assertTrue(spec.requireInstance("default").includes(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); + assertFalse(spec.requireInstance("default").includes(Environment.staging, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.prod, Optional.empty())); + assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); } @Test @@ -71,13 +71,13 @@ public class DeploymentSpecWithoutInstanceTest { DeploymentSpec spec = DeploymentSpec.fromXml(r); assertEquals(2, spec.steps().size()); - assertTrue(spec.instance("default").steps().get(0).deploysTo(Environment.test)); - assertTrue(spec.instance("default").steps().get(1).deploysTo(Environment.staging)); - assertTrue(spec.instance("default").includes(Environment.test, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); - assertTrue(spec.instance("default").includes(Environment.staging, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.prod, Optional.empty())); - assertFalse(spec.instance("default").globalServiceId().isPresent()); + assertTrue(spec.requireInstance("default").steps().get(0).deploysTo(Environment.test)); + assertTrue(spec.requireInstance("default").steps().get(1).deploysTo(Environment.staging)); + assertTrue(spec.requireInstance("default").includes(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); + assertTrue(spec.requireInstance("default").includes(Environment.staging, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.prod, Optional.empty())); + assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); } @Test @@ -92,27 +92,27 @@ public class DeploymentSpecWithoutInstanceTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(4, spec.instance("default").steps().size()); + assertEquals(4, spec.requireInstance("default").steps().size()); - assertTrue(spec.instance("default").steps().get(0).deploysTo(Environment.test)); + assertTrue(spec.requireInstance("default").steps().get(0).deploysTo(Environment.test)); - assertTrue(spec.instance("default").steps().get(1).deploysTo(Environment.staging)); + assertTrue(spec.requireInstance("default").steps().get(1).deploysTo(Environment.staging)); - assertTrue(spec.instance("default").steps().get(2).deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); - assertFalse(((DeploymentSpec.DeclaredZone)spec.instance("default").steps().get(2)).active()); + assertTrue(spec.requireInstance("default").steps().get(2).deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertFalse(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(2)).active()); - assertTrue(spec.instance("default").steps().get(3).deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); - assertTrue(((DeploymentSpec.DeclaredZone)spec.instance("default").steps().get(3)).active()); + assertTrue(spec.requireInstance("default").steps().get(3).deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertTrue(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(3)).active()); - assertTrue(spec.instance("default").includes(Environment.test, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); - assertTrue(spec.instance("default").includes(Environment.staging, Optional.empty())); - assertTrue(spec.instance("default").includes(Environment.prod, Optional.of(RegionName.from("us-east1")))); - assertTrue(spec.instance("default").includes(Environment.prod, Optional.of(RegionName.from("us-west1")))); - assertFalse(spec.instance("default").includes(Environment.prod, Optional.of(RegionName.from("no-such-region")))); - assertFalse(spec.instance("default").globalServiceId().isPresent()); + assertTrue(spec.requireInstance("default").includes(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); + assertTrue(spec.requireInstance("default").includes(Environment.staging, Optional.empty())); + assertTrue(spec.requireInstance("default").includes(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertTrue(spec.requireInstance("default").includes(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertFalse(spec.requireInstance("default").includes(Environment.prod, Optional.of(RegionName.from("no-such-region")))); + assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); - assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, spec.instance("default").upgradePolicy()); + assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, spec.requireInstance("default").upgradePolicy()); } @Test @@ -130,29 +130,29 @@ public class DeploymentSpecWithoutInstanceTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(5, spec.instance("default").steps().size()); - assertEquals(4, spec.instance("default").zones().size()); + assertEquals(5, spec.requireInstance("default").steps().size()); + assertEquals(4, spec.requireInstance("default").zones().size()); - assertTrue(spec.instance("default").steps().get(0).deploysTo(Environment.test)); + assertTrue(spec.requireInstance("default").steps().get(0).deploysTo(Environment.test)); - assertTrue(spec.instance("default").steps().get(1).deploysTo(Environment.staging)); + assertTrue(spec.requireInstance("default").steps().get(1).deploysTo(Environment.staging)); - assertTrue(spec.instance("default").steps().get(2).deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); - assertFalse(((DeploymentSpec.DeclaredZone)spec.instance("default").steps().get(2)).active()); + assertTrue(spec.requireInstance("default").steps().get(2).deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertFalse(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(2)).active()); - assertTrue(spec.instance("default").steps().get(3) instanceof DeploymentSpec.Delay); - assertEquals(3 * 60 * 60 + 30 * 60, spec.instance("default").steps().get(3).delay().getSeconds()); + assertTrue(spec.requireInstance("default").steps().get(3) instanceof DeploymentSpec.Delay); + assertEquals(3 * 60 * 60 + 30 * 60, spec.requireInstance("default").steps().get(3).delay().getSeconds()); - assertTrue(spec.instance("default").steps().get(4).deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); - assertTrue(((DeploymentSpec.DeclaredZone)spec.instance("default").steps().get(4)).active()); + assertTrue(spec.requireInstance("default").steps().get(4).deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertTrue(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(4)).active()); - assertTrue(spec.instance("default").includes(Environment.test, Optional.empty())); - assertFalse(spec.instance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); - assertTrue(spec.instance("default").includes(Environment.staging, Optional.empty())); - assertTrue(spec.instance("default").includes(Environment.prod, Optional.of(RegionName.from("us-east1")))); - assertTrue(spec.instance("default").includes(Environment.prod, Optional.of(RegionName.from("us-west1")))); - assertFalse(spec.instance("default").includes(Environment.prod, Optional.of(RegionName.from("no-such-region")))); - assertFalse(spec.instance("default").globalServiceId().isPresent()); + assertTrue(spec.requireInstance("default").includes(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").includes(Environment.test, Optional.of(RegionName.from("region1")))); + assertTrue(spec.requireInstance("default").includes(Environment.staging, Optional.empty())); + assertTrue(spec.requireInstance("default").includes(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertTrue(spec.requireInstance("default").includes(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertFalse(spec.requireInstance("default").includes(Environment.prod, Optional.of(RegionName.from("no-such-region")))); + assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); } @Test @@ -167,7 +167,7 @@ public class DeploymentSpecWithoutInstanceTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(spec.instance("default").globalServiceId(), Optional.of("query")); + assertEquals(spec.requireInstance("default").globalServiceId(), Optional.of("query")); } @Test(expected=IllegalArgumentException.class) @@ -205,7 +205,7 @@ public class DeploymentSpecWithoutInstanceTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals("qrs", spec.instance("default").globalServiceId().get()); + assertEquals("qrs", spec.requireInstance("default").globalServiceId().get()); } @Test @@ -222,7 +222,7 @@ public class DeploymentSpecWithoutInstanceTest { ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals("canary", spec.instance("default").upgradePolicy().toString()); + assertEquals("canary", spec.requireInstance("default").upgradePolicy().toString()); } @Test @@ -251,7 +251,7 @@ public class DeploymentSpecWithoutInstanceTest { @Test public void testEmpty() { - assertFalse(DeploymentSpec.empty.instance("default").globalServiceId().isPresent()); + assertFalse(DeploymentSpec.empty.requireInstance("default").globalServiceId().isPresent()); assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, DeploymentSpec.empty.upgradePolicy()); assertTrue(DeploymentSpec.empty.steps().isEmpty()); assertEquals("", DeploymentSpec.empty.xmlForm()); @@ -271,7 +271,7 @@ public class DeploymentSpecWithoutInstanceTest { "" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - DeploymentSpec.ParallelZones parallelZones = ((DeploymentSpec.ParallelZones) spec.instance("default").steps().get(3)); + DeploymentSpec.ParallelZones parallelZones = ((DeploymentSpec.ParallelZones) spec.requireInstance("default").steps().get(3)); assertEquals(2, parallelZones.zones().size()); assertEquals(RegionName.from("us-central-1"), parallelZones.zones().get(0).region().get()); assertEquals(RegionName.from("us-east-3"), parallelZones.zones().get(1).region().get()); @@ -339,23 +339,23 @@ public class DeploymentSpecWithoutInstanceTest { "" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(2, spec.instance("default").changeBlocker().size()); - assertTrue(spec.instance("default").changeBlocker().get(0).blocksVersions()); - assertFalse(spec.instance("default").changeBlocker().get(0).blocksRevisions()); - assertEquals(ZoneId.of("UTC"), spec.instance("default").changeBlocker().get(0).window().zone()); - - assertTrue(spec.instance("default").changeBlocker().get(1).blocksVersions()); - assertTrue(spec.instance("default").changeBlocker().get(1).blocksRevisions()); - assertEquals(ZoneId.of("CET"), spec.instance("default").changeBlocker().get(1).window().zone()); - - assertTrue(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-18T14:15:30.00Z"))); - assertFalse(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-18T15:15:30.00Z"))); - assertFalse(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-18T16:15:30.00Z"))); - assertTrue(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-18T17:15:30.00Z"))); - - assertTrue(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-23T09:15:30.00Z"))); - assertFalse(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-23T08:15:30.00Z"))); // 10 in CET - assertTrue(spec.instance("default").canUpgradeAt(Instant.parse("2017-09-23T10:15:30.00Z"))); + assertEquals(2, spec.requireInstance("default").changeBlocker().size()); + assertTrue(spec.requireInstance("default").changeBlocker().get(0).blocksVersions()); + assertFalse(spec.requireInstance("default").changeBlocker().get(0).blocksRevisions()); + assertEquals(ZoneId.of("UTC"), spec.requireInstance("default").changeBlocker().get(0).window().zone()); + + assertTrue(spec.requireInstance("default").changeBlocker().get(1).blocksVersions()); + assertTrue(spec.requireInstance("default").changeBlocker().get(1).blocksRevisions()); + assertEquals(ZoneId.of("CET"), spec.requireInstance("default").changeBlocker().get(1).window().zone()); + + assertTrue(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-18T14:15:30.00Z"))); + assertFalse(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-18T15:15:30.00Z"))); + assertFalse(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-18T16:15:30.00Z"))); + assertTrue(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-18T17:15:30.00Z"))); + + assertTrue(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-23T09:15:30.00Z"))); + assertFalse(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-23T08:15:30.00Z"))); // 10 in CET + assertTrue(spec.requireInstance("default").canUpgradeAt(Instant.parse("2017-09-23T10:15:30.00Z"))); } @Test @@ -368,8 +368,8 @@ public class DeploymentSpecWithoutInstanceTest { "" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(spec.instance("default").athenzDomain().get().value(), "domain"); - assertEquals(spec.instance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "service"); + assertEquals(spec.requireInstance("default").athenzDomain().get().value(), "domain"); + assertEquals(spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "service"); } @Test @@ -383,8 +383,8 @@ public class DeploymentSpecWithoutInstanceTest { "" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - assertEquals(spec.instance("default").athenzDomain().get().value(), "domain"); - assertEquals(spec.instance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "prod-service"); + assertEquals(spec.requireInstance("default").athenzDomain().get().value(), "domain"); + assertEquals(spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "prod-service"); } @Test(expected = IllegalArgumentException.class) @@ -414,7 +414,7 @@ public class DeploymentSpecWithoutInstanceTest { @Test public void noNotifications() { assertEquals(Notifications.none(), - DeploymentSpec.fromXml("").instance("default").notifications()); + DeploymentSpec.fromXml("").requireInstance("default").notifications()); } @Test @@ -422,7 +422,7 @@ public class DeploymentSpecWithoutInstanceTest { DeploymentSpec spec = DeploymentSpec.fromXml("\n" + " " + ""); - assertEquals(Notifications.none(), spec.instance("default").notifications()); + assertEquals(Notifications.none(), spec.requireInstance("default").notifications()); } @Test @@ -434,10 +434,10 @@ public class DeploymentSpecWithoutInstanceTest { " \n" + " \n" + ""); - assertEquals(ImmutableSet.of(author), spec.instance("default").notifications().emailRolesFor(failing)); - assertEquals(ImmutableSet.of(author), spec.instance("default").notifications().emailRolesFor(failingCommit)); - assertEquals(ImmutableSet.of("john@dev", "jane@dev"), spec.instance("default").notifications().emailAddressesFor(failingCommit)); - assertEquals(ImmutableSet.of("jane@dev"), spec.instance("default").notifications().emailAddressesFor(failing)); + assertEquals(ImmutableSet.of(author), spec.requireInstance("default").notifications().emailRolesFor(failing)); + assertEquals(ImmutableSet.of(author), spec.requireInstance("default").notifications().emailRolesFor(failingCommit)); + assertEquals(ImmutableSet.of("john@dev", "jane@dev"), spec.requireInstance("default").notifications().emailAddressesFor(failingCommit)); + assertEquals(ImmutableSet.of("jane@dev"), spec.requireInstance("default").notifications().emailAddressesFor(failing)); } @Test @@ -448,20 +448,20 @@ public class DeploymentSpecWithoutInstanceTest { " us-north-7\n" + " \n" + ""); - assertEquals(Optional.of("d-1-4-20"), spec.instance("default").steps().get(0).zones().get(0).testerFlavor()); - assertEquals(Optional.empty(), spec.instance("default").steps().get(1).zones().get(0).testerFlavor()); - assertEquals(Optional.of("d-2-8-50"), spec.instance("default").steps().get(2).zones().get(0).testerFlavor()); + assertEquals(Optional.of("d-1-4-20"), spec.requireInstance("default").steps().get(0).zones().get(0).testerFlavor()); + assertEquals(Optional.empty(), spec.requireInstance("default").steps().get(1).zones().get(0).testerFlavor()); + assertEquals(Optional.of("d-2-8-50"), spec.requireInstance("default").steps().get(2).zones().get(0).testerFlavor()); } @Test public void noEndpoints() { - assertEquals(Collections.emptyList(), DeploymentSpec.fromXml("").instance("default").endpoints()); + assertEquals(Collections.emptyList(), DeploymentSpec.fromXml("").requireInstance("default").endpoints()); } @Test public void emptyEndpoints() { var spec = DeploymentSpec.fromXml(""); - assertEquals(Collections.emptyList(), spec.instance("default").endpoints()); + assertEquals(Collections.emptyList(), spec.requireInstance("default").endpoints()); } @Test @@ -482,15 +482,15 @@ public class DeploymentSpecWithoutInstanceTest { assertEquals( List.of("foo", "nalle", "default"), - spec.instance("default").endpoints().stream().map(Endpoint::endpointId).collect(Collectors.toList()) + spec.requireInstance("default").endpoints().stream().map(Endpoint::endpointId).collect(Collectors.toList()) ); assertEquals( List.of("bar", "frosk", "quux"), - spec.instance("default").endpoints().stream().map(Endpoint::containerId).collect(Collectors.toList()) + spec.requireInstance("default").endpoints().stream().map(Endpoint::containerId).collect(Collectors.toList()) ); - assertEquals(Set.of(RegionName.from("us-east")), spec.instance("default").endpoints().get(0).regions()); + assertEquals(Set.of(RegionName.from("us-east")), spec.requireInstance("default").endpoints().get(0).regions()); } @Test @@ -516,7 +516,7 @@ public class DeploymentSpecWithoutInstanceTest { } private static Set endpointRegions(String endpointId, DeploymentSpec spec) { - return spec.instance("default").endpoints().stream() + return spec.requireInstance("default").endpoints().stream() .filter(endpoint -> endpoint.endpointId().equals(endpointId)) .flatMap(endpoint -> endpoint.regions().stream()) .map(RegionName::value) -- cgit v1.2.3