Skip to content

Commit 88f300a

Browse files
committed
xds: Test aggregate leaf backend_service label
Add coverage for the aggregate cluster path to verify that a pick through the aggregate LB stack adds grpc.lb.backend_service from the leaf CDS instance, not from the aggregate root. Also rename the aggregate-root negative test to use "And" because it checks both the backend service attribute and pick-details label.
1 parent ebd1ead commit 88f300a

1 file changed

Lines changed: 39 additions & 1 deletion

File tree

xds/src/test/java/io/grpc/xds/CdsLoadBalancer2Test.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ public void discoverAggregateCluster_createsPriorityLbPolicy() {
449449
}
450450

451451
@Test
452-
public void aggregateCluster_doesNotAddBackendServiceAttributeOrPickDetailsLabelFromRoot() {
452+
public void aggregateCluster_doesNotAddBackendServiceAttributeAndPickDetailsLabelFromRoot() {
453453
String cluster1 = "cluster-01.googleapis.com";
454454
controlPlaneService.setXdsConfig(ADS_TYPE_URL_CDS, ImmutableMap.of(
455455
// CLUSTER (aggr.) -> [cluster1 (EDS)]
@@ -477,6 +477,44 @@ public void aggregateCluster_doesNotAddBackendServiceAttributeOrPickDetailsLabel
477477
verify(detailsConsumer, never()).addOptionalLabel(eq("grpc.lb.backend_service"), any());
478478
}
479479

480+
@Test
481+
public void aggregateCluster_leafAddsBackendServicePickDetailsLabel() {
482+
lbRegistry.register(new PriorityLoadBalancerProvider());
483+
CdsLoadBalancerProvider cdsLoadBalancerProvider = new CdsLoadBalancerProvider(lbRegistry);
484+
lbRegistry.register(cdsLoadBalancerProvider);
485+
loadBalancer = (CdsLoadBalancer2) cdsLoadBalancerProvider.newLoadBalancer(helper);
486+
487+
String cluster1 = "cluster-01.googleapis.com";
488+
controlPlaneService.setXdsConfig(ADS_TYPE_URL_CDS, ImmutableMap.of(
489+
// CLUSTER (aggr.) -> [cluster1 (EDS)]
490+
CLUSTER, Cluster.newBuilder()
491+
.setName(CLUSTER)
492+
.setClusterType(Cluster.CustomClusterType.newBuilder()
493+
.setName("envoy.clusters.aggregate")
494+
.setTypedConfig(Any.pack(ClusterConfig.newBuilder()
495+
.addClusters(cluster1)
496+
.build())))
497+
.build(),
498+
cluster1, EDS_CLUSTER.toBuilder().setName(cluster1).build()));
499+
startXdsDepManager();
500+
501+
FakeLoadBalancer childBalancer = Iterables.getOnlyElement(childBalancers);
502+
ClusterImplConfig clusterImplConfig = (ClusterImplConfig) childBalancer.config;
503+
assertThat(clusterImplConfig.cluster).isEqualTo(cluster1);
504+
assertThat(childBalancer.attributes.get(NameResolver.ATTR_BACKEND_SERVICE))
505+
.isEqualTo(cluster1);
506+
childBalancer.deliverSubchannelState(PickResult.withNoResult(), ConnectivityState.READY);
507+
508+
verify(helper).updateBalancingState(eq(ConnectivityState.READY), pickerCaptor.capture());
509+
PickDetailsConsumer detailsConsumer = mock(PickDetailsConsumer.class);
510+
PickResult result =
511+
pickerCaptor.getValue().pickSubchannel(newPickSubchannelArgs(detailsConsumer));
512+
513+
assertThat(result.getStatus().isOk()).isTrue();
514+
verify(detailsConsumer).addOptionalLabel("grpc.lb.backend_service", cluster1);
515+
verify(detailsConsumer, never()).addOptionalLabel("grpc.lb.backend_service", CLUSTER);
516+
}
517+
480518
@Test
481519
// Both priorities will get tried using real priority LB policy.
482520
public void discoverAggregateCluster_testChildCdsLbPolicyParsing() {

0 commit comments

Comments
 (0)