Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(526)

Side by Side Diff: net/proxy/proxy_config_unittest.cc

Issue 12315019: Change ProxyRules to handle ProxyLists rather than just single ProxyServer instances. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/proxy/proxy_config_service_mac.cc ('k') | net/proxy/proxy_info.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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,
119 NULL,
120 },
121
122 // Multiple HTTP proxies for all schemes.
123 {
124 "myproxy:80,https://myotherproxy",
125
126 ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY,
127 "PROXY myproxy:80;HTTPS myotherproxy:443",
128 NULL,
129 NULL,
130 NULL,
118 NULL, 131 NULL,
119 }, 132 },
120 133
121 // Only specify a proxy server for "http://" urls. 134 // Only specify a proxy server for "http://" urls.
122 { 135 {
123 "http=myproxy:80", 136 "http=myproxy:80",
124 137
125 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 138 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
126 NULL, 139 NULL,
127 "myproxy:80", 140 "PROXY myproxy:80",
128 NULL, 141 NULL,
129 NULL, 142 NULL,
130 NULL, 143 NULL,
131 }, 144 },
132 145
133 // Specify an HTTP proxy for "ftp://" and a SOCKS proxy for "https://" urls. 146 // Specify an HTTP proxy for "ftp://" and a SOCKS proxy for "https://" urls.
134 { 147 {
135 "ftp=ftp-proxy ; https=socks4://foopy", 148 "ftp=ftp-proxy ; https=socks4://foopy",
136 149
137 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 150 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
138 NULL, 151 NULL,
139 NULL, 152 NULL,
140 "socks4://foopy:1080", 153 "SOCKS foopy:1080",
141 "ftp-proxy:80", 154 "PROXY ftp-proxy:80",
142 NULL, 155 NULL,
143 }, 156 },
144 157
145 // Give a scheme-specific proxy as well as a non-scheme specific. 158 // Give a scheme-specific proxy as well as a non-scheme specific.
146 // The first entry "foopy" takes precedance marking this list as 159 // The first entry "foopy" takes precedance marking this list as
147 // TYPE_SINGLE_PROXY. 160 // TYPE_SINGLE_PROXY.
148 { 161 {
149 "foopy ; ftp=ftp-proxy", 162 "foopy ; ftp=ftp-proxy",
150 163
151 ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY, 164 ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY,
152 "foopy:80", 165 "PROXY foopy:80",
153 NULL, 166 NULL,
154 NULL, 167 NULL,
155 NULL, 168 NULL,
156 NULL, 169 NULL,
157 }, 170 },
158 171
159 // Give a scheme-specific proxy as well as a non-scheme specific. 172 // 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 173 // The first entry "ftp=ftp-proxy" takes precedance marking this list as
161 // TYPE_PROXY_PER_SCHEME. 174 // TYPE_PROXY_PER_SCHEME.
162 { 175 {
163 "ftp=ftp-proxy ; foopy", 176 "ftp=ftp-proxy ; foopy",
164 177
165 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 178 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
166 NULL, 179 NULL,
167 NULL, 180 NULL,
168 NULL, 181 NULL,
169 "ftp-proxy:80", 182 "PROXY ftp-proxy:80",
170 NULL, 183 NULL,
171 }, 184 },
172 185
173 // Include duplicate entries -- last one wins. 186 // Include a list of entries for a single scheme.
174 { 187 {
175 "ftp=ftp1 ; ftp=ftp2 ; ftp=ftp3", 188 "ftp=ftp1,ftp2,ftp3",
176 189
177 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 190 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
178 NULL, 191 NULL,
179 NULL, 192 NULL,
180 NULL, 193 NULL,
181 "ftp3:80", 194 "PROXY ftp1:80;PROXY ftp2:80;PROXY ftp3:80",
182 NULL, 195 NULL,
183 }, 196 },
184 197
198 // Include multiple entries for the same scheme -- they accumulate.
199 {
200 "http=http1,http2; http=http3",
201
202 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
203 NULL,
204 "PROXY http1:80;PROXY http2:80;PROXY http3:80",
205 NULL,
206 NULL,
207 NULL,
208 },
209
210 // Include lists of entries for multiple schemes.
211 {
212 "ftp=ftp1,ftp2,ftp3 ; http=http1,http2; ",
213
214 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
215 NULL,
216 "PROXY http1:80;PROXY http2:80",
217 NULL,
218 "PROXY ftp1:80;PROXY ftp2:80;PROXY ftp3:80",
219 NULL,
220 },
221
222 // Include non-default proxy schemes.
223 {
224 "http=https://secure_proxy; ftp=socks4://socks_proxy; https=socks://foo",
225
226 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
227 NULL,
228 "HTTPS secure_proxy:443",
229 "SOCKS5 foo:1080",
230 "SOCKS socks_proxy:1080",
231 NULL,
232 },
233
185 // Only SOCKS proxy present, others being blank. 234 // Only SOCKS proxy present, others being blank.
186 { 235 {
187 "socks=foopy", 236 "socks=foopy",
188 237
189 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 238 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
190 NULL, 239 NULL,
191 NULL, 240 NULL,
192 NULL, 241 NULL,
193 NULL, 242 NULL,
194 "socks4://foopy:1080", 243 "SOCKS foopy:1080",
195 }, 244 },
196 245
197 // SOCKS proxy present along with other proxies too 246 // SOCKS proxy present along with other proxies too
198 { 247 {
199 "http=httpproxy ; https=httpsproxy ; ftp=ftpproxy ; socks=foopy ", 248 "http=httpproxy ; https=httpsproxy ; ftp=ftpproxy ; socks=foopy ",
200 249
201 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 250 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
202 NULL, 251 NULL,
203 "httpproxy:80", 252 "PROXY httpproxy:80",
204 "httpsproxy:80", 253 "PROXY httpsproxy:80",
205 "ftpproxy:80", 254 "PROXY ftpproxy:80",
206 "socks4://foopy:1080", 255 "SOCKS foopy:1080",
207 }, 256 },
208 257
209 // SOCKS proxy (with modifier) present along with some proxies 258 // SOCKS proxy (with modifier) present along with some proxies
210 // (FTP being blank) 259 // (FTP being blank)
211 { 260 {
212 "http=httpproxy ; https=httpsproxy ; socks=socks5://foopy ", 261 "http=httpproxy ; https=httpsproxy ; socks=socks5://foopy ",
213 262
214 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 263 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
215 NULL, 264 NULL,
216 "httpproxy:80", 265 "PROXY httpproxy:80",
217 "httpsproxy:80", 266 "PROXY httpsproxy:80",
218 NULL, 267 NULL,
219 "socks5://foopy:1080", 268 "SOCKS5 foopy:1080",
220 }, 269 },
221 270
222 // Include unsupported schemes -- they are discarded. 271 // Include unsupported schemes -- they are discarded.
223 { 272 {
224 "crazy=foopy ; foo=bar ; https=myhttpsproxy", 273 "crazy=foopy ; foo=bar ; https=myhttpsproxy",
225 274
226 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 275 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
227 NULL, 276 NULL,
228 NULL, 277 NULL,
229 "myhttpsproxy:80", 278 "PROXY myhttpsproxy:80",
230 NULL, 279 NULL,
231 NULL, 280 NULL,
232 }, 281 },
282
283 // direct:// as first option for a scheme.
284 {
285 "http=direct://,myhttpproxy; https=direct://",
286
287 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
288 NULL,
289 "DIRECT;PROXY myhttpproxy:80",
290 "DIRECT",
291 NULL,
292 NULL,
293 },
294
295 // direct:// as a second option for a scheme.
296 {
297 "http=myhttpproxy,direct://",
298
299 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
300 NULL,
301 "PROXY myhttpproxy:80;DIRECT",
302 NULL,
303 NULL,
304 NULL,
305 },
306
233 }; 307 };
234 308
235 ProxyConfig config; 309 ProxyConfig config;
236 310
237 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 311 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
238 config.proxy_rules().ParseFromString(tests[i].proxy_rules); 312 config.proxy_rules().ParseFromString(tests[i].proxy_rules);
239 313
240 EXPECT_EQ(tests[i].type, config.proxy_rules().type); 314 EXPECT_EQ(tests[i].type, config.proxy_rules().type);
241 ExpectProxyServerEquals(tests[i].single_proxy, 315 ExpectProxyServerEquals(tests[i].single_proxy,
242 config.proxy_rules().single_proxy); 316 config.proxy_rules().single_proxies);
243 ExpectProxyServerEquals(tests[i].proxy_for_http, 317 ExpectProxyServerEquals(tests[i].proxy_for_http,
244 config.proxy_rules().proxy_for_http); 318 config.proxy_rules().proxies_for_http);
245 ExpectProxyServerEquals(tests[i].proxy_for_https, 319 ExpectProxyServerEquals(tests[i].proxy_for_https,
246 config.proxy_rules().proxy_for_https); 320 config.proxy_rules().proxies_for_https);
247 ExpectProxyServerEquals(tests[i].proxy_for_ftp, 321 ExpectProxyServerEquals(tests[i].proxy_for_ftp,
248 config.proxy_rules().proxy_for_ftp); 322 config.proxy_rules().proxies_for_ftp);
249 ExpectProxyServerEquals(tests[i].fallback_proxy, 323 ExpectProxyServerEquals(tests[i].fallback_proxy,
250 config.proxy_rules().fallback_proxy); 324 config.proxy_rules().fallback_proxies);
251 } 325 }
252 } 326 }
253 327
254 TEST(ProxyConfigTest, ProxyRulesSetBypassFlag) { 328 TEST(ProxyConfigTest, ProxyRulesSetBypassFlag) {
255 // Test whether the did_bypass_proxy() flag is set in proxy info correctly. 329 // Test whether the did_bypass_proxy() flag is set in proxy info correctly.
256 ProxyConfig::ProxyRules rules; 330 ProxyConfig::ProxyRules rules;
257 ProxyInfo result; 331 ProxyInfo result;
258 332
259 rules.ParseFromString("http=httpproxy:80"); 333 rules.ParseFromString("http=httpproxy:80");
260 rules.bypass_rules.AddRuleFromString(".com"); 334 rules.bypass_rules.AddRuleFromString(".com");
(...skipping 13 matching lines...) Expand all
274 EXPECT_TRUE(result.is_direct_only()); 348 EXPECT_TRUE(result.is_direct_only());
275 EXPECT_TRUE(result.did_bypass_proxy()); 349 EXPECT_TRUE(result.did_bypass_proxy());
276 350
277 rules.Apply(GURL("http://example.com"), &result); 351 rules.Apply(GURL("http://example.com"), &result);
278 EXPECT_FALSE(result.is_direct()); 352 EXPECT_FALSE(result.is_direct());
279 EXPECT_FALSE(result.did_bypass_proxy()); 353 EXPECT_FALSE(result.did_bypass_proxy());
280 } 354 }
281 355
282 } // namespace 356 } // namespace
283 } // namespace net 357 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_config_service_mac.cc ('k') | net/proxy/proxy_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698