In quic, check quicconnection::shouldgeneratepacket for every crypto packet. protected by gfe2_reloadable_flag_quic_fix_checking_should_generate_packet.
PiperOrigin-RevId: 311781975
Change-Id: I419d5446adb83f19927915d65e779b3cdb692532
diff --git a/quic/core/quic_packet_creator_test.cc b/quic/core/quic_packet_creator_test.cc
index d1beea7..19267c9 100644
--- a/quic/core/quic_packet_creator_test.cc
+++ b/quic/core/quic_packet_creator_test.cc
@@ -2679,6 +2679,37 @@
CheckPacketContains(contents, 0);
}
+TEST_F(QuicPacketCreatorMultiplePacketsTest,
+ ConsumeCryptoDataCheckShouldGeneratePacket) {
+ delegate_.SetCanNotWrite();
+
+ if (GetQuicReloadableFlag(quic_fix_checking_should_generate_packet)) {
+ EXPECT_CALL(delegate_, OnSerializedPacket(_)).Times(0);
+ } else {
+ EXPECT_CALL(delegate_, OnSerializedPacket(_))
+ .WillOnce(
+ Invoke(this, &QuicPacketCreatorMultiplePacketsTest::SavePacket));
+ }
+ std::string data = "crypto data";
+ size_t consumed_bytes =
+ creator_.ConsumeCryptoData(ENCRYPTION_INITIAL, data, 0);
+ creator_.Flush();
+ if (GetQuicReloadableFlag(quic_fix_checking_should_generate_packet)) {
+ EXPECT_EQ(0u, consumed_bytes);
+ } else {
+ EXPECT_EQ(data.length(), consumed_bytes);
+ }
+ EXPECT_FALSE(creator_.HasPendingFrames());
+ EXPECT_FALSE(creator_.HasPendingRetransmittableFrames());
+ if (GetQuicReloadableFlag(quic_fix_checking_should_generate_packet)) {
+ return;
+ }
+ PacketContents contents;
+ contents.num_crypto_frames = 1;
+ contents.num_padding_frames = 1;
+ CheckPacketContains(contents, 0);
+}
+
TEST_F(QuicPacketCreatorMultiplePacketsTest, ConsumeData_NotWritable) {
delegate_.SetCanNotWrite();