| Index: net/http/http_stream_parser_unittest.cc
|
| diff --git a/net/http/http_stream_parser_unittest.cc b/net/http/http_stream_parser_unittest.cc
|
| index dcaf1f3e9c3f1fdaf0592f7dae1eb50e9c00f17d..ebee782b0eb5c82c50cb7ebc142edb64f96a147c 100644
|
| --- a/net/http/http_stream_parser_unittest.cc
|
| +++ b/net/http/http_stream_parser_unittest.cc
|
| @@ -99,8 +99,8 @@ TEST(HttpStreamParser, EncodeChunk_TooLargePayload) {
|
|
|
| TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_NoBody) {
|
| // Shouldn't be merged if upload data is non-existent.
|
| - ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody(
|
| - "some header", NULL));
|
| + ASSERT_FALSE(
|
| + HttpStreamParser::ShouldMergeRequestHeadersAndBody("some header", NULL));
|
| }
|
|
|
| TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_EmptyBody) {
|
| @@ -109,8 +109,8 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_EmptyBody) {
|
| new UploadDataStream(element_readers.Pass(), 0));
|
| ASSERT_EQ(OK, body->Init(CompletionCallback()));
|
| // Shouldn't be merged if upload data is empty.
|
| - ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody(
|
| - "some header", body.get()));
|
| + ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody("some header",
|
| + body.get()));
|
| }
|
|
|
| TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_ChunkedBody) {
|
| @@ -120,8 +120,8 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_ChunkedBody) {
|
| body->AppendChunk(payload.data(), payload.size(), true);
|
| ASSERT_EQ(OK, body->Init(CompletionCallback()));
|
| // Shouldn't be merged if upload data carries chunked data.
|
| - ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody(
|
| - "some header", body.get()));
|
| + ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody("some header",
|
| + body.get()));
|
| }
|
|
|
| TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_FileBody) {
|
| @@ -132,8 +132,8 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_FileBody) {
|
| base::ScopedTempDir temp_dir;
|
| ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
|
| base::FilePath temp_file_path;
|
| - ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir.path(),
|
| - &temp_file_path));
|
| + ASSERT_TRUE(
|
| + base::CreateTemporaryFileInDir(temp_dir.path(), &temp_file_path));
|
|
|
| element_readers.push_back(
|
| new UploadFileElementReader(base::MessageLoopProxy::current().get(),
|
| @@ -158,29 +158,29 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_FileBody) {
|
| TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_SmallBodyInMemory) {
|
| ScopedVector<UploadElementReader> element_readers;
|
| const std::string payload = "123";
|
| - element_readers.push_back(new UploadBytesElementReader(
|
| - payload.data(), payload.size()));
|
| + element_readers.push_back(
|
| + new UploadBytesElementReader(payload.data(), payload.size()));
|
|
|
| scoped_ptr<UploadDataStream> body(
|
| new UploadDataStream(element_readers.Pass(), 0));
|
| ASSERT_EQ(OK, body->Init(CompletionCallback()));
|
| // Yes, should be merged if the in-memory body is small here.
|
| - ASSERT_TRUE(HttpStreamParser::ShouldMergeRequestHeadersAndBody(
|
| - "some header", body.get()));
|
| + ASSERT_TRUE(HttpStreamParser::ShouldMergeRequestHeadersAndBody("some header",
|
| + body.get()));
|
| }
|
|
|
| TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_LargeBodyInMemory) {
|
| ScopedVector<UploadElementReader> element_readers;
|
| const std::string payload(10000, 'a'); // 'a' x 10000.
|
| - element_readers.push_back(new UploadBytesElementReader(
|
| - payload.data(), payload.size()));
|
| + element_readers.push_back(
|
| + new UploadBytesElementReader(payload.data(), payload.size()));
|
|
|
| scoped_ptr<UploadDataStream> body(
|
| new UploadDataStream(element_readers.Pass(), 0));
|
| ASSERT_EQ(OK, body->Init(CompletionCallback()));
|
| // Shouldn't be merged if the in-memory body is large here.
|
| - ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody(
|
| - "some header", body.get()));
|
| + ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody("some header",
|
| + body.get()));
|
| }
|
|
|
| // Test to ensure the HttpStreamParser state machine does not get confused
|
| @@ -196,15 +196,15 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocket) {
|
| static const char kChunk3[] = "Test 3";
|
|
|
| MockWrite writes[] = {
|
| - MockWrite(ASYNC, 0,
|
| - "GET /one.html HTTP/1.1\r\n"
|
| - "Host: localhost\r\n"
|
| - "Transfer-Encoding: chunked\r\n"
|
| - "Connection: keep-alive\r\n\r\n"),
|
| - MockWrite(ASYNC, 1, "7\r\nChunk 1\r\n"),
|
| - MockWrite(ASYNC, 2, "8\r\nChunky 2\r\n"),
|
| - MockWrite(ASYNC, 3, "6\r\nTest 3\r\n"),
|
| - MockWrite(ASYNC, 4, "0\r\n\r\n"),
|
| + MockWrite(ASYNC,
|
| + 0,
|
| + "GET /one.html HTTP/1.1\r\n"
|
| + "Host: localhost\r\n"
|
| + "Transfer-Encoding: chunked\r\n"
|
| + "Connection: keep-alive\r\n\r\n"),
|
| + MockWrite(ASYNC, 1, "7\r\nChunk 1\r\n"),
|
| + MockWrite(ASYNC, 2, "8\r\nChunky 2\r\n"),
|
| + MockWrite(ASYNC, 3, "6\r\nTest 3\r\n"), MockWrite(ASYNC, 4, "0\r\n\r\n"),
|
| };
|
|
|
| // The size of the response body, as reflected in the Content-Length of the
|
| @@ -212,18 +212,17 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocket) {
|
| static const int kBodySize = 8;
|
|
|
| MockRead reads[] = {
|
| - MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\n"),
|
| - MockRead(ASYNC, 6, "Content-Length: 8\r\n\r\n"),
|
| - MockRead(ASYNC, 7, "one.html"),
|
| - MockRead(SYNCHRONOUS, 0, 8), // EOF
|
| + MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\n"),
|
| + MockRead(ASYNC, 6, "Content-Length: 8\r\n\r\n"),
|
| + MockRead(ASYNC, 7, "one.html"), MockRead(SYNCHRONOUS, 0, 8), // EOF
|
| };
|
|
|
| UploadDataStream upload_stream(UploadDataStream::CHUNKED, 0);
|
| upload_stream.AppendChunk(kChunk1, arraysize(kChunk1) - 1, false);
|
| ASSERT_EQ(OK, upload_stream.Init(CompletionCallback()));
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| + DeterministicSocketData data(
|
| + reads, arraysize(reads), writes, arraysize(writes));
|
| data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
|
|
|
| scoped_ptr<DeterministicMockTCPClientSocket> transport(
|
| @@ -256,8 +255,10 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocket) {
|
| HttpResponseInfo response_info;
|
| // This will attempt to Write() the initial request and headers, which will
|
| // complete asynchronously.
|
| - rv = parser.SendRequest("GET /one.html HTTP/1.1\r\n", request_headers,
|
| - &response_info, callback.callback());
|
| + rv = parser.SendRequest("GET /one.html HTTP/1.1\r\n",
|
| + request_headers,
|
| + &response_info,
|
| + callback.callback());
|
| ASSERT_EQ(ERR_IO_PENDING, rv);
|
|
|
| // Complete the initial request write. Additionally, this should enqueue the
|
| @@ -324,46 +325,43 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocket) {
|
|
|
| TEST(HttpStreamParser, TruncatedHeaders) {
|
| MockRead truncated_status_reads[] = {
|
| - MockRead(SYNCHRONOUS, 1, "HTTP/1.1 20"),
|
| - MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| + MockRead(SYNCHRONOUS, 1, "HTTP/1.1 20"),
|
| + MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| };
|
|
|
| MockRead truncated_after_status_reads[] = {
|
| - MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\n"),
|
| - MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| + MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\n"),
|
| + MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| };
|
|
|
| MockRead truncated_in_header_reads[] = {
|
| - MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\nHead"),
|
| - MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| + MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\nHead"),
|
| + MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| };
|
|
|
| MockRead truncated_after_header_reads[] = {
|
| - MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\nHeader: foo\r\n"),
|
| - MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| + MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\nHeader: foo\r\n"),
|
| + MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| };
|
|
|
| MockRead truncated_after_final_newline_reads[] = {
|
| - MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\nHeader: foo\r\n\r"),
|
| - MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| + MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\nHeader: foo\r\n\r"),
|
| + MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| };
|
|
|
| MockRead not_truncated_reads[] = {
|
| - MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\nHeader: foo\r\n\r\n"),
|
| - MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| + MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Ok\r\nHeader: foo\r\n\r\n"),
|
| + MockRead(SYNCHRONOUS, 0, 2), // EOF
|
| };
|
|
|
| MockRead* reads[] = {
|
| - truncated_status_reads,
|
| - truncated_after_status_reads,
|
| - truncated_in_header_reads,
|
| - truncated_after_header_reads,
|
| - truncated_after_final_newline_reads,
|
| - not_truncated_reads,
|
| + truncated_status_reads, truncated_after_status_reads,
|
| + truncated_in_header_reads, truncated_after_header_reads,
|
| + truncated_after_final_newline_reads, not_truncated_reads,
|
| };
|
|
|
| MockWrite writes[] = {
|
| - MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n\r\n"),
|
| + MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n\r\n"),
|
| };
|
|
|
| enum {
|
| @@ -408,8 +406,10 @@ TEST(HttpStreamParser, TruncatedHeaders) {
|
|
|
| HttpRequestHeaders request_headers;
|
| HttpResponseInfo response_info;
|
| - rv = parser.SendRequest("GET / HTTP/1.1\r\n", request_headers,
|
| - &response_info, callback.callback());
|
| + rv = parser.SendRequest("GET / HTTP/1.1\r\n",
|
| + request_headers,
|
| + &response_info,
|
| + callback.callback());
|
| ASSERT_EQ(OK, rv);
|
|
|
| rv = parser.ReadResponseHeaders(callback.callback());
|
| @@ -433,20 +433,21 @@ TEST(HttpStreamParser, TruncatedHeaders) {
|
| // follows remains in the buffer.
|
| TEST(HttpStreamParser, Websocket101Response) {
|
| MockRead reads[] = {
|
| - MockRead(SYNCHRONOUS, 1,
|
| - "HTTP/1.1 101 Switching Protocols\r\n"
|
| - "Upgrade: websocket\r\n"
|
| - "Connection: Upgrade\r\n"
|
| - "\r\n"
|
| - "a fake websocket frame"),
|
| + MockRead(SYNCHRONOUS,
|
| + 1,
|
| + "HTTP/1.1 101 Switching Protocols\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "\r\n"
|
| + "a fake websocket frame"),
|
| };
|
|
|
| MockWrite writes[] = {
|
| - MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n\r\n"),
|
| + MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n\r\n"),
|
| };
|
|
|
| - DeterministicSocketData data(reads, arraysize(reads),
|
| - writes, arraysize(writes));
|
| + DeterministicSocketData data(
|
| + reads, arraysize(reads), writes, arraysize(writes));
|
| data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
|
| data.SetStop(2);
|
|
|
| @@ -473,8 +474,10 @@ TEST(HttpStreamParser, Websocket101Response) {
|
|
|
| HttpRequestHeaders request_headers;
|
| HttpResponseInfo response_info;
|
| - rv = parser.SendRequest("GET / HTTP/1.1\r\n", request_headers,
|
| - &response_info, callback.callback());
|
| + rv = parser.SendRequest("GET / HTTP/1.1\r\n",
|
| + request_headers,
|
| + &response_info,
|
| + callback.callback());
|
| ASSERT_EQ(OK, rv);
|
|
|
| rv = parser.ReadResponseHeaders(callback.callback());
|
| @@ -484,17 +487,17 @@ TEST(HttpStreamParser, Websocket101Response) {
|
| EXPECT_TRUE(response_info.headers->HasHeaderValue("Connection", "Upgrade"));
|
| EXPECT_TRUE(response_info.headers->HasHeaderValue("Upgrade", "websocket"));
|
| EXPECT_EQ(read_buffer->capacity(), read_buffer->offset());
|
| - EXPECT_EQ("a fake websocket frame",
|
| - base::StringPiece(read_buffer->StartOfBuffer(),
|
| - read_buffer->capacity()));
|
| + EXPECT_EQ(
|
| + "a fake websocket frame",
|
| + base::StringPiece(read_buffer->StartOfBuffer(), read_buffer->capacity()));
|
| }
|
|
|
| // Helper class for constructing HttpStreamParser and running GET requests.
|
| class SimpleGetRunner {
|
| public:
|
| SimpleGetRunner() : read_buffer_(new GrowableIOBuffer), sequence_number_(0) {
|
| - writes_.push_back(MockWrite(
|
| - SYNCHRONOUS, sequence_number_++, "GET / HTTP/1.1\r\n\r\n"));
|
| + writes_.push_back(
|
| + MockWrite(SYNCHRONOUS, sequence_number_++, "GET / HTTP/1.1\r\n\r\n"));
|
| }
|
|
|
| HttpStreamParser* parser() { return parser_.get(); }
|
| @@ -539,8 +542,10 @@ class SimpleGetRunner {
|
| parser_.reset(new HttpStreamParser(
|
| socket_handle_.get(), &request_info_, read_buffer(), BoundNetLog()));
|
|
|
| - rv = parser_->SendRequest("GET / HTTP/1.1\r\n", request_headers_,
|
| - &response_info_, callback.callback());
|
| + rv = parser_->SendRequest("GET / HTTP/1.1\r\n",
|
| + request_headers_,
|
| + &response_info_,
|
| + callback.callback());
|
| ASSERT_EQ(OK, rv);
|
| }
|
|
|
| @@ -595,7 +600,8 @@ TEST(HttpStreamParser, ReceivedBytesNoHeaders) {
|
| // Test basic case where there is no keep-alive or extra data from the socket,
|
| // and the entire response is received in a single read.
|
| TEST(HttpStreamParser, ReceivedBytesNormal) {
|
| - std::string headers = "HTTP/1.1 200 OK\r\n"
|
| + std::string headers =
|
| + "HTTP/1.1 200 OK\r\n"
|
| "Content-Length: 7\r\n\r\n";
|
| std::string body = "content";
|
| std::string response = headers + body;
|
| @@ -616,7 +622,8 @@ TEST(HttpStreamParser, ReceivedBytesNormal) {
|
| // Test that bytes that represent "next" response are not counted
|
| // as current response "received_bytes".
|
| TEST(HttpStreamParser, ReceivedBytesExcludesNextResponse) {
|
| - std::string headers = "HTTP/1.1 200 OK\r\n"
|
| + std::string headers =
|
| + "HTTP/1.1 200 OK\r\n"
|
| "Content-Length: 8\r\n\r\n";
|
| std::string body = "content8";
|
| std::string response = headers + body;
|
| @@ -647,7 +654,8 @@ TEST(HttpStreamParser, ReceivedBytesExcludesNextResponse) {
|
| // We setup user read buffer so it fully accepts the beginnig of response
|
| // body, but it is larger that remaining part of body.
|
| TEST(HttpStreamParser, ReceivedBytesMultiReadExcludesNextResponse) {
|
| - std::string headers = "HTTP/1.1 200 OK\r\n"
|
| + std::string headers =
|
| + "HTTP/1.1 200 OK\r\n"
|
| "Content-Length: 36\r\n\r\n";
|
| int64 user_buf_len = 32;
|
| std::string body_start = std::string(user_buf_len, '#');
|
| @@ -679,7 +687,8 @@ TEST(HttpStreamParser, ReceivedBytesMultiReadExcludesNextResponse) {
|
| // In this case read buffer contains two responses. We expect that only
|
| // bytes that correspond to the first one are taken into account.
|
| TEST(HttpStreamParser, ReceivedBytesFromReadBufExcludesNextResponse) {
|
| - std::string headers = "HTTP/1.1 200 OK\r\n"
|
| + std::string headers =
|
| + "HTTP/1.1 200 OK\r\n"
|
| "Content-Length: 7\r\n\r\n";
|
| std::string body = "content";
|
| std::string response = headers + body;
|
| @@ -726,7 +735,8 @@ TEST(HttpStreamParser, ReceivedBytesUseReadBuf) {
|
| // Test the case when the resulting read_buf contains both unused bytes and
|
| // bytes ejected by chunked-encoding filter.
|
| TEST(HttpStreamParser, ReceivedBytesChunkedTransferExcludesNextResponse) {
|
| - std::string response = "HTTP/1.1 200 OK\r\n"
|
| + std::string response =
|
| + "HTTP/1.1 200 OK\r\n"
|
| "Transfer-Encoding: chunked\r\n\r\n"
|
| "7\r\nChunk 1\r\n"
|
| "8\r\nChunky 2\r\n"
|
| @@ -751,9 +761,11 @@ TEST(HttpStreamParser, ReceivedBytesChunkedTransferExcludesNextResponse) {
|
| // We feed data into 4-bytes reads. Also we set length of read
|
| // buffer to 5-bytes to test all possible buffer misaligments.
|
| TEST(HttpStreamParser, ReceivedBytesMultipleReads) {
|
| - std::string headers = "HTTP/1.1 200 OK\r\n"
|
| + std::string headers =
|
| + "HTTP/1.1 200 OK\r\n"
|
| "Content-Length: 33\r\n\r\n";
|
| - std::string body = "foo bar baz\r\n"
|
| + std::string body =
|
| + "foo bar baz\r\n"
|
| "sputnik mir babushka";
|
| std::string response = headers + body;
|
|
|
| @@ -780,7 +792,8 @@ TEST(HttpStreamParser, ReceivedBytesMultipleReads) {
|
| // Test that "continue" HTTP header is counted as "received_bytes".
|
| TEST(HttpStreamParser, ReceivedBytesIncludesContinueHeader) {
|
| std::string status100 = "HTTP/1.1 100 OK\r\n\r\n";
|
| - std::string headers = "HTTP/1.1 200 OK\r\n"
|
| + std::string headers =
|
| + "HTTP/1.1 200 OK\r\n"
|
| "Content-Length: 7\r\n\r\n";
|
| int64 headers_size = status100.size() + headers.size();
|
| std::string body = "content";
|
|
|