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_service_unittest.cc

Issue 473513002: Keep track of network error in ProxyRetryInfo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge to head. Created 6 years, 4 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
« net/proxy/proxy_service.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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 bool add_proxy_; 200 bool add_proxy_;
201 bool remove_proxy_; 201 bool remove_proxy_;
202 const ProxyService* proxy_service_; 202 const ProxyService* proxy_service_;
203 }; 203 };
204 204
205 // A test network delegate that exercises the OnProxyFallback callback. 205 // A test network delegate that exercises the OnProxyFallback callback.
206 class TestProxyFallbackNetworkDelegate : public NetworkDelegate { 206 class TestProxyFallbackNetworkDelegate : public NetworkDelegate {
207 public: 207 public:
208 TestProxyFallbackNetworkDelegate() 208 TestProxyFallbackNetworkDelegate()
209 : on_proxy_fallback_called_(false), 209 : on_proxy_fallback_called_(false),
210 proxy_fallback_net_error_(0), 210 proxy_fallback_net_error_(0) {
Ryan Sleevi 2014/08/15 00:02:24 should this be "OK" instead of 0 ?
Not at Google. Contact bengr 2014/08/15 17:27:00 Done.
211 proxy_did_fallback_(false) {
212 } 211 }
213 212
214 virtual void OnProxyFallback( 213 virtual void OnProxyFallback(
215 const ProxyServer& proxy_server, 214 const ProxyServer& proxy_server,
216 int net_error, 215 int net_error) OVERRIDE {
Ryan Sleevi 2014/08/15 00:02:24 Does this fit on one line now?
Not at Google. Contact bengr 2014/08/15 17:27:00 Done.
217 bool did_fallback) OVERRIDE {
218 proxy_server_ = proxy_server; 216 proxy_server_ = proxy_server;
219 proxy_fallback_net_error_ = net_error; 217 proxy_fallback_net_error_ = net_error;
220 proxy_did_fallback_ = did_fallback;
221 on_proxy_fallback_called_ = true; 218 on_proxy_fallback_called_ = true;
222 } 219 }
223 220
224 bool on_proxy_fallback_called() const { 221 bool on_proxy_fallback_called() const {
225 return on_proxy_fallback_called_; 222 return on_proxy_fallback_called_;
226 } 223 }
227 224
228 const ProxyServer& proxy_server() const { 225 const ProxyServer& proxy_server() const {
229 return proxy_server_; 226 return proxy_server_;
230 } 227 }
231 228
232 int proxy_fallback_net_error() const { 229 int proxy_fallback_net_error() const {
233 return proxy_fallback_net_error_; 230 return proxy_fallback_net_error_;
234 } 231 }
235 232
236 bool proxy_did_fallback() const {
237 return proxy_did_fallback_;
238 }
239
240 private: 233 private:
241 bool on_proxy_fallback_called_; 234 bool on_proxy_fallback_called_;
242 ProxyServer proxy_server_; 235 ProxyServer proxy_server_;
243 int proxy_fallback_net_error_; 236 int proxy_fallback_net_error_;
244 bool proxy_did_fallback_;
245 }; 237 };
246 238
247 } // namespace 239 } // namespace
248 240
249 TEST_F(ProxyServiceTest, Direct) { 241 TEST_F(ProxyServiceTest, Direct) {
250 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 242 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
251 ProxyService service(new MockProxyConfigService( 243 ProxyService service(new MockProxyConfigService(
252 ProxyConfig::CreateDirect()), resolver, NULL); 244 ProxyConfig::CreateDirect()), resolver, NULL);
253 245
254 GURL url("http://www.google.com/"); 246 GURL url("http://www.google.com/");
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); 499 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI());
508 EXPECT_TRUE(info.did_use_pac_script()); 500 EXPECT_TRUE(info.did_use_pac_script());
509 501
510 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 502 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
511 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 503 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
512 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 504 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
513 505
514 // Now, imagine that connecting to foopy:8080 fails: there is nothing 506 // Now, imagine that connecting to foopy:8080 fails: there is nothing
515 // left to fallback to, since our proxy list was NOT terminated by 507 // left to fallback to, since our proxy list was NOT terminated by
516 // DIRECT. 508 // DIRECT.
517 TestProxyFallbackNetworkDelegate network_delegate; 509 NetworkDelegate network_delegate;
518 TestCompletionCallback callback2; 510 TestCompletionCallback callback2;
519 ProxyServer expected_proxy_server = info.proxy_server(); 511 ProxyServer expected_proxy_server = info.proxy_server();
520 rv = service.ReconsiderProxyAfterError( 512 rv = service.ReconsiderProxyAfterError(
521 url, net::LOAD_NORMAL, net::ERR_PROXY_CONNECTION_FAILED, 513 url, net::LOAD_NORMAL, net::ERR_PROXY_CONNECTION_FAILED,
522 &info, callback2.callback(), NULL, &network_delegate, BoundNetLog()); 514 &info, callback2.callback(), NULL, &network_delegate, BoundNetLog());
523 // ReconsiderProxyAfterError returns error indicating nothing left. 515 // ReconsiderProxyAfterError returns error indicating nothing left.
524 EXPECT_EQ(ERR_FAILED, rv); 516 EXPECT_EQ(ERR_FAILED, rv);
525 EXPECT_TRUE(info.is_empty()); 517 EXPECT_TRUE(info.is_empty());
526 EXPECT_TRUE(network_delegate.on_proxy_fallback_called());
527 EXPECT_EQ(expected_proxy_server, network_delegate.proxy_server());
528 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED,
529 network_delegate.proxy_fallback_net_error());
530 EXPECT_FALSE(network_delegate.proxy_did_fallback());
531 } 518 }
532 519
533 // Test that if the execution of the PAC script fails (i.e. javascript runtime 520 // Test that if the execution of the PAC script fails (i.e. javascript runtime
534 // error), and the PAC settings are non-mandatory, that we fall-back to direct. 521 // error), and the PAC settings are non-mandatory, that we fall-back to direct.
535 TEST_F(ProxyServiceTest, PAC_RuntimeError) { 522 TEST_F(ProxyServiceTest, PAC_RuntimeError) {
536 MockProxyConfigService* config_service = 523 MockProxyConfigService* config_service =
537 new MockProxyConfigService("http://foopy/proxy.pac"); 524 new MockProxyConfigService("http://foopy/proxy.pac");
538 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; 525 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
539 526
540 ProxyService service(config_service, resolver, NULL); 527 ProxyService service(config_service, resolver, NULL);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 600
614 // Set the result in proxy resolver. 601 // Set the result in proxy resolver.
615 resolver->pending_requests()[0]->results()->UsePacString( 602 resolver->pending_requests()[0]->results()->UsePacString(
616 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); 603 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20");
617 resolver->pending_requests()[0]->CompleteNow(OK); 604 resolver->pending_requests()[0]->CompleteNow(OK);
618 605
619 EXPECT_EQ(OK, callback1.WaitForResult()); 606 EXPECT_EQ(OK, callback1.WaitForResult());
620 EXPECT_TRUE(info.is_direct()); 607 EXPECT_TRUE(info.is_direct());
621 608
622 // Fallback 1. 609 // Fallback 1.
623 TestProxyFallbackNetworkDelegate network_delegate2;
624 TestCompletionCallback callback2; 610 TestCompletionCallback callback2;
625 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, 611 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL,
626 net::ERR_PROXY_CONNECTION_FAILED, 612 net::ERR_PROXY_CONNECTION_FAILED,
627 &info, callback2.callback(), NULL, 613 &info, callback2.callback(), NULL,
628 NULL, BoundNetLog()); 614 NULL, BoundNetLog());
629 EXPECT_EQ(OK, rv); 615 EXPECT_EQ(OK, rv);
630 EXPECT_FALSE(info.is_direct()); 616 EXPECT_FALSE(info.is_direct());
631 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); 617 EXPECT_EQ("foobar:10", info.proxy_server().ToURI());
632 // No network delegate provided.
633 EXPECT_FALSE(network_delegate2.on_proxy_fallback_called());
634 618
635 // Fallback 2. 619 // Fallback 2.
636 TestProxyFallbackNetworkDelegate network_delegate3; 620 NetworkDelegate network_delegate;
637 ProxyServer expected_proxy_server3 = info.proxy_server(); 621 ProxyServer expected_proxy_server3 = info.proxy_server();
638 TestCompletionCallback callback3; 622 TestCompletionCallback callback3;
639 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, 623 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL,
640 net::ERR_PROXY_CONNECTION_FAILED, 624 net::ERR_PROXY_CONNECTION_FAILED,
641 &info, callback3.callback(), NULL, 625 &info, callback3.callback(), NULL,
642 &network_delegate3, BoundNetLog()); 626 &network_delegate, BoundNetLog());
643 EXPECT_EQ(OK, rv); 627 EXPECT_EQ(OK, rv);
644 EXPECT_TRUE(info.is_direct()); 628 EXPECT_TRUE(info.is_direct());
645 EXPECT_TRUE(network_delegate3.on_proxy_fallback_called());
646 EXPECT_EQ(expected_proxy_server3, network_delegate3.proxy_server());
647 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED,
648 network_delegate3.proxy_fallback_net_error());
649 EXPECT_TRUE(network_delegate3.proxy_did_fallback());
650 629
651 // Fallback 3. 630 // Fallback 3.
652 TestProxyFallbackNetworkDelegate network_delegate4;
653 ProxyServer expected_proxy_server4 = info.proxy_server(); 631 ProxyServer expected_proxy_server4 = info.proxy_server();
654 TestCompletionCallback callback4; 632 TestCompletionCallback callback4;
655 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, 633 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL,
656 net::ERR_PROXY_CONNECTION_FAILED, 634 net::ERR_PROXY_CONNECTION_FAILED,
657 &info, callback4.callback(), NULL, 635 &info, callback4.callback(), NULL,
658 &network_delegate4, BoundNetLog()); 636 &network_delegate, BoundNetLog());
659 EXPECT_EQ(OK, rv); 637 EXPECT_EQ(OK, rv);
660 EXPECT_FALSE(info.is_direct()); 638 EXPECT_FALSE(info.is_direct());
661 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); 639 EXPECT_EQ("foobar:20", info.proxy_server().ToURI());
662 EXPECT_TRUE(network_delegate4.on_proxy_fallback_called());
663 EXPECT_EQ(expected_proxy_server4, network_delegate4.proxy_server());
664 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED,
665 network_delegate4.proxy_fallback_net_error());
666 EXPECT_TRUE(network_delegate4.proxy_did_fallback());
667 640
668 // Fallback 4 -- Nothing to fall back to! 641 // Fallback 4 -- Nothing to fall back to!
669 TestProxyFallbackNetworkDelegate network_delegate5;
670 ProxyServer expected_proxy_server5 = info.proxy_server(); 642 ProxyServer expected_proxy_server5 = info.proxy_server();
671 TestCompletionCallback callback5; 643 TestCompletionCallback callback5;
672 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, 644 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL,
673 net::ERR_PROXY_CONNECTION_FAILED, 645 net::ERR_PROXY_CONNECTION_FAILED,
674 &info, callback5.callback(), NULL, 646 &info, callback5.callback(), NULL,
675 &network_delegate5, BoundNetLog()); 647 &network_delegate, BoundNetLog());
676 EXPECT_EQ(ERR_FAILED, rv); 648 EXPECT_EQ(ERR_FAILED, rv);
677 EXPECT_TRUE(info.is_empty()); 649 EXPECT_TRUE(info.is_empty());
678 EXPECT_TRUE(network_delegate5.on_proxy_fallback_called());
679 EXPECT_EQ(expected_proxy_server5, network_delegate5.proxy_server());
680 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED,
681 network_delegate5.proxy_fallback_net_error());
682 EXPECT_FALSE(network_delegate5.proxy_did_fallback());
683 } 650 }
684 651
685 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { 652 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) {
686 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied 653 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied
687 // to ProxyInfo after the proxy is resolved via a PAC script. 654 // to ProxyInfo after the proxy is resolved via a PAC script.
688 ProxyConfig config = 655 ProxyConfig config =
689 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); 656 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"));
690 config.set_source(PROXY_CONFIG_SOURCE_TEST); 657 config.set_source(PROXY_CONFIG_SOURCE_TEST);
691 658
692 MockProxyConfigService* config_service = new MockProxyConfigService(config); 659 MockProxyConfigService* config_service = new MockProxyConfigService(config);
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 EXPECT_EQ(OK, rv); 954 EXPECT_EQ(OK, rv);
988 955
989 // Proxy times should not have been modified by fallback. 956 // Proxy times should not have been modified by fallback.
990 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); 957 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time());
991 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); 958 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time());
992 959
993 // The second proxy should be specified. 960 // The second proxy should be specified.
994 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 961 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
995 // Report back that the second proxy worked. This will globally mark the 962 // Report back that the second proxy worked. This will globally mark the
996 // first proxy as bad. 963 // first proxy as bad.
997 service.ReportSuccess(info); 964 TestProxyFallbackNetworkDelegate test_delegate;
965 service.ReportSuccess(info, &test_delegate);
966 EXPECT_EQ(info.proxy_server(), test_delegate.proxy_server());
967 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED,
968 test_delegate.proxy_fallback_net_error());
998 969
999 TestCompletionCallback callback3; 970 TestCompletionCallback callback3;
1000 rv = service.ResolveProxy( 971 rv = service.ResolveProxy(
1001 url, net::LOAD_NORMAL, &info, callback3.callback(), NULL, NULL, 972 url, net::LOAD_NORMAL, &info, callback3.callback(), NULL, NULL,
1002 BoundNetLog()); 973 BoundNetLog());
1003 EXPECT_EQ(ERR_IO_PENDING, rv); 974 EXPECT_EQ(ERR_IO_PENDING, rv);
1004 975
1005 ASSERT_EQ(1u, resolver->pending_requests().size()); 976 ASSERT_EQ(1u, resolver->pending_requests().size());
1006 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); 977 EXPECT_EQ(url, resolver->pending_requests()[0]->url());
1007 978
(...skipping 2097 matching lines...) Expand 10 before | Expand all | Expand 10 after
3105 ProxyInfo info3; 3076 ProxyInfo info3;
3106 TestCompletionCallback callback3; 3077 TestCompletionCallback callback3;
3107 rv = service.ResolveProxy( 3078 rv = service.ResolveProxy(
3108 GURL("http://request3"), net::LOAD_NORMAL, &info3, callback3.callback(), 3079 GURL("http://request3"), net::LOAD_NORMAL, &info3, callback3.callback(),
3109 NULL, NULL, BoundNetLog()); 3080 NULL, NULL, BoundNetLog());
3110 EXPECT_EQ(OK, rv); 3081 EXPECT_EQ(OK, rv);
3111 EXPECT_TRUE(info3.is_direct()); 3082 EXPECT_TRUE(info3.is_direct());
3112 } 3083 }
3113 3084
3114 } // namespace net 3085 } // namespace net
OLDNEW
« net/proxy/proxy_service.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