| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/http/http_stream_factory_impl.h" | 5 #include "net/http/http_stream_factory_impl.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 #include "net/socket/client_socket_handle.h" | 43 #include "net/socket/client_socket_handle.h" |
| 44 #include "net/socket/mock_client_socket_pool_manager.h" | 44 #include "net/socket/mock_client_socket_pool_manager.h" |
| 45 #include "net/socket/next_proto.h" | 45 #include "net/socket/next_proto.h" |
| 46 #include "net/socket/socket_test_util.h" | 46 #include "net/socket/socket_test_util.h" |
| 47 #include "net/spdy/spdy_session.h" | 47 #include "net/spdy/spdy_session.h" |
| 48 #include "net/spdy/spdy_session_pool.h" | 48 #include "net/spdy/spdy_session_pool.h" |
| 49 #include "net/spdy/spdy_test_util_common.h" | 49 #include "net/spdy/spdy_test_util_common.h" |
| 50 #include "net/ssl/ssl_config_service.h" | 50 #include "net/ssl/ssl_config_service.h" |
| 51 #include "net/ssl/ssl_config_service_defaults.h" | 51 #include "net/ssl/ssl_config_service_defaults.h" |
| 52 #include "net/test/cert_test_util.h" | 52 #include "net/test/cert_test_util.h" |
| 53 #include "net/test/gtest_util.h" |
| 53 #include "net/test/test_data_directory.h" | 54 #include "net/test/test_data_directory.h" |
| 54 | 55 |
| 55 // This file can be included from net/http even though | 56 // This file can be included from net/http even though |
| 56 // it is in net/websockets because it doesn't | 57 // it is in net/websockets because it doesn't |
| 57 // introduce any link dependency to net/websockets. | 58 // introduce any link dependency to net/websockets. |
| 58 #include "net/websockets/websocket_handshake_stream_base.h" | 59 #include "net/websockets/websocket_handshake_stream_base.h" |
| 60 |
| 61 #include "testing/gmock/include/gmock/gmock.h" |
| 59 #include "testing/gtest/include/gtest/gtest.h" | 62 #include "testing/gtest/include/gtest/gtest.h" |
| 60 | 63 |
| 64 using net::test::IsError; |
| 65 using net::test::IsOk; |
| 66 |
| 61 namespace net { | 67 namespace net { |
| 62 | 68 |
| 63 class BidirectionalStreamImpl; | 69 class BidirectionalStreamImpl; |
| 64 | 70 |
| 65 namespace { | 71 namespace { |
| 66 | 72 |
| 67 class MockWebSocketHandshakeStream : public WebSocketHandshakeStreamBase { | 73 class MockWebSocketHandshakeStream : public WebSocketHandshakeStreamBase { |
| 68 public: | 74 public: |
| 69 enum StreamType { | 75 enum StreamType { |
| 70 kStreamTypeBasic, | 76 kStreamTypeBasic, |
| (...skipping 1629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1700 bidi_request_info.end_stream_on_headers = true; | 1706 bidi_request_info.end_stream_on_headers = true; |
| 1701 bidi_request_info.priority = LOWEST; | 1707 bidi_request_info.priority = LOWEST; |
| 1702 | 1708 |
| 1703 TestBidirectionalDelegate delegate; | 1709 TestBidirectionalDelegate delegate; |
| 1704 stream_impl->Start(&bidi_request_info, BoundNetLog(), | 1710 stream_impl->Start(&bidi_request_info, BoundNetLog(), |
| 1705 /*send_request_headers_automatically=*/true, &delegate, | 1711 /*send_request_headers_automatically=*/true, &delegate, |
| 1706 nullptr); | 1712 nullptr); |
| 1707 delegate.WaitUntilDone(); | 1713 delegate.WaitUntilDone(); |
| 1708 | 1714 |
| 1709 scoped_refptr<IOBuffer> buffer = new net::IOBuffer(1); | 1715 scoped_refptr<IOBuffer> buffer = new net::IOBuffer(1); |
| 1710 EXPECT_EQ(OK, stream_impl->ReadData(buffer.get(), 1)); | 1716 EXPECT_THAT(stream_impl->ReadData(buffer.get(), 1), IsOk()); |
| 1711 EXPECT_EQ(kProtoQUIC1SPDY3, stream_impl->GetProtocol()); | 1717 EXPECT_EQ(kProtoQUIC1SPDY3, stream_impl->GetProtocol()); |
| 1712 EXPECT_EQ("200", delegate.response_headers().find(":status")->second); | 1718 EXPECT_EQ("200", delegate.response_headers().find(":status")->second); |
| 1713 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetTransportSocketPool( | 1719 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetTransportSocketPool( |
| 1714 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1720 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 1715 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetSSLSocketPool( | 1721 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetSSLSocketPool( |
| 1716 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1722 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 1717 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetTransportSocketPool( | 1723 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetTransportSocketPool( |
| 1718 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1724 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 1719 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetSSLSocketPool( | 1725 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetSSLSocketPool( |
| 1720 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1726 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1752 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, | 1758 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, |
| 1753 BoundNetLog())); | 1759 BoundNetLog())); |
| 1754 | 1760 |
| 1755 waiter.WaitForStream(); | 1761 waiter.WaitForStream(); |
| 1756 EXPECT_TRUE(waiter.stream_done()); | 1762 EXPECT_TRUE(waiter.stream_done()); |
| 1757 EXPECT_FALSE(waiter.websocket_stream()); | 1763 EXPECT_FALSE(waiter.websocket_stream()); |
| 1758 ASSERT_FALSE(waiter.stream()); | 1764 ASSERT_FALSE(waiter.stream()); |
| 1759 ASSERT_FALSE(waiter.bidirectional_stream_impl()); | 1765 ASSERT_FALSE(waiter.bidirectional_stream_impl()); |
| 1760 // Since the alternative service job is not started, we will get the error | 1766 // Since the alternative service job is not started, we will get the error |
| 1761 // from the http job. | 1767 // from the http job. |
| 1762 ASSERT_EQ(ERR_CONNECTION_REFUSED, waiter.error_status()); | 1768 ASSERT_THAT(waiter.error_status(), IsError(ERR_CONNECTION_REFUSED)); |
| 1763 } | 1769 } |
| 1764 | 1770 |
| 1765 // Tests that if Http job fails, but Quic job succeeds, we return | 1771 // Tests that if Http job fails, but Quic job succeeds, we return |
| 1766 // BidirectionalStreamQuicImpl. | 1772 // BidirectionalStreamQuicImpl. |
| 1767 TEST_P(HttpStreamFactoryBidirectionalQuicTest, | 1773 TEST_P(HttpStreamFactoryBidirectionalQuicTest, |
| 1768 RequestBidirectionalStreamImplHttpJobFailsQuicJobSucceeds) { | 1774 RequestBidirectionalStreamImplHttpJobFailsQuicJobSucceeds) { |
| 1769 // Set up Quic data. | 1775 // Set up Quic data. |
| 1770 MockQuicData mock_quic_data; | 1776 MockQuicData mock_quic_data; |
| 1771 SpdyPriority priority = | 1777 SpdyPriority priority = |
| 1772 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1778 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1824 bidi_request_info.priority = LOWEST; | 1830 bidi_request_info.priority = LOWEST; |
| 1825 | 1831 |
| 1826 TestBidirectionalDelegate delegate; | 1832 TestBidirectionalDelegate delegate; |
| 1827 stream_impl->Start(&bidi_request_info, BoundNetLog(), | 1833 stream_impl->Start(&bidi_request_info, BoundNetLog(), |
| 1828 /*send_request_headers_automatically=*/true, &delegate, | 1834 /*send_request_headers_automatically=*/true, &delegate, |
| 1829 nullptr); | 1835 nullptr); |
| 1830 delegate.WaitUntilDone(); | 1836 delegate.WaitUntilDone(); |
| 1831 | 1837 |
| 1832 // Make sure the BidirectionalStream negotiated goes through QUIC. | 1838 // Make sure the BidirectionalStream negotiated goes through QUIC. |
| 1833 scoped_refptr<IOBuffer> buffer = new net::IOBuffer(1); | 1839 scoped_refptr<IOBuffer> buffer = new net::IOBuffer(1); |
| 1834 EXPECT_EQ(OK, stream_impl->ReadData(buffer.get(), 1)); | 1840 EXPECT_THAT(stream_impl->ReadData(buffer.get(), 1), IsOk()); |
| 1835 EXPECT_EQ(kProtoQUIC1SPDY3, stream_impl->GetProtocol()); | 1841 EXPECT_EQ(kProtoQUIC1SPDY3, stream_impl->GetProtocol()); |
| 1836 EXPECT_EQ("200", delegate.response_headers().find(":status")->second); | 1842 EXPECT_EQ("200", delegate.response_headers().find(":status")->second); |
| 1837 // There is no Http2 socket pool. | 1843 // There is no Http2 socket pool. |
| 1838 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetTransportSocketPool( | 1844 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetTransportSocketPool( |
| 1839 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1845 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 1840 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetSSLSocketPool( | 1846 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetSSLSocketPool( |
| 1841 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1847 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 1842 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetTransportSocketPool( | 1848 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetTransportSocketPool( |
| 1843 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1849 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 1844 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetSSLSocketPool( | 1850 EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetSSLSocketPool( |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1872 request_info.load_flags = 0; | 1878 request_info.load_flags = 0; |
| 1873 | 1879 |
| 1874 SSLConfig ssl_config; | 1880 SSLConfig ssl_config; |
| 1875 StreamRequestWaiter waiter; | 1881 StreamRequestWaiter waiter; |
| 1876 std::unique_ptr<HttpStreamRequest> request( | 1882 std::unique_ptr<HttpStreamRequest> request( |
| 1877 session->http_stream_factory()->RequestBidirectionalStreamImpl( | 1883 session->http_stream_factory()->RequestBidirectionalStreamImpl( |
| 1878 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, | 1884 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, |
| 1879 BoundNetLog())); | 1885 BoundNetLog())); |
| 1880 waiter.WaitForStream(); | 1886 waiter.WaitForStream(); |
| 1881 EXPECT_TRUE(waiter.stream_done()); | 1887 EXPECT_TRUE(waiter.stream_done()); |
| 1882 ASSERT_EQ(ERR_FAILED, waiter.error_status()); | 1888 ASSERT_THAT(waiter.error_status(), IsError(ERR_FAILED)); |
| 1883 EXPECT_FALSE(waiter.websocket_stream()); | 1889 EXPECT_FALSE(waiter.websocket_stream()); |
| 1884 ASSERT_FALSE(waiter.stream()); | 1890 ASSERT_FALSE(waiter.stream()); |
| 1885 ASSERT_FALSE(waiter.bidirectional_stream_impl()); | 1891 ASSERT_FALSE(waiter.bidirectional_stream_impl()); |
| 1886 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetTransportSocketPool( | 1892 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetTransportSocketPool( |
| 1887 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1893 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 1888 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 1894 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 1889 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1895 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 1890 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetTransportSocketPool( | 1896 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetTransportSocketPool( |
| 1891 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1897 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 1892 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 1898 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2071 session->GetTransportSocketPool( | 2077 session->GetTransportSocketPool( |
| 2072 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 2078 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 2073 EXPECT_EQ(1, GetSocketPoolGroupCount( | 2079 EXPECT_EQ(1, GetSocketPoolGroupCount( |
| 2074 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 2080 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 2075 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 2081 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
| 2076 } | 2082 } |
| 2077 | 2083 |
| 2078 } // namespace | 2084 } // namespace |
| 2079 | 2085 |
| 2080 } // namespace net | 2086 } // namespace net |
| OLD | NEW |