Index: net/quic/chromium/quic_stream_factory_test.cc |
diff --git a/net/quic/chromium/quic_stream_factory_test.cc b/net/quic/chromium/quic_stream_factory_test.cc |
index f3acc6071646fb9a70f97d251a339d32cb641de3..877411d5300e9d28f7e75a3ef0c3b75a6a35226d 100644 |
--- a/net/quic/chromium/quic_stream_factory_test.cc |
+++ b/net/quic/chromium/quic_stream_factory_test.cc |
@@ -101,23 +101,18 @@ const char kServer4Url[] = "https://images.example.org/"; |
// and enable_connection_racting. |
struct TestParams { |
friend std::ostream& operator<<(std::ostream& os, const TestParams& p) { |
- os << "{ version: " << QuicVersionToString(p.version) |
- << ", enable_connection_racing: " |
- << (p.enable_connection_racing ? "true" : "false") << " }"; |
+ os << "{ version: " << QuicVersionToString(p.version) << " }"; |
return os; |
} |
QuicVersion version; |
- bool enable_connection_racing; |
}; |
std::vector<TestParams> GetTestParams() { |
std::vector<TestParams> params; |
QuicVersionVector all_supported_versions = AllSupportedVersions(); |
- for (const QuicVersion version : all_supported_versions) { |
- params.push_back(TestParams{version, false}); |
- params.push_back(TestParams{version, true}); |
- } |
+ for (const auto& version : all_supported_versions) |
+ params.push_back(TestParams{version}); |
return params; |
} |
@@ -127,8 +122,6 @@ struct PoolingTestParams { |
friend std::ostream& operator<<(std::ostream& os, |
const PoolingTestParams& p) { |
os << "{ version: " << QuicVersionToString(p.version) |
- << ", enable_connection_racing: " |
- << (p.enable_connection_racing ? "true" : "false") |
<< ", destination_type: "; |
switch (p.destination_type) { |
case SAME_AS_FIRST: |
@@ -146,7 +139,6 @@ struct PoolingTestParams { |
} |
QuicVersion version; |
- bool enable_connection_racing; |
DestinationType destination_type; |
}; |
@@ -154,12 +146,9 @@ std::vector<PoolingTestParams> GetPoolingTestParams() { |
std::vector<PoolingTestParams> params; |
QuicVersionVector all_supported_versions = AllSupportedVersions(); |
for (const QuicVersion version : all_supported_versions) { |
- params.push_back(PoolingTestParams{version, false, SAME_AS_FIRST}); |
- params.push_back(PoolingTestParams{version, false, SAME_AS_SECOND}); |
- params.push_back(PoolingTestParams{version, false, DIFFERENT}); |
- params.push_back(PoolingTestParams{version, true, SAME_AS_FIRST}); |
- params.push_back(PoolingTestParams{version, true, SAME_AS_SECOND}); |
- params.push_back(PoolingTestParams{version, true, DIFFERENT}); |
+ params.push_back(PoolingTestParams{version, SAME_AS_FIRST}); |
+ params.push_back(PoolingTestParams{version, SAME_AS_SECOND}); |
+ params.push_back(PoolingTestParams{version, DIFFERENT}); |
} |
return params; |
} |
@@ -173,50 +162,9 @@ class QuicHttpStreamPeer { |
} |
}; |
-class MockQuicServerInfo : public QuicServerInfo { |
- public: |
- explicit MockQuicServerInfo(const QuicServerId& server_id) |
- : QuicServerInfo(server_id) {} |
- ~MockQuicServerInfo() override {} |
- |
- void Start() override {} |
- |
- int WaitForDataReady(const CompletionCallback& callback) override { |
- return ERR_IO_PENDING; |
- } |
- |
- void ResetWaitForDataReadyCallback() override {} |
- |
- void CancelWaitForDataReadyCallback() override {} |
- |
- bool IsDataReady() override { return false; } |
- |
- bool IsReadyToPersist() override { return false; } |
- |
- void Persist() override {} |
- |
- void OnExternalCacheHit() override {} |
- |
- size_t EstimateMemoryUsage() const override { |
- NOTREACHED(); |
- return 0; |
- } |
-}; |
- |
-class MockQuicServerInfoFactory : public QuicServerInfoFactory { |
- public: |
- MockQuicServerInfoFactory() {} |
- ~MockQuicServerInfoFactory() override {} |
- |
- std::unique_ptr<QuicServerInfo> GetForServer( |
- const QuicServerId& server_id) override { |
- return base::MakeUnique<MockQuicServerInfo>(server_id); |
- } |
-}; |
- |
class QuicStreamFactoryTestBase { |
protected: |
- QuicStreamFactoryTestBase(QuicVersion version, bool enable_connection_racing) |
+ explicit QuicStreamFactoryTestBase(QuicVersion version) |
: ssl_config_service_(new MockSSLConfigService), |
random_generator_(0), |
runner_(new TestTaskRunner(&clock_)), |
@@ -243,10 +191,8 @@ class QuicStreamFactoryTestBase { |
url3_(kServer3Url), |
url4_(kServer4Url), |
privacy_mode_(PRIVACY_MODE_DISABLED), |
- load_server_info_timeout_srtt_multiplier_(0.0f), |
- enable_connection_racing_(enable_connection_racing), |
enable_non_blocking_io_(true), |
- disable_disk_cache_(false), |
+ store_server_configs_in_properties_(false), |
close_sessions_on_ip_change_(false), |
idle_connection_timeout_seconds_(kIdleConnectionTimeoutSeconds), |
reduced_ping_timeout_seconds_(kPingTimeoutSecs), |
@@ -271,9 +217,7 @@ class QuicStreamFactoryTestBase { |
/*SocketPerformanceWatcherFactory*/ nullptr, |
&crypto_client_stream_factory_, &random_generator_, &clock_, |
kDefaultMaxPacketSize, string(), SupportedVersions(version_), |
- load_server_info_timeout_srtt_multiplier_, enable_connection_racing_, |
- enable_non_blocking_io_, disable_disk_cache_, |
- /*max_server_configs_stored_in_properties*/ 0, |
+ enable_non_blocking_io_, store_server_configs_in_properties_, |
close_sessions_on_ip_change_, |
/*mark_quic_broken_when_network_blackholes*/ false, |
idle_connection_timeout_seconds_, reduced_ping_timeout_seconds_, |
@@ -283,9 +227,6 @@ class QuicStreamFactoryTestBase { |
/*do_not_fragment*/ true, estimate_initial_rtt_, QuicTagVector(), |
/*enable_token_binding*/ false)); |
factory_->set_require_confirmation(false); |
- EXPECT_FALSE(factory_->has_quic_server_info_factory()); |
- factory_->set_quic_server_info_factory(new MockQuicServerInfoFactory()); |
- EXPECT_TRUE(factory_->has_quic_server_info_factory()); |
} |
void InitializeConnectionMigrationTest( |
@@ -541,10 +482,14 @@ class QuicStreamFactoryTestBase { |
// a non proxy server that support alternative services is added to the |
// HttpServerProperties map. |
void VerifyInitialization(bool proxy_delegate_provides_quic_supported_proxy) { |
+ store_server_configs_in_properties_ = true; |
idle_connection_timeout_seconds_ = 500; |
Initialize(); |
ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
+ crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
+ crypto_client_stream_factory_.set_handshake_mode( |
+ MockCryptoClientStream::ZERO_RTT); |
const QuicConfig* config = QuicStreamFactoryPeer::GetConfig(factory_.get()); |
EXPECT_EQ(500, config->IdleNetworkTimeout().ToSeconds()); |
@@ -584,14 +529,11 @@ class QuicStreamFactoryTestBase { |
http_server_properties_.SetMaxServerConfigsStoredInProperties( |
kMaxQuicServersToPersist); |
- QuicServerId quic_server_id(kDefaultServerHostName, 80, |
+ QuicServerId quic_server_id(kDefaultServerHostName, 443, |
PRIVACY_MODE_DISABLED); |
- QuicServerInfoFactory* quic_server_info_factory = |
- new PropertiesBasedQuicServerInfoFactory(&http_server_properties_); |
- factory_->set_quic_server_info_factory(quic_server_info_factory); |
- |
- std::unique_ptr<QuicServerInfo> quic_server_info( |
- quic_server_info_factory->GetForServer(quic_server_id)); |
+ std::unique_ptr<QuicServerInfo> quic_server_info = |
+ base::MakeUnique<PropertiesBasedQuicServerInfo>( |
+ quic_server_id, &http_server_properties_); |
// Update quic_server_info's server_config and persist it. |
QuicServerInfo::State* state = quic_server_info->mutable_state(); |
@@ -627,10 +569,10 @@ class QuicStreamFactoryTestBase { |
quic_server_info->Persist(); |
- QuicServerId quic_server_id2(kServer2HostName, 80, PRIVACY_MODE_DISABLED); |
- std::unique_ptr<QuicServerInfo> quic_server_info2( |
- quic_server_info_factory->GetForServer(quic_server_id2)); |
- |
+ QuicServerId quic_server_id2(kServer2HostName, 443, PRIVACY_MODE_DISABLED); |
+ std::unique_ptr<QuicServerInfo> quic_server_info2 = |
+ base::MakeUnique<PropertiesBasedQuicServerInfo>( |
+ quic_server_id2, &http_server_properties_); |
// Update quic_server_info2's server_config and persist it. |
QuicServerInfo::State* state2 = quic_server_info2->mutable_state(); |
@@ -667,9 +609,6 @@ class QuicStreamFactoryTestBase { |
quic_server_info2->Persist(); |
- QuicStreamFactoryPeer::MaybeInitialize(factory_.get()); |
- EXPECT_TRUE(QuicStreamFactoryPeer::HasInitializedData(factory_.get())); |
- |
// Verify the MRU order is maintained. |
const QuicServerInfoMap& quic_server_info_map = |
http_server_properties_.quic_server_info_map(); |
@@ -680,8 +619,21 @@ class QuicStreamFactoryTestBase { |
++quic_server_info_map_it; |
EXPECT_EQ(quic_server_info_map_it->first, quic_server_id); |
- EXPECT_TRUE(QuicStreamFactoryPeer::SupportsQuicAtStartUp(factory_.get(), |
- host_port_pair_)); |
+ host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(), |
+ "192.168.0.1", ""); |
+ |
+ // Create a session and verify that the cached state is loaded. |
+ MockQuicData socket_data; |
+ socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
+ socket_data.AddSocketDataToFactory(&socket_factory_); |
+ |
+ QuicStreamRequest request(factory_.get(), &http_server_properties_); |
+ EXPECT_EQ(ERR_IO_PENDING, |
+ request.Request(quic_server_id.host_port_pair(), privacy_mode_, |
+ /*cert_verify_flags=*/0, url_, "GET", net_log_, |
+ callback_.callback())); |
+ EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
+ |
EXPECT_FALSE(QuicStreamFactoryPeer::CryptoConfigCacheIsEmpty( |
factory_.get(), quic_server_id)); |
QuicCryptoClientConfig* crypto_config = |
@@ -698,8 +650,24 @@ class QuicStreamFactoryTestBase { |
ASSERT_EQ(1U, cached->certs().size()); |
EXPECT_EQ(test_cert, cached->certs()[0]); |
- EXPECT_TRUE(QuicStreamFactoryPeer::SupportsQuicAtStartUp(factory_.get(), |
- host_port_pair2)); |
+ EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
+ |
+ // Create a session and verify that the cached state is loaded. |
+ MockQuicData socket_data2; |
+ socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
+ socket_data2.AddSocketDataToFactory(&socket_factory_); |
+ |
+ host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(), |
+ "192.168.0.2", ""); |
+ |
+ QuicStreamRequest request2(factory_.get(), &http_server_properties_); |
+ EXPECT_EQ(ERR_IO_PENDING, |
+ request2.Request(quic_server_id2.host_port_pair(), privacy_mode_, |
+ /*cert_verify_flags=*/0, |
+ GURL("https://mail.example.org/"), "GET", |
+ net_log_, callback_.callback())); |
+ EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
+ |
EXPECT_FALSE(QuicStreamFactoryPeer::CryptoConfigCacheIsEmpty( |
factory_.get(), quic_server_id2)); |
QuicCryptoClientConfig::CachedState* cached2 = |
@@ -769,10 +737,8 @@ class QuicStreamFactoryTestBase { |
TestCompletionCallback callback_; |
// Variables to configure QuicStreamFactory. |
- double load_server_info_timeout_srtt_multiplier_; |
- bool enable_connection_racing_; |
bool enable_non_blocking_io_; |
- bool disable_disk_cache_; |
+ bool store_server_configs_in_properties_; |
bool close_sessions_on_ip_change_; |
int idle_connection_timeout_seconds_; |
int reduced_ping_timeout_seconds_; |
@@ -788,9 +754,7 @@ class QuicStreamFactoryTestBase { |
class QuicStreamFactoryTest : public QuicStreamFactoryTestBase, |
public ::testing::TestWithParam<TestParams> { |
protected: |
- QuicStreamFactoryTest() |
- : QuicStreamFactoryTestBase(GetParam().version, |
- GetParam().enable_connection_racing) {} |
+ QuicStreamFactoryTest() : QuicStreamFactoryTestBase(GetParam().version) {} |
}; |
INSTANTIATE_TEST_CASE_P(Version, |
@@ -4417,62 +4381,7 @@ TEST_P(QuicStreamFactoryTest, CryptoConfigWhenProofIsInvalid) { |
} |
} |
-TEST_P(QuicStreamFactoryTest, RacingConnections) { |
- disable_disk_cache_ = false; |
- Initialize(); |
- ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
- crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
- |
- if (!enable_connection_racing_) |
- return; |
- |
- QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get()); |
- |
- MockQuicData socket_data; |
- socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
- socket_data.AddSocketDataToFactory(&socket_factory_); |
- |
- MockQuicData socket_data2; |
- socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
- socket_data2.AddSocketDataToFactory(&socket_factory_); |
- |
- const AlternativeService alternative_service1( |
- kProtoQUIC, host_port_pair_.host(), host_port_pair_.port()); |
- AlternativeServiceInfoVector alternative_service_info_vector; |
- base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
- alternative_service_info_vector.push_back( |
- AlternativeServiceInfo(alternative_service1, expiration)); |
- |
- http_server_properties_.SetAlternativeServices( |
- url::SchemeHostPort(url_), alternative_service_info_vector); |
- |
- crypto_client_stream_factory_.set_handshake_mode( |
- MockCryptoClientStream::ZERO_RTT); |
- host_resolver_.set_synchronous_mode(true); |
- host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(), |
- "192.168.0.1", ""); |
- |
- QuicStreamRequest request(factory_.get(), &http_server_properties_); |
- QuicServerId server_id(host_port_pair_, privacy_mode_); |
- EXPECT_EQ(ERR_IO_PENDING, |
- request.Request(host_port_pair_, privacy_mode_, |
- /*cert_verify_flags=*/0, url_, "GET", net_log_, |
- callback_.callback())); |
- EXPECT_EQ(2u, QuicStreamFactoryPeer::GetNumberOfActiveJobs(factory_.get(), |
- server_id)); |
- |
- runner_->RunNextTask(); |
- |
- std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); |
- EXPECT_TRUE(stream.get()); |
- EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
- EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
- EXPECT_EQ(0u, QuicStreamFactoryPeer::GetNumberOfActiveJobs(factory_.get(), |
- server_id)); |
-} |
- |
TEST_P(QuicStreamFactoryTest, EnableNotLoadFromDiskCache) { |
- disable_disk_cache_ = true; |
Initialize(); |
ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
@@ -4506,7 +4415,6 @@ TEST_P(QuicStreamFactoryTest, EnableNotLoadFromDiskCache) { |
TEST_P(QuicStreamFactoryTest, ReducePingTimeoutOnConnectionTimeOutOpenStreams) { |
reduced_ping_timeout_seconds_ = 10; |
- disable_disk_cache_ = true; |
Initialize(); |
ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
@@ -4598,50 +4506,6 @@ TEST_P(QuicStreamFactoryTest, ReducePingTimeoutOnConnectionTimeOutOpenStreams) { |
EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); |
} |
-TEST_P(QuicStreamFactoryTest, DelayTcpRace) { |
- Initialize(); |
- ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
- crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
- MockQuicData socket_data; |
- socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
- socket_data.AddWrite( |
- ConstructSettingsPacket(1, SETTINGS_MAX_HEADER_LIST_SIZE, |
- kDefaultMaxUncompressedHeaderSize, nullptr)); |
- socket_data.AddSocketDataToFactory(&socket_factory_); |
- |
- ServerNetworkStats stats1; |
- stats1.srtt = base::TimeDelta::FromMicroseconds(10); |
- http_server_properties_.SetServerNetworkStats(url::SchemeHostPort(url_), |
- stats1); |
- |
- crypto_client_stream_factory_.set_handshake_mode( |
- MockCryptoClientStream::COLD_START); |
- host_resolver_.set_synchronous_mode(true); |
- host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(), |
- "192.168.0.1", ""); |
- |
- QuicStreamRequest request(factory_.get(), &http_server_properties_); |
- EXPECT_EQ(ERR_IO_PENDING, |
- request.Request(host_port_pair_, privacy_mode_, |
- /*cert_verify_flags=*/0, url_, "POST", net_log_, |
- callback_.callback())); |
- |
- // Verify delay is one RTT and that server supports QUIC. |
- EXPECT_EQ(base::TimeDelta::FromMicroseconds(15), |
- request.GetTimeDelayForWaitingJob()); |
- |
- // Confirm the handshake and verify that the stream is created. |
- crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
- QuicSession::HANDSHAKE_CONFIRMED); |
- |
- EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
- |
- std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); |
- EXPECT_TRUE(stream.get()); |
- EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
- EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
-} |
- |
// Verifies that the QUIC stream factory is initialized correctly. |
TEST_P(QuicStreamFactoryTest, MaybeInitialize) { |
VerifyInitialization(false); |
@@ -4993,8 +4857,7 @@ class QuicStreamFactoryWithDestinationTest |
public ::testing::TestWithParam<PoolingTestParams> { |
protected: |
QuicStreamFactoryWithDestinationTest() |
- : QuicStreamFactoryTestBase(GetParam().version, |
- GetParam().enable_connection_racing), |
+ : QuicStreamFactoryTestBase(GetParam().version), |
destination_type_(GetParam().destination_type), |
hanging_read_(SYNCHRONOUS, ERR_IO_PENDING, 0) {} |