aboutsummaryrefslogtreecommitdiffstats
path: root/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithBcpTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithBcpTest.java')
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithBcpTest.java161
1 files changed, 161 insertions, 0 deletions
diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithBcpTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithBcpTest.java
index 77aadc88be8..e1ff8f012bd 100644
--- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithBcpTest.java
+++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithBcpTest.java
@@ -6,6 +6,7 @@ import org.junit.Test;
import java.io.StringReader;
import java.time.Duration;
+import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@@ -100,7 +101,9 @@ public class DeploymentSpecWithBcpTest {
</bcp>
</deployment>
""");
+
var spec = DeploymentSpec.fromXml(r);
+
var betaBcp = spec.requireInstance("beta").bcp().orElse(spec.bcp());
assertEquals(1, betaBcp.groups().size());
var betaGroup = betaBcp.groups().get(0);
@@ -241,6 +244,164 @@ public class DeploymentSpecWithBcpTest {
}
}
+ @Test
+ public void endpointsDefinedInBcp() {
+ StringReader r = new StringReader("""
+ <deployment version='1.0'>
+ <instance id='beta'>
+ <prod>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ </prod>
+ <bcp>
+ <group>
+ <endpoint id="foo" container-id="bar"/>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ </group>
+ </bcp>
+ </instance>
+ <instance id='main'>
+ <prod>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ <region>us-central1</region>
+ <region>us-west1</region>
+ <region>us-west2</region>
+ </prod>
+ <bcp>
+ <group>
+ <endpoint id="east" container-id="bar"/>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ <region fraction="0.3">us-central1</region>
+ </group>
+ <group>
+ <endpoint id="west" container-id="bar"/>
+ <region>us-west1</region>
+ <region>us-west2</region>
+ <region fraction="0.7">us-central1</region>
+ </group>
+ </bcp>
+ </instance>
+ </deployment>
+ """);
+
+ var spec = DeploymentSpec.fromXml(r);
+
+ var betaEndpoints = spec.requireInstance("beta").endpoints();
+ assertEquals(1, betaEndpoints.size());
+ assertEquals("foo", betaEndpoints.get(0).endpointId());
+ assertEquals("bar", betaEndpoints.get(0).containerId());
+ assertEquals(List.of(RegionName.from("us-east1"), RegionName.from("us-east2")),
+ betaEndpoints.get(0).regions());
+
+ var mainEndpoints = spec.requireInstance("main").endpoints();
+ assertEquals(2, mainEndpoints.size());
+ assertEquals("east", mainEndpoints.get(0).endpointId());
+ assertEquals(List.of(RegionName.from("us-east1"), RegionName.from("us-east2"), RegionName.from("us-central1")),
+ mainEndpoints.get(0).regions());
+ assertEquals("west", mainEndpoints.get(1).endpointId());
+ assertEquals(List.of(RegionName.from("us-west1"), RegionName.from("us-west2"), RegionName.from("us-central1")),
+ mainEndpoints.get(1).regions());
+ }
+
+ @Test
+ public void endpointsDefinedInBcpImplicitInstance() {
+ StringReader r = new StringReader("""
+ <deployment version='1.0'>
+ <prod>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ <region>us-central1</region>
+ <region>us-west1</region>
+ <region>us-west2</region>
+ </prod>
+ <bcp>
+ <group>
+ <endpoint id="east" container-id="bar"/>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ <region fraction="0.3">us-central1</region>
+ </group>
+ <group>
+ <endpoint id="west" container-id="bar"/>
+ <region>us-west1</region>
+ <region>us-west2</region>
+ <region fraction="0.7">us-central1</region>
+ </group>
+ </bcp>
+ </deployment>
+ """);
+
+ var spec = DeploymentSpec.fromXml(r);
+
+ var mainEndpoints = spec.requireInstance("default").endpoints();
+ assertEquals(2, mainEndpoints.size());
+ assertEquals("east", mainEndpoints.get(0).endpointId());
+ assertEquals(List.of(RegionName.from("us-east1"), RegionName.from("us-east2"), RegionName.from("us-central1")),
+ mainEndpoints.get(0).regions());
+ assertEquals("west", mainEndpoints.get(1).endpointId());
+ assertEquals(List.of(RegionName.from("us-west1"), RegionName.from("us-west2"), RegionName.from("us-central1")),
+ mainEndpoints.get(1).regions());
+ }
+
+ @Test
+ public void endpontsDefinedInBcpValidation1() {
+ StringReader r = new StringReader("""
+ <deployment version='1.0'>
+ <instance id='beta'>
+ <prod>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ </prod>
+ </instance>
+ <bcp>
+ <group>
+ <endpoint id="foo" container-id="bar"/>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ </group>
+ </bcp>
+ </deployment>
+ """);
+ try {
+ DeploymentSpec.fromXml(r);
+ }
+ catch (IllegalArgumentException e) {
+ assertEquals("The default <bcp> element at the root cannot define endpoints", Exceptions.toMessageString(e));
+ }
+ }
+
+ @Test
+ public void endpontsDefinedInBcpValidation2() {
+ StringReader r = new StringReader("""
+ <deployment version='1.0'>
+ <instance id='beta'>
+ <prod>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ </prod>
+ <bcp>
+ <group>
+ <region>us-east1</region>
+ <region>us-east2</region>
+ <endpoint id="foo" container-id="bar">
+ <region>us-east1</region>
+ </endpoint>
+ </group>
+ </bcp>
+ </instance>
+ </deployment>
+ """);
+ try {
+ DeploymentSpec.fromXml(r);
+ }
+ catch (IllegalArgumentException e) {
+ assertEquals("Endpoints in <group> cannot contain <region> children", Exceptions.toMessageString(e));
+ }
+
+ }
private void assertTwoRegions(DeploymentSpec spec) {
var bcp = spec.requireInstance("default").bcp().orElse(spec.bcp());
assertEquals(1, bcp.groups().size());