| Index: net/quic/quic_packet_generator_test.cc
|
| diff --git a/net/quic/quic_packet_generator_test.cc b/net/quic/quic_packet_generator_test.cc
|
| index 331b183466704bf71357ab24defc1aaa7d50c7fe..a400833e0f835e12a035260b5547638aa45a8edf 100644
|
| --- a/net/quic/quic_packet_generator_test.cc
|
| +++ b/net/quic/quic_packet_generator_test.cc
|
| @@ -563,9 +563,75 @@ TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) {
|
| CheckPacketContains(contents, packet2_);
|
| }
|
|
|
| +TEST_F(QuicPacketGeneratorTest, FecGroupSizeOnCongestionWindowChange) {
|
| + delegate_.SetCanWriteAnything();
|
| + creator_->set_max_packets_per_fec_group(50);
|
| + EXPECT_EQ(50u, creator_->max_packets_per_fec_group());
|
| + EXPECT_FALSE(creator_->IsFecGroupOpen());
|
| +
|
| + // On reduced cwnd.
|
| + generator_.OnCongestionWindowChange(7 * kDefaultTCPMSS);
|
| + EXPECT_EQ(3u, creator_->max_packets_per_fec_group());
|
| +
|
| + // On increased cwnd.
|
| + generator_.OnCongestionWindowChange(100 * kDefaultTCPMSS);
|
| + EXPECT_EQ(50u, creator_->max_packets_per_fec_group());
|
| +
|
| + // On collapsed cwnd.
|
| + generator_.OnCongestionWindowChange(1 * kDefaultTCPMSS);
|
| + EXPECT_EQ(2u, creator_->max_packets_per_fec_group());
|
| +}
|
| +
|
| +TEST_F(QuicPacketGeneratorTest, FecGroupSizeChangeWithOpenGroup) {
|
| + delegate_.SetCanWriteAnything();
|
| + // TODO(jri): This starting of batch mode should not be required when
|
| + // FEC sending is separated from batching operations.
|
| + generator_.StartBatchOperations();
|
| + creator_->set_max_packets_per_fec_group(50);
|
| + EXPECT_EQ(50u, creator_->max_packets_per_fec_group());
|
| + EXPECT_FALSE(creator_->IsFecGroupOpen());
|
| +
|
| + // Send enough data to create 4 packets with MUST_FEC_PROTECT flag.
|
| + // 3 packets are sent, one is queued in the creator.
|
| + {
|
| + InSequence dummy;
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
|
| + DoAll(SaveArg<0>(&packet_), Return(true)));
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
|
| + DoAll(SaveArg<0>(&packet2_), Return(true)));
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
|
| + DoAll(SaveArg<0>(&packet3_), Return(true)));
|
| + }
|
| + size_t data_len = 3 * kDefaultMaxPacketSize + 1;
|
| + QuicConsumedData consumed = generator_.ConsumeData(
|
| + 7, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL);
|
| + EXPECT_EQ(data_len, consumed.bytes_consumed);
|
| + EXPECT_TRUE(creator_->IsFecGroupOpen());
|
| +
|
| + // Change FEC groupsize.
|
| + generator_.OnCongestionWindowChange(2 * kDefaultTCPMSS);
|
| + EXPECT_EQ(2u, creator_->max_packets_per_fec_group());
|
| +
|
| + // Send enough data to trigger one unprotected data packet,
|
| + // causing the FEC packet to also be sent.
|
| + {
|
| + InSequence dummy;
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
|
| + DoAll(SaveArg<0>(&packet4_), Return(true)));
|
| + EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
|
| + DoAll(SaveArg<0>(&packet5_), Return(true)));
|
| + }
|
| + consumed = generator_.ConsumeData(7, CreateData(kDefaultMaxPacketSize), 0,
|
| + true, MAY_FEC_PROTECT, NULL);
|
| + EXPECT_EQ(kDefaultMaxPacketSize, consumed.bytes_consumed);
|
| + // Verify that one FEC packet was sent.
|
| + CheckPacketIsFec(packet5_, /*fec_group=*/1u);
|
| + EXPECT_FALSE(creator_->IsFecGroupOpen());
|
| + EXPECT_FALSE(creator_->IsFecProtected());
|
| +}
|
| +
|
| TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) {
|
| delegate_.SetCanWriteAnything();
|
| - // Enable FEC.
|
| creator_->set_max_packets_per_fec_group(2);
|
| EXPECT_FALSE(creator_->IsFecProtected());
|
|
|
|
|