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 ;
@@ -332,7 +332,10 @@ public void testOverrideBootstrap() throws Exception {
332332
333333 @ Test
334334 public void start_passesChannelConfiguratorToClientPoolFactory () throws Exception {
335- ChannelConfigurator configurer = builder -> { };
335+ final boolean [] configuratorInvoked = new boolean [1 ];
336+ ChannelConfigurator configurer = builder -> {
337+ configuratorInvoked [0 ] = true ;
338+ };
336339 XdsClientPoolFactory mockPoolFactory = mock (XdsClientPoolFactory .class );
337340 @ SuppressWarnings ("unchecked" )
338341 ObjectPool <XdsClient > mockPool = mock (ObjectPool .class );
@@ -346,8 +349,43 @@ public void start_passesChannelConfiguratorToClientPoolFactory() throws Exceptio
346349
347350 Future <?> unused = startServerAsync ();
348351
352+ ArgumentCaptor <ChannelConfigurator > configuratorCaptor =
353+ ArgumentCaptor .forClass (ChannelConfigurator .class );
349354 verify (mockPoolFactory ).getOrCreate (
350- any (), any (), any (), eq (configurer ));
355+ any (), any (), any (), configuratorCaptor .capture ());
356+
357+ io .grpc .ManagedChannelBuilder <?> testBuilder = mock (io .grpc .ManagedChannelBuilder .class );
358+ configuratorCaptor .getValue ().configureChannelBuilder (testBuilder );
359+ assertThat (configuratorInvoked [0 ]).isTrue ();
360+ }
361+
362+ @ Test
363+ public void childChannelConfigurator_appendsConfigurators () throws Exception {
364+ ChannelConfigurator configurer1 = builder -> { };
365+ ChannelConfigurator configurer2 = builder -> { };
366+
367+ XdsClientPoolFactory mockPoolFactory = mock (XdsClientPoolFactory .class );
368+ @ SuppressWarnings ("unchecked" )
369+ ObjectPool <XdsClient > mockPool = mock (ObjectPool .class );
370+ when (mockPool .getObject ()).thenReturn (xdsClient );
371+ when (mockPoolFactory .getOrCreate (any (), any (), any (), any ())).thenReturn (mockPool );
372+
373+ buildBuilder (null );
374+ builder .childChannelConfigurator (configurer1 );
375+ builder .childChannelConfigurator (configurer2 );
376+ builder .xdsClientPoolFactory (mockPoolFactory );
377+ xdsServer = cleanupRule .register ((XdsServerWrapper ) builder .build ());
378+
379+ Future <?> unused = startServerAsync ();
380+
381+ // The captured configurator should be a composite of configurer1 and configurer2
382+ ArgumentCaptor <ChannelConfigurator > captor = ArgumentCaptor .forClass (ChannelConfigurator .class );
383+ verify (mockPoolFactory ).getOrCreate (
384+ any (), any (), any (), captor .capture ());
385+ ChannelConfigurator captured = captor .getValue ();
386+
387+ assertNotSame (configurer1 , captured );
388+ assertNotSame (configurer2 , captured );
351389 }
352390
353391 @ Test
0 commit comments