Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/proxy/proxy_config.h" | 5 #include "net/proxy/proxy_config.h" |
| 6 #include "net/proxy/proxy_config_service_common_unittest.h" | 6 #include "net/proxy/proxy_config_service_common_unittest.h" |
| 7 #include "net/proxy/proxy_info.h" | 7 #include "net/proxy/proxy_info.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace net { | 10 namespace net { |
| 11 namespace { | 11 namespace { |
| 12 | 12 |
| 13 void ExpectProxyServerEquals(const char* expectation, | 13 void ExpectProxyServerEquals(const char* expectation, |
| 14 const ProxyServer& proxy_server) { | 14 const ProxyList& proxy_servers) { |
| 15 if (expectation == NULL) { | 15 if (expectation == NULL) { |
| 16 EXPECT_FALSE(proxy_server.is_valid()); | 16 EXPECT_TRUE(proxy_servers.IsEmpty()); |
| 17 } else { | 17 } else { |
| 18 EXPECT_EQ(expectation, proxy_server.ToURI()); | 18 EXPECT_EQ(expectation, proxy_servers.ToPacString()); |
| 19 } | 19 } |
| 20 } | 20 } |
| 21 | 21 |
| 22 TEST(ProxyConfigTest, Equals) { | 22 TEST(ProxyConfigTest, Equals) { |
| 23 // Test |ProxyConfig::auto_detect|. | 23 // Test |ProxyConfig::auto_detect|. |
| 24 | 24 |
| 25 ProxyConfig config1; | 25 ProxyConfig config1; |
| 26 config1.set_auto_detect(true); | 26 config1.set_auto_detect(true); |
| 27 | 27 |
| 28 ProxyConfig config2; | 28 ProxyConfig config2; |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 44 EXPECT_FALSE(config2.Equals(config1)); | 44 EXPECT_FALSE(config2.Equals(config1)); |
| 45 | 45 |
| 46 config1.set_pac_url(GURL("http://wpad/wpad.dat")); | 46 config1.set_pac_url(GURL("http://wpad/wpad.dat")); |
| 47 | 47 |
| 48 EXPECT_TRUE(config1.Equals(config2)); | 48 EXPECT_TRUE(config1.Equals(config2)); |
| 49 EXPECT_TRUE(config2.Equals(config1)); | 49 EXPECT_TRUE(config2.Equals(config1)); |
| 50 | 50 |
| 51 // Test |ProxyConfig::proxy_rules|. | 51 // Test |ProxyConfig::proxy_rules|. |
| 52 | 52 |
| 53 config2.proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; | 53 config2.proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; |
| 54 config2.proxy_rules().single_proxy = | 54 config2.proxy_rules().single_proxies.SetSingleProxyServer( |
| 55 ProxyServer::FromURI("myproxy:80", ProxyServer::SCHEME_HTTP); | 55 ProxyServer::FromURI("myproxy:80", ProxyServer::SCHEME_HTTP)); |
| 56 | 56 |
| 57 EXPECT_FALSE(config1.Equals(config2)); | 57 EXPECT_FALSE(config1.Equals(config2)); |
| 58 EXPECT_FALSE(config2.Equals(config1)); | 58 EXPECT_FALSE(config2.Equals(config1)); |
| 59 | 59 |
| 60 config1.proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; | 60 config1.proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; |
| 61 config1.proxy_rules().single_proxy = | 61 config1.proxy_rules().single_proxies.SetSingleProxyServer( |
| 62 ProxyServer::FromURI("myproxy:100", ProxyServer::SCHEME_HTTP); | 62 ProxyServer::FromURI("myproxy:100", ProxyServer::SCHEME_HTTP)); |
| 63 | 63 |
| 64 EXPECT_FALSE(config1.Equals(config2)); | 64 EXPECT_FALSE(config1.Equals(config2)); |
| 65 EXPECT_FALSE(config2.Equals(config1)); | 65 EXPECT_FALSE(config2.Equals(config1)); |
| 66 | 66 |
| 67 config1.proxy_rules().single_proxy = | 67 config1.proxy_rules().single_proxies.SetSingleProxyServer( |
| 68 ProxyServer::FromURI("myproxy", ProxyServer::SCHEME_HTTP); | 68 ProxyServer::FromURI("myproxy", ProxyServer::SCHEME_HTTP)); |
| 69 | 69 |
| 70 EXPECT_TRUE(config1.Equals(config2)); | 70 EXPECT_TRUE(config1.Equals(config2)); |
| 71 EXPECT_TRUE(config2.Equals(config1)); | 71 EXPECT_TRUE(config2.Equals(config1)); |
| 72 | 72 |
| 73 // Test |ProxyConfig::bypass_rules|. | 73 // Test |ProxyConfig::bypass_rules|. |
| 74 | 74 |
| 75 config2.proxy_rules().bypass_rules.AddRuleFromString("*.google.com"); | 75 config2.proxy_rules().bypass_rules.AddRuleFromString("*.google.com"); |
| 76 | 76 |
| 77 EXPECT_FALSE(config1.Equals(config2)); | 77 EXPECT_FALSE(config1.Equals(config2)); |
| 78 EXPECT_FALSE(config2.Equals(config1)); | 78 EXPECT_FALSE(config2.Equals(config1)); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 93 | 93 |
| 94 EXPECT_TRUE(config1.Equals(config2)); | 94 EXPECT_TRUE(config1.Equals(config2)); |
| 95 EXPECT_TRUE(config2.Equals(config1)); | 95 EXPECT_TRUE(config2.Equals(config1)); |
| 96 } | 96 } |
| 97 | 97 |
| 98 TEST(ProxyConfigTest, ParseProxyRules) { | 98 TEST(ProxyConfigTest, ParseProxyRules) { |
| 99 const struct { | 99 const struct { |
| 100 const char* proxy_rules; | 100 const char* proxy_rules; |
| 101 | 101 |
| 102 ProxyConfig::ProxyRules::Type type; | 102 ProxyConfig::ProxyRules::Type type; |
| 103 // These will be PAC-stle strings, eg 'PROXY foo.com' | |
| 103 const char* single_proxy; | 104 const char* single_proxy; |
| 104 const char* proxy_for_http; | 105 const char* proxy_for_http; |
| 105 const char* proxy_for_https; | 106 const char* proxy_for_https; |
| 106 const char* proxy_for_ftp; | 107 const char* proxy_for_ftp; |
| 107 const char* fallback_proxy; | 108 const char* fallback_proxy; |
| 108 } tests[] = { | 109 } tests[] = { |
| 109 // One HTTP proxy for all schemes. | 110 // One HTTP proxy for all schemes. |
| 110 { | 111 { |
| 111 "myproxy:80", | 112 "myproxy:80", |
| 112 | 113 |
| 113 ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, | 114 ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, |
| 114 "myproxy:80", | 115 "PROXY myproxy:80", |
| 115 NULL, | 116 NULL, |
| 116 NULL, | 117 NULL, |
| 117 NULL, | 118 NULL, |
| 118 NULL, | 119 NULL, |
| 119 }, | 120 }, |
| 120 | 121 |
| 121 // Only specify a proxy server for "http://" urls. | 122 // Only specify a proxy server for "http://" urls. |
| 122 { | 123 { |
| 123 "http=myproxy:80", | 124 "http=myproxy:80", |
| 124 | 125 |
| 125 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 126 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 126 NULL, | 127 NULL, |
| 127 "myproxy:80", | 128 "PROXY myproxy:80", |
| 128 NULL, | 129 NULL, |
| 129 NULL, | 130 NULL, |
| 130 NULL, | 131 NULL, |
| 131 }, | 132 }, |
| 132 | 133 |
| 133 // Specify an HTTP proxy for "ftp://" and a SOCKS proxy for "https://" urls. | 134 // Specify an HTTP proxy for "ftp://" and a SOCKS proxy for "https://" urls. |
| 134 { | 135 { |
| 135 "ftp=ftp-proxy ; https=socks4://foopy", | 136 "ftp=ftp-proxy ; https=socks4://foopy", |
| 136 | 137 |
| 137 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 138 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 138 NULL, | 139 NULL, |
| 139 NULL, | 140 NULL, |
| 140 "socks4://foopy:1080", | 141 "SOCKS foopy:1080", |
| 141 "ftp-proxy:80", | 142 "PROXY ftp-proxy:80", |
| 142 NULL, | 143 NULL, |
| 143 }, | 144 }, |
| 144 | 145 |
| 145 // Give a scheme-specific proxy as well as a non-scheme specific. | 146 // Give a scheme-specific proxy as well as a non-scheme specific. |
| 146 // The first entry "foopy" takes precedance marking this list as | 147 // The first entry "foopy" takes precedance marking this list as |
| 147 // TYPE_SINGLE_PROXY. | 148 // TYPE_SINGLE_PROXY. |
| 148 { | 149 { |
| 149 "foopy ; ftp=ftp-proxy", | 150 "foopy ; ftp=ftp-proxy", |
| 150 | 151 |
| 151 ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, | 152 ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, |
| 152 "foopy:80", | 153 "PROXY foopy:80", |
| 153 NULL, | 154 NULL, |
| 154 NULL, | 155 NULL, |
| 155 NULL, | 156 NULL, |
| 156 NULL, | 157 NULL, |
| 157 }, | 158 }, |
| 158 | 159 |
| 159 // Give a scheme-specific proxy as well as a non-scheme specific. | 160 // Give a scheme-specific proxy as well as a non-scheme specific. |
| 160 // The first entry "ftp=ftp-proxy" takes precedance marking this list as | 161 // The first entry "ftp=ftp-proxy" takes precedance marking this list as |
| 161 // TYPE_PROXY_PER_SCHEME. | 162 // TYPE_PROXY_PER_SCHEME. |
| 162 { | 163 { |
| 163 "ftp=ftp-proxy ; foopy", | 164 "ftp=ftp-proxy ; foopy", |
| 164 | 165 |
| 165 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 166 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 166 NULL, | 167 NULL, |
| 167 NULL, | 168 NULL, |
| 168 NULL, | 169 NULL, |
| 169 "ftp-proxy:80", | 170 "PROXY ftp-proxy:80", |
| 170 NULL, | 171 NULL, |
| 171 }, | 172 }, |
| 172 | 173 |
| 173 // Include duplicate entries -- last one wins. | 174 // Include duplicate entries for a single scheme. |
|
eroman
2013/03/01 00:05:13
Please keep this test as well (need a test to see
marq_use_my_chromium_address
2013/03/04 18:04:20
Done.
| |
| 174 { | 175 { |
| 175 "ftp=ftp1 ; ftp=ftp2 ; ftp=ftp3", | 176 "ftp=ftp1,ftp2,ftp3", |
| 176 | 177 |
| 177 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 178 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 178 NULL, | 179 NULL, |
| 179 NULL, | 180 NULL, |
| 180 NULL, | 181 NULL, |
| 181 "ftp3:80", | 182 "PROXY ftp1:80;PROXY ftp2:80;PROXY ftp3:80", |
| 182 NULL, | 183 NULL, |
| 183 }, | 184 }, |
| 184 | 185 |
| 186 // Include duplicate entries for a multiple schemes. | |
| 187 { | |
| 188 "ftp=ftp1,ftp2,ftp3 ; http=http1,http2; ", | |
| 189 | |
| 190 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | |
| 191 NULL, | |
| 192 "PROXY http1:80;PROXY http2:80", | |
| 193 NULL, | |
| 194 "PROXY ftp1:80;PROXY ftp2:80;PROXY ftp3:80", | |
| 195 NULL, | |
| 196 }, | |
| 197 | |
| 198 // Include non-default proxy schemes. | |
| 199 { | |
| 200 "http=https://secure_proxy; ftp=socks4://socks_proxy; https=socks://foo", | |
| 201 | |
| 202 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | |
| 203 NULL, | |
| 204 "HTTPS secure_proxy:443", | |
| 205 "SOCKS5 foo:1080", | |
| 206 "SOCKS socks_proxy:1080", | |
| 207 NULL, | |
| 208 }, | |
| 209 | |
| 210 | |
| 185 // Only SOCKS proxy present, others being blank. | 211 // Only SOCKS proxy present, others being blank. |
| 186 { | 212 { |
| 187 "socks=foopy", | 213 "socks=foopy", |
| 188 | 214 |
| 189 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 215 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 190 NULL, | 216 NULL, |
| 191 NULL, | 217 NULL, |
| 192 NULL, | 218 NULL, |
| 193 NULL, | 219 NULL, |
| 194 "socks4://foopy:1080", | 220 "SOCKS foopy:1080", |
| 195 }, | 221 }, |
| 196 | 222 |
| 197 // SOCKS proxy present along with other proxies too | 223 // SOCKS proxy present along with other proxies too |
| 198 { | 224 { |
| 199 "http=httpproxy ; https=httpsproxy ; ftp=ftpproxy ; socks=foopy ", | 225 "http=httpproxy ; https=httpsproxy ; ftp=ftpproxy ; socks=foopy ", |
| 200 | 226 |
| 201 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 227 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 202 NULL, | 228 NULL, |
| 203 "httpproxy:80", | 229 "PROXY httpproxy:80", |
| 204 "httpsproxy:80", | 230 "PROXY httpsproxy:80", |
| 205 "ftpproxy:80", | 231 "PROXY ftpproxy:80", |
| 206 "socks4://foopy:1080", | 232 "SOCKS foopy:1080", |
| 207 }, | 233 }, |
| 208 | 234 |
| 209 // SOCKS proxy (with modifier) present along with some proxies | 235 // SOCKS proxy (with modifier) present along with some proxies |
| 210 // (FTP being blank) | 236 // (FTP being blank) |
| 211 { | 237 { |
| 212 "http=httpproxy ; https=httpsproxy ; socks=socks5://foopy ", | 238 "http=httpproxy ; https=httpsproxy ; socks=socks5://foopy ", |
| 213 | 239 |
| 214 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 240 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 215 NULL, | 241 NULL, |
| 216 "httpproxy:80", | 242 "PROXY httpproxy:80", |
| 217 "httpsproxy:80", | 243 "PROXY httpsproxy:80", |
| 218 NULL, | 244 NULL, |
| 219 "socks5://foopy:1080", | 245 "SOCKS5 foopy:1080", |
| 220 }, | 246 }, |
| 221 | 247 |
| 222 // Include unsupported schemes -- they are discarded. | 248 // Include unsupported schemes -- they are discarded. |
| 223 { | 249 { |
| 224 "crazy=foopy ; foo=bar ; https=myhttpsproxy", | 250 "crazy=foopy ; foo=bar ; https=myhttpsproxy", |
| 225 | 251 |
| 226 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 252 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 227 NULL, | 253 NULL, |
| 228 NULL, | 254 NULL, |
| 229 "myhttpsproxy:80", | 255 "PROXY myhttpsproxy:80", |
| 230 NULL, | 256 NULL, |
| 231 NULL, | 257 NULL, |
| 232 }, | 258 }, |
| 259 | |
| 260 // direct:// discarded as a first or only option for a scheme. | |
| 261 { | |
| 262 "http=direct://,myhttpproxy; https=direct://", | |
| 263 | |
| 264 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | |
| 265 NULL, | |
| 266 "DIRECT;PROXY myhttpproxy:80", | |
| 267 "DIRECT", | |
| 268 NULL, | |
| 269 NULL, | |
| 270 }, | |
| 271 | |
| 272 // direct:// kept as a second option for a scheme. | |
| 273 { | |
| 274 "http=myhttpproxy,direct://", | |
| 275 | |
| 276 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | |
| 277 NULL, | |
| 278 "PROXY myhttpproxy:80;DIRECT", | |
| 279 NULL, | |
| 280 NULL, | |
| 281 NULL, | |
| 282 }, | |
| 283 | |
| 233 }; | 284 }; |
| 234 | 285 |
| 235 ProxyConfig config; | 286 ProxyConfig config; |
| 236 | 287 |
| 237 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 288 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
| 238 config.proxy_rules().ParseFromString(tests[i].proxy_rules); | 289 config.proxy_rules().ParseFromString(tests[i].proxy_rules); |
| 239 | 290 |
| 240 EXPECT_EQ(tests[i].type, config.proxy_rules().type); | 291 EXPECT_EQ(tests[i].type, config.proxy_rules().type); |
| 241 ExpectProxyServerEquals(tests[i].single_proxy, | 292 ExpectProxyServerEquals(tests[i].single_proxy, |
| 242 config.proxy_rules().single_proxy); | 293 config.proxy_rules().single_proxies); |
| 243 ExpectProxyServerEquals(tests[i].proxy_for_http, | 294 ExpectProxyServerEquals(tests[i].proxy_for_http, |
| 244 config.proxy_rules().proxy_for_http); | 295 config.proxy_rules().proxies_for_http); |
| 245 ExpectProxyServerEquals(tests[i].proxy_for_https, | 296 ExpectProxyServerEquals(tests[i].proxy_for_https, |
| 246 config.proxy_rules().proxy_for_https); | 297 config.proxy_rules().proxies_for_https); |
| 247 ExpectProxyServerEquals(tests[i].proxy_for_ftp, | 298 ExpectProxyServerEquals(tests[i].proxy_for_ftp, |
| 248 config.proxy_rules().proxy_for_ftp); | 299 config.proxy_rules().proxies_for_ftp); |
| 249 ExpectProxyServerEquals(tests[i].fallback_proxy, | 300 ExpectProxyServerEquals(tests[i].fallback_proxy, |
| 250 config.proxy_rules().fallback_proxy); | 301 config.proxy_rules().fallback_proxies); |
| 251 } | 302 } |
| 252 } | 303 } |
| 253 | 304 |
| 254 TEST(ProxyConfigTest, ProxyRulesSetBypassFlag) { | 305 TEST(ProxyConfigTest, ProxyRulesSetBypassFlag) { |
| 255 // Test whether the did_bypass_proxy() flag is set in proxy info correctly. | 306 // Test whether the did_bypass_proxy() flag is set in proxy info correctly. |
| 256 ProxyConfig::ProxyRules rules; | 307 ProxyConfig::ProxyRules rules; |
| 257 ProxyInfo result; | 308 ProxyInfo result; |
| 258 | 309 |
| 259 rules.ParseFromString("http=httpproxy:80"); | 310 rules.ParseFromString("http=httpproxy:80"); |
| 260 rules.bypass_rules.AddRuleFromString(".com"); | 311 rules.bypass_rules.AddRuleFromString(".com"); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 274 EXPECT_TRUE(result.is_direct_only()); | 325 EXPECT_TRUE(result.is_direct_only()); |
| 275 EXPECT_TRUE(result.did_bypass_proxy()); | 326 EXPECT_TRUE(result.did_bypass_proxy()); |
| 276 | 327 |
| 277 rules.Apply(GURL("http://example.com"), &result); | 328 rules.Apply(GURL("http://example.com"), &result); |
| 278 EXPECT_FALSE(result.is_direct()); | 329 EXPECT_FALSE(result.is_direct()); |
| 279 EXPECT_FALSE(result.did_bypass_proxy()); | 330 EXPECT_FALSE(result.did_bypass_proxy()); |
| 280 } | 331 } |
| 281 | 332 |
| 282 } // namespace | 333 } // namespace |
| 283 } // namespace net | 334 } // namespace net |
| OLD | NEW |