| 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 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 | 150 |
| 151 QuicChromiumPacketWriter* CreateQuicChromiumPacketWriter( | 151 QuicChromiumPacketWriter* CreateQuicChromiumPacketWriter( |
| 152 DatagramClientSocket* socket, | 152 DatagramClientSocket* socket, |
| 153 QuicChromiumClientSession* session) const { | 153 QuicChromiumClientSession* session) const { |
| 154 std::unique_ptr<QuicChromiumPacketWriter> writer( | 154 std::unique_ptr<QuicChromiumPacketWriter> writer( |
| 155 new QuicChromiumPacketWriter(socket)); | 155 new QuicChromiumPacketWriter(socket)); |
| 156 writer->set_delegate(session); | 156 writer->set_delegate(session); |
| 157 return writer.release(); | 157 return writer.release(); |
| 158 } | 158 } |
| 159 | 159 |
| 160 QuicStreamId GetNthClientInitiatedStreamId(int n) { |
| 161 return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(*session_, n); |
| 162 } |
| 163 |
| 164 QuicStreamId GetNthServerInitiatedStreamId(int n) { |
| 165 return QuicSpdySessionPeer::GetNthServerInitiatedStreamId(*session_, n); |
| 166 } |
| 167 |
| 160 QuicCryptoClientConfig crypto_config_; | 168 QuicCryptoClientConfig crypto_config_; |
| 161 TestNetLog net_log_; | 169 TestNetLog net_log_; |
| 162 BoundTestNetLog bound_test_net_log_; | 170 BoundTestNetLog bound_test_net_log_; |
| 163 MockClientSocketFactory socket_factory_; | 171 MockClientSocketFactory socket_factory_; |
| 164 std::unique_ptr<MockRead> default_read_; | 172 std::unique_ptr<MockRead> default_read_; |
| 165 std::unique_ptr<SequencedSocketData> socket_data_; | 173 std::unique_ptr<SequencedSocketData> socket_data_; |
| 166 MockClock clock_; | 174 MockClock clock_; |
| 167 MockRandom random_; | 175 MockRandom random_; |
| 168 QuicChromiumConnectionHelper helper_; | 176 QuicChromiumConnectionHelper helper_; |
| 169 MockAlarmFactory alarm_factory_; | 177 MockAlarmFactory alarm_factory_; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); | 269 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); |
| 262 | 270 |
| 263 quic_data.Resume(); | 271 quic_data.Resume(); |
| 264 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 272 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
| 265 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 273 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
| 266 } | 274 } |
| 267 | 275 |
| 268 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) { | 276 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) { |
| 269 MockQuicData quic_data; | 277 MockQuicData quic_data; |
| 270 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 278 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 271 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, | 279 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 272 QUIC_STREAM_CANCELLED)); | 280 2, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 273 quic_data.AddRead(ASYNC, ERR_IO_PENDING); | 281 quic_data.AddRead(ASYNC, ERR_IO_PENDING); |
| 274 quic_data.AddRead(ASYNC, OK); // EOF | 282 quic_data.AddRead(ASYNC, OK); // EOF |
| 275 quic_data.AddSocketDataToFactory(&socket_factory_); | 283 quic_data.AddSocketDataToFactory(&socket_factory_); |
| 276 | 284 |
| 277 Initialize(); | 285 Initialize(); |
| 278 CompleteCryptoHandshake(); | 286 CompleteCryptoHandshake(); |
| 279 | 287 |
| 280 // Request a stream and cancel it without releasing the stream. | 288 // Request a stream and cancel it without releasing the stream. |
| 281 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = | 289 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = |
| 282 session_->CreateStreamRequest(/*requires_confirmation=*/false); | 290 session_->CreateStreamRequest(/*requires_confirmation=*/false); |
| 283 TestCompletionCallback callback; | 291 TestCompletionCallback callback; |
| 284 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); | 292 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); |
| 285 stream_request.reset(); | 293 stream_request.reset(); |
| 286 | 294 |
| 287 quic_data.Resume(); | 295 quic_data.Resume(); |
| 288 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 296 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
| 289 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 297 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
| 290 } | 298 } |
| 291 | 299 |
| 292 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) { | 300 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) { |
| 293 MockQuicData quic_data; | 301 MockQuicData quic_data; |
| 294 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 302 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 295 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, | 303 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 296 QUIC_RST_ACKNOWLEDGEMENT)); | 304 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT)); |
| 297 quic_data.AddRead(ASYNC, ERR_IO_PENDING); | 305 quic_data.AddRead(ASYNC, ERR_IO_PENDING); |
| 298 quic_data.AddRead(ASYNC, OK); // EOF | 306 quic_data.AddRead(ASYNC, OK); // EOF |
| 299 quic_data.AddSocketDataToFactory(&socket_factory_); | 307 quic_data.AddSocketDataToFactory(&socket_factory_); |
| 300 | 308 |
| 301 Initialize(); | 309 Initialize(); |
| 302 CompleteCryptoHandshake(); | 310 CompleteCryptoHandshake(); |
| 303 | 311 |
| 304 // Open the maximum number of streams so that a subsequent request | 312 // Open the maximum number of streams so that a subsequent request |
| 305 // can not proceed immediately. | 313 // can not proceed immediately. |
| 306 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); | 314 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); |
| 307 for (size_t i = 0; i < kMaxOpenStreams; i++) { | 315 for (size_t i = 0; i < kMaxOpenStreams; i++) { |
| 308 session_->CreateOutgoingDynamicStream(kDefaultPriority); | 316 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 309 } | 317 } |
| 310 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); | 318 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); |
| 311 | 319 |
| 312 // Request a stream and verify that it's pending. | 320 // Request a stream and verify that it's pending. |
| 313 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = | 321 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = |
| 314 session_->CreateStreamRequest(/*requires_confirmation=*/false); | 322 session_->CreateStreamRequest(/*requires_confirmation=*/false); |
| 315 TestCompletionCallback callback; | 323 TestCompletionCallback callback; |
| 316 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); | 324 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); |
| 317 | 325 |
| 318 // Close a stream and ensure the stream request completes. | 326 // Close a stream and ensure the stream request completes. |
| 319 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); | 327 QuicRstStreamFrame rst(GetNthClientInitiatedStreamId(0), |
| 328 QUIC_STREAM_CANCELLED, 0); |
| 320 session_->OnRstStream(rst); | 329 session_->OnRstStream(rst); |
| 321 ASSERT_TRUE(callback.have_result()); | 330 ASSERT_TRUE(callback.have_result()); |
| 322 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 331 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 323 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); | 332 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); |
| 324 | 333 |
| 325 quic_data.Resume(); | 334 quic_data.Resume(); |
| 326 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 335 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
| 327 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 336 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
| 328 } | 337 } |
| 329 | 338 |
| 330 TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) { | 339 TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) { |
| 331 MockQuicData quic_data; | 340 MockQuicData quic_data; |
| 332 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 341 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 333 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, | 342 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 334 QUIC_RST_ACKNOWLEDGEMENT)); | 343 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT)); |
| 335 quic_data.AddRead(ASYNC, ERR_IO_PENDING); | 344 quic_data.AddRead(ASYNC, ERR_IO_PENDING); |
| 336 quic_data.AddRead(ASYNC, OK); // EOF | 345 quic_data.AddRead(ASYNC, OK); // EOF |
| 337 quic_data.AddSocketDataToFactory(&socket_factory_); | 346 quic_data.AddSocketDataToFactory(&socket_factory_); |
| 338 | 347 |
| 339 Initialize(); | 348 Initialize(); |
| 340 CompleteCryptoHandshake(); | 349 CompleteCryptoHandshake(); |
| 341 | 350 |
| 342 // Open the maximum number of streams so that a subsequent request | 351 // Open the maximum number of streams so that a subsequent request |
| 343 // can not proceed immediately. | 352 // can not proceed immediately. |
| 344 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); | 353 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); |
| 345 for (size_t i = 0; i < kMaxOpenStreams; i++) { | 354 for (size_t i = 0; i < kMaxOpenStreams; i++) { |
| 346 session_->CreateOutgoingDynamicStream(kDefaultPriority); | 355 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 347 } | 356 } |
| 348 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); | 357 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); |
| 349 | 358 |
| 350 // Request a stream and verify that it's pending. | 359 // Request a stream and verify that it's pending. |
| 351 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = | 360 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = |
| 352 session_->CreateStreamRequest(/*requires_confirmation=*/false); | 361 session_->CreateStreamRequest(/*requires_confirmation=*/false); |
| 353 TestCompletionCallback callback; | 362 TestCompletionCallback callback; |
| 354 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); | 363 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); |
| 355 | 364 |
| 356 // Cancel the pending stream request. | 365 // Cancel the pending stream request. |
| 357 stream_request.reset(); | 366 stream_request.reset(); |
| 358 | 367 |
| 359 // Close a stream and ensure that no new stream is created. | 368 // Close a stream and ensure that no new stream is created. |
| 360 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); | 369 QuicRstStreamFrame rst(GetNthClientInitiatedStreamId(0), |
| 370 QUIC_STREAM_CANCELLED, 0); |
| 361 session_->OnRstStream(rst); | 371 session_->OnRstStream(rst); |
| 362 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); | 372 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); |
| 363 | 373 |
| 364 quic_data.Resume(); | 374 quic_data.Resume(); |
| 365 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 375 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
| 366 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 376 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
| 367 } | 377 } |
| 368 | 378 |
| 369 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) { | 379 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) { |
| 370 MockQuicData quic_data; | 380 MockQuicData quic_data; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 | 457 |
| 448 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 458 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
| 449 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 459 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
| 450 } | 460 } |
| 451 | 461 |
| 452 TEST_P(QuicChromiumClientSessionTest, MaxNumStreams) { | 462 TEST_P(QuicChromiumClientSessionTest, MaxNumStreams) { |
| 453 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 463 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 454 std::unique_ptr<QuicEncryptedPacket> settings_packet( | 464 std::unique_ptr<QuicEncryptedPacket> settings_packet( |
| 455 client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 465 client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 456 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 466 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 457 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | 467 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT)); |
| 458 MockWrite writes[] = { | 468 MockWrite writes[] = { |
| 459 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), | 469 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), |
| 460 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; | 470 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; |
| 461 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 471 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 462 arraysize(writes))); | 472 arraysize(writes))); |
| 463 | 473 |
| 464 Initialize(); | 474 Initialize(); |
| 465 CompleteCryptoHandshake(); | 475 CompleteCryptoHandshake(); |
| 466 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); | 476 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); |
| 467 | 477 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 486 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); | 496 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); |
| 487 EXPECT_TRUE(session_->CreateOutgoingDynamicStream(kDefaultPriority)); | 497 EXPECT_TRUE(session_->CreateOutgoingDynamicStream(kDefaultPriority)); |
| 488 } | 498 } |
| 489 | 499 |
| 490 TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutNoResponse) { | 500 TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutNoResponse) { |
| 491 base::HistogramTester histogram_tester; | 501 base::HistogramTester histogram_tester; |
| 492 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 502 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 493 std::unique_ptr<QuicEncryptedPacket> settings_packet( | 503 std::unique_ptr<QuicEncryptedPacket> settings_packet( |
| 494 client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 504 client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 495 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 505 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 496 2, true, kServerDataStreamId1, QUIC_PUSH_STREAM_TIMED_OUT)); | 506 2, true, GetNthServerInitiatedStreamId(0), QUIC_PUSH_STREAM_TIMED_OUT)); |
| 497 MockWrite writes[] = { | 507 MockWrite writes[] = { |
| 498 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), | 508 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), |
| 499 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; | 509 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; |
| 500 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 510 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 501 arraysize(writes))); | 511 arraysize(writes))); |
| 502 Initialize(); | 512 Initialize(); |
| 503 | 513 |
| 504 ProofVerifyDetailsChromium details; | 514 ProofVerifyDetailsChromium details; |
| 505 details.cert_verify_result.verified_cert = | 515 details.cert_verify_result.verified_cert = |
| 506 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); | 516 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 507 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); | 517 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 508 | 518 |
| 509 CompleteCryptoHandshake(); | 519 CompleteCryptoHandshake(); |
| 510 session_->OnProofVerifyDetailsAvailable(details); | 520 session_->OnProofVerifyDetailsAvailable(details); |
| 511 | 521 |
| 512 QuicChromiumClientStream* stream = | 522 QuicChromiumClientStream* stream = |
| 513 session_->CreateOutgoingDynamicStream(kDefaultPriority); | 523 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 514 EXPECT_TRUE(stream); | 524 EXPECT_TRUE(stream); |
| 515 | 525 |
| 516 SpdyHeaderBlock promise_headers; | 526 SpdyHeaderBlock promise_headers; |
| 517 promise_headers[":method"] = "GET"; | 527 promise_headers[":method"] = "GET"; |
| 518 promise_headers[":authority"] = "www.example.org"; | 528 promise_headers[":authority"] = "www.example.org"; |
| 519 promise_headers[":scheme"] = "https"; | 529 promise_headers[":scheme"] = "https"; |
| 520 promise_headers[":path"] = "/pushed.jpg"; | 530 promise_headers[":path"] = "/pushed.jpg"; |
| 521 | 531 |
| 522 // Receive a PUSH PROMISE from the server. | 532 // Receive a PUSH PROMISE from the server. |
| 523 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, | 533 EXPECT_TRUE(session_->HandlePromised( |
| 524 promise_headers)); | 534 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers)); |
| 525 | 535 |
| 526 QuicClientPromisedInfo* promised = | 536 QuicClientPromisedInfo* promised = |
| 527 session_->GetPromisedById(kServerDataStreamId1); | 537 session_->GetPromisedById(GetNthServerInitiatedStreamId(0)); |
| 528 EXPECT_TRUE(promised); | 538 EXPECT_TRUE(promised); |
| 529 // Fire alarm to time out the push stream. | 539 // Fire alarm to time out the push stream. |
| 530 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised)); | 540 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised)); |
| 531 EXPECT_FALSE( | 541 EXPECT_FALSE( |
| 532 session_->GetPromisedByUrl("https://www.example.org/pushed.jpg")); | 542 session_->GetPromisedByUrl("https://www.example.org/pushed.jpg")); |
| 533 EXPECT_EQ(0u, | 543 EXPECT_EQ(0u, |
| 534 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); | 544 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); |
| 535 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( | 545 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( |
| 536 session_.get())); | 546 session_.get())); |
| 537 } | 547 } |
| 538 | 548 |
| 539 TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutWithResponse) { | 549 TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutWithResponse) { |
| 540 base::HistogramTester histogram_tester; | 550 base::HistogramTester histogram_tester; |
| 541 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 551 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 542 std::unique_ptr<QuicEncryptedPacket> settings_packet( | 552 std::unique_ptr<QuicEncryptedPacket> settings_packet( |
| 543 client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 553 client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 544 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 554 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 545 2, true, kServerDataStreamId1, QUIC_PUSH_STREAM_TIMED_OUT)); | 555 2, true, GetNthServerInitiatedStreamId(0), QUIC_PUSH_STREAM_TIMED_OUT)); |
| 546 MockWrite writes[] = { | 556 MockWrite writes[] = { |
| 547 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), | 557 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), |
| 548 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; | 558 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; |
| 549 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 559 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 550 arraysize(writes))); | 560 arraysize(writes))); |
| 551 Initialize(); | 561 Initialize(); |
| 552 | 562 |
| 553 ProofVerifyDetailsChromium details; | 563 ProofVerifyDetailsChromium details; |
| 554 details.cert_verify_result.verified_cert = | 564 details.cert_verify_result.verified_cert = |
| 555 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); | 565 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 556 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); | 566 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 557 | 567 |
| 558 CompleteCryptoHandshake(); | 568 CompleteCryptoHandshake(); |
| 559 session_->OnProofVerifyDetailsAvailable(details); | 569 session_->OnProofVerifyDetailsAvailable(details); |
| 560 | 570 |
| 561 QuicChromiumClientStream* stream = | 571 QuicChromiumClientStream* stream = |
| 562 session_->CreateOutgoingDynamicStream(kDefaultPriority); | 572 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 563 EXPECT_TRUE(stream); | 573 EXPECT_TRUE(stream); |
| 564 | 574 |
| 565 SpdyHeaderBlock promise_headers; | 575 SpdyHeaderBlock promise_headers; |
| 566 promise_headers[":method"] = "GET"; | 576 promise_headers[":method"] = "GET"; |
| 567 promise_headers[":authority"] = "www.example.org"; | 577 promise_headers[":authority"] = "www.example.org"; |
| 568 promise_headers[":scheme"] = "https"; | 578 promise_headers[":scheme"] = "https"; |
| 569 promise_headers[":path"] = "/pushed.jpg"; | 579 promise_headers[":path"] = "/pushed.jpg"; |
| 570 | 580 |
| 571 session_->GetOrCreateStream(kServerDataStreamId1); | 581 session_->GetOrCreateStream(GetNthServerInitiatedStreamId(0)); |
| 572 // Receive a PUSH PROMISE from the server. | 582 // Receive a PUSH PROMISE from the server. |
| 573 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, | 583 EXPECT_TRUE(session_->HandlePromised( |
| 574 promise_headers)); | 584 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers)); |
| 575 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock()); | 585 session_->OnInitialHeadersComplete(GetNthServerInitiatedStreamId(0), |
| 586 SpdyHeaderBlock()); |
| 576 // Read data on the pushed stream. | 587 // Read data on the pushed stream. |
| 577 QuicStreamFrame data(kServerDataStreamId1, false, 0, QuicStringPiece("SP")); | 588 QuicStreamFrame data(GetNthServerInitiatedStreamId(0), false, 0, |
| 589 QuicStringPiece("SP")); |
| 578 session_->OnStreamFrame(data); | 590 session_->OnStreamFrame(data); |
| 579 | 591 |
| 580 QuicClientPromisedInfo* promised = | 592 QuicClientPromisedInfo* promised = |
| 581 session_->GetPromisedById(kServerDataStreamId1); | 593 session_->GetPromisedById(GetNthServerInitiatedStreamId(0)); |
| 582 EXPECT_TRUE(promised); | 594 EXPECT_TRUE(promised); |
| 583 // Fire alarm to time out the push stream. | 595 // Fire alarm to time out the push stream. |
| 584 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised)); | 596 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised)); |
| 585 EXPECT_EQ(2u, | 597 EXPECT_EQ(2u, |
| 586 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); | 598 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); |
| 587 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( | 599 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( |
| 588 session_.get())); | 600 session_.get())); |
| 589 } | 601 } |
| 590 | 602 |
| 591 TEST_P(QuicChromiumClientSessionTest, CancelPushWhenPendingValidation) { | 603 TEST_P(QuicChromiumClientSessionTest, CancelPushWhenPendingValidation) { |
| 592 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 604 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 593 std::unique_ptr<QuicEncryptedPacket> settings_packet( | 605 std::unique_ptr<QuicEncryptedPacket> settings_packet( |
| 594 client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 606 client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 595 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 607 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 596 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | 608 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT)); |
| 597 | 609 |
| 598 MockWrite writes[] = { | 610 MockWrite writes[] = { |
| 599 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), | 611 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), |
| 600 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; | 612 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; |
| 601 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 613 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 602 arraysize(writes))); | 614 arraysize(writes))); |
| 603 Initialize(); | 615 Initialize(); |
| 604 | 616 |
| 605 ProofVerifyDetailsChromium details; | 617 ProofVerifyDetailsChromium details; |
| 606 details.cert_verify_result.verified_cert = | 618 details.cert_verify_result.verified_cert = |
| 607 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); | 619 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 608 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); | 620 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 609 | 621 |
| 610 CompleteCryptoHandshake(); | 622 CompleteCryptoHandshake(); |
| 611 session_->OnProofVerifyDetailsAvailable(details); | 623 session_->OnProofVerifyDetailsAvailable(details); |
| 612 | 624 |
| 613 QuicChromiumClientStream* stream = | 625 QuicChromiumClientStream* stream = |
| 614 session_->CreateOutgoingDynamicStream(kDefaultPriority); | 626 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 615 EXPECT_TRUE(stream); | 627 EXPECT_TRUE(stream); |
| 616 | 628 |
| 617 SpdyHeaderBlock promise_headers; | 629 SpdyHeaderBlock promise_headers; |
| 618 promise_headers[":method"] = "GET"; | 630 promise_headers[":method"] = "GET"; |
| 619 promise_headers[":authority"] = "www.example.org"; | 631 promise_headers[":authority"] = "www.example.org"; |
| 620 promise_headers[":scheme"] = "https"; | 632 promise_headers[":scheme"] = "https"; |
| 621 promise_headers[":path"] = "/pushed.jpg"; | 633 promise_headers[":path"] = "/pushed.jpg"; |
| 622 | 634 |
| 623 // Receive a PUSH PROMISE from the server. | 635 // Receive a PUSH PROMISE from the server. |
| 624 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, | 636 EXPECT_TRUE(session_->HandlePromised( |
| 625 promise_headers)); | 637 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers)); |
| 626 | 638 |
| 627 QuicClientPromisedInfo* promised = | 639 QuicClientPromisedInfo* promised = |
| 628 session_->GetPromisedById(kServerDataStreamId1); | 640 session_->GetPromisedById(GetNthServerInitiatedStreamId(0)); |
| 629 EXPECT_TRUE(promised); | 641 EXPECT_TRUE(promised); |
| 630 | 642 |
| 631 // Initiate rendezvous. | 643 // Initiate rendezvous. |
| 632 SpdyHeaderBlock client_request = promise_headers.Clone(); | 644 SpdyHeaderBlock client_request = promise_headers.Clone(); |
| 633 TestPushPromiseDelegate delegate(/*match=*/true); | 645 TestPushPromiseDelegate delegate(/*match=*/true); |
| 634 promised->HandleClientRequest(client_request, &delegate); | 646 promised->HandleClientRequest(client_request, &delegate); |
| 635 | 647 |
| 636 // Cancel the push before receiving the response to the pushed request. | 648 // Cancel the push before receiving the response to the pushed request. |
| 637 GURL pushed_url("https://www.example.org/pushed.jpg"); | 649 GURL pushed_url("https://www.example.org/pushed.jpg"); |
| 638 test_push_delegate_.CancelPush(pushed_url); | 650 test_push_delegate_.CancelPush(pushed_url); |
| 639 EXPECT_TRUE(session_->GetPromisedByUrl(pushed_url.spec())); | 651 EXPECT_TRUE(session_->GetPromisedByUrl(pushed_url.spec())); |
| 640 | 652 |
| 641 // Reset the stream now before tear down. | 653 // Reset the stream now before tear down. |
| 642 session_->CloseStream(kClientDataStreamId1); | 654 session_->CloseStream(GetNthClientInitiatedStreamId(0)); |
| 643 } | 655 } |
| 644 | 656 |
| 645 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) { | 657 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) { |
| 646 base::HistogramTester histogram_tester; | 658 base::HistogramTester histogram_tester; |
| 647 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 659 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 648 std::unique_ptr<QuicEncryptedPacket> settings_packet( | 660 std::unique_ptr<QuicEncryptedPacket> settings_packet( |
| 649 client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 661 client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 650 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 662 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 651 2, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); | 663 2, true, GetNthServerInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 652 MockWrite writes[] = { | 664 MockWrite writes[] = { |
| 653 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), | 665 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), |
| 654 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; | 666 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; |
| 655 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 667 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 656 arraysize(writes))); | 668 arraysize(writes))); |
| 657 Initialize(); | 669 Initialize(); |
| 658 | 670 |
| 659 ProofVerifyDetailsChromium details; | 671 ProofVerifyDetailsChromium details; |
| 660 details.cert_verify_result.verified_cert = | 672 details.cert_verify_result.verified_cert = |
| 661 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); | 673 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 662 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); | 674 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 663 | 675 |
| 664 CompleteCryptoHandshake(); | 676 CompleteCryptoHandshake(); |
| 665 session_->OnProofVerifyDetailsAvailable(details); | 677 session_->OnProofVerifyDetailsAvailable(details); |
| 666 | 678 |
| 667 QuicChromiumClientStream* stream = | 679 QuicChromiumClientStream* stream = |
| 668 session_->CreateOutgoingDynamicStream(kDefaultPriority); | 680 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 669 EXPECT_TRUE(stream); | 681 EXPECT_TRUE(stream); |
| 670 | 682 |
| 671 SpdyHeaderBlock promise_headers; | 683 SpdyHeaderBlock promise_headers; |
| 672 promise_headers[":method"] = "GET"; | 684 promise_headers[":method"] = "GET"; |
| 673 promise_headers[":authority"] = "www.example.org"; | 685 promise_headers[":authority"] = "www.example.org"; |
| 674 promise_headers[":scheme"] = "https"; | 686 promise_headers[":scheme"] = "https"; |
| 675 promise_headers[":path"] = "/pushed.jpg"; | 687 promise_headers[":path"] = "/pushed.jpg"; |
| 676 | 688 |
| 677 // Receive a PUSH PROMISE from the server. | 689 // Receive a PUSH PROMISE from the server. |
| 678 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, | 690 EXPECT_TRUE(session_->HandlePromised( |
| 679 promise_headers)); | 691 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers)); |
| 680 | 692 |
| 681 QuicClientPromisedInfo* promised = | 693 QuicClientPromisedInfo* promised = |
| 682 session_->GetPromisedById(kServerDataStreamId1); | 694 session_->GetPromisedById(GetNthServerInitiatedStreamId(0)); |
| 683 EXPECT_TRUE(promised); | 695 EXPECT_TRUE(promised); |
| 684 // Cancel the push before receiving the response to the pushed request. | 696 // Cancel the push before receiving the response to the pushed request. |
| 685 GURL pushed_url("https://www.example.org/pushed.jpg"); | 697 GURL pushed_url("https://www.example.org/pushed.jpg"); |
| 686 test_push_delegate_.CancelPush(pushed_url); | 698 test_push_delegate_.CancelPush(pushed_url); |
| 687 | 699 |
| 688 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); | 700 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); |
| 689 EXPECT_EQ(0u, | 701 EXPECT_EQ(0u, |
| 690 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); | 702 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); |
| 691 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( | 703 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( |
| 692 session_.get())); | 704 session_.get())); |
| 693 } | 705 } |
| 694 | 706 |
| 695 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) { | 707 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) { |
| 696 base::HistogramTester histogram_tester; | 708 base::HistogramTester histogram_tester; |
| 697 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 709 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 698 std::unique_ptr<QuicEncryptedPacket> settings_packet( | 710 std::unique_ptr<QuicEncryptedPacket> settings_packet( |
| 699 client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 711 client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 700 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 712 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 701 2, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); | 713 2, true, GetNthServerInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 702 MockWrite writes[] = { | 714 MockWrite writes[] = { |
| 703 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), | 715 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), |
| 704 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; | 716 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; |
| 705 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 717 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 706 arraysize(writes))); | 718 arraysize(writes))); |
| 707 Initialize(); | 719 Initialize(); |
| 708 | 720 |
| 709 ProofVerifyDetailsChromium details; | 721 ProofVerifyDetailsChromium details; |
| 710 details.cert_verify_result.verified_cert = | 722 details.cert_verify_result.verified_cert = |
| 711 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); | 723 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 712 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); | 724 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 713 | 725 |
| 714 CompleteCryptoHandshake(); | 726 CompleteCryptoHandshake(); |
| 715 session_->OnProofVerifyDetailsAvailable(details); | 727 session_->OnProofVerifyDetailsAvailable(details); |
| 716 | 728 |
| 717 QuicChromiumClientStream* stream = | 729 QuicChromiumClientStream* stream = |
| 718 session_->CreateOutgoingDynamicStream(kDefaultPriority); | 730 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 719 EXPECT_TRUE(stream); | 731 EXPECT_TRUE(stream); |
| 720 | 732 |
| 721 SpdyHeaderBlock promise_headers; | 733 SpdyHeaderBlock promise_headers; |
| 722 promise_headers[":method"] = "GET"; | 734 promise_headers[":method"] = "GET"; |
| 723 promise_headers[":authority"] = "www.example.org"; | 735 promise_headers[":authority"] = "www.example.org"; |
| 724 promise_headers[":scheme"] = "https"; | 736 promise_headers[":scheme"] = "https"; |
| 725 promise_headers[":path"] = "/pushed.jpg"; | 737 promise_headers[":path"] = "/pushed.jpg"; |
| 726 | 738 |
| 727 session_->GetOrCreateStream(kServerDataStreamId1); | 739 session_->GetOrCreateStream(GetNthServerInitiatedStreamId(0)); |
| 728 // Receive a PUSH PROMISE from the server. | 740 // Receive a PUSH PROMISE from the server. |
| 729 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, | 741 EXPECT_TRUE(session_->HandlePromised( |
| 730 promise_headers)); | 742 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers)); |
| 731 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock()); | 743 session_->OnInitialHeadersComplete(GetNthServerInitiatedStreamId(0), |
| 744 SpdyHeaderBlock()); |
| 732 // Read data on the pushed stream. | 745 // Read data on the pushed stream. |
| 733 QuicStreamFrame data(kServerDataStreamId1, false, 0, QuicStringPiece("SP")); | 746 QuicStreamFrame data(GetNthServerInitiatedStreamId(0), false, 0, |
| 747 QuicStringPiece("SP")); |
| 734 session_->OnStreamFrame(data); | 748 session_->OnStreamFrame(data); |
| 735 | 749 |
| 736 QuicClientPromisedInfo* promised = | 750 QuicClientPromisedInfo* promised = |
| 737 session_->GetPromisedById(kServerDataStreamId1); | 751 session_->GetPromisedById(GetNthServerInitiatedStreamId(0)); |
| 738 EXPECT_TRUE(promised); | 752 EXPECT_TRUE(promised); |
| 739 // Cancel the push after receiving data on the push stream. | 753 // Cancel the push after receiving data on the push stream. |
| 740 GURL pushed_url("https://www.example.org/pushed.jpg"); | 754 GURL pushed_url("https://www.example.org/pushed.jpg"); |
| 741 test_push_delegate_.CancelPush(pushed_url); | 755 test_push_delegate_.CancelPush(pushed_url); |
| 742 | 756 |
| 743 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); | 757 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); |
| 744 EXPECT_EQ(2u, | 758 EXPECT_EQ(2u, |
| 745 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); | 759 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); |
| 746 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( | 760 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( |
| 747 session_.get())); | 761 session_.get())); |
| 748 } | 762 } |
| 749 | 763 |
| 750 TEST_P(QuicChromiumClientSessionTest, Priority) { | 764 TEST_P(QuicChromiumClientSessionTest, Priority) { |
| 751 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 765 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 752 std::unique_ptr<QuicEncryptedPacket> settings_packet( | 766 std::unique_ptr<QuicEncryptedPacket> settings_packet( |
| 753 client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 767 client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 754 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 768 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 755 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | 769 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT)); |
| 756 MockWrite writes[] = { | 770 MockWrite writes[] = { |
| 757 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), | 771 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), |
| 758 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; | 772 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; |
| 759 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 773 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 760 arraysize(writes))); | 774 arraysize(writes))); |
| 761 | 775 |
| 762 Initialize(); | 776 Initialize(); |
| 763 CompleteCryptoHandshake(); | 777 CompleteCryptoHandshake(); |
| 764 for (SpdyPriority priority : {kV3HighestPriority, kV3LowestPriority}) { | 778 for (SpdyPriority priority : {kV3HighestPriority, kV3LowestPriority}) { |
| 765 QuicChromiumClientStream* stream = | 779 QuicChromiumClientStream* stream = |
| 766 session_->CreateOutgoingDynamicStream(priority); | 780 session_->CreateOutgoingDynamicStream(priority); |
| 767 EXPECT_EQ(kV3HighestPriority, stream->priority()); | 781 EXPECT_EQ(kV3HighestPriority, stream->priority()); |
| 768 | 782 |
| 769 MockStreamDelegate delegate; | 783 MockStreamDelegate delegate; |
| 770 EXPECT_CALL(delegate, HasSendHeadersComplete()) | 784 EXPECT_CALL(delegate, HasSendHeadersComplete()) |
| 771 .WillOnce(testing::Return(true)); | 785 .WillOnce(testing::Return(true)); |
| 772 stream->SetDelegate(&delegate); | 786 stream->SetDelegate(&delegate); |
| 773 EXPECT_EQ(priority, stream->priority()); | 787 EXPECT_EQ(priority, stream->priority()); |
| 774 stream->SetDelegate(nullptr); | 788 stream->SetDelegate(nullptr); |
| 775 session_->CloseStream(stream->id()); | 789 session_->CloseStream(stream->id()); |
| 776 } | 790 } |
| 777 } | 791 } |
| 778 | 792 |
| 779 TEST_P(QuicChromiumClientSessionTest, MaxNumStreamsViaRequest) { | 793 TEST_P(QuicChromiumClientSessionTest, MaxNumStreamsViaRequest) { |
| 780 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 794 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 781 std::unique_ptr<QuicEncryptedPacket> settings_packet( | 795 std::unique_ptr<QuicEncryptedPacket> settings_packet( |
| 782 client_maker_.MakeInitialSettingsPacket(1, nullptr)); | 796 client_maker_.MakeInitialSettingsPacket(1, nullptr)); |
| 783 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 797 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 784 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | 798 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT)); |
| 785 MockWrite writes[] = { | 799 MockWrite writes[] = { |
| 786 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), | 800 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), |
| 787 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; | 801 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; |
| 788 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 802 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 789 arraysize(writes))); | 803 arraysize(writes))); |
| 790 | 804 |
| 791 Initialize(); | 805 Initialize(); |
| 792 CompleteCryptoHandshake(); | 806 CompleteCryptoHandshake(); |
| 793 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); | 807 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); |
| 794 | 808 |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1145 | 1159 |
| 1146 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); | 1160 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); |
| 1147 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); | 1161 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); |
| 1148 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); | 1162 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); |
| 1149 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); | 1163 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); |
| 1150 } | 1164 } |
| 1151 | 1165 |
| 1152 } // namespace | 1166 } // namespace |
| 1153 } // namespace test | 1167 } // namespace test |
| 1154 } // namespace net | 1168 } // namespace net |
| OLD | NEW |