| 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 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); | 563 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); |
| 564 EXPECT_EQ(ERR_IO_PENDING, rv); | 564 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 565 EXPECT_FALSE(handle.is_initialized()); | 565 EXPECT_FALSE(handle.is_initialized()); |
| 566 EXPECT_FALSE(handle.socket()); | 566 EXPECT_FALSE(handle.socket()); |
| 567 | 567 |
| 568 EXPECT_EQ(OK, callback.WaitForResult()); | 568 EXPECT_EQ(OK, callback.WaitForResult()); |
| 569 EXPECT_TRUE(handle.is_initialized()); | 569 EXPECT_TRUE(handle.is_initialized()); |
| 570 EXPECT_TRUE(handle.socket()); | 570 EXPECT_TRUE(handle.socket()); |
| 571 IPEndPoint endpoint; | 571 IPEndPoint endpoint; |
| 572 handle.socket()->GetLocalAddress(&endpoint); | 572 handle.socket()->GetLocalAddress(&endpoint); |
| 573 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 573 EXPECT_EQ(kIPv4AddressSize, endpoint.address_number().size()); |
| 574 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 574 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
| 575 } | 575 } |
| 576 | 576 |
| 577 // Test the case of the IPv6 address being slow, thus falling back to trying to | 577 // Test the case of the IPv6 address being slow, thus falling back to trying to |
| 578 // connect to the IPv4 address, but having the connect to the IPv6 address | 578 // connect to the IPv4 address, but having the connect to the IPv6 address |
| 579 // finish first. | 579 // finish first. |
| 580 TEST_F(WebSocketTransportClientSocketPoolTest, | 580 TEST_F(WebSocketTransportClientSocketPoolTest, |
| 581 IPv6FallbackSocketIPv6FinishesFirst) { | 581 IPv6FallbackSocketIPv6FinishesFirst) { |
| 582 WebSocketTransportClientSocketPool pool(kMaxSockets, | 582 WebSocketTransportClientSocketPool pool(kMaxSockets, |
| 583 kMaxSocketsPerGroup, | 583 kMaxSocketsPerGroup, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 605 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); | 605 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); |
| 606 EXPECT_EQ(ERR_IO_PENDING, rv); | 606 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 607 EXPECT_FALSE(handle.is_initialized()); | 607 EXPECT_FALSE(handle.is_initialized()); |
| 608 EXPECT_FALSE(handle.socket()); | 608 EXPECT_FALSE(handle.socket()); |
| 609 | 609 |
| 610 EXPECT_EQ(OK, callback.WaitForResult()); | 610 EXPECT_EQ(OK, callback.WaitForResult()); |
| 611 EXPECT_TRUE(handle.is_initialized()); | 611 EXPECT_TRUE(handle.is_initialized()); |
| 612 EXPECT_TRUE(handle.socket()); | 612 EXPECT_TRUE(handle.socket()); |
| 613 IPEndPoint endpoint; | 613 IPEndPoint endpoint; |
| 614 handle.socket()->GetLocalAddress(&endpoint); | 614 handle.socket()->GetLocalAddress(&endpoint); |
| 615 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 615 EXPECT_EQ(kIPv6AddressSize, endpoint.address_number().size()); |
| 616 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 616 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
| 617 } | 617 } |
| 618 | 618 |
| 619 TEST_F(WebSocketTransportClientSocketPoolTest, | 619 TEST_F(WebSocketTransportClientSocketPoolTest, |
| 620 IPv6NoIPv4AddressesToFallbackTo) { | 620 IPv6NoIPv4AddressesToFallbackTo) { |
| 621 WebSocketTransportClientSocketPool pool(kMaxSockets, | 621 WebSocketTransportClientSocketPool pool(kMaxSockets, |
| 622 kMaxSocketsPerGroup, | 622 kMaxSocketsPerGroup, |
| 623 host_resolver_.get(), | 623 host_resolver_.get(), |
| 624 &client_socket_factory_, | 624 &client_socket_factory_, |
| 625 NULL); | 625 NULL); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 637 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); | 637 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); |
| 638 EXPECT_EQ(ERR_IO_PENDING, rv); | 638 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 639 EXPECT_FALSE(handle.is_initialized()); | 639 EXPECT_FALSE(handle.is_initialized()); |
| 640 EXPECT_FALSE(handle.socket()); | 640 EXPECT_FALSE(handle.socket()); |
| 641 | 641 |
| 642 EXPECT_EQ(OK, callback.WaitForResult()); | 642 EXPECT_EQ(OK, callback.WaitForResult()); |
| 643 EXPECT_TRUE(handle.is_initialized()); | 643 EXPECT_TRUE(handle.is_initialized()); |
| 644 EXPECT_TRUE(handle.socket()); | 644 EXPECT_TRUE(handle.socket()); |
| 645 IPEndPoint endpoint; | 645 IPEndPoint endpoint; |
| 646 handle.socket()->GetLocalAddress(&endpoint); | 646 handle.socket()->GetLocalAddress(&endpoint); |
| 647 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 647 EXPECT_EQ(kIPv6AddressSize, endpoint.address_number().size()); |
| 648 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 648 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
| 649 } | 649 } |
| 650 | 650 |
| 651 TEST_F(WebSocketTransportClientSocketPoolTest, IPv4HasNoFallback) { | 651 TEST_F(WebSocketTransportClientSocketPoolTest, IPv4HasNoFallback) { |
| 652 WebSocketTransportClientSocketPool pool(kMaxSockets, | 652 WebSocketTransportClientSocketPool pool(kMaxSockets, |
| 653 kMaxSocketsPerGroup, | 653 kMaxSocketsPerGroup, |
| 654 host_resolver_.get(), | 654 host_resolver_.get(), |
| 655 &client_socket_factory_, | 655 &client_socket_factory_, |
| 656 NULL); | 656 NULL); |
| 657 | 657 |
| 658 client_socket_factory_.set_default_client_socket_type( | 658 client_socket_factory_.set_default_client_socket_type( |
| 659 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 659 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
| 660 | 660 |
| 661 // Resolve an AddressList with only IPv4 addresses. | 661 // Resolve an AddressList with only IPv4 addresses. |
| 662 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); | 662 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); |
| 663 | 663 |
| 664 TestCompletionCallback callback; | 664 TestCompletionCallback callback; |
| 665 ClientSocketHandle handle; | 665 ClientSocketHandle handle; |
| 666 int rv = | 666 int rv = |
| 667 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); | 667 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); |
| 668 EXPECT_EQ(ERR_IO_PENDING, rv); | 668 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 669 EXPECT_FALSE(handle.is_initialized()); | 669 EXPECT_FALSE(handle.is_initialized()); |
| 670 EXPECT_FALSE(handle.socket()); | 670 EXPECT_FALSE(handle.socket()); |
| 671 | 671 |
| 672 EXPECT_EQ(OK, callback.WaitForResult()); | 672 EXPECT_EQ(OK, callback.WaitForResult()); |
| 673 EXPECT_TRUE(handle.is_initialized()); | 673 EXPECT_TRUE(handle.is_initialized()); |
| 674 EXPECT_TRUE(handle.socket()); | 674 EXPECT_TRUE(handle.socket()); |
| 675 IPEndPoint endpoint; | 675 IPEndPoint endpoint; |
| 676 handle.socket()->GetLocalAddress(&endpoint); | 676 handle.socket()->GetLocalAddress(&endpoint); |
| 677 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 677 EXPECT_EQ(kIPv4AddressSize, endpoint.address_number().size()); |
| 678 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 678 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
| 679 } | 679 } |
| 680 | 680 |
| 681 // If all IPv6 addresses fail to connect synchronously, then IPv4 connections | 681 // If all IPv6 addresses fail to connect synchronously, then IPv4 connections |
| 682 // proceeed immediately. | 682 // proceeed immediately. |
| 683 TEST_F(WebSocketTransportClientSocketPoolTest, IPv6InstantFail) { | 683 TEST_F(WebSocketTransportClientSocketPoolTest, IPv6InstantFail) { |
| 684 WebSocketTransportClientSocketPool pool(kMaxSockets, | 684 WebSocketTransportClientSocketPool pool(kMaxSockets, |
| 685 kMaxSocketsPerGroup, | 685 kMaxSocketsPerGroup, |
| 686 host_resolver_.get(), | 686 host_resolver_.get(), |
| 687 &client_socket_factory_, | 687 &client_socket_factory_, |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1112 EXPECT_EQ(OK, request(1)->WaitForResult()); | 1112 EXPECT_EQ(OK, request(1)->WaitForResult()); |
| 1113 // Third socket should still be waiting for endpoint. | 1113 // Third socket should still be waiting for endpoint. |
| 1114 ASSERT_FALSE(request(2)->handle()->is_initialized()); | 1114 ASSERT_FALSE(request(2)->handle()->is_initialized()); |
| 1115 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, | 1115 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, |
| 1116 request(2)->handle()->GetLoadState()); | 1116 request(2)->handle()->GetLoadState()); |
| 1117 } | 1117 } |
| 1118 | 1118 |
| 1119 } // namespace | 1119 } // namespace |
| 1120 | 1120 |
| 1121 } // namespace net | 1121 } // namespace net |
| OLD | NEW |