| Index: net/quic/quic_packet_creator_test.cc
|
| diff --git a/net/quic/quic_packet_creator_test.cc b/net/quic/quic_packet_creator_test.cc
|
| index a39784275b98adceef1e5244ab7f040c30ebcce0..80e855f1e22a3c6ff9c658f071170fae593f9f8e 100644
|
| --- a/net/quic/quic_packet_creator_test.cc
|
| +++ b/net/quic/quic_packet_creator_test.cc
|
| @@ -184,13 +184,6 @@ class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> {
|
| true, is_in_fec_group);
|
| }
|
|
|
| - // Enables and turns on FEC protection. Returns true if FEC protection is on.
|
| - bool SwitchFecProtectionOn(size_t max_packets_per_fec_group) {
|
| - creator_.set_max_packets_per_fec_group(max_packets_per_fec_group);
|
| - creator_.MaybeStartFecProtection();
|
| - return QuicPacketCreatorPeer::IsFecProtected(&creator_);
|
| - }
|
| -
|
| QuicIOVector MakeIOVector(StringPiece s) {
|
| return ::net::MakeIOVector(s, &iov_);
|
| }
|
| @@ -253,16 +246,21 @@ TEST_P(QuicPacketCreatorTest, SerializeFrames) {
|
| }
|
|
|
| TEST_P(QuicPacketCreatorTest, SerializeWithFEC) {
|
| - // Enable FEC protection, and send FEC packet every 6 packets.
|
| - EXPECT_TRUE(SwitchFecProtectionOn(6));
|
| + // Send FEC packet every 6 packets.
|
| + creator_.set_max_packets_per_fec_group(6);
|
| // Should return false since we do not have enough packets in the FEC group to
|
| // trigger an FEC packet.
|
| ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
|
| -
|
| - frames_.push_back(
|
| - QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece())));
|
| - SerializedPacket serialized = SerializeAllFrames(frames_);
|
| - delete frames_[0].stream_frame;
|
| + // Turn on FEC protection.
|
| + QuicFrame frame;
|
| + QuicIOVector io_vector(MakeIOVector("test"));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| + EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| + // Serialize the packet.
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| + .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
| + creator_.Flush();
|
|
|
| {
|
| InSequence s;
|
| @@ -275,8 +273,8 @@ TEST_P(QuicPacketCreatorTest, SerializeWithFEC) {
|
| EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
|
| EXPECT_CALL(framer_visitor_, OnPacketComplete());
|
| }
|
| - ProcessPacket(serialized.packet);
|
| - delete serialized.packet;
|
| + ProcessPacket(serialized_packet_.packet);
|
| + ClearSerializedPacket(&serialized_packet_);
|
|
|
| // Should return false since we do not have enough packets in the FEC group to
|
| // trigger an FEC packet.
|
| @@ -286,7 +284,6 @@ TEST_P(QuicPacketCreatorTest, SerializeWithFEC) {
|
|
|
| EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
| - creator_.set_should_fec_protect(true);
|
| creator_.MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/true,
|
| /*is_fec_timeout=*/false);
|
| ASSERT_EQ(2u, serialized_packet_.packet_number);
|
| @@ -440,15 +437,17 @@ TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) {
|
| // and we expect that packet number length should not change until the end
|
| // of the open FEC group.
|
|
|
| - // Enable FEC protection, and send FEC packet every 6 packets.
|
| - EXPECT_TRUE(SwitchFecProtectionOn(6));
|
| + // Send FEC packet every 6 packets.
|
| + creator_.set_max_packets_per_fec_group(6);
|
| // Should return false since we do not have enough packets in the FEC group to
|
| // trigger an FEC packet.
|
| ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
|
| - frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u))));
|
|
|
| // Generate Packet 1.
|
| - creator_.AddSavedFrame(frames_[0]);
|
| + QuicFrame frame;
|
| + QuicIOVector io_vector(MakeIOVector("test"));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| // Change the packet number length mid-FEC group and it should not change.
|
| QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_,
|
| PACKET_4BYTE_PACKET_NUMBER);
|
| @@ -467,14 +466,15 @@ TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) {
|
| EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
|
| EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
|
| EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_));
|
| - EXPECT_CALL(framer_visitor_, OnAckFrame(_));
|
| + EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
|
| EXPECT_CALL(framer_visitor_, OnPacketComplete());
|
| }
|
| ProcessPacket(serialized_packet_.packet);
|
| ClearSerializedPacket(&serialized_packet_);
|
|
|
| // Generate Packet 2.
|
| - creator_.AddSavedFrame(frames_[0]);
|
| + ASSERT_TRUE(creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| creator_.Flush();
|
| EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
|
| serialized_packet_.packet_number_length);
|
| @@ -487,7 +487,7 @@ TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) {
|
| EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
|
| EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
|
| EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_));
|
| - EXPECT_CALL(framer_visitor_, OnAckFrame(_));
|
| + EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
|
| EXPECT_CALL(framer_visitor_, OnPacketComplete());
|
| }
|
| ProcessPacket(serialized_packet_.packet);
|
| @@ -502,7 +502,8 @@ TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) {
|
| // Force generation of FEC packet.
|
| EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
| - creator_.set_should_fec_protect(true);
|
| + // Turn off FEC protection.
|
| + creator_.set_should_fec_protect_next_packet(false);
|
| creator_.MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/true,
|
| /*is_fec_timeout=*/false);
|
| EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
|
| @@ -523,10 +524,15 @@ TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) {
|
| ClearSerializedPacket(&serialized_packet_);
|
|
|
| // Ensure the next FEC group starts using the new packet number length.
|
| - SerializedPacket serialized = SerializeAllFrames(frames_);
|
| - EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, serialized.packet_number_length);
|
| - delete frames_[0].ack_frame;
|
| - ClearSerializedPacket(&serialized);
|
| + ASSERT_TRUE(creator_.ConsumeData(3u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| + EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| + .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
| + creator_.Flush();
|
| + EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER,
|
| + serialized_packet_.packet_number_length);
|
| + ClearSerializedPacket(&serialized_packet_);
|
| }
|
|
|
| TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) {
|
| @@ -645,34 +651,18 @@ TEST_P(QuicPacketCreatorTest, SerializeConnectionClose) {
|
| delete serialized.packet;
|
| }
|
|
|
| -TEST_P(QuicPacketCreatorTest, SwitchFecOnOffWithNoGroup) {
|
| - // Enable FEC protection.
|
| +TEST_P(QuicPacketCreatorTest, SwitchFecOnOffWithGroupInProgress) {
|
| + // Send FEC packet every 6 packets.
|
| creator_.set_max_packets_per_fec_group(6);
|
| - EXPECT_TRUE(QuicPacketCreatorPeer::IsFecEnabled(&creator_));
|
| - EXPECT_FALSE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| -
|
| // Turn on FEC protection.
|
| - creator_.MaybeStartFecProtection();
|
| - EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| - // We have no packets in the FEC group, so no FEC packet can be created.
|
| - EXPECT_FALSE(creator_.ShouldSendFec(/*force_close=*/true));
|
| - // Since no packets are in FEC group yet, we should be able to turn FEC
|
| - // off with no trouble.
|
| - creator_.MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/true,
|
| - /*is_fec_timeout=*/false);
|
| - EXPECT_FALSE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| -}
|
| -
|
| -TEST_P(QuicPacketCreatorTest, SwitchFecOnOffWithGroupInProgress) {
|
| - // Enable FEC protection, and send FEC packet every 6 packets.
|
| - EXPECT_TRUE(SwitchFecProtectionOn(6));
|
| - frames_.push_back(
|
| - QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece())));
|
| - SerializedPacket serialized = SerializeAllFrames(frames_);
|
| - delete frames_[0].stream_frame;
|
| - delete serialized.packet;
|
| -
|
| + QuicFrame frame;
|
| + QuicIOVector io_vector(MakeIOVector("test"));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| + .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
|
| + creator_.Flush();
|
| // We do not have enough packets in the FEC group to trigger an FEC packet.
|
| EXPECT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
|
| // Should return true since there are packets in the FEC group.
|
| @@ -688,20 +678,20 @@ TEST_P(QuicPacketCreatorTest, SwitchFecOnOffWithGroupInProgress) {
|
|
|
| EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
|
| - // Switching FEC on/off should work now.
|
| + // Turn off FEC protection.
|
| + creator_.set_should_fec_protect_next_packet(false);
|
| creator_.MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/true,
|
| /*is_fec_timeout=*/false);
|
| EXPECT_FALSE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| - creator_.MaybeStartFecProtection();
|
| - EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| }
|
|
|
| TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) {
|
| // Add a stream frame to the creator.
|
| QuicFrame frame;
|
| QuicIOVector io_vector(MakeIOVector("test"));
|
| - ASSERT_TRUE(
|
| - creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MAY_FEC_PROTECT));
|
| + EXPECT_FALSE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t consumed = frame.stream_frame->frame_length;
|
| EXPECT_EQ(4u, consumed);
|
| @@ -717,16 +707,20 @@ TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) {
|
| // Start FEC protection after current open packet is flushed.
|
| EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
|
| - creator_.MaybeStartFecProtection();
|
| - EXPECT_FALSE(creator_.HasPendingFrames());
|
| + ASSERT_TRUE(creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| + ASSERT_TRUE(frame.stream_frame);
|
| + consumed = frame.stream_frame->frame_length;
|
| + EXPECT_EQ(4u, consumed);
|
| + EXPECT_TRUE(creator_.HasPendingFrames());
|
| EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| }
|
|
|
| TEST_P(QuicPacketCreatorTest, ConsumeData) {
|
| QuicFrame frame;
|
| QuicIOVector io_vector(MakeIOVector("test"));
|
| - ASSERT_TRUE(
|
| - creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MAY_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t consumed = frame.stream_frame->frame_length;
|
| EXPECT_EQ(4u, consumed);
|
| @@ -737,8 +731,8 @@ TEST_P(QuicPacketCreatorTest, ConsumeData) {
|
| TEST_P(QuicPacketCreatorTest, ConsumeDataFin) {
|
| QuicFrame frame;
|
| QuicIOVector io_vector(MakeIOVector("test"));
|
| - ASSERT_TRUE(
|
| - creator_.ConsumeData(1u, io_vector, 0u, 10u, true, false, &frame));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 10u, true, false, &frame,
|
| + MAY_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t consumed = frame.stream_frame->frame_length;
|
| EXPECT_EQ(4u, consumed);
|
| @@ -749,7 +743,8 @@ TEST_P(QuicPacketCreatorTest, ConsumeDataFin) {
|
| TEST_P(QuicPacketCreatorTest, ConsumeDataFinOnly) {
|
| QuicFrame frame;
|
| QuicIOVector io_vector(nullptr, 0, 0);
|
| - ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame,
|
| + MAY_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t consumed = frame.stream_frame->frame_length;
|
| EXPECT_EQ(0u, consumed);
|
| @@ -757,6 +752,21 @@ TEST_P(QuicPacketCreatorTest, ConsumeDataFinOnly) {
|
| EXPECT_TRUE(creator_.HasPendingFrames());
|
| }
|
|
|
| +TEST_P(QuicPacketCreatorTest, ConsumeDataWithFecProtect) {
|
| + creator_.set_max_packets_per_fec_group(6);
|
| + QuicFrame frame;
|
| + QuicIOVector io_vector(MakeIOVector("test"));
|
| + EXPECT_FALSE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| + ASSERT_TRUE(frame.stream_frame);
|
| + size_t consumed = frame.stream_frame->frame_length;
|
| + EXPECT_EQ(4u, consumed);
|
| + CheckStreamFrame(frame, 1u, "test", 0u, false);
|
| + EXPECT_TRUE(creator_.HasPendingFrames());
|
| + EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| +}
|
| +
|
| TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) {
|
| const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
|
| + GetEncryptionOverhead();
|
| @@ -773,7 +783,8 @@ TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) {
|
| .WillRepeatedly(
|
| Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
|
| ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u,
|
| - kOffset, false, false, &frame));
|
| + kOffset, false, false, &frame,
|
| + MAY_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t bytes_consumed = frame.stream_frame->frame_length;
|
| EXPECT_LT(0u, bytes_consumed);
|
| @@ -814,8 +825,18 @@ TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) {
|
| }
|
|
|
| TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) {
|
| - // Enable FEC protection, and send FEC packet every 6 packets.
|
| - EXPECT_TRUE(SwitchFecProtectionOn(6));
|
| + // Send FEC packet every 6 packets.
|
| + creator_.set_max_packets_per_fec_group(6);
|
| + // Turn on FEC protection.
|
| + QuicFrame frame;
|
| + QuicIOVector io_vector(MakeIOVector("test"));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| + EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| + // Serialize the packet.
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| + .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
|
| + creator_.Flush();
|
| // Compute the total overhead for a single frame in packet.
|
| const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) +
|
| GetEncryptionOverhead() +
|
| @@ -864,7 +885,7 @@ TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) {
|
| .WillRepeatedly(
|
| Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
| ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, kOffset,
|
| - false, true, &frame));
|
| + false, true, &frame, MAY_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t bytes_consumed = frame.stream_frame->frame_length;
|
| EXPECT_LT(0u, bytes_consumed);
|
| @@ -899,7 +920,8 @@ TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) {
|
| EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
| ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u,
|
| - kOffset, false, false, &frame));
|
| + kOffset, false, false, &frame,
|
| + MAY_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t bytes_consumed = frame.stream_frame->frame_length;
|
| EXPECT_LT(0u, bytes_consumed);
|
| @@ -1030,7 +1052,8 @@ TEST_P(QuicPacketCreatorTest, ConsumeDataLargerThanOneStreamFrame) {
|
| QuicIOVector io_vector(MakeIOVector(too_long_payload));
|
| EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
| - ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame,
|
| + MAY_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t consumed = frame.stream_frame->frame_length;
|
| EXPECT_EQ(payload_length, consumed);
|
| @@ -1062,8 +1085,8 @@ TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) {
|
|
|
| QuicFrame frame;
|
| QuicIOVector io_vector(MakeIOVector("test"));
|
| - ASSERT_TRUE(
|
| - creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MAY_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t consumed = frame.stream_frame->frame_length;
|
| EXPECT_EQ(4u, consumed);
|
| @@ -1123,8 +1146,8 @@ TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) {
|
| // Make sure that an additional stream frame can be added to the packet.
|
| QuicFrame frame;
|
| QuicIOVector io_vector(MakeIOVector("test"));
|
| - ASSERT_TRUE(
|
| - creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame));
|
| + ASSERT_TRUE(creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame,
|
| + MAY_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t consumed = frame.stream_frame->frame_length;
|
| EXPECT_EQ(4u, consumed);
|
| @@ -1207,12 +1230,17 @@ TEST_P(QuicPacketCreatorTest, EntropyFlag) {
|
| }
|
|
|
| TEST_P(QuicPacketCreatorTest, ResetFecGroup) {
|
| - // Enable FEC protection, and send FEC packet every 6 packets.
|
| - EXPECT_TRUE(SwitchFecProtectionOn(6));
|
| - frames_.push_back(
|
| - QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece())));
|
| - SerializedPacket serialized = SerializeAllFrames(frames_);
|
| - delete serialized.packet;
|
| + // Send FEC packet every 6 packets.
|
| + creator_.set_max_packets_per_fec_group(6);
|
| + // Add a stream frame and turn on FEC protection.
|
| + QuicFrame frame;
|
| + QuicIOVector io_vector(MakeIOVector("test"));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| + // Serialize the packet.
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| + .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
|
| + creator_.Flush();
|
|
|
| EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| EXPECT_TRUE(creator_.IsFecGroupOpen());
|
| @@ -1225,7 +1253,7 @@ TEST_P(QuicPacketCreatorTest, ResetFecGroup) {
|
| // not fire.
|
| EXPECT_CALL(delegate_, OnResetFecGroup()).Times(1);
|
| creator_.set_fec_send_policy(FEC_ALARM_TRIGGER);
|
| - creator_.set_should_fec_protect(true);
|
| + creator_.set_should_fec_protect_next_packet(true);
|
| creator_.MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/true,
|
| /*is_fec_timeout=*/false);
|
| EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| @@ -1235,15 +1263,17 @@ TEST_P(QuicPacketCreatorTest, ResetFecGroup) {
|
| // Confirm that there is no FEC packet under construction.
|
| EXPECT_FALSE(creator_.ShouldSendFec(/*force_close=*/true));
|
|
|
| - EXPECT_DFATAL(serialized = QuicPacketCreatorPeer::SerializeFec(
|
| - &creator_, buffer_, kMaxPacketSize),
|
| - "SerializeFEC called but no group or zero packets in group.");
|
| - delete serialized.packet;
|
| + char buffer[kMaxPacketSize];
|
| + EXPECT_DFATAL(
|
| + QuicPacketCreatorPeer::SerializeFec(&creator_, buffer, kMaxPacketSize),
|
| + "SerializeFEC called but no group or zero packets in group.");
|
|
|
| - // Start a new FEC packet.
|
| - serialized = SerializeAllFrames(frames_);
|
| - delete frames_[0].stream_frame;
|
| - delete serialized.packet;
|
| + // Create and send a new FEC protected packet.
|
| + ASSERT_TRUE(creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| + .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
|
| + creator_.Flush();
|
|
|
| EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_));
|
| EXPECT_TRUE(creator_.IsFecGroupOpen());
|
| @@ -1262,6 +1292,7 @@ TEST_P(QuicPacketCreatorTest, ResetFecGroup) {
|
| creator_.set_fec_send_policy(FEC_ANY_TRIGGER);
|
| EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
| .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
| + creator_.set_should_fec_protect_next_packet(false);
|
| creator_.MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/true,
|
| /*is_fec_timeout=*/false);
|
| ASSERT_EQ(3u, serialized_packet_.packet_number);
|
| @@ -1269,13 +1300,13 @@ TEST_P(QuicPacketCreatorTest, ResetFecGroup) {
|
| }
|
|
|
| TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) {
|
| - // Enable FEC protection, and send FEC packet every 6 packets.
|
| - EXPECT_TRUE(SwitchFecProtectionOn(6));
|
| - // Add a stream frame to the creator.
|
| + // Send FEC packet every 6 packets.
|
| + creator_.set_max_packets_per_fec_group(6);
|
| + // Add a stream frame to the creator and turn on FEC protection.
|
| QuicFrame frame;
|
| QuicIOVector io_vector(MakeIOVector("test"));
|
| - ASSERT_TRUE(
|
| - creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
|
| + ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame,
|
| + MUST_FEC_PROTECT));
|
| ASSERT_TRUE(frame.stream_frame);
|
| size_t consumed = frame.stream_frame->frame_length;
|
| EXPECT_EQ(4u, consumed);
|
| @@ -1292,7 +1323,7 @@ TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) {
|
| // not fire.
|
| EXPECT_CALL(delegate_, OnResetFecGroup()).Times(1);
|
| creator_.set_fec_send_policy(FEC_ALARM_TRIGGER);
|
| - creator_.set_should_fec_protect(true);
|
| + creator_.set_should_fec_protect_next_packet(true);
|
| creator_.MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/true,
|
| /*is_fec_timeout=*/false);
|
| EXPECT_FALSE(creator_.IsFecGroupOpen());
|
|
|