| 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 <memory> | 5 #include <memory> |
| 6 #include <ostream> | 6 #include <ostream> |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 #include "net/socket/client_socket_factory.h" | 47 #include "net/socket/client_socket_factory.h" |
| 48 #include "net/socket/mock_client_socket_pool_manager.h" | 48 #include "net/socket/mock_client_socket_pool_manager.h" |
| 49 #include "net/socket/socket_performance_watcher.h" | 49 #include "net/socket/socket_performance_watcher.h" |
| 50 #include "net/socket/socket_performance_watcher_factory.h" | 50 #include "net/socket/socket_performance_watcher_factory.h" |
| 51 #include "net/socket/socket_test_util.h" | 51 #include "net/socket/socket_test_util.h" |
| 52 #include "net/socket/ssl_client_socket.h" | 52 #include "net/socket/ssl_client_socket.h" |
| 53 #include "net/spdy/spdy_frame_builder.h" | 53 #include "net/spdy/spdy_frame_builder.h" |
| 54 #include "net/spdy/spdy_framer.h" | 54 #include "net/spdy/spdy_framer.h" |
| 55 #include "net/ssl/ssl_config_service_defaults.h" | 55 #include "net/ssl/ssl_config_service_defaults.h" |
| 56 #include "net/test/cert_test_util.h" | 56 #include "net/test/cert_test_util.h" |
| 57 #include "net/test/gtest_util.h" |
| 57 #include "net/test/test_data_directory.h" | 58 #include "net/test/test_data_directory.h" |
| 59 #include "testing/gmock/include/gmock/gmock.h" |
| 58 #include "testing/gtest/include/gtest/gtest.h" | 60 #include "testing/gtest/include/gtest/gtest.h" |
| 59 #include "testing/platform_test.h" | 61 #include "testing/platform_test.h" |
| 60 #include "url/gurl.h" | 62 #include "url/gurl.h" |
| 61 | 63 |
| 64 using net::test::IsError; |
| 65 using net::test::IsOk; |
| 66 |
| 62 namespace net { | 67 namespace net { |
| 63 namespace test { | 68 namespace test { |
| 64 | 69 |
| 65 namespace { | 70 namespace { |
| 66 | 71 |
| 67 enum DestinationType { | 72 enum DestinationType { |
| 68 // In pooling tests with two requests for different origins to the same | 73 // In pooling tests with two requests for different origins to the same |
| 69 // destination, the destination should be | 74 // destination, the destination should be |
| 70 SAME_AS_FIRST, // the same as the first origin, | 75 SAME_AS_FIRST, // the same as the first origin, |
| 71 SAME_AS_SECOND, // the same as the second origin, or | 76 SAME_AS_SECOND, // the same as the second origin, or |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 587 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 583 EXPECT_FALSE(response->was_fetched_via_spdy); | 588 EXPECT_FALSE(response->was_fetched_via_spdy); |
| 584 EXPECT_FALSE(response->was_npn_negotiated); | 589 EXPECT_FALSE(response->was_npn_negotiated); |
| 585 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP1, | 590 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP1, |
| 586 response->connection_info); | 591 response->connection_info); |
| 587 } | 592 } |
| 588 | 593 |
| 589 void CheckResponseData(const std::unique_ptr<HttpNetworkTransaction>& trans, | 594 void CheckResponseData(const std::unique_ptr<HttpNetworkTransaction>& trans, |
| 590 const std::string& expected) { | 595 const std::string& expected) { |
| 591 std::string response_data; | 596 std::string response_data; |
| 592 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 597 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); |
| 593 EXPECT_EQ(expected, response_data); | 598 EXPECT_EQ(expected, response_data); |
| 594 } | 599 } |
| 595 | 600 |
| 596 void RunTransaction(const std::unique_ptr<HttpNetworkTransaction>& trans) { | 601 void RunTransaction(const std::unique_ptr<HttpNetworkTransaction>& trans) { |
| 597 TestCompletionCallback callback; | 602 TestCompletionCallback callback; |
| 598 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 603 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 599 EXPECT_EQ(ERR_IO_PENDING, rv); | 604 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 600 EXPECT_EQ(OK, callback.WaitForResult()); | 605 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 601 } | 606 } |
| 602 | 607 |
| 603 void SendRequestAndExpectHttpResponse(const std::string& expected) { | 608 void SendRequestAndExpectHttpResponse(const std::string& expected) { |
| 604 std::unique_ptr<HttpNetworkTransaction> trans( | 609 std::unique_ptr<HttpNetworkTransaction> trans( |
| 605 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 610 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 606 RunTransaction(trans); | 611 RunTransaction(trans); |
| 607 CheckWasHttpResponse(trans); | 612 CheckWasHttpResponse(trans); |
| 608 CheckResponseData(trans, expected); | 613 CheckResponseData(trans, expected); |
| 609 } | 614 } |
| 610 | 615 |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | 922 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
| 918 | 923 |
| 919 CreateSession(); | 924 CreateSession(); |
| 920 | 925 |
| 921 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count()); | 926 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count()); |
| 922 for (size_t i = 0; i < 2; ++i) { | 927 for (size_t i = 0; i < 2; ++i) { |
| 923 std::unique_ptr<HttpNetworkTransaction> trans( | 928 std::unique_ptr<HttpNetworkTransaction> trans( |
| 924 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 929 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 925 TestCompletionCallback callback; | 930 TestCompletionCallback callback; |
| 926 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 931 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 927 EXPECT_EQ(ERR_IO_PENDING, rv); | 932 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 928 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 933 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); |
| 929 EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count()); | 934 EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count()); |
| 930 } | 935 } |
| 931 } | 936 } |
| 932 | 937 |
| 933 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { | 938 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { |
| 934 // Attempt to "force" quic on 443, which will not be honored. | 939 // Attempt to "force" quic on 443, which will not be honored. |
| 935 params_.origins_to_force_quic_on.insert( | 940 params_.origins_to_force_quic_on.insert( |
| 936 HostPortPair::FromString("www.google.com:443")); | 941 HostPortPair::FromString("www.google.com:443")); |
| 937 | 942 |
| 938 MockRead http_reads[] = { | 943 MockRead http_reads[] = { |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1160 nullptr, net_log_.bound()); | 1165 nullptr, net_log_.bound()); |
| 1161 | 1166 |
| 1162 CreateSession(); | 1167 CreateSession(); |
| 1163 session_->quic_stream_factory()->set_require_confirmation(true); | 1168 session_->quic_stream_factory()->set_require_confirmation(true); |
| 1164 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1169 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 1165 | 1170 |
| 1166 std::unique_ptr<HttpNetworkTransaction> trans( | 1171 std::unique_ptr<HttpNetworkTransaction> trans( |
| 1167 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1172 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 1168 TestCompletionCallback callback; | 1173 TestCompletionCallback callback; |
| 1169 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1174 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 1170 EXPECT_EQ(ERR_IO_PENDING, rv); | 1175 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1171 | 1176 |
| 1172 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 1177 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
| 1173 QuicSession::HANDSHAKE_CONFIRMED); | 1178 QuicSession::HANDSHAKE_CONFIRMED); |
| 1174 EXPECT_EQ(OK, callback.WaitForResult()); | 1179 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 1175 | 1180 |
| 1176 // Check whether this transaction is correctly marked as received a go-away | 1181 // Check whether this transaction is correctly marked as received a go-away |
| 1177 // because of migrating port. | 1182 // because of migrating port. |
| 1178 NetErrorDetails details; | 1183 NetErrorDetails details; |
| 1179 EXPECT_FALSE(details.quic_port_migration_detected); | 1184 EXPECT_FALSE(details.quic_port_migration_detected); |
| 1180 trans->PopulateNetErrorDetails(&details); | 1185 trans->PopulateNetErrorDetails(&details); |
| 1181 EXPECT_TRUE(details.quic_port_migration_detected); | 1186 EXPECT_TRUE(details.quic_port_migration_detected); |
| 1182 } | 1187 } |
| 1183 | 1188 |
| 1184 TEST_P(QuicNetworkTransactionTest, | 1189 TEST_P(QuicNetworkTransactionTest, |
| (...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1777 nullptr, net_log_.bound()); | 1782 nullptr, net_log_.bound()); |
| 1778 | 1783 |
| 1779 CreateSession(); | 1784 CreateSession(); |
| 1780 session_->quic_stream_factory()->set_require_confirmation(true); | 1785 session_->quic_stream_factory()->set_require_confirmation(true); |
| 1781 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1786 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 1782 | 1787 |
| 1783 std::unique_ptr<HttpNetworkTransaction> trans( | 1788 std::unique_ptr<HttpNetworkTransaction> trans( |
| 1784 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1789 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 1785 TestCompletionCallback callback; | 1790 TestCompletionCallback callback; |
| 1786 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1791 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 1787 EXPECT_EQ(ERR_IO_PENDING, rv); | 1792 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1788 | 1793 |
| 1789 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 1794 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
| 1790 QuicSession::HANDSHAKE_CONFIRMED); | 1795 QuicSession::HANDSHAKE_CONFIRMED); |
| 1791 EXPECT_EQ(OK, callback.WaitForResult()); | 1796 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 1792 | 1797 |
| 1793 CheckWasQuicResponse(trans); | 1798 CheckWasQuicResponse(trans); |
| 1794 CheckResponseData(trans, "hello!"); | 1799 CheckResponseData(trans, "hello!"); |
| 1795 } | 1800 } |
| 1796 | 1801 |
| 1797 TEST_P(QuicNetworkTransactionTest, | 1802 TEST_P(QuicNetworkTransactionTest, |
| 1798 LogGranularQuicErrorCodeOnQuicProtocolErrorLocal) { | 1803 LogGranularQuicErrorCodeOnQuicProtocolErrorLocal) { |
| 1799 MockQuicData mock_quic_data; | 1804 MockQuicData mock_quic_data; |
| 1800 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1805 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1801 1, kClientDataStreamId1, true, true, | 1806 1, kClientDataStreamId1, true, true, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1823 nullptr, net_log_.bound()); | 1828 nullptr, net_log_.bound()); |
| 1824 | 1829 |
| 1825 CreateSession(); | 1830 CreateSession(); |
| 1826 session_->quic_stream_factory()->set_require_confirmation(true); | 1831 session_->quic_stream_factory()->set_require_confirmation(true); |
| 1827 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1832 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 1828 | 1833 |
| 1829 std::unique_ptr<HttpNetworkTransaction> trans( | 1834 std::unique_ptr<HttpNetworkTransaction> trans( |
| 1830 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1835 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 1831 TestCompletionCallback callback; | 1836 TestCompletionCallback callback; |
| 1832 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1837 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 1833 EXPECT_EQ(ERR_IO_PENDING, rv); | 1838 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1834 | 1839 |
| 1835 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 1840 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
| 1836 QuicSession::HANDSHAKE_CONFIRMED); | 1841 QuicSession::HANDSHAKE_CONFIRMED); |
| 1837 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, callback.WaitForResult()); | 1842 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1838 | 1843 |
| 1839 NetErrorDetails details; | 1844 NetErrorDetails details; |
| 1840 EXPECT_EQ(QUIC_NO_ERROR, details.quic_connection_error); | 1845 EXPECT_EQ(QUIC_NO_ERROR, details.quic_connection_error); |
| 1841 | 1846 |
| 1842 trans->PopulateNetErrorDetails(&details); | 1847 trans->PopulateNetErrorDetails(&details); |
| 1843 // Verify the error code logged is what sent by the peer. | 1848 // Verify the error code logged is what sent by the peer. |
| 1844 EXPECT_EQ(QUIC_CRYPTO_VERSION_NOT_SUPPORTED, details.quic_connection_error); | 1849 EXPECT_EQ(QUIC_CRYPTO_VERSION_NOT_SUPPORTED, details.quic_connection_error); |
| 1845 } | 1850 } |
| 1846 | 1851 |
| 1847 TEST_P(QuicNetworkTransactionTest, | 1852 TEST_P(QuicNetworkTransactionTest, |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1878 nullptr, net_log_.bound()); | 1883 nullptr, net_log_.bound()); |
| 1879 | 1884 |
| 1880 CreateSession(); | 1885 CreateSession(); |
| 1881 session_->quic_stream_factory()->set_require_confirmation(true); | 1886 session_->quic_stream_factory()->set_require_confirmation(true); |
| 1882 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1887 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 1883 | 1888 |
| 1884 std::unique_ptr<HttpNetworkTransaction> trans( | 1889 std::unique_ptr<HttpNetworkTransaction> trans( |
| 1885 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1890 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 1886 TestCompletionCallback callback; | 1891 TestCompletionCallback callback; |
| 1887 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1892 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 1888 EXPECT_EQ(ERR_IO_PENDING, rv); | 1893 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1889 | 1894 |
| 1890 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 1895 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
| 1891 QuicSession::HANDSHAKE_CONFIRMED); | 1896 QuicSession::HANDSHAKE_CONFIRMED); |
| 1892 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, callback.WaitForResult()); | 1897 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1893 NetErrorDetails details; | 1898 NetErrorDetails details; |
| 1894 EXPECT_EQ(QUIC_NO_ERROR, details.quic_connection_error); | 1899 EXPECT_EQ(QUIC_NO_ERROR, details.quic_connection_error); |
| 1895 | 1900 |
| 1896 trans->PopulateNetErrorDetails(&details); | 1901 trans->PopulateNetErrorDetails(&details); |
| 1897 EXPECT_EQ(QUIC_INVALID_STREAM_ID, details.quic_connection_error); | 1902 EXPECT_EQ(QUIC_INVALID_STREAM_ID, details.quic_connection_error); |
| 1898 } | 1903 } |
| 1899 | 1904 |
| 1900 TEST_P(QuicNetworkTransactionTest, RstSteamErrorHandling) { | 1905 TEST_P(QuicNetworkTransactionTest, RstSteamErrorHandling) { |
| 1901 MockQuicData mock_quic_data; | 1906 MockQuicData mock_quic_data; |
| 1902 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1907 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1929 nullptr, net_log_.bound()); | 1934 nullptr, net_log_.bound()); |
| 1930 | 1935 |
| 1931 CreateSession(); | 1936 CreateSession(); |
| 1932 session_->quic_stream_factory()->set_require_confirmation(true); | 1937 session_->quic_stream_factory()->set_require_confirmation(true); |
| 1933 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1938 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 1934 | 1939 |
| 1935 std::unique_ptr<HttpNetworkTransaction> trans( | 1940 std::unique_ptr<HttpNetworkTransaction> trans( |
| 1936 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1941 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 1937 TestCompletionCallback callback; | 1942 TestCompletionCallback callback; |
| 1938 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1943 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 1939 EXPECT_EQ(ERR_IO_PENDING, rv); | 1944 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1940 | 1945 |
| 1941 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 1946 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
| 1942 QuicSession::HANDSHAKE_CONFIRMED); | 1947 QuicSession::HANDSHAKE_CONFIRMED); |
| 1943 // Read the headers. | 1948 // Read the headers. |
| 1944 EXPECT_EQ(OK, callback.WaitForResult()); | 1949 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 1945 | 1950 |
| 1946 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1951 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1947 ASSERT_TRUE(response != nullptr); | 1952 ASSERT_TRUE(response != nullptr); |
| 1948 ASSERT_TRUE(response->headers.get() != nullptr); | 1953 ASSERT_TRUE(response->headers.get() != nullptr); |
| 1949 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1954 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 1950 EXPECT_TRUE(response->was_fetched_via_spdy); | 1955 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 1951 EXPECT_TRUE(response->was_npn_negotiated); | 1956 EXPECT_TRUE(response->was_npn_negotiated); |
| 1952 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC1_SPDY3, | 1957 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC1_SPDY3, |
| 1953 response->connection_info); | 1958 response->connection_info); |
| 1954 | 1959 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1985 nullptr, net_log_.bound()); | 1990 nullptr, net_log_.bound()); |
| 1986 | 1991 |
| 1987 CreateSession(); | 1992 CreateSession(); |
| 1988 session_->quic_stream_factory()->set_require_confirmation(true); | 1993 session_->quic_stream_factory()->set_require_confirmation(true); |
| 1989 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1994 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 1990 | 1995 |
| 1991 std::unique_ptr<HttpNetworkTransaction> trans( | 1996 std::unique_ptr<HttpNetworkTransaction> trans( |
| 1992 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1997 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 1993 TestCompletionCallback callback; | 1998 TestCompletionCallback callback; |
| 1994 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1999 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 1995 EXPECT_EQ(ERR_IO_PENDING, rv); | 2000 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1996 | 2001 |
| 1997 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 2002 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
| 1998 QuicSession::HANDSHAKE_CONFIRMED); | 2003 QuicSession::HANDSHAKE_CONFIRMED); |
| 1999 // Read the headers. | 2004 // Read the headers. |
| 2000 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, callback.WaitForResult()); | 2005 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 2001 } | 2006 } |
| 2002 | 2007 |
| 2003 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) { | 2008 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) { |
| 2004 // Alternate-protocol job | 2009 // Alternate-protocol job |
| 2005 std::unique_ptr<QuicEncryptedPacket> close( | 2010 std::unique_ptr<QuicEncryptedPacket> close( |
| 2006 ConstructServerConnectionClosePacket(1)); | 2011 ConstructServerConnectionClosePacket(1)); |
| 2007 MockRead quic_reads[] = { | 2012 MockRead quic_reads[] = { |
| 2008 MockRead(ASYNC, close->data(), close->length()), | 2013 MockRead(ASYNC, close->data(), close->length()), |
| 2009 MockRead(ASYNC, ERR_IO_PENDING), // No more data to read | 2014 MockRead(ASYNC, ERR_IO_PENDING), // No more data to read |
| 2010 MockRead(ASYNC, OK), // EOF | 2015 MockRead(ASYNC, OK), // EOF |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2078 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2083 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 2079 | 2084 |
| 2080 AddHangingNonAlternateProtocolSocketData(); | 2085 AddHangingNonAlternateProtocolSocketData(); |
| 2081 CreateSession(); | 2086 CreateSession(); |
| 2082 | 2087 |
| 2083 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 2088 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
| 2084 std::unique_ptr<HttpNetworkTransaction> trans( | 2089 std::unique_ptr<HttpNetworkTransaction> trans( |
| 2085 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2090 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 2086 TestCompletionCallback callback; | 2091 TestCompletionCallback callback; |
| 2087 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2092 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 2088 EXPECT_EQ(ERR_IO_PENDING, rv); | 2093 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2089 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, callback.WaitForResult()); | 2094 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_SOCKET_NOT_CONNECTED)); |
| 2090 ExpectQuicAlternateProtocolMapping(); | 2095 ExpectQuicAlternateProtocolMapping(); |
| 2091 } | 2096 } |
| 2092 | 2097 |
| 2093 TEST_P(QuicNetworkTransactionTest, FailedZeroRttBrokenAlternateProtocol) { | 2098 TEST_P(QuicNetworkTransactionTest, FailedZeroRttBrokenAlternateProtocol) { |
| 2094 // Alternate-protocol job | 2099 // Alternate-protocol job |
| 2095 MockRead quic_reads[] = { | 2100 MockRead quic_reads[] = { |
| 2096 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 2101 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
| 2097 }; | 2102 }; |
| 2098 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr, | 2103 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr, |
| 2099 0); | 2104 0); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2260 request_.method = "POST"; | 2265 request_.method = "POST"; |
| 2261 ChunkedUploadDataStream upload_data(0); | 2266 ChunkedUploadDataStream upload_data(0); |
| 2262 upload_data.AppendData("1", 1, true); | 2267 upload_data.AppendData("1", 1, true); |
| 2263 | 2268 |
| 2264 request_.upload_data_stream = &upload_data; | 2269 request_.upload_data_stream = &upload_data; |
| 2265 | 2270 |
| 2266 std::unique_ptr<HttpNetworkTransaction> trans( | 2271 std::unique_ptr<HttpNetworkTransaction> trans( |
| 2267 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2272 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 2268 TestCompletionCallback callback; | 2273 TestCompletionCallback callback; |
| 2269 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2274 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 2270 EXPECT_EQ(ERR_IO_PENDING, rv); | 2275 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2271 EXPECT_NE(OK, callback.WaitForResult()); | 2276 EXPECT_NE(OK, callback.WaitForResult()); |
| 2272 } | 2277 } |
| 2273 | 2278 |
| 2274 // Adds coverage to catch regression such as https://crbug.com/622043 | 2279 // Adds coverage to catch regression such as https://crbug.com/622043 |
| 2275 TEST_P(QuicNetworkTransactionTest, QuicServerPush) { | 2280 TEST_P(QuicNetworkTransactionTest, QuicServerPush) { |
| 2276 params_.origins_to_force_quic_on.insert( | 2281 params_.origins_to_force_quic_on.insert( |
| 2277 HostPortPair::FromString("mail.example.org:443")); | 2282 HostPortPair::FromString("mail.example.org:443")); |
| 2278 | 2283 |
| 2279 MockQuicData mock_quic_data; | 2284 MockQuicData mock_quic_data; |
| 2280 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2285 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2502 void SendRequestAndExpectQuicResponse(const std::string& host) { | 2507 void SendRequestAndExpectQuicResponse(const std::string& host) { |
| 2503 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get()); | 2508 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get()); |
| 2504 HttpRequestInfo request; | 2509 HttpRequestInfo request; |
| 2505 std::string url("https://"); | 2510 std::string url("https://"); |
| 2506 url.append(host); | 2511 url.append(host); |
| 2507 request.url = GURL(url); | 2512 request.url = GURL(url); |
| 2508 request.load_flags = 0; | 2513 request.load_flags = 0; |
| 2509 request.method = "GET"; | 2514 request.method = "GET"; |
| 2510 TestCompletionCallback callback; | 2515 TestCompletionCallback callback; |
| 2511 int rv = trans.Start(&request, callback.callback(), net_log_.bound()); | 2516 int rv = trans.Start(&request, callback.callback(), net_log_.bound()); |
| 2512 EXPECT_EQ(OK, callback.GetResult(rv)); | 2517 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 2513 | 2518 |
| 2514 std::string response_data; | 2519 std::string response_data; |
| 2515 ASSERT_EQ(OK, ReadTransaction(&trans, &response_data)); | 2520 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); |
| 2516 EXPECT_EQ("hello", response_data); | 2521 EXPECT_EQ("hello", response_data); |
| 2517 | 2522 |
| 2518 const HttpResponseInfo* response = trans.GetResponseInfo(); | 2523 const HttpResponseInfo* response = trans.GetResponseInfo(); |
| 2519 ASSERT_TRUE(response != nullptr); | 2524 ASSERT_TRUE(response != nullptr); |
| 2520 ASSERT_TRUE(response->headers.get() != nullptr); | 2525 ASSERT_TRUE(response->headers.get() != nullptr); |
| 2521 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 2526 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 2522 EXPECT_TRUE(response->was_fetched_via_spdy); | 2527 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 2523 EXPECT_TRUE(response->was_npn_negotiated); | 2528 EXPECT_TRUE(response->was_npn_negotiated); |
| 2524 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC1_SPDY3, | 2529 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC1_SPDY3, |
| 2525 response->connection_info); | 2530 response->connection_info); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2588 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2593 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2589 | 2594 |
| 2590 AddRefusedSocketData(); | 2595 AddRefusedSocketData(); |
| 2591 | 2596 |
| 2592 HttpRequestInfo request; | 2597 HttpRequestInfo request; |
| 2593 request.url = url; | 2598 request.url = url; |
| 2594 | 2599 |
| 2595 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get()); | 2600 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get()); |
| 2596 TestCompletionCallback callback; | 2601 TestCompletionCallback callback; |
| 2597 int rv = trans.Start(&request, callback.callback(), net_log_.bound()); | 2602 int rv = trans.Start(&request, callback.callback(), net_log_.bound()); |
| 2598 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv)); | 2603 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
| 2599 | 2604 |
| 2600 EXPECT_TRUE(AllDataConsumed()); | 2605 EXPECT_TRUE(AllDataConsumed()); |
| 2601 } | 2606 } |
| 2602 | 2607 |
| 2603 // First request opens QUIC session to alternative service. Second request | 2608 // First request opens QUIC session to alternative service. Second request |
| 2604 // pools to it, because destination matches and certificate is valid, even | 2609 // pools to it, because destination matches and certificate is valid, even |
| 2605 // though QuicServerId is different. | 2610 // though QuicServerId is different. |
| 2606 TEST_P(QuicNetworkTransactionWithDestinationTest, PoolIfCertificateValid) { | 2611 TEST_P(QuicNetworkTransactionWithDestinationTest, PoolIfCertificateValid) { |
| 2607 origin1_ = "mail.example.org"; | 2612 origin1_ = "mail.example.org"; |
| 2608 origin2_ = "news.example.org"; | 2613 origin2_ = "news.example.org"; |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2742 AddHangingSocketData(); | 2747 AddHangingSocketData(); |
| 2743 | 2748 |
| 2744 SendRequestAndExpectQuicResponse(origin1_); | 2749 SendRequestAndExpectQuicResponse(origin1_); |
| 2745 SendRequestAndExpectQuicResponse(origin2_); | 2750 SendRequestAndExpectQuicResponse(origin2_); |
| 2746 | 2751 |
| 2747 EXPECT_TRUE(AllDataConsumed()); | 2752 EXPECT_TRUE(AllDataConsumed()); |
| 2748 } | 2753 } |
| 2749 | 2754 |
| 2750 } // namespace test | 2755 } // namespace test |
| 2751 } // namespace net | 2756 } // namespace net |
| OLD | NEW |