OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/socket/transport_client_socket_pool.h" | 5 #include "net/socket/transport_client_socket_pool.h" |
6 | 6 |
| 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" |
7 #include "base/callback.h" | 9 #include "base/callback.h" |
8 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
9 #include "base/logging.h" | 11 #include "base/logging.h" |
10 #include "base/message_loop.h" | 12 #include "base/message_loop.h" |
11 #include "base/threading/platform_thread.h" | 13 #include "base/threading/platform_thread.h" |
12 #include "net/base/ip_endpoint.h" | 14 #include "net/base/ip_endpoint.h" |
13 #include "net/base/mock_host_resolver.h" | 15 #include "net/base/mock_host_resolver.h" |
14 #include "net/base/net_errors.h" | 16 #include "net/base/net_errors.h" |
15 #include "net/base/net_util.h" | 17 #include "net/base/net_util.h" |
16 #include "net/base/sys_addrinfo.h" | 18 #include "net/base/sys_addrinfo.h" |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 ai = ai->ai_next; | 496 ai = ai->ai_next; |
495 EXPECT_EQ(AF_INET, ai->ai_family); | 497 EXPECT_EQ(AF_INET, ai->ai_family); |
496 ai = ai->ai_next; | 498 ai = ai->ai_next; |
497 EXPECT_EQ(AF_INET6, ai->ai_family); | 499 EXPECT_EQ(AF_INET6, ai->ai_family); |
498 ai = ai->ai_next; | 500 ai = ai->ai_next; |
499 EXPECT_EQ(AF_INET6, ai->ai_family); | 501 EXPECT_EQ(AF_INET6, ai->ai_family); |
500 EXPECT_TRUE(ai->ai_next == NULL); | 502 EXPECT_TRUE(ai->ai_next == NULL); |
501 } | 503 } |
502 | 504 |
503 TEST_F(TransportClientSocketPoolTest, Basic) { | 505 TEST_F(TransportClientSocketPoolTest, Basic) { |
504 TestOldCompletionCallback callback; | 506 TestCompletionCallback callback; |
505 ClientSocketHandle handle; | 507 ClientSocketHandle handle; |
506 int rv = handle.Init("a", low_params_, LOW, &callback, &pool_, BoundNetLog()); | 508 int rv = handle.Init("a", low_params_, LOW, callback.callback(), &pool_, |
| 509 BoundNetLog()); |
507 EXPECT_EQ(ERR_IO_PENDING, rv); | 510 EXPECT_EQ(ERR_IO_PENDING, rv); |
508 EXPECT_FALSE(handle.is_initialized()); | 511 EXPECT_FALSE(handle.is_initialized()); |
509 EXPECT_FALSE(handle.socket()); | 512 EXPECT_FALSE(handle.socket()); |
510 | 513 |
511 EXPECT_EQ(OK, callback.WaitForResult()); | 514 EXPECT_EQ(OK, callback.WaitForResult()); |
512 EXPECT_TRUE(handle.is_initialized()); | 515 EXPECT_TRUE(handle.is_initialized()); |
513 EXPECT_TRUE(handle.socket()); | 516 EXPECT_TRUE(handle.socket()); |
514 | 517 |
515 handle.Reset(); | 518 handle.Reset(); |
516 } | 519 } |
517 | 520 |
518 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) { | 521 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) { |
519 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); | 522 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); |
520 TestOldCompletionCallback callback; | 523 TestCompletionCallback callback; |
521 ClientSocketHandle handle; | 524 ClientSocketHandle handle; |
522 HostPortPair host_port_pair("unresolvable.host.name", 80); | 525 HostPortPair host_port_pair("unresolvable.host.name", 80); |
523 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( | 526 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( |
524 host_port_pair, kDefaultPriority, false, false)); | 527 host_port_pair, kDefaultPriority, false, false)); |
525 EXPECT_EQ(ERR_IO_PENDING, | 528 EXPECT_EQ(ERR_IO_PENDING, |
526 handle.Init("a", dest, kDefaultPriority, &callback, &pool_, | 529 handle.Init("a", dest, kDefaultPriority, callback.callback(), |
527 BoundNetLog())); | 530 &pool_, BoundNetLog())); |
528 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); | 531 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); |
529 } | 532 } |
530 | 533 |
531 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) { | 534 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) { |
532 client_socket_factory_.set_client_socket_type( | 535 client_socket_factory_.set_client_socket_type( |
533 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); | 536 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); |
534 TestOldCompletionCallback callback; | 537 TestCompletionCallback callback; |
535 ClientSocketHandle handle; | 538 ClientSocketHandle handle; |
536 EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, | 539 EXPECT_EQ(ERR_IO_PENDING, |
537 &callback, &pool_, BoundNetLog())); | 540 handle.Init("a", params_, kDefaultPriority, callback.callback(), |
| 541 &pool_, BoundNetLog())); |
538 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); | 542 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); |
539 | 543 |
540 // Make the host resolutions complete synchronously this time. | 544 // Make the host resolutions complete synchronously this time. |
541 host_resolver_->set_synchronous_mode(true); | 545 host_resolver_->set_synchronous_mode(true); |
542 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.Init("a", params_, | 546 EXPECT_EQ(ERR_CONNECTION_FAILED, |
543 kDefaultPriority, &callback, | 547 handle.Init("a", params_, kDefaultPriority, callback.callback(), |
544 &pool_, BoundNetLog())); | 548 &pool_, BoundNetLog())); |
545 } | 549 } |
546 | 550 |
547 TEST_F(TransportClientSocketPoolTest, PendingRequests) { | 551 TEST_F(TransportClientSocketPoolTest, PendingRequests) { |
548 // First request finishes asynchronously. | 552 // First request finishes asynchronously. |
549 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); | 553 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); |
550 EXPECT_EQ(OK, (*requests())[0]->WaitForResult()); | 554 EXPECT_EQ(OK, (*requests())[0]->WaitForResult()); |
551 | 555 |
552 // Make all subsequent host resolutions complete synchronously. | 556 // Make all subsequent host resolutions complete synchronously. |
553 host_resolver_->set_synchronous_mode(true); | 557 host_resolver_->set_synchronous_mode(true); |
554 | 558 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
637 client_socket_factory_.allocation_count()); | 641 client_socket_factory_.allocation_count()); |
638 | 642 |
639 // First asynchronous request, and then last 5 pending requests. | 643 // First asynchronous request, and then last 5 pending requests. |
640 EXPECT_EQ(6U, completion_count()); | 644 EXPECT_EQ(6U, completion_count()); |
641 } | 645 } |
642 | 646 |
643 // This test will start up a RequestSocket() and then immediately Cancel() it. | 647 // This test will start up a RequestSocket() and then immediately Cancel() it. |
644 // The pending host resolution will eventually complete, and destroy the | 648 // The pending host resolution will eventually complete, and destroy the |
645 // ClientSocketPool which will crash if the group was not cleared properly. | 649 // ClientSocketPool which will crash if the group was not cleared properly. |
646 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) { | 650 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) { |
647 TestOldCompletionCallback callback; | 651 TestCompletionCallback callback; |
648 ClientSocketHandle handle; | 652 ClientSocketHandle handle; |
649 EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, | 653 EXPECT_EQ(ERR_IO_PENDING, |
650 &callback, &pool_, BoundNetLog())); | 654 handle.Init("a", params_, kDefaultPriority, callback.callback(), |
| 655 &pool_, BoundNetLog())); |
651 handle.Reset(); | 656 handle.Reset(); |
652 } | 657 } |
653 | 658 |
654 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) { | 659 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) { |
655 ClientSocketHandle handle; | 660 ClientSocketHandle handle; |
656 TestOldCompletionCallback callback; | 661 TestCompletionCallback callback; |
657 ClientSocketHandle handle2; | 662 ClientSocketHandle handle2; |
658 TestOldCompletionCallback callback2; | 663 TestCompletionCallback callback2; |
659 | 664 |
660 EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, | 665 EXPECT_EQ(ERR_IO_PENDING, |
661 &callback, &pool_, BoundNetLog())); | 666 handle.Init("a", params_, kDefaultPriority, callback.callback(), |
662 EXPECT_EQ(ERR_IO_PENDING, handle2.Init("a", params_, kDefaultPriority, | 667 &pool_, BoundNetLog())); |
663 &callback2, &pool_, BoundNetLog())); | 668 EXPECT_EQ(ERR_IO_PENDING, |
| 669 handle2.Init("a", params_, kDefaultPriority, callback2.callback(), |
| 670 &pool_, BoundNetLog())); |
664 | 671 |
665 handle.Reset(); | 672 handle.Reset(); |
666 | 673 |
667 EXPECT_EQ(OK, callback2.WaitForResult()); | 674 EXPECT_EQ(OK, callback2.WaitForResult()); |
668 handle2.Reset(); | 675 handle2.Reset(); |
669 } | 676 } |
670 | 677 |
671 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) { | 678 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) { |
672 client_socket_factory_.set_client_socket_type( | 679 client_socket_factory_.set_client_socket_type( |
673 MockClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET); | 680 MockClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET); |
674 ClientSocketHandle handle; | 681 ClientSocketHandle handle; |
675 TestOldCompletionCallback callback; | 682 TestCompletionCallback callback; |
676 EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, | 683 EXPECT_EQ(ERR_IO_PENDING, |
677 &callback, &pool_, BoundNetLog())); | 684 handle.Init("a", params_, kDefaultPriority, callback.callback(), |
| 685 &pool_, BoundNetLog())); |
678 | 686 |
679 handle.Reset(); | 687 handle.Reset(); |
680 | 688 |
681 TestOldCompletionCallback callback2; | 689 TestCompletionCallback callback2; |
682 EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, | 690 EXPECT_EQ(ERR_IO_PENDING, |
683 &callback2, &pool_, BoundNetLog())); | 691 handle.Init("a", params_, kDefaultPriority, callback2.callback(), |
| 692 &pool_, BoundNetLog())); |
684 | 693 |
685 host_resolver_->set_synchronous_mode(true); | 694 host_resolver_->set_synchronous_mode(true); |
686 // At this point, handle has two ConnectingSockets out for it. Due to the | 695 // At this point, handle has two ConnectingSockets out for it. Due to the |
687 // setting the mock resolver into synchronous mode, the host resolution for | 696 // setting the mock resolver into synchronous mode, the host resolution for |
688 // both will return in the same loop of the MessageLoop. The client socket | 697 // both will return in the same loop of the MessageLoop. The client socket |
689 // is a pending socket, so the Connect() will asynchronously complete on the | 698 // is a pending socket, so the Connect() will asynchronously complete on the |
690 // next loop of the MessageLoop. That means that the first | 699 // next loop of the MessageLoop. That means that the first |
691 // ConnectingSocket will enter OnIOComplete, and then the second one will. | 700 // ConnectingSocket will enter OnIOComplete, and then the second one will. |
692 // If the first one is not cancelled, it will advance the load state, and | 701 // If the first one is not cancelled, it will advance the load state, and |
693 // then the second one will crash. | 702 // then the second one will crash. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
750 EXPECT_EQ(11, GetOrderOfRequest(12)); | 759 EXPECT_EQ(11, GetOrderOfRequest(12)); |
751 EXPECT_EQ(8, GetOrderOfRequest(13)); | 760 EXPECT_EQ(8, GetOrderOfRequest(13)); |
752 EXPECT_EQ(12, GetOrderOfRequest(14)); | 761 EXPECT_EQ(12, GetOrderOfRequest(14)); |
753 EXPECT_EQ(13, GetOrderOfRequest(15)); | 762 EXPECT_EQ(13, GetOrderOfRequest(15)); |
754 EXPECT_EQ(15, GetOrderOfRequest(16)); | 763 EXPECT_EQ(15, GetOrderOfRequest(16)); |
755 | 764 |
756 // Make sure we test order of all requests made. | 765 // Make sure we test order of all requests made. |
757 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(17)); | 766 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(17)); |
758 } | 767 } |
759 | 768 |
760 class RequestSocketCallback : public CallbackRunner< Tuple1<int> > { | 769 class RequestSocketCallback : public TestCompletionCallbackBase { |
761 public: | 770 public: |
762 RequestSocketCallback(ClientSocketHandle* handle, | 771 RequestSocketCallback(ClientSocketHandle* handle, |
763 TransportClientSocketPool* pool) | 772 TransportClientSocketPool* pool) |
764 : handle_(handle), | 773 : handle_(handle), |
765 pool_(pool), | 774 pool_(pool), |
766 within_callback_(false) {} | 775 within_callback_(false), |
| 776 ALLOW_THIS_IN_INITIALIZER_LIST(callback_( |
| 777 base::Bind(&RequestSocketCallback::OnComplete, |
| 778 base::Unretained(this)))) { |
| 779 } |
767 | 780 |
768 virtual void RunWithParams(const Tuple1<int>& params) { | 781 virtual ~RequestSocketCallback() {} |
769 callback_.RunWithParams(params); | 782 |
770 ASSERT_EQ(OK, params.a); | 783 const CompletionCallback& callback() const { return callback_; } |
| 784 |
| 785 private: |
| 786 void OnComplete(int result) { |
| 787 SetResult(result); |
| 788 ASSERT_EQ(OK, result); |
771 | 789 |
772 if (!within_callback_) { | 790 if (!within_callback_) { |
773 // Don't allow reuse of the socket. Disconnect it and then release it and | 791 // Don't allow reuse of the socket. Disconnect it and then release it and |
774 // run through the MessageLoop once to get it completely released. | 792 // run through the MessageLoop once to get it completely released. |
775 handle_->socket()->Disconnect(); | 793 handle_->socket()->Disconnect(); |
776 handle_->Reset(); | 794 handle_->Reset(); |
777 { | 795 { |
778 MessageLoop::ScopedNestableTaskAllower nestable( | 796 MessageLoop::ScopedNestableTaskAllower nestable( |
779 MessageLoop::current()); | 797 MessageLoop::current()); |
780 MessageLoop::current()->RunAllPending(); | 798 MessageLoop::current()->RunAllPending(); |
781 } | 799 } |
782 within_callback_ = true; | 800 within_callback_ = true; |
783 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( | 801 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( |
784 HostPortPair("www.google.com", 80), LOWEST, false, false)); | 802 HostPortPair("www.google.com", 80), LOWEST, false, false)); |
785 int rv = handle_->Init("a", dest, LOWEST, this, pool_, BoundNetLog()); | 803 int rv = handle_->Init("a", dest, LOWEST, callback(), pool_, |
| 804 BoundNetLog()); |
786 EXPECT_EQ(OK, rv); | 805 EXPECT_EQ(OK, rv); |
787 } | 806 } |
788 } | 807 } |
789 | 808 |
790 int WaitForResult() { | |
791 return callback_.WaitForResult(); | |
792 } | |
793 | |
794 private: | |
795 ClientSocketHandle* const handle_; | 809 ClientSocketHandle* const handle_; |
796 TransportClientSocketPool* const pool_; | 810 TransportClientSocketPool* const pool_; |
797 bool within_callback_; | 811 bool within_callback_; |
798 TestOldCompletionCallback callback_; | 812 CompletionCallback callback_; |
| 813 |
| 814 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback); |
799 }; | 815 }; |
800 | 816 |
801 TEST_F(TransportClientSocketPoolTest, RequestTwice) { | 817 TEST_F(TransportClientSocketPoolTest, RequestTwice) { |
802 ClientSocketHandle handle; | 818 ClientSocketHandle handle; |
803 RequestSocketCallback callback(&handle, &pool_); | 819 RequestSocketCallback callback(&handle, &pool_); |
804 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( | 820 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( |
805 HostPortPair("www.google.com", 80), LOWEST, false, false)); | 821 HostPortPair("www.google.com", 80), LOWEST, false, false)); |
806 int rv = handle.Init("a", dest, LOWEST, &callback, &pool_, | 822 int rv = handle.Init("a", dest, LOWEST, callback.callback(), &pool_, |
807 BoundNetLog()); | 823 BoundNetLog()); |
808 ASSERT_EQ(ERR_IO_PENDING, rv); | 824 ASSERT_EQ(ERR_IO_PENDING, rv); |
809 | 825 |
810 // The callback is going to request "www.google.com". We want it to complete | 826 // The callback is going to request "www.google.com". We want it to complete |
811 // synchronously this time. | 827 // synchronously this time. |
812 host_resolver_->set_synchronous_mode(true); | 828 host_resolver_->set_synchronous_mode(true); |
813 | 829 |
814 EXPECT_EQ(OK, callback.WaitForResult()); | 830 EXPECT_EQ(OK, callback.WaitForResult()); |
815 | 831 |
816 handle.Reset(); | 832 handle.Reset(); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 | 873 |
858 // Queue up all the requests | 874 // Queue up all the requests |
859 for (int i = 0; i < kNumRequests; i++) | 875 for (int i = 0; i < kNumRequests; i++) |
860 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); | 876 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); |
861 | 877 |
862 for (int i = 0; i < kNumRequests; i++) | 878 for (int i = 0; i < kNumRequests; i++) |
863 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult()); | 879 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult()); |
864 } | 880 } |
865 | 881 |
866 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) { | 882 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) { |
867 TestOldCompletionCallback callback; | 883 TestCompletionCallback callback; |
868 ClientSocketHandle handle; | 884 ClientSocketHandle handle; |
869 int rv = handle.Init("a", low_params_, LOW, &callback, &pool_, BoundNetLog()); | 885 int rv = handle.Init("a", low_params_, LOW, callback.callback(), &pool_, |
| 886 BoundNetLog()); |
870 EXPECT_EQ(ERR_IO_PENDING, rv); | 887 EXPECT_EQ(ERR_IO_PENDING, rv); |
871 EXPECT_FALSE(handle.is_initialized()); | 888 EXPECT_FALSE(handle.is_initialized()); |
872 EXPECT_FALSE(handle.socket()); | 889 EXPECT_FALSE(handle.socket()); |
873 | 890 |
874 EXPECT_EQ(OK, callback.WaitForResult()); | 891 EXPECT_EQ(OK, callback.WaitForResult()); |
875 EXPECT_TRUE(handle.is_initialized()); | 892 EXPECT_TRUE(handle.is_initialized()); |
876 EXPECT_TRUE(handle.socket()); | 893 EXPECT_TRUE(handle.socket()); |
877 | 894 |
878 handle.Reset(); | 895 handle.Reset(); |
879 | 896 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
912 MockClientSocketFactory::ClientSocketType* cases[2] = { | 929 MockClientSocketFactory::ClientSocketType* cases[2] = { |
913 case1_types, | 930 case1_types, |
914 case2_types | 931 case2_types |
915 }; | 932 }; |
916 | 933 |
917 for (size_t index = 0; index < arraysize(cases); ++index) { | 934 for (size_t index = 0; index < arraysize(cases); ++index) { |
918 client_socket_factory_.set_client_socket_types(cases[index], 2); | 935 client_socket_factory_.set_client_socket_types(cases[index], 2); |
919 | 936 |
920 EXPECT_EQ(0, pool_.IdleSocketCount()); | 937 EXPECT_EQ(0, pool_.IdleSocketCount()); |
921 | 938 |
922 TestOldCompletionCallback callback; | 939 TestCompletionCallback callback; |
923 ClientSocketHandle handle; | 940 ClientSocketHandle handle; |
924 int rv = handle.Init("b", low_params_, LOW, &callback, &pool_, | 941 int rv = handle.Init("b", low_params_, LOW, callback.callback(), &pool_, |
925 BoundNetLog()); | 942 BoundNetLog()); |
926 EXPECT_EQ(ERR_IO_PENDING, rv); | 943 EXPECT_EQ(ERR_IO_PENDING, rv); |
927 EXPECT_FALSE(handle.is_initialized()); | 944 EXPECT_FALSE(handle.is_initialized()); |
928 EXPECT_FALSE(handle.socket()); | 945 EXPECT_FALSE(handle.socket()); |
929 | 946 |
930 // Create the first socket, set the timer. | 947 // Create the first socket, set the timer. |
931 MessageLoop::current()->RunAllPending(); | 948 MessageLoop::current()->RunAllPending(); |
932 | 949 |
933 // Wait for the backup socket timer to fire. | 950 // Wait for the backup socket timer to fire. |
934 base::PlatformThread::Sleep( | 951 base::PlatformThread::Sleep( |
(...skipping 19 matching lines...) Expand all Loading... |
954 // of the backup socket, but then we cancelled the request after that. | 971 // of the backup socket, but then we cancelled the request after that. |
955 TEST_F(TransportClientSocketPoolTest, BackupSocketCancel) { | 972 TEST_F(TransportClientSocketPoolTest, BackupSocketCancel) { |
956 client_socket_factory_.set_client_socket_type( | 973 client_socket_factory_.set_client_socket_type( |
957 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET); | 974 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET); |
958 | 975 |
959 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT }; | 976 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT }; |
960 | 977 |
961 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) { | 978 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) { |
962 EXPECT_EQ(0, pool_.IdleSocketCount()); | 979 EXPECT_EQ(0, pool_.IdleSocketCount()); |
963 | 980 |
964 TestOldCompletionCallback callback; | 981 TestCompletionCallback callback; |
965 ClientSocketHandle handle; | 982 ClientSocketHandle handle; |
966 int rv = handle.Init("c", low_params_, LOW, &callback, &pool_, | 983 int rv = handle.Init("c", low_params_, LOW, callback.callback(), &pool_, |
967 BoundNetLog()); | 984 BoundNetLog()); |
968 EXPECT_EQ(ERR_IO_PENDING, rv); | 985 EXPECT_EQ(ERR_IO_PENDING, rv); |
969 EXPECT_FALSE(handle.is_initialized()); | 986 EXPECT_FALSE(handle.is_initialized()); |
970 EXPECT_FALSE(handle.socket()); | 987 EXPECT_FALSE(handle.socket()); |
971 | 988 |
972 // Create the first socket, set the timer. | 989 // Create the first socket, set the timer. |
973 MessageLoop::current()->RunAllPending(); | 990 MessageLoop::current()->RunAllPending(); |
974 | 991 |
975 if (index == CANCEL_AFTER_WAIT) { | 992 if (index == CANCEL_AFTER_WAIT) { |
976 // Wait for the backup socket timer to fire. | 993 // Wait for the backup socket timer to fire. |
(...skipping 22 matching lines...) Expand all Loading... |
999 // The first socket will not connect. | 1016 // The first socket will not connect. |
1000 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET, | 1017 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET, |
1001 // The second socket will fail immediately. | 1018 // The second socket will fail immediately. |
1002 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET | 1019 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET |
1003 }; | 1020 }; |
1004 | 1021 |
1005 client_socket_factory_.set_client_socket_types(case_types, 2); | 1022 client_socket_factory_.set_client_socket_types(case_types, 2); |
1006 | 1023 |
1007 EXPECT_EQ(0, pool_.IdleSocketCount()); | 1024 EXPECT_EQ(0, pool_.IdleSocketCount()); |
1008 | 1025 |
1009 TestOldCompletionCallback callback; | 1026 TestCompletionCallback callback; |
1010 ClientSocketHandle handle; | 1027 ClientSocketHandle handle; |
1011 int rv = handle.Init("b", low_params_, LOW, &callback, &pool_, BoundNetLog()); | 1028 int rv = handle.Init("b", low_params_, LOW, callback.callback(), &pool_, |
| 1029 BoundNetLog()); |
1012 EXPECT_EQ(ERR_IO_PENDING, rv); | 1030 EXPECT_EQ(ERR_IO_PENDING, rv); |
1013 EXPECT_FALSE(handle.is_initialized()); | 1031 EXPECT_FALSE(handle.is_initialized()); |
1014 EXPECT_FALSE(handle.socket()); | 1032 EXPECT_FALSE(handle.socket()); |
1015 | 1033 |
1016 // Create the first socket, set the timer. | 1034 // Create the first socket, set the timer. |
1017 MessageLoop::current()->RunAllPending(); | 1035 MessageLoop::current()->RunAllPending(); |
1018 | 1036 |
1019 // Wait for the backup socket timer to fire. | 1037 // Wait for the backup socket timer to fire. |
1020 base::PlatformThread::Sleep(ClientSocketPool::kMaxConnectRetryIntervalMs); | 1038 base::PlatformThread::Sleep(ClientSocketPool::kMaxConnectRetryIntervalMs); |
1021 | 1039 |
(...skipping 23 matching lines...) Expand all Loading... |
1045 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET, | 1063 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET, |
1046 // The second socket will not connect. | 1064 // The second socket will not connect. |
1047 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET | 1065 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET |
1048 }; | 1066 }; |
1049 | 1067 |
1050 client_socket_factory_.set_client_socket_types(case_types, 2); | 1068 client_socket_factory_.set_client_socket_types(case_types, 2); |
1051 client_socket_factory_.set_delay_ms(5000); | 1069 client_socket_factory_.set_delay_ms(5000); |
1052 | 1070 |
1053 EXPECT_EQ(0, pool_.IdleSocketCount()); | 1071 EXPECT_EQ(0, pool_.IdleSocketCount()); |
1054 | 1072 |
1055 TestOldCompletionCallback callback; | 1073 TestCompletionCallback callback; |
1056 ClientSocketHandle handle; | 1074 ClientSocketHandle handle; |
1057 int rv = handle.Init("b", low_params_, LOW, &callback, &pool_, BoundNetLog()); | 1075 int rv = handle.Init("b", low_params_, LOW, callback.callback(), &pool_, |
| 1076 BoundNetLog()); |
1058 EXPECT_EQ(ERR_IO_PENDING, rv); | 1077 EXPECT_EQ(ERR_IO_PENDING, rv); |
1059 EXPECT_FALSE(handle.is_initialized()); | 1078 EXPECT_FALSE(handle.is_initialized()); |
1060 EXPECT_FALSE(handle.socket()); | 1079 EXPECT_FALSE(handle.socket()); |
1061 | 1080 |
1062 // Create the first socket, set the timer. | 1081 // Create the first socket, set the timer. |
1063 MessageLoop::current()->RunAllPending(); | 1082 MessageLoop::current()->RunAllPending(); |
1064 | 1083 |
1065 // Wait for the backup socket timer to fire. | 1084 // Wait for the backup socket timer to fire. |
1066 base::PlatformThread::Sleep(ClientSocketPool::kMaxConnectRetryIntervalMs); | 1085 base::PlatformThread::Sleep(ClientSocketPool::kMaxConnectRetryIntervalMs); |
1067 | 1086 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1099 // This is the IPv4 socket. | 1118 // This is the IPv4 socket. |
1100 MockClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET | 1119 MockClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET |
1101 }; | 1120 }; |
1102 | 1121 |
1103 client_socket_factory_.set_client_socket_types(case_types, 2); | 1122 client_socket_factory_.set_client_socket_types(case_types, 2); |
1104 | 1123 |
1105 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. | 1124 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. |
1106 host_resolver_->rules()->AddIPLiteralRule( | 1125 host_resolver_->rules()->AddIPLiteralRule( |
1107 "*", "2:abcd::3:4:ff,2.2.2.2", ""); | 1126 "*", "2:abcd::3:4:ff,2.2.2.2", ""); |
1108 | 1127 |
1109 TestOldCompletionCallback callback; | 1128 TestCompletionCallback callback; |
1110 ClientSocketHandle handle; | 1129 ClientSocketHandle handle; |
1111 int rv = handle.Init("a", low_params_, LOW, &callback, &pool, BoundNetLog()); | 1130 int rv = handle.Init("a", low_params_, LOW, callback.callback(), &pool, |
| 1131 BoundNetLog()); |
1112 EXPECT_EQ(ERR_IO_PENDING, rv); | 1132 EXPECT_EQ(ERR_IO_PENDING, rv); |
1113 EXPECT_FALSE(handle.is_initialized()); | 1133 EXPECT_FALSE(handle.is_initialized()); |
1114 EXPECT_FALSE(handle.socket()); | 1134 EXPECT_FALSE(handle.socket()); |
1115 | 1135 |
1116 EXPECT_EQ(OK, callback.WaitForResult()); | 1136 EXPECT_EQ(OK, callback.WaitForResult()); |
1117 EXPECT_TRUE(handle.is_initialized()); | 1137 EXPECT_TRUE(handle.is_initialized()); |
1118 EXPECT_TRUE(handle.socket()); | 1138 EXPECT_TRUE(handle.socket()); |
1119 IPEndPoint endpoint; | 1139 IPEndPoint endpoint; |
1120 handle.socket()->GetLocalAddress(&endpoint); | 1140 handle.socket()->GetLocalAddress(&endpoint); |
1121 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 1141 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); |
(...skipping 21 matching lines...) Expand all Loading... |
1143 }; | 1163 }; |
1144 | 1164 |
1145 client_socket_factory_.set_client_socket_types(case_types, 2); | 1165 client_socket_factory_.set_client_socket_types(case_types, 2); |
1146 client_socket_factory_.set_delay_ms( | 1166 client_socket_factory_.set_delay_ms( |
1147 TransportConnectJob::kIPv6FallbackTimerInMs + 50); | 1167 TransportConnectJob::kIPv6FallbackTimerInMs + 50); |
1148 | 1168 |
1149 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. | 1169 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. |
1150 host_resolver_->rules()->AddIPLiteralRule( | 1170 host_resolver_->rules()->AddIPLiteralRule( |
1151 "*", "2:abcd::3:4:ff,2.2.2.2", ""); | 1171 "*", "2:abcd::3:4:ff,2.2.2.2", ""); |
1152 | 1172 |
1153 TestOldCompletionCallback callback; | 1173 TestCompletionCallback callback; |
1154 ClientSocketHandle handle; | 1174 ClientSocketHandle handle; |
1155 int rv = handle.Init("a", low_params_, LOW, &callback, &pool, BoundNetLog()); | 1175 int rv = handle.Init("a", low_params_, LOW, callback.callback(), &pool, |
| 1176 BoundNetLog()); |
1156 EXPECT_EQ(ERR_IO_PENDING, rv); | 1177 EXPECT_EQ(ERR_IO_PENDING, rv); |
1157 EXPECT_FALSE(handle.is_initialized()); | 1178 EXPECT_FALSE(handle.is_initialized()); |
1158 EXPECT_FALSE(handle.socket()); | 1179 EXPECT_FALSE(handle.socket()); |
1159 | 1180 |
1160 EXPECT_EQ(OK, callback.WaitForResult()); | 1181 EXPECT_EQ(OK, callback.WaitForResult()); |
1161 EXPECT_TRUE(handle.is_initialized()); | 1182 EXPECT_TRUE(handle.is_initialized()); |
1162 EXPECT_TRUE(handle.socket()); | 1183 EXPECT_TRUE(handle.socket()); |
1163 IPEndPoint endpoint; | 1184 IPEndPoint endpoint; |
1164 handle.socket()->GetLocalAddress(&endpoint); | 1185 handle.socket()->GetLocalAddress(&endpoint); |
1165 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 1186 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); |
(...skipping 10 matching lines...) Expand all Loading... |
1176 &client_socket_factory_, | 1197 &client_socket_factory_, |
1177 NULL); | 1198 NULL); |
1178 | 1199 |
1179 client_socket_factory_.set_client_socket_type( | 1200 client_socket_factory_.set_client_socket_type( |
1180 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 1201 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
1181 | 1202 |
1182 // Resolve an AddressList with only IPv6 addresses. | 1203 // Resolve an AddressList with only IPv6 addresses. |
1183 host_resolver_->rules()->AddIPLiteralRule( | 1204 host_resolver_->rules()->AddIPLiteralRule( |
1184 "*", "2:abcd::3:4:ff,3:abcd::3:4:ff", ""); | 1205 "*", "2:abcd::3:4:ff,3:abcd::3:4:ff", ""); |
1185 | 1206 |
1186 TestOldCompletionCallback callback; | 1207 TestCompletionCallback callback; |
1187 ClientSocketHandle handle; | 1208 ClientSocketHandle handle; |
1188 int rv = handle.Init("a", low_params_, LOW, &callback, &pool, BoundNetLog()); | 1209 int rv = handle.Init("a", low_params_, LOW, callback.callback(), &pool, |
| 1210 BoundNetLog()); |
1189 EXPECT_EQ(ERR_IO_PENDING, rv); | 1211 EXPECT_EQ(ERR_IO_PENDING, rv); |
1190 EXPECT_FALSE(handle.is_initialized()); | 1212 EXPECT_FALSE(handle.is_initialized()); |
1191 EXPECT_FALSE(handle.socket()); | 1213 EXPECT_FALSE(handle.socket()); |
1192 | 1214 |
1193 EXPECT_EQ(OK, callback.WaitForResult()); | 1215 EXPECT_EQ(OK, callback.WaitForResult()); |
1194 EXPECT_TRUE(handle.is_initialized()); | 1216 EXPECT_TRUE(handle.is_initialized()); |
1195 EXPECT_TRUE(handle.socket()); | 1217 EXPECT_TRUE(handle.socket()); |
1196 IPEndPoint endpoint; | 1218 IPEndPoint endpoint; |
1197 handle.socket()->GetLocalAddress(&endpoint); | 1219 handle.socket()->GetLocalAddress(&endpoint); |
1198 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 1220 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); |
(...skipping 10 matching lines...) Expand all Loading... |
1209 &client_socket_factory_, | 1231 &client_socket_factory_, |
1210 NULL); | 1232 NULL); |
1211 | 1233 |
1212 client_socket_factory_.set_client_socket_type( | 1234 client_socket_factory_.set_client_socket_type( |
1213 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 1235 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
1214 | 1236 |
1215 // Resolve an AddressList with only IPv4 addresses. | 1237 // Resolve an AddressList with only IPv4 addresses. |
1216 host_resolver_->rules()->AddIPLiteralRule( | 1238 host_resolver_->rules()->AddIPLiteralRule( |
1217 "*", "1.1.1.1", ""); | 1239 "*", "1.1.1.1", ""); |
1218 | 1240 |
1219 TestOldCompletionCallback callback; | 1241 TestCompletionCallback callback; |
1220 ClientSocketHandle handle; | 1242 ClientSocketHandle handle; |
1221 int rv = handle.Init("a", low_params_, LOW, &callback, &pool, BoundNetLog()); | 1243 int rv = handle.Init("a", low_params_, LOW, callback.callback(), &pool, |
| 1244 BoundNetLog()); |
1222 EXPECT_EQ(ERR_IO_PENDING, rv); | 1245 EXPECT_EQ(ERR_IO_PENDING, rv); |
1223 EXPECT_FALSE(handle.is_initialized()); | 1246 EXPECT_FALSE(handle.is_initialized()); |
1224 EXPECT_FALSE(handle.socket()); | 1247 EXPECT_FALSE(handle.socket()); |
1225 | 1248 |
1226 EXPECT_EQ(OK, callback.WaitForResult()); | 1249 EXPECT_EQ(OK, callback.WaitForResult()); |
1227 EXPECT_TRUE(handle.is_initialized()); | 1250 EXPECT_TRUE(handle.is_initialized()); |
1228 EXPECT_TRUE(handle.socket()); | 1251 EXPECT_TRUE(handle.socket()); |
1229 IPEndPoint endpoint; | 1252 IPEndPoint endpoint; |
1230 handle.socket()->GetLocalAddress(&endpoint); | 1253 handle.socket()->GetLocalAddress(&endpoint); |
1231 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 1254 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); |
1232 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 1255 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
1233 } | 1256 } |
1234 | 1257 |
1235 } // namespace | 1258 } // namespace |
1236 | 1259 |
1237 } // namespace net | 1260 } // namespace net |
OLD | NEW |