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 |