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

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

Issue 19502: Get rid of synchronous ResolveProxy API. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 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 | Annotate | Revision Log
« net/proxy/proxy_service.h ('K') | « net/proxy/proxy_service.cc ('k') | no next file » | 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "googleurl/src/gurl.h" 5 #include "googleurl/src/gurl.h"
6 #include "net/base/net_errors.h" 6 #include "net/base/net_errors.h"
7 #include "net/proxy/proxy_service.h" 7 #include "net/proxy/proxy_service.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace { 10 namespace {
11 11
12 // TODO(eroman): get rid of synchronous usages of ProxyService::ResolveProxy().
13
14 class MockProxyConfigService: public net::ProxyConfigService { 12 class MockProxyConfigService: public net::ProxyConfigService {
15 public: 13 public:
16 MockProxyConfigService() {} // Direct connect. 14 MockProxyConfigService() {} // Direct connect.
17 explicit MockProxyConfigService(const net::ProxyConfig& pc) : config(pc) {} 15 explicit MockProxyConfigService(const net::ProxyConfig& pc) : config(pc) {}
18 explicit MockProxyConfigService(const std::string& pac_url) { 16 explicit MockProxyConfigService(const std::string& pac_url) {
19 config.pac_url = GURL(pac_url); 17 config.pac_url = GURL(pac_url);
20 } 18 }
21 19
22 virtual int GetProxyConfig(net::ProxyConfig* results) { 20 virtual int GetProxyConfig(net::ProxyConfig* results) {
23 *results = config; 21 *results = config;
(...skipping 24 matching lines...) Expand all
48 net::ProxyInfo info; 46 net::ProxyInfo info;
49 47
50 // info is only returned if query_url in GetProxyForURL matches this: 48 // info is only returned if query_url in GetProxyForURL matches this:
51 std::string info_predicate_query_host; 49 std::string info_predicate_query_host;
52 50
53 // If true, then GetProxyForURL will fail, which simulates failure to 51 // If true, then GetProxyForURL will fail, which simulates failure to
54 // download or execute the PAC file. 52 // download or execute the PAC file.
55 bool fail_get_proxy_for_url; 53 bool fail_get_proxy_for_url;
56 }; 54 };
57 55
56 class SyncProxyService {
57 public:
58 SyncProxyService(net::ProxyConfigService* config_service,
59 net::ProxyResolver* resolver)
60 : io_thread_("IO_Thread"),
61 service_(config_service, resolver) {
62 base::Thread::Options options;
63 options.message_loop_type = MessageLoop::TYPE_IO;
64 io_thread_.StartWithOptions(options);
65 sync_proxy_service_ = new net::SyncProxyServiceHelper(
66 io_thread_.message_loop(), &service_);
67 }
68
69 int ResolveProxy(const GURL& url, net::ProxyInfo* proxy_info) {
70 return sync_proxy_service_->ResolveProxy(url, proxy_info);
71 }
72
73 int ReconsiderProxyAfterError(const GURL& url, net::ProxyInfo* proxy_info) {
74 return sync_proxy_service_->ReconsiderProxyAfterError(url, proxy_info);
75 }
76
77 private:
78 base::Thread io_thread_;
79 net::ProxyService service_;
80 scoped_refptr<net::SyncProxyServiceHelper> sync_proxy_service_;
81 };
82
58 } // namespace 83 } // namespace
59 84
60 // GetAnnotatedList() is used to generate a string for mozilla's GetProxyForUrl 85 // GetAnnotatedList() is used to generate a string for mozilla's GetProxyForUrl
61 // NPAPI extension. Check that it adheres to the expected format. 86 // NPAPI extension. Check that it adheres to the expected format.
62 TEST(ProxyListTest, GetAnnotatedList) { 87 TEST(ProxyListTest, GetAnnotatedList) {
63 net::ProxyList proxy_list; 88 net::ProxyList proxy_list;
64 89
65 std::vector<std::string> proxies; 90 std::vector<std::string> proxies;
66 proxies.push_back("www.first.com:80"); 91 proxies.push_back("www.first.com:80");
67 proxies.push_back("www.second.com:80"); 92 proxies.push_back("www.second.com:80");
68 proxy_list.SetVector(proxies); 93 proxy_list.SetVector(proxies);
69 94
70 EXPECT_EQ(std::string("PROXY www.first.com:80;PROXY www.second.com:80"), 95 EXPECT_EQ(std::string("PROXY www.first.com:80;PROXY www.second.com:80"),
71 proxy_list.GetAnnotatedList()); 96 proxy_list.GetAnnotatedList());
72 } 97 }
73 98
74 TEST(ProxyServiceTest, Direct) { 99 TEST(ProxyServiceTest, Direct) {
75 net::ProxyService service(new MockProxyConfigService, 100 SyncProxyService service(new MockProxyConfigService,
76 new MockProxyResolver); 101 new MockProxyResolver);
77 102
78 GURL url("http://www.google.com/"); 103 GURL url("http://www.google.com/");
79 104
80 net::ProxyInfo info; 105 net::ProxyInfo info;
81 int rv = service.ResolveProxy(url, &info, NULL, NULL); 106 int rv = service.ResolveProxy(url, &info);
82 EXPECT_EQ(rv, net::OK); 107 EXPECT_EQ(rv, net::OK);
83 EXPECT_TRUE(info.is_direct()); 108 EXPECT_TRUE(info.is_direct());
84 } 109 }
85 110
86 TEST(ProxyServiceTest, PAC) { 111 TEST(ProxyServiceTest, PAC) {
87 MockProxyConfigService* config_service = 112 MockProxyConfigService* config_service =
88 new MockProxyConfigService("http://foopy/proxy.pac"); 113 new MockProxyConfigService("http://foopy/proxy.pac");
89 114
90 MockProxyResolver* resolver = new MockProxyResolver; 115 MockProxyResolver* resolver = new MockProxyResolver;
91 resolver->info.UseNamedProxy("foopy"); 116 resolver->info.UseNamedProxy("foopy");
92 resolver->info_predicate_query_host = "www.google.com"; 117 resolver->info_predicate_query_host = "www.google.com";
93 118
94 net::ProxyService service(config_service, resolver); 119 SyncProxyService service(config_service, resolver);
95 120
96 GURL url("http://www.google.com/"); 121 GURL url("http://www.google.com/");
97 122
98 net::ProxyInfo info; 123 net::ProxyInfo info;
99 int rv = service.ResolveProxy(url, &info, NULL, NULL); 124 int rv = service.ResolveProxy(url, &info);
100 EXPECT_EQ(rv, net::OK); 125 EXPECT_EQ(rv, net::OK);
101 EXPECT_FALSE(info.is_direct()); 126 EXPECT_FALSE(info.is_direct());
102 EXPECT_EQ(info.proxy_server(), "foopy"); 127 EXPECT_EQ(info.proxy_server(), "foopy");
103 } 128 }
104 129
105 TEST(ProxyServiceTest, PAC_FailoverToDirect) { 130 TEST(ProxyServiceTest, PAC_FailoverToDirect) {
106 MockProxyConfigService* config_service = 131 MockProxyConfigService* config_service =
107 new MockProxyConfigService("http://foopy/proxy.pac"); 132 new MockProxyConfigService("http://foopy/proxy.pac");
108 133
109 MockProxyResolver* resolver = new MockProxyResolver; 134 MockProxyResolver* resolver = new MockProxyResolver;
110 resolver->info.UseNamedProxy("foopy:8080"); 135 resolver->info.UseNamedProxy("foopy:8080");
111 resolver->info_predicate_query_host = "www.google.com"; 136 resolver->info_predicate_query_host = "www.google.com";
112 137
113 net::ProxyService service(config_service, resolver); 138 SyncProxyService service(config_service, resolver);
114 139
115 GURL url("http://www.google.com/"); 140 GURL url("http://www.google.com/");
116 141
117 net::ProxyInfo info; 142 net::ProxyInfo info;
118 int rv = service.ResolveProxy(url, &info, NULL, NULL); 143 int rv = service.ResolveProxy(url, &info);
119 EXPECT_EQ(rv, net::OK); 144 EXPECT_EQ(rv, net::OK);
120 EXPECT_FALSE(info.is_direct()); 145 EXPECT_FALSE(info.is_direct());
121 EXPECT_EQ(info.proxy_server(), "foopy:8080"); 146 EXPECT_EQ(info.proxy_server(), "foopy:8080");
122 147
123 // Now, imagine that connecting to foopy:8080 fails. 148 // Now, imagine that connecting to foopy:8080 fails.
124 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 149 rv = service.ReconsiderProxyAfterError(url, &info);
125 EXPECT_EQ(rv, net::OK); 150 EXPECT_EQ(rv, net::OK);
126 EXPECT_TRUE(info.is_direct()); 151 EXPECT_TRUE(info.is_direct());
127 } 152 }
128 153
129 TEST(ProxyServiceTest, PAC_FailsToDownload) { 154 TEST(ProxyServiceTest, PAC_FailsToDownload) {
130 // Test what happens when we fail to download the PAC URL. 155 // Test what happens when we fail to download the PAC URL.
131 156
132 MockProxyConfigService* config_service = 157 MockProxyConfigService* config_service =
133 new MockProxyConfigService("http://foopy/proxy.pac"); 158 new MockProxyConfigService("http://foopy/proxy.pac");
134 159
135 MockProxyResolver* resolver = new MockProxyResolver; 160 MockProxyResolver* resolver = new MockProxyResolver;
136 resolver->info.UseNamedProxy("foopy:8080"); 161 resolver->info.UseNamedProxy("foopy:8080");
137 resolver->info_predicate_query_host = "www.google.com"; 162 resolver->info_predicate_query_host = "www.google.com";
138 resolver->fail_get_proxy_for_url = true; 163 resolver->fail_get_proxy_for_url = true;
139 164
140 net::ProxyService service(config_service, resolver); 165 SyncProxyService service(config_service, resolver);
141 166
167 // The first resolve fails in the MockProxyResolver.
142 GURL url("http://www.google.com/"); 168 GURL url("http://www.google.com/");
143 net::ProxyInfo info; 169 net::ProxyInfo info;
144 int rv = service.ResolveProxy(url, &info, NULL, NULL); 170 int rv = service.ResolveProxy(url, &info);
171 EXPECT_EQ(rv, net::ERR_FAILED);
172
173 // The second resolve request will automatically select direct connect,
174 // because it has cached the configuration as being bad.
175 rv = service.ResolveProxy(url, &info);
145 EXPECT_EQ(rv, net::OK); 176 EXPECT_EQ(rv, net::OK);
146 EXPECT_TRUE(info.is_direct()); 177 EXPECT_TRUE(info.is_direct());
147 178
148 rv = service.ResolveProxy(url, &info, NULL, NULL);
149 EXPECT_EQ(rv, net::OK);
150 EXPECT_TRUE(info.is_direct());
151
152 resolver->fail_get_proxy_for_url = false; 179 resolver->fail_get_proxy_for_url = false;
153 resolver->info.UseNamedProxy("foopy_valid:8080"); 180 resolver->info.UseNamedProxy("foopy_valid:8080");
154 181
155 // But, if that fails, then we should give the proxy config another shot 182 // But, if that fails, then we should give the proxy config another shot
156 // since we have never tried it with this URL before. 183 // since we have never tried it with this URL before.
157 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 184 rv = service.ReconsiderProxyAfterError(url, &info);
158 EXPECT_EQ(rv, net::OK); 185 EXPECT_EQ(rv, net::OK);
159 EXPECT_FALSE(info.is_direct()); 186 EXPECT_FALSE(info.is_direct());
160 EXPECT_EQ(info.proxy_server(), "foopy_valid:8080"); 187 EXPECT_EQ(info.proxy_server(), "foopy_valid:8080");
161 } 188 }
162 189
163 TEST(ProxyServiceTest, ProxyFallback) { 190 TEST(ProxyServiceTest, ProxyFallback) {
164 // Test what happens when we specify multiple proxy servers and some of them 191 // Test what happens when we specify multiple proxy servers and some of them
165 // are bad. 192 // are bad.
166 193
167 MockProxyConfigService* config_service = 194 MockProxyConfigService* config_service =
168 new MockProxyConfigService("http://foopy/proxy.pac"); 195 new MockProxyConfigService("http://foopy/proxy.pac");
169 196
170 MockProxyResolver* resolver = new MockProxyResolver; 197 MockProxyResolver* resolver = new MockProxyResolver;
171 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); 198 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090");
172 resolver->info_predicate_query_host = "www.google.com"; 199 resolver->info_predicate_query_host = "www.google.com";
173 resolver->fail_get_proxy_for_url = false; 200 resolver->fail_get_proxy_for_url = false;
174 201
175 net::ProxyService service(config_service, resolver); 202 SyncProxyService service(config_service, resolver);
176 203
177 GURL url("http://www.google.com/"); 204 GURL url("http://www.google.com/");
178 205
179 // Get the proxy information. 206 // Get the proxy information.
180 net::ProxyInfo info; 207 net::ProxyInfo info;
181 int rv = service.ResolveProxy(url, &info, NULL, NULL); 208 int rv = service.ResolveProxy(url, &info);
182 EXPECT_EQ(rv, net::OK); 209 EXPECT_EQ(rv, net::OK);
183 EXPECT_FALSE(info.is_direct()); 210 EXPECT_FALSE(info.is_direct());
184 211
185 // The first item is valid. 212 // The first item is valid.
186 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); 213 EXPECT_EQ(info.proxy_server(), "foopy1:8080");
187 214
188 // Fake an error on the proxy. 215 // Fake an error on the proxy.
189 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 216 rv = service.ReconsiderProxyAfterError(url, &info);
190 EXPECT_EQ(rv, net::OK); 217 EXPECT_EQ(rv, net::OK);
191 218
192 // The second proxy should be specified. 219 // The second proxy should be specified.
193 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); 220 EXPECT_EQ(info.proxy_server(), "foopy2:9090");
194 221
195 // Create a new resolver that returns 3 proxies. The second one is already 222 // Create a new resolver that returns 3 proxies. The second one is already
196 // known to be bad. 223 // known to be bad.
197 config_service->config.pac_url = GURL("http://foopy/proxy.pac"); 224 config_service->config.pac_url = GURL("http://foopy/proxy.pac");
198 resolver->info.UseNamedProxy("foopy3:7070;foopy1:8080;foopy2:9090"); 225 resolver->info.UseNamedProxy("foopy3:7070;foopy1:8080;foopy2:9090");
199 resolver->info_predicate_query_host = "www.google.com"; 226 resolver->info_predicate_query_host = "www.google.com";
200 resolver->fail_get_proxy_for_url = false; 227 resolver->fail_get_proxy_for_url = false;
201 228
202 rv = service.ResolveProxy(url, &info, NULL, NULL); 229 rv = service.ResolveProxy(url, &info);
203 EXPECT_EQ(rv, net::OK); 230 EXPECT_EQ(rv, net::OK);
204 EXPECT_FALSE(info.is_direct()); 231 EXPECT_FALSE(info.is_direct());
205 EXPECT_EQ(info.proxy_server(), "foopy3:7070"); 232 EXPECT_EQ(info.proxy_server(), "foopy3:7070");
206 233
207 // We fake another error. It should now try the third one. 234 // We fake another error. It should now try the third one.
208 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 235 rv = service.ReconsiderProxyAfterError(url, &info);
209 EXPECT_EQ(rv, net::OK); 236 EXPECT_EQ(rv, net::OK);
210 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); 237 EXPECT_EQ(info.proxy_server(), "foopy2:9090");
211 238
212 // Fake another error, the last proxy is gone, the list should now be empty. 239 // Fake another error, the last proxy is gone, the list should now be empty.
213 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 240 rv = service.ReconsiderProxyAfterError(url, &info);
214 EXPECT_EQ(rv, net::OK); // We try direct. 241 EXPECT_EQ(rv, net::OK); // We try direct.
215 EXPECT_TRUE(info.is_direct()); 242 EXPECT_TRUE(info.is_direct());
216 243
217 // If it fails again, we don't have anything else to try. 244 // If it fails again, we don't have anything else to try.
218 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 245 rv = service.ReconsiderProxyAfterError(url, &info);
219 EXPECT_EQ(rv, net::ERR_FAILED); // We try direct. 246 EXPECT_EQ(rv, net::ERR_FAILED); // We try direct.
220 247
221 // TODO(nsylvain): Test that the proxy can be retried after the delay. 248 // TODO(nsylvain): Test that the proxy can be retried after the delay.
222 } 249 }
223 250
224 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { 251 TEST(ProxyServiceTest, ProxyFallback_NewSettings) {
225 // Test proxy failover when new settings are available. 252 // Test proxy failover when new settings are available.
226 253
227 MockProxyConfigService* config_service = 254 MockProxyConfigService* config_service =
228 new MockProxyConfigService("http://foopy/proxy.pac"); 255 new MockProxyConfigService("http://foopy/proxy.pac");
229 256
230 MockProxyResolver* resolver = new MockProxyResolver; 257 MockProxyResolver* resolver = new MockProxyResolver;
231 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); 258 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090");
232 resolver->info_predicate_query_host = "www.google.com"; 259 resolver->info_predicate_query_host = "www.google.com";
233 resolver->fail_get_proxy_for_url = false; 260 resolver->fail_get_proxy_for_url = false;
234 261
235 net::ProxyService service(config_service, resolver); 262 SyncProxyService service(config_service, resolver);
236 263
237 GURL url("http://www.google.com/"); 264 GURL url("http://www.google.com/");
238 265
239 // Get the proxy information. 266 // Get the proxy information.
240 net::ProxyInfo info; 267 net::ProxyInfo info;
241 int rv = service.ResolveProxy(url, &info, NULL, NULL); 268 int rv = service.ResolveProxy(url, &info);
242 EXPECT_EQ(rv, net::OK); 269 EXPECT_EQ(rv, net::OK);
243 EXPECT_FALSE(info.is_direct()); 270 EXPECT_FALSE(info.is_direct());
244 271
245 // The first item is valid. 272 // The first item is valid.
246 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); 273 EXPECT_EQ(info.proxy_server(), "foopy1:8080");
247 274
248 // Fake an error on the proxy, and also a new configuration on the proxy. 275 // Fake an error on the proxy, and also a new configuration on the proxy.
249 config_service->config = net::ProxyConfig(); 276 config_service->config = net::ProxyConfig();
250 config_service->config.pac_url = GURL("http://foopy-new/proxy.pac"); 277 config_service->config.pac_url = GURL("http://foopy-new/proxy.pac");
251 278
252 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 279 rv = service.ReconsiderProxyAfterError(url, &info);
253 EXPECT_EQ(rv, net::OK); 280 EXPECT_EQ(rv, net::OK);
254 281
255 // The first proxy is still there since the configuration changed. 282 // The first proxy is still there since the configuration changed.
256 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); 283 EXPECT_EQ(info.proxy_server(), "foopy1:8080");
257 284
258 // We fake another error. It should now ignore the first one. 285 // We fake another error. It should now ignore the first one.
259 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 286 rv = service.ReconsiderProxyAfterError(url, &info);
260 EXPECT_EQ(rv, net::OK); 287 EXPECT_EQ(rv, net::OK);
261 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); 288 EXPECT_EQ(info.proxy_server(), "foopy2:9090");
262 289
263 // We simulate a new configuration. 290 // We simulate a new configuration.
264 config_service->config = net::ProxyConfig(); 291 config_service->config = net::ProxyConfig();
265 config_service->config.pac_url = GURL("http://foopy-new2/proxy.pac"); 292 config_service->config.pac_url = GURL("http://foopy-new2/proxy.pac");
266 293
267 // We fake anothe error. It should go back to the first proxy. 294 // We fake anothe error. It should go back to the first proxy.
268 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 295 rv = service.ReconsiderProxyAfterError(url, &info);
269 EXPECT_EQ(rv, net::OK); 296 EXPECT_EQ(rv, net::OK);
270 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); 297 EXPECT_EQ(info.proxy_server(), "foopy1:8080");
271 } 298 }
272 299
273 TEST(ProxyServiceTest, ProxyFallback_BadConfig) { 300 TEST(ProxyServiceTest, ProxyFallback_BadConfig) {
274 // Test proxy failover when the configuration is bad. 301 // Test proxy failover when the configuration is bad.
275 302
276 MockProxyConfigService* config_service = 303 MockProxyConfigService* config_service =
277 new MockProxyConfigService("http://foopy/proxy.pac"); 304 new MockProxyConfigService("http://foopy/proxy.pac");
278 305
279 MockProxyResolver* resolver = new MockProxyResolver; 306 MockProxyResolver* resolver = new MockProxyResolver;
280 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); 307 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090");
281 resolver->info_predicate_query_host = "www.google.com"; 308 resolver->info_predicate_query_host = "www.google.com";
282 resolver->fail_get_proxy_for_url = false; 309 resolver->fail_get_proxy_for_url = false;
283 310
284 net::ProxyService service(config_service, resolver); 311 SyncProxyService service(config_service, resolver);
285 312
286 GURL url("http://www.google.com/"); 313 GURL url("http://www.google.com/");
287 314
288 // Get the proxy information. 315 // Get the proxy information.
289 net::ProxyInfo info; 316 net::ProxyInfo info;
290 int rv = service.ResolveProxy(url, &info, NULL, NULL); 317 int rv = service.ResolveProxy(url, &info);
291 EXPECT_EQ(rv, net::OK); 318 EXPECT_EQ(rv, net::OK);
292 EXPECT_FALSE(info.is_direct()); 319 EXPECT_FALSE(info.is_direct());
293 320
294 // The first item is valid. 321 // The first item is valid.
295 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); 322 EXPECT_EQ(info.proxy_server(), "foopy1:8080");
296 323
297 // Fake a proxy error. 324 // Fake a proxy error.
298 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); 325 rv = service.ReconsiderProxyAfterError(url, &info);
299 EXPECT_EQ(rv, net::OK); 326 EXPECT_EQ(rv, net::OK);
300 327
301 // The first proxy is ignored, and the second one is selected. 328 // The first proxy is ignored, and the second one is selected.
302 EXPECT_FALSE(info.is_direct()); 329 EXPECT_FALSE(info.is_direct());
303 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); 330 EXPECT_EQ(info.proxy_server(), "foopy2:9090");
304 331
305 // Fake a PAC failure. 332 // Fake a PAC failure.
306 net::ProxyInfo info2; 333 net::ProxyInfo info2;
307 resolver->fail_get_proxy_for_url = true; 334 resolver->fail_get_proxy_for_url = true;
308 rv = service.ResolveProxy(url, &info2, NULL, NULL); 335 rv = service.ResolveProxy(url, &info2);
309 EXPECT_EQ(rv, net::OK); 336 EXPECT_EQ(rv, net::ERR_FAILED);
310 337
311 // No proxy servers are returned. It's a direct connection. 338 // No proxy servers are returned. It's a direct connection.
312 EXPECT_TRUE(info2.is_direct()); 339 EXPECT_TRUE(info2.is_direct());
313 340
314 // The PAC is now fixed and will return a proxy server. 341 // The PAC is now fixed and will return a proxy server.
315 // It should also clear the list of bad proxies. 342 // It should also clear the list of bad proxies.
316 resolver->fail_get_proxy_for_url = false; 343 resolver->fail_get_proxy_for_url = false;
317 344
318 // Try to resolve, it will still return "direct" because we have no reason 345 // Try to resolve, it will still return "direct" because we have no reason
319 // to check the config since everything works. 346 // to check the config since everything works.
320 net::ProxyInfo info3; 347 net::ProxyInfo info3;
321 rv = service.ResolveProxy(url, &info3, NULL, NULL); 348 rv = service.ResolveProxy(url, &info3);
322 EXPECT_EQ(rv, net::OK); 349 EXPECT_EQ(rv, net::OK);
323 EXPECT_TRUE(info3.is_direct()); 350 EXPECT_TRUE(info3.is_direct());
324 351
325 // But if the direct connection fails, we check if the ProxyInfo tried to 352 // But if the direct connection fails, we check if the ProxyInfo tried to
326 // resolve the proxy before, and if not (like in this case), we give the 353 // resolve the proxy before, and if not (like in this case), we give the
327 // PAC another try. 354 // PAC another try.
328 rv = service.ReconsiderProxyAfterError(url, &info3, NULL, NULL); 355 rv = service.ReconsiderProxyAfterError(url, &info3);
329 EXPECT_EQ(rv, net::OK); 356 EXPECT_EQ(rv, net::OK);
330 357
331 // The first proxy is still there since the list of bad proxies got cleared. 358 // The first proxy is still there since the list of bad proxies got cleared.
332 EXPECT_FALSE(info3.is_direct()); 359 EXPECT_FALSE(info3.is_direct());
333 EXPECT_EQ(info3.proxy_server(), "foopy1:8080"); 360 EXPECT_EQ(info3.proxy_server(), "foopy1:8080");
334 } 361 }
335 362
336 TEST(ProxyServiceTest, ProxyBypassList) { 363 TEST(ProxyServiceTest, ProxyBypassList) {
337 // Test what happens when a proxy bypass list is specified. 364 // Test what happens when a proxy bypass list is specified.
338 365
339 net::ProxyConfig config; 366 net::ProxyConfig config;
340 config.proxy_server = "foopy1:8080;foopy2:9090"; 367 config.proxy_server = "foopy1:8080;foopy2:9090";
341 config.auto_detect = false; 368 config.auto_detect = false;
342 config.proxy_bypass_local_names = true; 369 config.proxy_bypass_local_names = true;
343 370
344 net::ProxyService service(new MockProxyConfigService(config), 371 SyncProxyService service(new MockProxyConfigService(config),
345 new MockProxyResolver()); 372 new MockProxyResolver());
346 GURL url("http://www.google.com/"); 373 GURL url("http://www.google.com/");
347 // Get the proxy information. 374 // Get the proxy information.
348 net::ProxyInfo info; 375 net::ProxyInfo info;
349 int rv = service.ResolveProxy(url, &info, NULL, NULL); 376 int rv = service.ResolveProxy(url, &info);
350 EXPECT_EQ(rv, net::OK); 377 EXPECT_EQ(rv, net::OK);
351 EXPECT_FALSE(info.is_direct()); 378 EXPECT_FALSE(info.is_direct());
352 379
353 net::ProxyService service1(new MockProxyConfigService(config), 380 SyncProxyService service1(new MockProxyConfigService(config),
354 new MockProxyResolver()); 381 new MockProxyResolver());
355 GURL test_url1("local"); 382 GURL test_url1("local");
356 net::ProxyInfo info1; 383 net::ProxyInfo info1;
357 rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL); 384 rv = service1.ResolveProxy(test_url1, &info1);
358 EXPECT_EQ(rv, net::OK); 385 EXPECT_EQ(rv, net::OK);
359 EXPECT_TRUE(info1.is_direct()); 386 EXPECT_TRUE(info1.is_direct());
360 387
361 config.proxy_bypass.clear(); 388 config.proxy_bypass.clear();
362 config.proxy_bypass.push_back("*.org"); 389 config.proxy_bypass.push_back("*.org");
363 config.proxy_bypass_local_names = true; 390 config.proxy_bypass_local_names = true;
364 net::ProxyService service2(new MockProxyConfigService(config), 391 SyncProxyService service2(new MockProxyConfigService(config),
365 new MockProxyResolver); 392 new MockProxyResolver);
366 GURL test_url2("http://www.webkit.org"); 393 GURL test_url2("http://www.webkit.org");
367 net::ProxyInfo info2; 394 net::ProxyInfo info2;
368 rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL); 395 rv = service2.ResolveProxy(test_url2, &info2);
369 EXPECT_EQ(rv, net::OK); 396 EXPECT_EQ(rv, net::OK);
370 EXPECT_TRUE(info2.is_direct()); 397 EXPECT_TRUE(info2.is_direct());
371 398
372 config.proxy_bypass.clear(); 399 config.proxy_bypass.clear();
373 config.proxy_bypass.push_back("*.org"); 400 config.proxy_bypass.push_back("*.org");
374 config.proxy_bypass.push_back("7*"); 401 config.proxy_bypass.push_back("7*");
375 config.proxy_bypass_local_names = true; 402 config.proxy_bypass_local_names = true;
376 net::ProxyService service3(new MockProxyConfigService(config), 403 SyncProxyService service3(new MockProxyConfigService(config),
377 new MockProxyResolver); 404 new MockProxyResolver);
378 GURL test_url3("http://74.125.19.147"); 405 GURL test_url3("http://74.125.19.147");
379 net::ProxyInfo info3; 406 net::ProxyInfo info3;
380 rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL); 407 rv = service3.ResolveProxy(test_url3, &info3);
381 EXPECT_EQ(rv, net::OK); 408 EXPECT_EQ(rv, net::OK);
382 EXPECT_TRUE(info3.is_direct()); 409 EXPECT_TRUE(info3.is_direct());
383 410
384 config.proxy_bypass.clear(); 411 config.proxy_bypass.clear();
385 config.proxy_bypass.push_back("*.org"); 412 config.proxy_bypass.push_back("*.org");
386 config.proxy_bypass_local_names = true; 413 config.proxy_bypass_local_names = true;
387 net::ProxyService service4(new MockProxyConfigService(config), 414 SyncProxyService service4(new MockProxyConfigService(config),
388 new MockProxyResolver); 415 new MockProxyResolver);
389 GURL test_url4("http://www.msn.com"); 416 GURL test_url4("http://www.msn.com");
390 net::ProxyInfo info4; 417 net::ProxyInfo info4;
391 rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL); 418 rv = service4.ResolveProxy(test_url4, &info4);
392 EXPECT_EQ(rv, net::OK); 419 EXPECT_EQ(rv, net::OK);
393 EXPECT_FALSE(info4.is_direct()); 420 EXPECT_FALSE(info4.is_direct());
394 421
395 config.proxy_bypass.clear(); 422 config.proxy_bypass.clear();
396 config.proxy_bypass.push_back("*.MSN.COM"); 423 config.proxy_bypass.push_back("*.MSN.COM");
397 config.proxy_bypass_local_names = true; 424 config.proxy_bypass_local_names = true;
398 net::ProxyService service5(new MockProxyConfigService(config), 425 SyncProxyService service5(new MockProxyConfigService(config),
399 new MockProxyResolver); 426 new MockProxyResolver);
400 GURL test_url5("http://www.msnbc.msn.com"); 427 GURL test_url5("http://www.msnbc.msn.com");
401 net::ProxyInfo info5; 428 net::ProxyInfo info5;
402 rv = service5.ResolveProxy(test_url5, &info5, NULL, NULL); 429 rv = service5.ResolveProxy(test_url5, &info5);
403 EXPECT_EQ(rv, net::OK); 430 EXPECT_EQ(rv, net::OK);
404 EXPECT_TRUE(info5.is_direct()); 431 EXPECT_TRUE(info5.is_direct());
405 432
406 config.proxy_bypass.clear(); 433 config.proxy_bypass.clear();
407 config.proxy_bypass.push_back("*.msn.com"); 434 config.proxy_bypass.push_back("*.msn.com");
408 config.proxy_bypass_local_names = true; 435 config.proxy_bypass_local_names = true;
409 net::ProxyService service6(new MockProxyConfigService(config), 436 SyncProxyService service6(new MockProxyConfigService(config),
410 new MockProxyResolver); 437 new MockProxyResolver);
411 GURL test_url6("HTTP://WWW.MSNBC.MSN.COM"); 438 GURL test_url6("HTTP://WWW.MSNBC.MSN.COM");
412 net::ProxyInfo info6; 439 net::ProxyInfo info6;
413 rv = service6.ResolveProxy(test_url6, &info6, NULL, NULL); 440 rv = service6.ResolveProxy(test_url6, &info6);
414 EXPECT_EQ(rv, net::OK); 441 EXPECT_EQ(rv, net::OK);
415 EXPECT_TRUE(info6.is_direct()); 442 EXPECT_TRUE(info6.is_direct());
416 } 443 }
417 444
418 TEST(ProxyServiceTest, PerProtocolProxyTests) { 445 TEST(ProxyServiceTest, PerProtocolProxyTests) {
419 net::ProxyConfig config; 446 net::ProxyConfig config;
420 config.proxy_server = "http=foopy1:8080;https=foopy2:8080"; 447 config.proxy_server = "http=foopy1:8080;https=foopy2:8080";
421 config.auto_detect = false; 448 config.auto_detect = false;
422 449
423 net::ProxyService service1(new MockProxyConfigService(config), 450 SyncProxyService service1(new MockProxyConfigService(config),
424 new MockProxyResolver); 451 new MockProxyResolver);
425 GURL test_url1("http://www.msn.com"); 452 GURL test_url1("http://www.msn.com");
426 net::ProxyInfo info1; 453 net::ProxyInfo info1;
427 int rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL); 454 int rv = service1.ResolveProxy(test_url1, &info1);
428 EXPECT_EQ(rv, net::OK); 455 EXPECT_EQ(rv, net::OK);
429 EXPECT_FALSE(info1.is_direct()); 456 EXPECT_FALSE(info1.is_direct());
430 EXPECT_TRUE(info1.proxy_server() == "foopy1:8080"); 457 EXPECT_TRUE(info1.proxy_server() == "foopy1:8080");
431 458
432 net::ProxyService service2(new MockProxyConfigService(config), 459 SyncProxyService service2(new MockProxyConfigService(config),
433 new MockProxyResolver); 460 new MockProxyResolver);
434 GURL test_url2("ftp://ftp.google.com"); 461 GURL test_url2("ftp://ftp.google.com");
435 net::ProxyInfo info2; 462 net::ProxyInfo info2;
436 rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL); 463 rv = service2.ResolveProxy(test_url2, &info2);
437 EXPECT_EQ(rv, net::OK); 464 EXPECT_EQ(rv, net::OK);
438 EXPECT_TRUE(info2.is_direct()); 465 EXPECT_TRUE(info2.is_direct());
439 EXPECT_TRUE(info2.proxy_server() == ""); 466 EXPECT_TRUE(info2.proxy_server() == "");
440 467
441 net::ProxyService service3(new MockProxyConfigService(config), 468 SyncProxyService service3(new MockProxyConfigService(config),
442 new MockProxyResolver); 469 new MockProxyResolver);
443 GURL test_url3("https://webbranch.techcu.com"); 470 GURL test_url3("https://webbranch.techcu.com");
444 net::ProxyInfo info3; 471 net::ProxyInfo info3;
445 rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL); 472 rv = service3.ResolveProxy(test_url3, &info3);
446 EXPECT_EQ(rv, net::OK); 473 EXPECT_EQ(rv, net::OK);
447 EXPECT_FALSE(info3.is_direct()); 474 EXPECT_FALSE(info3.is_direct());
448 EXPECT_TRUE(info3.proxy_server() == "foopy2:8080"); 475 EXPECT_TRUE(info3.proxy_server() == "foopy2:8080");
449 476
450 config.proxy_server = "foopy1:8080"; 477 config.proxy_server = "foopy1:8080";
451 net::ProxyService service4(new MockProxyConfigService(config), 478 SyncProxyService service4(new MockProxyConfigService(config),
452 new MockProxyResolver); 479 new MockProxyResolver);
453 GURL test_url4("www.microsoft.com"); 480 GURL test_url4("www.microsoft.com");
454 net::ProxyInfo info4; 481 net::ProxyInfo info4;
455 rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL); 482 rv = service4.ResolveProxy(test_url4, &info4);
456 EXPECT_EQ(rv, net::OK); 483 EXPECT_EQ(rv, net::OK);
457 EXPECT_FALSE(info4.is_direct()); 484 EXPECT_FALSE(info4.is_direct());
458 EXPECT_TRUE(info4.proxy_server() == "foopy1:8080"); 485 EXPECT_TRUE(info4.proxy_server() == "foopy1:8080");
459 } 486 }
460 487
OLDNEW
« net/proxy/proxy_service.h ('K') | « net/proxy/proxy_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698