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

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

Issue 10310179: Track sources of proxy settings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update copyright Created 8 years, 6 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_info.cc ('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) 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_service.h" 5 #include "net/proxy/proxy_service.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 ASSERT_EQ(1u, resolver->pending_requests().size()); 209 ASSERT_EQ(1u, resolver->pending_requests().size());
210 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 210 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
211 211
212 // Set the result in proxy resolver. 212 // Set the result in proxy resolver.
213 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy"); 213 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy");
214 resolver->pending_requests()[0]->CompleteNow(OK); 214 resolver->pending_requests()[0]->CompleteNow(OK);
215 215
216 EXPECT_EQ(OK, callback.WaitForResult()); 216 EXPECT_EQ(OK, callback.WaitForResult());
217 EXPECT_FALSE(info.is_direct()); 217 EXPECT_FALSE(info.is_direct());
218 EXPECT_EQ("foopy:80", info.proxy_server().ToURI()); 218 EXPECT_EQ("foopy:80", info.proxy_server().ToURI());
219 EXPECT_TRUE(info.did_use_pac_script());
219 220
220 // Check the NetLog was filled correctly. 221 // Check the NetLog was filled correctly.
221 CapturingNetLog::CapturedEntryList entries; 222 CapturingNetLog::CapturedEntryList entries;
222 log.GetEntries(&entries); 223 log.GetEntries(&entries);
223 224
224 EXPECT_EQ(5u, entries.size()); 225 EXPECT_EQ(5u, entries.size());
225 EXPECT_TRUE(LogContainsBeginEvent( 226 EXPECT_TRUE(LogContainsBeginEvent(
226 entries, 0, NetLog::TYPE_PROXY_SERVICE)); 227 entries, 0, NetLog::TYPE_PROXY_SERVICE));
227 EXPECT_TRUE(LogContainsBeginEvent( 228 EXPECT_TRUE(LogContainsBeginEvent(
228 entries, 1, NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC)); 229 entries, 1, NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 ASSERT_EQ(1u, resolver->pending_requests().size()); 286 ASSERT_EQ(1u, resolver->pending_requests().size());
286 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 287 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
287 288
288 // Set the result in proxy resolver. 289 // Set the result in proxy resolver.
289 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); 290 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080");
290 resolver->pending_requests()[0]->CompleteNow(OK); 291 resolver->pending_requests()[0]->CompleteNow(OK);
291 292
292 EXPECT_EQ(OK, callback1.WaitForResult()); 293 EXPECT_EQ(OK, callback1.WaitForResult());
293 EXPECT_FALSE(info.is_direct()); 294 EXPECT_FALSE(info.is_direct());
294 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); 295 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI());
296 EXPECT_TRUE(info.did_use_pac_script());
295 297
296 // Now, imagine that connecting to foopy:8080 fails: there is nothing 298 // Now, imagine that connecting to foopy:8080 fails: there is nothing
297 // left to fallback to, since our proxy list was NOT terminated by 299 // left to fallback to, since our proxy list was NOT terminated by
298 // DIRECT. 300 // DIRECT.
299 TestCompletionCallback callback2; 301 TestCompletionCallback callback2;
300 rv = service.ReconsiderProxyAfterError( 302 rv = service.ReconsiderProxyAfterError(
301 url, &info, callback2.callback(), NULL, BoundNetLog()); 303 url, &info, callback2.callback(), NULL, BoundNetLog());
302 // ReconsiderProxyAfterError returns error indicating nothing left. 304 // ReconsiderProxyAfterError returns error indicating nothing left.
303 EXPECT_EQ(ERR_FAILED, rv); 305 EXPECT_EQ(ERR_FAILED, rv);
304 EXPECT_TRUE(info.is_empty()); 306 EXPECT_TRUE(info.is_empty());
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); 377 EXPECT_EQ("foobar:20", info.proxy_server().ToURI());
376 378
377 // Fallback 4 -- Nothing to fall back to! 379 // Fallback 4 -- Nothing to fall back to!
378 TestCompletionCallback callback5; 380 TestCompletionCallback callback5;
379 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL, 381 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL,
380 BoundNetLog()); 382 BoundNetLog());
381 EXPECT_EQ(ERR_FAILED, rv); 383 EXPECT_EQ(ERR_FAILED, rv);
382 EXPECT_TRUE(info.is_empty()); 384 EXPECT_TRUE(info.is_empty());
383 } 385 }
384 386
387 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) {
388 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied
389 // to ProxyInfo after the proxy is resolved via a PAC script.
390 ProxyConfig config =
391 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"));
392 config.set_source(PROXY_CONFIG_SOURCE_TEST);
393
394 MockProxyConfigService* config_service = new MockProxyConfigService(config);
395 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
396 ProxyService service(config_service, resolver, NULL);
397
398 // Resolve something.
399 GURL url("http://www.google.com/");
400 ProxyInfo info;
401 TestCompletionCallback callback;
402 int rv = service.ResolveProxy(
403 url, &info, callback.callback(), NULL, BoundNetLog());
404 ASSERT_EQ(ERR_IO_PENDING, rv);
405 resolver->pending_set_pac_script_request()->CompleteNow(OK);
406 ASSERT_EQ(1u, resolver->pending_requests().size());
407
408 // Set the result in proxy resolver.
409 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy");
410 resolver->pending_requests()[0]->CompleteNow(OK);
411
412 EXPECT_EQ(OK, callback.WaitForResult());
413 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
414 EXPECT_TRUE(info.did_use_pac_script());
415 }
416
385 TEST_F(ProxyServiceTest, ProxyResolverFails) { 417 TEST_F(ProxyServiceTest, ProxyResolverFails) {
386 // Test what happens when the ProxyResolver fails. The download and setting 418 // Test what happens when the ProxyResolver fails. The download and setting
387 // of the PAC script have already succeeded, so this corresponds with a 419 // of the PAC script have already succeeded, so this corresponds with a
388 // javascript runtime error while calling FindProxyForURL(). 420 // javascript runtime error while calling FindProxyForURL().
389 421
390 MockProxyConfigService* config_service = 422 MockProxyConfigService* config_service =
391 new MockProxyConfigService("http://foopy/proxy.pac"); 423 new MockProxyConfigService("http://foopy/proxy.pac");
392 424
393 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 425 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
394 426
(...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 ProxyInfo info; 1145 ProxyInfo info;
1114 TestCompletionCallback callback; 1146 TestCompletionCallback callback;
1115 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, 1147 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL,
1116 BoundNetLog()); 1148 BoundNetLog());
1117 EXPECT_EQ(OK, rv); 1149 EXPECT_EQ(OK, rv);
1118 EXPECT_FALSE(info.is_direct()); 1150 EXPECT_FALSE(info.is_direct());
1119 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1151 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1120 } 1152 }
1121 } 1153 }
1122 1154
1155 TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) {
1156 // Test that the proxy config source is set correctly when resolving proxies
1157 // using manual proxy rules. Namely, the config source should only be set if
1158 // any of the rules were applied.
1159 {
1160 ProxyConfig config;
1161 config.set_source(PROXY_CONFIG_SOURCE_TEST);
1162 config.proxy_rules().ParseFromString("https=foopy2:8080");
1163 ProxyService service(
1164 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL);
1165 GURL test_url("http://www.google.com");
1166 ProxyInfo info;
1167 TestCompletionCallback callback;
1168 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL,
1169 BoundNetLog());
1170 ASSERT_EQ(OK, rv);
1171 // Should be SOURCE_TEST, even if there are no HTTP proxies configured.
1172 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
1173 }
1174 {
1175 ProxyConfig config;
1176 config.set_source(PROXY_CONFIG_SOURCE_TEST);
1177 config.proxy_rules().ParseFromString("https=foopy2:8080");
1178 ProxyService service(
1179 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL);
1180 GURL test_url("https://www.google.com");
1181 ProxyInfo info;
1182 TestCompletionCallback callback;
1183 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL,
1184 BoundNetLog());
1185 ASSERT_EQ(OK, rv);
1186 // Used the HTTPS proxy. So source should be TEST.
1187 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
1188 }
1189 {
1190 ProxyConfig config;
1191 config.set_source(PROXY_CONFIG_SOURCE_TEST);
1192 ProxyService service(
1193 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL);
1194 GURL test_url("http://www.google.com");
1195 ProxyInfo info;
1196 TestCompletionCallback callback;
1197 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL,
1198 BoundNetLog());
1199 ASSERT_EQ(OK, rv);
1200 // ProxyConfig is empty. Source should still be TEST.
1201 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
1202 }
1203 }
1204
1123 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries 1205 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries
1124 // fall back to the SOCKS proxy. 1206 // fall back to the SOCKS proxy.
1125 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { 1207 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) {
1126 ProxyConfig config; 1208 ProxyConfig config;
1127 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); 1209 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080");
1128 config.set_auto_detect(false); 1210 config.set_auto_detect(false);
1129 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 1211 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
1130 config.proxy_rules().type); 1212 config.proxy_rules().type);
1131 1213
1132 { 1214 {
(...skipping 1439 matching lines...) Expand 10 before | Expand all | Expand 10 after
2572 ProxyInfo info3; 2654 ProxyInfo info3;
2573 TestCompletionCallback callback3; 2655 TestCompletionCallback callback3;
2574 rv = service.ResolveProxy( 2656 rv = service.ResolveProxy(
2575 GURL("http://request3"), &info3, callback3.callback(), NULL, 2657 GURL("http://request3"), &info3, callback3.callback(), NULL,
2576 BoundNetLog()); 2658 BoundNetLog());
2577 EXPECT_EQ(OK, rv); 2659 EXPECT_EQ(OK, rv);
2578 EXPECT_TRUE(info3.is_direct()); 2660 EXPECT_TRUE(info3.is_direct());
2579 } 2661 }
2580 2662
2581 } // namespace net 2663 } // namespace net
OLDNEW
« net/proxy/proxy_info.cc ('K') | « net/proxy/proxy_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698