diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2023-01-18 11:46:22 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-18 11:46:22 +0100 |
commit | b7778b0652a24e7afb670fcfa1750fbebe3c3a36 (patch) | |
tree | f81e7771a9dcb108b2addac757f131d0a82f8733 /config-model-api/src/test/java/com/yahoo | |
parent | f075307ccf2e46a7562a53022bebd4e05ba23d31 (diff) |
Revert "Parse, validate and use new zone endpoint syntax"
Diffstat (limited to 'config-model-api/src/test/java/com/yahoo')
2 files changed, 77 insertions, 257 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 355ce651c34..96cd4810ec4 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 @@ -6,14 +6,10 @@ import com.yahoo.config.application.api.Endpoint.Level; import com.yahoo.config.application.api.Endpoint.Target; import com.yahoo.config.application.api.xml.DeploymentSpecXmlReader; import com.yahoo.config.provision.CloudAccount; -import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Tags; -import com.yahoo.config.provision.ZoneEndpoint; -import com.yahoo.config.provision.ZoneEndpoint.AllowedUrn; -import com.yahoo.config.provision.ZoneEndpoint.AccessType; import com.yahoo.test.ManualClock; import org.junit.Test; @@ -23,7 +19,6 @@ import java.time.Duration; import java.time.Instant; import java.time.ZoneId; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; @@ -32,12 +27,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.zone.ZoneId.defaultId; -import static com.yahoo.config.provision.zone.ZoneId.from; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -1191,16 +1183,15 @@ public class DeploymentSpecTest { @Test public void customTesterFlavor() { - DeploymentSpec spec = DeploymentSpec.fromXml(""" - <deployment> - <instance id='default'> - <test tester-flavor="d-1-4-20" /> - <staging /> - <prod tester-flavor="d-2-8-50"> - <region active="false">us-north-7</region> - </prod> - </instance> - </deployment>"""); + DeploymentSpec spec = DeploymentSpec.fromXml("<deployment>" + + " <instance id='default'>" + + " <test tester-flavor=\"d-1-4-20\" />" + + " <staging />" + + " <prod tester-flavor=\"d-2-8-50\">" + + " <region active=\"false\">us-north-7</region>" + + " </prod>" + + " </instance>" + + "</deployment>"); 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()); @@ -1208,55 +1199,39 @@ public class DeploymentSpecTest { @Test public void noEndpoints() { - DeploymentSpec spec = DeploymentSpec.fromXml(""" - <deployment> - <instance id='default'/> - </deployment> - """); - assertEquals(Collections.emptyList(), spec.requireInstance("default").endpoints()); - assertEquals(ZoneEndpoint.defaultEndpoint, spec.zoneEndpoint(InstanceName.defaultName(), - defaultId(), - ClusterSpec.Id.from("cluster"))); + assertEquals(Collections.emptyList(), + DeploymentSpec.fromXml("<deployment>" + + " <instance id='default'/>" + + "</deployment>").requireInstance("default").endpoints()); } @Test public void emptyEndpoints() { - var spec = DeploymentSpec.fromXml(""" - <deployment> - <instance id='default'> - <endpoints/> - </instance> - </deployment>"""); + var spec = DeploymentSpec.fromXml("<deployment>" + + " <instance id='default'>" + + " <endpoints/>" + + " </instance>" + + "</deployment>"); assertEquals(List.of(), spec.requireInstance("default").endpoints()); - assertEquals(ZoneEndpoint.defaultEndpoint, spec.zoneEndpoint(InstanceName.defaultName(), - defaultId(), - ClusterSpec.Id.from("cluster"))); } @Test public void someEndpoints() { - var spec = DeploymentSpec.fromXml(""" - <deployment> - <instance id='default'> - <prod> - <region active="true">us-east</region> - </prod> - <endpoints> - <endpoint id="foo" container-id="bar"> - <region>us-east</region> - </endpoint> - <endpoint id="nalle" container-id="frosk" /> - <endpoint container-id="quux" /> - <endpoint container-id='bax' type='zone' enabled='true' /> - <endpoint container-id='froz' type='zone' enabled='false' /> - <endpoint container-id='froz' type='private'> - <region>us-east</region> - <allow with='aws-private-link' arn='barn' /> - <allow with='gcp-service-connect' project='nine' /> - </endpoint> - </endpoints> - </instance> - </deployment>"""); + var spec = DeploymentSpec.fromXml("" + + "<deployment>" + + " <instance id='default'>" + + " <prod>" + + " <region active=\"true\">us-east</region>" + + " </prod>" + + " <endpoints>" + + " <endpoint id=\"foo\" container-id=\"bar\">" + + " <region>us-east</region>" + + " </endpoint>" + + " <endpoint id=\"nalle\" container-id=\"frosk\" />" + + " <endpoint container-id=\"quux\" />" + + " </endpoints>" + + " </instance>" + + "</deployment>"); assertEquals( List.of("foo", "nalle", "default"), @@ -1269,59 +1244,18 @@ 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")); - assertEquals(ZoneEndpoint.defaultEndpoint, - spec.zoneEndpoint(InstanceName.from("custom"), zone, ClusterSpec.Id.from("bax"))); - assertEquals(ZoneEndpoint.defaultEndpoint, - spec.zoneEndpoint(InstanceName.from("default"), defaultId(), ClusterSpec.Id.from("bax"))); - assertEquals(ZoneEndpoint.defaultEndpoint, - spec.zoneEndpoint(InstanceName.from("default"), zone, ClusterSpec.Id.from("bax"))); - - assertEquals(new ZoneEndpoint(false, true, List.of(new AllowedUrn(AccessType.awsPrivateLink, "barn"), - new AllowedUrn(AccessType.gcpServiceConnect, "nine"))), - spec.zoneEndpoint(InstanceName.from("default"), zone, ClusterSpec.Id.from("froz"))); } @Test public void invalidEndpoints() { - assertInvalidEndpoints("<endpoint id='FOO' container-id='qrs'/>", - "Endpoint ID must be all lowercase, alphanumeric, with no consecutive dashes, of length 1 to 12, and begin with a character; but got 'FOO'"); - assertInvalidEndpoints("<endpoint id='123' container-id='qrs'/>", - "Endpoint ID must be all lowercase, alphanumeric, with no consecutive dashes, of length 1 to 12, and begin with a character; but got '123'"); - assertInvalidEndpoints("<endpoint id='foo!' container-id='qrs'/>", - "Endpoint ID must be all lowercase, alphanumeric, with no consecutive dashes, of length 1 to 12, and begin with a character; but got 'foo!'"); - assertInvalidEndpoints("<endpoint id='foo.bar' container-id='qrs'/>", - "Endpoint ID must be all lowercase, alphanumeric, with no consecutive dashes, of length 1 to 12, and begin with a character; but got 'foo.bar'"); - assertInvalidEndpoints("<endpoint id='foo--bar' container-id='qrs'/>", - "Endpoint ID must be all lowercase, alphanumeric, with no consecutive dashes, of length 1 to 12, and begin with a character; but got 'foo--bar'"); - assertInvalidEndpoints("<endpoint id='foo-' container-id='qrs'/>", - "Endpoint ID must be all lowercase, alphanumeric, with no consecutive dashes, of length 1 to 12, and begin with a character; but got 'foo-'"); - assertInvalidEndpoints("<endpoint id='foooooooooooo' container-id='qrs'/>", - "Endpoint ID must be all lowercase, alphanumeric, with no consecutive dashes, of length 1 to 12, and begin with a character; but got 'foooooooooooo'"); - - assertInvalidEndpoints("<endpoint id='foo' container-id='qrs'/><endpoint id='foo' container-id='qrs'/>", - "Endpoint ID 'foo' is specified multiple times"); - assertInvalidEndpoints("<endpoint id='default' type='zone' container-id='foo' />", - "Instance-level endpoint 'default': cannot declare 'id' with type 'zone' or 'private'"); - assertInvalidEndpoints("<endpoint id='default' type='private' container-id='foo' />", - "Instance-level endpoint 'default': cannot declare 'id' with type 'zone' or 'private'"); - assertInvalidEndpoints("<endpoint type='zone' />", - "Missing required attribute 'container-id' in 'endpoint'"); - assertInvalidEndpoints("<endpoint type='private' />", - "Missing required attribute 'container-id' in 'endpoint'"); - assertInvalidEndpoints("<endpoint container-id='foo' type='zone'><allow /></endpoint>", - "Instance-level endpoint 'default': only endpoints of type 'private' can specify 'allow' children"); - assertInvalidEndpoints("<endpoint type='private' container-id='foo' enabled='true' />", - "Instance-level endpoint 'default': only endpoints of type 'zone' can specify 'enabled'"); - assertInvalidEndpoints("<endpoint type='zone' container-id='qrs'/><endpoint type='zone' container-id='qrs'/>", - "Multiple zone endpoints (for all regions) declared for container id 'qrs'"); - assertInvalidEndpoints("<endpoint type='private' container-id='qrs'><region>us</region></endpoint>" + - "<endpoint type='private' container-id='qrs'><region>us</region></endpoint>", - "Multiple private endpoints declared for container id 'qrs' in region 'us'"); - assertInvalidEndpoints("<endpoint type='zone' container-id='qrs' />" + - "<endpoint type='zone' container-id='qrs'><region>us</region></endpoint>", - "Zone endpoint for container id 'qrs' declared both with region 'us', and for all regions."); + assertInvalidEndpoints("<endpoint id='FOO' container-id='qrs'/>"); // Uppercase + assertInvalidEndpoints("<endpoint id='123' container-id='qrs'/>"); // Starting with non-character + assertInvalidEndpoints("<endpoint id='foo!' container-id='qrs'/>"); // Non-alphanumeric + assertInvalidEndpoints("<endpoint id='foo.bar' container-id='qrs'/>"); + assertInvalidEndpoints("<endpoint id='foo--bar' container-id='qrs'/>"); // Multiple consecutive dashes + assertInvalidEndpoints("<endpoint id='foo-' container-id='qrs'/>"); // Trailing dash + assertInvalidEndpoints("<endpoint id='foooooooooooo' container-id='qrs'/>"); // Too long + assertInvalidEndpoints("<endpoint id='foo' container-id='qrs'/><endpoint id='foo' container-id='qrs'/>"); // Duplicate } @Test @@ -1337,44 +1271,25 @@ public class DeploymentSpecTest { @Test public void endpointDefaultRegions() { - var spec = DeploymentSpec.fromXml(""" - <deployment> - <instance id='default'> - <prod> - <region>us-east</region> - <region>us-west</region> - </prod> - <endpoints> - <endpoint id="foo" container-id="bar"> - <region>us-east</region> - </endpoint> - <endpoint container-id="bar" type='private'> - <region>us-east</region> - </endpoint> - <endpoint id="nalle" container-id="frosk" /> - <endpoint container-id="quux" /> - <endpoint container-id="quux" type='private' /> - </endpoints> - </instance> - </deployment>"""); + var spec = DeploymentSpec.fromXml("<deployment>" + + " <instance id='default'>" + + " <prod>" + + " <region>us-east</region>" + + " <region>us-west</region>" + + " </prod>" + + " <endpoints>" + + " <endpoint id=\"foo\" container-id=\"bar\">" + + " <region>us-east</region>" + + " </endpoint>" + + " <endpoint id=\"nalle\" container-id=\"frosk\" />" + + " <endpoint container-id=\"quux\" />" + + " </endpoints>" + + " </instance>" + + "</deployment>"); assertEquals(Set.of("us-east"), endpointRegions("foo", spec)); assertEquals(Set.of("us-east", "us-west"), endpointRegions("nalle", spec)); assertEquals(Set.of("us-east", "us-west"), endpointRegions("default", spec)); - assertEquals(new ZoneEndpoint(true, true, List.of()), - spec.zoneEndpoint(InstanceName.from("default"), from("prod", "us-east"), ClusterSpec.Id.from("bar"))); - assertEquals(new ZoneEndpoint(true, false, List.of()), - spec.zoneEndpoint(InstanceName.from("default"), from("prod", "us-west"), ClusterSpec.Id.from("bar"))); - assertEquals(new ZoneEndpoint(true, true, List.of()), - spec.zoneEndpoint(InstanceName.from("default"), from("prod", "us-east"), ClusterSpec.Id.from("quux"))); - assertEquals(new ZoneEndpoint(true, true, List.of()), - spec.zoneEndpoint(InstanceName.from("default"), from("prod", "us-west"), ClusterSpec.Id.from("quux"))); - assertEquals(new HashSet<>() {{ add(null); add(from("prod", "us-east")); }}, - spec.requireInstance("default").zoneEndpoints().get(ClusterSpec.Id.from("bar")).keySet()); - assertEquals(new HashSet<>() {{ add(null); }}, - spec.requireInstance("default").zoneEndpoints().get(ClusterSpec.Id.from("quux")).keySet()); - assertEquals(Set.of(ClusterSpec.Id.from("bar"), ClusterSpec.Id.from("quux")), - spec.requireInstance("default").zoneEndpoints().keySet()); } @Test @@ -1387,16 +1302,14 @@ public class DeploymentSpecTest { <region active="true">us-west</region> </prod> <endpoints> - <endpoint container-id="bar" %s> + <endpoint id="foo" container-id="bar" %s> %s </endpoint> </endpoints> </instance> </deployment>"""; - assertInvalid(String.format(xmlForm, "id='foo' region='us-east'", "<region>us-east</region>"), "Instance-level endpoint 'foo': invalid 'region' attribute"); - assertInvalid(String.format(xmlForm, "id='foo'", "<instance>us-east</instance>"), "Instance-level endpoint 'foo': invalid element 'instance'"); - assertInvalid(String.format(xmlForm, "type='zone'", "<instance>us-east</instance>"), "Instance-level endpoint 'default': invalid element 'instance'"); - assertInvalid(String.format(xmlForm, "type='private'", "<instance>us-east</instance>"), "Instance-level endpoint 'default': invalid element 'instance'"); + assertInvalid(String.format(xmlForm, "region='us-east'", "<region>us-east</region>"), "Instance-level endpoint 'foo': invalid 'region' attribute"); + assertInvalid(String.format(xmlForm, "", "<instance>us-east</instance>"), "Instance-level endpoint 'foo': invalid element 'instance'"); } @Test @@ -1430,73 +1343,6 @@ public class DeploymentSpecTest { assertInvalid(String.format(xmlForm, "region='us-west-1'", "weight='foo'", "", "main", ""), "Application-level endpoint 'foo': invalid weight value 'foo'"); assertInvalid(String.format(xmlForm, "region='us-west-1'", "weight='1'", "", "main", "<region>us-east-3</region>"), "Application-level endpoint 'foo': invalid element 'region'"); assertInvalid(String.format(xmlForm, "region='us-west-1'", "weight='0'", "", "main", ""), "Application-level endpoint 'foo': sum of all weights must be positive, got 0"); - assertInvalid(String.format(xmlForm, "type='zone'", "weight='1'", "", "main", ""), "Endpoints at application level cannot be of type 'zone'"); - assertInvalid(String.format(xmlForm, "type='private'", "weight='1'", "", "main", ""), "Endpoints at application level cannot be of type 'private'"); - } - - @Test - public void cannotTargetDisabledEndpoints() { - assertEquals("Instance-level endpoint 'default': all eligible zone endpoints have 'enabled' set to 'false'", - assertThrows(IllegalArgumentException.class, - () -> DeploymentSpec.fromXml(""" - <deployment> - <instance id="default"> - <prod> - <region>us</region> - <region>eu</region> - </prod> - <endpoints> - <endpoint container-id='id' /> - <endpoint type='zone' container-id='id' enabled='false' /> - </endpoints> - </instance> - </deployment> - """)) - .getMessage()); - - assertEquals("Instance-level endpoint 'default': targets zone endpoint in 'us' with 'enabled' set to 'false'", - assertThrows(IllegalArgumentException.class, - () -> DeploymentSpec.fromXml(""" - <deployment> - <instance id="default"> - <prod> - <region>us</region> - <region>eu</region> - </prod> - <endpoints> - <endpoint container-id='id'> - <region>us</region> - </endpoint> - <endpoint type='zone' container-id='id' enabled='false' /> - </endpoints> - </instance> - </deployment> - """)) - .getMessage()); - - assertEquals("Application-level endpoint 'default': targets 'us' in 'default', but its zone endpoint has 'enabled' set to 'false'", - assertThrows(IllegalArgumentException.class, - () -> DeploymentSpec.fromXml(""" - <deployment> - <instance id="default"> - <prod> - <region>us</region> - <region>eu</region> - </prod> - <endpoints> - <endpoint type='zone' container-id='id' enabled='false'> - <region>us</region> - </endpoint> - </endpoints> - </instance> - <endpoints> - <endpoint container-id='id' region='us'> - <instance weight='1'>default</instance> - </endpoint> - </endpoints> - </deployment> - """)) - .getMessage()); } @Test @@ -1802,11 +1648,11 @@ public class DeploymentSpecTest { } } - private static void assertInvalidEndpoints(String endpointsBody, String error) { - assertEquals(error, - assertThrows(IllegalArgumentException.class, - () -> endpointIds(endpointsBody)) - .getMessage()); + private static void assertInvalidEndpoints(String endpointsBody) { + try { + endpointIds(endpointsBody); + fail("Expected exception for input '" + endpointsBody + "'"); + } catch (IllegalArgumentException ignored) {} } private static Set<String> endpointRegions(String endpointId, DeploymentSpec spec) { 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..6ff5616a80f 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,13 +3,8 @@ package com.yahoo.config.application.api; import com.google.common.collect.ImmutableSet; import com.yahoo.config.provision.CloudAccount; -import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; -import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; -import com.yahoo.config.provision.ZoneEndpoint; -import com.yahoo.config.provision.ZoneEndpoint.AllowedUrn; -import com.yahoo.config.provision.ZoneEndpoint.AccessType; import org.junit.Test; import java.io.StringReader; @@ -25,8 +20,6 @@ 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.zone.ZoneId.defaultId; -import static com.yahoo.config.provision.zone.ZoneId.from; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; @@ -661,26 +654,19 @@ public class DeploymentSpecWithoutInstanceTest { @Test public void someEndpoints() { - var spec = DeploymentSpec.fromXml(""" - <deployment> - <prod> - <region active="true">us-east</region> - </prod> - <endpoints> - <endpoint id="foo" container-id="bar"> - <region>us-east</region> - </endpoint> - <endpoint id="nalle" container-id="frosk" /> - <endpoint container-id="quux" /> - <endpoint container-id='bax' type='zone' enabled='true' /> - <endpoint container-id='froz' type='zone' enabled='false' /> - <endpoint container-id='froz' type='private'> - <region>us-east</region> - <allow with='aws-private-link' arn='barn' /> - <allow with='gcp-service-connect' project='nine' /> - </endpoint> - </endpoints> - </deployment>"""); + var spec = DeploymentSpec.fromXml("" + + "<deployment>" + + " <prod>" + + " <region active=\"true\">us-east</region>" + + " </prod>" + + " <endpoints>" + + " <endpoint id=\"foo\" container-id=\"bar\">" + + " <region>us-east</region>" + + " </endpoint>" + + " <endpoint id=\"nalle\" container-id=\"frosk\" />" + + " <endpoint container-id=\"quux\" />" + + " </endpoints>" + + "</deployment>"); assertEquals( List.of("foo", "nalle", "default"), @@ -693,18 +679,6 @@ 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")); - assertEquals(ZoneEndpoint.defaultEndpoint, - spec.zoneEndpoint(InstanceName.from("custom"), zone, ClusterSpec.Id.from("bax"))); - assertEquals(ZoneEndpoint.defaultEndpoint, - spec.zoneEndpoint(InstanceName.from("default"), defaultId(), ClusterSpec.Id.from("bax"))); - assertEquals(ZoneEndpoint.defaultEndpoint, - spec.zoneEndpoint(InstanceName.from("default"), zone, ClusterSpec.Id.from("bax"))); - - assertEquals(new ZoneEndpoint(false, true, List.of(new AllowedUrn(AccessType.awsPrivateLink, "barn"), - new AllowedUrn(AccessType.gcpServiceConnect, "nine"))), - spec.zoneEndpoint(InstanceName.from("default"), zone, ClusterSpec.Id.from("froz"))); } @Test |