| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/net/chrome_url_request_context.h" | |
| 6 | |
| 7 #include "base/command_line.h" | |
| 8 #include "base/format_macros.h" | |
| 9 #include "chrome/browser/policy/configuration_policy_pref_store.h" | |
| 10 #include "chrome/browser/prefs/command_line_pref_store.h" | |
| 11 #include "chrome/browser/prefs/default_pref_store.h" | |
| 12 #include "chrome/browser/prefs/pref_value_store.h" | |
| 13 #include "chrome/common/chrome_switches.h" | |
| 14 #include "chrome/test/testing_pref_service.h" | |
| 15 #include "net/proxy/proxy_config.h" | |
| 16 #include "net/proxy/proxy_config_service_common_unittest.h" | |
| 17 #include "testing/gtest/include/gtest/gtest.h" | |
| 18 | |
| 19 // Builds an identifier for each test in an array. | |
| 20 #define TEST_DESC(desc) StringPrintf("at line %d <%s>", __LINE__, desc) | |
| 21 | |
| 22 TEST(ChromeURLRequestContextTest, CreateProxyConfigTest) { | |
| 23 FilePath unused_path(FILE_PATH_LITERAL("foo.exe")); | |
| 24 // Build the input command lines here. | |
| 25 CommandLine empty(unused_path); | |
| 26 CommandLine no_proxy(unused_path); | |
| 27 no_proxy.AppendSwitch(switches::kNoProxyServer); | |
| 28 CommandLine no_proxy_extra_params(unused_path); | |
| 29 no_proxy_extra_params.AppendSwitch(switches::kNoProxyServer); | |
| 30 no_proxy_extra_params.AppendSwitchASCII(switches::kProxyServer, | |
| 31 "http://proxy:8888"); | |
| 32 CommandLine single_proxy(unused_path); | |
| 33 single_proxy.AppendSwitchASCII(switches::kProxyServer, "http://proxy:8888"); | |
| 34 CommandLine per_scheme_proxy(unused_path); | |
| 35 per_scheme_proxy.AppendSwitchASCII(switches::kProxyServer, | |
| 36 "http=httpproxy:8888;ftp=ftpproxy:8889"); | |
| 37 CommandLine per_scheme_proxy_bypass(unused_path); | |
| 38 per_scheme_proxy_bypass.AppendSwitchASCII( | |
| 39 switches::kProxyServer, | |
| 40 "http=httpproxy:8888;ftp=ftpproxy:8889"); | |
| 41 per_scheme_proxy_bypass.AppendSwitchASCII( | |
| 42 switches::kProxyBypassList, | |
| 43 ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8"); | |
| 44 CommandLine with_pac_url(unused_path); | |
| 45 with_pac_url.AppendSwitchASCII(switches::kProxyPacUrl, "http://wpad/wpad.dat")
; | |
| 46 with_pac_url.AppendSwitchASCII( | |
| 47 switches::kProxyBypassList, | |
| 48 ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8"); | |
| 49 CommandLine with_auto_detect(unused_path); | |
| 50 with_auto_detect.AppendSwitch(switches::kProxyAutoDetect); | |
| 51 | |
| 52 // Inspired from proxy_config_service_win_unittest.cc. | |
| 53 const struct { | |
| 54 // Short description to identify the test | |
| 55 std::string description; | |
| 56 | |
| 57 // The command line to build a ProxyConfig from. | |
| 58 const CommandLine& command_line; | |
| 59 | |
| 60 // Expected outputs (fields of the ProxyConfig). | |
| 61 bool is_null; | |
| 62 bool auto_detect; | |
| 63 GURL pac_url; | |
| 64 net::ProxyRulesExpectation proxy_rules; | |
| 65 } tests[] = { | |
| 66 { | |
| 67 TEST_DESC("Empty command line"), | |
| 68 // Input | |
| 69 empty, | |
| 70 // Expected result | |
| 71 true, // is_null | |
| 72 false, // auto_detect | |
| 73 GURL(), // pac_url | |
| 74 net::ProxyRulesExpectation::Empty(), | |
| 75 }, | |
| 76 { | |
| 77 TEST_DESC("No proxy"), | |
| 78 // Input | |
| 79 no_proxy, | |
| 80 // Expected result | |
| 81 false, // is_null | |
| 82 false, // auto_detect | |
| 83 GURL(), // pac_url | |
| 84 net::ProxyRulesExpectation::Empty(), | |
| 85 }, | |
| 86 { | |
| 87 TEST_DESC("No proxy with extra parameters."), | |
| 88 // Input | |
| 89 no_proxy_extra_params, | |
| 90 // Expected result | |
| 91 false, // is_null | |
| 92 false, // auto_detect | |
| 93 GURL(), // pac_url | |
| 94 net::ProxyRulesExpectation::Empty(), | |
| 95 }, | |
| 96 { | |
| 97 TEST_DESC("Single proxy."), | |
| 98 // Input | |
| 99 single_proxy, | |
| 100 // Expected result | |
| 101 false, // is_null | |
| 102 false, // auto_detect | |
| 103 GURL(), // pac_url | |
| 104 net::ProxyRulesExpectation::Single( | |
| 105 "proxy:8888", // single proxy | |
| 106 ""), // bypass rules | |
| 107 }, | |
| 108 { | |
| 109 TEST_DESC("Per scheme proxy."), | |
| 110 // Input | |
| 111 per_scheme_proxy, | |
| 112 // Expected result | |
| 113 false, // is_null | |
| 114 false, // auto_detect | |
| 115 GURL(), // pac_url | |
| 116 net::ProxyRulesExpectation::PerScheme( | |
| 117 "httpproxy:8888", // http | |
| 118 "", // https | |
| 119 "ftpproxy:8889", // ftp | |
| 120 ""), // bypass rules | |
| 121 }, | |
| 122 { | |
| 123 TEST_DESC("Per scheme proxy with bypass URLs."), | |
| 124 // Input | |
| 125 per_scheme_proxy_bypass, | |
| 126 // Expected result | |
| 127 false, // is_null | |
| 128 false, // auto_detect | |
| 129 GURL(), // pac_url | |
| 130 net::ProxyRulesExpectation::PerScheme( | |
| 131 "httpproxy:8888", // http | |
| 132 "", // https | |
| 133 "ftpproxy:8889", // ftp | |
| 134 "*.google.com,foo.com:99,1.2.3.4:22,127.0.0.1/8"), | |
| 135 }, | |
| 136 { | |
| 137 TEST_DESC("Pac URL with proxy bypass URLs"), | |
| 138 // Input | |
| 139 with_pac_url, | |
| 140 // Expected result | |
| 141 false, // is_null | |
| 142 false, // auto_detect | |
| 143 GURL("http://wpad/wpad.dat"), // pac_url | |
| 144 net::ProxyRulesExpectation::EmptyWithBypass( | |
| 145 "*.google.com,foo.com:99,1.2.3.4:22,127.0.0.1/8"), | |
| 146 }, | |
| 147 { | |
| 148 TEST_DESC("Autodetect"), | |
| 149 // Input | |
| 150 with_auto_detect, | |
| 151 // Expected result | |
| 152 false, // is_null | |
| 153 true, // auto_detect | |
| 154 GURL(), // pac_url | |
| 155 net::ProxyRulesExpectation::Empty(), | |
| 156 } | |
| 157 }; | |
| 158 | |
| 159 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); i++) { | |
| 160 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "] %s", i, | |
| 161 tests[i].description.c_str())); | |
| 162 CommandLine command_line(tests[i].command_line); | |
| 163 // Only configuration-policy and default prefs are needed. | |
| 164 PrefService prefs(new TestingPrefService::TestingPrefValueStore( | |
| 165 new policy::ConfigurationPolicyPrefStore(NULL), NULL, | |
| 166 new CommandLinePrefStore(&command_line), NULL, NULL, | |
| 167 new DefaultPrefStore())); | |
| 168 ChromeURLRequestContextGetter::RegisterUserPrefs(&prefs); | |
| 169 scoped_ptr<net::ProxyConfig> config(CreateProxyConfig(&prefs)); | |
| 170 | |
| 171 if (tests[i].is_null) { | |
| 172 EXPECT_TRUE(config == NULL); | |
| 173 } else { | |
| 174 EXPECT_TRUE(config != NULL); | |
| 175 EXPECT_EQ(tests[i].auto_detect, config->auto_detect()); | |
| 176 EXPECT_EQ(tests[i].pac_url, config->pac_url()); | |
| 177 EXPECT_TRUE(tests[i].proxy_rules.Matches(config->proxy_rules())); | |
| 178 } | |
| 179 } | |
| 180 } | |
| OLD | NEW |