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

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
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 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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698