xds: add env var protection for google-c2p resolver (#7918)

This commit is contained in:
Chengyuan Zhang 2021-02-25 17:55:05 -08:00 committed by GitHub
parent 9b803f338b
commit 7a92de619b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 7 deletions

View File

@ -29,6 +29,8 @@ import java.net.URI;
@Internal
public final class GoogleCloudToProdNameResolverProvider extends NameResolverProvider {
private static final boolean enableC2PResolver =
Boolean.parseBoolean(System.getenv("GRPC_EXPERIMENTAL_GOOGLE_C2P_RESOLVER"));
private static final String SCHEME = "google-c2p";
@Override
@ -48,7 +50,10 @@ public final class GoogleCloudToProdNameResolverProvider extends NameResolverPro
@Override
protected boolean isAvailable() {
return true;
if (enableC2PResolver) {
return true;
}
return false;
}
@Override

View File

@ -17,12 +17,14 @@
package io.grpc.xds;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import io.grpc.ChannelLogger;
import io.grpc.InternalServiceProviders;
import io.grpc.NameResolver;
import io.grpc.NameResolver.ServiceConfigParser;
import io.grpc.NameResolverRegistry;
import io.grpc.NameResolverProvider;
import io.grpc.SynchronizationContext;
import io.grpc.internal.FakeClock;
import io.grpc.internal.GrpcUtil;
@ -54,12 +56,24 @@ public class GoogleCloudToProdNameResolverProviderTest {
.setChannelLogger(mock(ChannelLogger.class))
.build();
private final NameResolverRegistry nsRegistry = NameResolverRegistry.getDefaultRegistry();
private GoogleCloudToProdNameResolverProvider provider =
new GoogleCloudToProdNameResolverProvider();
@Test
public void provided() {
NameResolver resolver = nsRegistry.asFactory().newNameResolver(
URI.create("google-c2p:///foo.googleapis.com"), args);
assertThat(resolver).isInstanceOf(GoogleCloudToProdNameResolver.class);
for (NameResolverProvider current
: InternalServiceProviders.getCandidatesViaServiceLoader(
NameResolverProvider.class, getClass().getClassLoader())) {
if (current instanceof GoogleCloudToProdNameResolverProvider) {
return;
}
}
fail("GoogleCloudToProdNameResolverProvider not registered");
}
@Test
public void newNameResolver() {
assertThat(provider.newNameResolver(URI.create("google-c2p:///foo.googleapis.com"), args))
.isInstanceOf(GoogleCloudToProdNameResolver.class);
}
}