1818
1919import static com .google .common .truth .Truth .assertThat ;
2020import static io .grpc .xds .XdsLbPolicies .CLUSTER_RESOLVER_POLICY_NAME ;
21+ import static io .grpc .xds .XdsLbPolicies .PRIORITY_POLICY_NAME ;
2122import static io .grpc .xds .XdsTestControlPlaneService .ADS_TYPE_URL_CDS ;
2223import static io .grpc .xds .XdsTestControlPlaneService .ADS_TYPE_URL_EDS ;
2324import static io .grpc .xds .XdsTestControlPlaneService .ADS_TYPE_URL_LDS ;
2728import static org .mockito .Mockito .mock ;
2829import static org .mockito .Mockito .never ;
2930import static org .mockito .Mockito .verify ;
31+ import static org .mockito .Mockito .when ;
3032
3133import com .github .xds .type .v3 .TypedStruct ;
3234import com .google .common .collect .ImmutableMap ;
@@ -150,6 +152,8 @@ public class CdsLoadBalancer2Test {
150152 @ Before
151153 public void setUp () throws Exception {
152154 lbRegistry .register (new FakeLoadBalancerProvider (CLUSTER_RESOLVER_POLICY_NAME ));
155+ lbRegistry .register (new PriorityLoadBalancerProvider ());
156+ lbRegistry .register (new CdsLoadBalancerProvider ());
153157 lbRegistry .register (new FakeLoadBalancerProvider ("round_robin" ));
154158 lbRegistry .register (
155159 new FakeLoadBalancerProvider ("ring_hash_experimental" , new RingHashLoadBalancerProvider ()));
@@ -169,6 +173,8 @@ public void setUp() throws Exception {
169173 SynchronizationContext syncContext = new SynchronizationContext ((t , e ) -> {
170174 throw new AssertionError (e );
171175 });
176+ when (helper .getSynchronizationContext ()).thenReturn (syncContext );
177+ when (helper .getScheduledExecutorService ()).thenReturn (fakeClock .getScheduledExecutorService ());
172178
173179 NameResolver .Args nameResolverArgs = NameResolver .Args .newBuilder ()
174180 .setDefaultPort (8080 )
@@ -403,70 +409,32 @@ public void dynamicCluster() {
403409 public void discoverAggregateCluster () {
404410 String cluster1 = "cluster-01.googleapis.com" ;
405411 String cluster2 = "cluster-02.googleapis.com" ;
406- String cluster3 = "cluster-03.googleapis.com" ;
407- String cluster4 = "cluster-04.googleapis.com" ;
408412 controlPlaneService .setXdsConfig (ADS_TYPE_URL_CDS , ImmutableMap .of (
409- // CLUSTER (aggr.) -> [cluster1 (aggr.), cluster2 (logical DNS ), cluster3 (EDS)]
413+ // cluster1 (aggr.) -> [cluster2 (EDS ), cluster3 (EDS)]
410414 CLUSTER , Cluster .newBuilder ()
411415 .setName (CLUSTER )
412416 .setClusterType (Cluster .CustomClusterType .newBuilder ()
413417 .setName ("envoy.clusters.aggregate" )
414418 .setTypedConfig (Any .pack (ClusterConfig .newBuilder ()
415419 .addClusters (cluster1 )
416420 .addClusters (cluster2 )
417- .addClusters (cluster3 )
418421 .build ())))
419- .setLbPolicy (Cluster .LbPolicy .RING_HASH )
420- .build (),
421- // cluster1 (aggr.) -> [cluster3 (EDS), cluster4 (EDS)]
422- cluster1 , Cluster .newBuilder ()
423- .setName (cluster1 )
424- .setClusterType (Cluster .CustomClusterType .newBuilder ()
425- .setName ("envoy.clusters.aggregate" )
426- .setTypedConfig (Any .pack (ClusterConfig .newBuilder ()
427- .addClusters (cluster3 )
428- .addClusters (cluster4 )
429- .build ())))
430- .build (),
431- cluster2 , Cluster .newBuilder ()
432- .setName (cluster2 )
433- .setType (Cluster .DiscoveryType .LOGICAL_DNS )
434- .setLoadAssignment (ClusterLoadAssignment .newBuilder ()
435- .addEndpoints (LocalityLbEndpoints .newBuilder ()
436- .addLbEndpoints (LbEndpoint .newBuilder ()
437- .setEndpoint (Endpoint .newBuilder ()
438- .setAddress (Address .newBuilder ()
439- .setSocketAddress (SocketAddress .newBuilder ()
440- .setAddress ("dns.example.com" )
441- .setPortValue (1111 )))))))
442422 .build (),
443- cluster3 , EDS_CLUSTER .toBuilder ()
444- .setName (cluster3 )
445- .setCircuitBreakers (CircuitBreakers .newBuilder ()
446- .addThresholds (CircuitBreakers .Thresholds .newBuilder ()
447- .setPriority (RoutingPriority .DEFAULT )
448- .setMaxRequests (UInt32Value .newBuilder ().setValue (100 ))))
449- .build (),
450- cluster4 , EDS_CLUSTER .toBuilder ().setName (cluster4 ).build ()));
423+ cluster1 , EDS_CLUSTER .toBuilder ().setName (cluster1 ).build (),
424+ cluster2 , EDS_CLUSTER .toBuilder ().setName (cluster2 ).build ()));
451425 startXdsDepManager ();
452426
453427 verify (helper , never ()).updateBalancingState (eq (ConnectivityState .TRANSIENT_FAILURE ), any ());
454428 assertThat (childBalancers ).hasSize (1 );
455429 FakeLoadBalancer childBalancer = Iterables .getOnlyElement (childBalancers );
456- assertThat (childBalancer .name ).isEqualTo (CLUSTER_RESOLVER_POLICY_NAME );
457- ClusterResolverConfig childLbConfig = (ClusterResolverConfig ) childBalancer .config ;
458- // Clusters are resolved recursively, later duplicates removed: [cluster3, cluster4, cluster2]
459- assertThat (childLbConfig .discoveryMechanism ).isEqualTo (
460- Arrays .asList (
461- DiscoveryMechanism .forEds (
462- cluster3 , EDS_SERVICE_NAME , null , 100L , null , Collections .emptyMap (), null ),
463- DiscoveryMechanism .forEds (
464- cluster4 , EDS_SERVICE_NAME , null , null , null , Collections .emptyMap (), null ),
465- DiscoveryMechanism .forLogicalDns (
466- cluster2 , "dns.example.com:1111" , null , null , null , Collections .emptyMap ())));
467- assertThat (
468- GracefulSwitchLoadBalancerAccessor .getChildProvider (childLbConfig .lbConfig ).getPolicyName ())
469- .isEqualTo ("ring_hash_experimental" ); // dominated by top-level cluster's config
430+ assertThat (childBalancer .name ).isEqualTo (PRIORITY_POLICY_NAME );
431+ PriorityLoadBalancerProvider .PriorityLbConfig childLbConfig = (PriorityLoadBalancerProvider .PriorityLbConfig ) childBalancer .config ;
432+ assertThat (childLbConfig .priorities ).hasSize (2 );
433+ assertThat (childLbConfig .priorities .get (0 )).isEqualTo (cluster1 );
434+ assertThat (childLbConfig .priorities .get (1 )).isEqualTo (cluster2 );
435+ assertThat (childLbConfig .childConfigs ).hasSize (2 );
436+ PriorityLoadBalancerProvider .PriorityLbConfig .PriorityChildConfig childConfig1 = childLbConfig .childConfigs .get (cluster2 );
437+ System .out .println (childConfig1 );
470438 }
471439
472440 @ Test
0 commit comments