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 |