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

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

Issue 2854443003: Cancel pending stream requests as soon as a QUIC session is closed (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698