| Index: net/tools/quic/end_to_end_test.cc
|
| diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc
|
| index b759847c4ac602f6c2f39457d03e9ac8243adea2..af9efed62e035c57985918f13965628fd132e2d0 100644
|
| --- a/net/tools/quic/end_to_end_test.cc
|
| +++ b/net/tools/quic/end_to_end_test.cc
|
| @@ -682,20 +682,22 @@ TEST_P(EndToEndTest, DISABLED_SimpleRequestResponsev6) {
|
| TEST_P(EndToEndTest, SeparateFinPacket) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.set_has_complete_message(false);
|
| -
|
| // Send a request in two parts: the request and then an empty packet with FIN.
|
| - client_->SendMessage(request);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| + client_->SendMessage(headers, "", /*fin=*/false);
|
| client_->SendData("", true);
|
| client_->WaitForResponse();
|
| EXPECT_EQ(kFooResponseBody, client_->response_body());
|
| EXPECT_EQ("200", client_->response_headers()->find(":status")->second);
|
|
|
| // Now do the same thing but with a content length.
|
| - request.AddBody("foo", true);
|
| - client_->SendMessage(request);
|
| - client_->SendData("", true);
|
| + headers["content-length"] = "3";
|
| + client_->SendMessage(headers, "", /*fin=*/false);
|
| + client_->SendData("foo", true);
|
| client_->WaitForResponse();
|
| EXPECT_EQ(kFooResponseBody, client_->response_body());
|
| EXPECT_EQ("200", client_->response_headers()->find(":status")->second);
|
| @@ -714,12 +716,15 @@ TEST_P(EndToEndTest, MultipleClients) {
|
| ASSERT_TRUE(Initialize());
|
| std::unique_ptr<QuicTestClient> client2(CreateQuicClient(nullptr));
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddHeader("content-length", "3");
|
| - request.set_has_complete_message(false);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| + headers["content-length"] = "3";
|
|
|
| - client_->SendMessage(request);
|
| - client2->SendMessage(request);
|
| + client_->SendMessage(headers, "", /*fin=*/false);
|
| + client2->SendMessage(headers, "", /*fin=*/false);
|
|
|
| client_->SendData("bar", true);
|
| client_->WaitForResponse();
|
| @@ -760,13 +765,16 @@ TEST_P(EndToEndTest, PostMissingBytes) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| // Add a content length header with no body.
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddHeader("content-length", "3");
|
| - request.set_skip_message_validation(true);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| + headers["content-length"] = "3";
|
|
|
| // This should be detected as stream fin without complete request,
|
| // triggering an error response.
|
| - client_->SendCustomSynchronousRequest(request);
|
| + client_->SendCustomSynchronousRequest(headers, "");
|
| EXPECT_EQ(QuicSimpleServerStream::kErrorResponseBody,
|
| client_->response_body());
|
| EXPECT_EQ("500", client_->response_headers()->find(":status")->second);
|
| @@ -781,10 +789,14 @@ TEST_P(EndToEndTest, LargePostNoPacketLoss) {
|
| string body;
|
| GenerateBody(&body, 1024 * 1024);
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(body, true);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
|
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| // TODO(ianswett): There should not be packet loss in this test, but on some
|
| // platforms the receive buffer overflows.
|
| VerifyCleanConnection(true);
|
| @@ -799,11 +811,14 @@ TEST_P(EndToEndTest, LargePostNoPacketLoss1sRTT) {
|
| // 100 KB body.
|
| string body;
|
| GenerateBody(&body, 100 * 1024);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(body, true);
|
| -
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| VerifyCleanConnection(false);
|
| }
|
|
|
| @@ -825,11 +840,15 @@ TEST_P(EndToEndTest, LargePostWithPacketLoss) {
|
| // 10 KB body.
|
| string body;
|
| GenerateBody(&body, 1024 * 10);
|
| + test::GenerateBody(&body, 1024 * 10);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(body, true);
|
| -
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| VerifyCleanConnection(true);
|
| }
|
|
|
| @@ -851,11 +870,14 @@ TEST_P(EndToEndTest, LargePostWithPacketLossAndBlockedSocket) {
|
| // 10 KB body.
|
| string body;
|
| GenerateBody(&body, 1024 * 10);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(body, true);
|
| -
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| }
|
|
|
| TEST_P(EndToEndTest, LargePostNoPacketLossWithDelayAndReordering) {
|
| @@ -869,11 +891,14 @@ TEST_P(EndToEndTest, LargePostNoPacketLossWithDelayAndReordering) {
|
| // 1 MB body.
|
| string body;
|
| GenerateBody(&body, 1024 * 1024);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(body, true);
|
| -
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| }
|
|
|
| TEST_P(EndToEndTest, LargePostZeroRTTFailure) {
|
| @@ -886,11 +911,14 @@ TEST_P(EndToEndTest, LargePostZeroRTTFailure) {
|
|
|
| string body;
|
| GenerateBody(&body, 20480);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(body, true);
|
| -
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| // In the non-stateless case, the same session is used for both
|
| // hellos, so the number of hellos sent on that session is 2. In
|
| // the stateless case, the first client session will be completely
|
| @@ -908,7 +936,8 @@ TEST_P(EndToEndTest, LargePostZeroRTTFailure) {
|
| client_->Connect();
|
| client_->WaitForResponseForMs(-1);
|
| ASSERT_TRUE(client_->client()->connected());
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
|
|
| if (negotiated_version_ <= QUIC_VERSION_32) {
|
| EXPECT_EQ(expected_num_hellos_latest_session,
|
| @@ -928,7 +957,8 @@ TEST_P(EndToEndTest, LargePostZeroRTTFailure) {
|
|
|
| client_->Connect();
|
| ASSERT_TRUE(client_->client()->connected());
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| // In the non-stateless case, the same session is used for both
|
| // hellos, so the number of hellos sent on that session is 2. In
|
| // the stateless case, the first client session will be completely
|
| @@ -1010,11 +1040,14 @@ TEST_P(EndToEndTest, LargePostSynchronousRequest) {
|
|
|
| string body;
|
| GenerateBody(&body, 20480);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(body, true);
|
| -
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| // In the non-stateless case, the same session is used for both
|
| // hellos, so the number of hellos sent on that session is 2. In
|
| // the stateless case, the first client session will be completely
|
| @@ -1032,7 +1065,8 @@ TEST_P(EndToEndTest, LargePostSynchronousRequest) {
|
| client_->Connect();
|
| client_->WaitForInitialResponse();
|
| ASSERT_TRUE(client_->client()->connected());
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
|
|
| if (negotiated_version_ <= QUIC_VERSION_32) {
|
| EXPECT_EQ(expected_num_hellos_latest_session,
|
| @@ -1052,7 +1086,8 @@ TEST_P(EndToEndTest, LargePostSynchronousRequest) {
|
|
|
| client_->Connect();
|
| ASSERT_TRUE(client_->client()->connected());
|
| - EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| // In the non-stateless case, the same session is used for both
|
| // hellos, so the number of hellos sent on that session is 2. In
|
| // the stateless case, the first client session will be completely
|
| @@ -1112,11 +1147,14 @@ TEST_P(EndToEndTest, LargePostSmallBandwidthLargeBuffer) {
|
| // 1 MB body.
|
| string body;
|
| GenerateBody(&body, 1024 * 1024);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(body, true);
|
| -
|
| - EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
|
| + EXPECT_EQ(kFooResponseBody,
|
| + client_->SendCustomSynchronousRequest(headers, body));
|
| // This connection may drop packets, because the buffer is smaller than the
|
| // max CWND.
|
| VerifyCleanConnection(true);
|
| @@ -1169,13 +1207,16 @@ TEST_P(EndToEndTest, InvalidStream) {
|
| string body;
|
| GenerateBody(&body, kMaxPacketSize);
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(body, true);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| // Force the client to write with a stream ID belonging to a nonexistent
|
| // server-side stream.
|
| QuicSessionPeer::SetNextOutgoingStreamId(client_->client()->session(), 2);
|
|
|
| - client_->SendCustomSynchronousRequest(request);
|
| + client_->SendCustomSynchronousRequest(headers, body);
|
| // EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
|
| EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
|
| EXPECT_EQ(QUIC_INVALID_STREAM_ID, client_->connection_error());
|
| @@ -1190,13 +1231,16 @@ TEST_P(EndToEndTest, LargeHeaders) {
|
| string body;
|
| test::GenerateBody(&body, kMaxPacketSize);
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddHeader("key1", string(15 * 1024, 'a'));
|
| - request.AddHeader("key2", string(15 * 1024, 'a'));
|
| - request.AddHeader("key3", string(15 * 1024, 'a'));
|
| - request.AddBody(body, true);
|
| -
|
| - client_->SendCustomSynchronousRequest(request);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| + headers["key1"] = string(15 * 1024, 'a');
|
| + headers["key2"] = string(15 * 1024, 'a');
|
| + headers["key3"] = string(15 * 1024, 'a');
|
| +
|
| + client_->SendCustomSynchronousRequest(headers, body);
|
| if (FLAGS_quic_limit_uncompressed_headers) {
|
| EXPECT_EQ(QUIC_HEADERS_TOO_LARGE, client_->stream_error());
|
| } else {
|
| @@ -1214,15 +1258,17 @@ TEST_P(EndToEndTest, EarlyResponseWithQuicStreamNoError) {
|
| string large_body;
|
| GenerateBody(&large_body, 1024 * 1024);
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddBody(large_body, false);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
|
|
| // Insert an invalid content_length field in request to trigger an early
|
| // response from server.
|
| - request.AddHeader("content-length", "-3");
|
| + headers["content-length"] = "-3";
|
|
|
| - request.set_skip_message_validation(true);
|
| - client_->SendCustomSynchronousRequest(request);
|
| + client_->SendCustomSynchronousRequest(headers, large_body);
|
| EXPECT_EQ("bad", client_->response_body());
|
| EXPECT_EQ("500", client_->response_headers()->find(":status")->second);
|
| EXPECT_EQ(QUIC_STREAM_NO_ERROR, client_->stream_error());
|
| @@ -1233,10 +1279,6 @@ TEST_P(EndToEndTest, EarlyResponseWithQuicStreamNoError) {
|
| TEST_P(EndToEndTest, DISABLED_MultipleTermination) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddHeader("content-length", "3");
|
| - request.set_has_complete_message(false);
|
| -
|
| // Set the offset so we won't frame. Otherwise when we pick up termination
|
| // before HTTP framing is complete, we send an error and close the stream,
|
| // and the second write is picked up as writing on a closed stream.
|
| @@ -1282,14 +1324,17 @@ TEST_P(EndToEndTest, NegotiateMaxOpenStreams) {
|
| QuicSessionPeer::SetMaxOpenOutgoingStreams(client_->client()->session(),
|
| kServerMaxStreams + 1);
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddHeader("content-length", "3");
|
| - request.set_has_complete_message(false);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| + headers["content-length"] = "3";
|
|
|
| // The server supports a small number of additional streams beyond the
|
| // negotiated limit. Open enough streams to go beyond that limit.
|
| for (int i = 0; i < kServerMaxStreams + 1; ++i) {
|
| - client_->SendMessage(request);
|
| + client_->SendMessage(headers, "", /*fin=*/false);
|
| }
|
| client_->WaitForResponse();
|
|
|
| @@ -1318,14 +1363,17 @@ TEST_P(EndToEndTest, MaxIncomingDynamicStreamsLimitRespected) {
|
| QuicSessionPeer::SetMaxOpenOutgoingStreams(client_->client()->session(),
|
| kServerMaxStreams + 1);
|
|
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.AddHeader("content-length", "3");
|
| - request.set_has_complete_message(false);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| + headers["content-length"] = "3";
|
|
|
| // The server supports a small number of additional streams beyond the
|
| // negotiated limit. Open enough streams to go beyond that limit.
|
| for (int i = 0; i < kServerMaxStreams + 1; ++i) {
|
| - client_->SendMessage(request);
|
| + client_->SendMessage(headers, "", /*fin=*/false);
|
| }
|
| client_->WaitForResponse();
|
|
|
| @@ -1915,9 +1963,13 @@ TEST_P(EndToEndTest, AckNotifierWithPacketLossAndBlockedSocket) {
|
| client_writer_->set_fake_blocked_socket_percentage(10);
|
|
|
| // Create a POST request and send the headers only.
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| - request.set_has_complete_message(false);
|
| - client_->SendMessage(request);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| +
|
| + client_->SendMessage(headers, "", /*fin=*/false);
|
|
|
| // The TestAckListener will cause a failure if not notified.
|
| scoped_refptr<TestAckListener> delegate(new TestAckListener(2));
|
| @@ -2430,7 +2482,12 @@ TEST_P(EndToEndTest, EarlyResponseFinRecording) {
|
|
|
| // A POST that gets an early error response, after the headers are received
|
| // and before the body is received, due to invalid content-length.
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/garbage");
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/garbage";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| +
|
| // The body must be large enough that the FIN will be in a different packet
|
| // than the end of the headers, but short enough to not require a flow control
|
| // update. This allows headers processing to trigger the error response
|
| @@ -2439,14 +2496,12 @@ TEST_P(EndToEndTest, EarlyResponseFinRecording) {
|
| const uint32_t kRequestBodySize = kMaxPacketSize + 10;
|
| string request_body;
|
| GenerateBody(&request_body, kRequestBodySize);
|
| - request.AddBody(request_body, false);
|
| // Set an invalid content-length, so the request will receive an early 500
|
| // response. Must be done after AddBody, which also sets content-length.
|
| - request.AddHeader("content-length", "-1");
|
| - request.set_skip_message_validation(true);
|
| + headers["content-length"] = "-1";
|
|
|
| // Send the request.
|
| - client_->SendMessage(request);
|
| + client_->SendMessage(headers, request_body);
|
| client_->WaitForResponse();
|
| EXPECT_EQ("500", client_->response_headers()->find(":status")->second);
|
|
|
| @@ -2482,16 +2537,19 @@ TEST_P(EndToEndTest, LargePostEarlyResponse) {
|
|
|
| // POST to a URL that gets an early error response, after the headers are
|
| // received and before the body is received.
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/garbage");
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/garbage";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| +
|
| // Invalid content-length so the request will receive an early 500 response.
|
| - request.AddHeader("content-length", "-1");
|
| - request.set_skip_message_validation(true);
|
| - request.set_has_complete_message(false);
|
| + headers["content-length"] = "-1";
|
|
|
| // Tell the client to not close the stream if it receives an early response.
|
| client_->set_allow_bidirectional_data(true);
|
| // Send the headers.
|
| - client_->SendMessage(request);
|
| + client_->SendMessage(headers, "", false);
|
| // Receive the response and let the server close writing.
|
| client_->WaitForInitialResponse();
|
| EXPECT_EQ("500", client_->response_headers()->find(":status")->second);
|
| @@ -2861,16 +2919,20 @@ TEST_P(EndToEndTest, DISABLED_TestHugePostWithPacketLoss) {
|
| // To avoid storing the whole request body in memory, use a loop to repeatedly
|
| // send body size of kSizeBytes until the whole request body size is reached.
|
| const int kSizeBytes = 128 * 1024;
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/foo";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| +
|
| // Request body size is 4G plus one more kSizeBytes.
|
| int64_t request_body_size_bytes = pow(2, 32) + kSizeBytes;
|
| ASSERT_LT(INT64_C(4294967296), request_body_size_bytes);
|
| - request.AddHeader("content-length", IntToString(request_body_size_bytes));
|
| - request.set_has_complete_message(false);
|
| + headers["content-length"] = IntToString(request_body_size_bytes);
|
| string body;
|
| test::GenerateBody(&body, kSizeBytes);
|
|
|
| - client_->SendMessage(request);
|
| + client_->SendMessage(headers, "", /*fin=*/false);
|
| for (int i = 0; i < request_body_size_bytes / kSizeBytes; ++i) {
|
| bool fin = (i == request_body_size_bytes - 1);
|
| client_->SendData(string(body.data(), kSizeBytes), fin);
|
| @@ -2978,8 +3040,13 @@ TEST_P(EndToEndBufferedPacketsTest, Buffer0RttRequest) {
|
| client_->client()->StartConnect();
|
| ASSERT_TRUE(client_->client()->connected());
|
| // Send a request before handshake finishes.
|
| - HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::GET, "/bar");
|
| - client_->SendMessage(request);
|
| + SpdyHeaderBlock headers;
|
| + headers[":method"] = "POST";
|
| + headers[":path"] = "/bar";
|
| + headers[":scheme"] = "https";
|
| + headers[":authority"] = server_hostname_;
|
| +
|
| + client_->SendMessage(headers, "");
|
| client_->WaitForResponse();
|
| EXPECT_EQ(kBarResponseBody, client_->response_body());
|
| QuicConnectionStats client_stats =
|
|
|