| 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/quic/quic_stream_factory.h" | 5 #include "net/quic/quic_stream_factory.h" |
| 6 | 6 |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "net/base/test_data_directory.h" | 9 #include "net/base/test_data_directory.h" |
| 10 #include "net/cert/cert_verifier.h" | 10 #include "net/cert/cert_verifier.h" |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 | 118 |
| 119 static void DisableConnectionPooling(QuicStreamFactory* factory) { | 119 static void DisableConnectionPooling(QuicStreamFactory* factory) { |
| 120 factory->disable_connection_pooling_ = true; | 120 factory->disable_connection_pooling_ = true; |
| 121 } | 121 } |
| 122 | 122 |
| 123 static void SetTaskRunner(QuicStreamFactory* factory, | 123 static void SetTaskRunner(QuicStreamFactory* factory, |
| 124 base::TaskRunner* task_runner) { | 124 base::TaskRunner* task_runner) { |
| 125 factory->task_runner_ = task_runner; | 125 factory->task_runner_ = task_runner; |
| 126 } | 126 } |
| 127 | 127 |
| 128 static void SetLoadServerInfoTimeout(QuicStreamFactory* factory, | |
| 129 size_t load_server_info_timeout) { | |
| 130 factory->load_server_info_timeout_ms_ = load_server_info_timeout; | |
| 131 } | |
| 132 | |
| 133 static void SetEnableConnectionRacing(QuicStreamFactory* factory, | 128 static void SetEnableConnectionRacing(QuicStreamFactory* factory, |
| 134 bool enable_connection_racing) { | 129 bool enable_connection_racing) { |
| 135 factory->enable_connection_racing_ = enable_connection_racing; | 130 factory->enable_connection_racing_ = enable_connection_racing; |
| 136 } | 131 } |
| 137 | 132 |
| 138 static void SetDisableDiskCache(QuicStreamFactory* factory, | 133 static void SetDisableDiskCache(QuicStreamFactory* factory, |
| 139 bool disable_disk_cache) { | 134 bool disable_disk_cache) { |
| 140 factory->disable_disk_cache_ = disable_disk_cache; | 135 factory->disable_disk_cache_ = disable_disk_cache; |
| 141 } | 136 } |
| 142 | 137 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 &transport_security_state_, | 195 &transport_security_state_, |
| 201 &crypto_client_stream_factory_, | 196 &crypto_client_stream_factory_, |
| 202 &random_generator_, | 197 &random_generator_, |
| 203 clock_, | 198 clock_, |
| 204 kDefaultMaxPacketSize, | 199 kDefaultMaxPacketSize, |
| 205 std::string(), | 200 std::string(), |
| 206 SupportedVersions(GetParam().version), | 201 SupportedVersions(GetParam().version), |
| 207 /*enable_port_selection=*/true, | 202 /*enable_port_selection=*/true, |
| 208 /*always_require_handshake_confirmation=*/false, | 203 /*always_require_handshake_confirmation=*/false, |
| 209 /*disable_connection_pooling=*/false, | 204 /*disable_connection_pooling=*/false, |
| 210 /*load_server_info_timeout=*/0u, | |
| 211 /*load_server_info_timeout_srtt_multiplier=*/0.0f, | 205 /*load_server_info_timeout_srtt_multiplier=*/0.0f, |
| 212 /*enable_truncated_connection_ids=*/true, | |
| 213 /*enable_connection_racing=*/false, | 206 /*enable_connection_racing=*/false, |
| 214 /*enable_non_blocking_io=*/true, | 207 /*enable_non_blocking_io=*/true, |
| 215 /*disable_disk_cache=*/false, | 208 /*disable_disk_cache=*/false, |
| 216 /*receive_buffer_size=*/0, | 209 /*receive_buffer_size=*/0, |
| 217 QuicTagVector()), | 210 QuicTagVector()), |
| 218 host_port_pair_(kDefaultServerHostName, kDefaultServerPort), | 211 host_port_pair_(kDefaultServerHostName, kDefaultServerPort), |
| 219 is_https_(false), | 212 is_https_(false), |
| 220 privacy_mode_(PRIVACY_MODE_DISABLED) { | 213 privacy_mode_(PRIVACY_MODE_DISABLED) { |
| 221 factory_.set_require_confirmation(false); | 214 factory_.set_require_confirmation(false); |
| 222 clock_->AdvanceTime(QuicTime::Delta::FromSeconds(1)); | 215 clock_->AdvanceTime(QuicTime::Delta::FromSeconds(1)); |
| (...skipping 1383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1606 HostPortPair host_port_pair2(r4_host_name, 80); | 1599 HostPortPair host_port_pair2(r4_host_name, 80); |
| 1607 QuicServerId server_id2(host_port_pair2, is_https_, privacy_mode_); | 1600 QuicServerId server_id2(host_port_pair2, is_https_, privacy_mode_); |
| 1608 QuicCryptoClientConfig::CachedState* cached2 = | 1601 QuicCryptoClientConfig::CachedState* cached2 = |
| 1609 crypto_config->LookupOrCreate(server_id2); | 1602 crypto_config->LookupOrCreate(server_id2); |
| 1610 EXPECT_NE(cached1->source_address_token(), cached2->source_address_token()); | 1603 EXPECT_NE(cached1->source_address_token(), cached2->source_address_token()); |
| 1611 EXPECT_TRUE(cached2->source_address_token().empty()); | 1604 EXPECT_TRUE(cached2->source_address_token().empty()); |
| 1612 EXPECT_FALSE(cached2->proof_valid()); | 1605 EXPECT_FALSE(cached2->proof_valid()); |
| 1613 } | 1606 } |
| 1614 } | 1607 } |
| 1615 | 1608 |
| 1616 TEST_P(QuicStreamFactoryTest, CancelWaitForDataReady) { | |
| 1617 // Don't race quic connections when testing cancel reading of server config | |
| 1618 // from disk cache. | |
| 1619 if (GetParam().enable_connection_racing) | |
| 1620 return; | |
| 1621 factory_.set_quic_server_info_factory(&quic_server_info_factory_); | |
| 1622 QuicStreamFactoryPeer::SetTaskRunner(&factory_, runner_.get()); | |
| 1623 const size_t kLoadServerInfoTimeoutMs = 50; | |
| 1624 QuicStreamFactoryPeer::SetLoadServerInfoTimeout( | |
| 1625 &factory_, kLoadServerInfoTimeoutMs); | |
| 1626 | |
| 1627 MockRead reads[] = { | |
| 1628 MockRead(ASYNC, OK, 0) // EOF | |
| 1629 }; | |
| 1630 DeterministicSocketData socket_data(reads, arraysize(reads), nullptr, 0); | |
| 1631 socket_factory_.AddSocketDataProvider(&socket_data); | |
| 1632 socket_data.StopAfter(1); | |
| 1633 | |
| 1634 crypto_client_stream_factory_.set_handshake_mode( | |
| 1635 MockCryptoClientStream::ZERO_RTT); | |
| 1636 host_resolver_.set_synchronous_mode(true); | |
| 1637 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(), | |
| 1638 "192.168.0.1", ""); | |
| 1639 | |
| 1640 QuicStreamRequest request(&factory_); | |
| 1641 EXPECT_EQ(ERR_IO_PENDING, | |
| 1642 request.Request(host_port_pair_, | |
| 1643 is_https_, | |
| 1644 privacy_mode_, | |
| 1645 "GET", | |
| 1646 net_log_, | |
| 1647 callback_.callback())); | |
| 1648 | |
| 1649 // Verify that the CancelWaitForDataReady task has been posted. | |
| 1650 ASSERT_EQ(1u, runner_->GetPostedTasks().size()); | |
| 1651 EXPECT_EQ(base::TimeDelta::FromMilliseconds(kLoadServerInfoTimeoutMs), | |
| 1652 runner_->GetPostedTasks()[0].delay); | |
| 1653 | |
| 1654 runner_->RunNextTask(); | |
| 1655 ASSERT_EQ(0u, runner_->GetPostedTasks().size()); | |
| 1656 | |
| 1657 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); | |
| 1658 EXPECT_TRUE(stream.get()); | |
| 1659 EXPECT_TRUE(socket_data.at_read_eof()); | |
| 1660 EXPECT_TRUE(socket_data.at_write_eof()); | |
| 1661 } | |
| 1662 | |
| 1663 TEST_P(QuicStreamFactoryTest, RacingConnections) { | 1609 TEST_P(QuicStreamFactoryTest, RacingConnections) { |
| 1664 if (!GetParam().enable_connection_racing) | 1610 if (!GetParam().enable_connection_racing) |
| 1665 return; | 1611 return; |
| 1666 factory_.set_quic_server_info_factory(&quic_server_info_factory_); | 1612 factory_.set_quic_server_info_factory(&quic_server_info_factory_); |
| 1667 QuicStreamFactoryPeer::SetTaskRunner(&factory_, runner_.get()); | 1613 QuicStreamFactoryPeer::SetTaskRunner(&factory_, runner_.get()); |
| 1668 const size_t kLoadServerInfoTimeoutMs = 50; | |
| 1669 QuicStreamFactoryPeer::SetLoadServerInfoTimeout(&factory_, | |
| 1670 kLoadServerInfoTimeoutMs); | |
| 1671 | |
| 1672 MockRead reads[] = { | 1614 MockRead reads[] = { |
| 1673 MockRead(ASYNC, OK, 0) // EOF | 1615 MockRead(ASYNC, OK, 0) // EOF |
| 1674 }; | 1616 }; |
| 1675 DeterministicSocketData socket_data(reads, arraysize(reads), nullptr, 0); | 1617 DeterministicSocketData socket_data(reads, arraysize(reads), nullptr, 0); |
| 1676 socket_factory_.AddSocketDataProvider(&socket_data); | 1618 socket_factory_.AddSocketDataProvider(&socket_data); |
| 1677 socket_data.StopAfter(1); | 1619 socket_data.StopAfter(1); |
| 1678 | 1620 |
| 1679 MockRead reads2[] = { | 1621 MockRead reads2[] = { |
| 1680 MockRead(ASYNC, 0, 0) // EOF | 1622 MockRead(ASYNC, 0, 0) // EOF |
| 1681 }; | 1623 }; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1703 EXPECT_TRUE(stream.get()); | 1645 EXPECT_TRUE(stream.get()); |
| 1704 EXPECT_TRUE(socket_data.at_read_eof()); | 1646 EXPECT_TRUE(socket_data.at_read_eof()); |
| 1705 EXPECT_TRUE(socket_data.at_write_eof()); | 1647 EXPECT_TRUE(socket_data.at_write_eof()); |
| 1706 EXPECT_EQ(0u, | 1648 EXPECT_EQ(0u, |
| 1707 QuicStreamFactoryPeer::GetNumberOfActiveJobs(&factory_, server_id)); | 1649 QuicStreamFactoryPeer::GetNumberOfActiveJobs(&factory_, server_id)); |
| 1708 } | 1650 } |
| 1709 | 1651 |
| 1710 TEST_P(QuicStreamFactoryTest, EnableNotLoadFromDiskCache) { | 1652 TEST_P(QuicStreamFactoryTest, EnableNotLoadFromDiskCache) { |
| 1711 factory_.set_quic_server_info_factory(&quic_server_info_factory_); | 1653 factory_.set_quic_server_info_factory(&quic_server_info_factory_); |
| 1712 QuicStreamFactoryPeer::SetTaskRunner(&factory_, runner_.get()); | 1654 QuicStreamFactoryPeer::SetTaskRunner(&factory_, runner_.get()); |
| 1713 const size_t kLoadServerInfoTimeoutMs = 50; | |
| 1714 QuicStreamFactoryPeer::SetLoadServerInfoTimeout(&factory_, | |
| 1715 kLoadServerInfoTimeoutMs); | |
| 1716 QuicStreamFactoryPeer::SetDisableDiskCache(&factory_, true); | 1655 QuicStreamFactoryPeer::SetDisableDiskCache(&factory_, true); |
| 1717 | 1656 |
| 1718 MockRead reads[] = { | 1657 MockRead reads[] = { |
| 1719 MockRead(ASYNC, OK, 0) // EOF | 1658 MockRead(ASYNC, OK, 0) // EOF |
| 1720 }; | 1659 }; |
| 1721 DeterministicSocketData socket_data(reads, arraysize(reads), nullptr, 0); | 1660 DeterministicSocketData socket_data(reads, arraysize(reads), nullptr, 0); |
| 1722 socket_factory_.AddSocketDataProvider(&socket_data); | 1661 socket_factory_.AddSocketDataProvider(&socket_data); |
| 1723 socket_data.StopAfter(1); | 1662 socket_data.StopAfter(1); |
| 1724 | 1663 |
| 1725 crypto_client_stream_factory_.set_handshake_mode( | 1664 crypto_client_stream_factory_.set_handshake_mode( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1737 ASSERT_EQ(0u, runner_->GetPostedTasks().size()); | 1676 ASSERT_EQ(0u, runner_->GetPostedTasks().size()); |
| 1738 | 1677 |
| 1739 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); | 1678 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); |
| 1740 EXPECT_TRUE(stream.get()); | 1679 EXPECT_TRUE(stream.get()); |
| 1741 EXPECT_TRUE(socket_data.at_read_eof()); | 1680 EXPECT_TRUE(socket_data.at_read_eof()); |
| 1742 EXPECT_TRUE(socket_data.at_write_eof()); | 1681 EXPECT_TRUE(socket_data.at_write_eof()); |
| 1743 } | 1682 } |
| 1744 | 1683 |
| 1745 } // namespace test | 1684 } // namespace test |
| 1746 } // namespace net | 1685 } // namespace net |
| OLD | NEW |