diff options
Diffstat (limited to 'net/quic/quic_packet_generator_test.cc')
-rw-r--r-- | net/quic/quic_packet_generator_test.cc | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/net/quic/quic_packet_generator_test.cc b/net/quic/quic_packet_generator_test.cc index 331b183..a400833 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()); |