13b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson/*
23b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson * Copyright (C) 2010 The Android Open Source Project
33b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson *
43b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
53b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson * you may not use this file except in compliance with the License.
63b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson * You may obtain a copy of the License at
73b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson *
83b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
93b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson *
103b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson * Unless required by applicable law or agreed to in writing, software
113b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
123b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson * See the License for the specific language governing permissions and
143b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson * limitations under the License.
153b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson */
163b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
173b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilsonpackage libcore.java.net;
183b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
193b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilsonimport static java.net.InetSocketAddress.createUnresolved;
203b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilsonimport java.net.Proxy;
213b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilsonimport java.net.ProxySelector;
223b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilsonimport java.net.URI;
233b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilsonimport java.net.URISyntaxException;
243b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilsonimport java.util.Arrays;
253b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilsonimport junit.framework.TestCase;
263b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
273b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilsonpublic final class ProxySelectorTest extends TestCase {
283b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
293b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    private ProxySelector proxySelector;
303b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
313b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    private URI httpUri;
323b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    private URI ftpUri;
333b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    private URI httpsUri;
343b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    private URI socketUri;
353b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    private URI otherUri;
363b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
373b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    protected void setUp() throws Exception {
383b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        super.setUp();
393b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        proxySelector = ProxySelector.getDefault();
403b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        httpUri = new URI("http://android.com");
413b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        ftpUri = new URI("ftp://android.com");
423b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        httpsUri = new URI("https://android.com");
433b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        socketUri = new URI("socket://android.com");
443b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        otherUri = new URI("other://android.com");
453b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
463b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
473b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    @Override protected void tearDown() throws Exception {
483b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("ftp.proxyHost");
493b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("ftp.proxyPort");
503b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("ftp.nonProxyHosts");
513b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("http.proxyHost");
523b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("http.proxyPort");
533b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("http.nonProxyHosts");
543b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("https.proxyHost");
553b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("https.proxyPort");
563b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("https.nonProxyHosts");
573b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("other.proxyHost");
583b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("other.proxyPort");
593b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("socket.proxyHost");
603b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("socket.proxyPort");
613b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("proxyHost");
623b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.clearProperty("proxyPort");
633b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
643b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
653b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testNoProxySystemProperty() throws URISyntaxException {
663b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(ftpUri));
673b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpUri));
683b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpsUri));
693b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri));
703b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri));
713b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
723b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
733b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testProxyHostOnly() throws URISyntaxException {
743b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("ftp.proxyHost", "a");
753b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.proxyHost", "b");
763b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("https.proxyHost", "c");
773b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("other.proxyHost", "d");
783b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("socket.proxyHost", "d");
793b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))),
803b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(ftpUri));
813b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("b", 80))),
823b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpUri));
833b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("c", 443))),
843b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpsUri));
853b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri));
863b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri));
873b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
883b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
893b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testProxyHostPort() throws URISyntaxException {
903b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("ftp.proxyHost", "a");
913b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("ftp.proxyPort", "1001");
923b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.proxyHost", "b");
933b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.proxyPort", "1002");
943b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("https.proxyHost", "c");
953b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("https.proxyPort", "1003");
963b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("other.proxyHost", "d");
973b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("other.proxyPort", "1004");
983b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("socket.proxyHost", "e");
993b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("socket.proxyPort", "1005");
1003b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 1001))),
1013b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(ftpUri));
1023b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("b", 1002))),
1033b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpUri));
1043b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("c", 1003))),
1053b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpsUri));
1063b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri));
1073b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri));
1083b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
1093b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
1103b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testProxyPortOnly() throws URISyntaxException {
1113b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("ftp.proxyPort", "1001");
1123b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.proxyPort", "1002");
1133b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("https.proxyPort", "1003");
1143b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("other.proxyPort", "1004");
1153b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("socket.proxyPort", "1005");
1163b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(ftpUri));
1173b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpUri));
1183b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpsUri));
1193b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri));
1203b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri));
1213b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
1223b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
1233b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testHttpsDoesNotUseHttpProperties() throws URISyntaxException {
1243b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.proxyHost", "a");
1253b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.proxyPort", "1001");
1263b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpsUri));
1273b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
1283b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
1293b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testProxyHost() throws URISyntaxException {
1303b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("proxyHost", "a");
1313b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))),
1323b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(ftpUri));
1333b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))),
1343b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpUri));
1353b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 443))),
1363b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpsUri));
1373b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri));
1383b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri));
1393b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
1403b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
1413b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testHttpProxyHostPreferredOverProxyHost() throws URISyntaxException {
1423b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.proxyHost", "a");
1433b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("proxyHost", "b");
1443b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))),
1453b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpUri));
1463b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
1473b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
1483b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testSocksProxyHost() throws URISyntaxException {
1493b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("socksProxyHost", "a");
1503b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))),
1513b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(ftpUri));
1523b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))),
1533b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpUri));
1543b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))),
1553b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpsUri));
1563b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))),
1573b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(socketUri));
1583b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri));
1593b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
1603b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
1613b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testSocksProxyHostAndPort() throws URISyntaxException {
1623b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("socksProxyHost", "a");
1633b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("socksProxyPort", "1001");
1643b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))),
1653b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(ftpUri));
1663b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))),
1673b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpUri));
1683b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))),
1693b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(httpsUri));
1703b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))),
1713b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(socketUri));
1723b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri));
1733b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
1743b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
1753b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testNonProxyHostsFtp() throws URISyntaxException {
1763b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("ftp.nonProxyHosts", "*.com");
1773b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("ftp.proxyHost", "a");
1783b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))),
1793b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(new URI("ftp://foo.net")));
1803b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY),
1813b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(new URI("ftp://foo.com")));
1823b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
1833b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
1843b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testNonProxyHostsHttp() throws URISyntaxException {
1853b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.nonProxyHosts", "*.com");
1863b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.proxyHost", "a");
1873b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))),
1883b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(new URI("http://foo.net")));
1893b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY),
1903b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(new URI("http://foo.com")));
1913b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
1923b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
1933b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testNonProxyHostsHttps() throws URISyntaxException {
1943b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("https.nonProxyHosts", "*.com");
1953b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("https.proxyHost", "a");
1963b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 443))),
1973b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(new URI("https://foo.net")));
1983b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(Proxy.NO_PROXY),
1993b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(new URI("https://foo.com")));
2003b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
2013b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson
2023b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    public void testSchemeCaseSensitive() throws URISyntaxException {
2033b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        System.setProperty("http.proxyHost", "a");
2043b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson        assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))),
2053b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson                proxySelector.select(new URI("HTTP://foo.net")));
2063b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson    }
2073b0348d1081a4645aa38da97ee299fadc040c1b4Jesse Wilson}
208