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

Side by Side 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, 7 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_chromium_client_session.cc ('k') | no next file » | 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_chromium_client_session.h" 5 #include "net/quic/chromium/quic_chromium_client_session.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/rand_util.h" 10 #include "base/rand_util.h"
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 // Close a stream and ensure that no new stream is created. 311 // Close a stream and ensure that no new stream is created.
312 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); 312 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0);
313 session_->OnRstStream(rst); 313 session_->OnRstStream(rst);
314 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); 314 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams());
315 315
316 quic_data.Resume(); 316 quic_data.Resume();
317 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 317 EXPECT_TRUE(quic_data.AllReadDataConsumed());
318 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 318 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
319 } 319 }
320 320
321 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) {
322 MockQuicData quic_data;
323 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
324 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
325 quic_data.AddSocketDataToFactory(&socket_factory_);
326
327 Initialize();
328 CompleteCryptoHandshake();
329
330 // Pump the message loop to read the connection close packet.
331 base::RunLoop().RunUntilIdle();
332
333 // Request a stream and verify that it failed.
334 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
335 session_->CreateStreamRequest();
336 TestCompletionCallback callback;
337 ASSERT_EQ(ERR_CONNECTION_CLOSED,
338 stream_request->StartRequest(callback.callback()));
339
340 EXPECT_TRUE(quic_data.AllReadDataConsumed());
341 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
342 }
343
344 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseWithPendingStreamRequest) {
345 MockQuicData quic_data;
346 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
347 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
348 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
349 quic_data.AddSocketDataToFactory(&socket_factory_);
350
351 Initialize();
352 CompleteCryptoHandshake();
353
354 // Open the maximum number of streams so that a subsequent request
355 // can not proceed immediately.
356 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
357 for (size_t i = 0; i < kMaxOpenStreams; i++) {
358 session_->CreateOutgoingDynamicStream(kDefaultPriority);
359 }
360 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
361
362 // Request a stream and verify that it's pending.
363 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
364 session_->CreateStreamRequest();
365 TestCompletionCallback callback;
366 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
367
368 // Close the connection and verify that the StreamRequest completes with
369 // an error.
370 quic_data.Resume();
371 base::RunLoop().RunUntilIdle();
372
373 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
374
375 EXPECT_TRUE(quic_data.AllReadDataConsumed());
376 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
377 }
378
321 TEST_P(QuicChromiumClientSessionTest, MaxNumStreams) { 379 TEST_P(QuicChromiumClientSessionTest, MaxNumStreams) {
322 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 380 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
323 std::unique_ptr<QuicEncryptedPacket> settings_packet( 381 std::unique_ptr<QuicEncryptedPacket> settings_packet(
324 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 382 client_maker_.MakeInitialSettingsPacket(1, nullptr));
325 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 383 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
326 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); 384 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT));
327 MockWrite writes[] = { 385 MockWrite writes[] = {
328 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), 386 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1),
329 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; 387 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)};
330 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 388 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after
1014 1072
1015 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); 1073 EXPECT_TRUE(socket_data_->AllReadDataConsumed());
1016 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); 1074 EXPECT_TRUE(socket_data_->AllWriteDataConsumed());
1017 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); 1075 EXPECT_TRUE(new_socket_data.AllReadDataConsumed());
1018 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); 1076 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed());
1019 } 1077 }
1020 1078
1021 } // namespace 1079 } // namespace
1022 } // namespace test 1080 } // namespace test
1023 } // namespace net 1081 } // namespace net
OLDNEW
« 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