Commit d29ba6c1 authored by aurimas@chromium.org's avatar aurimas@chromium.org

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
parent d3a4b891
......@@ -800,21 +800,20 @@
'dependencies': [
'content_shell_apk',
'content_javatests',
'../net/net.gyp:net_javatests',
'../tools/android/forwarder/forwarder.gyp:forwarder',
],
'actions': [
{
'action_name': 'copy_base_javatests_jar',
'inputs': ['<(PRODUCT_DIR)/lib.java/chromium_base_javatests.jar'],
'outputs': ['<(PRODUCT_DIR)/content_shell_test/java/libs/chromium_base_javatests.jar'],
'action': ['cp', '<@(_inputs)', '<@(_outputs)'],
},
'copies': [
{
'action_name': 'copy_content_javatests_jar',
'inputs': ['<(PRODUCT_DIR)/lib.java/chromium_content_javatests.jar'],
'outputs': ['<(PRODUCT_DIR)/content_shell_test/java/libs/chromium_content_javatests.jar'],
'action': ['cp', '<@(_inputs)', '<@(_outputs)'],
'destination': '<(PRODUCT_DIR)/content_shell_test/java/libs',
'files': [
'<(PRODUCT_DIR)/lib.java/chromium_base_javatests.jar',
'<(PRODUCT_DIR)/lib.java/chromium_net_javatests.jar',
'<(PRODUCT_DIR)/lib.java/chromium_content_javatests.jar',
],
},
],
'actions': [
{
'action_name': 'content_shell_test_generate_apk',
'inputs': [
......
......@@ -64,6 +64,9 @@
<zipfileset
includes="**/*.class"
src="${PRODUCT_DIR}/content_shell_test/java/libs/chromium_content_javatests.jar"/>
<zipfileset
includes="**/*.class"
src="${PRODUCT_DIR}/content_shell_test/java/libs/chromium_net_javatests.jar"/>
</jar>
</target>
......
// 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");
}
}
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment