| Index: net/tools/quic/quic_simple_server_stream_test.cc
|
| diff --git a/net/tools/quic/quic_simple_server_stream_test.cc b/net/tools/quic/quic_simple_server_stream_test.cc
|
| index 191f5d229d3e44199c3dba654f3b000aabcf1c80..5161c9f223cc8fdf397343a4cdff4a948e5866fb 100644
|
| --- a/net/tools/quic/quic_simple_server_stream_test.cc
|
| +++ b/net/tools/quic/quic_simple_server_stream_test.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "net/tools/quic/quic_simple_server_stream.h"
|
|
|
| +#include <utility>
|
| +
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_piece.h"
|
| #include "net/quic/quic_connection.h"
|
| @@ -120,9 +122,19 @@ class MockQuicSimpleServerSession : public QuicSimpleServerSession {
|
| void(QuicStreamId stream_id, SpdyPriority priority));
|
| MOCK_METHOD3(OnStreamHeadersComplete,
|
| void(QuicStreamId stream_id, bool fin, size_t frame_len));
|
| - MOCK_METHOD5(WriteHeaders,
|
| + // Methods taking non-copyable types like SpdyHeaderBlock by value cannot be
|
| + // mocked directly.
|
| + size_t WriteHeaders(
|
| + QuicStreamId id,
|
| + SpdyHeaderBlock headers,
|
| + bool fin,
|
| + SpdyPriority priority,
|
| + QuicAckListenerInterface* ack_notifier_delegate) override {
|
| + return WriteHeadersMock(id, headers, fin, priority, ack_notifier_delegate);
|
| + }
|
| + MOCK_METHOD5(WriteHeadersMock,
|
| size_t(QuicStreamId id,
|
| - SpdyHeaderBlock headers,
|
| + const SpdyHeaderBlock& headers,
|
| bool fin,
|
| SpdyPriority priority,
|
| QuicAckListenerInterface* ack_notifier_delegate));
|
| @@ -131,7 +143,17 @@ class MockQuicSimpleServerSession : public QuicSimpleServerSession {
|
| QuicRstStreamErrorCode error,
|
| QuicStreamOffset bytes_written));
|
| MOCK_METHOD1(OnHeadersHeadOfLineBlocking, void(QuicTime::Delta delta));
|
| - MOCK_METHOD4(PromisePushResources,
|
| + // Matchers cannot be used on non-copyable types like SpdyHeaderBlock.
|
| + void PromisePushResources(
|
| + const string& request_url,
|
| + const std::list<QuicInMemoryCache::ServerPushInfo>& resources,
|
| + QuicStreamId original_stream_id,
|
| + const SpdyHeaderBlock& original_request_headers) override {
|
| + original_request_headers_ = original_request_headers.Clone();
|
| + PromisePushResourcesMock(request_url, resources, original_stream_id,
|
| + original_request_headers);
|
| + }
|
| + MOCK_METHOD4(PromisePushResourcesMock,
|
| void(const string&,
|
| const std::list<QuicInMemoryCache::ServerPushInfo>&,
|
| QuicStreamId,
|
| @@ -139,6 +161,8 @@ class MockQuicSimpleServerSession : public QuicSimpleServerSession {
|
|
|
| using QuicSession::ActivateStream;
|
|
|
| + SpdyHeaderBlock original_request_headers_;
|
| +
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(MockQuicSimpleServerSession);
|
| };
|
| @@ -274,7 +298,7 @@ TEST_P(QuicSimpleServerStreamTest, TestFramingExtraData) {
|
| string large_body = "hello world!!!!!!";
|
|
|
| // We'll automatically write out an error (headers + body)
|
| - EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _));
|
| + EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
|
| EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
|
| .WillOnce(Invoke(MockQuicSession::ConsumeAllData));
|
| EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
|
| @@ -305,13 +329,13 @@ TEST_P(QuicSimpleServerStreamTest, SendResponseWithIllegalResponseStatus) {
|
| response_headers_[":status"] = "200 OK";
|
| response_headers_["content-length"] = "5";
|
| string body = "Yummm";
|
| - QuicInMemoryCache::GetInstance()->AddResponse("www.google.com", "/bar",
|
| - response_headers_, body);
|
| + QuicInMemoryCache::GetInstance()->AddResponse(
|
| + "www.google.com", "/bar", std::move(response_headers_), body);
|
|
|
| stream_->set_fin_received(true);
|
|
|
| InSequence s;
|
| - EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr));
|
| + EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
|
| EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
|
| .Times(1)
|
| .WillOnce(Return(QuicConsumedData(
|
| @@ -336,13 +360,13 @@ TEST_P(QuicSimpleServerStreamTest, SendResponseWithIllegalResponseStatus2) {
|
| response_headers_[":status"] = "+200";
|
| response_headers_["content-length"] = "5";
|
| string body = "Yummm";
|
| - QuicInMemoryCache::GetInstance()->AddResponse("www.google.com", "/bar",
|
| - response_headers_, body);
|
| + QuicInMemoryCache::GetInstance()->AddResponse(
|
| + "www.google.com", "/bar", std::move(response_headers_), body);
|
|
|
| stream_->set_fin_received(true);
|
|
|
| InSequence s;
|
| - EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr));
|
| + EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
|
| EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
|
| .Times(1)
|
| .WillOnce(Return(QuicConsumedData(
|
| @@ -372,8 +396,8 @@ TEST_P(QuicSimpleServerStreamTest, SendPushResponseWith404Response) {
|
| response_headers_[":status"] = "404";
|
| response_headers_["content-length"] = "8";
|
| string body = "NotFound";
|
| - QuicInMemoryCache::GetInstance()->AddResponse("www.google.com", "/bar",
|
| - response_headers_, body);
|
| + QuicInMemoryCache::GetInstance()->AddResponse(
|
| + "www.google.com", "/bar", std::move(response_headers_), body);
|
|
|
| InSequence s;
|
| EXPECT_CALL(session_,
|
| @@ -394,12 +418,12 @@ TEST_P(QuicSimpleServerStreamTest, SendResponseWithValidHeaders) {
|
| response_headers_[":status"] = "200";
|
| response_headers_["content-length"] = "5";
|
| string body = "Yummm";
|
| - QuicInMemoryCache::GetInstance()->AddResponse("www.google.com", "/bar",
|
| - response_headers_, body);
|
| + QuicInMemoryCache::GetInstance()->AddResponse(
|
| + "www.google.com", "/bar", std::move(response_headers_), body);
|
| stream_->set_fin_received(true);
|
|
|
| InSequence s;
|
| - EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr));
|
| + EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
|
| EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
|
| .Times(1)
|
| .WillOnce(Return(QuicConsumedData(body.length(), true)));
|
| @@ -418,9 +442,8 @@ TEST_P(QuicSimpleServerStreamTest, SendReponseWithPushResources) {
|
| string host = "www.google.com";
|
| string request_path = "/foo";
|
| string body = "Yummm";
|
| - SpdyHeaderBlock response_headers;
|
| string url = host + "/bar";
|
| - QuicInMemoryCache::ServerPushInfo push_info(GURL(url), response_headers,
|
| + QuicInMemoryCache::ServerPushInfo push_info(GURL(url), SpdyHeaderBlock(),
|
| kDefaultPriority, "Push body");
|
| std::list<QuicInMemoryCache::ServerPushInfo> push_resources;
|
| push_resources.push_back(push_info);
|
| @@ -435,21 +458,21 @@ TEST_P(QuicSimpleServerStreamTest, SendReponseWithPushResources) {
|
|
|
| stream_->set_fin_received(true);
|
| InSequence s;
|
| - EXPECT_CALL(session_, PromisePushResources(host + request_path, _,
|
| - ::net::test::kClientDataStreamId1,
|
| - *request_headers));
|
| - EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr));
|
| + EXPECT_CALL(session_,
|
| + PromisePushResourcesMock(host + request_path, _,
|
| + ::net::test::kClientDataStreamId1, _));
|
| + EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
|
| EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
|
| .Times(1)
|
| .WillOnce(Return(QuicConsumedData(body.length(), true)));
|
| QuicSimpleServerStreamPeer::SendResponse(stream_);
|
| + EXPECT_EQ(*request_headers, session_.original_request_headers_);
|
| }
|
|
|
| TEST_P(QuicSimpleServerStreamTest, PushResponseOnClientInitiatedStream) {
|
| // Calling PushResponse() on a client initialted stream is never supposed to
|
| // happen.
|
| - SpdyHeaderBlock headers;
|
| - EXPECT_DFATAL(stream_->PushResponse(headers),
|
| + EXPECT_DFATAL(stream_->PushResponse(SpdyHeaderBlock()),
|
| "Client initiated stream"
|
| " shouldn't be used as promised stream.");
|
| }
|
| @@ -477,18 +500,18 @@ TEST_P(QuicSimpleServerStreamTest, PushResponseOnServerInitiatedStream) {
|
| response_headers_[":status"] = "200";
|
| response_headers_["content-length"] = "5";
|
| const string kBody = "Hello";
|
| - QuicInMemoryCache::GetInstance()->AddResponse(kHost, kPath, response_headers_,
|
| - kBody);
|
| + QuicInMemoryCache::GetInstance()->AddResponse(
|
| + kHost, kPath, std::move(response_headers_), kBody);
|
|
|
| // Call PushResponse() should trigger stream to fetch response from cache
|
| // and send it back.
|
| EXPECT_CALL(session_,
|
| - WriteHeaders(kServerInitiatedStreamId, _, false,
|
| - server_initiated_stream->priority(), nullptr));
|
| + WriteHeadersMock(kServerInitiatedStreamId, _, false,
|
| + server_initiated_stream->priority(), nullptr));
|
| EXPECT_CALL(session_, WritevData(_, kServerInitiatedStreamId, _, _, _, _))
|
| .Times(1)
|
| .WillOnce(Return(QuicConsumedData(kBody.size(), true)));
|
| - server_initiated_stream->PushResponse(headers);
|
| + server_initiated_stream->PushResponse(std::move(headers));
|
| EXPECT_EQ(kPath, QuicSimpleServerStreamPeer::headers(
|
| server_initiated_stream)[":path"]
|
| .as_string());
|
| @@ -500,13 +523,10 @@ TEST_P(QuicSimpleServerStreamTest, PushResponseOnServerInitiatedStream) {
|
| TEST_P(QuicSimpleServerStreamTest, TestSendErrorResponse) {
|
| EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
|
|
|
| - response_headers_[":version"] = "HTTP/1.1";
|
| - response_headers_[":status"] = "500 Server Error";
|
| - response_headers_["content-length"] = "3";
|
| stream_->set_fin_received(true);
|
|
|
| InSequence s;
|
| - EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _));
|
| + EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
|
| EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
|
| .Times(1)
|
| .WillOnce(Return(QuicConsumedData(3, true)));
|
| @@ -526,7 +546,7 @@ TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLength) {
|
|
|
| headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
|
|
|
| - EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _));
|
| + EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
|
| EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
|
| .Times(AnyNumber())
|
| .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
|
| @@ -547,7 +567,7 @@ TEST_P(QuicSimpleServerStreamTest, InvalidLeadingNullContentLength) {
|
|
|
| headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
|
|
|
| - EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _));
|
| + EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
|
| EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
|
| .Times(AnyNumber())
|
| .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
|
| @@ -576,12 +596,8 @@ TEST_P(QuicSimpleServerStreamTest, ValidMultipleContentLength) {
|
| }
|
|
|
| TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) {
|
| - response_headers_[":version"] = "HTTP/1.1";
|
| - response_headers_[":status"] = "500 Server Error";
|
| - response_headers_["content-length"] = "3";
|
| -
|
| InSequence s;
|
| - EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, _, _, _));
|
| + EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
|
| EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
|
| .Times(1)
|
| .WillOnce(Return(QuicConsumedData(3, true)));
|
| @@ -598,10 +614,6 @@ TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) {
|
|
|
| TEST_P(QuicSimpleServerStreamTest,
|
| DoNotSendQuicRstStreamNoErrorWithRstReceived) {
|
| - response_headers_[":version"] = "HTTP/1.1";
|
| - response_headers_[":status"] = "500 Server Error";
|
| - response_headers_["content-length"] = "3";
|
| -
|
| InSequence s;
|
| EXPECT_FALSE(stream_->reading_stopped());
|
|
|
|
|