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

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

Powered by Google App Engine
This is Rietveld 408576698