| 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 df8e6301a73945c99e0ed9614f4b322e0afba7a9..016cb5527d771050fd6cad954c1b66efbd25193c 100644
|
| --- a/net/quic/reliable_quic_stream_test.cc
|
| +++ b/net/quic/reliable_quic_stream_test.cc
|
| @@ -239,6 +239,78 @@ TEST_F(ReliableQuicStreamTest, WriteOrBufferData) {
|
| stream_->OnCanWrite();
|
| }
|
|
|
| +TEST_F(ReliableQuicStreamTest, WriteOrBufferDataWithFecProtectAlways) {
|
| + Initialize(kShouldProcessData);
|
| +
|
| + // Set FEC policy on stream.
|
| + ReliableQuicStreamPeer::SetFecPolicy(stream_.get(), PROTECT_ALWAYS);
|
| +
|
| + EXPECT_FALSE(HasWriteBlockedStreams());
|
| + size_t length = 1 + QuicPacketCreator::StreamFramePacketOverhead(
|
| + connection_->version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, 0u, IN_FEC_GROUP);
|
| + QuicConnectionPeer::GetPacketCreator(connection_)->set_max_packet_length(
|
| + length);
|
| +
|
| + // Write first data onto stream, which will cause one session write.
|
| + EXPECT_CALL(*session_, WritevData(_, _, _, _, MUST_FEC_PROTECT, _)).WillOnce(
|
| + Return(QuicConsumedData(kDataLen - 1, false)));
|
| + stream_->WriteOrBufferData(kData1, false, NULL);
|
| + EXPECT_TRUE(HasWriteBlockedStreams());
|
| +
|
| + // Queue a bytes_consumed write.
|
| + stream_->WriteOrBufferData(kData2, false, NULL);
|
| +
|
| + // Make sure we get the tail of the first write followed by the bytes_consumed
|
| + InSequence s;
|
| + EXPECT_CALL(*session_, WritevData(_, _, _, _, MUST_FEC_PROTECT, _)).
|
| + WillOnce(Return(QuicConsumedData(1, false)));
|
| + EXPECT_CALL(*session_, WritevData(_, _, _, _, MUST_FEC_PROTECT, _)).
|
| + WillOnce(Return(QuicConsumedData(kDataLen - 2, false)));
|
| + stream_->OnCanWrite();
|
| +
|
| + // And finally the end of the bytes_consumed.
|
| + EXPECT_CALL(*session_, WritevData(_, _, _, _, MUST_FEC_PROTECT, _)).
|
| + WillOnce(Return(QuicConsumedData(2, true)));
|
| + stream_->OnCanWrite();
|
| +}
|
| +
|
| +TEST_F(ReliableQuicStreamTest, WriteOrBufferDataWithFecProtectOptional) {
|
| + Initialize(kShouldProcessData);
|
| +
|
| + // Set FEC policy on stream.
|
| + ReliableQuicStreamPeer::SetFecPolicy(stream_.get(), PROTECT_OPTIONAL);
|
| +
|
| + EXPECT_FALSE(HasWriteBlockedStreams());
|
| + size_t length = 1 + QuicPacketCreator::StreamFramePacketOverhead(
|
| + connection_->version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, 0u, NOT_IN_FEC_GROUP);
|
| + QuicConnectionPeer::GetPacketCreator(connection_)->set_max_packet_length(
|
| + length);
|
| +
|
| + // Write first data onto stream, which will cause one session write.
|
| + EXPECT_CALL(*session_, WritevData(_, _, _, _, MAY_FEC_PROTECT, _)).WillOnce(
|
| + Return(QuicConsumedData(kDataLen - 1, false)));
|
| + stream_->WriteOrBufferData(kData1, false, NULL);
|
| + EXPECT_TRUE(HasWriteBlockedStreams());
|
| +
|
| + // Queue a bytes_consumed write.
|
| + stream_->WriteOrBufferData(kData2, false, NULL);
|
| +
|
| + // Make sure we get the tail of the first write followed by the bytes_consumed
|
| + InSequence s;
|
| + EXPECT_CALL(*session_, WritevData(_, _, _, _, MAY_FEC_PROTECT, _)).
|
| + WillOnce(Return(QuicConsumedData(1, false)));
|
| + EXPECT_CALL(*session_, WritevData(_, _, _, _, MAY_FEC_PROTECT, _)).
|
| + WillOnce(Return(QuicConsumedData(kDataLen - 2, false)));
|
| + stream_->OnCanWrite();
|
| +
|
| + // And finally the end of the bytes_consumed.
|
| + EXPECT_CALL(*session_, WritevData(_, _, _, _, MAY_FEC_PROTECT, _)).
|
| + WillOnce(Return(QuicConsumedData(2, true)));
|
| + stream_->OnCanWrite();
|
| +}
|
| +
|
| TEST_F(ReliableQuicStreamTest, ConnectionCloseAfterStreamClose) {
|
| Initialize(kShouldProcessData);
|
|
|
|
|