| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/websocket_transport_client_socket_pool.h" | 5 #include "net/socket/websocket_transport_client_socket_pool.h" |
| 6 | 6 |
| 7 #include <queue> | 7 #include <queue> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 HostPortPair("www.google.com", 80), | 60 HostPortPair("www.google.com", 80), |
| 61 false, | 61 false, |
| 62 OnHostResolutionCallback(), | 62 OnHostResolutionCallback(), |
| 63 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), | 63 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), |
| 64 host_resolver_(new MockHostResolver), | 64 host_resolver_(new MockHostResolver), |
| 65 client_socket_factory_(&net_log_), | 65 client_socket_factory_(&net_log_), |
| 66 pool_(kMaxSockets, | 66 pool_(kMaxSockets, |
| 67 kMaxSocketsPerGroup, | 67 kMaxSocketsPerGroup, |
| 68 host_resolver_.get(), | 68 host_resolver_.get(), |
| 69 &client_socket_factory_, | 69 &client_socket_factory_, |
| 70 NULL) {} | 70 nullptr) {} |
| 71 | 71 |
| 72 ~WebSocketTransportClientSocketPoolTest() override { | 72 ~WebSocketTransportClientSocketPoolTest() override { |
| 73 RunUntilIdle(); | 73 RunUntilIdle(); |
| 74 // ReleaseAllConnections() calls RunUntilIdle() after releasing each | 74 // ReleaseAllConnections() calls RunUntilIdle() after releasing each |
| 75 // connection. | 75 // connection. |
| 76 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); | 76 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); |
| 77 EXPECT_TRUE(WebSocketEndpointLockManager::GetInstance()->IsEmpty()); | 77 EXPECT_TRUE(WebSocketEndpointLockManager::GetInstance()->IsEmpty()); |
| 78 } | 78 } |
| 79 | 79 |
| 80 static void RunUntilIdle() { base::RunLoop().RunUntilIdle(); } | 80 static void RunUntilIdle() { base::RunLoop().RunUntilIdle(); } |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 510 EXPECT_THAT(StartRequest("a", kDefaultPriority), IsError(ERR_IO_PENDING)); | 510 EXPECT_THAT(StartRequest("a", kDefaultPriority), IsError(ERR_IO_PENDING)); |
| 511 RunUntilIdle(); | 511 RunUntilIdle(); |
| 512 pool_.CancelRequest("a", request(0)->handle()); | 512 pool_.CancelRequest("a", request(0)->handle()); |
| 513 EXPECT_THAT(request(1)->WaitForResult(), IsOk()); | 513 EXPECT_THAT(request(1)->WaitForResult(), IsOk()); |
| 514 } | 514 } |
| 515 | 515 |
| 516 // Test the case of the IPv6 address stalling, and falling back to the IPv4 | 516 // Test the case of the IPv6 address stalling, and falling back to the IPv4 |
| 517 // socket which finishes first. | 517 // socket which finishes first. |
| 518 TEST_F(WebSocketTransportClientSocketPoolTest, | 518 TEST_F(WebSocketTransportClientSocketPoolTest, |
| 519 IPv6FallbackSocketIPv4FinishesFirst) { | 519 IPv6FallbackSocketIPv4FinishesFirst) { |
| 520 WebSocketTransportClientSocketPool pool(kMaxSockets, | 520 WebSocketTransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
| 521 kMaxSocketsPerGroup, | |
| 522 host_resolver_.get(), | 521 host_resolver_.get(), |
| 523 &client_socket_factory_, | 522 &client_socket_factory_, nullptr); |
| 524 NULL); | |
| 525 | 523 |
| 526 MockTransportClientSocketFactory::ClientSocketType case_types[] = { | 524 MockTransportClientSocketFactory::ClientSocketType case_types[] = { |
| 527 // This is the IPv6 socket. | 525 // This is the IPv6 socket. |
| 528 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET, | 526 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET, |
| 529 // This is the IPv4 socket. | 527 // This is the IPv4 socket. |
| 530 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET}; | 528 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET}; |
| 531 | 529 |
| 532 client_socket_factory_.set_client_socket_types(case_types, 2); | 530 client_socket_factory_.set_client_socket_types(case_types, 2); |
| 533 | 531 |
| 534 // Resolve an AddressList with an IPv6 address first and then an IPv4 address. | 532 // Resolve an AddressList with an IPv6 address first and then an IPv4 address. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 551 handle.socket()->GetLocalAddress(&endpoint); | 549 handle.socket()->GetLocalAddress(&endpoint); |
| 552 EXPECT_TRUE(endpoint.address().IsIPv4()); | 550 EXPECT_TRUE(endpoint.address().IsIPv4()); |
| 553 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 551 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
| 554 } | 552 } |
| 555 | 553 |
| 556 // Test the case of the IPv6 address being slow, thus falling back to trying to | 554 // Test the case of the IPv6 address being slow, thus falling back to trying to |
| 557 // connect to the IPv4 address, but having the connect to the IPv6 address | 555 // connect to the IPv4 address, but having the connect to the IPv6 address |
| 558 // finish first. | 556 // finish first. |
| 559 TEST_F(WebSocketTransportClientSocketPoolTest, | 557 TEST_F(WebSocketTransportClientSocketPoolTest, |
| 560 IPv6FallbackSocketIPv6FinishesFirst) { | 558 IPv6FallbackSocketIPv6FinishesFirst) { |
| 561 WebSocketTransportClientSocketPool pool(kMaxSockets, | 559 WebSocketTransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
| 562 kMaxSocketsPerGroup, | |
| 563 host_resolver_.get(), | 560 host_resolver_.get(), |
| 564 &client_socket_factory_, | 561 &client_socket_factory_, nullptr); |
| 565 NULL); | |
| 566 | 562 |
| 567 MockTransportClientSocketFactory::ClientSocketType case_types[] = { | 563 MockTransportClientSocketFactory::ClientSocketType case_types[] = { |
| 568 // This is the IPv6 socket. | 564 // This is the IPv6 socket. |
| 569 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET, | 565 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET, |
| 570 // This is the IPv4 socket. | 566 // This is the IPv4 socket. |
| 571 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET}; | 567 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET}; |
| 572 | 568 |
| 573 client_socket_factory_.set_client_socket_types(case_types, 2); | 569 client_socket_factory_.set_client_socket_types(case_types, 2); |
| 574 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( | 570 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( |
| 575 TransportConnectJob::kIPv6FallbackTimerInMs + 50)); | 571 TransportConnectJob::kIPv6FallbackTimerInMs + 50)); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 591 EXPECT_TRUE(handle.is_initialized()); | 587 EXPECT_TRUE(handle.is_initialized()); |
| 592 EXPECT_TRUE(handle.socket()); | 588 EXPECT_TRUE(handle.socket()); |
| 593 IPEndPoint endpoint; | 589 IPEndPoint endpoint; |
| 594 handle.socket()->GetLocalAddress(&endpoint); | 590 handle.socket()->GetLocalAddress(&endpoint); |
| 595 EXPECT_TRUE(endpoint.address().IsIPv6()); | 591 EXPECT_TRUE(endpoint.address().IsIPv6()); |
| 596 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 592 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
| 597 } | 593 } |
| 598 | 594 |
| 599 TEST_F(WebSocketTransportClientSocketPoolTest, | 595 TEST_F(WebSocketTransportClientSocketPoolTest, |
| 600 IPv6NoIPv4AddressesToFallbackTo) { | 596 IPv6NoIPv4AddressesToFallbackTo) { |
| 601 WebSocketTransportClientSocketPool pool(kMaxSockets, | 597 WebSocketTransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
| 602 kMaxSocketsPerGroup, | |
| 603 host_resolver_.get(), | 598 host_resolver_.get(), |
| 604 &client_socket_factory_, | 599 &client_socket_factory_, nullptr); |
| 605 NULL); | |
| 606 | 600 |
| 607 client_socket_factory_.set_default_client_socket_type( | 601 client_socket_factory_.set_default_client_socket_type( |
| 608 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 602 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
| 609 | 603 |
| 610 // Resolve an AddressList with only IPv6 addresses. | 604 // Resolve an AddressList with only IPv6 addresses. |
| 611 host_resolver_->rules()->AddIPLiteralRule( | 605 host_resolver_->rules()->AddIPLiteralRule( |
| 612 "*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); | 606 "*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); |
| 613 | 607 |
| 614 TestCompletionCallback callback; | 608 TestCompletionCallback callback; |
| 615 ClientSocketHandle handle; | 609 ClientSocketHandle handle; |
| 616 int rv = | 610 int rv = |
| 617 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED, | 611 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED, |
| 618 callback.callback(), &pool, BoundNetLog()); | 612 callback.callback(), &pool, BoundNetLog()); |
| 619 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 613 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 620 EXPECT_FALSE(handle.is_initialized()); | 614 EXPECT_FALSE(handle.is_initialized()); |
| 621 EXPECT_FALSE(handle.socket()); | 615 EXPECT_FALSE(handle.socket()); |
| 622 | 616 |
| 623 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 617 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 624 EXPECT_TRUE(handle.is_initialized()); | 618 EXPECT_TRUE(handle.is_initialized()); |
| 625 EXPECT_TRUE(handle.socket()); | 619 EXPECT_TRUE(handle.socket()); |
| 626 IPEndPoint endpoint; | 620 IPEndPoint endpoint; |
| 627 handle.socket()->GetLocalAddress(&endpoint); | 621 handle.socket()->GetLocalAddress(&endpoint); |
| 628 EXPECT_TRUE(endpoint.address().IsIPv6()); | 622 EXPECT_TRUE(endpoint.address().IsIPv6()); |
| 629 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 623 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
| 630 } | 624 } |
| 631 | 625 |
| 632 TEST_F(WebSocketTransportClientSocketPoolTest, IPv4HasNoFallback) { | 626 TEST_F(WebSocketTransportClientSocketPoolTest, IPv4HasNoFallback) { |
| 633 WebSocketTransportClientSocketPool pool(kMaxSockets, | 627 WebSocketTransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
| 634 kMaxSocketsPerGroup, | |
| 635 host_resolver_.get(), | 628 host_resolver_.get(), |
| 636 &client_socket_factory_, | 629 &client_socket_factory_, nullptr); |
| 637 NULL); | |
| 638 | 630 |
| 639 client_socket_factory_.set_default_client_socket_type( | 631 client_socket_factory_.set_default_client_socket_type( |
| 640 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 632 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
| 641 | 633 |
| 642 // Resolve an AddressList with only IPv4 addresses. | 634 // Resolve an AddressList with only IPv4 addresses. |
| 643 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); | 635 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); |
| 644 | 636 |
| 645 TestCompletionCallback callback; | 637 TestCompletionCallback callback; |
| 646 ClientSocketHandle handle; | 638 ClientSocketHandle handle; |
| 647 int rv = | 639 int rv = |
| 648 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED, | 640 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED, |
| 649 callback.callback(), &pool, BoundNetLog()); | 641 callback.callback(), &pool, BoundNetLog()); |
| 650 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 642 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 651 EXPECT_FALSE(handle.is_initialized()); | 643 EXPECT_FALSE(handle.is_initialized()); |
| 652 EXPECT_FALSE(handle.socket()); | 644 EXPECT_FALSE(handle.socket()); |
| 653 | 645 |
| 654 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 646 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 655 EXPECT_TRUE(handle.is_initialized()); | 647 EXPECT_TRUE(handle.is_initialized()); |
| 656 EXPECT_TRUE(handle.socket()); | 648 EXPECT_TRUE(handle.socket()); |
| 657 IPEndPoint endpoint; | 649 IPEndPoint endpoint; |
| 658 handle.socket()->GetLocalAddress(&endpoint); | 650 handle.socket()->GetLocalAddress(&endpoint); |
| 659 EXPECT_TRUE(endpoint.address().IsIPv4()); | 651 EXPECT_TRUE(endpoint.address().IsIPv4()); |
| 660 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 652 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
| 661 } | 653 } |
| 662 | 654 |
| 663 // If all IPv6 addresses fail to connect synchronously, then IPv4 connections | 655 // If all IPv6 addresses fail to connect synchronously, then IPv4 connections |
| 664 // proceeed immediately. | 656 // proceeed immediately. |
| 665 TEST_F(WebSocketTransportClientSocketPoolTest, IPv6InstantFail) { | 657 TEST_F(WebSocketTransportClientSocketPoolTest, IPv6InstantFail) { |
| 666 WebSocketTransportClientSocketPool pool(kMaxSockets, | 658 WebSocketTransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
| 667 kMaxSocketsPerGroup, | |
| 668 host_resolver_.get(), | 659 host_resolver_.get(), |
| 669 &client_socket_factory_, | 660 &client_socket_factory_, nullptr); |
| 670 NULL); | |
| 671 | 661 |
| 672 MockTransportClientSocketFactory::ClientSocketType case_types[] = { | 662 MockTransportClientSocketFactory::ClientSocketType case_types[] = { |
| 673 // First IPv6 socket. | 663 // First IPv6 socket. |
| 674 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET, | 664 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET, |
| 675 // Second IPv6 socket. | 665 // Second IPv6 socket. |
| 676 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET, | 666 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET, |
| 677 // This is the IPv4 socket. | 667 // This is the IPv4 socket. |
| 678 MockTransportClientSocketFactory::MOCK_CLIENT_SOCKET}; | 668 MockTransportClientSocketFactory::MOCK_CLIENT_SOCKET}; |
| 679 | 669 |
| 680 client_socket_factory_.set_client_socket_types(case_types, | 670 client_socket_factory_.set_client_socket_types(case_types, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 693 ASSERT_TRUE(handle.socket()); | 683 ASSERT_TRUE(handle.socket()); |
| 694 | 684 |
| 695 IPEndPoint endpoint; | 685 IPEndPoint endpoint; |
| 696 handle.socket()->GetPeerAddress(&endpoint); | 686 handle.socket()->GetPeerAddress(&endpoint); |
| 697 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort()); | 687 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort()); |
| 698 } | 688 } |
| 699 | 689 |
| 700 // If all IPv6 addresses fail before the IPv4 fallback timeout, then the IPv4 | 690 // If all IPv6 addresses fail before the IPv4 fallback timeout, then the IPv4 |
| 701 // connections proceed immediately. | 691 // connections proceed immediately. |
| 702 TEST_F(WebSocketTransportClientSocketPoolTest, IPv6RapidFail) { | 692 TEST_F(WebSocketTransportClientSocketPoolTest, IPv6RapidFail) { |
| 703 WebSocketTransportClientSocketPool pool(kMaxSockets, | 693 WebSocketTransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
| 704 kMaxSocketsPerGroup, | |
| 705 host_resolver_.get(), | 694 host_resolver_.get(), |
| 706 &client_socket_factory_, | 695 &client_socket_factory_, nullptr); |
| 707 NULL); | |
| 708 | 696 |
| 709 MockTransportClientSocketFactory::ClientSocketType case_types[] = { | 697 MockTransportClientSocketFactory::ClientSocketType case_types[] = { |
| 710 // First IPv6 socket. | 698 // First IPv6 socket. |
| 711 MockTransportClientSocketFactory::MOCK_PENDING_FAILING_CLIENT_SOCKET, | 699 MockTransportClientSocketFactory::MOCK_PENDING_FAILING_CLIENT_SOCKET, |
| 712 // Second IPv6 socket. | 700 // Second IPv6 socket. |
| 713 MockTransportClientSocketFactory::MOCK_PENDING_FAILING_CLIENT_SOCKET, | 701 MockTransportClientSocketFactory::MOCK_PENDING_FAILING_CLIENT_SOCKET, |
| 714 // This is the IPv4 socket. | 702 // This is the IPv4 socket. |
| 715 MockTransportClientSocketFactory::MOCK_CLIENT_SOCKET}; | 703 MockTransportClientSocketFactory::MOCK_CLIENT_SOCKET}; |
| 716 | 704 |
| 717 client_socket_factory_.set_client_socket_types(case_types, | 705 client_socket_factory_.set_client_socket_types(case_types, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 738 | 726 |
| 739 IPEndPoint endpoint; | 727 IPEndPoint endpoint; |
| 740 handle.socket()->GetPeerAddress(&endpoint); | 728 handle.socket()->GetPeerAddress(&endpoint); |
| 741 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort()); | 729 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort()); |
| 742 } | 730 } |
| 743 | 731 |
| 744 // If two sockets connect successfully, the one which connected first wins (this | 732 // If two sockets connect successfully, the one which connected first wins (this |
| 745 // can only happen if the sockets are different types, since sockets of the same | 733 // can only happen if the sockets are different types, since sockets of the same |
| 746 // type do not race). | 734 // type do not race). |
| 747 TEST_F(WebSocketTransportClientSocketPoolTest, FirstSuccessWins) { | 735 TEST_F(WebSocketTransportClientSocketPoolTest, FirstSuccessWins) { |
| 748 WebSocketTransportClientSocketPool pool(kMaxSockets, | 736 WebSocketTransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
| 749 kMaxSocketsPerGroup, | |
| 750 host_resolver_.get(), | 737 host_resolver_.get(), |
| 751 &client_socket_factory_, | 738 &client_socket_factory_, nullptr); |
| 752 NULL); | |
| 753 | 739 |
| 754 client_socket_factory_.set_default_client_socket_type( | 740 client_socket_factory_.set_default_client_socket_type( |
| 755 MockTransportClientSocketFactory::MOCK_TRIGGERABLE_CLIENT_SOCKET); | 741 MockTransportClientSocketFactory::MOCK_TRIGGERABLE_CLIENT_SOCKET); |
| 756 | 742 |
| 757 // Resolve an AddressList with an IPv6 addresses and an IPv4 address. | 743 // Resolve an AddressList with an IPv6 addresses and an IPv4 address. |
| 758 host_resolver_->rules()->AddIPLiteralRule( | 744 host_resolver_->rules()->AddIPLiteralRule( |
| 759 "*", "2:abcd::3:4:ff,2.2.2.2", std::string()); | 745 "*", "2:abcd::3:4:ff,2.2.2.2", std::string()); |
| 760 | 746 |
| 761 TestCompletionCallback callback; | 747 TestCompletionCallback callback; |
| 762 ClientSocketHandle handle; | 748 ClientSocketHandle handle; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 777 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 763 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 778 ASSERT_TRUE(handle.socket()); | 764 ASSERT_TRUE(handle.socket()); |
| 779 | 765 |
| 780 IPEndPoint endpoint; | 766 IPEndPoint endpoint; |
| 781 handle.socket()->GetPeerAddress(&endpoint); | 767 handle.socket()->GetPeerAddress(&endpoint); |
| 782 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort()); | 768 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort()); |
| 783 } | 769 } |
| 784 | 770 |
| 785 // We should not report failure until all connections have failed. | 771 // We should not report failure until all connections have failed. |
| 786 TEST_F(WebSocketTransportClientSocketPoolTest, LastFailureWins) { | 772 TEST_F(WebSocketTransportClientSocketPoolTest, LastFailureWins) { |
| 787 WebSocketTransportClientSocketPool pool(kMaxSockets, | 773 WebSocketTransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
| 788 kMaxSocketsPerGroup, | |
| 789 host_resolver_.get(), | 774 host_resolver_.get(), |
| 790 &client_socket_factory_, | 775 &client_socket_factory_, nullptr); |
| 791 NULL); | |
| 792 | 776 |
| 793 client_socket_factory_.set_default_client_socket_type( | 777 client_socket_factory_.set_default_client_socket_type( |
| 794 MockTransportClientSocketFactory::MOCK_DELAYED_FAILING_CLIENT_SOCKET); | 778 MockTransportClientSocketFactory::MOCK_DELAYED_FAILING_CLIENT_SOCKET); |
| 795 base::TimeDelta delay = base::TimeDelta::FromMilliseconds( | 779 base::TimeDelta delay = base::TimeDelta::FromMilliseconds( |
| 796 TransportConnectJob::kIPv6FallbackTimerInMs / 3); | 780 TransportConnectJob::kIPv6FallbackTimerInMs / 3); |
| 797 client_socket_factory_.set_delay(delay); | 781 client_socket_factory_.set_delay(delay); |
| 798 | 782 |
| 799 // Resolve an AddressList with 4 IPv6 addresses and 2 IPv4 addresses. | 783 // Resolve an AddressList with 4 IPv6 addresses and 2 IPv4 addresses. |
| 800 host_resolver_->rules()->AddIPLiteralRule("*", | 784 host_resolver_->rules()->AddIPLiteralRule("*", |
| 801 "1:abcd::3:4:ff,2:abcd::3:4:ff," | 785 "1:abcd::3:4:ff,2:abcd::3:4:ff," |
| (...skipping 18 matching lines...) Expand all Loading... |
| 820 | 804 |
| 821 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_FAILED)); | 805 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_FAILED)); |
| 822 | 806 |
| 823 EXPECT_GE(base::TimeTicks::Now() - start, delay * 5); | 807 EXPECT_GE(base::TimeTicks::Now() - start, delay * 5); |
| 824 } | 808 } |
| 825 | 809 |
| 826 // Global timeout for all connects applies. This test is disabled by default | 810 // Global timeout for all connects applies. This test is disabled by default |
| 827 // because it takes 4 minutes. Run with --gtest_also_run_disabled_tests if you | 811 // because it takes 4 minutes. Run with --gtest_also_run_disabled_tests if you |
| 828 // want to run it. | 812 // want to run it. |
| 829 TEST_F(WebSocketTransportClientSocketPoolTest, DISABLED_OverallTimeoutApplies) { | 813 TEST_F(WebSocketTransportClientSocketPoolTest, DISABLED_OverallTimeoutApplies) { |
| 830 WebSocketTransportClientSocketPool pool(kMaxSockets, | 814 WebSocketTransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
| 831 kMaxSocketsPerGroup, | |
| 832 host_resolver_.get(), | 815 host_resolver_.get(), |
| 833 &client_socket_factory_, | 816 &client_socket_factory_, nullptr); |
| 834 NULL); | |
| 835 const base::TimeDelta connect_job_timeout = pool.ConnectionTimeout(); | 817 const base::TimeDelta connect_job_timeout = pool.ConnectionTimeout(); |
| 836 | 818 |
| 837 client_socket_factory_.set_default_client_socket_type( | 819 client_socket_factory_.set_default_client_socket_type( |
| 838 MockTransportClientSocketFactory::MOCK_DELAYED_FAILING_CLIENT_SOCKET); | 820 MockTransportClientSocketFactory::MOCK_DELAYED_FAILING_CLIENT_SOCKET); |
| 839 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(1) + | 821 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(1) + |
| 840 connect_job_timeout / 6); | 822 connect_job_timeout / 6); |
| 841 | 823 |
| 842 // Resolve an AddressList with 6 IPv6 addresses and 6 IPv4 addresses. | 824 // Resolve an AddressList with 6 IPv6 addresses and 6 IPv4 addresses. |
| 843 host_resolver_->rules()->AddIPLiteralRule("*", | 825 host_resolver_->rules()->AddIPLiteralRule("*", |
| 844 "1:abcd::3:4:ff,2:abcd::3:4:ff," | 826 "1:abcd::3:4:ff,2:abcd::3:4:ff," |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1099 EXPECT_THAT(request(1)->WaitForResult(), IsOk()); | 1081 EXPECT_THAT(request(1)->WaitForResult(), IsOk()); |
| 1100 // Third socket should still be waiting for endpoint. | 1082 // Third socket should still be waiting for endpoint. |
| 1101 ASSERT_FALSE(request(2)->handle()->is_initialized()); | 1083 ASSERT_FALSE(request(2)->handle()->is_initialized()); |
| 1102 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, | 1084 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, |
| 1103 request(2)->handle()->GetLoadState()); | 1085 request(2)->handle()->GetLoadState()); |
| 1104 } | 1086 } |
| 1105 | 1087 |
| 1106 } // namespace | 1088 } // namespace |
| 1107 | 1089 |
| 1108 } // namespace net | 1090 } // namespace net |
| OLD | NEW |