| 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" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 char buffer[2048]; | 48 char buffer[2048]; |
| 49 struct iovec vec; | 49 struct iovec vec; |
| 50 vec.iov_base = buffer; | 50 vec.iov_base = buffer; |
| 51 vec.iov_len = arraysize(buffer); | 51 vec.iov_len = arraysize(buffer); |
| 52 size_t bytes_read = Readv(&vec, 1); | 52 size_t bytes_read = Readv(&vec, 1); |
| 53 data_ += string(buffer, bytes_read); | 53 data_ += string(buffer, bytes_read); |
| 54 } | 54 } |
| 55 | 55 |
| 56 using QuicStream::WriteOrBufferData; | 56 using QuicStream::WriteOrBufferData; |
| 57 using QuicStream::CloseWriteSide; | 57 using QuicStream::CloseWriteSide; |
| 58 using QuicSpdyStream::set_ack_listener; |
| 58 | 59 |
| 59 const string& data() const { return data_; } | 60 const string& data() const { return data_; } |
| 60 | 61 |
| 61 private: | 62 private: |
| 62 bool should_process_data_; | 63 bool should_process_data_; |
| 63 string data_; | 64 string data_; |
| 64 }; | 65 }; |
| 65 | 66 |
| 66 class QuicSpdyStreamTest : public QuicTestWithParam<QuicVersion> { | 67 class QuicSpdyStreamTest : public QuicTestWithParam<QuicVersion> { |
| 67 public: | 68 public: |
| (...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 956 EXPECT_CALL(*session_, WriteHeadersMock(_, _, _, _, _)); | 957 EXPECT_CALL(*session_, WriteHeadersMock(_, _, _, _, _)); |
| 957 stream_->WriteHeaders(SpdyHeaderBlock(), /*fin=*/true, nullptr); | 958 stream_->WriteHeaders(SpdyHeaderBlock(), /*fin=*/true, nullptr); |
| 958 EXPECT_TRUE(stream_->fin_sent()); | 959 EXPECT_TRUE(stream_->fin_sent()); |
| 959 | 960 |
| 960 // Writing Trailers should fail, as the FIN has already been sent. | 961 // Writing Trailers should fail, as the FIN has already been sent. |
| 961 // populated with the number of body bytes written. | 962 // populated with the number of body bytes written. |
| 962 EXPECT_QUIC_BUG(stream_->WriteTrailers(SpdyHeaderBlock(), nullptr), | 963 EXPECT_QUIC_BUG(stream_->WriteTrailers(SpdyHeaderBlock(), nullptr), |
| 963 "Trailers cannot be sent after a FIN"); | 964 "Trailers cannot be sent after a FIN"); |
| 964 } | 965 } |
| 965 | 966 |
| 967 TEST_P(QuicSpdyStreamTest, HeaderStreamNotiferCorrespondingSpdyStream) { |
| 968 Initialize(kShouldProcessData); |
| 969 if (!session_->use_stream_notifier()) { |
| 970 return; |
| 971 } |
| 972 |
| 973 EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _)) |
| 974 .Times(AnyNumber()) |
| 975 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); |
| 976 testing::InSequence s; |
| 977 QuicReferenceCountedPointer<MockAckListener> ack_listener1( |
| 978 new MockAckListener()); |
| 979 QuicReferenceCountedPointer<MockAckListener> ack_listener2( |
| 980 new MockAckListener()); |
| 981 stream_->set_ack_listener(ack_listener1); |
| 982 stream2_->set_ack_listener(ack_listener2); |
| 983 |
| 984 session_->headers_stream()->WriteOrBufferData("Header1", false, |
| 985 ack_listener1); |
| 986 stream_->WriteOrBufferData("Test1", true, nullptr); |
| 987 |
| 988 session_->headers_stream()->WriteOrBufferData("Header2", false, |
| 989 ack_listener2); |
| 990 stream2_->WriteOrBufferData("Test2", false, nullptr); |
| 991 |
| 992 QuicStreamFrame frame1(kHeadersStreamId, false, 0, "Header1"); |
| 993 QuicStreamFrame frame2(stream_->id(), true, 0, "Test1"); |
| 994 QuicStreamFrame frame3(kHeadersStreamId, false, 7, "Header2"); |
| 995 QuicStreamFrame frame4(stream2_->id(), false, 0, "Test2"); |
| 996 |
| 997 EXPECT_CALL(*ack_listener1, OnPacketRetransmitted(7)); |
| 998 session_->OnStreamFrameRetransmitted(frame1); |
| 999 |
| 1000 EXPECT_CALL(*ack_listener1, OnPacketAcked(7, _)); |
| 1001 session_->OnStreamFrameAcked(frame1, QuicTime::Delta::Zero()); |
| 1002 EXPECT_CALL(*ack_listener1, OnPacketAcked(5, _)); |
| 1003 session_->OnStreamFrameAcked(frame2, QuicTime::Delta::Zero()); |
| 1004 EXPECT_CALL(*ack_listener2, OnPacketAcked(7, _)); |
| 1005 session_->OnStreamFrameAcked(frame3, QuicTime::Delta::Zero()); |
| 1006 EXPECT_CALL(*ack_listener2, OnPacketAcked(5, _)); |
| 1007 session_->OnStreamFrameAcked(frame4, QuicTime::Delta::Zero()); |
| 1008 } |
| 1009 |
| 966 } // namespace | 1010 } // namespace |
| 967 } // namespace test | 1011 } // namespace test |
| 968 } // namespace net | 1012 } // namespace net |
| OLD | NEW |