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 a list of entries for a single scheme. |
| 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 multiple entries for the same scheme -- they accumulate. | |
| 187 { | |
| 188 "http=http1,http2; http=http3", | |
| 189 | |
| 190 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | |
| 191 NULL, | |
| 192 "PROXY http1:80;PROXY http2:80;PROXY http3:80", | |
| 193 NULL, | |
| 194 NULL, | |
| 195 NULL, | |
| 196 }, | |
| 197 | |
| 198 // Include lists of entries for multiple schemes. | |
| 199 { | |
| 200 "ftp=ftp1,ftp2,ftp3 ; http=http1,http2; ", | |
| 201 | |
| 202 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | |
| 203 NULL, | |
| 204 "PROXY http1:80;PROXY http2:80", | |
| 205 NULL, | |
| 206 "PROXY ftp1:80;PROXY ftp2:80;PROXY ftp3:80", | |
| 207 NULL, | |
| 208 }, | |
| 209 | |
| 210 // Include non-default proxy schemes. | |
| 211 { | |
| 212 "http=https://secure_proxy; ftp=socks4://socks_proxy; https=socks://foo", | |
| 213 | |
| 214 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | |
| 215 NULL, | |
| 216 "HTTPS secure_proxy:443", | |
| 217 "SOCKS5 foo:1080", | |
| 218 "SOCKS socks_proxy:1080", | |
| 219 NULL, | |
| 220 }, | |
| 221 | |
| 185 // Only SOCKS proxy present, others being blank. | 222 // Only SOCKS proxy present, others being blank. |
| 186 { | 223 { |
| 187 "socks=foopy", | 224 "socks=foopy", |
| 188 | 225 |
| 189 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 226 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 190 NULL, | 227 NULL, |
| 191 NULL, | 228 NULL, |
| 192 NULL, | 229 NULL, |
| 193 NULL, | 230 NULL, |
| 194 "socks4://foopy:1080", | 231 "SOCKS foopy:1080", |
| 195 }, | 232 }, |
| 196 | 233 |
| 197 // SOCKS proxy present along with other proxies too | 234 // SOCKS proxy present along with other proxies too |
| 198 { | 235 { |
| 199 "http=httpproxy ; https=httpsproxy ; ftp=ftpproxy ; socks=foopy ", | 236 "http=httpproxy ; https=httpsproxy ; ftp=ftpproxy ; socks=foopy ", |
| 200 | 237 |
| 201 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 238 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 202 NULL, | 239 NULL, |
| 203 "httpproxy:80", | 240 "PROXY httpproxy:80", |
| 204 "httpsproxy:80", | 241 "PROXY httpsproxy:80", |
| 205 "ftpproxy:80", | 242 "PROXY ftpproxy:80", |
| 206 "socks4://foopy:1080", | 243 "SOCKS foopy:1080", |
| 207 }, | 244 }, |
| 208 | 245 |
| 209 // SOCKS proxy (with modifier) present along with some proxies | 246 // SOCKS proxy (with modifier) present along with some proxies |
| 210 // (FTP being blank) | 247 // (FTP being blank) |
| 211 { | 248 { |
| 212 "http=httpproxy ; https=httpsproxy ; socks=socks5://foopy ", | 249 "http=httpproxy ; https=httpsproxy ; socks=socks5://foopy ", |
| 213 | 250 |
| 214 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 251 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 215 NULL, | 252 NULL, |
| 216 "httpproxy:80", | 253 "PROXY httpproxy:80", |
| 217 "httpsproxy:80", | 254 "PROXY httpsproxy:80", |
| 218 NULL, | 255 NULL, |
| 219 "socks5://foopy:1080", | 256 "SOCKS5 foopy:1080", |
| 220 }, | 257 }, |
| 221 | 258 |
| 222 // Include unsupported schemes -- they are discarded. | 259 // Include unsupported schemes -- they are discarded. |
| 223 { | 260 { |
| 224 "crazy=foopy ; foo=bar ; https=myhttpsproxy", | 261 "crazy=foopy ; foo=bar ; https=myhttpsproxy", |
| 225 | 262 |
| 226 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 263 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 227 NULL, | 264 NULL, |
| 228 NULL, | 265 NULL, |
| 229 "myhttpsproxy:80", | 266 "PROXY myhttpsproxy:80", |
| 230 NULL, | 267 NULL, |
| 231 NULL, | 268 NULL, |
| 232 }, | 269 }, |
| 270 | |
| 271 // direct:// discarded as a first or only option for a scheme. | |
|
eroman
2013/03/05 01:55:55
This comment is no longer applicable.
marq_use_my_chromium_address
2013/03/05 22:52:40
Done.
| |
| 272 { | |
| 273 "http=direct://,myhttpproxy; https=direct://", | |
| 274 | |
| 275 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | |
| 276 NULL, | |
| 277 "DIRECT;PROXY myhttpproxy:80", | |
| 278 "DIRECT", | |
| 279 NULL, | |
| 280 NULL, | |
| 281 }, | |
| 282 | |
| 283 // direct:// kept as a second option for a scheme. | |
| 284 { | |
| 285 "http=myhttpproxy,direct://", | |
| 286 | |
| 287 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | |
| 288 NULL, | |
| 289 "PROXY myhttpproxy:80;DIRECT", | |
| 290 NULL, | |
| 291 NULL, | |
| 292 NULL, | |
| 293 }, | |
| 294 | |
| 233 }; | 295 }; |
| 234 | 296 |
| 235 ProxyConfig config; | 297 ProxyConfig config; |
| 236 | 298 |
| 237 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 299 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
| 238 config.proxy_rules().ParseFromString(tests[i].proxy_rules); | 300 config.proxy_rules().ParseFromString(tests[i].proxy_rules); |
| 239 | 301 |
| 240 EXPECT_EQ(tests[i].type, config.proxy_rules().type); | 302 EXPECT_EQ(tests[i].type, config.proxy_rules().type); |
| 241 ExpectProxyServerEquals(tests[i].single_proxy, | 303 ExpectProxyServerEquals(tests[i].single_proxy, |
| 242 config.proxy_rules().single_proxy); | 304 config.proxy_rules().single_proxies); |
| 243 ExpectProxyServerEquals(tests[i].proxy_for_http, | 305 ExpectProxyServerEquals(tests[i].proxy_for_http, |
| 244 config.proxy_rules().proxy_for_http); | 306 config.proxy_rules().proxies_for_http); |
| 245 ExpectProxyServerEquals(tests[i].proxy_for_https, | 307 ExpectProxyServerEquals(tests[i].proxy_for_https, |
| 246 config.proxy_rules().proxy_for_https); | 308 config.proxy_rules().proxies_for_https); |
| 247 ExpectProxyServerEquals(tests[i].proxy_for_ftp, | 309 ExpectProxyServerEquals(tests[i].proxy_for_ftp, |
| 248 config.proxy_rules().proxy_for_ftp); | 310 config.proxy_rules().proxies_for_ftp); |
| 249 ExpectProxyServerEquals(tests[i].fallback_proxy, | 311 ExpectProxyServerEquals(tests[i].fallback_proxy, |
| 250 config.proxy_rules().fallback_proxy); | 312 config.proxy_rules().fallback_proxies); |
| 251 } | 313 } |
| 252 } | 314 } |
| 253 | 315 |
| 254 TEST(ProxyConfigTest, ProxyRulesSetBypassFlag) { | 316 TEST(ProxyConfigTest, ProxyRulesSetBypassFlag) { |
| 255 // Test whether the did_bypass_proxy() flag is set in proxy info correctly. | 317 // Test whether the did_bypass_proxy() flag is set in proxy info correctly. |
| 256 ProxyConfig::ProxyRules rules; | 318 ProxyConfig::ProxyRules rules; |
| 257 ProxyInfo result; | 319 ProxyInfo result; |
| 258 | 320 |
| 259 rules.ParseFromString("http=httpproxy:80"); | 321 rules.ParseFromString("http=httpproxy:80"); |
| 260 rules.bypass_rules.AddRuleFromString(".com"); | 322 rules.bypass_rules.AddRuleFromString(".com"); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 274 EXPECT_TRUE(result.is_direct_only()); | 336 EXPECT_TRUE(result.is_direct_only()); |
| 275 EXPECT_TRUE(result.did_bypass_proxy()); | 337 EXPECT_TRUE(result.did_bypass_proxy()); |
| 276 | 338 |
| 277 rules.Apply(GURL("http://example.com"), &result); | 339 rules.Apply(GURL("http://example.com"), &result); |
| 278 EXPECT_FALSE(result.is_direct()); | 340 EXPECT_FALSE(result.is_direct()); |
| 279 EXPECT_FALSE(result.did_bypass_proxy()); | 341 EXPECT_FALSE(result.did_bypass_proxy()); |
| 280 } | 342 } |
| 281 | 343 |
| 282 } // namespace | 344 } // namespace |
| 283 } // namespace net | 345 } // namespace net |
| OLD | NEW |