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

Side by Side Diff: net/quic/reliable_quic_stream_test.cc

Issue 849123003: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed extra blank line Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/reliable_quic_stream.cc ('k') | net/quic/test_tools/quic_connection_peer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/reliable_quic_stream.h" 5 #include "net/quic/reliable_quic_stream.h"
6 6
7 #include "net/quic/quic_ack_notifier.h" 7 #include "net/quic/quic_ack_notifier.h"
8 #include "net/quic/quic_connection.h" 8 #include "net/quic/quic_connection.h"
9 #include "net/quic/quic_utils.h" 9 #include "net/quic/quic_utils.h"
10 #include "net/quic/quic_write_blocked_list.h" 10 #include "net/quic/quic_write_blocked_list.h"
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 .WillOnce(Return(QuicConsumedData(0, false))); 468 .WillOnce(Return(QuicConsumedData(0, false)));
469 stream_->OnCanWrite(); 469 stream_->OnCanWrite();
470 470
471 EXPECT_CALL(*session_, 471 EXPECT_CALL(*session_,
472 WritevData(kHeadersStreamId, _, _, _, _, proxy_delegate.get())) 472 WritevData(kHeadersStreamId, _, _, _, _, proxy_delegate.get()))
473 .WillOnce(Return(QuicConsumedData(kLastWriteSize, false))); 473 .WillOnce(Return(QuicConsumedData(kLastWriteSize, false)));
474 stream_->OnCanWrite(); 474 stream_->OnCanWrite();
475 475
476 // There were two writes, so OnAckNotification is not propagated 476 // There were two writes, so OnAckNotification is not propagated
477 // until the third Ack arrives. 477 // until the third Ack arrives.
478 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_); 478 proxy_delegate->OnAckNotification(3, 4, zero_);
479 proxy_delegate->OnAckNotification(10, 20, 30, 40, zero_); 479 proxy_delegate->OnAckNotification(30, 40, zero_);
480 480
481 // The arguments to delegate->OnAckNotification are the sum of the 481 // The arguments to delegate->OnAckNotification are the sum of the
482 // arguments to proxy_delegate OnAckNotification calls. 482 // arguments to proxy_delegate OnAckNotification calls.
483 EXPECT_CALL(*delegate.get(), OnAckNotification(111, 222, 333, 444, zero_)); 483 EXPECT_CALL(*delegate.get(), OnAckNotification(333, 444, zero_));
484 proxy_delegate->OnAckNotification(100, 200, 300, 400, zero_); 484 proxy_delegate->OnAckNotification(300, 400, zero_);
485 } 485 }
486 486
487 // Verify delegate behavior when packets are acked before the 487 // Verify delegate behavior when packets are acked before the
488 // WritevData call that sends out the last byte. 488 // WritevData call that sends out the last byte.
489 TEST_F(ReliableQuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) { 489 TEST_F(ReliableQuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) {
490 Initialize(kShouldProcessData); 490 Initialize(kShouldProcessData);
491 491
492 scoped_refptr<MockAckNotifierDelegate> delegate( 492 scoped_refptr<MockAckNotifierDelegate> delegate(
493 new StrictMock<MockAckNotifierDelegate>); 493 new StrictMock<MockAckNotifierDelegate>);
494 494
495 const int kDataSize = 16 * 1024; 495 const int kDataSize = 16 * 1024;
496 const string kData(kDataSize, 'a'); 496 const string kData(kDataSize, 'a');
497 497
498 const int kInitialWriteSize = 100; 498 const int kInitialWriteSize = 100;
499 499
500 // Set a large flow control send window so this doesn't interfere with test. 500 // Set a large flow control send window so this doesn't interfere with test.
501 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 501 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
502 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 502 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
503 503
504 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; 504 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
505 505
506 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)) 506 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _))
507 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor( 507 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor(
508 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 508 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
509 Return(QuicConsumedData(kInitialWriteSize, false)))); 509 Return(QuicConsumedData(kInitialWriteSize, false))));
510 stream_->WriteOrBufferData(kData, false, delegate.get()); 510 stream_->WriteOrBufferData(kData, false, delegate.get());
511 EXPECT_TRUE(HasWriteBlockedStreams()); 511 EXPECT_TRUE(HasWriteBlockedStreams());
512 512
513 // Handle the ack of the first write. 513 // Handle the ack of the first write.
514 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_); 514 proxy_delegate->OnAckNotification(3, 4, zero_);
515 proxy_delegate = nullptr; 515 proxy_delegate = nullptr;
516 516
517 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)).WillOnce( 517 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)).WillOnce(
518 DoAll(WithArgs<5>(Invoke(CreateFunctor( 518 DoAll(WithArgs<5>(Invoke(CreateFunctor(
519 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 519 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
520 Return(QuicConsumedData(kDataSize - kInitialWriteSize, false)))); 520 Return(QuicConsumedData(kDataSize - kInitialWriteSize, false))));
521 stream_->OnCanWrite(); 521 stream_->OnCanWrite();
522 522
523 // Handle the ack for the second write. 523 // Handle the ack for the second write.
524 EXPECT_CALL(*delegate.get(), OnAckNotification(101, 202, 303, 404, zero_)); 524 EXPECT_CALL(*delegate.get(), OnAckNotification(303, 404, zero_));
525 proxy_delegate->OnAckNotification(100, 200, 300, 400, zero_); 525 proxy_delegate->OnAckNotification(300, 400, zero_);
526 } 526 }
527 527
528 // Verify delegate behavior when WriteOrBufferData does not buffer. 528 // Verify delegate behavior when WriteOrBufferData does not buffer.
529 TEST_F(ReliableQuicStreamTest, WriteAndBufferDataWithAckNotiferNoBuffer) { 529 TEST_F(ReliableQuicStreamTest, WriteAndBufferDataWithAckNotiferNoBuffer) {
530 Initialize(kShouldProcessData); 530 Initialize(kShouldProcessData);
531 531
532 scoped_refptr<MockAckNotifierDelegate> delegate( 532 scoped_refptr<MockAckNotifierDelegate> delegate(
533 new StrictMock<MockAckNotifierDelegate>); 533 new StrictMock<MockAckNotifierDelegate>);
534 534
535 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; 535 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
536 536
537 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)) 537 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _))
538 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor( 538 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor(
539 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 539 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
540 Return(QuicConsumedData(kDataLen, true)))); 540 Return(QuicConsumedData(kDataLen, true))));
541 stream_->WriteOrBufferData(kData1, true, delegate.get()); 541 stream_->WriteOrBufferData(kData1, true, delegate.get());
542 EXPECT_FALSE(HasWriteBlockedStreams()); 542 EXPECT_FALSE(HasWriteBlockedStreams());
543 543
544 // Handle the ack. 544 // Handle the ack.
545 EXPECT_CALL(*delegate.get(), OnAckNotification(1, 2, 3, 4, zero_)); 545 EXPECT_CALL(*delegate.get(), OnAckNotification(3, 4, zero_));
546 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_); 546 proxy_delegate->OnAckNotification(3, 4, zero_);
547 } 547 }
548 548
549 // Verify delegate behavior when WriteOrBufferData buffers all the data. 549 // Verify delegate behavior when WriteOrBufferData buffers all the data.
550 TEST_F(ReliableQuicStreamTest, BufferOnWriteAndBufferDataWithAckNotifer) { 550 TEST_F(ReliableQuicStreamTest, BufferOnWriteAndBufferDataWithAckNotifer) {
551 Initialize(kShouldProcessData); 551 Initialize(kShouldProcessData);
552 552
553 scoped_refptr<MockAckNotifierDelegate> delegate( 553 scoped_refptr<MockAckNotifierDelegate> delegate(
554 new StrictMock<MockAckNotifierDelegate>); 554 new StrictMock<MockAckNotifierDelegate>);
555 555
556 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; 556 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
557 557
558 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)) 558 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _))
559 .WillOnce(Return(QuicConsumedData(0, false))); 559 .WillOnce(Return(QuicConsumedData(0, false)));
560 stream_->WriteOrBufferData(kData1, true, delegate.get()); 560 stream_->WriteOrBufferData(kData1, true, delegate.get());
561 EXPECT_TRUE(HasWriteBlockedStreams()); 561 EXPECT_TRUE(HasWriteBlockedStreams());
562 562
563 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)) 563 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _))
564 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor( 564 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor(
565 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 565 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
566 Return(QuicConsumedData(kDataLen, true)))); 566 Return(QuicConsumedData(kDataLen, true))));
567 stream_->OnCanWrite(); 567 stream_->OnCanWrite();
568 568
569 // Handle the ack. 569 // Handle the ack.
570 EXPECT_CALL(*delegate.get(), OnAckNotification(1, 2, 3, 4, zero_)); 570 EXPECT_CALL(*delegate.get(), OnAckNotification(3, 4, zero_));
571 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_); 571 proxy_delegate->OnAckNotification(3, 4, zero_);
572 } 572 }
573 573
574 // Verify delegate behavior when WriteOrBufferData when the FIN is 574 // Verify delegate behavior when WriteOrBufferData when the FIN is
575 // sent out in a different packet. 575 // sent out in a different packet.
576 TEST_F(ReliableQuicStreamTest, WriteAndBufferDataWithAckNotiferOnlyFinRemains) { 576 TEST_F(ReliableQuicStreamTest, WriteAndBufferDataWithAckNotiferOnlyFinRemains) {
577 Initialize(kShouldProcessData); 577 Initialize(kShouldProcessData);
578 578
579 scoped_refptr<MockAckNotifierDelegate> delegate( 579 scoped_refptr<MockAckNotifierDelegate> delegate(
580 new StrictMock<MockAckNotifierDelegate>); 580 new StrictMock<MockAckNotifierDelegate>);
581 581
582 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; 582 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
583 583
584 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)) 584 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _))
585 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor( 585 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor(
586 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 586 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
587 Return(QuicConsumedData(kDataLen, false)))); 587 Return(QuicConsumedData(kDataLen, false))));
588 stream_->WriteOrBufferData(kData1, true, delegate.get()); 588 stream_->WriteOrBufferData(kData1, true, delegate.get());
589 EXPECT_TRUE(HasWriteBlockedStreams()); 589 EXPECT_TRUE(HasWriteBlockedStreams());
590 590
591 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)) 591 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _))
592 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor( 592 .WillOnce(DoAll(WithArgs<5>(Invoke(CreateFunctor(
593 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 593 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
594 Return(QuicConsumedData(0, true)))); 594 Return(QuicConsumedData(0, true))));
595 stream_->OnCanWrite(); 595 stream_->OnCanWrite();
596 596
597 // Handle the acks. 597 // Handle the acks.
598 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_); 598 proxy_delegate->OnAckNotification(3, 4, zero_);
599 EXPECT_CALL(*delegate.get(), OnAckNotification(11, 22, 33, 44, zero_)); 599 EXPECT_CALL(*delegate.get(), OnAckNotification(33, 44, zero_));
600 proxy_delegate->OnAckNotification(10, 20, 30, 40, zero_); 600 proxy_delegate->OnAckNotification(30, 40, zero_);
601 } 601 }
602 602
603 // Verify that when we receive a packet which violates flow control (i.e. sends 603 // Verify that when we receive a packet which violates flow control (i.e. sends
604 // too much data on the stream) that the stream sequencer never sees this frame, 604 // too much data on the stream) that the stream sequencer never sees this frame,
605 // as we check for violation and close the connection early. 605 // as we check for violation and close the connection early.
606 TEST_F(ReliableQuicStreamTest, 606 TEST_F(ReliableQuicStreamTest,
607 StreamSequencerNeverSeesPacketsViolatingFlowControl) { 607 StreamSequencerNeverSeesPacketsViolatingFlowControl) {
608 Initialize(kShouldProcessData); 608 Initialize(kShouldProcessData);
609 609
610 // Receive a stream frame that violates flow control: the byte offset is 610 // Receive a stream frame that violates flow control: the byte offset is
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 642
643 EXPECT_FALSE(stream_->HasFinalReceivedByteOffset()); 643 EXPECT_FALSE(stream_->HasFinalReceivedByteOffset());
644 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 1234); 644 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 1234);
645 stream_->OnStreamReset(rst_frame); 645 stream_->OnStreamReset(rst_frame);
646 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset()); 646 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset());
647 } 647 }
648 648
649 } // namespace 649 } // namespace
650 } // namespace test 650 } // namespace test
651 } // namespace net 651 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/reliable_quic_stream.cc ('k') | net/quic/test_tools/quic_connection_peer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698