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

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

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