diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2019-12-02 08:27:16 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2019-12-02 08:27:16 +0100 |
commit | b127005594b314a5fa5ffddcd458de80ca240eef (patch) | |
tree | 27aba5a8f5e3744a1d5942583c5412b263c905d8 /config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java | |
parent | e346de03f3ff1b37e9b7ce94399492fdebcd5ac6 (diff) |
Revert "Revert "Jvenstad/test steps in deployment spec""
This reverts commit 12fcbd278a5fadb085456f0cde9059755c0fe231.
Diffstat (limited to 'config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java')
-rw-r--r-- | config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java | 207 |
1 files changed, 173 insertions, 34 deletions
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 31a30e5bd83..13ec7bf1a8b 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,11 +3,11 @@ 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; import java.io.StringReader; +import java.time.Duration; import java.time.Instant; import java.time.ZoneId; import java.util.Collections; @@ -40,11 +40,11 @@ public class DeploymentSpecWithoutInstanceTest { assertEquals(specXml, spec.xmlForm()); assertEquals(1, spec.steps().size()); assertFalse(spec.majorVersion().isPresent()); - assertTrue(spec.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())); + assertTrue(spec.steps().get(0).concerns(Environment.test)); + assertTrue(spec.requireInstance("default").deploysTo(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").deploysTo(Environment.test, Optional.of(RegionName.from("region1")))); + assertFalse(spec.requireInstance("default").deploysTo(Environment.staging, Optional.empty())); + assertFalse(spec.requireInstance("default").deploysTo(Environment.prod, Optional.empty())); assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); } @@ -73,11 +73,11 @@ public class DeploymentSpecWithoutInstanceTest { DeploymentSpec spec = DeploymentSpec.fromXml(r); assertEquals(2, spec.steps().size()); assertEquals(1, spec.requireInstance("default").steps().size()); - assertTrue(spec.steps().get(0).deploysTo(Environment.test)); - assertTrue(spec.requireInstance("default").steps().get(0).deploysTo(Environment.staging)); - assertFalse(spec.requireInstance("default").includes(Environment.test, Optional.empty())); - assertTrue(spec.requireInstance("default").includes(Environment.staging, Optional.empty())); - assertFalse(spec.requireInstance("default").includes(Environment.prod, Optional.empty())); + assertTrue(spec.steps().get(0).concerns(Environment.test)); + assertTrue(spec.requireInstance("default").steps().get(0).concerns(Environment.staging)); + assertFalse(spec.requireInstance("default").deploysTo(Environment.test, Optional.empty())); + assertTrue(spec.requireInstance("default").deploysTo(Environment.staging, Optional.empty())); + assertFalse(spec.requireInstance("default").deploysTo(Environment.prod, Optional.empty())); assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); } @@ -96,21 +96,21 @@ public class DeploymentSpecWithoutInstanceTest { assertEquals(3, spec.steps().size()); assertEquals(2, spec.requireInstance("default").steps().size()); - assertTrue(spec.steps().get(0).deploysTo(Environment.test)); + assertTrue(spec.steps().get(0).concerns(Environment.test)); - assertTrue(spec.steps().get(1).deploysTo(Environment.staging)); + assertTrue(spec.steps().get(1).concerns(Environment.staging)); - assertTrue(spec.requireInstance("default").steps().get(0).deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertTrue(spec.requireInstance("default").steps().get(0).concerns(Environment.prod, Optional.of(RegionName.from("us-east1")))); assertFalse(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(0)).active()); - assertTrue(spec.requireInstance("default").steps().get(1).deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertTrue(spec.requireInstance("default").steps().get(1).concerns(Environment.prod, Optional.of(RegionName.from("us-west1")))); assertTrue(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(1)).active()); - assertFalse(spec.requireInstance("default").includes(Environment.test, Optional.empty())); - assertFalse(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").deploysTo(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").deploysTo(Environment.staging, Optional.empty())); + assertTrue(spec.requireInstance("default").deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertTrue(spec.requireInstance("default").deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertFalse(spec.requireInstance("default").deploysTo(Environment.prod, Optional.of(RegionName.from("no-such-region")))); assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, spec.requireInstance("default").upgradePolicy()); @@ -134,29 +134,99 @@ public class DeploymentSpecWithoutInstanceTest { assertEquals(5, spec.requireInstance("default").steps().size()); assertEquals(4, spec.requireInstance("default").zones().size()); - assertTrue(spec.requireInstance("default").steps().get(0).deploysTo(Environment.test)); + assertTrue(spec.requireInstance("default").steps().get(0).concerns(Environment.test)); - assertTrue(spec.requireInstance("default").steps().get(1).deploysTo(Environment.staging)); + assertTrue(spec.requireInstance("default").steps().get(1).concerns(Environment.staging)); - assertTrue(spec.requireInstance("default").steps().get(2).deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertTrue(spec.requireInstance("default").steps().get(2).concerns(Environment.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).deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertTrue(spec.requireInstance("default").steps().get(4).concerns(Environment.prod, Optional.of(RegionName.from("us-west1")))); assertTrue(((DeploymentSpec.DeclaredZone)spec.requireInstance("default").steps().get(4)).active()); - 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")))); + assertTrue(spec.requireInstance("default").deploysTo(Environment.test, Optional.empty())); + assertFalse(spec.requireInstance("default").deploysTo(Environment.test, Optional.of(RegionName.from("region1")))); + assertTrue(spec.requireInstance("default").deploysTo(Environment.staging, Optional.empty())); + assertTrue(spec.requireInstance("default").deploysTo(Environment.prod, Optional.of(RegionName.from("us-east1")))); + assertTrue(spec.requireInstance("default").deploysTo(Environment.prod, Optional.of(RegionName.from("us-west1")))); + assertFalse(spec.requireInstance("default").deploysTo(Environment.prod, Optional.of(RegionName.from("no-such-region")))); assertFalse(spec.requireInstance("default").globalServiceId().isPresent()); } @Test + public void productionTests() { + StringReader r = new StringReader( + "<deployment version='1.0'>" + + " <test/>" + + " <staging/>" + + " <prod>" + + " <region active='false'>us-east-1</region>" + + " <region active='true'>us-west-1</region>" + + " <delay hours='1' />" + + " <test>us-west-1</test>" + + " <test>us-east-1</test>" + + " </prod>" + + "</deployment>" + ); + + DeploymentSpec spec = DeploymentSpec.fromXml(r); + List<DeploymentSpec.Step> instanceSteps = spec.steps().get(0).steps(); + assertEquals(7, instanceSteps.size()); + assertEquals("test", instanceSteps.get(0).toString()); + assertEquals("staging", instanceSteps.get(1).toString()); + assertEquals("prod.us-east-1", instanceSteps.get(2).toString()); + assertEquals("prod.us-west-1", instanceSteps.get(3).toString()); + assertEquals("delay PT1H", instanceSteps.get(4).toString()); + assertEquals("tests for prod.us-west-1", instanceSteps.get(5).toString()); + assertEquals("tests for prod.us-east-1", instanceSteps.get(6).toString()); + } + + @Test(expected = IllegalArgumentException.class) + public void duplicateProductionTests() { + StringReader r = new StringReader( + "<deployment version='1.0'>" + + " <prod>" + + " <region active='true'>us-east1</region>" + + " <test>us-east1</test>" + + " <test>us-east1</test>" + + " </prod>" + + "</deployment>" + ); + DeploymentSpec.fromXml(r); + } + + @Test(expected = IllegalArgumentException.class) + public void productionTestBeforeDeployment() { + StringReader r = new StringReader( + "<deployment version='1.0'>" + + " <prod>" + + " <test>us-east1</test>" + + " <region active='true'>us-east1</region>" + + " </prod>" + + "</deployment>" + ); + DeploymentSpec.fromXml(r); + } + + @Test(expected = IllegalArgumentException.class) + public void productionTestInParallelWithDeployment() { + StringReader r = new StringReader( + "<deployment version='1.0'>" + + " <prod>" + + " <parallel>" + + " <region active='true'>us-east1</region>" + + " <test>us-east1</test>" + + " </parallel>" + + " </prod>" + + "</deployment>" + ); + DeploymentSpec.fromXml(r); + } + + @Test public void productionSpecWithGlobalServiceId() { StringReader r = new StringReader( "<deployment version='1.0'>" + @@ -272,10 +342,79 @@ public class DeploymentSpecWithoutInstanceTest { "</deployment>" ); DeploymentSpec spec = DeploymentSpec.fromXml(r); - DeploymentSpec.ParallelZones parallelZones = ((DeploymentSpec.ParallelZones) spec.requireInstance("default").steps().get(1)); - 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()); + DeploymentSpec.ParallelSteps parallelSteps = ((DeploymentSpec.ParallelSteps) spec.requireInstance("default").steps().get(1)); + assertEquals(2, parallelSteps.zones().size()); + assertEquals(RegionName.from("us-central-1"), parallelSteps.zones().get(0).region().get()); + assertEquals(RegionName.from("us-east-3"), parallelSteps.zones().get(1).region().get()); + } + + @Test + public void testNestedParallelAndSteps() { + StringReader r = new StringReader( + "<deployment athenz-domain='domain' athenz-service='service'>" + + " <prod>" + + " <parallel>" + + " <region active='true'>us-west-1</region>" + + " <steps>" + + " <region active='true'>us-east-3</region>" + + " <delay hours='2' />" + + " <region active='true'>eu-west-1</region>" + + " <delay hours='2' />" + + " </steps>" + + " <steps>" + + " <delay hours='3' />" + + " <region active='true'>aws-us-east-1a</region>" + + " <parallel>" + + " <region active='true' athenz-service='no-service'>ap-northeast-1</region>" + + " <region active='true'>ap-southeast-2</region>" + + " </parallel>" + + " </steps>" + + " <delay hours='3' minutes='30' />" + + " </parallel>" + + " <region active='true'>us-north-7</region>" + + " </prod>" + + "</deployment>" + ); + + DeploymentSpec spec = DeploymentSpec.fromXml(r); + List<DeploymentSpec.Step> steps = spec.steps(); + assertEquals(3, steps.size()); + assertEquals("test", steps.get(0).toString()); + assertEquals("staging", steps.get(1).toString()); + assertEquals("instance 'default'", steps.get(2).toString()); + assertEquals(Duration.ofHours(4), steps.get(2).delay()); + + List<DeploymentSpec.Step> instanceSteps = steps.get(2).steps(); + assertEquals(2, instanceSteps.size()); + assertEquals("4 parallel steps", instanceSteps.get(0).toString()); + assertEquals("prod.us-north-7", instanceSteps.get(1).toString()); + + List<DeploymentSpec.Step> parallelSteps = instanceSteps.get(0).steps(); + assertEquals(4, parallelSteps.size()); + assertEquals("prod.us-west-1", parallelSteps.get(0).toString()); + assertEquals("4 steps", parallelSteps.get(1).toString()); + assertEquals("3 steps", parallelSteps.get(2).toString()); + assertEquals("delay PT3H30M", parallelSteps.get(3).toString()); + + List<DeploymentSpec.Step> firstSerialSteps = parallelSteps.get(1).steps(); + assertEquals(4, firstSerialSteps.size()); + assertEquals("prod.us-east-3", firstSerialSteps.get(0).toString()); + assertEquals("delay PT2H", firstSerialSteps.get(1).toString()); + assertEquals("prod.eu-west-1", firstSerialSteps.get(2).toString()); + assertEquals("delay PT2H", firstSerialSteps.get(3).toString()); + + List<DeploymentSpec.Step> secondSerialSteps = parallelSteps.get(2).steps(); + assertEquals(3, secondSerialSteps.size()); + assertEquals("delay PT3H", secondSerialSteps.get(0).toString()); + assertEquals("prod.aws-us-east-1a", secondSerialSteps.get(1).toString()); + assertEquals("2 parallel steps", secondSerialSteps.get(2).toString()); + + List<DeploymentSpec.Step> innerParallelSteps = secondSerialSteps.get(2).steps(); + assertEquals(2, 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("prod.ap-southeast-2", innerParallelSteps.get(1).toString()); + assertEquals("service", spec.requireInstance("default").athenzService(Environment.prod, RegionName.from("ap-southeast-2")).get().value()); } @Test |