1717package io .grpc .xds ;
1818
1919import static com .google .common .truth .Truth .assertThat ;
20- import static io .grpc .xds .XdsLbPolicies .CDS_POLICY_NAME ;
2120import static io .grpc .xds .XdsLbPolicies .CLUSTER_RESOLVER_POLICY_NAME ;
2221import static io .grpc .xds .XdsLbPolicies .PRIORITY_POLICY_NAME ;
2322import static io .grpc .xds .XdsTestControlPlaneService .ADS_TYPE_URL_CDS ;
@@ -152,8 +151,6 @@ public class CdsLoadBalancer2Test {
152151
153152 @ Before
154153 public void setUp () throws Exception {
155- lbRegistry .register (new FakeLoadBalancerProvider (PRIORITY_POLICY_NAME ));
156- lbRegistry .register (new FakeLoadBalancerProvider (CDS_POLICY_NAME ));
157154 lbRegistry .register (new FakeLoadBalancerProvider (CLUSTER_RESOLVER_POLICY_NAME ));
158155 lbRegistry .register (new FakeLoadBalancerProvider ("round_robin" ));
159156 lbRegistry .register (
@@ -162,7 +159,9 @@ public void setUp() throws Exception {
162159 new LeastRequestLoadBalancerProvider ()));
163160 lbRegistry .register (new FakeLoadBalancerProvider ("wrr_locality_experimental" ,
164161 new WrrLocalityLoadBalancerProvider ()));
165- loadBalancer = new CdsLoadBalancer2 (helper , lbRegistry );
162+ CdsLoadBalancerProvider cdsLoadBalancerProvider = new CdsLoadBalancerProvider (lbRegistry );
163+ lbRegistry .register (cdsLoadBalancerProvider );
164+ loadBalancer = (CdsLoadBalancer2 ) cdsLoadBalancerProvider .newLoadBalancer (helper );
166165
167166 cleanupRule .register (InProcessServerBuilder
168167 .forName ("control-plane.example.com" )
@@ -407,11 +406,16 @@ public void dynamicCluster() {
407406 }
408407
409408 @ Test
410- public void discoverAggregateCluster () {
409+ public void discoverAggregateCluster_createsPriorityLbPolicy () {
410+ lbRegistry .register (new FakeLoadBalancerProvider (PRIORITY_POLICY_NAME ));
411+ CdsLoadBalancerProvider cdsLoadBalancerProvider = new CdsLoadBalancerProvider (lbRegistry );
412+ lbRegistry .register (cdsLoadBalancerProvider );
413+ loadBalancer = (CdsLoadBalancer2 ) cdsLoadBalancerProvider .newLoadBalancer (helper );
414+
411415 String cluster1 = "cluster-01.googleapis.com" ;
412416 String cluster2 = "cluster-02.googleapis.com" ;
413417 controlPlaneService .setXdsConfig (ADS_TYPE_URL_CDS , ImmutableMap .of (
414- // cluster1 (aggr.) -> [cluster2 (EDS), cluster3 (EDS)]
418+ // CLUSTER (aggr.) -> [cluster1 (EDS), cluster2 (EDS)]
415419 CLUSTER , Cluster .newBuilder ()
416420 .setName (CLUSTER )
417421 .setClusterType (Cluster .CustomClusterType .newBuilder ()
@@ -438,15 +442,60 @@ public void discoverAggregateCluster() {
438442 PriorityLoadBalancerProvider .PriorityLbConfig .PriorityChildConfig childConfig1 =
439443 childLbConfig .childConfigs .get (cluster1 );
440444 assertThat (childConfig1 .toString ()).isEqualTo ("PriorityChildConfig{childConfig="
441- + "GracefulSwitchLoadBalancer.Config{childFactory=FakeLoadBalancerProvider{policy= "
442- + "cds_experimental, priority=0 , available=true}, childConfig=CdsConfig{name= "
443- + "cluster-01.googleapis.com, isDynamic=false}}, ignoreReresolution=false}" );
445+ + "GracefulSwitchLoadBalancer.Config{childFactory=CdsLoadBalancerProvider{ "
446+ + "policy= cds_experimental, priority=5 , available=true}, childConfig=CdsConfig{"
447+ + "name= cluster-01.googleapis.com, isDynamic=false}}, ignoreReresolution=false}" );
444448 PriorityLoadBalancerProvider .PriorityLbConfig .PriorityChildConfig childConfig2 =
445449 childLbConfig .childConfigs .get (cluster2 );
446450 assertThat (childConfig2 .toString ()).isEqualTo ("PriorityChildConfig{childConfig="
447- + "GracefulSwitchLoadBalancer.Config{childFactory=FakeLoadBalancerProvider{policy="
448- + "cds_experimental, priority=1, available=true}, childConfig=CdsConfig{name="
449- + "cluster-02.googleapis.com, isDynamic=false}}, ignoreReresolution=false}" );
451+ + "GracefulSwitchLoadBalancer.Config{childFactory=CdsLoadBalancerProvider{"
452+ + "policy=cds_experimental, priority=5, available=true}, childConfig=CdsConfig{"
453+ + "name=cluster-02.googleapis.com, isDynamic=false}}, ignoreReresolution=false}" );
454+ }
455+
456+ @ Test
457+ // Both priorities will get tried using real priority LB policy.
458+ public void discoverAggregateCluster_testChildCdsLbPolicyParsing () {
459+ lbRegistry .register (new PriorityLoadBalancerProvider ());
460+ CdsLoadBalancerProvider cdsLoadBalancerProvider = new CdsLoadBalancerProvider (lbRegistry );
461+ lbRegistry .register (cdsLoadBalancerProvider );
462+ loadBalancer = (CdsLoadBalancer2 ) cdsLoadBalancerProvider .newLoadBalancer (helper );
463+
464+ String cluster1 = "cluster-01.googleapis.com" ;
465+ String cluster2 = "cluster-02.googleapis.com" ;
466+ controlPlaneService .setXdsConfig (ADS_TYPE_URL_CDS , ImmutableMap .of (
467+ // CLUSTER (aggr.) -> [cluster1 (EDS), cluster2 (EDS)]
468+ CLUSTER , Cluster .newBuilder ()
469+ .setName (CLUSTER )
470+ .setClusterType (Cluster .CustomClusterType .newBuilder ()
471+ .setName ("envoy.clusters.aggregate" )
472+ .setTypedConfig (Any .pack (ClusterConfig .newBuilder ()
473+ .addClusters (cluster1 )
474+ .addClusters (cluster2 )
475+ .build ())))
476+ .build (),
477+ cluster1 , EDS_CLUSTER .toBuilder ().setName (cluster1 ).build (),
478+ cluster2 , EDS_CLUSTER .toBuilder ().setName (cluster2 ).build ()));
479+ startXdsDepManager ();
480+
481+ verify (helper , never ()).updateBalancingState (eq (ConnectivityState .TRANSIENT_FAILURE ), any ());
482+ assertThat (childBalancers ).hasSize (2 );
483+ ClusterResolverConfig cluster1ResolverConfig =
484+ (ClusterResolverConfig ) childBalancers .get (0 ).config ;
485+ assertThat (cluster1ResolverConfig .discoveryMechanism .cluster )
486+ .isEqualTo ("cluster-01.googleapis.com" );
487+ assertThat (cluster1ResolverConfig .discoveryMechanism .type )
488+ .isEqualTo (DiscoveryMechanism .Type .EDS );
489+ assertThat (cluster1ResolverConfig .discoveryMechanism .edsServiceName )
490+ .isEqualTo ("backend-service-1.googleapis.com" );
491+ ClusterResolverConfig cluster2ResolverConfig =
492+ (ClusterResolverConfig ) childBalancers .get (1 ).config ;
493+ assertThat (cluster2ResolverConfig .discoveryMechanism .cluster )
494+ .isEqualTo ("cluster-02.googleapis.com" );
495+ assertThat (cluster2ResolverConfig .discoveryMechanism .type )
496+ .isEqualTo (DiscoveryMechanism .Type .EDS );
497+ assertThat (cluster2ResolverConfig .discoveryMechanism .edsServiceName )
498+ .isEqualTo ("backend-service-1.googleapis.com" );
450499 }
451500
452501 @ Test
@@ -474,6 +523,11 @@ public void aggregateCluster_noChildren() {
474523
475524 @ Test
476525 public void aggregateCluster_noNonAggregateClusterExits_returnErrorPicker () {
526+ lbRegistry .register (new PriorityLoadBalancerProvider ());
527+ CdsLoadBalancerProvider cdsLoadBalancerProvider = new CdsLoadBalancerProvider (lbRegistry );
528+ lbRegistry .register (cdsLoadBalancerProvider );
529+ loadBalancer = (CdsLoadBalancer2 ) cdsLoadBalancerProvider .newLoadBalancer (helper );
530+
477531 String cluster1 = "cluster-01.googleapis.com" ;
478532 controlPlaneService .setXdsConfig (ADS_TYPE_URL_CDS , ImmutableMap .of (
479533 // CLUSTER (aggr.) -> [cluster1 (missing)]
0 commit comments