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 |