| Index: net/quic/chromium/quic_chromium_client_session_test.cc
|
| diff --git a/net/quic/chromium/quic_chromium_client_session_test.cc b/net/quic/chromium/quic_chromium_client_session_test.cc
|
| index ffae007acabad7d72db61bafc0c80285757dfc2c..3d85ddd620beefd2d2fa8e524bafa33dc2856f1c 100644
|
| --- a/net/quic/chromium/quic_chromium_client_session_test.cc
|
| +++ b/net/quic/chromium/quic_chromium_client_session_test.cc
|
| @@ -318,6 +318,64 @@ TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) {
|
| EXPECT_TRUE(quic_data.AllWriteDataConsumed());
|
| }
|
|
|
| +TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) {
|
| + MockQuicData quic_data;
|
| + quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
|
| + quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
|
| + quic_data.AddSocketDataToFactory(&socket_factory_);
|
| +
|
| + Initialize();
|
| + CompleteCryptoHandshake();
|
| +
|
| + // Pump the message loop to read the connection close packet.
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + // Request a stream and verify that it failed.
|
| + std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
|
| + session_->CreateStreamRequest();
|
| + TestCompletionCallback callback;
|
| + ASSERT_EQ(ERR_CONNECTION_CLOSED,
|
| + stream_request->StartRequest(callback.callback()));
|
| +
|
| + EXPECT_TRUE(quic_data.AllReadDataConsumed());
|
| + EXPECT_TRUE(quic_data.AllWriteDataConsumed());
|
| +}
|
| +
|
| +TEST_P(QuicChromiumClientSessionTest, ConnectionCloseWithPendingStreamRequest) {
|
| + MockQuicData quic_data;
|
| + quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
|
| + quic_data.AddRead(ASYNC, ERR_IO_PENDING);
|
| + quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
|
| + quic_data.AddSocketDataToFactory(&socket_factory_);
|
| +
|
| + Initialize();
|
| + CompleteCryptoHandshake();
|
| +
|
| + // Open the maximum number of streams so that a subsequent request
|
| + // can not proceed immediately.
|
| + const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
|
| + for (size_t i = 0; i < kMaxOpenStreams; i++) {
|
| + session_->CreateOutgoingDynamicStream(kDefaultPriority);
|
| + }
|
| + EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
|
| +
|
| + // Request a stream and verify that it's pending.
|
| + std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
|
| + session_->CreateStreamRequest();
|
| + TestCompletionCallback callback;
|
| + ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
|
| +
|
| + // Close the connection and verify that the StreamRequest completes with
|
| + // an error.
|
| + quic_data.Resume();
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
|
| +
|
| + EXPECT_TRUE(quic_data.AllReadDataConsumed());
|
| + EXPECT_TRUE(quic_data.AllWriteDataConsumed());
|
| +}
|
| +
|
| TEST_P(QuicChromiumClientSessionTest, MaxNumStreams) {
|
| MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
|
| std::unique_ptr<QuicEncryptedPacket> settings_packet(
|
|
|