1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test suite for Android's default ProxySelector implementation. The purpose of these tests 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * is to check that the behaviour of the ProxySelector implementation matches what we have 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * implemented in net/proxy/proxy_config_service_android.cc. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IMPORTANT: These test cases are generated from net/android/tools/proxy_test_cases.py, so if any 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of these tests fail, please be sure to edit that file and regenerate the test cases here and also 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in net/proxy/proxy_config_service_android_unittests.cc if required. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.net; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.test.InstrumentationTestCase; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.test.suitebuilder.annotation.SmallTest; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.base.test.util.Feature; 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.net.Proxy; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.net.ProxySelector; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.net.URI; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.net.URISyntaxException; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.List; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.Properties; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class AndroidProxySelectorTest extends InstrumentationTestCase { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Properties mProperties; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public AndroidProxySelectorTest() { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start with a clean slate in case there is a system proxy configured. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mProperties = new Properties(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setUp() { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperties(mProperties); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static String toString(Proxy proxy) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (proxy == Proxy.NO_PROXY) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "DIRECT"; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // java.net.Proxy only knows about http and socks proxies. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Proxy.Type type = proxy.type(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case HTTP: 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return "PROXY " + proxy.address().toString(); 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case SOCKS: 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return "SOCKS5 " + proxy.address().toString(); 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) case DIRECT: 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return "DIRECT"; 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) default: 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // If a new proxy type is supported in future, add a case to match it. 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) fail("Unknown proxy type" + type); 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return "unknown://"; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static String toString(List<Proxy> proxies) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringBuilder builder = new StringBuilder(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (Proxy proxy : proxies) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (builder.length() > 0) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) builder.append(';'); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) builder.append(toString(proxy)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return builder.toString(); 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void checkMapping(String url, String expected) throws URISyntaxException { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URI uri = new URI(url); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) List<Proxy> proxies = ProxySelector.getDefault().select(uri); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals("Mapping", expected, toString(proxies)); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test direct mapping when no proxy defined. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testNoProxy() throws Exception { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com/", "DIRECT"); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "DIRECT"); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("https://example.com/", "DIRECT"); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test http.proxyHost and http.proxyPort works. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testHttpProxyHostAndPort() throws Exception { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyHost", "httpproxy.com"); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyPort", "8080"); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com/", "DIRECT"); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "PROXY httpproxy.com:8080"); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("https://example.com/", "DIRECT"); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * We should get the default port (80) for proxied hosts. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testHttpProxyHostOnly() throws Exception { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyHost", "httpproxy.com"); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com/", "DIRECT"); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "PROXY httpproxy.com:80"); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("https://example.com/", "DIRECT"); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * http.proxyPort only should not result in any hosts being proxied. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testHttpProxyPortOnly() throws Exception { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyPort", "8080"); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com/", "DIRECT"); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "DIRECT"); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("https://example.com/", "DIRECT"); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test that HTTP non proxy hosts are mapped correctly 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testHttpNonProxyHosts1() throws Exception { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.nonProxyHosts", "slashdot.org"); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyHost", "httpproxy.com"); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyPort", "8080"); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "PROXY httpproxy.com:8080"); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://slashdot.org/", "DIRECT"); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test that | pattern works. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testHttpNonProxyHosts2() throws Exception { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.nonProxyHosts", "slashdot.org|freecode.net"); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyHost", "httpproxy.com"); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyPort", "8080"); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "PROXY httpproxy.com:8080"); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://freecode.net/", "DIRECT"); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://slashdot.org/", "DIRECT"); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test that * pattern works. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testHttpNonProxyHosts3() throws Exception { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.nonProxyHosts", "*example.com"); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyHost", "httpproxy.com"); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyPort", "8080"); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "DIRECT"); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://slashdot.org/", "PROXY httpproxy.com:8080"); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://www.example.com/", "DIRECT"); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test that FTP non proxy hosts are mapped correctly 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testFtpNonProxyHosts() throws Exception { 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("ftp.nonProxyHosts", "slashdot.org"); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("ftp.proxyHost", "httpproxy.com"); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("ftp.proxyPort", "8080"); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com/", "PROXY httpproxy.com:8080"); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "DIRECT"); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test ftp.proxyHost and ftp.proxyPort works. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testFtpProxyHostAndPort() throws Exception { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("ftp.proxyHost", "httpproxy.com"); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("ftp.proxyPort", "8080"); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com/", "PROXY httpproxy.com:8080"); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "DIRECT"); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("https://example.com/", "DIRECT"); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test ftp.proxyHost and default port. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testFtpProxyHostOnly() throws Exception { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("ftp.proxyHost", "httpproxy.com"); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com/", "PROXY httpproxy.com:80"); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "DIRECT"); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("https://example.com/", "DIRECT"); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Test https.proxyHost and https.proxyPort works. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testHttpsProxyHostAndPort() throws Exception { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("https.proxyHost", "httpproxy.com"); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("https.proxyPort", "8080"); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com/", "DIRECT"); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "DIRECT"); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("https://example.com/", "PROXY httpproxy.com:8080"); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Default http proxy is used if a scheme-specific one is not found. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testDefaultProxyExplictPort() throws Exception { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("ftp.proxyHost", "httpproxy.com"); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("ftp.proxyPort", "8080"); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("proxyHost", "defaultproxy.com"); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("proxyPort", "8080"); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com/", "PROXY httpproxy.com:8080"); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "PROXY defaultproxy.com:8080"); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("https://example.com/", "PROXY defaultproxy.com:8080"); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SOCKS proxy is used if scheme-specific one is not found. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testFallbackToSocks() throws Exception { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("http.proxyHost", "defaultproxy.com"); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("socksProxyHost", "socksproxy.com"); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("ftp://example.com", "SOCKS5 socksproxy.com:1080"); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "PROXY defaultproxy.com:80"); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("https://example.com/", "SOCKS5 socksproxy.com:1080"); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SOCKS proxy port is used if specified 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testSocksExplicitPort() throws Exception { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("socksProxyHost", "socksproxy.com"); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("socksProxyPort", "9000"); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "SOCKS5 socksproxy.com:9000"); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SOCKS proxy is ignored if default HTTP proxy defined. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @throws Exception 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"AndroidWebView"}) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void testHttpProxySupercedesSocks() throws Exception { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("proxyHost", "defaultproxy.com"); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("socksProxyHost", "socksproxy.com"); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) System.setProperty("socksProxyPort", "9000"); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkMapping("http://example.com/", "PROXY defaultproxy.com:80"); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 299