| 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..515c5cf646dd4fe74c713b1ba9f4e6d48a43c612 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;
|
| @@ -140,6 +141,18 @@ 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 +224,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);
|
|
|
|
|