4343import io .grpc .InternalConfiguratorRegistry ;
4444import io .grpc .InternalFeatureFlags ;
4545import io .grpc .InternalManagedChannelBuilder .InternalInterceptorFactory ;
46+ import io .grpc .LoadBalancer ;
47+ import io .grpc .LoadBalancerProvider ;
48+ import io .grpc .LoadBalancerRegistry ;
4649import io .grpc .ManagedChannel ;
4750import io .grpc .ManagedChannelBuilder ;
4851import io .grpc .MethodDescriptor ;
6770import java .util .concurrent .Executor ;
6871import java .util .concurrent .TimeUnit ;
6972import java .util .regex .Pattern ;
73+ import org .junit .After ;
7074import org .junit .Before ;
7175import org .junit .Rule ;
7276import org .junit .Test ;
@@ -85,6 +89,7 @@ public class ManagedChannelImplBuilderTest {
8589 private static final String DUMMY_TARGET = "fake-target" ;
8690 private static final String DUMMY_AUTHORITY_VALID = "valid:1234" ;
8791 private static final String DUMMY_AUTHORITY_INVALID = "[ : : 1]" ;
92+ private static final String FAKE_POLICY_NAME = "magic_balancer" ;
8893 private static final ClientInterceptor DUMMY_USER_INTERCEPTOR =
8994 new ClientInterceptor () {
9095 @ Override
@@ -101,6 +106,29 @@ public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
101106 return next .newCall (method , callOptions );
102107 }
103108 };
109+
110+ private final LoadBalancerProvider fakeProvider =
111+ new LoadBalancerProvider () {
112+ @ Override
113+ public LoadBalancer newLoadBalancer (LoadBalancer .Helper helper ) {
114+ return mock (LoadBalancer .class );
115+ }
116+
117+ @ Override
118+ public boolean isAvailable () {
119+ return true ;
120+ }
121+
122+ @ Override
123+ public int getPriority () {
124+ return 5 ;
125+ }
126+
127+ @ Override
128+ public String getPolicyName () {
129+ return FAKE_POLICY_NAME ;
130+ }
131+ };
104132
105133 @ Parameters (name = "enableRfc3986UrisParam={0}" )
106134 public static Iterable <Object []> data () {
@@ -141,6 +169,13 @@ public void setUp() throws Exception {
141169 DUMMY_TARGET ,
142170 new UnsupportedClientTransportFactoryBuilder (),
143171 new FixedPortProvider (DUMMY_PORT ));
172+
173+ LoadBalancerRegistry .getDefaultRegistry ().register (fakeProvider );
174+ }
175+
176+ @ After
177+ public void tearDown () {
178+ LoadBalancerRegistry .getDefaultRegistry ().deregister (fakeProvider );
144179 }
145180
146181 /** Ensure getDefaultPort() returns default port when no custom implementation provided. */
@@ -249,6 +284,14 @@ public void nameResolverFactory_notAllowedWithDirectAddress() {
249284 directAddressBuilder .nameResolverFactory (mock (NameResolver .Factory .class ));
250285 }
251286
287+ @ Test
288+ public void defaultLoadBalancingPolicy_unregisteredPolicy () {
289+ assertThrows (
290+ IllegalArgumentException .class ,
291+ () -> builder .defaultLoadBalancingPolicy ("unregistered_balancer" )
292+ );
293+ }
294+
252295 @ Test
253296 public void defaultLoadBalancingPolicy_default () {
254297 assertEquals ("pick_first" , builder .defaultLbPolicy );
0 commit comments