summaryrefslogtreecommitdiff
path: root/chromium/net/android/tools/proxy_test_cases.py
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/android/tools/proxy_test_cases.py')
-rwxr-xr-xchromium/net/android/tools/proxy_test_cases.py358
1 files changed, 358 insertions, 0 deletions
diff --git a/chromium/net/android/tools/proxy_test_cases.py b/chromium/net/android/tools/proxy_test_cases.py
new file mode 100755
index 00000000000..3d6e8ec7479
--- /dev/null
+++ b/chromium/net/android/tools/proxy_test_cases.py
@@ -0,0 +1,358 @@
+#!/usr/bin/env python
+# 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.
+
+"""Generator script for proxy tests.
+
+See AndroidProxySelectorTest.java
+and net/proxy/proxy_config_service_android_unittest.cc
+
+To generate C++, run this script without arguments.
+To generate Java, run this script with -j argument.
+
+Note that this generator is not run as part of the build process because
+we are assuming that these test cases will not change often.
+"""
+
+import optparse
+
+test_cases = [
+ {
+ "name": "NoProxy",
+ "description" : "Test direct mapping when no proxy defined.",
+ "properties" : {
+ },
+ "mappings" : {
+ "http://example.com/" : "DIRECT",
+ "ftp://example.com/" : "DIRECT",
+ "https://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpProxyHostAndPort",
+ "description" : "Test http.proxyHost and http.proxyPort works.",
+ "properties" : {
+ "http.proxyHost" : "httpproxy.com",
+ "http.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY httpproxy.com:8080",
+ "ftp://example.com/" : "DIRECT",
+ "https://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpProxyHostOnly",
+ "description" : "We should get the default port (80) for proxied hosts.",
+ "properties" : {
+ "http.proxyHost" : "httpproxy.com",
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY httpproxy.com:80",
+ "ftp://example.com/" : "DIRECT",
+ "https://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpProxyPortOnly",
+ "description" :
+ "http.proxyPort only should not result in any hosts being proxied.",
+ "properties" : {
+ "http.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "http://example.com/" : "DIRECT",
+ "ftp://example.com/" : "DIRECT",
+ "https://example.com/" : "DIRECT"
+ }
+ },
+ {
+ "name": "HttpNonProxyHosts1",
+ "description" : "Test that HTTP non proxy hosts are mapped correctly",
+ "properties" : {
+ "http.nonProxyHosts" : "slashdot.org",
+ "http.proxyHost" : "httpproxy.com",
+ "http.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY httpproxy.com:8080",
+ "http://slashdot.org/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpNonProxyHosts2",
+ "description" : "Test that | pattern works.",
+ "properties" : {
+ "http.nonProxyHosts" : "slashdot.org|freecode.net",
+ "http.proxyHost" : "httpproxy.com",
+ "http.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY httpproxy.com:8080",
+ "http://slashdot.org/" : "DIRECT",
+ "http://freecode.net/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpNonProxyHosts3",
+ "description" : "Test that * pattern works.",
+ "properties" : {
+ "http.nonProxyHosts" : "*example.com",
+ "http.proxyHost" : "httpproxy.com",
+ "http.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "http://example.com/" : "DIRECT",
+ "http://www.example.com/" : "DIRECT",
+ "http://slashdot.org/" : "PROXY httpproxy.com:8080",
+ }
+ },
+ {
+ "name": "FtpNonProxyHosts",
+ "description" : "Test that FTP non proxy hosts are mapped correctly",
+ "properties" : {
+ "ftp.nonProxyHosts" : "slashdot.org",
+ "ftp.proxyHost" : "httpproxy.com",
+ "ftp.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "http://example.com/" : "DIRECT",
+ "ftp://example.com/" : "PROXY httpproxy.com:8080",
+ }
+ },
+ {
+ "name": "FtpProxyHostAndPort",
+ "description" : "Test ftp.proxyHost and ftp.proxyPort works.",
+ "properties" : {
+ "ftp.proxyHost" : "httpproxy.com",
+ "ftp.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "ftp://example.com/" : "PROXY httpproxy.com:8080",
+ "http://example.com/" : "DIRECT",
+ "https://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "FtpProxyHostOnly",
+ "description" : "Test ftp.proxyHost and default port.",
+ "properties" : {
+ "ftp.proxyHost" : "httpproxy.com",
+ },
+ "mappings" : {
+ "ftp://example.com/" : "PROXY httpproxy.com:80",
+ "http://example.com/" : "DIRECT",
+ "https://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpsProxyHostAndPort",
+ "description" : "Test https.proxyHost and https.proxyPort works.",
+ "properties" : {
+ "https.proxyHost" : "httpproxy.com",
+ "https.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "https://example.com/" : "PROXY httpproxy.com:8080",
+ "http://example.com/" : "DIRECT",
+ "ftp://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpsProxyHostOnly",
+ "description" : "Test https.proxyHost and default port.",
+ # Chromium differs from the Android platform by connecting to port 80 for
+ # HTTPS connections by default, hence cpp-only.
+ "cpp-only" : "",
+ "properties" : {
+ "https.proxyHost" : "httpproxy.com",
+ },
+ "mappings" : {
+ "https://example.com/" : "PROXY httpproxy.com:80",
+ "http://example.com/" : "DIRECT",
+ "ftp://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpProxyHostIPv6",
+ "description" : "Test IPv6 https.proxyHost and default port.",
+ "cpp-only" : "",
+ "properties" : {
+ "http.proxyHost" : "a:b:c::d:1",
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY [a:b:c::d:1]:80",
+ "ftp://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpProxyHostAndPortIPv6",
+ "description" : "Test IPv6 http.proxyHost and http.proxyPort works.",
+ "cpp-only" : "",
+ "properties" : {
+ "http.proxyHost" : "a:b:c::d:1",
+ "http.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY [a:b:c::d:1]:8080",
+ "ftp://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "HttpProxyHostAndInvalidPort",
+ "description" : "Test invalid http.proxyPort does not crash.",
+ "cpp-only" : "",
+ "properties" : {
+ "http.proxyHost" : "a:b:c::d:1",
+ "http.proxyPort" : "65536",
+ },
+ "mappings" : {
+ "http://example.com/" : "DIRECT",
+ "ftp://example.com/" : "DIRECT",
+ }
+ },
+ {
+ "name": "DefaultProxyExplictPort",
+ "description" :
+ "Default http proxy is used if a scheme-specific one is not found.",
+ "properties" : {
+ "proxyHost" : "defaultproxy.com",
+ "proxyPort" : "8080",
+ "ftp.proxyHost" : "httpproxy.com",
+ "ftp.proxyPort" : "8080",
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY defaultproxy.com:8080",
+ "https://example.com/" : "PROXY defaultproxy.com:8080",
+ "ftp://example.com/" : "PROXY httpproxy.com:8080",
+ }
+ },
+ {
+ "name": "DefaultProxyDefaultPort",
+ "description" : "Check that the default proxy port is as expected.",
+ # Chromium differs from the Android platform by connecting to port 80 for
+ # HTTPS connections by default, hence cpp-only.
+ "cpp-only" : "",
+ "properties" : {
+ "proxyHost" : "defaultproxy.com",
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY defaultproxy.com:80",
+ "https://example.com/" : "PROXY defaultproxy.com:80",
+ }
+ },
+ {
+ "name": "FallbackToSocks",
+ "description" : "SOCKS proxy is used if scheme-specific one is not found.",
+ "properties" : {
+ "http.proxyHost" : "defaultproxy.com",
+ "socksProxyHost" : "socksproxy.com"
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY defaultproxy.com:80",
+ "https://example.com/" : "SOCKS5 socksproxy.com:1080",
+ "ftp://example.com" : "SOCKS5 socksproxy.com:1080",
+ }
+ },
+ {
+ "name": "SocksExplicitPort",
+ "description" : "SOCKS proxy port is used if specified",
+ "properties" : {
+ "socksProxyHost" : "socksproxy.com",
+ "socksProxyPort" : "9000",
+ },
+ "mappings" : {
+ "http://example.com/" : "SOCKS5 socksproxy.com:9000",
+ }
+ },
+ {
+ "name": "HttpProxySupercedesSocks",
+ "description" : "SOCKS proxy is ignored if default HTTP proxy defined.",
+ "properties" : {
+ "proxyHost" : "defaultproxy.com",
+ "socksProxyHost" : "socksproxy.com",
+ "socksProxyPort" : "9000",
+ },
+ "mappings" : {
+ "http://example.com/" : "PROXY defaultproxy.com:80",
+ }
+ },
+]
+
+class GenerateCPlusPlus:
+ """Generate C++ test cases"""
+
+ def Generate(self):
+ for test_case in test_cases:
+ print ("TEST_F(ProxyConfigServiceAndroidTest, %s) {" % test_case["name"])
+ if "description" in test_case:
+ self._GenerateDescription(test_case["description"]);
+ self._GenerateConfiguration(test_case["properties"])
+ self._GenerateMappings(test_case["mappings"])
+ print "}"
+ print ""
+
+ def _GenerateDescription(self, description):
+ print " // %s" % description
+
+ def _GenerateConfiguration(self, properties):
+ for key in sorted(properties.iterkeys()):
+ print " AddProperty(\"%s\", \"%s\");" % (key, properties[key])
+ print " ProxySettingsChanged();"
+
+ def _GenerateMappings(self, mappings):
+ for url in sorted(mappings.iterkeys()):
+ print " TestMapping(\"%s\", \"%s\");" % (url, mappings[url])
+
+
+class GenerateJava:
+ """Generate Java test cases"""
+
+ def Generate(self):
+ for test_case in test_cases:
+ if test_case.has_key("cpp-only"):
+ continue
+ if "description" in test_case:
+ self._GenerateDescription(test_case["description"]);
+ print " @SmallTest"
+ print " @Feature({\"AndroidWebView\"})"
+ print " public void test%s() throws Exception {" % test_case["name"]
+ self._GenerateConfiguration(test_case["properties"])
+ self._GenerateMappings(test_case["mappings"])
+ print " }"
+ print ""
+
+ def _GenerateDescription(self, description):
+ print " /**"
+ print " * %s" % description
+ print " *"
+ print " * @throws Exception"
+ print " */"
+
+ def _GenerateConfiguration(self, properties):
+ for key in sorted(properties.iterkeys()):
+ print " System.setProperty(\"%s\", \"%s\");" % (
+ key, properties[key])
+
+ def _GenerateMappings(self, mappings):
+ for url in sorted(mappings.iterkeys()):
+ mapping = mappings[url]
+ if 'HTTPS' in mapping:
+ mapping = mapping.replace('HTTPS', 'PROXY')
+ print " checkMapping(\"%s\", \"%s\");" % (url, mapping)
+
+
+def main():
+ parser = optparse.OptionParser()
+ parser.add_option("-j", "--java",
+ action="store_true", dest="java");
+ (options, args) = parser.parse_args();
+ if options.java:
+ generator = GenerateJava()
+ else:
+ generator = GenerateCPlusPlus()
+ generator.Generate()
+
+if __name__ == '__main__':
+ main()