| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_spdy_stream.h" | 5 #include "net/quic/core/quic_spdy_stream.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "net/quic/core/quic_connection.h" | 10 #include "net/quic/core/quic_connection.h" |
| 11 #include "net/quic/core/quic_utils.h" | 11 #include "net/quic/core/quic_utils.h" |
| 12 #include "net/quic/core/quic_write_blocked_list.h" | 12 #include "net/quic/core/quic_write_blocked_list.h" |
| 13 #include "net/quic/core/spdy_utils.h" | 13 #include "net/quic/core/spdy_utils.h" |
| 14 #include "net/quic/platform/api/quic_map_util.h" |
| 14 #include "net/quic/platform/api/quic_ptr_util.h" | 15 #include "net/quic/platform/api/quic_ptr_util.h" |
| 15 #include "net/quic/platform/api/quic_string_piece.h" | 16 #include "net/quic/platform/api/quic_string_piece.h" |
| 16 #include "net/quic/platform/api/quic_test.h" | 17 #include "net/quic/platform/api/quic_test.h" |
| 17 #include "net/quic/platform/api/quic_text_utils.h" | 18 #include "net/quic/platform/api/quic_text_utils.h" |
| 18 #include "net/quic/test_tools/quic_flow_controller_peer.h" | 19 #include "net/quic/test_tools/quic_flow_controller_peer.h" |
| 20 #include "net/quic/test_tools/quic_session_peer.h" |
| 19 #include "net/quic/test_tools/quic_spdy_session_peer.h" | 21 #include "net/quic/test_tools/quic_spdy_session_peer.h" |
| 20 #include "net/quic/test_tools/quic_stream_peer.h" | 22 #include "net/quic/test_tools/quic_stream_peer.h" |
| 21 #include "net/quic/test_tools/quic_test_utils.h" | 23 #include "net/quic/test_tools/quic_test_utils.h" |
| 22 | 24 |
| 23 using std::string; | 25 using std::string; |
| 24 using testing::AnyNumber; | 26 using testing::AnyNumber; |
| 25 using testing::Invoke; | 27 using testing::Invoke; |
| 26 using testing::Return; | 28 using testing::Return; |
| 27 using testing::StrictMock; | 29 using testing::StrictMock; |
| 28 using testing::_; | 30 using testing::_; |
| (...skipping 971 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1000 EXPECT_CALL(*ack_listener1, OnPacketAcked(7, _)); | 1002 EXPECT_CALL(*ack_listener1, OnPacketAcked(7, _)); |
| 1001 session_->OnStreamFrameAcked(frame1, QuicTime::Delta::Zero()); | 1003 session_->OnStreamFrameAcked(frame1, QuicTime::Delta::Zero()); |
| 1002 EXPECT_CALL(*ack_listener1, OnPacketAcked(5, _)); | 1004 EXPECT_CALL(*ack_listener1, OnPacketAcked(5, _)); |
| 1003 session_->OnStreamFrameAcked(frame2, QuicTime::Delta::Zero()); | 1005 session_->OnStreamFrameAcked(frame2, QuicTime::Delta::Zero()); |
| 1004 EXPECT_CALL(*ack_listener2, OnPacketAcked(7, _)); | 1006 EXPECT_CALL(*ack_listener2, OnPacketAcked(7, _)); |
| 1005 session_->OnStreamFrameAcked(frame3, QuicTime::Delta::Zero()); | 1007 session_->OnStreamFrameAcked(frame3, QuicTime::Delta::Zero()); |
| 1006 EXPECT_CALL(*ack_listener2, OnPacketAcked(5, _)); | 1008 EXPECT_CALL(*ack_listener2, OnPacketAcked(5, _)); |
| 1007 session_->OnStreamFrameAcked(frame4, QuicTime::Delta::Zero()); | 1009 session_->OnStreamFrameAcked(frame4, QuicTime::Delta::Zero()); |
| 1008 } | 1010 } |
| 1009 | 1011 |
| 1012 TEST_P(QuicSpdyStreamTest, StreamBecomesZombieWithWriteThatCloses) { |
| 1013 Initialize(kShouldProcessData); |
| 1014 if (!session_->use_stream_notifier()) { |
| 1015 return; |
| 1016 } |
| 1017 |
| 1018 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _)) |
| 1019 .Times(AnyNumber()) |
| 1020 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); |
| 1021 QuicStreamPeer::CloseReadSide(stream_); |
| 1022 // This write causes stream to be closed. |
| 1023 stream_->WriteOrBufferData("Test1", true, nullptr); |
| 1024 // stream_ has unacked data and should become zombie. |
| 1025 EXPECT_TRUE(QuicContainsKey(QuicSessionPeer::zombie_streams(session_.get()), |
| 1026 stream_->id())); |
| 1027 EXPECT_TRUE(QuicSessionPeer::closed_streams(session_.get()).empty()); |
| 1028 } |
| 1029 |
| 1010 } // namespace | 1030 } // namespace |
| 1011 } // namespace test | 1031 } // namespace test |
| 1012 } // namespace net | 1032 } // namespace net |
| OLD | NEW |