OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 <ostream> |
| 6 |
5 #include "net/proxy/proxy_config.h" | 7 #include "net/proxy/proxy_config.h" |
6 #include "net/proxy/proxy_config_service_common_unittest.h" | 8 #include "net/proxy/proxy_config_service_common_unittest.h" |
7 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
8 | 10 |
| 11 namespace net { |
9 namespace { | 12 namespace { |
10 static void ExpectProxyServerEquals(const char* expectation, | 13 |
11 const net::ProxyServer& proxy_server) { | 14 void ExpectProxyServerEquals(const char* expectation, |
| 15 const ProxyServer& proxy_server) { |
12 if (expectation == NULL) { | 16 if (expectation == NULL) { |
13 EXPECT_FALSE(proxy_server.is_valid()); | 17 EXPECT_FALSE(proxy_server.is_valid()); |
14 } else { | 18 } else { |
15 EXPECT_EQ(expectation, proxy_server.ToURI()); | 19 EXPECT_EQ(expectation, proxy_server.ToURI()); |
16 } | 20 } |
17 } | 21 } |
18 } | |
19 | 22 |
20 TEST(ProxyConfigTest, Equals) { | 23 TEST(ProxyConfigTest, Equals) { |
21 // Test |ProxyConfig::auto_detect|. | 24 // Test |ProxyConfig::auto_detect|. |
22 | 25 |
23 net::ProxyConfig config1; | 26 ProxyConfig config1; |
24 config1.auto_detect = true; | 27 config1.auto_detect = true; |
25 | 28 |
26 net::ProxyConfig config2; | 29 ProxyConfig config2; |
27 config2.auto_detect = false; | 30 config2.auto_detect = false; |
28 | 31 |
29 EXPECT_FALSE(config1.Equals(config2)); | 32 EXPECT_FALSE(config1.Equals(config2)); |
30 EXPECT_FALSE(config2.Equals(config1)); | 33 EXPECT_FALSE(config2.Equals(config1)); |
31 | 34 |
32 config2.auto_detect = true; | 35 config2.auto_detect = true; |
33 | 36 |
34 EXPECT_TRUE(config1.Equals(config2)); | 37 EXPECT_TRUE(config1.Equals(config2)); |
35 EXPECT_TRUE(config2.Equals(config1)); | 38 EXPECT_TRUE(config2.Equals(config1)); |
36 | 39 |
37 // Test |ProxyConfig::pac_url|. | 40 // Test |ProxyConfig::pac_url|. |
38 | 41 |
39 config2.pac_url = GURL("http://wpad/wpad.dat"); | 42 config2.pac_url = GURL("http://wpad/wpad.dat"); |
40 | 43 |
41 EXPECT_FALSE(config1.Equals(config2)); | 44 EXPECT_FALSE(config1.Equals(config2)); |
42 EXPECT_FALSE(config2.Equals(config1)); | 45 EXPECT_FALSE(config2.Equals(config1)); |
43 | 46 |
44 config1.pac_url = GURL("http://wpad/wpad.dat"); | 47 config1.pac_url = GURL("http://wpad/wpad.dat"); |
45 | 48 |
46 EXPECT_TRUE(config1.Equals(config2)); | 49 EXPECT_TRUE(config1.Equals(config2)); |
47 EXPECT_TRUE(config2.Equals(config1)); | 50 EXPECT_TRUE(config2.Equals(config1)); |
48 | 51 |
49 // Test |ProxyConfig::proxy_rules|. | 52 // Test |ProxyConfig::proxy_rules|. |
50 | 53 |
51 config2.proxy_rules.type = net::ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; | 54 config2.proxy_rules.type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; |
52 config2.proxy_rules.single_proxy = | 55 config2.proxy_rules.single_proxy = |
53 net::ProxyServer::FromURI("myproxy:80", net::ProxyServer::SCHEME_HTTP); | 56 ProxyServer::FromURI("myproxy:80", ProxyServer::SCHEME_HTTP); |
54 | 57 |
55 EXPECT_FALSE(config1.Equals(config2)); | 58 EXPECT_FALSE(config1.Equals(config2)); |
56 EXPECT_FALSE(config2.Equals(config1)); | 59 EXPECT_FALSE(config2.Equals(config1)); |
57 | 60 |
58 config1.proxy_rules.type = net::ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; | 61 config1.proxy_rules.type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; |
59 config1.proxy_rules.single_proxy = | 62 config1.proxy_rules.single_proxy = |
60 net::ProxyServer::FromURI("myproxy:100", net::ProxyServer::SCHEME_HTTP); | 63 ProxyServer::FromURI("myproxy:100", ProxyServer::SCHEME_HTTP); |
61 | 64 |
62 EXPECT_FALSE(config1.Equals(config2)); | 65 EXPECT_FALSE(config1.Equals(config2)); |
63 EXPECT_FALSE(config2.Equals(config1)); | 66 EXPECT_FALSE(config2.Equals(config1)); |
64 | 67 |
65 config1.proxy_rules.single_proxy = | 68 config1.proxy_rules.single_proxy = |
66 net::ProxyServer::FromURI("myproxy", net::ProxyServer::SCHEME_HTTP); | 69 ProxyServer::FromURI("myproxy", ProxyServer::SCHEME_HTTP); |
67 | 70 |
68 EXPECT_TRUE(config1.Equals(config2)); | 71 EXPECT_TRUE(config1.Equals(config2)); |
69 EXPECT_TRUE(config2.Equals(config1)); | 72 EXPECT_TRUE(config2.Equals(config1)); |
70 | 73 |
71 // Test |ProxyConfig::proxy_bypass|. | 74 // Test |ProxyConfig::proxy_bypass|. |
72 | 75 |
73 config2.proxy_bypass.push_back("*.google.com"); | 76 config2.proxy_bypass.push_back("*.google.com"); |
74 | 77 |
75 EXPECT_FALSE(config1.Equals(config2)); | 78 EXPECT_FALSE(config1.Equals(config2)); |
76 EXPECT_FALSE(config2.Equals(config1)); | 79 EXPECT_FALSE(config2.Equals(config1)); |
(...skipping 13 matching lines...) Expand all Loading... |
90 config2.proxy_bypass_local_names = true; | 93 config2.proxy_bypass_local_names = true; |
91 | 94 |
92 EXPECT_TRUE(config1.Equals(config2)); | 95 EXPECT_TRUE(config1.Equals(config2)); |
93 EXPECT_TRUE(config2.Equals(config1)); | 96 EXPECT_TRUE(config2.Equals(config1)); |
94 } | 97 } |
95 | 98 |
96 TEST(ProxyConfigTest, ParseProxyRules) { | 99 TEST(ProxyConfigTest, ParseProxyRules) { |
97 const struct { | 100 const struct { |
98 const char* proxy_rules; | 101 const char* proxy_rules; |
99 | 102 |
100 net::ProxyConfig::ProxyRules::Type type; | 103 ProxyConfig::ProxyRules::Type type; |
101 const char* single_proxy; | 104 const char* single_proxy; |
102 const char* proxy_for_http; | 105 const char* proxy_for_http; |
103 const char* proxy_for_https; | 106 const char* proxy_for_https; |
104 const char* proxy_for_ftp; | 107 const char* proxy_for_ftp; |
105 const char* socks_proxy; | 108 const char* socks_proxy; |
106 } tests[] = { | 109 } tests[] = { |
107 // One HTTP proxy for all schemes. | 110 // One HTTP proxy for all schemes. |
108 { | 111 { |
109 "myproxy:80", | 112 "myproxy:80", |
110 | 113 |
111 net::ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, | 114 ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, |
112 "myproxy:80", | 115 "myproxy:80", |
113 NULL, | 116 NULL, |
114 NULL, | 117 NULL, |
115 NULL, | 118 NULL, |
116 NULL, | 119 NULL, |
117 }, | 120 }, |
118 | 121 |
119 // Only specify a proxy server for "http://" urls. | 122 // Only specify a proxy server for "http://" urls. |
120 { | 123 { |
121 "http=myproxy:80", | 124 "http=myproxy:80", |
122 | 125 |
123 net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 126 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
124 NULL, | 127 NULL, |
125 "myproxy:80", | 128 "myproxy:80", |
126 NULL, | 129 NULL, |
127 NULL, | 130 NULL, |
128 NULL, | 131 NULL, |
129 }, | 132 }, |
130 | 133 |
131 // 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. |
132 { | 135 { |
133 "ftp=ftp-proxy ; https=socks4://foopy", | 136 "ftp=ftp-proxy ; https=socks4://foopy", |
134 | 137 |
135 net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 138 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
136 NULL, | 139 NULL, |
137 NULL, | 140 NULL, |
138 "socks4://foopy:1080", | 141 "socks4://foopy:1080", |
139 "ftp-proxy:80", | 142 "ftp-proxy:80", |
140 NULL, | 143 NULL, |
141 }, | 144 }, |
142 | 145 |
143 // 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. |
144 // The first entry "foopy" takes precedance marking this list as | 147 // The first entry "foopy" takes precedance marking this list as |
145 // TYPE_SINGLE_PROXY. | 148 // TYPE_SINGLE_PROXY. |
146 { | 149 { |
147 "foopy ; ftp=ftp-proxy", | 150 "foopy ; ftp=ftp-proxy", |
148 | 151 |
149 net::ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, | 152 ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, |
150 "foopy:80", | 153 "foopy:80", |
151 NULL, | 154 NULL, |
152 NULL, | 155 NULL, |
153 NULL, | 156 NULL, |
154 NULL, | 157 NULL, |
155 }, | 158 }, |
156 | 159 |
157 // 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. |
158 // 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 |
159 // TYPE_PROXY_PER_SCHEME. | 162 // TYPE_PROXY_PER_SCHEME. |
160 { | 163 { |
161 "ftp=ftp-proxy ; foopy", | 164 "ftp=ftp-proxy ; foopy", |
162 | 165 |
163 net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 166 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
164 NULL, | 167 NULL, |
165 NULL, | 168 NULL, |
166 NULL, | 169 NULL, |
167 "ftp-proxy:80", | 170 "ftp-proxy:80", |
168 NULL, | 171 NULL, |
169 }, | 172 }, |
170 | 173 |
171 // Include duplicate entries -- last one wins. | 174 // Include duplicate entries -- last one wins. |
172 { | 175 { |
173 "ftp=ftp1 ; ftp=ftp2 ; ftp=ftp3", | 176 "ftp=ftp1 ; ftp=ftp2 ; ftp=ftp3", |
174 | 177 |
175 net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 178 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
176 NULL, | 179 NULL, |
177 NULL, | 180 NULL, |
178 NULL, | 181 NULL, |
179 "ftp3:80", | 182 "ftp3:80", |
180 NULL, | 183 NULL, |
181 }, | 184 }, |
182 | 185 |
183 // Only SOCKS proxy present, others being blank. | 186 // Only SOCKS proxy present, others being blank. |
184 { | 187 { |
185 "socks=foopy", | 188 "socks=foopy", |
186 | 189 |
187 net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 190 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
188 NULL, | 191 NULL, |
189 NULL, | 192 NULL, |
190 NULL, | 193 NULL, |
191 NULL, | 194 NULL, |
192 "socks4://foopy:1080", | 195 "socks4://foopy:1080", |
193 }, | 196 }, |
194 | 197 |
195 // SOCKS proxy present along with other proxies too | 198 // SOCKS proxy present along with other proxies too |
196 { | 199 { |
197 "http=httpproxy ; https=httpsproxy ; ftp=ftpproxy ; socks=foopy ", | 200 "http=httpproxy ; https=httpsproxy ; ftp=ftpproxy ; socks=foopy ", |
198 | 201 |
199 net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 202 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
200 NULL, | 203 NULL, |
201 "httpproxy:80", | 204 "httpproxy:80", |
202 "httpsproxy:80", | 205 "httpsproxy:80", |
203 "ftpproxy:80", | 206 "ftpproxy:80", |
204 "socks4://foopy:1080", | 207 "socks4://foopy:1080", |
205 }, | 208 }, |
206 | 209 |
207 // SOCKS proxy (with modifier) present along with some proxies | 210 // SOCKS proxy (with modifier) present along with some proxies |
208 // (FTP being blank) | 211 // (FTP being blank) |
209 { | 212 { |
210 "http=httpproxy ; https=httpsproxy ; socks=socks5://foopy ", | 213 "http=httpproxy ; https=httpsproxy ; socks=socks5://foopy ", |
211 | 214 |
212 net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 215 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
213 NULL, | 216 NULL, |
214 "httpproxy:80", | 217 "httpproxy:80", |
215 "httpsproxy:80", | 218 "httpsproxy:80", |
216 NULL, | 219 NULL, |
217 "socks5://foopy:1080", | 220 "socks5://foopy:1080", |
218 }, | 221 }, |
219 | 222 |
220 // Include unsupported schemes -- they are discarded. | 223 // Include unsupported schemes -- they are discarded. |
221 { | 224 { |
222 "crazy=foopy ; foo=bar ; https=myhttpsproxy", | 225 "crazy=foopy ; foo=bar ; https=myhttpsproxy", |
223 | 226 |
224 net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 227 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
225 NULL, | 228 NULL, |
226 NULL, | 229 NULL, |
227 "myhttpsproxy:80", | 230 "myhttpsproxy:80", |
228 NULL, | 231 NULL, |
229 NULL, | 232 NULL, |
230 }, | 233 }, |
231 }; | 234 }; |
232 | 235 |
233 net::ProxyConfig config; | 236 ProxyConfig config; |
234 | 237 |
235 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 238 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
236 config.proxy_rules.ParseFromString(tests[i].proxy_rules); | 239 config.proxy_rules.ParseFromString(tests[i].proxy_rules); |
237 | 240 |
238 EXPECT_EQ(tests[i].type, config.proxy_rules.type); | 241 EXPECT_EQ(tests[i].type, config.proxy_rules.type); |
239 ExpectProxyServerEquals(tests[i].single_proxy, | 242 ExpectProxyServerEquals(tests[i].single_proxy, |
240 config.proxy_rules.single_proxy); | 243 config.proxy_rules.single_proxy); |
241 ExpectProxyServerEquals(tests[i].proxy_for_http, | 244 ExpectProxyServerEquals(tests[i].proxy_for_http, |
242 config.proxy_rules.proxy_for_http); | 245 config.proxy_rules.proxy_for_http); |
243 ExpectProxyServerEquals(tests[i].proxy_for_https, | 246 ExpectProxyServerEquals(tests[i].proxy_for_https, |
(...skipping 22 matching lines...) Expand all Loading... |
266 { | 269 { |
267 ".google.com, .foo.com:42", | 270 ".google.com, .foo.com:42", |
268 "*.google.com\n*.foo.com:42\n" | 271 "*.google.com\n*.foo.com:42\n" |
269 }, | 272 }, |
270 { | 273 { |
271 ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8", | 274 ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8", |
272 "*.google.com\n*foo.com:99\n1.2.3.4:22\n127.0.0.1/8\n" | 275 "*.google.com\n*foo.com:99\n1.2.3.4:22\n127.0.0.1/8\n" |
273 } | 276 } |
274 }; | 277 }; |
275 | 278 |
276 net::ProxyConfig config; | 279 ProxyConfig config; |
277 | 280 |
278 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 281 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
279 config.ParseNoProxyList(tests[i].proxy_bypass_input); | 282 config.ParseNoProxyList(tests[i].proxy_bypass_input); |
280 EXPECT_EQ(tests[i].flattened_output, | 283 EXPECT_EQ(tests[i].flattened_output, |
281 net::FlattenProxyBypass(config.proxy_bypass)); | 284 FlattenProxyBypass(config.proxy_bypass)); |
282 } | 285 } |
283 } | 286 } |
| 287 |
| 288 std::string ProxyConfigToString(const ProxyConfig& config) { |
| 289 std::ostringstream stream; |
| 290 stream << config; |
| 291 return stream.str(); |
| 292 } |
| 293 |
| 294 TEST(ProxyConfigTest, ToString) { |
| 295 // Manual proxy. |
| 296 { |
| 297 ProxyConfig config; |
| 298 config.auto_detect = false; |
| 299 config.proxy_rules.ParseFromString("http://single-proxy:81"); |
| 300 |
| 301 EXPECT_EQ("Automatic settings:\n" |
| 302 " Auto-detect: No\n" |
| 303 " Custom PAC script: [None]\n" |
| 304 "Manual settings:\n" |
| 305 " Proxy server: single-proxy:81\n" |
| 306 " Bypass list: [None]\n" |
| 307 " Bypass local names: No", |
| 308 ProxyConfigToString(config)); |
| 309 } |
| 310 |
| 311 // Autodetect + custom PAC + manual proxy. |
| 312 { |
| 313 ProxyConfig config; |
| 314 config.auto_detect = true; |
| 315 config.pac_url = GURL("http://custom/pac.js"); |
| 316 config.proxy_rules.ParseFromString("http://single-proxy:81"); |
| 317 |
| 318 EXPECT_EQ("Automatic settings:\n" |
| 319 " Auto-detect: Yes\n" |
| 320 " Custom PAC script: http://custom/pac.js\n" |
| 321 "Manual settings:\n" |
| 322 " Proxy server: single-proxy:81\n" |
| 323 " Bypass list: [None]\n" |
| 324 " Bypass local names: No", |
| 325 ProxyConfigToString(config)); |
| 326 } |
| 327 |
| 328 // Manual proxy with bypass list + bypass local. |
| 329 { |
| 330 ProxyConfig config; |
| 331 config.auto_detect = false; |
| 332 config.proxy_rules.ParseFromString("http://single-proxy:81"); |
| 333 config.proxy_bypass.push_back("google.com"); |
| 334 config.proxy_bypass.push_back("bypass2.net:1730"); |
| 335 config.proxy_bypass_local_names = true; |
| 336 |
| 337 EXPECT_EQ("Automatic settings:\n" |
| 338 " Auto-detect: No\n" |
| 339 " Custom PAC script: [None]\n" |
| 340 "Manual settings:\n" |
| 341 " Proxy server: single-proxy:81\n" |
| 342 " Bypass list: \n" |
| 343 " google.com\n" |
| 344 " bypass2.net:1730\n" |
| 345 " Bypass local names: Yes", |
| 346 ProxyConfigToString(config)); |
| 347 } |
| 348 |
| 349 // Proxy-per scheme (HTTP and HTTPS) |
| 350 { |
| 351 ProxyConfig config; |
| 352 config.auto_detect = false; |
| 353 config.proxy_rules.ParseFromString( |
| 354 "http=proxy-for-http:1801; https=proxy-for-https:1802"); |
| 355 |
| 356 EXPECT_EQ("Automatic settings:\n" |
| 357 " Auto-detect: No\n" |
| 358 " Custom PAC script: [None]\n" |
| 359 "Manual settings:\n" |
| 360 " Proxy server: \n" |
| 361 " HTTP: proxy-for-http:1801\n" |
| 362 " HTTPS: proxy-for-https:1802\n" |
| 363 " Bypass list: [None]\n" |
| 364 " Bypass local names: No", |
| 365 ProxyConfigToString(config)); |
| 366 } |
| 367 |
| 368 // Proxy-per scheme (HTTP and SOCKS) |
| 369 { |
| 370 ProxyConfig config; |
| 371 config.auto_detect = false; |
| 372 config.proxy_rules.ParseFromString( |
| 373 "http=http://proxy-for-http:1801; socks=socks-server:6083"); |
| 374 |
| 375 EXPECT_EQ("Automatic settings:\n" |
| 376 " Auto-detect: No\n" |
| 377 " Custom PAC script: [None]\n" |
| 378 "Manual settings:\n" |
| 379 " Proxy server: \n" |
| 380 " HTTP: proxy-for-http:1801\n" |
| 381 " SOCKS: socks4://socks-server:6083\n" |
| 382 " Bypass list: [None]\n" |
| 383 " Bypass local names: No", |
| 384 ProxyConfigToString(config)); |
| 385 } |
| 386 |
| 387 // No proxy. |
| 388 { |
| 389 ProxyConfig config; |
| 390 config.auto_detect = false; |
| 391 |
| 392 EXPECT_EQ("Automatic settings:\n" |
| 393 " Auto-detect: No\n" |
| 394 " Custom PAC script: [None]\n" |
| 395 "Manual settings:\n" |
| 396 " Proxy server: [None]\n" |
| 397 " Bypass list: [None]\n" |
| 398 " Bypass local names: No", |
| 399 ProxyConfigToString(config)); |
| 400 } |
| 401 } |
| 402 |
| 403 } // namespace |
| 404 } // namespace net |
| 405 |
OLD | NEW |