| Index: net/android/tools/proxy_test_cases.py
|
| diff --git a/net/android/tools/proxy_test_cases.py b/net/android/tools/proxy_test_cases.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..88f2aa3828419457a25b15a8e6e1af71a6ac7060
|
| --- /dev/null
|
| +++ b/net/android/tools/proxy_test_cases.py
|
| @@ -0,0 +1,343 @@
|
| +#!/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/" : "",
|
| + "ftp://example.com/" : "",
|
| + "https://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "HttpProxyHostAndPort",
|
| + "description" : "Test http.proxyHost and http.proxyPort works.",
|
| + "properties" : {
|
| + "http.proxyHost" : "httpproxy.com",
|
| + "http.proxyPort" : "8080",
|
| + },
|
| + "mappings" : {
|
| + "http://example.com/" : "httpproxy.com:8080",
|
| + "ftp://example.com/" : "",
|
| + "https://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "HttpProxyHostOnly",
|
| + "description" : "We should get the default port (80) for proxied hosts.",
|
| + "properties" : {
|
| + "http.proxyHost" : "httpproxy.com",
|
| + },
|
| + "mappings" : {
|
| + "http://example.com/" : "httpproxy.com:80",
|
| + "ftp://example.com/" : "",
|
| + "https://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "HttpProxyPortOnly",
|
| + "description" :
|
| + "http.proxyPort only should not result in any hosts being proxied.",
|
| + "properties" : {
|
| + "http.proxyPort" : "8080",
|
| + },
|
| + "mappings" : {
|
| + "http://example.com/" : "",
|
| + "ftp://example.com/" : "",
|
| + "https://example.com/" : ""
|
| + }
|
| + },
|
| + {
|
| + "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/" : "httpproxy.com:8080",
|
| + "http://slashdot.org/" : "",
|
| + }
|
| + },
|
| + {
|
| + "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/" : "httpproxy.com:8080",
|
| + "http://slashdot.org/" : "",
|
| + "http://freecode.net/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "HttpNonProxyHosts3",
|
| + "description" : "Test that * pattern works.",
|
| + "properties" : {
|
| + "http.nonProxyHosts" : "*example.com",
|
| + "http.proxyHost" : "httpproxy.com",
|
| + "http.proxyPort" : "8080",
|
| + },
|
| + "mappings" : {
|
| + "http://example.com/" : "",
|
| + "http://www.example.com/" : "",
|
| + "http://slashdot.org/" : "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/" : "",
|
| + "ftp://example.com/" : "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/" : "httpproxy.com:8080",
|
| + "http://example.com/" : "",
|
| + "https://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "FtpProxyHostOnly",
|
| + "description" : "Test ftp.proxyHost and default port.",
|
| + "properties" : {
|
| + "ftp.proxyHost" : "httpproxy.com",
|
| + },
|
| + "mappings" : {
|
| + "ftp://example.com/" : "httpproxy.com:80",
|
| + "http://example.com/" : "",
|
| + "https://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "HttpsProxyHostAndPort",
|
| + "description" : "Test https.proxyHost and https.proxyPort works.",
|
| + "properties" : {
|
| + "https.proxyHost" : "httpproxy.com",
|
| + "https.proxyPort" : "8080",
|
| + },
|
| + "mappings" : {
|
| + "https://example.com/" : "httpproxy.com:8080",
|
| + "http://example.com/" : "",
|
| + "ftp://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "HttpsProxyHostOnly",
|
| + "description" : "Test https.proxyHost and default port.",
|
| + "properties" : {
|
| + "https.proxyHost" : "httpproxy.com",
|
| + },
|
| + "mappings" : {
|
| + "https://example.com/" : "httpproxy.com:443",
|
| + "http://example.com/" : "",
|
| + "ftp://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "HttpProxyHostIPv6",
|
| + "description" : "Test IPv6 https.proxyHost and default port.",
|
| + "properties" : {
|
| + "http.proxyHost" : "a:b:c::d:1",
|
| + },
|
| + "mappings" : {
|
| + "http://example.com/" : "[a:b:c::d:1]:80",
|
| + "ftp://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "HttpProxyHostAndPortIPv6",
|
| + "description" : "Test IPv6 http.proxyHost and http.proxyPort works.",
|
| + "properties" : {
|
| + "http.proxyHost" : "a:b:c::d:1",
|
| + "http.proxyPort" : "8080",
|
| + },
|
| + "mappings" : {
|
| + "http://example.com/" : "[a:b:c::d:1]:8080",
|
| + "ftp://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "name": "HttpProxyHostAndInvalidPort",
|
| + "description" : "Test invalid http.proxyPort does not crash.",
|
| + "properties" : {
|
| + "http.proxyHost" : "a:b:c::d:1",
|
| + "http.proxyPort" : "65536",
|
| + },
|
| + "mappings" : {
|
| + "http://example.com/" : "",
|
| + "ftp://example.com/" : "",
|
| + }
|
| + },
|
| + {
|
| + "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/" : "defaultproxy.com:8080",
|
| + "https://example.com/" : "defaultproxy.com:8080",
|
| + "ftp://example.com/" : "httpproxy.com:8080",
|
| + }
|
| + },
|
| + {
|
| + "name": "DefaultProxyDefaultPort",
|
| + "description" : "Check that the default proxy port is as expected.",
|
| + "properties" : {
|
| + "proxyHost" : "defaultproxy.com",
|
| + },
|
| + "mappings" : {
|
| + "http://example.com/" : "defaultproxy.com:80",
|
| + "https://example.com/" : "defaultproxy.com:443",
|
| + }
|
| + },
|
| + {
|
| + "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/" : "defaultproxy.com:80",
|
| + "https://example.com/" : "socksproxy.com:1080",
|
| + "ftp://example.com" : "socksproxy.com:1080",
|
| + }
|
| + },
|
| + {
|
| + "name": "SocksExplicitPort",
|
| + "description" : "SOCKS proxy port is used if specified",
|
| + "properties" : {
|
| + "socksProxyHost" : "socksproxy.com",
|
| + "socksProxyPort" : "9000",
|
| + },
|
| + "mappings" : {
|
| + "http://example.com/" : "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/" : "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 "description" in test_case:
|
| + self._GenerateDescription(test_case["description"]);
|
| + print " @SmallTest"
|
| + 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()):
|
| + print " checkMapping(\"%s\", \"%s\");" % (url, mappings[url])
|
| +
|
| +
|
| +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()
|
|
|