1818
1919import static com .google .common .truth .Truth .assertThat ;
2020import static io .grpc .xds .XdsServerTestHelper .buildTestListener ;
21+ import static org .junit .Assert .assertNotSame ;
2122import static org .junit .Assert .fail ;
2223import static org .mockito .Mockito .any ;
23- import static org .mockito .Mockito .eq ;
2424import static org .mockito .Mockito .mock ;
2525import static org .mockito .Mockito .never ;
2626import static org .mockito .Mockito .reset ;
3333import io .grpc .BindableService ;
3434import io .grpc .ChannelConfigurator ;
3535import io .grpc .InsecureServerCredentials ;
36+ import io .grpc .ManagedChannelBuilder ;
3637import io .grpc .ServerServiceDefinition ;
3738import io .grpc .Status ;
3839import io .grpc .StatusException ;
@@ -406,7 +407,10 @@ public void testOverrideBootstrap() throws Exception {
406407
407408 @ Test
408409 public void start_passesChannelConfiguratorToClientPoolFactory () throws Exception {
409- ChannelConfigurator configurer = builder -> { };
410+ final boolean [] configuratorInvoked = new boolean [1 ];
411+ ChannelConfigurator configurer = builder -> {
412+ configuratorInvoked [0 ] = true ;
413+ };
410414 XdsClientPoolFactory mockPoolFactory = mock (XdsClientPoolFactory .class );
411415 @ SuppressWarnings ("unchecked" )
412416 ObjectPool <XdsClient > mockPool = mock (ObjectPool .class );
@@ -420,8 +424,43 @@ public void start_passesChannelConfiguratorToClientPoolFactory() throws Exceptio
420424
421425 Future <?> unused = startServerAsync ();
422426
427+ ArgumentCaptor <ChannelConfigurator > configuratorCaptor =
428+ ArgumentCaptor .forClass (ChannelConfigurator .class );
423429 verify (mockPoolFactory ).getOrCreate (
424- any (), any (), any (), eq (configurer ));
430+ any (), any (), any (), configuratorCaptor .capture ());
431+
432+ ManagedChannelBuilder <?> testBuilder = mock (ManagedChannelBuilder .class );
433+ configuratorCaptor .getValue ().configureChannelBuilder (testBuilder );
434+ assertThat (configuratorInvoked [0 ]).isTrue ();
435+ }
436+
437+ @ Test
438+ public void childChannelConfigurator_appendsConfigurators () throws Exception {
439+ ChannelConfigurator configurer1 = builder -> { };
440+ ChannelConfigurator configurer2 = builder -> { };
441+
442+ XdsClientPoolFactory mockPoolFactory = mock (XdsClientPoolFactory .class );
443+ @ SuppressWarnings ("unchecked" )
444+ ObjectPool <XdsClient > mockPool = mock (ObjectPool .class );
445+ when (mockPool .getObject ()).thenReturn (xdsClient );
446+ when (mockPoolFactory .getOrCreate (any (), any (), any (), any ())).thenReturn (mockPool );
447+
448+ buildBuilder (null );
449+ builder .childChannelConfigurator (configurer1 );
450+ builder .childChannelConfigurator (configurer2 );
451+ builder .xdsClientPoolFactory (mockPoolFactory );
452+ xdsServer = cleanupRule .register ((XdsServerWrapper ) builder .build ());
453+
454+ Future <?> unused = startServerAsync ();
455+
456+ // The captured configurator should be a composite of configurer1 and configurer2
457+ ArgumentCaptor <ChannelConfigurator > captor = ArgumentCaptor .forClass (ChannelConfigurator .class );
458+ verify (mockPoolFactory ).getOrCreate (
459+ any (), any (), any (), captor .capture ());
460+ ChannelConfigurator captured = captor .getValue ();
461+
462+ assertNotSame (configurer1 , captured );
463+ assertNotSame (configurer2 , captured );
425464 }
426465
427466 @ Test
0 commit comments