/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package libcore.java.net; import static java.net.InetSocketAddress.createUnresolved; import java.net.Proxy; import java.net.ProxySelector; import java.net.URI; import java.net.URISyntaxException; import java.util.Arrays; import junit.framework.TestCase; public final class ProxySelectorTest extends TestCase { private ProxySelector proxySelector; private URI httpUri; private URI ftpUri; private URI httpsUri; private URI socketUri; private URI otherUri; protected void setUp() throws Exception { super.setUp(); proxySelector = ProxySelector.getDefault(); httpUri = new URI("http://android.com"); ftpUri = new URI("ftp://android.com"); httpsUri = new URI("https://android.com"); socketUri = new URI("socket://android.com"); otherUri = new URI("other://android.com"); } @Override protected void tearDown() throws Exception { System.clearProperty("ftp.proxyHost"); System.clearProperty("ftp.proxyPort"); System.clearProperty("ftp.nonProxyHosts"); System.clearProperty("http.proxyHost"); System.clearProperty("http.proxyPort"); System.clearProperty("http.nonProxyHosts"); System.clearProperty("https.proxyHost"); System.clearProperty("https.proxyPort"); System.clearProperty("https.nonProxyHosts"); System.clearProperty("other.proxyHost"); System.clearProperty("other.proxyPort"); System.clearProperty("socket.proxyHost"); System.clearProperty("socket.proxyPort"); System.clearProperty("proxyHost"); System.clearProperty("proxyPort"); } public void testNoProxySystemProperty() throws URISyntaxException { assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(ftpUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpsUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); } public void testProxyHostOnly() throws URISyntaxException { System.setProperty("ftp.proxyHost", "a"); System.setProperty("http.proxyHost", "b"); System.setProperty("https.proxyHost", "c"); System.setProperty("other.proxyHost", "d"); System.setProperty("socket.proxyHost", "d"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), proxySelector.select(ftpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("b", 80))), proxySelector.select(httpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("c", 443))), proxySelector.select(httpsUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); } public void testProxyHostPort() throws URISyntaxException { System.setProperty("ftp.proxyHost", "a"); System.setProperty("ftp.proxyPort", "1001"); System.setProperty("http.proxyHost", "b"); System.setProperty("http.proxyPort", "1002"); System.setProperty("https.proxyHost", "c"); System.setProperty("https.proxyPort", "1003"); System.setProperty("other.proxyHost", "d"); System.setProperty("other.proxyPort", "1004"); System.setProperty("socket.proxyHost", "e"); System.setProperty("socket.proxyPort", "1005"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 1001))), proxySelector.select(ftpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("b", 1002))), proxySelector.select(httpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("c", 1003))), proxySelector.select(httpsUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); } public void testProxyPortOnly() throws URISyntaxException { System.setProperty("ftp.proxyPort", "1001"); System.setProperty("http.proxyPort", "1002"); System.setProperty("https.proxyPort", "1003"); System.setProperty("other.proxyPort", "1004"); System.setProperty("socket.proxyPort", "1005"); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(ftpUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpsUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); } public void testHttpsDoesNotUseHttpProperties() throws URISyntaxException { System.setProperty("http.proxyHost", "a"); System.setProperty("http.proxyPort", "1001"); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpsUri)); } public void testProxyHost() throws URISyntaxException { System.setProperty("proxyHost", "a"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), proxySelector.select(ftpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), proxySelector.select(httpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 443))), proxySelector.select(httpsUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); } public void testHttpProxyHostPreferredOverProxyHost() throws URISyntaxException { System.setProperty("http.proxyHost", "a"); System.setProperty("proxyHost", "b"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), proxySelector.select(httpUri)); } public void testSocksProxyHost() throws URISyntaxException { System.setProperty("socksProxyHost", "a"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))), proxySelector.select(ftpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))), proxySelector.select(httpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))), proxySelector.select(httpsUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))), proxySelector.select(socketUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); } public void testSocksProxyHostAndPort() throws URISyntaxException { System.setProperty("socksProxyHost", "a"); System.setProperty("socksProxyPort", "1001"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))), proxySelector.select(ftpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))), proxySelector.select(httpUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))), proxySelector.select(httpsUri)); assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))), proxySelector.select(socketUri)); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); } public void testNonProxyHostsFtp() throws URISyntaxException { System.setProperty("ftp.nonProxyHosts", "*.com"); System.setProperty("ftp.proxyHost", "a"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), proxySelector.select(new URI("ftp://foo.net"))); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(new URI("ftp://foo.com"))); } public void testNonProxyHostsHttp() throws URISyntaxException { System.setProperty("http.nonProxyHosts", "*.com"); System.setProperty("http.proxyHost", "a"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), proxySelector.select(new URI("http://foo.net"))); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(new URI("http://foo.com"))); } public void testNonProxyHostsHttps() throws URISyntaxException { System.setProperty("https.nonProxyHosts", "*.com"); System.setProperty("https.proxyHost", "a"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 443))), proxySelector.select(new URI("https://foo.net"))); assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(new URI("https://foo.com"))); } public void testSchemeCaseSensitive() throws URISyntaxException { System.setProperty("http.proxyHost", "a"); assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), proxySelector.select(new URI("HTTP://foo.net"))); } }