diff --git a/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java b/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java index 58c7803346f..7995acf05cf 100644 --- a/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java +++ b/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java @@ -207,6 +207,10 @@ private ProxiedSocketAddress detectProxy(InetSocketAddress targetAddr) throws IO } List proxies = proxySelector.select(uri); + if (proxies == null || proxies.isEmpty()) { + log.log(Level.FINE, "No proxies returned, proceeding without proxy"); + return null; + } if (proxies.size() > 1) { log.warning("More than 1 proxy detected, gRPC will select the first one"); } diff --git a/core/src/test/java/io/grpc/internal/ProxyDetectorImplTest.java b/core/src/test/java/io/grpc/internal/ProxyDetectorImplTest.java index 771050f119d..8f33c947a15 100644 --- a/core/src/test/java/io/grpc/internal/ProxyDetectorImplTest.java +++ b/core/src/test/java/io/grpc/internal/ProxyDetectorImplTest.java @@ -40,6 +40,7 @@ import java.net.ProxySelector; import java.net.SocketAddress; import java.net.URI; +import java.util.Collections; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -191,4 +192,18 @@ public ProxySelector get() { authenticator); assertNull(proxyDetector.proxyFor(destination)); } + + @Test + public void returnNullWhenProxySelectorReturnsEmptyList() throws Exception { + when(proxySelector.select(any(URI.class))).thenReturn(Collections.emptyList()); + + assertNull(proxyDetector.proxyFor(destination)); + } + + @Test + public void returnNullWhenProxySelectorReturnsNullList() throws Exception { + when(proxySelector.select(any(URI.class))).thenReturn(null); + + assertNull(proxyDetector.proxyFor(destination)); + } }