OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |