Chromium Code Reviews| Index: net/http/http_network_transaction_unittest.cc |
| diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc |
| index 14bda39448d3534d25d6c6b5e742fb08a47b8f07..b4ea4db15bea58f53012f51c0ec4b3ccb4dbc291 100644 |
| --- a/net/http/http_network_transaction_unittest.cc |
| +++ b/net/http/http_network_transaction_unittest.cc |
| @@ -265,7 +265,8 @@ class HttpNetworkTransactionTest |
| int rv; |
| std::string status_line; |
| std::string response_data; |
| - int64 totalReceivedBytes; |
| + int64_t total_received_bytes; |
| + int64_t total_sent_bytes; |
| LoadTimingInfo load_timing_info; |
| ConnectionAttempts connection_attempts; |
| }; |
| @@ -341,6 +342,8 @@ class HttpNetworkTransactionTest |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| out.rv = callback.WaitForResult(); |
| + out.total_sent_bytes = trans->GetTotalSentBytes(); |
| + out.total_received_bytes = trans->GetTotalReceivedBytes(); |
|
mmenke
2015/09/04 15:21:49
Nit: Received is before sent everywhere else (In
sclittle
2015/09/04 22:03:10
Done.
|
| // Even in the failure cases that use this function, connections are always |
| // successfully established before the error. |
| @@ -392,23 +395,34 @@ class HttpNetworkTransactionTest |
| EXPECT_EQ("['Host: www.example.org','Connection: keep-alive']", |
| response_headers); |
| - out.totalReceivedBytes = trans->GetTotalReceivedBytes(); |
| + EXPECT_EQ( |
| + static_cast<int64_t>(line.size() + request_headers.ToString().size()), |
|
mmenke
2015/09/04 15:21:49
We really should not be depending on GetFullReques
sclittle
2015/09/04 22:03:10
You're right, removed this. I forgot to remove thi
|
| + trans->GetTotalSentBytes()); |
| + |
| + // The total number of sent bytes should not have changed. |
| + EXPECT_EQ(out.total_sent_bytes, trans->GetTotalSentBytes()); |
| + |
| + out.total_received_bytes = trans->GetTotalReceivedBytes(); |
| trans->GetConnectionAttempts(&out.connection_attempts); |
| return out; |
| } |
| SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], |
| size_t reads_count) { |
| - StaticSocketDataProvider reads(data_reads, reads_count, NULL, 0); |
| - StaticSocketDataProvider* data[] = { &reads }; |
| - return SimpleGetHelperForData(data, 1); |
| - } |
| + MockWrite data_writes[] = { |
| + MockWrite("GET / HTTP/1.1\r\n" |
| + "Host: www.example.org\r\n" |
| + "Connection: keep-alive\r\n\r\n"), |
| + }; |
|
mmenke
2015/09/04 15:21:49
So I guess no tests that use this method use SPDY
sclittle
2015/09/04 22:03:10
That's correct.
|
| - int64 ReadsSize(MockRead data_reads[], size_t reads_count) { |
| - int64 size = 0; |
| - for (size_t i = 0; i < reads_count; ++i) |
| - size += data_reads[i].data_len; |
| - return size; |
| + StaticSocketDataProvider reads(data_reads, reads_count, data_writes, |
| + arraysize(data_writes)); |
| + StaticSocketDataProvider* data[] = {&reads}; |
| + SimpleGetHelperResult out = SimpleGetHelperForData(data, 1); |
| + |
| + EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
| + out.total_sent_bytes); |
| + return out; |
| } |
| void ConnectStatusHelperWithExpectedStatus(const MockRead& status, |
| @@ -679,8 +693,8 @@ TEST_P(HttpNetworkTransactionTest, SimpleGET) { |
| EXPECT_EQ(OK, out.rv); |
| EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| EXPECT_EQ("hello world", out.response_data); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| - EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| + EXPECT_EQ(reads_size, out.total_received_bytes); |
| EXPECT_EQ(0u, out.connection_attempts.size()); |
| } |
| @@ -695,8 +709,8 @@ TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { |
| EXPECT_EQ(OK, out.rv); |
| EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
| EXPECT_EQ("hello world", out.response_data); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| - EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| + EXPECT_EQ(reads_size, out.total_received_bytes); |
| } |
| // Allow up to 4 bytes of junk to precede status line. |
| @@ -710,8 +724,8 @@ TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { |
| EXPECT_EQ(OK, out.rv); |
| EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
| EXPECT_EQ("DATA", out.response_data); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| - EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| + EXPECT_EQ(reads_size, out.total_received_bytes); |
| } |
| // Allow up to 4 bytes of junk to precede status line. |
| @@ -725,8 +739,8 @@ TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { |
| EXPECT_EQ(OK, out.rv); |
| EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
| EXPECT_EQ("DATA", out.response_data); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| - EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| + EXPECT_EQ(reads_size, out.total_received_bytes); |
| } |
| // Beyond 4 bytes of slop and it should fail to find a status line. |
| @@ -740,8 +754,8 @@ TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { |
| EXPECT_EQ(OK, out.rv); |
| EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
| EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| - EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| + EXPECT_EQ(reads_size, out.total_received_bytes); |
| } |
| // Same as StatusLineJunk4Bytes, except the read chunks are smaller. |
| @@ -759,8 +773,8 @@ TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { |
| EXPECT_EQ(OK, out.rv); |
| EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
| EXPECT_EQ("DATA", out.response_data); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| - EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| + EXPECT_EQ(reads_size, out.total_received_bytes); |
| } |
| // Close the connection before enough bytes to have a status line. |
| @@ -774,8 +788,8 @@ TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { |
| EXPECT_EQ(OK, out.rv); |
| EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
| EXPECT_EQ("HTT", out.response_data); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| - EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| + EXPECT_EQ(reads_size, out.total_received_bytes); |
| } |
| // Simulate a 204 response, lacking a Content-Length header, sent over a |
| @@ -793,9 +807,9 @@ TEST_P(HttpNetworkTransactionTest, StopsReading204) { |
| EXPECT_EQ(OK, out.rv); |
| EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); |
| EXPECT_EQ("", out.response_data); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| - int64 response_size = reads_size - strlen(junk); |
| - EXPECT_EQ(response_size, out.totalReceivedBytes); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| + int64_t response_size = reads_size - strlen(junk); |
| + EXPECT_EQ(response_size, out.total_received_bytes); |
| } |
| // A simple request using chunked encoding with some extra data after. |
| @@ -817,9 +831,9 @@ TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { |
| EXPECT_EQ(OK, out.rv); |
| EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| EXPECT_EQ("Hello world", out.response_data); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| - int64 response_size = reads_size - extra_data.size(); |
| - EXPECT_EQ(response_size, out.totalReceivedBytes); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| + int64_t response_size = reads_size - extra_data.size(); |
| + EXPECT_EQ(response_size, out.total_received_bytes); |
| } |
| // Next tests deal with http://crbug.com/56344. |
| @@ -1955,7 +1969,9 @@ TEST_P(HttpNetworkTransactionTest, BasicAuth) { |
| EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); |
| TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); |
| - int64 reads_size1 = ReadsSize(data_reads1, arraysize(data_reads1)); |
| + int64_t writes_size1 = CountWriteBytes(data_writes1, arraysize(data_writes1)); |
| + EXPECT_EQ(writes_size1, trans->GetTotalSentBytes()); |
| + int64_t reads_size1 = CountReadBytes(data_reads1, arraysize(data_reads1)); |
| EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); |
| const HttpResponseInfo* response = trans->GetResponseInfo(); |
| @@ -1980,7 +1996,9 @@ TEST_P(HttpNetworkTransactionTest, BasicAuth) { |
| load_timing_info2.connect_timing.connect_start); |
| EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
| - int64 reads_size2 = ReadsSize(data_reads2, arraysize(data_reads2)); |
| + int64_t writes_size2 = CountWriteBytes(data_writes2, arraysize(data_writes2)); |
| + EXPECT_EQ(writes_size1 + writes_size2, trans->GetTotalSentBytes()); |
| + int64_t reads_size2 = CountReadBytes(data_reads2, arraysize(data_reads2)); |
| EXPECT_EQ(reads_size1 + reads_size2, trans->GetTotalReceivedBytes()); |
| response = trans->GetResponseInfo(); |
| @@ -2026,7 +2044,9 @@ TEST_P(HttpNetworkTransactionTest, DoNotSendAuth) { |
| rv = callback.WaitForResult(); |
| EXPECT_EQ(0, rv); |
| - int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| + int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); |
| + EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); |
| + int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
| EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); |
| const HttpResponseInfo* response = trans->GetResponseInfo(); |
| @@ -2132,7 +2152,10 @@ TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAlive) { |
| std::string response_data; |
| rv = ReadTransaction(trans.get(), &response_data); |
| EXPECT_EQ(OK, rv); |
| - int64 reads_size1 = ReadsSize(data_reads1, arraysize(data_reads1)); |
| + |
| + int64_t writes_size1 = CountWriteBytes(data_writes1, arraysize(data_writes1)); |
| + EXPECT_EQ(writes_size1, trans->GetTotalSentBytes()); |
| + int64_t reads_size1 = CountReadBytes(data_reads1, arraysize(data_reads1)); |
| EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); |
| } |
| @@ -14584,4 +14607,145 @@ TEST_P(HttpNetworkTransactionTest, ProxyHeadersNotSentOverWsTunnel) { |
| session->CloseAllConnections(); |
| } |
| +TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesPost) { |
| + ScopedVector<UploadElementReader> element_readers; |
| + element_readers.push_back(new UploadBytesElementReader("foo", 3)); |
| + ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); |
| + |
| + HttpRequestInfo request; |
| + request.method = "POST"; |
| + request.url = GURL("http://www.foo.com/"); |
| + request.upload_data_stream = &upload_data_stream; |
| + |
| + scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| + scoped_ptr<HttpTransaction> trans( |
| + new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| + MockWrite data_writes[] = { |
| + MockWrite("POST / HTTP/1.1\r\n" |
| + "Host: www.foo.com\r\n" |
| + "Connection: keep-alive\r\n" |
| + "Content-Length: 3\r\n\r\n"), |
| + MockWrite("foo"), |
| + }; |
| + |
| + MockRead data_reads[] = { |
| + MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| + MockRead(SYNCHRONOUS, OK), |
| + }; |
| + StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| + arraysize(data_writes)); |
| + session_deps_.socket_factory->AddSocketDataProvider(&data); |
| + |
| + TestCompletionCallback callback; |
| + |
| + EXPECT_EQ(ERR_IO_PENDING, |
| + trans->Start(&request, callback.callback(), BoundNetLog())); |
| + EXPECT_EQ(OK, callback.WaitForResult()); |
| + |
| + std::string response_data; |
| + EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| + |
| + EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
| + trans->GetTotalSentBytes()); |
| + EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
| + trans->GetTotalReceivedBytes()); |
| +} |
| + |
| +TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesPost100Continue) { |
| + ScopedVector<UploadElementReader> element_readers; |
| + element_readers.push_back(new UploadBytesElementReader("foo", 3)); |
| + ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); |
| + |
| + HttpRequestInfo request; |
| + request.method = "POST"; |
| + request.url = GURL("http://www.foo.com/"); |
| + request.upload_data_stream = &upload_data_stream; |
| + |
| + scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| + scoped_ptr<HttpTransaction> trans( |
| + new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| + MockWrite data_writes[] = { |
| + MockWrite("POST / HTTP/1.1\r\n" |
| + "Host: www.foo.com\r\n" |
| + "Connection: keep-alive\r\n" |
| + "Content-Length: 3\r\n\r\n"), |
| + MockWrite("foo"), |
| + }; |
| + |
| + MockRead data_reads[] = { |
| + MockRead("HTTP/1.1 100 Continue\r\n\r\n"), |
| + MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
|
mmenke
2015/09/04 15:21:49
Second mock read should be on next line...Or does
sclittle
2015/09/04 22:03:10
git cl format did this.
|
| + MockRead(SYNCHRONOUS, OK), |
| + }; |
| + StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| + arraysize(data_writes)); |
| + session_deps_.socket_factory->AddSocketDataProvider(&data); |
| + |
| + TestCompletionCallback callback; |
| + |
| + EXPECT_EQ(ERR_IO_PENDING, |
| + trans->Start(&request, callback.callback(), BoundNetLog())); |
| + EXPECT_EQ(OK, callback.WaitForResult()); |
| + |
| + std::string response_data; |
| + EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| + |
| + EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
| + trans->GetTotalSentBytes()); |
| + EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
| + trans->GetTotalReceivedBytes()); |
| +} |
| + |
| +TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesChunkedPost) { |
| + ScopedVector<UploadElementReader> element_readers; |
| + element_readers.push_back(new UploadBytesElementReader("foo", 3)); |
| + ChunkedUploadDataStream upload_data_stream(0); |
| + |
| + HttpRequestInfo request; |
| + request.method = "POST"; |
| + request.url = GURL("http://www.foo.com/"); |
| + request.upload_data_stream = &upload_data_stream; |
| + |
| + scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| + scoped_ptr<HttpTransaction> trans( |
| + new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| + // Send headers successfully, but get an error while sending the body. |
| + MockWrite data_writes[] = { |
| + MockWrite("POST / HTTP/1.1\r\n" |
| + "Host: www.foo.com\r\n" |
| + "Connection: keep-alive\r\n" |
| + "Transfer-Encoding: chunked\r\n\r\n"), |
| + MockWrite("1\r\nf\r\n"), MockWrite("2\r\noo\r\n"), MockWrite("0\r\n\r\n"), |
| + }; |
| + |
| + MockRead data_reads[] = { |
| + MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| + MockRead(SYNCHRONOUS, OK), |
| + }; |
| + StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
| + arraysize(data_writes)); |
| + session_deps_.socket_factory->AddSocketDataProvider(&data); |
| + |
| + TestCompletionCallback callback; |
| + |
| + EXPECT_EQ(ERR_IO_PENDING, |
| + trans->Start(&request, callback.callback(), BoundNetLog())); |
| + |
| + base::RunLoop().RunUntilIdle(); |
| + upload_data_stream.AppendData("f", 1, false); |
| + |
| + base::RunLoop().RunUntilIdle(); |
| + upload_data_stream.AppendData("oo", 2, true); |
| + |
| + EXPECT_EQ(OK, callback.WaitForResult()); |
| + |
| + std::string response_data; |
| + EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| + |
| + EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
| + trans->GetTotalSentBytes()); |
| + EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
| + trans->GetTotalReceivedBytes()); |
| +} |
| + |
| } // namespace net |