//third_party/quic: allow BoringSSL to enable ML-KEM by default.

Primarily this needs changing tests to no longer assume a ClientHello fits into
a single packet.

These are the changes for tls_chlo_extractor_test.

PiperOrigin-RevId: 935936139
diff --git a/quiche/quic/core/tls_chlo_extractor_test.cc b/quiche/quic/core/tls_chlo_extractor_test.cc
index c4db633..7b4f167 100644
--- a/quiche/quic/core/tls_chlo_extractor_test.cc
+++ b/quiche/quic/core/tls_chlo_extractor_test.cc
@@ -43,7 +43,10 @@
 
 class TlsChloExtractorTest : public QuicTestWithParam<ParsedQuicVersion> {
  protected:
-  TlsChloExtractorTest() : version_(GetParam()), server_id_(TestServerId()) {}
+  TlsChloExtractorTest()
+      : version_(GetParam()),
+        server_id_(TestServerId()),
+        ready_to_ingest_(false) {}
 
   void Initialize() {
     tls_chlo_extractor_ = std::make_unique<TlsChloExtractor>();
@@ -51,6 +54,7 @@
         GetAnnotatedFirstFlightOfPackets(version_, config_);
     packets_ = std::move(packets.packets);
     crypto_stream_size_ = packets.crypto_stream_size;
+    ready_to_ingest_ = true;
     QUIC_DLOG(INFO) << "Initialized with " << packets_.size()
                     << " packets with crypto_stream_size:"
                     << crypto_stream_size_;
@@ -63,6 +67,7 @@
         std::move(crypto_config));
     packets_ = std::move(packets.packets);
     crypto_stream_size_ = packets.crypto_stream_size;
+    ready_to_ingest_ = true;
     QUIC_DLOG(INFO) << "Initialized with " << packets_.size()
                     << " packets with crypto_stream_size:"
                     << crypto_stream_size_;
@@ -117,6 +122,7 @@
   }
 
   void IngestPackets() {
+    EXPECT_TRUE(ready_to_ingest_);
     for (const std::unique_ptr<QuicReceivedPacket>& packet : packets_) {
       ReceivedPacketInfo packet_info(
           QuicSocketAddress(TestPeerIPAddress(), kTestPort),
@@ -135,7 +141,7 @@
       tls_chlo_extractor_->IngestPacket(packet_info.version,
                                         packet_info.packet);
     }
-    packets_.clear();
+    ready_to_ingest_ = false;  // Need to call Initialize() again.
   }
 
   void ValidateChloDetails(const TlsChloExtractor* extractor = nullptr) const {
@@ -171,12 +177,19 @@
         kCustomParameterValue;
   }
 
+  TlsChloExtractor::State ExtractorStateOnSuccess() const {
+    return packets_.size() == 1
+               ? TlsChloExtractor::State::kParsedFullSinglePacketChlo
+               : TlsChloExtractor::State::kParsedFullMultiPacketChlo;
+  }
+
   ParsedQuicVersion version_;
   QuicServerId server_id_;
   std::unique_ptr<TlsChloExtractor> tls_chlo_extractor_;
   QuicConfig config_;
   std::vector<std::unique_ptr<QuicReceivedPacket>> packets_;
   uint64_t crypto_stream_size_;
+  bool ready_to_ingest_;
 };
 
 INSTANTIATE_TEST_SUITE_P(TlsChloExtractorTests, TlsChloExtractorTest,
@@ -185,11 +198,11 @@
 
 TEST_P(TlsChloExtractorTest, Simple) {
   Initialize();
-  EXPECT_EQ(packets_.size(), 1u);
+  EXPECT_GE(packets_.size(), 1u);
   IngestPackets();
   ValidateChloDetails();
-  EXPECT_EQ(tls_chlo_extractor_->state(),
-            TlsChloExtractor::State::kParsedFullSinglePacketChlo);
+  EXPECT_TRUE(tls_chlo_extractor_->HasParsedFullChlo());
+  EXPECT_EQ(tls_chlo_extractor_->state(), ExtractorStateOnSuccess());
   EXPECT_FALSE(tls_chlo_extractor_->resumption_attempted());
   EXPECT_FALSE(tls_chlo_extractor_->early_data_attempted());
 }
@@ -205,8 +218,8 @@
   EXPECT_GE(packets_.size(), 1u);
   IngestPackets();
   ValidateChloDetails();
-  EXPECT_EQ(tls_chlo_extractor_->state(),
-            TlsChloExtractor::State::kParsedFullSinglePacketChlo);
+  EXPECT_TRUE(tls_chlo_extractor_->HasParsedFullChlo());
+  EXPECT_EQ(tls_chlo_extractor_->state(), ExtractorStateOnSuccess());
   EXPECT_TRUE(tls_chlo_extractor_->resumption_attempted());
   EXPECT_FALSE(tls_chlo_extractor_->early_data_attempted());
 }
@@ -287,7 +300,7 @@
 
 TEST_P(TlsChloExtractorTest, TlsExtensionInfo_QuicTransportParameters) {
   Initialize();
-  EXPECT_EQ(packets_.size(), 1u);
+  EXPECT_GE(packets_.size(), 1u);
   IngestPackets();
   ValidateChloDetails();
 
@@ -303,7 +316,7 @@
 TEST_P(TlsChloExtractorTest, MultiPacket) {
   IncreaseSizeOfChlo();
   Initialize();
-  EXPECT_EQ(packets_.size(), 2u);
+  EXPECT_GE(packets_.size(), 2u);
   IngestPackets();
   ValidateChloDetails();
   EXPECT_EQ(tls_chlo_extractor_->state(),
@@ -313,8 +326,8 @@
 TEST_P(TlsChloExtractorTest, MultiPacketReordered) {
   IncreaseSizeOfChlo();
   Initialize();
-  ASSERT_EQ(packets_.size(), 2u);
-  // Artificially reorder both packets.
+  ASSERT_GE(packets_.size(), 2u);
+  // Artificially reorder the first two packets.
   std::swap(packets_[0], packets_[1]);
   IngestPackets();
   ValidateChloDetails();
@@ -324,34 +337,34 @@
 
 TEST_P(TlsChloExtractorTest, MoveAssignment) {
   Initialize();
-  EXPECT_EQ(packets_.size(), 1u);
+  EXPECT_GE(packets_.size(), 1u);
   TlsChloExtractor other_extractor;
   *tls_chlo_extractor_ = std::move(other_extractor);
   IngestPackets();
   ValidateChloDetails();
-  EXPECT_EQ(tls_chlo_extractor_->state(),
-            TlsChloExtractor::State::kParsedFullSinglePacketChlo);
+  EXPECT_TRUE(tls_chlo_extractor_->HasParsedFullChlo());
+  EXPECT_EQ(tls_chlo_extractor_->state(), ExtractorStateOnSuccess());
 }
 
 TEST_P(TlsChloExtractorTest, MoveAssignmentAfterExtraction) {
   Initialize();
-  EXPECT_EQ(packets_.size(), 1u);
+  EXPECT_GE(packets_.size(), 1u);
   IngestPackets();
   ValidateChloDetails();
-  EXPECT_EQ(tls_chlo_extractor_->state(),
-            TlsChloExtractor::State::kParsedFullSinglePacketChlo);
+  EXPECT_TRUE(tls_chlo_extractor_->HasParsedFullChlo());
+  TlsChloExtractor::State expected_state = ExtractorStateOnSuccess();
+  EXPECT_EQ(tls_chlo_extractor_->state(), expected_state);
 
   TlsChloExtractor other_extractor = std::move(*tls_chlo_extractor_);
 
-  EXPECT_EQ(other_extractor.state(),
-            TlsChloExtractor::State::kParsedFullSinglePacketChlo);
+  EXPECT_EQ(other_extractor.state(), expected_state);
   ValidateChloDetails(&other_extractor);
 }
 
 TEST_P(TlsChloExtractorTest, MoveAssignmentBetweenPackets) {
   IncreaseSizeOfChlo();
   Initialize();
-  ASSERT_EQ(packets_.size(), 2u);
+  ASSERT_GE(packets_.size(), 2u);
   TlsChloExtractor other_extractor;
 
   // Have |other_extractor| parse the first packet.
@@ -369,10 +382,11 @@
       &destination_connection_id, &source_connection_id, &retry_token,
       &detailed_error);
   ASSERT_THAT(error, IsQuicNoError()) << detailed_error;
+  const size_t num_packets = packets_.size();
   other_extractor.IngestPacket(packet_info.version, packet_info.packet);
   // Remove the first packet from the list.
   packets_.erase(packets_.begin());
-  EXPECT_EQ(packets_.size(), 1u);
+  EXPECT_EQ(packets_.size(), num_packets - 1);
 
   // Move the extractor.
   *tls_chlo_extractor_ = std::move(other_extractor);