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

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: (Removed blank lines). 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
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,
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698