| 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 |