summaryrefslogtreecommitdiffstats
path: root/config-model-api/src/test/java/com/yahoo
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-05-26 09:59:08 +0200
committerjonmv <venstad@gmail.com>2023-05-26 10:38:45 +0200
commitcdd9d7bb5fcdb154f6cc9fa129d3a65e22f7a63a (patch)
tree5357447d4050a410cfd7cf3de44d12a93855d2a1 /config-model-api/src/test/java/com/yahoo
parent3c3458a27beb1167d2b5d28898b3e13f44e0b8a0 (diff)
Add empty-host-ttl to deployment spec
Diffstat (limited to 'config-model-api/src/test/java/com/yahoo')
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java232
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java102
2 files changed, 247 insertions, 87 deletions
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 89b7318739e..9cee6c57591 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
@@ -32,6 +32,11 @@ import java.util.stream.Collectors;
import static com.yahoo.config.application.api.Notifications.Role.author;
import static com.yahoo.config.application.api.Notifications.When.failing;
import static com.yahoo.config.application.api.Notifications.When.failingCommit;
+import static com.yahoo.config.provision.Environment.dev;
+import static com.yahoo.config.provision.Environment.perf;
+import static com.yahoo.config.provision.Environment.prod;
+import static com.yahoo.config.provision.Environment.staging;
+import static com.yahoo.config.provision.Environment.test;
import static com.yahoo.config.provision.zone.ZoneId.defaultId;
import static com.yahoo.config.provision.zone.ZoneId.from;
import static org.junit.Assert.assertEquals;
@@ -60,11 +65,11 @@ public class DeploymentSpecTest {
assertEquals(specXml, spec.xmlForm());
assertEquals(1, spec.requireInstance("default").steps().size());
assertFalse(spec.majorVersion().isPresent());
- assertTrue(spec.requireInstance("default").steps().get(0).concerns(Environment.test));
- assertTrue(spec.requireInstance("default").concerns(Environment.test, Optional.empty()));
- assertTrue(spec.requireInstance("default").concerns(Environment.test, Optional.of(RegionName.from("region1")))); // test steps specify no region
- assertFalse(spec.requireInstance("default").concerns(Environment.staging, Optional.empty()));
- assertFalse(spec.requireInstance("default").concerns(Environment.prod, Optional.empty()));
+ assertTrue(spec.requireInstance("default").steps().get(0).concerns(test));
+ assertTrue(spec.requireInstance("default").concerns(test, Optional.empty()));
+ assertTrue(spec.requireInstance("default").concerns(test, Optional.of(RegionName.from("region1")))); // test steps specify no region
+ assertFalse(spec.requireInstance("default").concerns(staging, Optional.empty()));
+ assertFalse(spec.requireInstance("default").concerns(prod, Optional.empty()));
assertFalse(spec.requireInstance("default").globalServiceId().isPresent());
}
@@ -97,10 +102,10 @@ public class DeploymentSpecTest {
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals(1, spec.steps().size());
assertEquals(1, spec.requireInstance("default").steps().size());
- assertTrue(spec.requireInstance("default").steps().get(0).concerns(Environment.staging));
- assertFalse(spec.requireInstance("default").concerns(Environment.test, Optional.empty()));
- assertTrue(spec.requireInstance("default").concerns(Environment.staging, Optional.empty()));
- assertFalse(spec.requireInstance("default").concerns(Environment.prod, Optional.empty()));
+ assertTrue(spec.requireInstance("default").steps().get(0).concerns(staging));
+ assertFalse(spec.requireInstance("default").concerns(test, Optional.empty()));
+ assertTrue(spec.requireInstance("default").concerns(staging, Optional.empty()));
+ assertFalse(spec.requireInstance("default").concerns(prod, Optional.empty()));
assertFalse(spec.requireInstance("default").globalServiceId().isPresent());
}
@@ -121,17 +126,17 @@ public class DeploymentSpecTest {
assertEquals(1, spec.steps().size());
assertEquals(2, spec.requireInstance("default").steps().size());
- assertTrue(spec.requireInstance("default").steps().get(0).concerns(Environment.prod, Optional.of(RegionName.from("us-east1"))));
+ assertTrue(spec.requireInstance("default").steps().get(0).concerns(prod, Optional.of(RegionName.from("us-east1"))));
assertFalse(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(0)).active());
- assertTrue(spec.requireInstance("default").steps().get(1).concerns(Environment.prod, Optional.of(RegionName.from("us-west1"))));
+ assertTrue(spec.requireInstance("default").steps().get(1).concerns(prod, Optional.of(RegionName.from("us-west1"))));
assertTrue(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(1)).active());
- assertFalse(spec.requireInstance("default").concerns(Environment.test, Optional.empty()));
- assertFalse(spec.requireInstance("default").concerns(Environment.staging, Optional.empty()));
- assertTrue(spec.requireInstance("default").concerns(Environment.prod, Optional.of(RegionName.from("us-east1"))));
- assertTrue(spec.requireInstance("default").concerns(Environment.prod, Optional.of(RegionName.from("us-west1"))));
- assertFalse(spec.requireInstance("default").concerns(Environment.prod, Optional.of(RegionName.from("no-such-region"))));
+ assertFalse(spec.requireInstance("default").concerns(test, Optional.empty()));
+ assertFalse(spec.requireInstance("default").concerns(staging, Optional.empty()));
+ assertTrue(spec.requireInstance("default").concerns(prod, Optional.of(RegionName.from("us-east1"))));
+ assertTrue(spec.requireInstance("default").concerns(prod, Optional.of(RegionName.from("us-west1"))));
+ assertFalse(spec.requireInstance("default").concerns(prod, Optional.of(RegionName.from("no-such-region"))));
assertFalse(spec.requireInstance("default").globalServiceId().isPresent());
assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, spec.requireInstance("default").upgradePolicy());
@@ -293,7 +298,7 @@ public class DeploymentSpecTest {
assertEquals(1, instance2.steps().size());
assertEquals(1, instance2.zones().size());
- assertTrue(instance2.steps().get(0).concerns(Environment.prod, Optional.of(RegionName.from("us-central1"))));
+ assertTrue(instance2.steps().get(0).concerns(prod, Optional.of(RegionName.from("us-central1"))));
}
@Test
@@ -322,25 +327,25 @@ public class DeploymentSpecTest {
assertEquals(5, instance.steps().size());
assertEquals(4, instance.zones().size());
- assertTrue(instance.steps().get(0).concerns(Environment.test));
+ assertTrue(instance.steps().get(0).concerns(test));
- assertTrue(instance.steps().get(1).concerns(Environment.staging));
+ assertTrue(instance.steps().get(1).concerns(staging));
- assertTrue(instance.steps().get(2).concerns(Environment.prod, Optional.of(RegionName.from("us-east1"))));
+ assertTrue(instance.steps().get(2).concerns(prod, Optional.of(RegionName.from("us-east1"))));
assertFalse(((DeploymentSpec.DeclaredZone)instance.steps().get(2)).active());
assertTrue(instance.steps().get(3) instanceof DeploymentSpec.Delay);
assertEquals(3 * 60 * 60 + 30 * 60, instance.steps().get(3).delay().getSeconds());
- assertTrue(instance.steps().get(4).concerns(Environment.prod, Optional.of(RegionName.from("us-west1"))));
+ assertTrue(instance.steps().get(4).concerns(prod, Optional.of(RegionName.from("us-west1"))));
assertTrue(((DeploymentSpec.DeclaredZone)instance.steps().get(4)).active());
- assertTrue(instance.concerns(Environment.test, Optional.empty()));
- assertTrue(instance.concerns(Environment.test, Optional.of(RegionName.from("region1")))); // test steps specify no region
- assertTrue(instance.concerns(Environment.staging, Optional.empty()));
- assertTrue(instance.concerns(Environment.prod, Optional.of(RegionName.from("us-east1"))));
- assertTrue(instance.concerns(Environment.prod, Optional.of(RegionName.from("us-west1"))));
- assertFalse(instance.concerns(Environment.prod, Optional.of(RegionName.from("no-such-region"))));
+ assertTrue(instance.concerns(test, Optional.empty()));
+ assertTrue(instance.concerns(test, Optional.of(RegionName.from("region1")))); // test steps specify no region
+ assertTrue(instance.concerns(staging, Optional.empty()));
+ assertTrue(instance.concerns(prod, Optional.of(RegionName.from("us-east1"))));
+ assertTrue(instance.concerns(prod, Optional.of(RegionName.from("us-west1"))));
+ assertFalse(instance.concerns(prod, Optional.of(RegionName.from("no-such-region"))));
assertFalse(instance.globalServiceId().isPresent());
}
@@ -563,7 +568,7 @@ public class DeploymentSpecTest {
DeploymentInstanceSpec instance = spec.instances().get(0);
assertEquals("default", instance.name().value());
- assertEquals("service", instance.athenzService(Environment.prod, RegionName.defaultName()).get().value());
+ assertEquals("service", instance.athenzService(prod, RegionName.defaultName()).get().value());
}
@Test
@@ -695,9 +700,9 @@ public class DeploymentSpecTest {
List<DeploymentSpec.Step> innerParallelSteps = secondSerialSteps.get(2).steps();
assertEquals(3, innerParallelSteps.size());
assertEquals("prod.ap-northeast-1", innerParallelSteps.get(0).toString());
- assertEquals("no-service", spec.requireInstance("instance").athenzService(Environment.prod, RegionName.from("ap-northeast-1")).get().value());
+ assertEquals("no-service", spec.requireInstance("instance").athenzService(prod, RegionName.from("ap-northeast-1")).get().value());
assertEquals("prod.ap-southeast-2", innerParallelSteps.get(1).toString());
- assertEquals("in-service", spec.requireInstance("instance").athenzService(Environment.prod, RegionName.from("ap-southeast-2")).get().value());
+ assertEquals("in-service", spec.requireInstance("instance").athenzService(prod, RegionName.from("ap-southeast-2")).get().value());
assertEquals("tests for prod.aws-us-east-1a", innerParallelSteps.get(2).toString());
}
@@ -956,7 +961,7 @@ public class DeploymentSpecTest {
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals("domain", spec.athenzDomain().get().value());
assertEquals("service", spec.athenzService().get().value());
- assertEquals("service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ assertEquals("service", spec.requireInstance("instance1").athenzService(prod,
RegionName.from("us-west-1")).get().value());
}
@@ -979,11 +984,11 @@ public class DeploymentSpecTest {
assertEquals("domain", spec.athenzDomain().get().value());
assertEquals("service", spec.athenzService().get().value());
- assertEquals("prod-service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ assertEquals("prod-service", spec.requireInstance("instance1").athenzService(prod,
RegionName.from("us-central-1")).get().value());
- assertEquals("prod-service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ assertEquals("prod-service", spec.requireInstance("instance1").athenzService(prod,
RegionName.from("us-west-1")).get().value());
- assertEquals("prod-service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ assertEquals("prod-service", spec.requireInstance("instance1").athenzService(prod,
RegionName.from("us-east-3")).get().value());
}
@@ -1014,11 +1019,11 @@ public class DeploymentSpecTest {
""";
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals("domain", spec.athenzDomain().get().value());
- assertEquals("service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ assertEquals("service", spec.requireInstance("instance1").athenzService(prod,
RegionName.from("us-west-1")).get().value());
- assertEquals("service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ assertEquals("service", spec.requireInstance("instance1").athenzService(prod,
RegionName.from("us-east-3")).get().value());
- assertEquals("service", spec.requireInstance("instance2").athenzService(Environment.prod,
+ assertEquals("service", spec.requireInstance("instance2").athenzService(prod,
RegionName.from("us-east-3")).get().value());
}
@@ -1036,7 +1041,7 @@ public class DeploymentSpecTest {
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals("domain", spec.athenzDomain().get().value());
assertEquals(Optional.empty(), spec.athenzService());
- assertEquals("service", spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value());
+ assertEquals("service", spec.requireInstance("default").athenzService(prod, RegionName.from("us-west-1")).get().value());
}
@Test
@@ -1054,13 +1059,13 @@ public class DeploymentSpecTest {
);
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals("service",
- spec.requireInstance("default").athenzService(Environment.test,
+ spec.requireInstance("default").athenzService(test,
RegionName.from("us-east-1")).get().value());
assertEquals("staging-service",
- spec.requireInstance("default").athenzService(Environment.staging,
+ spec.requireInstance("default").athenzService(staging,
RegionName.from("us-north-1")).get().value());
assertEquals("prod-service",
- spec.requireInstance("default").athenzService(Environment.prod,
+ spec.requireInstance("default").athenzService(prod,
RegionName.from("us-west-1")).get().value());
}
@@ -1273,8 +1278,8 @@ public class DeploymentSpecTest {
assertEquals(List.of(RegionName.from("us-east")), spec.requireInstance("default").endpoints().get(0).regions());
- var zone = from(Environment.prod, RegionName.from("us-east"));
- var testZone = from(Environment.test, RegionName.from("us-east"));
+ var zone = from(prod, RegionName.from("us-east"));
+ var testZone = from(test, RegionName.from("us-east"));
assertEquals(ZoneEndpoint.defaultEndpoint,
spec.zoneEndpoint(InstanceName.from("custom"), zone, ClusterSpec.Id.from("bax")));
assertEquals(ZoneEndpoint.defaultEndpoint,
@@ -1778,23 +1783,142 @@ public class DeploymentSpecTest {
""";
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals(Optional.of(CloudAccount.from("100000000000")), spec.cloudAccount());
- assertCloudAccount("800000000000", spec.requireInstance("alpha"), Environment.prod, "us-east-1");
- assertCloudAccount("200000000000", spec.requireInstance("beta"), Environment.prod, "us-west-1");
- assertCloudAccount("600000000000", spec.requireInstance("beta"), Environment.staging, "");
- assertCloudAccount("700000000000", spec.requireInstance("beta"), Environment.perf, "");
- assertCloudAccount("200000000000", spec.requireInstance("beta"), Environment.dev, "");
- assertCloudAccount("300000000000", spec.requireInstance("main"), Environment.prod, "us-east-1");
- assertCloudAccount("100000000000", spec.requireInstance("main"), Environment.prod, "eu-west-1");
- assertCloudAccount("400000000000", spec.requireInstance("main"), Environment.dev, "");
- assertCloudAccount("500000000000", spec.requireInstance("main"), Environment.test, "");
- assertCloudAccount("100000000000", spec.requireInstance("main"), Environment.staging, "");
- assertCloudAccount("default", spec.requireInstance("beta"), Environment.prod, "us-west-2");
+ assertCloudAccount("800000000000", spec.requireInstance("alpha"), prod, "us-east-1");
+ assertCloudAccount("200000000000", spec.requireInstance("beta"), prod, "us-west-1");
+ assertCloudAccount("600000000000", spec.requireInstance("beta"), staging, "");
+ assertCloudAccount("700000000000", spec.requireInstance("beta"), perf, "");
+ assertCloudAccount("200000000000", spec.requireInstance("beta"), dev, "");
+ assertCloudAccount("300000000000", spec.requireInstance("main"), prod, "us-east-1");
+ assertCloudAccount("100000000000", spec.requireInstance("main"), prod, "eu-west-1");
+ assertCloudAccount("400000000000", spec.requireInstance("main"), dev, "");
+ assertCloudAccount("500000000000", spec.requireInstance("main"), test, "");
+ assertCloudAccount("100000000000", spec.requireInstance("main"), staging, "");
+ assertCloudAccount("default", spec.requireInstance("beta"), prod, "us-west-2");
+ }
+
+ @Test
+ public void hostTTL() {
+ String r =
+ """
+ <deployment version='1.0' cloud-account='100000000000' empty-host-ttl='1h'>
+ <instance id='alpha'>
+ <staging />
+ <prod empty-host-ttl='1m'>
+ <region>us-east</region>
+ <region empty-host-ttl='2m'>us-west</region>
+ </prod>
+ </instance>
+ <instance id='beta'>
+ <staging empty-host-ttl='3d'/>
+ <perf empty-host-ttl='4h'/>
+ <prod>
+ <region>us-east</region>
+ <region empty-host-ttl='0d'>us-west</region>
+ </prod>
+ </instance>
+ <instance id='gamma' empty-host-ttl='6h'>
+ <dev empty-host-ttl='7d'/>
+ <prod>
+ <region>us-east</region>
+ </prod>
+ </instance>
+ </deployment>
+ """;
+ DeploymentSpec spec = DeploymentSpec.fromXml(r);
+ assertEquals(Optional.of(CloudAccount.from("100000000000")), spec.cloudAccount());
+
+ assertHostTTL(Duration.ofHours(1), spec, "alpha", test, null);
+ assertHostTTL(Duration.ofHours(1), spec, "alpha", staging, null);
+ assertHostTTL(Duration.ofHours(1), spec, "alpha", dev, null);
+ assertHostTTL(Duration.ofHours(1), spec, "alpha", perf, null);
+ assertHostTTL(Duration.ofMinutes(1), spec, "alpha", prod, "us-east");
+ assertHostTTL(Duration.ofMinutes(2), spec, "alpha", prod, "us-west");
+
+ assertHostTTL(Duration.ofHours(1), spec, "beta", test, null);
+ assertHostTTL(Duration.ofDays(3), spec, "beta", staging, null);
+ assertHostTTL(Duration.ofHours(1), spec, "beta", dev, null);
+ assertHostTTL(Duration.ofHours(4), spec, "beta", perf, null);
+ assertHostTTL(Duration.ofHours(1), spec, "beta", prod, "us-east");
+ assertHostTTL(Duration.ZERO, spec, "beta", prod, "us-west");
+
+ assertHostTTL(Duration.ofHours(6), spec, "gamma", test, null);
+ assertHostTTL(Duration.ofHours(6), spec, "gamma", staging, null);
+ assertHostTTL(Duration.ofDays(7), spec, "gamma", dev, null);
+ assertHostTTL(Duration.ofHours(6), spec, "gamma", perf, null);
+ assertHostTTL(Duration.ofHours(6), spec, "gamma", prod, "us-east");
+ assertHostTTL(Duration.ofHours(6), spec, "gamma", prod, "us-west");
+
+ assertHostTTL(Duration.ofHours(1), spec, "nope", test, null);
+ assertHostTTL(Duration.ofHours(1), spec, "nope", staging, null);
+ assertHostTTL(Duration.ofHours(1), spec, "nope", dev, null);
+ assertHostTTL(Duration.ofHours(1), spec, "nope", perf, null);
+ assertHostTTL(Duration.ofHours(1), spec, "nope", prod, "us-east");
+ assertHostTTL(Duration.ofHours(1), spec, "nope", prod, "us-west");
+
+ assertEquals("Host TTL can only be specified with custom cloud accounts",
+ assertThrows(IllegalArgumentException.class,
+ () -> DeploymentSpec.fromXml("""
+ <deployment version='1.0' empty-host-ttl='0m'>
+ <instance id='main'>
+ <prod>
+ <region>us-east-1</region>
+ </prod>
+ </instance>
+ </deployment>
+ """))
+ .getMessage());
+
+ assertEquals("Host TTL can only be specified with custom cloud accounts",
+ assertThrows(IllegalArgumentException.class,
+ () -> DeploymentSpec.fromXml("""
+ <deployment version='1.0'>
+ <instance id='main' empty-host-ttl='0m'>
+ <prod>
+ <region>us-east-1</region>
+ </prod>
+ </instance>
+ </deployment>
+ """))
+ .getMessage());
+
+ assertEquals("Host TTL can only be specified with custom cloud accounts",
+ assertThrows(IllegalArgumentException.class,
+ () -> DeploymentSpec.fromXml("""
+ <deployment version='1.0'>
+ <instance id='main'>
+ <prod empty-host-ttl='0m'>
+ <region>us-east-1</region>
+ </prod>
+ </instance>
+ </deployment>
+ """))
+ .getMessage());
+
+ assertEquals("Host TTL can only be specified with custom cloud accounts",
+ assertThrows(IllegalArgumentException.class,
+ () -> DeploymentSpec.fromXml("""
+ <deployment version='1.0'>
+ <instance id='main'>
+ <prod>
+ <region empty-host-ttl='0m'>us-east-1</region>
+ </prod>
+ </instance>
+ </deployment>
+ """))
+ .getMessage());
+
}
private void assertCloudAccount(String expected, DeploymentInstanceSpec instance, Environment environment, String region) {
assertEquals(Optional.of(expected).map(CloudAccount::from), instance.cloudAccount(environment, Optional.of(region).filter(s -> !s.isEmpty()).map(RegionName::from)));
}
+ private void assertHostTTL(Duration expected, DeploymentSpec spec, String instance, Environment environment, String region) {
+ assertEquals(Optional.of(expected), spec.instance(InstanceName.from(instance))
+ .flatMap(iSpec -> iSpec.hostTTL(environment, Optional.ofNullable(region).map(RegionName::from)))
+ .or(spec::hostTTL));
+ }
+
private static void assertInvalid(String deploymentSpec, String errorMessagePart) {
assertInvalid(deploymentSpec, errorMessagePart, new ManualClock());
}
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 38410cc5b37..ed8074ddc61 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
@@ -25,6 +25,9 @@ import java.util.stream.Collectors;
import static com.yahoo.config.application.api.Notifications.Role.author;
import static com.yahoo.config.application.api.Notifications.When.failing;
import static com.yahoo.config.application.api.Notifications.When.failingCommit;
+import static com.yahoo.config.provision.Environment.dev;
+import static com.yahoo.config.provision.Environment.prod;
+import static com.yahoo.config.provision.Environment.test;
import static com.yahoo.config.provision.zone.ZoneId.defaultId;
import static com.yahoo.config.provision.zone.ZoneId.from;
import static org.junit.Assert.assertEquals;
@@ -49,11 +52,11 @@ public class DeploymentSpecWithoutInstanceTest {
assertEquals(specXml, spec.xmlForm());
assertEquals(1, spec.steps().size());
assertFalse(spec.majorVersion().isPresent());
- assertTrue(spec.steps().get(0).concerns(Environment.test));
- assertTrue(spec.requireInstance("default").concerns(Environment.test, Optional.empty()));
- assertTrue(spec.requireInstance("default").concerns(Environment.test, Optional.of(RegionName.from("region1")))); // test steps specify no region
+ assertTrue(spec.steps().get(0).concerns(test));
+ assertTrue(spec.requireInstance("default").concerns(test, Optional.empty()));
+ assertTrue(spec.requireInstance("default").concerns(test, Optional.of(RegionName.from("region1")))); // test steps specify no region
assertFalse(spec.requireInstance("default").concerns(Environment.staging, Optional.empty()));
- assertFalse(spec.requireInstance("default").concerns(Environment.prod, Optional.empty()));
+ assertFalse(spec.requireInstance("default").concerns(prod, Optional.empty()));
assertFalse(spec.requireInstance("default").globalServiceId().isPresent());
}
@@ -83,9 +86,9 @@ public class DeploymentSpecWithoutInstanceTest {
assertEquals(1, spec.steps().size());
assertEquals(1, spec.requireInstance("default").steps().size());
assertTrue(spec.requireInstance("default").steps().get(0).concerns(Environment.staging));
- assertFalse(spec.requireInstance("default").concerns(Environment.test, Optional.empty()));
+ assertFalse(spec.requireInstance("default").concerns(test, Optional.empty()));
assertTrue(spec.requireInstance("default").concerns(Environment.staging, Optional.empty()));
- assertFalse(spec.requireInstance("default").concerns(Environment.prod, Optional.empty()));
+ assertFalse(spec.requireInstance("default").concerns(prod, Optional.empty()));
assertFalse(spec.requireInstance("default").globalServiceId().isPresent());
}
@@ -104,17 +107,17 @@ public class DeploymentSpecWithoutInstanceTest {
assertEquals(1, spec.steps().size());
assertEquals(2, spec.requireInstance("default").steps().size());
- assertTrue(spec.requireInstance("default").steps().get(0).concerns(Environment.prod, Optional.of(RegionName.from("us-east1"))));
+ assertTrue(spec.requireInstance("default").steps().get(0).concerns(prod, Optional.of(RegionName.from("us-east1"))));
assertFalse(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(0)).active());
- assertTrue(spec.requireInstance("default").steps().get(1).concerns(Environment.prod, Optional.of(RegionName.from("us-west1"))));
+ assertTrue(spec.requireInstance("default").steps().get(1).concerns(prod, Optional.of(RegionName.from("us-west1"))));
assertTrue(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(1)).active());
- assertFalse(spec.requireInstance("default").concerns(Environment.test, Optional.empty()));
+ assertFalse(spec.requireInstance("default").concerns(test, Optional.empty()));
assertFalse(spec.requireInstance("default").concerns(Environment.staging, Optional.empty()));
- assertTrue(spec.requireInstance("default").concerns(Environment.prod, Optional.of(RegionName.from("us-east1"))));
- assertTrue(spec.requireInstance("default").concerns(Environment.prod, Optional.of(RegionName.from("us-west1"))));
- assertFalse(spec.requireInstance("default").concerns(Environment.prod, Optional.of(RegionName.from("no-such-region"))));
+ assertTrue(spec.requireInstance("default").concerns(prod, Optional.of(RegionName.from("us-east1"))));
+ assertTrue(spec.requireInstance("default").concerns(prod, Optional.of(RegionName.from("us-west1"))));
+ assertFalse(spec.requireInstance("default").concerns(prod, Optional.of(RegionName.from("no-such-region"))));
assertFalse(spec.requireInstance("default").globalServiceId().isPresent());
assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, spec.requireInstance("default").upgradePolicy());
@@ -139,25 +142,25 @@ public class DeploymentSpecWithoutInstanceTest {
assertEquals(5, spec.requireInstance("default").steps().size());
assertEquals(4, spec.requireInstance("default").zones().size());
- assertTrue(spec.requireInstance("default").steps().get(0).concerns(Environment.test));
+ assertTrue(spec.requireInstance("default").steps().get(0).concerns(test));
assertTrue(spec.requireInstance("default").steps().get(1).concerns(Environment.staging));
- assertTrue(spec.requireInstance("default").steps().get(2).concerns(Environment.prod, Optional.of(RegionName.from("us-east1"))));
+ assertTrue(spec.requireInstance("default").steps().get(2).concerns(prod, Optional.of(RegionName.from("us-east1"))));
assertFalse(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(2)).active());
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.requireInstance("default").steps().get(4).concerns(Environment.prod, Optional.of(RegionName.from("us-west1"))));
+ assertTrue(spec.requireInstance("default").steps().get(4).concerns(prod, Optional.of(RegionName.from("us-west1"))));
assertTrue(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(4)).active());
- assertTrue(spec.requireInstance("default").concerns(Environment.test, Optional.empty()));
- assertTrue(spec.requireInstance("default").concerns(Environment.test, Optional.of(RegionName.from("region1")))); // test steps specify no region
+ assertTrue(spec.requireInstance("default").concerns(test, Optional.empty()));
+ assertTrue(spec.requireInstance("default").concerns(test, Optional.of(RegionName.from("region1")))); // test steps specify no region
assertTrue(spec.requireInstance("default").concerns(Environment.staging, Optional.empty()));
- assertTrue(spec.requireInstance("default").concerns(Environment.prod, Optional.of(RegionName.from("us-east1"))));
- assertTrue(spec.requireInstance("default").concerns(Environment.prod, Optional.of(RegionName.from("us-west1"))));
- assertFalse(spec.requireInstance("default").concerns(Environment.prod, Optional.of(RegionName.from("no-such-region"))));
+ assertTrue(spec.requireInstance("default").concerns(prod, Optional.of(RegionName.from("us-east1"))));
+ assertTrue(spec.requireInstance("default").concerns(prod, Optional.of(RegionName.from("us-west1"))));
+ assertFalse(spec.requireInstance("default").concerns(prod, Optional.of(RegionName.from("no-such-region"))));
assertFalse(spec.requireInstance("default").globalServiceId().isPresent());
}
@@ -436,9 +439,9 @@ public class DeploymentSpecWithoutInstanceTest {
List<DeploymentSpec.Step> innerParallelSteps = secondSerialSteps.get(2).steps();
assertEquals(3, innerParallelSteps.size());
assertEquals("prod.ap-northeast-1", innerParallelSteps.get(0).toString());
- assertEquals("no-service", spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("ap-northeast-1")).get().value());
+ assertEquals("no-service", spec.requireInstance("default").athenzService(prod, RegionName.from("ap-northeast-1")).get().value());
assertEquals("prod.ap-southeast-2", innerParallelSteps.get(1).toString());
- assertEquals("service", spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("ap-southeast-2")).get().value());
+ assertEquals("service", spec.requireInstance("default").athenzService(prod, RegionName.from("ap-southeast-2")).get().value());
assertEquals("tests for prod.aws-us-east-1a", innerParallelSteps.get(2).toString());
}
@@ -534,7 +537,7 @@ public class DeploymentSpecWithoutInstanceTest {
);
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals(spec.athenzDomain().get().value(), "domain");
- assertEquals(spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "service");
+ assertEquals(spec.requireInstance("default").athenzService(prod, RegionName.from("us-west-1")).get().value(), "service");
}
@Test
@@ -553,11 +556,11 @@ public class DeploymentSpecWithoutInstanceTest {
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals("domain", spec.athenzDomain().get().value());
assertEquals("service", spec.athenzService().get().value());
- assertEquals("prod-service", spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("us-central-1"))
+ assertEquals("prod-service", spec.requireInstance("default").athenzService(prod, RegionName.from("us-central-1"))
.get().value());
- assertEquals("prod-service", spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("us-west-1"))
+ assertEquals("prod-service", spec.requireInstance("default").athenzService(prod, RegionName.from("us-west-1"))
.get().value());
- assertEquals("prod-service", spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("us-east-3"))
+ assertEquals("prod-service", spec.requireInstance("default").athenzService(prod, RegionName.from("us-east-3"))
.get().value());
}
@@ -575,9 +578,9 @@ public class DeploymentSpecWithoutInstanceTest {
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals("service", spec.athenzService().get().value());
assertEquals(spec.athenzDomain().get().value(), "domain");
- assertEquals(spec.requireInstance("default").athenzService(Environment.test, RegionName.from("us-east-1")).get().value(), "service");
+ assertEquals(spec.requireInstance("default").athenzService(test, RegionName.from("us-east-1")).get().value(), "service");
assertEquals(spec.requireInstance("default").athenzService(Environment.staging, RegionName.from("us-north-1")).get().value(), "staging-service");
- assertEquals(spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("us-west-1")).get().value(), "prod-service");
+ assertEquals(spec.requireInstance("default").athenzService(prod, RegionName.from("us-west-1")).get().value(), "prod-service");
}
@Test(expected = IllegalArgumentException.class)
@@ -694,7 +697,7 @@ public class DeploymentSpecWithoutInstanceTest {
assertEquals(List.of(RegionName.from("us-east")), spec.requireInstance("default").endpoints().get(0).regions());
- var zone = from(Environment.prod, RegionName.from("us-east"));
+ var zone = from(prod, RegionName.from("us-east"));
assertEquals(ZoneEndpoint.defaultEndpoint,
spec.zoneEndpoint(InstanceName.from("custom"), zone, ClusterSpec.Id.from("bax")));
assertEquals(ZoneEndpoint.defaultEndpoint,
@@ -742,8 +745,8 @@ public class DeploymentSpecWithoutInstanceTest {
DeploymentSpec spec = DeploymentSpec.fromXml(r);
DeploymentInstanceSpec instance = spec.requireInstance("default");
assertEquals(Optional.of(CloudAccount.from("012345678912")), spec.cloudAccount());
- assertEquals(Optional.of(CloudAccount.from("219876543210")), instance.cloudAccount(Environment.prod, Optional.of(RegionName.from("us-east-1"))));
- assertEquals(Optional.of(CloudAccount.from("012345678912")), instance.cloudAccount(Environment.prod, Optional.of(RegionName.from("us-west-1"))));
+ assertEquals(Optional.of(CloudAccount.from("219876543210")), instance.cloudAccount(prod, Optional.of(RegionName.from("us-east-1"))));
+ assertEquals(Optional.of(CloudAccount.from("012345678912")), instance.cloudAccount(prod, Optional.of(RegionName.from("us-west-1"))));
assertEquals(Optional.of(CloudAccount.from("012345678912")), instance.cloudAccount(Environment.staging, Optional.empty()));
r = new StringReader(
@@ -756,8 +759,41 @@ public class DeploymentSpecWithoutInstanceTest {
);
spec = DeploymentSpec.fromXml(r);
assertEquals(Optional.empty(), spec.cloudAccount());
- assertEquals(Optional.of(CloudAccount.from("219876543210")), spec.requireInstance("default").cloudAccount(Environment.prod, Optional.of(RegionName.from("us-east-1"))));
- assertEquals(Optional.empty(), spec.requireInstance("default").cloudAccount(Environment.prod, Optional.of(RegionName.from("us-west-1"))));
+ assertEquals(Optional.of(CloudAccount.from("219876543210")), spec.requireInstance("default").cloudAccount(prod, Optional.of(RegionName.from("us-east-1"))));
+ assertEquals(Optional.empty(), spec.requireInstance("default").cloudAccount(prod, Optional.of(RegionName.from("us-west-1"))));
+ }
+
+ @Test
+ public void productionSpecWithHostTTL() {
+ String r = """
+ <deployment version='1.0' cloud-account='012345678912' empty-host-ttl='1d'>
+ <prod>
+ <region empty-host-ttl='1m'>us-east-1</region>
+ <region>us-west-1</region>
+ </prod>
+ </deployment>
+ """;
+ DeploymentSpec spec = DeploymentSpec.fromXml(r);
+ assertEquals(Optional.of(Duration.ofDays(1)), spec.hostTTL());
+ DeploymentInstanceSpec instance = spec.requireInstance("default");
+ assertEquals(Optional.of(Duration.ofMinutes(1)), instance.hostTTL(prod, Optional.of(RegionName.from("us-east-1"))));
+ assertEquals(Optional.of(Duration.ofDays(1)), instance.hostTTL(prod, Optional.of(RegionName.from("us-west-1"))));
+ assertEquals(Optional.of(Duration.ofDays(1)), instance.hostTTL(test, Optional.empty()));
+
+ r = """
+ <deployment version='1.0' cloud-account='012345678912'>
+ <prod empty-host-ttl='1d'>
+ <region empty-host-ttl='1m'>us-east-1</region>
+ <region>us-west-1</region>
+ </prod>
+ </deployment>
+ """;
+ spec = DeploymentSpec.fromXml(r);
+ assertEquals(Optional.empty(), spec.hostTTL());
+ instance = spec.requireInstance("default");
+ assertEquals(Optional.of(Duration.ofMinutes(1)), instance.hostTTL(prod, Optional.of(RegionName.from("us-east-1"))));
+ assertEquals(Optional.of(Duration.ofDays(1)), instance.hostTTL(prod, Optional.of(RegionName.from("us-west-1"))));
+ assertEquals(Optional.empty(), instance.hostTTL(test, Optional.empty()));
}
private static Set<String> endpointRegions(String endpointId, DeploymentSpec spec) {