15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Generator script for proxy tests.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)See AndroidProxySelectorTest.java
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and net/proxy/proxy_config_service_android_unittest.cc
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)To generate C++, run this script without arguments.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)To generate Java, run this script with -j argument.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Note that this generator is not run as part of the build process because
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)we are assuming that these test cases will not change often.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import optparse
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test_cases = [
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "NoProxy",
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test direct mapping when no proxy defined.",
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "DIRECT",
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "DIRECT",
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/" : "DIRECT",
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpProxyHostAndPort",
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test http.proxyHost and http.proxyPort works.",
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyHost" : "httpproxy.com",
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyPort" : "8080",
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY httpproxy.com:8080",
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "DIRECT",
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/" : "DIRECT",
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpProxyHostOnly",
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "We should get the default port (80) for proxied hosts.",
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyHost" : "httpproxy.com",
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY httpproxy.com:80",
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "DIRECT",
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/" : "DIRECT",
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpProxyPortOnly",
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" :
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "http.proxyPort only should not result in any hosts being proxied.",
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyPort" : "8080",
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "DIRECT",
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "DIRECT",
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/" : "DIRECT"
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpNonProxyHosts1",
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test that HTTP non proxy hosts are mapped correctly",
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.nonProxyHosts" : "slashdot.org",
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyHost" : "httpproxy.com",
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyPort" : "8080",
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY httpproxy.com:8080",
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://slashdot.org/" : "DIRECT",
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpNonProxyHosts2",
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test that | pattern works.",
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.nonProxyHosts" : "slashdot.org|freecode.net",
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyHost" : "httpproxy.com",
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyPort" : "8080",
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY httpproxy.com:8080",
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://slashdot.org/" : "DIRECT",
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://freecode.net/" : "DIRECT",
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpNonProxyHosts3",
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test that * pattern works.",
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.nonProxyHosts" : "*example.com",
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyHost" : "httpproxy.com",
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyPort" : "8080",
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "DIRECT",
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://www.example.com/" : "DIRECT",
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://slashdot.org/" : "PROXY httpproxy.com:8080",
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "FtpNonProxyHosts",
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test that FTP non proxy hosts are mapped correctly",
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp.nonProxyHosts" : "slashdot.org",
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp.proxyHost" : "httpproxy.com",
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp.proxyPort" : "8080",
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "DIRECT",
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "PROXY httpproxy.com:8080",
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "FtpProxyHostAndPort",
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test ftp.proxyHost and ftp.proxyPort works.",
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp.proxyHost" : "httpproxy.com",
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp.proxyPort" : "8080",
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "PROXY httpproxy.com:8080",
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "DIRECT",
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/" : "DIRECT",
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "FtpProxyHostOnly",
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test ftp.proxyHost and default port.",
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp.proxyHost" : "httpproxy.com",
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "PROXY httpproxy.com:80",
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "DIRECT",
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/" : "DIRECT",
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpsProxyHostAndPort",
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test https.proxyHost and https.proxyPort works.",
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https.proxyHost" : "httpproxy.com",
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https.proxyPort" : "8080",
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "https://example.com/" : "PROXY httpproxy.com:8080",
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "DIRECT",
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "DIRECT",
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpsProxyHostOnly",
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test https.proxyHost and default port.",
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # Chromium differs from the Android platform by connecting to port 80 for
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # HTTPS connections by default, hence cpp-only.
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "cpp-only" : "",
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https.proxyHost" : "httpproxy.com",
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "https://example.com/" : "PROXY httpproxy.com:80",
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "DIRECT",
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "DIRECT",
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpProxyHostIPv6",
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test IPv6 https.proxyHost and default port.",
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "cpp-only" : "",
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyHost" : "a:b:c::d:1",
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY [a:b:c::d:1]:80",
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "DIRECT",
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpProxyHostAndPortIPv6",
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test IPv6 http.proxyHost and http.proxyPort works.",
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "cpp-only" : "",
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyHost" : "a:b:c::d:1",
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyPort" : "8080",
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY [a:b:c::d:1]:8080",
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "DIRECT",
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpProxyHostAndInvalidPort",
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Test invalid http.proxyPort does not crash.",
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "cpp-only" : "",
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyHost" : "a:b:c::d:1",
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyPort" : "65536",
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "DIRECT",
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "DIRECT",
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "DefaultProxyExplictPort",
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" :
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "Default http proxy is used if a scheme-specific one is not found.",
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "proxyHost" : "defaultproxy.com",
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "proxyPort" : "8080",
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp.proxyHost" : "httpproxy.com",
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp.proxyPort" : "8080",
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY defaultproxy.com:8080",
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "https://example.com/" : "PROXY defaultproxy.com:8080",
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com/" : "PROXY httpproxy.com:8080",
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "DefaultProxyDefaultPort",
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "Check that the default proxy port is as expected.",
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # Chromium differs from the Android platform by connecting to port 80 for
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # HTTPS connections by default, hence cpp-only.
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "cpp-only" : "",
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "proxyHost" : "defaultproxy.com",
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY defaultproxy.com:80",
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "https://example.com/" : "PROXY defaultproxy.com:80",
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "FallbackToSocks",
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "SOCKS proxy is used if scheme-specific one is not found.",
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http.proxyHost" : "defaultproxy.com",
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "socksProxyHost" : "socksproxy.com"
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY defaultproxy.com:80",
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/" : "SOCKS5 socksproxy.com:1080",
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ftp://example.com" : "SOCKS5 socksproxy.com:1080",
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "SocksExplicitPort",
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "SOCKS proxy port is used if specified",
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "socksProxyHost" : "socksproxy.com",
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "socksProxyPort" : "9000",
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "SOCKS5 socksproxy.com:9000",
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "name": "HttpProxySupercedesSocks",
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "description" : "SOCKS proxy is ignored if default HTTP proxy defined.",
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "properties" : {
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "proxyHost" : "defaultproxy.com",
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "socksProxyHost" : "socksproxy.com",
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "socksProxyPort" : "9000",
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "mappings" : {
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://example.com/" : "PROXY defaultproxy.com:80",
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GenerateCPlusPlus:
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Generate C++ test cases"""
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def Generate(self):
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for test_case in test_cases:
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print ("TEST_F(ProxyConfigServiceAndroidTest, %s) {" % test_case["name"])
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if "description" in test_case:
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        self._GenerateDescription(test_case["description"]);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self._GenerateConfiguration(test_case["properties"])
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self._GenerateMappings(test_case["mappings"])
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "}"
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print ""
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def _GenerateDescription(self, description):
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "  // %s" % description
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def _GenerateConfiguration(self, properties):
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for key in sorted(properties.iterkeys()):
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "  AddProperty(\"%s\", \"%s\");" % (key, properties[key])
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "  ProxySettingsChanged();"
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def _GenerateMappings(self, mappings):
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for url in sorted(mappings.iterkeys()):
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "  TestMapping(\"%s\", \"%s\");" % (url, mappings[url])
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GenerateJava:
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Generate Java test cases"""
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def Generate(self):
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for test_case in test_cases:
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if test_case.has_key("cpp-only"):
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        continue
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if "description" in test_case:
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        self._GenerateDescription(test_case["description"]);
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "    @SmallTest"
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      print "    @Feature({\"AndroidWebView\"})"
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "    public void test%s() throws Exception {" % test_case["name"]
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self._GenerateConfiguration(test_case["properties"])
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self._GenerateMappings(test_case["mappings"])
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "    }"
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print ""
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def _GenerateDescription(self, description):
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "    /**"
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "     * %s" % description
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "     *"
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "     * @throws Exception"
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "     */"
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def _GenerateConfiguration(self, properties):
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for key in sorted(properties.iterkeys()):
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "        System.setProperty(\"%s\", \"%s\");" % (
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          key, properties[key])
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def _GenerateMappings(self, mappings):
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for url in sorted(mappings.iterkeys()):
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      mapping = mappings[url]
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if 'HTTPS' in mapping:
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mapping = mapping.replace('HTTPS', 'PROXY')
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "        checkMapping(\"%s\", \"%s\");" % (url, mapping)
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main():
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser = optparse.OptionParser()
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option("-j", "--java",
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                action="store_true", dest="java");
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  (options, args) = parser.parse_args();
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if options.java:
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    generator = GenerateJava()
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    generator = GenerateCPlusPlus()
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  generator.Generate()
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  main()
359