Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(112)

Side by Side Diff: net/quic/chromium/quic_stream_factory_test.cc

Issue 2820573004: Remove the code to store and load QUIC server configs in the disk cache. (Closed)
Patch Set: Fix Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/chromium/quic_stream_factory_peer.cc ('k') | net/url_request/url_request_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/chromium/quic_stream_factory.h" 5 #include "net/quic/chromium/quic_stream_factory.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <ostream> 8 #include <ostream>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 const int kDefaultServerPort = 443; 94 const int kDefaultServerPort = 443;
95 const char kDefaultUrl[] = "https://www.example.org/"; 95 const char kDefaultUrl[] = "https://www.example.org/";
96 const char kServer2Url[] = "https://mail.example.org/"; 96 const char kServer2Url[] = "https://mail.example.org/";
97 const char kServer3Url[] = "https://docs.example.org/"; 97 const char kServer3Url[] = "https://docs.example.org/";
98 const char kServer4Url[] = "https://images.example.org/"; 98 const char kServer4Url[] = "https://images.example.org/";
99 99
100 // Run QuicStreamFactoryTest instances with all value combinations of version 100 // Run QuicStreamFactoryTest instances with all value combinations of version
101 // and enable_connection_racting. 101 // and enable_connection_racting.
102 struct TestParams { 102 struct TestParams {
103 friend std::ostream& operator<<(std::ostream& os, const TestParams& p) { 103 friend std::ostream& operator<<(std::ostream& os, const TestParams& p) {
104 os << "{ version: " << QuicVersionToString(p.version) 104 os << "{ version: " << QuicVersionToString(p.version) << " }";
105 << ", enable_connection_racing: "
106 << (p.enable_connection_racing ? "true" : "false") << " }";
107 return os; 105 return os;
108 } 106 }
109 107
110 QuicVersion version; 108 QuicVersion version;
111 bool enable_connection_racing;
112 }; 109 };
113 110
114 std::vector<TestParams> GetTestParams() { 111 std::vector<TestParams> GetTestParams() {
115 std::vector<TestParams> params; 112 std::vector<TestParams> params;
116 QuicVersionVector all_supported_versions = AllSupportedVersions(); 113 QuicVersionVector all_supported_versions = AllSupportedVersions();
117 for (const QuicVersion version : all_supported_versions) { 114 for (const auto& version : all_supported_versions)
118 params.push_back(TestParams{version, false}); 115 params.push_back(TestParams{version});
119 params.push_back(TestParams{version, true});
120 }
121 return params; 116 return params;
122 } 117 }
123 118
124 // Run QuicStreamFactoryWithDestinationTest instances with all value 119 // Run QuicStreamFactoryWithDestinationTest instances with all value
125 // combinations of version, enable_connection_racting, and destination_type. 120 // combinations of version, enable_connection_racting, and destination_type.
126 struct PoolingTestParams { 121 struct PoolingTestParams {
127 friend std::ostream& operator<<(std::ostream& os, 122 friend std::ostream& operator<<(std::ostream& os,
128 const PoolingTestParams& p) { 123 const PoolingTestParams& p) {
129 os << "{ version: " << QuicVersionToString(p.version) 124 os << "{ version: " << QuicVersionToString(p.version)
130 << ", enable_connection_racing: "
131 << (p.enable_connection_racing ? "true" : "false")
132 << ", destination_type: "; 125 << ", destination_type: ";
133 switch (p.destination_type) { 126 switch (p.destination_type) {
134 case SAME_AS_FIRST: 127 case SAME_AS_FIRST:
135 os << "SAME_AS_FIRST"; 128 os << "SAME_AS_FIRST";
136 break; 129 break;
137 case SAME_AS_SECOND: 130 case SAME_AS_SECOND:
138 os << "SAME_AS_SECOND"; 131 os << "SAME_AS_SECOND";
139 break; 132 break;
140 case DIFFERENT: 133 case DIFFERENT:
141 os << "DIFFERENT"; 134 os << "DIFFERENT";
142 break; 135 break;
143 } 136 }
144 os << " }"; 137 os << " }";
145 return os; 138 return os;
146 } 139 }
147 140
148 QuicVersion version; 141 QuicVersion version;
149 bool enable_connection_racing;
150 DestinationType destination_type; 142 DestinationType destination_type;
151 }; 143 };
152 144
153 std::vector<PoolingTestParams> GetPoolingTestParams() { 145 std::vector<PoolingTestParams> GetPoolingTestParams() {
154 std::vector<PoolingTestParams> params; 146 std::vector<PoolingTestParams> params;
155 QuicVersionVector all_supported_versions = AllSupportedVersions(); 147 QuicVersionVector all_supported_versions = AllSupportedVersions();
156 for (const QuicVersion version : all_supported_versions) { 148 for (const QuicVersion version : all_supported_versions) {
157 params.push_back(PoolingTestParams{version, false, SAME_AS_FIRST}); 149 params.push_back(PoolingTestParams{version, SAME_AS_FIRST});
158 params.push_back(PoolingTestParams{version, false, SAME_AS_SECOND}); 150 params.push_back(PoolingTestParams{version, SAME_AS_SECOND});
159 params.push_back(PoolingTestParams{version, false, DIFFERENT}); 151 params.push_back(PoolingTestParams{version, DIFFERENT});
160 params.push_back(PoolingTestParams{version, true, SAME_AS_FIRST});
161 params.push_back(PoolingTestParams{version, true, SAME_AS_SECOND});
162 params.push_back(PoolingTestParams{version, true, DIFFERENT});
163 } 152 }
164 return params; 153 return params;
165 } 154 }
166 155
167 } // namespace 156 } // namespace
168 157
169 class QuicHttpStreamPeer { 158 class QuicHttpStreamPeer {
170 public: 159 public:
171 static QuicChromiumClientSession* GetSession(QuicHttpStream* stream) { 160 static QuicChromiumClientSession* GetSession(QuicHttpStream* stream) {
172 return stream->session_.get(); 161 return stream->session_.get();
173 } 162 }
174 }; 163 };
175 164
176 class MockQuicServerInfo : public QuicServerInfo {
177 public:
178 explicit MockQuicServerInfo(const QuicServerId& server_id)
179 : QuicServerInfo(server_id) {}
180 ~MockQuicServerInfo() override {}
181
182 void Start() override {}
183
184 int WaitForDataReady(const CompletionCallback& callback) override {
185 return ERR_IO_PENDING;
186 }
187
188 void ResetWaitForDataReadyCallback() override {}
189
190 void CancelWaitForDataReadyCallback() override {}
191
192 bool IsDataReady() override { return false; }
193
194 bool IsReadyToPersist() override { return false; }
195
196 void Persist() override {}
197
198 void OnExternalCacheHit() override {}
199
200 size_t EstimateMemoryUsage() const override {
201 NOTREACHED();
202 return 0;
203 }
204 };
205
206 class MockQuicServerInfoFactory : public QuicServerInfoFactory {
207 public:
208 MockQuicServerInfoFactory() {}
209 ~MockQuicServerInfoFactory() override {}
210
211 std::unique_ptr<QuicServerInfo> GetForServer(
212 const QuicServerId& server_id) override {
213 return base::MakeUnique<MockQuicServerInfo>(server_id);
214 }
215 };
216
217 class QuicStreamFactoryTestBase { 165 class QuicStreamFactoryTestBase {
218 protected: 166 protected:
219 QuicStreamFactoryTestBase(QuicVersion version, bool enable_connection_racing) 167 explicit QuicStreamFactoryTestBase(QuicVersion version)
220 : ssl_config_service_(new MockSSLConfigService), 168 : ssl_config_service_(new MockSSLConfigService),
221 random_generator_(0), 169 random_generator_(0),
222 runner_(new TestTaskRunner(&clock_)), 170 runner_(new TestTaskRunner(&clock_)),
223 version_(version), 171 version_(version),
224 client_maker_(version_, 172 client_maker_(version_,
225 0, 173 0,
226 &clock_, 174 &clock_,
227 kDefaultServerHostName, 175 kDefaultServerHostName,
228 Perspective::IS_CLIENT), 176 Perspective::IS_CLIENT),
229 server_maker_(version_, 177 server_maker_(version_,
230 0, 178 0,
231 &clock_, 179 &clock_,
232 kDefaultServerHostName, 180 kDefaultServerHostName,
233 Perspective::IS_SERVER), 181 Perspective::IS_SERVER),
234 cert_verifier_(CertVerifier::CreateDefault()), 182 cert_verifier_(CertVerifier::CreateDefault()),
235 channel_id_service_( 183 channel_id_service_(
236 new ChannelIDService(new DefaultChannelIDStore(nullptr))), 184 new ChannelIDService(new DefaultChannelIDStore(nullptr))),
237 cert_transparency_verifier_(new MultiLogCTVerifier()), 185 cert_transparency_verifier_(new MultiLogCTVerifier()),
238 scoped_mock_network_change_notifier_(nullptr), 186 scoped_mock_network_change_notifier_(nullptr),
239 factory_(nullptr), 187 factory_(nullptr),
240 host_port_pair_(kDefaultServerHostName, kDefaultServerPort), 188 host_port_pair_(kDefaultServerHostName, kDefaultServerPort),
241 url_(kDefaultUrl), 189 url_(kDefaultUrl),
242 url2_(kServer2Url), 190 url2_(kServer2Url),
243 url3_(kServer3Url), 191 url3_(kServer3Url),
244 url4_(kServer4Url), 192 url4_(kServer4Url),
245 privacy_mode_(PRIVACY_MODE_DISABLED), 193 privacy_mode_(PRIVACY_MODE_DISABLED),
246 load_server_info_timeout_srtt_multiplier_(0.0f),
247 enable_connection_racing_(enable_connection_racing),
248 enable_non_blocking_io_(true), 194 enable_non_blocking_io_(true),
249 disable_disk_cache_(false), 195 store_server_configs_in_properties_(false),
250 close_sessions_on_ip_change_(false), 196 close_sessions_on_ip_change_(false),
251 idle_connection_timeout_seconds_(kIdleConnectionTimeoutSeconds), 197 idle_connection_timeout_seconds_(kIdleConnectionTimeoutSeconds),
252 reduced_ping_timeout_seconds_(kPingTimeoutSecs), 198 reduced_ping_timeout_seconds_(kPingTimeoutSecs),
253 packet_reader_yield_after_duration_milliseconds_( 199 packet_reader_yield_after_duration_milliseconds_(
254 kQuicYieldAfterDurationMilliseconds), 200 kQuicYieldAfterDurationMilliseconds),
255 migrate_sessions_on_network_change_(false), 201 migrate_sessions_on_network_change_(false),
256 migrate_sessions_early_(false), 202 migrate_sessions_early_(false),
257 allow_server_migration_(false), 203 allow_server_migration_(false),
258 force_hol_blocking_(false), 204 force_hol_blocking_(false),
259 race_cert_verification_(false), 205 race_cert_verification_(false),
260 estimate_initial_rtt_(false) { 206 estimate_initial_rtt_(false) {
261 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); 207 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
262 } 208 }
263 209
264 void Initialize() { 210 void Initialize() {
265 DCHECK(!factory_); 211 DCHECK(!factory_);
266 factory_.reset(new QuicStreamFactory( 212 factory_.reset(new QuicStreamFactory(
267 net_log_.net_log(), &host_resolver_, ssl_config_service_.get(), 213 net_log_.net_log(), &host_resolver_, ssl_config_service_.get(),
268 &socket_factory_, &http_server_properties_, &test_proxy_delegate_, 214 &socket_factory_, &http_server_properties_, &test_proxy_delegate_,
269 cert_verifier_.get(), &ct_policy_enforcer_, channel_id_service_.get(), 215 cert_verifier_.get(), &ct_policy_enforcer_, channel_id_service_.get(),
270 &transport_security_state_, cert_transparency_verifier_.get(), 216 &transport_security_state_, cert_transparency_verifier_.get(),
271 /*SocketPerformanceWatcherFactory*/ nullptr, 217 /*SocketPerformanceWatcherFactory*/ nullptr,
272 &crypto_client_stream_factory_, &random_generator_, &clock_, 218 &crypto_client_stream_factory_, &random_generator_, &clock_,
273 kDefaultMaxPacketSize, string(), SupportedVersions(version_), 219 kDefaultMaxPacketSize, string(), SupportedVersions(version_),
274 load_server_info_timeout_srtt_multiplier_, enable_connection_racing_, 220 enable_non_blocking_io_, store_server_configs_in_properties_,
275 enable_non_blocking_io_, disable_disk_cache_,
276 /*max_server_configs_stored_in_properties*/ 0,
277 close_sessions_on_ip_change_, 221 close_sessions_on_ip_change_,
278 /*mark_quic_broken_when_network_blackholes*/ false, 222 /*mark_quic_broken_when_network_blackholes*/ false,
279 idle_connection_timeout_seconds_, reduced_ping_timeout_seconds_, 223 idle_connection_timeout_seconds_, reduced_ping_timeout_seconds_,
280 packet_reader_yield_after_duration_milliseconds_, 224 packet_reader_yield_after_duration_milliseconds_,
281 migrate_sessions_on_network_change_, migrate_sessions_early_, 225 migrate_sessions_on_network_change_, migrate_sessions_early_,
282 allow_server_migration_, force_hol_blocking_, race_cert_verification_, 226 allow_server_migration_, force_hol_blocking_, race_cert_verification_,
283 /*do_not_fragment*/ true, estimate_initial_rtt_, QuicTagVector(), 227 /*do_not_fragment*/ true, estimate_initial_rtt_, QuicTagVector(),
284 /*enable_token_binding*/ false)); 228 /*enable_token_binding*/ false));
285 factory_->set_require_confirmation(false); 229 factory_->set_require_confirmation(false);
286 EXPECT_FALSE(factory_->has_quic_server_info_factory());
287 factory_->set_quic_server_info_factory(new MockQuicServerInfoFactory());
288 EXPECT_TRUE(factory_->has_quic_server_info_factory());
289 } 230 }
290 231
291 void InitializeConnectionMigrationTest( 232 void InitializeConnectionMigrationTest(
292 NetworkChangeNotifier::NetworkList connected_networks) { 233 NetworkChangeNotifier::NetworkList connected_networks) {
293 scoped_mock_network_change_notifier_.reset( 234 scoped_mock_network_change_notifier_.reset(
294 new ScopedMockNetworkChangeNotifier()); 235 new ScopedMockNetworkChangeNotifier());
295 MockNetworkChangeNotifier* mock_ncn = 236 MockNetworkChangeNotifier* mock_ncn =
296 scoped_mock_network_change_notifier_->mock_network_change_notifier(); 237 scoped_mock_network_change_notifier_->mock_network_change_notifier();
297 mock_ncn->ForceNetworkHandlesSupported(); 238 mock_ncn->ForceNetworkHandlesSupported();
298 mock_ncn->SetConnectedNetworksList(connected_networks); 239 mock_ncn->SetConnectedNetworksList(connected_networks);
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); 475 EXPECT_TRUE(socket_data2.AllReadDataConsumed());
535 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); 476 EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
536 } 477 }
537 478
538 // Verifies that the QUIC stream factory is initialized correctly. 479 // Verifies that the QUIC stream factory is initialized correctly.
539 // If |proxy_delegate_provides_quic_supported_proxy| is true, then 480 // If |proxy_delegate_provides_quic_supported_proxy| is true, then
540 // ProxyDelegate provides a proxy that supports QUIC at startup. Otherwise, 481 // ProxyDelegate provides a proxy that supports QUIC at startup. Otherwise,
541 // a non proxy server that support alternative services is added to the 482 // a non proxy server that support alternative services is added to the
542 // HttpServerProperties map. 483 // HttpServerProperties map.
543 void VerifyInitialization(bool proxy_delegate_provides_quic_supported_proxy) { 484 void VerifyInitialization(bool proxy_delegate_provides_quic_supported_proxy) {
485 store_server_configs_in_properties_ = true;
544 idle_connection_timeout_seconds_ = 500; 486 idle_connection_timeout_seconds_ = 500;
545 Initialize(); 487 Initialize();
546 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 488 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
547 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 489 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
490 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
491 crypto_client_stream_factory_.set_handshake_mode(
492 MockCryptoClientStream::ZERO_RTT);
548 const QuicConfig* config = QuicStreamFactoryPeer::GetConfig(factory_.get()); 493 const QuicConfig* config = QuicStreamFactoryPeer::GetConfig(factory_.get());
549 EXPECT_EQ(500, config->IdleNetworkTimeout().ToSeconds()); 494 EXPECT_EQ(500, config->IdleNetworkTimeout().ToSeconds());
550 495
551 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get()); 496 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
552 497
553 const AlternativeService alternative_service1( 498 const AlternativeService alternative_service1(
554 kProtoQUIC, host_port_pair_.host(), host_port_pair_.port()); 499 kProtoQUIC, host_port_pair_.host(), host_port_pair_.port());
555 AlternativeServiceInfoVector alternative_service_info_vector; 500 AlternativeServiceInfoVector alternative_service_info_vector;
556 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 501 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
557 alternative_service_info_vector.push_back( 502 alternative_service_info_vector.push_back(
(...skipping 19 matching lines...) Expand all
577 net::ProxyServer::SCHEME_QUIC, 522 net::ProxyServer::SCHEME_QUIC,
578 net::HostPortPair(kServer2HostName, kDefaultServerPort))); 523 net::HostPortPair(kServer2HostName, kDefaultServerPort)));
579 // Verify that the properties of only the first QUIC server are stored in 524 // Verify that the properties of only the first QUIC server are stored in
580 // the HTTP properties map. 525 // the HTTP properties map.
581 EXPECT_EQ(1U, http_server_properties_.alternative_service_map().size()); 526 EXPECT_EQ(1U, http_server_properties_.alternative_service_map().size());
582 } 527 }
583 528
584 http_server_properties_.SetMaxServerConfigsStoredInProperties( 529 http_server_properties_.SetMaxServerConfigsStoredInProperties(
585 kMaxQuicServersToPersist); 530 kMaxQuicServersToPersist);
586 531
587 QuicServerId quic_server_id(kDefaultServerHostName, 80, 532 QuicServerId quic_server_id(kDefaultServerHostName, 443,
588 PRIVACY_MODE_DISABLED); 533 PRIVACY_MODE_DISABLED);
589 QuicServerInfoFactory* quic_server_info_factory = 534 std::unique_ptr<QuicServerInfo> quic_server_info =
590 new PropertiesBasedQuicServerInfoFactory(&http_server_properties_); 535 base::MakeUnique<PropertiesBasedQuicServerInfo>(
591 factory_->set_quic_server_info_factory(quic_server_info_factory); 536 quic_server_id, &http_server_properties_);
592
593 std::unique_ptr<QuicServerInfo> quic_server_info(
594 quic_server_info_factory->GetForServer(quic_server_id));
595 537
596 // Update quic_server_info's server_config and persist it. 538 // Update quic_server_info's server_config and persist it.
597 QuicServerInfo::State* state = quic_server_info->mutable_state(); 539 QuicServerInfo::State* state = quic_server_info->mutable_state();
598 // Minimum SCFG that passes config validation checks. 540 // Minimum SCFG that passes config validation checks.
599 const char scfg[] = {// SCFG 541 const char scfg[] = {// SCFG
600 0x53, 0x43, 0x46, 0x47, 542 0x53, 0x43, 0x46, 0x47,
601 // num entries 543 // num entries
602 0x01, 0x00, 544 0x01, 0x00,
603 // padding 545 // padding
604 0x00, 0x00, 546 0x00, 0x00,
(...skipping 15 matching lines...) Expand all
620 certs.push_back(test_cert); 562 certs.push_back(test_cert);
621 state->server_config = server_config; 563 state->server_config = server_config;
622 state->source_address_token = source_address_token; 564 state->source_address_token = source_address_token;
623 state->cert_sct = cert_sct; 565 state->cert_sct = cert_sct;
624 state->chlo_hash = chlo_hash; 566 state->chlo_hash = chlo_hash;
625 state->server_config_sig = signature; 567 state->server_config_sig = signature;
626 state->certs = certs; 568 state->certs = certs;
627 569
628 quic_server_info->Persist(); 570 quic_server_info->Persist();
629 571
630 QuicServerId quic_server_id2(kServer2HostName, 80, PRIVACY_MODE_DISABLED); 572 QuicServerId quic_server_id2(kServer2HostName, 443, PRIVACY_MODE_DISABLED);
631 std::unique_ptr<QuicServerInfo> quic_server_info2( 573 std::unique_ptr<QuicServerInfo> quic_server_info2 =
632 quic_server_info_factory->GetForServer(quic_server_id2)); 574 base::MakeUnique<PropertiesBasedQuicServerInfo>(
633 575 quic_server_id2, &http_server_properties_);
634 // Update quic_server_info2's server_config and persist it. 576 // Update quic_server_info2's server_config and persist it.
635 QuicServerInfo::State* state2 = quic_server_info2->mutable_state(); 577 QuicServerInfo::State* state2 = quic_server_info2->mutable_state();
636 578
637 // Minimum SCFG that passes config validation checks. 579 // Minimum SCFG that passes config validation checks.
638 const char scfg2[] = {// SCFG 580 const char scfg2[] = {// SCFG
639 0x53, 0x43, 0x46, 0x47, 581 0x53, 0x43, 0x46, 0x47,
640 // num entries 582 // num entries
641 0x01, 0x00, 583 0x01, 0x00,
642 // padding 584 // padding
643 0x00, 0x00, 585 0x00, 0x00,
(...skipping 16 matching lines...) Expand all
660 certs2.push_back(test_cert2); 602 certs2.push_back(test_cert2);
661 state2->server_config = server_config2; 603 state2->server_config = server_config2;
662 state2->source_address_token = source_address_token2; 604 state2->source_address_token = source_address_token2;
663 state2->cert_sct = cert_sct2; 605 state2->cert_sct = cert_sct2;
664 state2->chlo_hash = chlo_hash2; 606 state2->chlo_hash = chlo_hash2;
665 state2->server_config_sig = signature2; 607 state2->server_config_sig = signature2;
666 state2->certs = certs2; 608 state2->certs = certs2;
667 609
668 quic_server_info2->Persist(); 610 quic_server_info2->Persist();
669 611
670 QuicStreamFactoryPeer::MaybeInitialize(factory_.get());
671 EXPECT_TRUE(QuicStreamFactoryPeer::HasInitializedData(factory_.get()));
672
673 // Verify the MRU order is maintained. 612 // Verify the MRU order is maintained.
674 const QuicServerInfoMap& quic_server_info_map = 613 const QuicServerInfoMap& quic_server_info_map =
675 http_server_properties_.quic_server_info_map(); 614 http_server_properties_.quic_server_info_map();
676 EXPECT_EQ(2u, quic_server_info_map.size()); 615 EXPECT_EQ(2u, quic_server_info_map.size());
677 QuicServerInfoMap::const_iterator quic_server_info_map_it = 616 QuicServerInfoMap::const_iterator quic_server_info_map_it =
678 quic_server_info_map.begin(); 617 quic_server_info_map.begin();
679 EXPECT_EQ(quic_server_info_map_it->first, quic_server_id2); 618 EXPECT_EQ(quic_server_info_map_it->first, quic_server_id2);
680 ++quic_server_info_map_it; 619 ++quic_server_info_map_it;
681 EXPECT_EQ(quic_server_info_map_it->first, quic_server_id); 620 EXPECT_EQ(quic_server_info_map_it->first, quic_server_id);
682 621
683 EXPECT_TRUE(QuicStreamFactoryPeer::SupportsQuicAtStartUp(factory_.get(), 622 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
684 host_port_pair_)); 623 "192.168.0.1", "");
624
625 // Create a session and verify that the cached state is loaded.
626 MockQuicData socket_data;
627 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
628 socket_data.AddSocketDataToFactory(&socket_factory_);
629
630 QuicStreamRequest request(factory_.get(), &http_server_properties_);
631 EXPECT_EQ(ERR_IO_PENDING,
632 request.Request(quic_server_id.host_port_pair(), privacy_mode_,
633 /*cert_verify_flags=*/0, url_, "GET", net_log_,
634 callback_.callback()));
635 EXPECT_THAT(callback_.WaitForResult(), IsOk());
636
685 EXPECT_FALSE(QuicStreamFactoryPeer::CryptoConfigCacheIsEmpty( 637 EXPECT_FALSE(QuicStreamFactoryPeer::CryptoConfigCacheIsEmpty(
686 factory_.get(), quic_server_id)); 638 factory_.get(), quic_server_id));
687 QuicCryptoClientConfig* crypto_config = 639 QuicCryptoClientConfig* crypto_config =
688 QuicStreamFactoryPeer::GetCryptoConfig(factory_.get()); 640 QuicStreamFactoryPeer::GetCryptoConfig(factory_.get());
689 QuicCryptoClientConfig::CachedState* cached = 641 QuicCryptoClientConfig::CachedState* cached =
690 crypto_config->LookupOrCreate(quic_server_id); 642 crypto_config->LookupOrCreate(quic_server_id);
691 EXPECT_FALSE(cached->server_config().empty()); 643 EXPECT_FALSE(cached->server_config().empty());
692 EXPECT_TRUE(cached->GetServerConfig()); 644 EXPECT_TRUE(cached->GetServerConfig());
693 EXPECT_EQ(server_config, cached->server_config()); 645 EXPECT_EQ(server_config, cached->server_config());
694 EXPECT_EQ(source_address_token, cached->source_address_token()); 646 EXPECT_EQ(source_address_token, cached->source_address_token());
695 EXPECT_EQ(cert_sct, cached->cert_sct()); 647 EXPECT_EQ(cert_sct, cached->cert_sct());
696 EXPECT_EQ(chlo_hash, cached->chlo_hash()); 648 EXPECT_EQ(chlo_hash, cached->chlo_hash());
697 EXPECT_EQ(signature, cached->signature()); 649 EXPECT_EQ(signature, cached->signature());
698 ASSERT_EQ(1U, cached->certs().size()); 650 ASSERT_EQ(1U, cached->certs().size());
699 EXPECT_EQ(test_cert, cached->certs()[0]); 651 EXPECT_EQ(test_cert, cached->certs()[0]);
700 652
701 EXPECT_TRUE(QuicStreamFactoryPeer::SupportsQuicAtStartUp(factory_.get(), 653 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
702 host_port_pair2)); 654
655 // Create a session and verify that the cached state is loaded.
656 MockQuicData socket_data2;
657 socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
658 socket_data2.AddSocketDataToFactory(&socket_factory_);
659
660 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
661 "192.168.0.2", "");
662
663 QuicStreamRequest request2(factory_.get(), &http_server_properties_);
664 EXPECT_EQ(ERR_IO_PENDING,
665 request2.Request(quic_server_id2.host_port_pair(), privacy_mode_,
666 /*cert_verify_flags=*/0,
667 GURL("https://mail.example.org/"), "GET",
668 net_log_, callback_.callback()));
669 EXPECT_THAT(callback_.WaitForResult(), IsOk());
670
703 EXPECT_FALSE(QuicStreamFactoryPeer::CryptoConfigCacheIsEmpty( 671 EXPECT_FALSE(QuicStreamFactoryPeer::CryptoConfigCacheIsEmpty(
704 factory_.get(), quic_server_id2)); 672 factory_.get(), quic_server_id2));
705 QuicCryptoClientConfig::CachedState* cached2 = 673 QuicCryptoClientConfig::CachedState* cached2 =
706 crypto_config->LookupOrCreate(quic_server_id2); 674 crypto_config->LookupOrCreate(quic_server_id2);
707 EXPECT_FALSE(cached2->server_config().empty()); 675 EXPECT_FALSE(cached2->server_config().empty());
708 EXPECT_TRUE(cached2->GetServerConfig()); 676 EXPECT_TRUE(cached2->GetServerConfig());
709 EXPECT_EQ(server_config2, cached2->server_config()); 677 EXPECT_EQ(server_config2, cached2->server_config());
710 EXPECT_EQ(source_address_token2, cached2->source_address_token()); 678 EXPECT_EQ(source_address_token2, cached2->source_address_token());
711 EXPECT_EQ(cert_sct2, cached2->cert_sct()); 679 EXPECT_EQ(cert_sct2, cached2->cert_sct());
712 EXPECT_EQ(chlo_hash2, cached2->chlo_hash()); 680 EXPECT_EQ(chlo_hash2, cached2->chlo_hash());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 GURL url_; 730 GURL url_;
763 GURL url2_; 731 GURL url2_;
764 GURL url3_; 732 GURL url3_;
765 GURL url4_; 733 GURL url4_;
766 734
767 PrivacyMode privacy_mode_; 735 PrivacyMode privacy_mode_;
768 NetLogWithSource net_log_; 736 NetLogWithSource net_log_;
769 TestCompletionCallback callback_; 737 TestCompletionCallback callback_;
770 738
771 // Variables to configure QuicStreamFactory. 739 // Variables to configure QuicStreamFactory.
772 double load_server_info_timeout_srtt_multiplier_;
773 bool enable_connection_racing_;
774 bool enable_non_blocking_io_; 740 bool enable_non_blocking_io_;
775 bool disable_disk_cache_; 741 bool store_server_configs_in_properties_;
776 bool close_sessions_on_ip_change_; 742 bool close_sessions_on_ip_change_;
777 int idle_connection_timeout_seconds_; 743 int idle_connection_timeout_seconds_;
778 int reduced_ping_timeout_seconds_; 744 int reduced_ping_timeout_seconds_;
779 int packet_reader_yield_after_duration_milliseconds_; 745 int packet_reader_yield_after_duration_milliseconds_;
780 bool migrate_sessions_on_network_change_; 746 bool migrate_sessions_on_network_change_;
781 bool migrate_sessions_early_; 747 bool migrate_sessions_early_;
782 bool allow_server_migration_; 748 bool allow_server_migration_;
783 bool force_hol_blocking_; 749 bool force_hol_blocking_;
784 bool race_cert_verification_; 750 bool race_cert_verification_;
785 bool estimate_initial_rtt_; 751 bool estimate_initial_rtt_;
786 }; 752 };
787 753
788 class QuicStreamFactoryTest : public QuicStreamFactoryTestBase, 754 class QuicStreamFactoryTest : public QuicStreamFactoryTestBase,
789 public ::testing::TestWithParam<TestParams> { 755 public ::testing::TestWithParam<TestParams> {
790 protected: 756 protected:
791 QuicStreamFactoryTest() 757 QuicStreamFactoryTest() : QuicStreamFactoryTestBase(GetParam().version) {}
792 : QuicStreamFactoryTestBase(GetParam().version,
793 GetParam().enable_connection_racing) {}
794 }; 758 };
795 759
796 INSTANTIATE_TEST_CASE_P(Version, 760 INSTANTIATE_TEST_CASE_P(Version,
797 QuicStreamFactoryTest, 761 QuicStreamFactoryTest,
798 ::testing::ValuesIn(GetTestParams())); 762 ::testing::ValuesIn(GetTestParams()));
799 763
800 TEST_P(QuicStreamFactoryTest, Create) { 764 TEST_P(QuicStreamFactoryTest, Create) {
801 Initialize(); 765 Initialize();
802 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 766 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
803 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 767 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
(...skipping 3606 matching lines...) Expand 10 before | Expand all | Expand 10 after
4410 HostPortPair host_port_pair2(r4_host_name, 80); 4374 HostPortPair host_port_pair2(r4_host_name, 80);
4411 QuicServerId server_id2(host_port_pair2, privacy_mode_); 4375 QuicServerId server_id2(host_port_pair2, privacy_mode_);
4412 QuicCryptoClientConfig::CachedState* cached2 = 4376 QuicCryptoClientConfig::CachedState* cached2 =
4413 crypto_config->LookupOrCreate(server_id2); 4377 crypto_config->LookupOrCreate(server_id2);
4414 EXPECT_NE(cached1->source_address_token(), cached2->source_address_token()); 4378 EXPECT_NE(cached1->source_address_token(), cached2->source_address_token());
4415 EXPECT_TRUE(cached2->source_address_token().empty()); 4379 EXPECT_TRUE(cached2->source_address_token().empty());
4416 EXPECT_FALSE(cached2->proof_valid()); 4380 EXPECT_FALSE(cached2->proof_valid());
4417 } 4381 }
4418 } 4382 }
4419 4383
4420 TEST_P(QuicStreamFactoryTest, RacingConnections) { 4384 TEST_P(QuicStreamFactoryTest, EnableNotLoadFromDiskCache) {
4421 disable_disk_cache_ = false;
4422 Initialize(); 4385 Initialize();
4423 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 4386 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
4424 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 4387 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
4425
4426 if (!enable_connection_racing_)
4427 return;
4428
4429 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
4430
4431 MockQuicData socket_data;
4432 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
4433 socket_data.AddSocketDataToFactory(&socket_factory_);
4434
4435 MockQuicData socket_data2;
4436 socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
4437 socket_data2.AddSocketDataToFactory(&socket_factory_);
4438
4439 const AlternativeService alternative_service1(
4440 kProtoQUIC, host_port_pair_.host(), host_port_pair_.port());
4441 AlternativeServiceInfoVector alternative_service_info_vector;
4442 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
4443 alternative_service_info_vector.push_back(
4444 AlternativeServiceInfo(alternative_service1, expiration));
4445
4446 http_server_properties_.SetAlternativeServices(
4447 url::SchemeHostPort(url_), alternative_service_info_vector);
4448
4449 crypto_client_stream_factory_.set_handshake_mode(
4450 MockCryptoClientStream::ZERO_RTT);
4451 host_resolver_.set_synchronous_mode(true);
4452 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
4453 "192.168.0.1", "");
4454
4455 QuicStreamRequest request(factory_.get(), &http_server_properties_);
4456 QuicServerId server_id(host_port_pair_, privacy_mode_);
4457 EXPECT_EQ(ERR_IO_PENDING,
4458 request.Request(host_port_pair_, privacy_mode_,
4459 /*cert_verify_flags=*/0, url_, "GET", net_log_,
4460 callback_.callback()));
4461 EXPECT_EQ(2u, QuicStreamFactoryPeer::GetNumberOfActiveJobs(factory_.get(),
4462 server_id));
4463
4464 runner_->RunNextTask();
4465
4466 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
4467 EXPECT_TRUE(stream.get());
4468 EXPECT_TRUE(socket_data.AllReadDataConsumed());
4469 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
4470 EXPECT_EQ(0u, QuicStreamFactoryPeer::GetNumberOfActiveJobs(factory_.get(),
4471 server_id));
4472 }
4473
4474 TEST_P(QuicStreamFactoryTest, EnableNotLoadFromDiskCache) {
4475 disable_disk_cache_ = true;
4476 Initialize();
4477 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
4478 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
4479 4388
4480 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get()); 4389 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
4481 4390
4482 MockQuicData socket_data; 4391 MockQuicData socket_data;
4483 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); 4392 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
4484 socket_data.AddSocketDataToFactory(&socket_factory_); 4393 socket_data.AddSocketDataToFactory(&socket_factory_);
4485 4394
4486 crypto_client_stream_factory_.set_handshake_mode( 4395 crypto_client_stream_factory_.set_handshake_mode(
4487 MockCryptoClientStream::ZERO_RTT); 4396 MockCryptoClientStream::ZERO_RTT);
4488 host_resolver_.set_synchronous_mode(true); 4397 host_resolver_.set_synchronous_mode(true);
(...skipping 10 matching lines...) Expand all
4499 ASSERT_EQ(0u, runner_->GetPostedTasks().size()); 4408 ASSERT_EQ(0u, runner_->GetPostedTasks().size());
4500 4409
4501 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); 4410 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
4502 EXPECT_TRUE(stream.get()); 4411 EXPECT_TRUE(stream.get());
4503 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 4412 EXPECT_TRUE(socket_data.AllReadDataConsumed());
4504 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 4413 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
4505 } 4414 }
4506 4415
4507 TEST_P(QuicStreamFactoryTest, ReducePingTimeoutOnConnectionTimeOutOpenStreams) { 4416 TEST_P(QuicStreamFactoryTest, ReducePingTimeoutOnConnectionTimeOutOpenStreams) {
4508 reduced_ping_timeout_seconds_ = 10; 4417 reduced_ping_timeout_seconds_ = 10;
4509 disable_disk_cache_ = true;
4510 Initialize(); 4418 Initialize();
4511 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); 4419 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
4512 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 4420 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
4513 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 4421 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
4514 4422
4515 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get()); 4423 QuicStreamFactoryPeer::SetTaskRunner(factory_.get(), runner_.get());
4516 4424
4517 MockQuicData socket_data; 4425 MockQuicData socket_data;
4518 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); 4426 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
4519 socket_data.AddWrite( 4427 socket_data.AddWrite(
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
4591 // QuicStreamFactory::OnSessionClosed() runs. 4499 // QuicStreamFactory::OnSessionClosed() runs.
4592 base::RunLoop run_loop2; 4500 base::RunLoop run_loop2;
4593 run_loop2.RunUntilIdle(); 4501 run_loop2.RunUntilIdle();
4594 4502
4595 EXPECT_TRUE(socket_data.AllReadDataConsumed()); 4503 EXPECT_TRUE(socket_data.AllReadDataConsumed());
4596 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); 4504 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
4597 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); 4505 EXPECT_TRUE(socket_data2.AllReadDataConsumed());
4598 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); 4506 EXPECT_TRUE(socket_data2.AllWriteDataConsumed());
4599 } 4507 }
4600 4508
4601 TEST_P(QuicStreamFactoryTest, DelayTcpRace) {
4602 Initialize();
4603 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
4604 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
4605 MockQuicData socket_data;
4606 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
4607 socket_data.AddWrite(
4608 ConstructSettingsPacket(1, SETTINGS_MAX_HEADER_LIST_SIZE,
4609 kDefaultMaxUncompressedHeaderSize, nullptr));
4610 socket_data.AddSocketDataToFactory(&socket_factory_);
4611
4612 ServerNetworkStats stats1;
4613 stats1.srtt = base::TimeDelta::FromMicroseconds(10);
4614 http_server_properties_.SetServerNetworkStats(url::SchemeHostPort(url_),
4615 stats1);
4616
4617 crypto_client_stream_factory_.set_handshake_mode(
4618 MockCryptoClientStream::COLD_START);
4619 host_resolver_.set_synchronous_mode(true);
4620 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
4621 "192.168.0.1", "");
4622
4623 QuicStreamRequest request(factory_.get(), &http_server_properties_);
4624 EXPECT_EQ(ERR_IO_PENDING,
4625 request.Request(host_port_pair_, privacy_mode_,
4626 /*cert_verify_flags=*/0, url_, "POST", net_log_,
4627 callback_.callback()));
4628
4629 // Verify delay is one RTT and that server supports QUIC.
4630 EXPECT_EQ(base::TimeDelta::FromMicroseconds(15),
4631 request.GetTimeDelayForWaitingJob());
4632
4633 // Confirm the handshake and verify that the stream is created.
4634 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
4635 QuicSession::HANDSHAKE_CONFIRMED);
4636
4637 EXPECT_THAT(callback_.WaitForResult(), IsOk());
4638
4639 std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
4640 EXPECT_TRUE(stream.get());
4641 EXPECT_TRUE(socket_data.AllReadDataConsumed());
4642 EXPECT_TRUE(socket_data.AllWriteDataConsumed());
4643 }
4644
4645 // Verifies that the QUIC stream factory is initialized correctly. 4509 // Verifies that the QUIC stream factory is initialized correctly.
4646 TEST_P(QuicStreamFactoryTest, MaybeInitialize) { 4510 TEST_P(QuicStreamFactoryTest, MaybeInitialize) {
4647 VerifyInitialization(false); 4511 VerifyInitialization(false);
4648 } 4512 }
4649 4513
4650 // Verifies that the alternative proxy server provided by the proxy delegate 4514 // Verifies that the alternative proxy server provided by the proxy delegate
4651 // is added to the list of supported QUIC proxy servers, and the QUIC stream 4515 // is added to the list of supported QUIC proxy servers, and the QUIC stream
4652 // factory is initialized correctly. 4516 // factory is initialized correctly.
4653 TEST_P(QuicStreamFactoryTest, MaybeInitializeAlternativeProxyServer) { 4517 TEST_P(QuicStreamFactoryTest, MaybeInitializeAlternativeProxyServer) {
4654 VerifyInitialization(true); 4518 VerifyInitialization(true);
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
4986 } else { 4850 } else {
4987 EXPECT_FALSE(session->force_hol_blocking()); 4851 EXPECT_FALSE(session->force_hol_blocking());
4988 } 4852 }
4989 } 4853 }
4990 4854
4991 class QuicStreamFactoryWithDestinationTest 4855 class QuicStreamFactoryWithDestinationTest
4992 : public QuicStreamFactoryTestBase, 4856 : public QuicStreamFactoryTestBase,
4993 public ::testing::TestWithParam<PoolingTestParams> { 4857 public ::testing::TestWithParam<PoolingTestParams> {
4994 protected: 4858 protected:
4995 QuicStreamFactoryWithDestinationTest() 4859 QuicStreamFactoryWithDestinationTest()
4996 : QuicStreamFactoryTestBase(GetParam().version, 4860 : QuicStreamFactoryTestBase(GetParam().version),
4997 GetParam().enable_connection_racing),
4998 destination_type_(GetParam().destination_type), 4861 destination_type_(GetParam().destination_type),
4999 hanging_read_(SYNCHRONOUS, ERR_IO_PENDING, 0) {} 4862 hanging_read_(SYNCHRONOUS, ERR_IO_PENDING, 0) {}
5000 4863
5001 HostPortPair GetDestination() { 4864 HostPortPair GetDestination() {
5002 switch (destination_type_) { 4865 switch (destination_type_) {
5003 case SAME_AS_FIRST: 4866 case SAME_AS_FIRST:
5004 return origin1_; 4867 return origin1_;
5005 case SAME_AS_SECOND: 4868 case SAME_AS_SECOND:
5006 return origin2_; 4869 return origin2_;
5007 case DIFFERENT: 4870 case DIFFERENT:
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
5350 // Clear all cached states. 5213 // Clear all cached states.
5351 factory_->ClearCachedStatesInCryptoConfig( 5214 factory_->ClearCachedStatesInCryptoConfig(
5352 base::Callback<bool(const GURL&)>()); 5215 base::Callback<bool(const GURL&)>());
5353 EXPECT_TRUE(test_cases[0].state->certs().empty()); 5216 EXPECT_TRUE(test_cases[0].state->certs().empty());
5354 EXPECT_TRUE(test_cases[1].state->certs().empty()); 5217 EXPECT_TRUE(test_cases[1].state->certs().empty());
5355 EXPECT_TRUE(test_cases[2].state->certs().empty()); 5218 EXPECT_TRUE(test_cases[2].state->certs().empty());
5356 } 5219 }
5357 5220
5358 } // namespace test 5221 } // namespace test
5359 } // namespace net 5222 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_stream_factory_peer.cc ('k') | net/url_request/url_request_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698