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.