2222import static org .mockito .Mockito .verify ;
2323
2424import com .google .common .base .Objects ;
25+ import io .grpc .ChannelConfigurator ;
2526import io .grpc .NameResolver .ConfigOrError ;
2627import io .grpc .NameResolver .Listener2 ;
2728import io .grpc .NameResolver .ResolutionResult ;
@@ -72,6 +73,8 @@ public class NameResolverTest {
7273 private final int customArgValue = 42 ;
7374 @ Mock NameResolver .Listener mockListener ;
7475
76+ private final ChannelConfigurator channelConfigurator = builder -> { };
77+
7578 @ Test
7679 public void args () {
7780 NameResolver .Args args = createArgs ();
@@ -84,6 +87,7 @@ public void args() {
8487 assertThat (args .getOffloadExecutor ()).isSameInstanceAs (executor );
8588 assertThat (args .getOverrideAuthority ()).isSameInstanceAs (overrideAuthority );
8689 assertThat (args .getMetricRecorder ()).isSameInstanceAs (metricRecorder );
90+ assertThat (args .getChildChannelConfigurator ()).isSameInstanceAs (channelConfigurator );
8791 assertThat (args .getArg (FOO_ARG_KEY )).isEqualTo (customArgValue );
8892 assertThat (args .getArg (BAR_ARG_KEY )).isNull ();
8993
@@ -97,6 +101,7 @@ public void args() {
97101 assertThat (args2 .getOffloadExecutor ()).isSameInstanceAs (executor );
98102 assertThat (args2 .getOverrideAuthority ()).isSameInstanceAs (overrideAuthority );
99103 assertThat (args .getMetricRecorder ()).isSameInstanceAs (metricRecorder );
104+ assertThat (args2 .getChildChannelConfigurator ()).isSameInstanceAs (channelConfigurator );
100105 assertThat (args .getArg (FOO_ARG_KEY )).isEqualTo (customArgValue );
101106 assertThat (args .getArg (BAR_ARG_KEY )).isNull ();
102107
@@ -115,10 +120,47 @@ private NameResolver.Args createArgs() {
115120 .setOffloadExecutor (executor )
116121 .setOverrideAuthority (overrideAuthority )
117122 .setMetricRecorder (metricRecorder )
123+ .setChildChannelConfigurator (channelConfigurator )
118124 .setArg (FOO_ARG_KEY , customArgValue )
119125 .build ();
120126 }
121127
128+ @ Test
129+ public void args_childChannelConfigurator () {
130+ final ManagedChannelBuilder <?>[] capturedBuilder = new ManagedChannelBuilder <?>[1 ];
131+ ChannelConfigurator channelConfigurator = new ChannelConfigurator () {
132+ @ Override
133+ public void configureChannelBuilder (ManagedChannelBuilder <?> builder ) {
134+ capturedBuilder [0 ] = builder ;
135+ }
136+ };
137+
138+ SynchronizationContext realSyncContext = new SynchronizationContext (
139+ new Thread .UncaughtExceptionHandler () {
140+ @ Override
141+ public void uncaughtException (Thread t , Throwable e ) {
142+ throw new AssertionError (e );
143+ }
144+ });
145+
146+ NameResolver .Args args = NameResolver .Args .newBuilder ()
147+ .setDefaultPort (8080 )
148+ .setProxyDetector (mock (ProxyDetector .class ))
149+ .setSynchronizationContext (realSyncContext )
150+ .setServiceConfigParser (mock (NameResolver .ServiceConfigParser .class ))
151+ .setChannelLogger (mock (ChannelLogger .class ))
152+ .setChildChannelConfigurator (channelConfigurator )
153+ .build ();
154+
155+ ChannelConfigurator configurator = args .getChildChannelConfigurator ();
156+ assertThat (configurator ).isSameInstanceAs (channelConfigurator );
157+
158+ // Validate configurator accepts builders
159+ ManagedChannelBuilder <?> mockBuilder = mock (ManagedChannelBuilder .class );
160+ configurator .configureChannelBuilder (mockBuilder );
161+ assertThat (capturedBuilder [0 ]).isSameInstanceAs (mockBuilder );
162+ }
163+
122164 @ Test
123165 @ SuppressWarnings ("deprecation" )
124166 public void startOnOldListener_wrapperListener2UsedToStart () {
0 commit comments