Simplify AckNotifierWithPacketLossAndBlockedSocket test.

Test-only change

PiperOrigin-RevId: 312324172
Change-Id: Iaded3747494e6e093cb787dfd86f706b4577b05c
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index f1a21ea..a455238 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -37,7 +37,9 @@
 #include "net/third_party/quiche/src/quic/test_tools/crypto_test_utils.h"
 #include "net/third_party/quiche/src/quic/test_tools/packet_dropping_test_writer.h"
 #include "net/third_party/quiche/src/quic/test_tools/packet_reordering_writer.h"
+#include "net/third_party/quiche/src/quic/test_tools/qpack/qpack_encoder_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/qpack/qpack_encoder_test_utils.h"
+#include "net/third_party/quiche/src/quic/test_tools/qpack/qpack_header_table_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/qpack/qpack_test_utils.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_client_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_config_peer.h"
@@ -2410,6 +2412,23 @@
   SetPacketLossPercentage(30);
   client_writer_->set_fake_blocked_socket_percentage(10);
 
+  // Wait for SETTINGS frame from server that sets QPACK dynamic table capacity
+  // to make sure request headers will be compressed using the dynamic table.
+  if (version_.UsesHttp3()) {
+    while (true) {
+      // Waits for up to 50 ms.
+      client_->client()->WaitForEvents();
+      if (!GetClientSession() || !GetClientSession()->qpack_encoder()) {
+        continue;
+      }
+      QpackHeaderTable* header_table =
+          QpackEncoderPeer::header_table(GetClientSession()->qpack_encoder());
+      if (QpackHeaderTablePeer::dynamic_table_capacity(header_table) > 0) {
+        break;
+      }
+    }
+  }
+
   // Create a POST request and send the headers only.
   SpdyHeaderBlock headers;
   headers[":method"] = "POST";
@@ -2419,54 +2438,33 @@
 
   client_->SendMessage(headers, "", /*fin=*/false);
 
-  // Bounds on the size of headers on the request stream. These are both zero
-  // if headers are sent on the header stream. The connection might send the
-  // /foo request before or after receiving the peer's SETTINGS, which
-  // would impact whether QPACK uses the dynamic table or not, so we have two
-  // potential expected values.
-  size_t header_size_low = 0;
-  size_t header_size_high = 0;
+  // Size of headers on the request stream. This is zero if headers are sent on
+  // the header stream.
+  size_t header_size = 0;
   if (version_.UsesHttp3()) {
     // Determine size of headers after QPACK compression in both scenarios.
     NoopDecoderStreamErrorDelegate decoder_stream_error_delegate;
     NoopQpackStreamSenderDelegate encoder_stream_sender_delegate;
-    QpackEncoder qpack_encoder_low(&decoder_stream_error_delegate);
-    qpack_encoder_low.set_qpack_stream_sender_delegate(
+    QpackEncoder qpack_encoder(&decoder_stream_error_delegate);
+    qpack_encoder.set_qpack_stream_sender_delegate(
         &encoder_stream_sender_delegate);
 
-    qpack_encoder_low.SetMaximumDynamicTableCapacity(
+    qpack_encoder.SetMaximumDynamicTableCapacity(
         kDefaultQpackMaxDynamicTableCapacity);
-    qpack_encoder_low.SetDynamicTableCapacity(
-        kDefaultQpackMaxDynamicTableCapacity);
-    qpack_encoder_low.SetMaximumBlockedStreams(kDefaultMaximumBlockedStreams);
+    qpack_encoder.SetDynamicTableCapacity(kDefaultQpackMaxDynamicTableCapacity);
+    qpack_encoder.SetMaximumBlockedStreams(kDefaultMaximumBlockedStreams);
 
-    std::string encoded_headers_low = qpack_encoder_low.EncodeHeaderList(
+    std::string encoded_headers = qpack_encoder.EncodeHeaderList(
         /* stream_id = */ 0, headers, nullptr);
-    header_size_low = encoded_headers_low.size();
-
-    QpackEncoder qpack_encoder_high(&decoder_stream_error_delegate);
-    qpack_encoder_high.set_qpack_stream_sender_delegate(
-        &encoder_stream_sender_delegate);
-
-    qpack_encoder_high.SetMaximumDynamicTableCapacity(0);
-    qpack_encoder_high.SetDynamicTableCapacity(0);
-    qpack_encoder_high.SetMaximumBlockedStreams(0);
-
-    std::string encoded_headers_high = qpack_encoder_high.EncodeHeaderList(
-        /* stream_id = */ 0, headers, nullptr);
-    header_size_high = encoded_headers_high.size();
+    header_size = encoded_headers.size();
   }
-  ASSERT_LE(header_size_low, header_size_high);
 
   // Test the AckNotifier's ability to track multiple packets by making the
   // request body exceed the size of a single packet.
   std::string request_string = "a request body bigger than one packet" +
                                std::string(kMaxOutgoingPacketSize, '.');
 
-  const int expected_bytes_acked_low =
-      header_size_low + request_string.length();
-  const int expected_bytes_acked_high =
-      header_size_high + request_string.length();
+  const int expected_bytes_acked = header_size + request_string.length();
 
   // The TestAckListener will cause a failure if not notified.
   QuicReferenceCountedPointer<TestAckListener> ack_listener(
@@ -2482,20 +2480,13 @@
   client_->SendSynchronousRequest("/bar");
 
   // Make sure the delegate does get the notification it expects.
-  while (ack_listener->total_bytes_acked() < expected_bytes_acked_low) {
+  while (ack_listener->total_bytes_acked() < expected_bytes_acked) {
     // Waits for up to 50 ms.
     client_->client()->WaitForEvents();
   }
-  if (expected_bytes_acked_low != expected_bytes_acked_high) {
-    EXPECT_TRUE(ack_listener->total_bytes_acked() == expected_bytes_acked_low ||
-                ack_listener->total_bytes_acked() == expected_bytes_acked_high)
-        << " header_size_low " << header_size_low << " header_size_high "
-        << header_size_low << " request length " << request_string.length();
-  } else {
-    EXPECT_EQ(ack_listener->total_bytes_acked(), expected_bytes_acked_low)
-        << " header_size " << header_size_low << " request length "
-        << request_string.length();
-  }
+  EXPECT_EQ(ack_listener->total_bytes_acked(), expected_bytes_acked)
+      << " header_size " << header_size << " request length "
+      << request_string.length();
 }
 
 // Send a public reset from the server.