diff options
author | aurimas@chromium.org <aurimas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-15 23:10:18 +0000 |
---|---|---|
committer | aurimas@chromium.org <aurimas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-15 23:10:18 +0000 |
commit | d29ba6c19c1d4539428f1b9f50e5f781375af27a (patch) | |
tree | d8bdadfeca552cc0ec1dabe8a9cb228613ee535b /net | |
parent | d3a4b891147e7f516498b894e98f76d64a8d4428 (diff) | |
download | chromium_src-d29ba6c19c1d4539428f1b9f50e5f781375af27a.zip chromium_src-d29ba6c19c1d4539428f1b9f50e5f781375af27a.tar.gz chromium_src-d29ba6c19c1d4539428f1b9f50e5f781375af27a.tar.bz2 |
Adding AndroidProxySelectorTest to ContentShell
Adding AndroidProxySelectorTests to the ContentShellTest bundle. These tests
are used to check if the proxy settings are functioning correctly.
CRBUG=136719
Review URL: https://chromiumcodereview.appspot.com/10830287
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151779 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/android/javatests/src/org/chromium/net/AndroidProxySelectorTest.java | 322 | ||||
-rw-r--r-- | net/net.gyp | 17 |
2 files changed, 339 insertions, 0 deletions
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 0000000..83d4d25 --- /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 + * 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"); + } +} + diff --git a/net/net.gyp b/net/net.gyp index a75369d..165fe5a 100644 --- a/net/net.gyp +++ b/net/net.gyp @@ -1994,6 +1994,23 @@ ], 'includes': [ '../build/java.gypi' ], }, + { + 'target_name': 'net_javatests', + 'type': 'none', + 'variables': { + 'package_name': 'net_javatests', + 'java_in_dir': '../net/android/javatests', + }, + 'dependencies': [ + '../base/base.gyp:base_java', + '../base/base.gyp:base_java_test_support', + ], + 'export_dependent_settings': [ + '../base/base.gyp:base_java', + '../base/base.gyp:base_java_test_support', + ], + 'includes': [ '../build/java.gypi' ], + }, ], }], # Special target to wrap a gtest_target_type==shared_library |