Index: net/quic/reliable_quic_stream_test.cc |
diff --git a/net/quic/reliable_quic_stream_test.cc b/net/quic/reliable_quic_stream_test.cc |
index 46a3fff525ccabc56c2f1ecb0457ceac6aed028a..03442b37fe7b0ec68e93f26cc9a1611c669da9f8 100644 |
--- a/net/quic/reliable_quic_stream_test.cc |
+++ b/net/quic/reliable_quic_stream_test.cc |
@@ -27,6 +27,7 @@ using testing::AtLeast; |
using testing::CreateFunctor; |
using testing::InSequence; |
using testing::Invoke; |
+using testing::DoAll; |
using testing::Return; |
using testing::StrictMock; |
using testing::WithArgs; |
@@ -59,9 +60,7 @@ class TestStream : public ReliableQuicStream { |
return should_process_data_ ? data_len : 0; |
} |
- QuicPriority EffectivePriority() const override { |
- return QuicUtils::HighestPriority(); |
- } |
+ SpdyPriority Priority() const override { return net::kHighestPriority; } |
using ReliableQuicStream::WriteOrBufferData; |
using ReliableQuicStream::CloseWriteSide; |
@@ -140,6 +139,17 @@ class ReliableQuicStreamTest : public ::testing::TestWithParam<bool> { |
write_blocked_list_->HasWriteBlockedDataStreams(); |
} |
+ QuicConsumedData CloseStreamOnWriteError( |
+ QuicStreamId id, |
+ QuicIOVector /*iov*/, |
+ QuicStreamOffset /*offset*/, |
+ bool /*fin*/, |
+ FecProtection /*fec_protection*/, |
+ QuicAckListenerInterface* /*ack_notifier_delegate*/) { |
+ session_->CloseStream(id); |
+ return QuicConsumedData(1, false); |
+ } |
+ |
protected: |
MockConnectionHelper helper_; |
MockConnection* connection_; |
@@ -211,6 +221,18 @@ TEST_F(ReliableQuicStreamTest, BlockIfSoloFinNotConsumed) { |
ASSERT_EQ(1u, write_blocked_list_->NumBlockedStreams()); |
} |
+TEST_F(ReliableQuicStreamTest, CloseOnPartialWrite) { |
+ Initialize(kShouldProcessData); |
+ |
+ // Write some data and no fin. However, while writing the data |
+ // close the stream and verify that MarkConnectionLevelWriteBlocked does not |
+ // crash with an unknown stream. |
+ EXPECT_CALL(*session_, WritevData(kTestStreamId, _, _, _, _, _)) |
+ .WillOnce(Invoke(this, &ReliableQuicStreamTest::CloseStreamOnWriteError)); |
+ stream_->WriteOrBufferData(StringPiece(kData1, 2), false, nullptr); |
+ ASSERT_EQ(0u, write_blocked_list_->NumBlockedStreams()); |
+} |
+ |
TEST_F(ReliableQuicStreamTest, WriteOrBufferData) { |
Initialize(kShouldProcessData); |