| 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();
|
|
|
|
|