@@ -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