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

Unified Diff: net/quic/chromium/quic_stream_factory_test.cc

Issue 2120703003: QUIC - Race Cert Verification with host resolution if certs are (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix for buildbot failure. Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/chromium/quic_stream_factory.cc ('k') | net/quic/core/crypto/proof_verifier.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 80831d8b4a2b08ab5f25f04f471f8a4074cc187b..0528ca2c805cfe05f7cd8dd88f97171d5197509c 100644
--- a/net/quic/chromium/quic_stream_factory_test.cc
+++ b/net/quic/chromium/quic_stream_factory_test.cc
@@ -322,16 +322,16 @@ class QuicStreamFactoryTestBase {
migrate_sessions_on_network_change_(false),
migrate_sessions_early_(false),
allow_server_migration_(false),
- force_hol_blocking_(false) {
+ force_hol_blocking_(false),
+ race_cert_verification_(false) {
clock_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
}
~QuicStreamFactoryTestBase() {
// If |factory_| was initialized, then it took over ownership of |clock_|.
// If |factory_| was not initialized, then |clock_| needs to be destroyed.
- if (!factory_) {
+ if (!factory_)
delete clock_;
- }
}
void Initialize() {
@@ -355,7 +355,8 @@ class QuicStreamFactoryTestBase {
disable_quic_on_timeout_with_open_streams_,
idle_connection_timeout_seconds_, migrate_sessions_on_network_change_,
migrate_sessions_early_, allow_server_migration_, force_hol_blocking_,
- QuicTagVector(), /*enable_token_binding*/ false));
+ race_cert_verification_, 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());
@@ -380,6 +381,11 @@ class QuicStreamFactoryTestBase {
return QuicStreamFactoryPeer::HasActiveSession(factory_.get(), server_id);
}
+ bool HasActiveCertVerifierJob(const QuicServerId& server_id) {
+ return QuicStreamFactoryPeer::HasActiveCertVerifierJob(factory_.get(),
+ server_id);
+ }
+
QuicChromiumClientSession* GetActiveSession(
const HostPortPair& host_port_pair) {
QuicServerId server_id(host_port_pair, PRIVACY_MODE_DISABLED);
@@ -549,6 +555,7 @@ class QuicStreamFactoryTestBase {
bool migrate_sessions_early_;
bool allow_server_migration_;
bool force_hol_blocking_;
+ bool race_cert_verification_;
};
class QuicStreamFactoryTest : public QuicStreamFactoryTestBase,
@@ -4239,6 +4246,63 @@ TEST_P(QuicStreamFactoryTest, MaybeInitialize) {
EXPECT_EQ(test_cert2, cached2->certs()[0]);
}
+TEST_P(QuicStreamFactoryTest, StartCertVerifyJob) {
+ Initialize();
+
+ MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
+ SequencedSocketData socket_data(reads, arraysize(reads), nullptr, 0);
+ socket_factory_.AddSocketDataProvider(&socket_data);
+
+ // Save current state of |race_cert_verification|.
+ bool race_cert_verification =
+ QuicStreamFactoryPeer::GetRaceCertVerification(factory_.get());
+
+ // Load server config.
+ HostPortPair host_port_pair(kDefaultServerHostName, kDefaultServerPort);
+ QuicServerId quic_server_id(host_port_pair_, privacy_mode_);
+ QuicStreamFactoryPeer::CacheDummyServerConfig(factory_.get(), quic_server_id);
+
+ QuicStreamFactoryPeer::SetRaceCertVerification(factory_.get(), true);
+ EXPECT_FALSE(HasActiveCertVerifierJob(quic_server_id));
+
+ // Start CertVerifyJob.
+ QuicAsyncStatus status = QuicStreamFactoryPeer::StartCertVerifyJob(
+ factory_.get(), quic_server_id, /*cert_verify_flags=*/0, net_log_);
+ if (status == QUIC_PENDING) {
+ // Verify CertVerifierJob has started.
+ EXPECT_TRUE(HasActiveCertVerifierJob(quic_server_id));
+
+ while (HasActiveCertVerifierJob(quic_server_id)) {
+ base::RunLoop().RunUntilIdle();
+ }
+ }
+ // Verify CertVerifierJob has finished.
+ EXPECT_FALSE(HasActiveCertVerifierJob(quic_server_id));
+
+ // Start a QUIC request.
+ QuicStreamRequest request(factory_.get());
+ EXPECT_EQ(ERR_IO_PENDING,
+ request.Request(host_port_pair_, privacy_mode_,
+ /*cert_verify_flags=*/0, url_, "GET", net_log_,
+ callback_.callback()));
+
+ EXPECT_EQ(OK, callback_.WaitForResult());
+
+ std::unique_ptr<QuicHttpStream> stream = request.CreateStream();
+ EXPECT_TRUE(stream.get());
+
+ // Restore |race_cert_verification|.
+ QuicStreamFactoryPeer::SetRaceCertVerification(factory_.get(),
+ race_cert_verification);
+
+ EXPECT_TRUE(socket_data.AllReadDataConsumed());
+ EXPECT_TRUE(socket_data.AllWriteDataConsumed());
+
+ // Verify there are no outstanding CertVerifierJobs after request has
+ // finished.
+ EXPECT_FALSE(HasActiveCertVerifierJob(quic_server_id));
+}
+
TEST_P(QuicStreamFactoryTest, QuicDoingZeroRTT) {
Initialize();
« no previous file with comments | « net/quic/chromium/quic_stream_factory.cc ('k') | net/quic/core/crypto/proof_verifier.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698