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