Index: net/android/javatests/src/org/chromium/net/AndroidProxySelectorTest.java |
diff --git a/net/android/javatests/src/org/chromium/net/AndroidProxySelectorTest.java b/net/android/javatests/src/org/chromium/net/AndroidProxySelectorTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..83d4d2513bb0bd2b6d2db8fc64174a9b6373e660 |
--- /dev/null |
+++ b/net/android/javatests/src/org/chromium/net/AndroidProxySelectorTest.java |
@@ -0,0 +1,322 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+/** |
+ * Test suite for Android's default ProxySelector implementation. The purpose of these tests |
+ * is to check that the behaviour of the ProxySelector implementation matches what we have |
+ * implemented in net/proxy/proxy_config_service_android.cc. |
+ * |
+ * IMPORTANT: These test cases are generated from net/android/tools/proxy_test_cases.py, so if any |
willchan no longer on Chromium
2012/08/14 23:24:35
Is it just me or is the indentation off here? It l
aurimas (slooooooooow)
2012/08/14 23:42:21
I could not find any \t in here, only whitespace.
|
+ * of these tests fail, please be sure to edit that file and regenerate the test cases here and also |
+ * in net/proxy/proxy_config_service_android_unittests.cc if required. |
+ */ |
+ |
+package org.chromium.net; |
+ |
+import android.test.InstrumentationTestCase; |
+import android.test.suitebuilder.annotation.SmallTest; |
+ |
+import java.net.Proxy; |
+import java.net.ProxySelector; |
+import java.net.URI; |
+import java.net.URISyntaxException; |
+import java.util.List; |
+import java.util.Properties; |
+ |
+import org.chromium.base.test.Feature; |
+ |
+public class AndroidProxySelectorTest extends InstrumentationTestCase { |
+ Properties mProperties; |
+ |
+ public AndroidProxySelectorTest() { |
+ // Start with a clean slate in case there is a system proxy configured. |
+ mProperties = new Properties(); |
+ } |
+ |
+ @Override |
+ public void setUp() { |
+ System.setProperties(mProperties); |
+ } |
+ |
+ static String toString(Proxy proxy) { |
+ if (proxy == Proxy.NO_PROXY) |
+ return "DIRECT"; |
+ // java.net.Proxy only knows about http and socks proxies. |
+ Proxy.Type type = proxy.type(); |
+ switch (type) { |
+ case HTTP: return "PROXY " + proxy.address().toString(); |
+ case SOCKS: return "SOCKS5 " + proxy.address().toString(); |
+ case DIRECT: return "DIRECT"; |
+ default: |
+ // If a new proxy type is supported in future, add a case to match it. |
+ fail("Unknown proxy type" + type); |
+ return "unknown://"; |
+ } |
+ } |
+ |
+ static String toString(List<Proxy> proxies) { |
+ StringBuilder builder = new StringBuilder(); |
+ for (Proxy proxy : proxies) { |
+ if (builder.length() > 0) |
+ builder.append(';'); |
+ builder.append(toString(proxy)); |
+ } |
+ return builder.toString(); |
+ } |
+ |
+ static void checkMapping(String url, String expected) throws URISyntaxException { |
+ URI uri = new URI(url); |
+ List<Proxy> proxies = ProxySelector.getDefault().select(uri); |
+ assertEquals("Mapping", expected, toString(proxies)); |
+ } |
+ |
+ /** |
+ * Test direct mapping when no proxy defined. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testNoProxy() throws Exception { |
+ checkMapping("ftp://example.com/", "DIRECT"); |
+ checkMapping("http://example.com/", "DIRECT"); |
+ checkMapping("https://example.com/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * Test http.proxyHost and http.proxyPort works. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testHttpProxyHostAndPort() throws Exception { |
+ System.setProperty("http.proxyHost", "httpproxy.com"); |
+ System.setProperty("http.proxyPort", "8080"); |
+ checkMapping("ftp://example.com/", "DIRECT"); |
+ checkMapping("http://example.com/", "PROXY httpproxy.com:8080"); |
+ checkMapping("https://example.com/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * We should get the default port (80) for proxied hosts. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testHttpProxyHostOnly() throws Exception { |
+ System.setProperty("http.proxyHost", "httpproxy.com"); |
+ checkMapping("ftp://example.com/", "DIRECT"); |
+ checkMapping("http://example.com/", "PROXY httpproxy.com:80"); |
+ checkMapping("https://example.com/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * http.proxyPort only should not result in any hosts being proxied. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testHttpProxyPortOnly() throws Exception { |
+ System.setProperty("http.proxyPort", "8080"); |
+ checkMapping("ftp://example.com/", "DIRECT"); |
+ checkMapping("http://example.com/", "DIRECT"); |
+ checkMapping("https://example.com/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * Test that HTTP non proxy hosts are mapped correctly |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testHttpNonProxyHosts1() throws Exception { |
+ System.setProperty("http.nonProxyHosts", "slashdot.org"); |
+ System.setProperty("http.proxyHost", "httpproxy.com"); |
+ System.setProperty("http.proxyPort", "8080"); |
+ checkMapping("http://example.com/", "PROXY httpproxy.com:8080"); |
+ checkMapping("http://slashdot.org/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * Test that | pattern works. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testHttpNonProxyHosts2() throws Exception { |
+ System.setProperty("http.nonProxyHosts", "slashdot.org|freecode.net"); |
+ System.setProperty("http.proxyHost", "httpproxy.com"); |
+ System.setProperty("http.proxyPort", "8080"); |
+ checkMapping("http://example.com/", "PROXY httpproxy.com:8080"); |
+ checkMapping("http://freecode.net/", "DIRECT"); |
+ checkMapping("http://slashdot.org/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * Test that * pattern works. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testHttpNonProxyHosts3() throws Exception { |
+ System.setProperty("http.nonProxyHosts", "*example.com"); |
+ System.setProperty("http.proxyHost", "httpproxy.com"); |
+ System.setProperty("http.proxyPort", "8080"); |
+ checkMapping("http://example.com/", "DIRECT"); |
+ checkMapping("http://slashdot.org/", "PROXY httpproxy.com:8080"); |
+ checkMapping("http://www.example.com/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * Test that FTP non proxy hosts are mapped correctly |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testFtpNonProxyHosts() throws Exception { |
+ System.setProperty("ftp.nonProxyHosts", "slashdot.org"); |
+ System.setProperty("ftp.proxyHost", "httpproxy.com"); |
+ System.setProperty("ftp.proxyPort", "8080"); |
+ checkMapping("ftp://example.com/", "PROXY httpproxy.com:8080"); |
+ checkMapping("http://example.com/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * Test ftp.proxyHost and ftp.proxyPort works. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testFtpProxyHostAndPort() throws Exception { |
+ System.setProperty("ftp.proxyHost", "httpproxy.com"); |
+ System.setProperty("ftp.proxyPort", "8080"); |
+ checkMapping("ftp://example.com/", "PROXY httpproxy.com:8080"); |
+ checkMapping("http://example.com/", "DIRECT"); |
+ checkMapping("https://example.com/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * Test ftp.proxyHost and default port. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testFtpProxyHostOnly() throws Exception { |
+ System.setProperty("ftp.proxyHost", "httpproxy.com"); |
+ checkMapping("ftp://example.com/", "PROXY httpproxy.com:80"); |
+ checkMapping("http://example.com/", "DIRECT"); |
+ checkMapping("https://example.com/", "DIRECT"); |
+ } |
+ |
+ /** |
+ * Test https.proxyHost and https.proxyPort works. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testHttpsProxyHostAndPort() throws Exception { |
+ System.setProperty("https.proxyHost", "httpproxy.com"); |
+ System.setProperty("https.proxyPort", "8080"); |
+ checkMapping("ftp://example.com/", "DIRECT"); |
+ checkMapping("http://example.com/", "DIRECT"); |
+ checkMapping("https://example.com/", "PROXY httpproxy.com:8080"); |
+ } |
+ |
+ /** |
+ * Test https.proxyHost and default port. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testHttpsProxyHostOnly() throws Exception { |
+ System.setProperty("https.proxyHost", "httpproxy.com"); |
+ checkMapping("ftp://example.com/", "DIRECT"); |
+ checkMapping("http://example.com/", "DIRECT"); |
+ checkMapping("https://example.com/", "PROXY httpproxy.com:443"); |
+ } |
+ |
+ /** |
+ * Default http proxy is used if a scheme-specific one is not found. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testDefaultProxyExplictPort() throws Exception { |
+ System.setProperty("ftp.proxyHost", "httpproxy.com"); |
+ System.setProperty("ftp.proxyPort", "8080"); |
+ System.setProperty("proxyHost", "defaultproxy.com"); |
+ System.setProperty("proxyPort", "8080"); |
+ checkMapping("ftp://example.com/", "PROXY httpproxy.com:8080"); |
+ checkMapping("http://example.com/", "PROXY defaultproxy.com:8080"); |
+ checkMapping("https://example.com/", "PROXY defaultproxy.com:8080"); |
+ } |
+ |
+ /** |
+ * Check that the default proxy port is as expected. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testDefaultProxyDefaultPort() throws Exception { |
+ System.setProperty("proxyHost", "defaultproxy.com"); |
+ checkMapping("http://example.com/", "PROXY defaultproxy.com:80"); |
+ checkMapping("https://example.com/", "PROXY defaultproxy.com:443"); |
+ } |
+ |
+ /** |
+ * SOCKS proxy is used if scheme-specific one is not found. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testFallbackToSocks() throws Exception { |
+ System.setProperty("http.proxyHost", "defaultproxy.com"); |
+ System.setProperty("socksProxyHost", "socksproxy.com"); |
+ checkMapping("ftp://example.com", "SOCKS5 socksproxy.com:1080"); |
+ checkMapping("http://example.com/", "PROXY defaultproxy.com:80"); |
+ checkMapping("https://example.com/", "SOCKS5 socksproxy.com:1080"); |
+ } |
+ |
+ /** |
+ * SOCKS proxy port is used if specified |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testSocksExplicitPort() throws Exception { |
+ System.setProperty("socksProxyHost", "socksproxy.com"); |
+ System.setProperty("socksProxyPort", "9000"); |
+ checkMapping("http://example.com/", "SOCKS5 socksproxy.com:9000"); |
+ } |
+ |
+ /** |
+ * SOCKS proxy is ignored if default HTTP proxy defined. |
+ * |
+ * @throws Exception |
+ */ |
+ @SmallTest |
+ @Feature({"Android-WebView"}) |
+ public void testHttpProxySupercedesSocks() throws Exception { |
+ System.setProperty("proxyHost", "defaultproxy.com"); |
+ System.setProperty("socksProxyHost", "socksproxy.com"); |
+ System.setProperty("socksProxyPort", "9000"); |
+ checkMapping("http://example.com/", "PROXY defaultproxy.com:80"); |
+ } |
+} |
+ |