| Index: net/quic/core/quic_stream_test.cc
|
| diff --git a/net/quic/core/quic_stream_test.cc b/net/quic/core/quic_stream_test.cc
|
| index c08eba406191f51fff658762cf53742bafa43134..e9e04a92261f1dfb05621fb743e69894996c281c 100644
|
| --- a/net/quic/core/quic_stream_test.cc
|
| +++ b/net/quic/core/quic_stream_test.cc
|
| @@ -717,45 +717,110 @@ TEST_F(QuicStreamTest, EarlyResponseFinHandling) {
|
| TEST_F(QuicStreamTest, StreamWaitsForAcks) {
|
| Initialize(kShouldProcessData);
|
| EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
|
| - .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
|
| + .WillRepeatedly(
|
| + Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
|
| // Stream is not waiting for acks initially.
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
|
|
| // Send kData1.
|
| stream_->WriteOrBufferData(kData1, false, nullptr);
|
| + if (session_->streams_own_data()) {
|
| + EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + } else {
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + }
|
| EXPECT_TRUE(stream_->IsWaitingForAcks());
|
| QuicStreamFrame frame1(stream_->id(), false, 0, kData1);
|
| stream_->OnStreamFrameAcked(frame1, QuicTime::Delta::Zero());
|
| // Stream is not waiting for acks as all sent data is acked.
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
|
|
| // Send kData2.
|
| stream_->WriteOrBufferData(kData2, false, nullptr);
|
| EXPECT_TRUE(stream_->IsWaitingForAcks());
|
| + if (session_->streams_own_data()) {
|
| + EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + } else {
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + }
|
| // Send FIN.
|
| stream_->WriteOrBufferData("", true, nullptr);
|
| + if (session_->streams_own_data()) {
|
| + // Fin only frame is not stored in send buffer.
|
| + EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + } else {
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + }
|
|
|
| // kData2 is acked.
|
| QuicStreamFrame frame2(stream_->id(), false, 9, kData2);
|
| stream_->OnStreamFrameAcked(frame2, QuicTime::Delta::Zero());
|
| // Stream is waiting for acks as FIN is not acked.
|
| EXPECT_TRUE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
|
|
| // FIN is acked.
|
| QuicStreamFrame frame3(stream_->id(), true, 18, "");
|
| stream_->OnStreamFrameAcked(frame3, QuicTime::Delta::Zero());
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| +}
|
| +
|
| +TEST_F(QuicStreamTest, StreamDataGetAckedOutOfOrder) {
|
| + Initialize(kShouldProcessData);
|
| + EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
|
| + .WillRepeatedly(
|
| + Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
|
| + // Send data.
|
| + stream_->WriteOrBufferData(kData1, false, nullptr);
|
| + stream_->WriteOrBufferData(kData1, false, nullptr);
|
| + stream_->WriteOrBufferData(kData1, false, nullptr);
|
| + stream_->WriteOrBufferData("", true, nullptr);
|
| + if (session_->streams_own_data()) {
|
| + EXPECT_EQ(3u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + } else {
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + }
|
| + EXPECT_TRUE(stream_->IsWaitingForAcks());
|
| +
|
| + QuicStreamFrame frame1(stream_->id(), false, 0, kData1);
|
| + QuicStreamFrame frame2(stream_->id(), false, 9, kData1);
|
| + QuicStreamFrame frame3(stream_->id(), false, 18, kData1);
|
| + QuicStreamFrame frame4(stream_->id(), true, 27, "");
|
| + stream_->OnStreamFrameAcked(frame2, QuicTime::Delta::Zero());
|
| + if (session_->streams_own_data()) {
|
| + EXPECT_EQ(3u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + }
|
| + stream_->OnStreamFrameAcked(frame3, QuicTime::Delta::Zero());
|
| + if (session_->streams_own_data()) {
|
| + EXPECT_EQ(3u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + }
|
| + stream_->OnStreamFrameDiscarded(frame1);
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + // FIN is not acked yet.
|
| + EXPECT_TRUE(stream_->IsWaitingForAcks());
|
| + stream_->OnStreamFrameAcked(frame4, QuicTime::Delta::Zero());
|
| + EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| }
|
|
|
| TEST_F(QuicStreamTest, CancelStream) {
|
| Initialize(kShouldProcessData);
|
| EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
|
| - .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
|
| + .WillRepeatedly(
|
| + Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
|
|
| stream_->WriteOrBufferData(kData1, false, nullptr);
|
| QuicStreamFrame frame(stream_->id(), 0, false, kData1);
|
| EXPECT_TRUE(stream_->IsWaitingForAcks());
|
| + if (session_->streams_own_data()) {
|
| + EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + } else {
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + }
|
| // Cancel stream.
|
| stream_->Reset(QUIC_STREAM_NO_ERROR);
|
| // stream still waits for acks as the error code is QUIC_STREAM_NO_ERROR, and
|
| @@ -768,18 +833,26 @@ TEST_F(QuicStreamTest, CancelStream) {
|
| stream_->OnStreamFrameDiscarded(frame);
|
| // Stream stops waiting for acks as data is not going to be retransmitted.
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| }
|
| }
|
|
|
| TEST_F(QuicStreamTest, RstFrameReceivedStreamNotFinishSending) {
|
| Initialize(kShouldProcessData);
|
| EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
|
| - .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
|
| + .WillRepeatedly(
|
| + Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
|
|
| stream_->WriteOrBufferData(kData1, false, nullptr);
|
| QuicStreamFrame frame(stream_->id(), 0, false, kData1);
|
| EXPECT_TRUE(stream_->IsWaitingForAcks());
|
| + if (session_->streams_own_data()) {
|
| + EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + } else {
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + }
|
|
|
| // RST_STREAM received.
|
| QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 9);
|
| @@ -791,14 +864,17 @@ TEST_F(QuicStreamTest, RstFrameReceivedStreamNotFinishSending) {
|
| // Stream stops waiting for acks as it does not finish sending and rst is
|
| // sent.
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| }
|
| }
|
|
|
| TEST_F(QuicStreamTest, RstFrameReceivedStreamFinishSending) {
|
| Initialize(kShouldProcessData);
|
| EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
|
| - .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
|
| + .WillRepeatedly(
|
| + Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
|
|
| stream_->WriteOrBufferData(kData1, true, nullptr);
|
| EXPECT_TRUE(stream_->IsWaitingForAcks());
|
| @@ -809,13 +885,20 @@ TEST_F(QuicStreamTest, RstFrameReceivedStreamFinishSending) {
|
| stream_->OnStreamReset(rst_frame);
|
| // Stream stops waiting for acks as it has unacked data.
|
| EXPECT_TRUE(stream_->IsWaitingForAcks());
|
| + if (session_->streams_own_data()) {
|
| + EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + } else {
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| + }
|
| }
|
|
|
| TEST_F(QuicStreamTest, ConnectionClosed) {
|
| Initialize(kShouldProcessData);
|
| EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
|
| - .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
|
| + .WillRepeatedly(
|
| + Invoke(session_.get(), &MockQuicSession::ConsumeAndSaveAllData));
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
|
|
| stream_->WriteOrBufferData(kData1, false, nullptr);
|
| QuicStreamFrame frame(stream_->id(), 0, false, kData1);
|
| @@ -829,6 +912,7 @@ TEST_F(QuicStreamTest, ConnectionClosed) {
|
| stream_->OnStreamFrameDiscarded(frame);
|
| // Stream stops waiting for acks as connection is going to close.
|
| EXPECT_FALSE(stream_->IsWaitingForAcks());
|
| + EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
|
| }
|
| }
|
|
|
|
|