1 /* 2 * Copyright 2020 The gRPC Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package io.grpc.xds; 18 19 import static com.google.common.truth.Truth.assertThat; 20 import static org.mockito.Mockito.mock; 21 import static org.mockito.Mockito.when; 22 23 import io.grpc.ChannelLogger; 24 import io.grpc.LoadBalancer; 25 import io.grpc.LoadBalancer.Helper; 26 import io.grpc.LoadBalancerProvider; 27 import io.grpc.LoadBalancerRegistry; 28 import io.grpc.NameResolver; 29 import io.grpc.NameResolver.ServiceConfigParser; 30 import io.grpc.NameResolverRegistry; 31 import io.grpc.SynchronizationContext; 32 import io.grpc.internal.FakeClock; 33 import io.grpc.internal.GrpcUtil; 34 import org.junit.Test; 35 import org.junit.runner.RunWith; 36 import org.junit.runners.JUnit4; 37 38 /** Tests for {@link ClusterResolverLoadBalancerProvider}. */ 39 @RunWith(JUnit4.class) 40 public class ClusterResolverLoadBalancerProviderTest { 41 42 @Test provided()43 public void provided() { 44 LoadBalancerProvider provider = 45 LoadBalancerRegistry.getDefaultRegistry().getProvider( 46 XdsLbPolicies.CLUSTER_RESOLVER_POLICY_NAME); 47 assertThat(provider).isInstanceOf(ClusterResolverLoadBalancerProvider.class); 48 } 49 50 @Test providesLoadBalancer()51 public void providesLoadBalancer() { 52 Helper helper = mock(Helper.class); 53 54 SynchronizationContext syncContext = new SynchronizationContext( 55 new Thread.UncaughtExceptionHandler() { 56 @Override 57 public void uncaughtException(Thread t, Throwable e) { 58 throw new AssertionError(e); 59 } 60 }); 61 FakeClock fakeClock = new FakeClock(); 62 NameResolverRegistry nsRegistry = new NameResolverRegistry(); 63 NameResolver.Args args = NameResolver.Args.newBuilder() 64 .setDefaultPort(8080) 65 .setProxyDetector(GrpcUtil.NOOP_PROXY_DETECTOR) 66 .setSynchronizationContext(syncContext) 67 .setServiceConfigParser(mock(ServiceConfigParser.class)) 68 .setChannelLogger(mock(ChannelLogger.class)) 69 .build(); 70 when(helper.getNameResolverRegistry()).thenReturn(nsRegistry); 71 when(helper.getNameResolverArgs()).thenReturn(args); 72 when(helper.getSynchronizationContext()).thenReturn(syncContext); 73 when(helper.getScheduledExecutorService()).thenReturn(fakeClock.getScheduledExecutorService()); 74 when(helper.getAuthority()).thenReturn("api.google.com"); 75 LoadBalancerProvider provider = new ClusterResolverLoadBalancerProvider(); 76 LoadBalancer loadBalancer = provider.newLoadBalancer(helper); 77 assertThat(loadBalancer).isInstanceOf(ClusterResolverLoadBalancer.class); 78 } 79 } 80