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

Side by Side Diff: net/quic/core/quic_stream_test.cc

Issue 2963763003: In QUIC, send data is copied to streams rather than frames. Protected by FLAGS_quic_reloadable_flag… (Closed)
Patch Set: Rebase Created 3 years, 5 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/core/quic_stream_send_buffer_test.cc ('k') | net/quic/test_tools/quic_stream_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/core/quic_stream.h" 5 #include "net/quic/core/quic_stream.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "net/quic/core/quic_connection.h" 9 #include "net/quic/core/quic_connection.h"
10 #include "net/quic/core/quic_utils.h" 10 #include "net/quic/core/quic_utils.h"
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 // Receive remaining data and FIN for the request. 710 // Receive remaining data and FIN for the request.
711 QuicStreamFrame frame2(stream_->id(), true, 0, QuicStringPiece("End")); 711 QuicStreamFrame frame2(stream_->id(), true, 0, QuicStringPiece("End"));
712 stream_->OnStreamFrame(frame2); 712 stream_->OnStreamFrame(frame2);
713 EXPECT_TRUE(stream_->fin_received()); 713 EXPECT_TRUE(stream_->fin_received());
714 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset()); 714 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset());
715 } 715 }
716 716
717 TEST_F(QuicStreamTest, StreamWaitsForAcks) { 717 TEST_F(QuicStreamTest, StreamWaitsForAcks) {
718 Initialize(kShouldProcessData); 718 Initialize(kShouldProcessData);
719 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _)) 719 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
720 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 720 .WillRepeatedly(
721 Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
721 // Stream is not waiting for acks initially. 722 // Stream is not waiting for acks initially.
722 EXPECT_FALSE(stream_->IsWaitingForAcks()); 723 EXPECT_FALSE(stream_->IsWaitingForAcks());
724 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
723 725
724 // Send kData1. 726 // Send kData1.
725 stream_->WriteOrBufferData(kData1, false, nullptr); 727 stream_->WriteOrBufferData(kData1, false, nullptr);
728 if (session_->streams_own_data()) {
729 EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
730 } else {
731 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
732 }
726 EXPECT_TRUE(stream_->IsWaitingForAcks()); 733 EXPECT_TRUE(stream_->IsWaitingForAcks());
727 QuicStreamFrame frame1(stream_->id(), false, 0, kData1); 734 QuicStreamFrame frame1(stream_->id(), false, 0, kData1);
728 stream_->OnStreamFrameAcked(frame1, QuicTime::Delta::Zero()); 735 stream_->OnStreamFrameAcked(frame1, QuicTime::Delta::Zero());
729 // Stream is not waiting for acks as all sent data is acked. 736 // Stream is not waiting for acks as all sent data is acked.
730 EXPECT_FALSE(stream_->IsWaitingForAcks()); 737 EXPECT_FALSE(stream_->IsWaitingForAcks());
738 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
731 739
732 // Send kData2. 740 // Send kData2.
733 stream_->WriteOrBufferData(kData2, false, nullptr); 741 stream_->WriteOrBufferData(kData2, false, nullptr);
734 EXPECT_TRUE(stream_->IsWaitingForAcks()); 742 EXPECT_TRUE(stream_->IsWaitingForAcks());
743 if (session_->streams_own_data()) {
744 EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
745 } else {
746 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
747 }
735 // Send FIN. 748 // Send FIN.
736 stream_->WriteOrBufferData("", true, nullptr); 749 stream_->WriteOrBufferData("", true, nullptr);
750 if (session_->streams_own_data()) {
751 // Fin only frame is not stored in send buffer.
752 EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
753 } else {
754 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
755 }
737 756
738 // kData2 is acked. 757 // kData2 is acked.
739 QuicStreamFrame frame2(stream_->id(), false, 9, kData2); 758 QuicStreamFrame frame2(stream_->id(), false, 9, kData2);
740 stream_->OnStreamFrameAcked(frame2, QuicTime::Delta::Zero()); 759 stream_->OnStreamFrameAcked(frame2, QuicTime::Delta::Zero());
741 // Stream is waiting for acks as FIN is not acked. 760 // Stream is waiting for acks as FIN is not acked.
742 EXPECT_TRUE(stream_->IsWaitingForAcks()); 761 EXPECT_TRUE(stream_->IsWaitingForAcks());
762 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
743 763
744 // FIN is acked. 764 // FIN is acked.
745 QuicStreamFrame frame3(stream_->id(), true, 18, ""); 765 QuicStreamFrame frame3(stream_->id(), true, 18, "");
746 stream_->OnStreamFrameAcked(frame3, QuicTime::Delta::Zero()); 766 stream_->OnStreamFrameAcked(frame3, QuicTime::Delta::Zero());
747 EXPECT_FALSE(stream_->IsWaitingForAcks()); 767 EXPECT_FALSE(stream_->IsWaitingForAcks());
768 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
769 }
770
771 TEST_F(QuicStreamTest, StreamDataGetAckedOutOfOrder) {
772 Initialize(kShouldProcessData);
773 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
774 .WillRepeatedly(
775 Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
776 // Send data.
777 stream_->WriteOrBufferData(kData1, false, nullptr);
778 stream_->WriteOrBufferData(kData1, false, nullptr);
779 stream_->WriteOrBufferData(kData1, false, nullptr);
780 stream_->WriteOrBufferData("", true, nullptr);
781 if (session_->streams_own_data()) {
782 EXPECT_EQ(3u, QuicStreamPeer::SendBuffer(stream_).size());
783 } else {
784 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
785 }
786 EXPECT_TRUE(stream_->IsWaitingForAcks());
787
788 QuicStreamFrame frame1(stream_->id(), false, 0, kData1);
789 QuicStreamFrame frame2(stream_->id(), false, 9, kData1);
790 QuicStreamFrame frame3(stream_->id(), false, 18, kData1);
791 QuicStreamFrame frame4(stream_->id(), true, 27, "");
792 stream_->OnStreamFrameAcked(frame2, QuicTime::Delta::Zero());
793 if (session_->streams_own_data()) {
794 EXPECT_EQ(3u, QuicStreamPeer::SendBuffer(stream_).size());
795 }
796 stream_->OnStreamFrameAcked(frame3, QuicTime::Delta::Zero());
797 if (session_->streams_own_data()) {
798 EXPECT_EQ(3u, QuicStreamPeer::SendBuffer(stream_).size());
799 }
800 stream_->OnStreamFrameDiscarded(frame1);
801 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
802 // FIN is not acked yet.
803 EXPECT_TRUE(stream_->IsWaitingForAcks());
804 stream_->OnStreamFrameAcked(frame4, QuicTime::Delta::Zero());
805 EXPECT_FALSE(stream_->IsWaitingForAcks());
748 } 806 }
749 807
750 TEST_F(QuicStreamTest, CancelStream) { 808 TEST_F(QuicStreamTest, CancelStream) {
751 Initialize(kShouldProcessData); 809 Initialize(kShouldProcessData);
752 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _)) 810 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
753 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 811 .WillRepeatedly(
812 Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
754 EXPECT_FALSE(stream_->IsWaitingForAcks()); 813 EXPECT_FALSE(stream_->IsWaitingForAcks());
814 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
755 815
756 stream_->WriteOrBufferData(kData1, false, nullptr); 816 stream_->WriteOrBufferData(kData1, false, nullptr);
757 QuicStreamFrame frame(stream_->id(), 0, false, kData1); 817 QuicStreamFrame frame(stream_->id(), 0, false, kData1);
758 EXPECT_TRUE(stream_->IsWaitingForAcks()); 818 EXPECT_TRUE(stream_->IsWaitingForAcks());
819 if (session_->streams_own_data()) {
820 EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
821 } else {
822 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
823 }
759 // Cancel stream. 824 // Cancel stream.
760 stream_->Reset(QUIC_STREAM_NO_ERROR); 825 stream_->Reset(QUIC_STREAM_NO_ERROR);
761 // stream still waits for acks as the error code is QUIC_STREAM_NO_ERROR, and 826 // stream still waits for acks as the error code is QUIC_STREAM_NO_ERROR, and
762 // data is going to be retransmitted. 827 // data is going to be retransmitted.
763 EXPECT_TRUE(stream_->IsWaitingForAcks()); 828 EXPECT_TRUE(stream_->IsWaitingForAcks());
764 EXPECT_CALL(*session_, 829 EXPECT_CALL(*session_,
765 SendRstStream(stream_->id(), QUIC_STREAM_CANCELLED, 9)); 830 SendRstStream(stream_->id(), QUIC_STREAM_CANCELLED, 9));
766 stream_->Reset(QUIC_STREAM_CANCELLED); 831 stream_->Reset(QUIC_STREAM_CANCELLED);
767 if (session_->use_stream_notifier()) { 832 if (session_->use_stream_notifier()) {
768 stream_->OnStreamFrameDiscarded(frame); 833 stream_->OnStreamFrameDiscarded(frame);
769 // Stream stops waiting for acks as data is not going to be retransmitted. 834 // Stream stops waiting for acks as data is not going to be retransmitted.
770 EXPECT_FALSE(stream_->IsWaitingForAcks()); 835 EXPECT_FALSE(stream_->IsWaitingForAcks());
836 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
771 } 837 }
772 } 838 }
773 839
774 TEST_F(QuicStreamTest, RstFrameReceivedStreamNotFinishSending) { 840 TEST_F(QuicStreamTest, RstFrameReceivedStreamNotFinishSending) {
775 Initialize(kShouldProcessData); 841 Initialize(kShouldProcessData);
776 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _)) 842 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
777 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 843 .WillRepeatedly(
844 Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
778 EXPECT_FALSE(stream_->IsWaitingForAcks()); 845 EXPECT_FALSE(stream_->IsWaitingForAcks());
846 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
779 847
780 stream_->WriteOrBufferData(kData1, false, nullptr); 848 stream_->WriteOrBufferData(kData1, false, nullptr);
781 QuicStreamFrame frame(stream_->id(), 0, false, kData1); 849 QuicStreamFrame frame(stream_->id(), 0, false, kData1);
782 EXPECT_TRUE(stream_->IsWaitingForAcks()); 850 EXPECT_TRUE(stream_->IsWaitingForAcks());
851 if (session_->streams_own_data()) {
852 EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
853 } else {
854 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
855 }
783 856
784 // RST_STREAM received. 857 // RST_STREAM received.
785 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 9); 858 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 9);
786 EXPECT_CALL(*session_, 859 EXPECT_CALL(*session_,
787 SendRstStream(stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9)); 860 SendRstStream(stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9));
788 stream_->OnStreamReset(rst_frame); 861 stream_->OnStreamReset(rst_frame);
789 if (session_->use_stream_notifier()) { 862 if (session_->use_stream_notifier()) {
790 stream_->OnStreamFrameDiscarded(frame); 863 stream_->OnStreamFrameDiscarded(frame);
791 // Stream stops waiting for acks as it does not finish sending and rst is 864 // Stream stops waiting for acks as it does not finish sending and rst is
792 // sent. 865 // sent.
793 EXPECT_FALSE(stream_->IsWaitingForAcks()); 866 EXPECT_FALSE(stream_->IsWaitingForAcks());
867 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
794 } 868 }
795 } 869 }
796 870
797 TEST_F(QuicStreamTest, RstFrameReceivedStreamFinishSending) { 871 TEST_F(QuicStreamTest, RstFrameReceivedStreamFinishSending) {
798 Initialize(kShouldProcessData); 872 Initialize(kShouldProcessData);
799 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _)) 873 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
800 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 874 .WillRepeatedly(
875 Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
801 EXPECT_FALSE(stream_->IsWaitingForAcks()); 876 EXPECT_FALSE(stream_->IsWaitingForAcks());
877 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
802 878
803 stream_->WriteOrBufferData(kData1, true, nullptr); 879 stream_->WriteOrBufferData(kData1, true, nullptr);
804 EXPECT_TRUE(stream_->IsWaitingForAcks()); 880 EXPECT_TRUE(stream_->IsWaitingForAcks());
805 881
806 // RST_STREAM received. 882 // RST_STREAM received.
807 EXPECT_CALL(*session_, SendRstStream(_, _, _)).Times(0); 883 EXPECT_CALL(*session_, SendRstStream(_, _, _)).Times(0);
808 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 1234); 884 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 1234);
809 stream_->OnStreamReset(rst_frame); 885 stream_->OnStreamReset(rst_frame);
810 // Stream stops waiting for acks as it has unacked data. 886 // Stream stops waiting for acks as it has unacked data.
811 EXPECT_TRUE(stream_->IsWaitingForAcks()); 887 EXPECT_TRUE(stream_->IsWaitingForAcks());
888 if (session_->streams_own_data()) {
889 EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
890 } else {
891 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
892 }
812 } 893 }
813 894
814 TEST_F(QuicStreamTest, ConnectionClosed) { 895 TEST_F(QuicStreamTest, ConnectionClosed) {
815 Initialize(kShouldProcessData); 896 Initialize(kShouldProcessData);
816 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _)) 897 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
817 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 898 .WillRepeatedly(
899 Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
818 EXPECT_FALSE(stream_->IsWaitingForAcks()); 900 EXPECT_FALSE(stream_->IsWaitingForAcks());
901 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
819 902
820 stream_->WriteOrBufferData(kData1, false, nullptr); 903 stream_->WriteOrBufferData(kData1, false, nullptr);
821 QuicStreamFrame frame(stream_->id(), 0, false, kData1); 904 QuicStreamFrame frame(stream_->id(), 0, false, kData1);
822 EXPECT_TRUE(stream_->IsWaitingForAcks()); 905 EXPECT_TRUE(stream_->IsWaitingForAcks());
823 906
824 EXPECT_CALL(*session_, 907 EXPECT_CALL(*session_,
825 SendRstStream(stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9)); 908 SendRstStream(stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9));
826 stream_->OnConnectionClosed(QUIC_INTERNAL_ERROR, 909 stream_->OnConnectionClosed(QUIC_INTERNAL_ERROR,
827 ConnectionCloseSource::FROM_SELF); 910 ConnectionCloseSource::FROM_SELF);
828 if (session_->use_stream_notifier()) { 911 if (session_->use_stream_notifier()) {
829 stream_->OnStreamFrameDiscarded(frame); 912 stream_->OnStreamFrameDiscarded(frame);
830 // Stream stops waiting for acks as connection is going to close. 913 // Stream stops waiting for acks as connection is going to close.
831 EXPECT_FALSE(stream_->IsWaitingForAcks()); 914 EXPECT_FALSE(stream_->IsWaitingForAcks());
915 EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
832 } 916 }
833 } 917 }
834 918
835 } // namespace 919 } // namespace
836 } // namespace test 920 } // namespace test
837 } // namespace net 921 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_stream_send_buffer_test.cc ('k') | net/quic/test_tools/quic_stream_peer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698