| 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 f84531ffc4f7744f67f965a8b9000ff35e86468a..a8f09094b2722aac1d9b71d4a0199d53997efee9 100644
|
| --- a/net/tools/quic/end_to_end_test.cc
|
| +++ b/net/tools/quic/end_to_end_test.cc
|
| @@ -26,7 +26,7 @@
|
| #include "net/quic/core/quic_flags.h"
|
| #include "net/quic/core/quic_framer.h"
|
| #include "net/quic/core/quic_packet_creator.h"
|
| -#include "net/quic/core/quic_protocol.h"
|
| +#include "net/quic/core/quic_packets.h"
|
| #include "net/quic/core/quic_server_id.h"
|
| #include "net/quic/core/quic_session.h"
|
| #include "net/quic/core/quic_utils.h"
|
| @@ -44,7 +44,7 @@
|
| #include "net/test/gtest_util.h"
|
| #include "net/tools/epoll_server/epoll_server.h"
|
| #include "net/tools/quic/quic_epoll_connection_helper.h"
|
| -#include "net/tools/quic/quic_in_memory_cache.h"
|
| +#include "net/tools/quic/quic_http_response_cache.h"
|
| #include "net/tools/quic/quic_packet_writer_wrapper.h"
|
| #include "net/tools/quic/quic_server.h"
|
| #include "net/tools/quic/quic_simple_server_stream.h"
|
| @@ -429,7 +429,7 @@ class EndToEndTest : public ::testing::TestWithParam<TestParams> {
|
|
|
| auto test_server = new QuicTestServer(
|
| CryptoTestUtils::ProofSourceForTesting(), server_config_,
|
| - server_supported_versions_, &in_memory_cache_);
|
| + server_supported_versions_, &response_cache_);
|
| server_thread_.reset(new ServerThread(test_server, server_address_));
|
| if (chlo_multiplier_ != 0) {
|
| server_thread_->server()->SetChloMultiplier(chlo_multiplier_);
|
| @@ -466,8 +466,8 @@ class EndToEndTest : public ::testing::TestWithParam<TestParams> {
|
| }
|
|
|
| void AddToCache(StringPiece path, int response_code, StringPiece body) {
|
| - in_memory_cache_.AddSimpleResponse(server_hostname_, path, response_code,
|
| - body);
|
| + response_cache_.AddSimpleResponse(server_hostname_, path, response_code,
|
| + body);
|
| }
|
|
|
| void SetPacketLossPercentage(int32_t loss) {
|
| @@ -557,7 +557,7 @@ class EndToEndTest : public ::testing::TestWithParam<TestParams> {
|
| bool initialized_;
|
| QuicSocketAddress server_address_;
|
| string server_hostname_;
|
| - QuicInMemoryCache in_memory_cache_;
|
| + QuicHttpResponseCache response_cache_;
|
| std::unique_ptr<ServerThread> server_thread_;
|
| std::unique_ptr<QuicTestClient> client_;
|
| PacketDroppingTestWriter* client_writer_;
|
| @@ -581,7 +581,7 @@ INSTANTIATE_TEST_CASE_P(EndToEndTests,
|
|
|
| TEST_P(EndToEndTest, HandshakeSuccessful) {
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| QuicCryptoStream* crypto_stream =
|
| QuicSessionPeer::GetCryptoStream(client_->client()->session());
|
| QuicStreamSequencer* sequencer = QuicStreamPeer::sequencer(crypto_stream);
|
| @@ -729,11 +729,10 @@ TEST_P(EndToEndTest, PostMissingBytes) {
|
| TEST_P(EndToEndTest, LargePostNoPacketLoss) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // 1 MB body.
|
| - string body;
|
| - GenerateBody(&body, 1024 * 1024);
|
| + string body(1024 * 1024, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -751,11 +750,10 @@ TEST_P(EndToEndTest, LargePostNoPacketLoss1sRTT) {
|
| ASSERT_TRUE(Initialize());
|
| SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(1000));
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // 100 KB body.
|
| - string body;
|
| - GenerateBody(&body, 100 * 1024);
|
| + string body(100 * 1024, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -779,12 +777,11 @@ TEST_P(EndToEndTest, LargePostWithPacketLoss) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| // Wait for the server SHLO before upping the packet loss.
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| SetPacketLossPercentage(30);
|
|
|
| // 10 KB body.
|
| - string body;
|
| - GenerateBody(&body, 1024 * 10);
|
| + string body(1024 * 10, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -807,13 +804,12 @@ TEST_P(EndToEndTest, LargePostWithPacketLossAndBlockedSocket) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| // Wait for the server SHLO before upping the packet loss.
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| SetPacketLossPercentage(10);
|
| client_writer_->set_fake_blocked_socket_percentage(10);
|
|
|
| // 10 KB body.
|
| - string body;
|
| - GenerateBody(&body, 1024 * 10);
|
| + string body(1024 * 10, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -827,14 +823,13 @@ TEST_P(EndToEndTest, LargePostWithPacketLossAndBlockedSocket) {
|
| TEST_P(EndToEndTest, LargePostNoPacketLossWithDelayAndReordering) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| // Both of these must be called when the writer is not actively used.
|
| SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
|
| SetReorderPercentage(30);
|
|
|
| // 1 MB body.
|
| - string body;
|
| - GenerateBody(&body, 1024 * 1024);
|
| + string body(1024 * 1024, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -850,8 +845,7 @@ TEST_P(EndToEndTest, LargePostZeroRTTFailure) {
|
| // a 0-RTT handshake for the next request.
|
| ASSERT_TRUE(Initialize());
|
|
|
| - string body;
|
| - GenerateBody(&body, 20480);
|
| + string body(20480, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -961,8 +955,7 @@ TEST_P(EndToEndTest, LargePostSynchronousRequest) {
|
| // a 0-RTT handshake for the next request.
|
| ASSERT_TRUE(Initialize());
|
|
|
| - string body;
|
| - GenerateBody(&body, 20480);
|
| + string body(20480, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -1034,7 +1027,7 @@ TEST_P(EndToEndTest, SetInitialReceivedConnectionOptions) {
|
| initial_received_options));
|
|
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| server_thread_->WaitForCryptoHandshakeConfirmed();
|
|
|
| EXPECT_FALSE(server_config_.SetInitialReceivedConnectionOptions(
|
| @@ -1059,11 +1052,10 @@ TEST_P(EndToEndTest, LargePostSmallBandwidthLargeBuffer) {
|
| server_writer_->set_max_bandwidth_and_buffer_size(
|
| QuicBandwidth::FromBytesPerSecond(256 * 1024), 256 * 1024);
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // 1 MB body.
|
| - string body;
|
| - GenerateBody(&body, 1024 * 1024);
|
| + string body(1024 * 1024, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -1084,7 +1076,7 @@ TEST_P(EndToEndTest, DoNotSetResumeWriteAlarmIfConnectionFlowControlBlocked) {
|
| // an infinite loop in the EpollServer, as the alarm fires and is immediately
|
| // rescheduled.
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // Ensure both stream and connection level are flow control blocked by setting
|
| // the send window offset to 0.
|
| @@ -1119,10 +1111,9 @@ TEST_P(EndToEndTest, DoNotSetResumeWriteAlarmIfConnectionFlowControlBlocked) {
|
|
|
| TEST_P(EndToEndTest, InvalidStream) {
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| - string body;
|
| - GenerateBody(&body, kMaxPacketSize);
|
| + string body(kMaxPacketSize, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -1142,10 +1133,9 @@ TEST_P(EndToEndTest, InvalidStream) {
|
| // to send a request with overly large headers.
|
| TEST_P(EndToEndTest, LargeHeaders) {
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| - string body;
|
| - GenerateBody(&body, kMaxPacketSize);
|
| + string body(kMaxPacketSize, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -1168,10 +1158,9 @@ TEST_P(EndToEndTest, LargeHeaders) {
|
|
|
| TEST_P(EndToEndTest, EarlyResponseWithQuicStreamNoError) {
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| - string large_body;
|
| - GenerateBody(&large_body, 1024 * 1024);
|
| + string large_body(1024 * 1024, 'a');
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| headers[":path"] = "/foo";
|
| @@ -1224,7 +1213,7 @@ TEST_P(EndToEndTest, NegotiateMaxOpenStreams) {
|
| // Negotiate 1 max open stream.
|
| client_config_.SetMaxStreamsPerConnection(1, 1);
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| if (negotiated_version_ > QUIC_VERSION_34) {
|
| // Newer versions use max incoming dynamic streams.
|
| @@ -1262,7 +1251,7 @@ TEST_P(EndToEndTest, MaxIncomingDynamicStreamsLimitRespected) {
|
| server_config_.SetMaxIncomingDynamicStreamsToSend(
|
| kServerMaxIncomingDynamicStreams);
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| if (negotiated_version_ <= QUIC_VERSION_34) {
|
| // Earlier versions negotiated max open streams.
|
| @@ -1303,7 +1292,7 @@ TEST_P(EndToEndTest, SetIndependentMaxIncomingDynamicStreamsLimits) {
|
| server_config_.SetMaxIncomingDynamicStreamsToSend(
|
| kServerMaxIncomingDynamicStreams);
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| if (negotiated_version_ <= QUIC_VERSION_34) {
|
| // Earlier versions negotiated max open streams.
|
| @@ -1328,7 +1317,7 @@ TEST_P(EndToEndTest, NegotiateCongestionControl) {
|
| // static_cast here does not work.
|
| FLAGS_quic_enable_multipath = false;
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| CongestionControlType expected_congestion_control_type = kReno;
|
| switch (GetParam().congestion_control_tag) {
|
| @@ -1362,7 +1351,7 @@ TEST_P(EndToEndTest, LimitMaxOpenStreams) {
|
| client_config_.SetMaxStreamsPerConnection(10, 5);
|
|
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| if (negotiated_version_ > QUIC_VERSION_34) {
|
| // No negotiated max streams beyond version 34.
|
| return;
|
| @@ -1377,7 +1366,7 @@ TEST_P(EndToEndTest, ClientSuggestsRTT) {
|
| client_config_.SetInitialRoundTripTimeUsToSend(kInitialRTT);
|
|
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| server_thread_->WaitForCryptoHandshakeConfirmed();
|
|
|
| // Pause the server so we can access the server's internals without races.
|
| @@ -1404,7 +1393,7 @@ TEST_P(EndToEndTest, MaxInitialRTT) {
|
| kMaxInitialRoundTripTimeUs);
|
|
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| server_thread_->WaitForCryptoHandshakeConfirmed();
|
|
|
| // Pause the server so we can access the server's internals without races.
|
| @@ -1434,7 +1423,7 @@ TEST_P(EndToEndTest, MinInitialRTT) {
|
| client_config_.SetInitialRoundTripTimeUsToSend(0);
|
|
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| server_thread_->WaitForCryptoHandshakeConfirmed();
|
|
|
| // Pause the server so we can access the server's internals without races.
|
| @@ -1518,13 +1507,12 @@ TEST_P(EndToEndTest, MaxStreamsUberTest) {
|
| SetPacketLossPercentage(1);
|
| }
|
| ASSERT_TRUE(Initialize());
|
| - string large_body;
|
| - GenerateBody(&large_body, 10240);
|
| + string large_body(10240, 'a');
|
| int max_streams = 100;
|
|
|
| AddToCache("/large_response", 200, large_body);
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| SetPacketLossPercentage(10);
|
|
|
| for (int i = 0; i < max_streams; ++i) {
|
| @@ -1539,12 +1527,11 @@ TEST_P(EndToEndTest, MaxStreamsUberTest) {
|
|
|
| TEST_P(EndToEndTest, StreamCancelErrorTest) {
|
| ASSERT_TRUE(Initialize());
|
| - string small_body;
|
| - GenerateBody(&small_body, 256);
|
| + string small_body(256, 'a');
|
|
|
| AddToCache("/small_response", 200, small_body);
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| QuicSession* session = client_->client()->session();
|
| // Lose the request.
|
| @@ -1672,7 +1659,7 @@ TEST_P(EndToEndTest, DifferentFlowControlWindows) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| // Values are exchanged during crypto handshake, so wait for that to finish.
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| server_thread_->WaitForCryptoHandshakeConfirmed();
|
|
|
| // Open a data stream to make sure the stream level flow control is updated.
|
| @@ -1725,7 +1712,7 @@ TEST_P(EndToEndTest, HeadersAndCryptoStreamsNoConnectionFlowControl) {
|
| // Wait for crypto handshake to finish. This should have contributed to the
|
| // crypto stream flow control window, but not affected the session flow
|
| // control window.
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| server_thread_->WaitForCryptoHandshakeConfirmed();
|
|
|
| QuicCryptoStream* crypto_stream =
|
| @@ -1768,7 +1755,7 @@ TEST_P(EndToEndTest, FlowControlsSynced) {
|
|
|
| ASSERT_TRUE(Initialize());
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| server_thread_->WaitForCryptoHandshakeConfirmed();
|
|
|
| server_thread_->Pause();
|
| @@ -1868,7 +1855,7 @@ TEST_P(EndToEndTest, AckNotifierWithPacketLossAndBlockedSocket) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| // Wait for the server SHLO before upping the packet loss.
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| SetPacketLossPercentage(30);
|
| client_writer_->set_fake_blocked_socket_percentage(10);
|
|
|
| @@ -1940,7 +1927,7 @@ TEST_P(EndToEndTest, ServerSendPublicReset) {
|
| TEST_P(EndToEndTest, ServerSendPublicResetWithDifferentConnectionId) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // Send the public reset.
|
| QuicConnectionId incorrect_connection_id =
|
| @@ -2005,7 +1992,7 @@ TEST_P(EndToEndTest, ClientSendPublicResetWithDifferentConnectionId) {
|
| TEST_P(EndToEndTest, ServerSendVersionNegotiationWithDifferentConnectionId) {
|
| ASSERT_TRUE(Initialize());
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // Send the version negotiation packet.
|
| QuicConnectionId incorrect_connection_id =
|
| @@ -2147,9 +2134,9 @@ class ServerStreamWithErrorResponseBody : public QuicSimpleServerStream {
|
| public:
|
| ServerStreamWithErrorResponseBody(QuicStreamId id,
|
| QuicSpdySession* session,
|
| - QuicInMemoryCache* in_memory_cache,
|
| + QuicHttpResponseCache* response_cache,
|
| string response_body)
|
| - : QuicSimpleServerStream(id, session, in_memory_cache),
|
| + : QuicSimpleServerStream(id, session, response_cache),
|
| response_body_(std::move(response_body)) {}
|
|
|
| ~ServerStreamWithErrorResponseBody() override {}
|
| @@ -2179,8 +2166,8 @@ class StreamWithErrorFactory : public QuicTestServer::StreamFactory {
|
| QuicSimpleServerStream* CreateStream(
|
| QuicStreamId id,
|
| QuicSpdySession* session,
|
| - QuicInMemoryCache* in_memory_cache) override {
|
| - return new ServerStreamWithErrorResponseBody(id, session, in_memory_cache,
|
| + QuicHttpResponseCache* response_cache) override {
|
| + return new ServerStreamWithErrorResponseBody(id, session, response_cache,
|
| response_body_);
|
| }
|
|
|
| @@ -2193,8 +2180,8 @@ class ServerStreamThatDropsBody : public QuicSimpleServerStream {
|
| public:
|
| ServerStreamThatDropsBody(QuicStreamId id,
|
| QuicSpdySession* session,
|
| - QuicInMemoryCache* in_memory_cache)
|
| - : QuicSimpleServerStream(id, session, in_memory_cache) {}
|
| + QuicHttpResponseCache* response_cache)
|
| + : QuicSimpleServerStream(id, session, response_cache) {}
|
|
|
| ~ServerStreamThatDropsBody() override {}
|
|
|
| @@ -2236,8 +2223,8 @@ class ServerStreamThatDropsBodyFactory : public QuicTestServer::StreamFactory {
|
| QuicSimpleServerStream* CreateStream(
|
| QuicStreamId id,
|
| QuicSpdySession* session,
|
| - QuicInMemoryCache* in_memory_cache) override {
|
| - return new ServerStreamThatDropsBody(id, session, in_memory_cache);
|
| + QuicHttpResponseCache* response_cache) override {
|
| + return new ServerStreamThatDropsBody(id, session, response_cache);
|
| }
|
| };
|
|
|
| @@ -2246,18 +2233,17 @@ class ServerStreamThatSendsHugeResponse : public QuicSimpleServerStream {
|
| public:
|
| ServerStreamThatSendsHugeResponse(QuicStreamId id,
|
| QuicSpdySession* session,
|
| - QuicInMemoryCache* in_memory_cache,
|
| + QuicHttpResponseCache* response_cache,
|
| int64_t body_bytes)
|
| - : QuicSimpleServerStream(id, session, in_memory_cache),
|
| + : QuicSimpleServerStream(id, session, response_cache),
|
| body_bytes_(body_bytes) {}
|
|
|
| ~ServerStreamThatSendsHugeResponse() override {}
|
|
|
| protected:
|
| void SendResponse() override {
|
| - QuicInMemoryCache::Response response;
|
| - string body;
|
| - GenerateBody(&body, body_bytes_);
|
| + QuicHttpResponseCache::Response response;
|
| + string body(body_bytes_, 'a');
|
| response.set_body(body);
|
| SendHeadersAndBodyAndTrailers(response.headers().Clone(), response.body(),
|
| response.trailers().Clone());
|
| @@ -2280,8 +2266,8 @@ class ServerStreamThatSendsHugeResponseFactory
|
| QuicSimpleServerStream* CreateStream(
|
| QuicStreamId id,
|
| QuicSpdySession* session,
|
| - QuicInMemoryCache* in_memory_cache) override {
|
| - return new ServerStreamThatSendsHugeResponse(id, session, in_memory_cache,
|
| + QuicHttpResponseCache* response_cache) override {
|
| + return new ServerStreamThatSendsHugeResponse(id, session, response_cache,
|
| body_bytes_);
|
| }
|
|
|
| @@ -2385,20 +2371,19 @@ TEST_P(EndToEndTest, EarlyResponseFinRecording) {
|
| // receive the FIN of the request
|
| // send the FIN of the response
|
|
|
| - string response_body;
|
| // The response body must be larger than the flow control window so the server
|
| // must receive a window update from the client before it can finish sending
|
| // it.
|
| uint32_t response_body_size =
|
| 2 * client_config_.GetInitialStreamFlowControlWindowToSend();
|
| - GenerateBody(&response_body, response_body_size);
|
| + string response_body(response_body_size, 'a');
|
|
|
| StreamWithErrorFactory stream_factory(response_body);
|
| SetSpdyStreamFactory(&stream_factory);
|
|
|
| ASSERT_TRUE(Initialize());
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // A POST that gets an early error response, after the headers are received
|
| // and before the body is received, due to invalid content-length.
|
| @@ -2417,8 +2402,7 @@ TEST_P(EndToEndTest, EarlyResponseFinRecording) {
|
| // before the request FIN is processed but receive the request FIN before the
|
| // response is sent completely.
|
| const uint32_t kRequestBodySize = kMaxPacketSize + 10;
|
| - string request_body;
|
| - GenerateBody(&request_body, kRequestBodySize);
|
| + string request_body(kRequestBodySize, 'a');
|
|
|
| // Send the request.
|
| client_->SendMessage(headers, request_body);
|
| @@ -2453,7 +2437,7 @@ TEST_P(EndToEndTest, LargePostEarlyResponse) {
|
|
|
| ASSERT_TRUE(Initialize());
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // POST to a URL that gets an early error response, after the headers are
|
| // received and before the body is received.
|
| @@ -2483,7 +2467,7 @@ TEST_P(EndToEndTest, LargePostEarlyResponse) {
|
| TEST_P(EndToEndTest, Trailers) {
|
| // Test sending and receiving HTTP/2 Trailers (trailing HEADERS frames).
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // Set reordering to ensure that Trailers arriving before body is ok.
|
| SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
|
| @@ -2500,8 +2484,8 @@ TEST_P(EndToEndTest, Trailers) {
|
| SpdyHeaderBlock trailers;
|
| trailers["some-trailing-header"] = "trailing-header-value";
|
|
|
| - in_memory_cache_.AddResponse(server_hostname_, "/trailer_url",
|
| - std::move(headers), kBody, trailers.Clone());
|
| + response_cache_.AddResponse(server_hostname_, "/trailer_url",
|
| + std::move(headers), kBody, trailers.Clone());
|
|
|
| EXPECT_EQ(kBody, client_->SendSynchronousRequest("/trailer_url"));
|
| EXPECT_EQ("200", client_->response_headers()->find(":status")->second);
|
| @@ -2536,9 +2520,9 @@ class EndToEndTestServerPush : public EndToEndTest {
|
| if (use_large_response) {
|
| // Generate a response common body larger than flow control window for
|
| // push response.
|
| - GenerateBody(&large_resource, resource_size);
|
| + large_resource = string(resource_size, 'a');
|
| }
|
| - std::list<QuicInMemoryCache::ServerPushInfo> push_resources;
|
| + std::list<QuicHttpResponseCache::ServerPushInfo> push_resources;
|
| for (size_t i = 0; i < num_resources; ++i) {
|
| string url = push_urls[i];
|
| GURL resource_url(url);
|
| @@ -2549,11 +2533,11 @@ class EndToEndTestServerPush : public EndToEndTest {
|
| response_headers[":version"] = "HTTP/1.1";
|
| response_headers[":status"] = "200";
|
| response_headers["content-length"] = IntToString(body.size());
|
| - push_resources.push_back(QuicInMemoryCache::ServerPushInfo(
|
| + push_resources.push_back(QuicHttpResponseCache::ServerPushInfo(
|
| resource_url, std::move(response_headers), kV3LowestPriority, body));
|
| }
|
|
|
| - in_memory_cache_.AddSimpleResponseWithServerPushResources(
|
| + response_cache_.AddSimpleResponseWithServerPushResources(
|
| host, path, 200, response_body, push_resources);
|
| }
|
| };
|
| @@ -2565,7 +2549,7 @@ INSTANTIATE_TEST_CASE_P(EndToEndTestsServerPush,
|
|
|
| TEST_P(EndToEndTestServerPush, ServerPush) {
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
|
| SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
|
| @@ -2612,7 +2596,7 @@ TEST_P(EndToEndTestServerPush, ServerPushUnderLimit) {
|
| // them with requests later.
|
| ASSERT_TRUE(Initialize());
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
|
| SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
|
| @@ -2659,7 +2643,7 @@ TEST_P(EndToEndTestServerPush, ServerPushOverLimitNonBlocking) {
|
| // streams should still work because all response streams get closed
|
| // immediately after pushing resources.
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
|
| SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
|
| @@ -2717,7 +2701,7 @@ TEST_P(EndToEndTestServerPush, ServerPushOverLimitWithBlocking) {
|
| kBodySize * kNumMaxStreams + 1024);
|
|
|
| ASSERT_TRUE(Initialize());
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
|
|
| // Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
|
| SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
|
| @@ -2830,7 +2814,7 @@ TEST_P(EndToEndTest, DISABLED_TestHugePostWithPacketLoss) {
|
| // within a short time.
|
| client_->epoll_server()->set_timeout_in_us(0);
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| SetPacketLossPercentage(1);
|
| // 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.
|
| @@ -2838,8 +2822,7 @@ TEST_P(EndToEndTest, DISABLED_TestHugePostWithPacketLoss) {
|
| // 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);
|
| - string body;
|
| - GenerateBody(&body, kSizeBytes);
|
| + string body(kSizeBytes, 'a');
|
|
|
| SpdyHeaderBlock headers;
|
| headers[":method"] = "POST";
|
| @@ -2888,7 +2871,7 @@ TEST_P(EndToEndTest, DISABLED_TestHugeResponseWithPacketLoss) {
|
| initialized_ = true;
|
| ASSERT_TRUE(client_->client()->connected());
|
|
|
| - client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
|
| SetPacketLossPercentage(1);
|
| client_->SendRequest("/huge_response");
|
| client_->WaitForResponse();
|
|
|