Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Unified Diff: net/http/http_stream_parser_unittest.cc

Issue 1166693004: Use SequencedSocketData in HttpStreamParserTests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 a30cb0091cdb225e21ede3fc1df05a43a7e60008..8590bb45efa0e03ef98f693a5c9edf1453a718cf 100644
--- a/net/http/http_stream_parser_unittest.cc
+++ b/net/http/http_stream_parser_unittest.cc
@@ -43,18 +43,18 @@ const size_t kMaxPayloadSize =
// Helper method to create a connected ClientSocketHandle using |data|.
// Modifies |data|.
scoped_ptr<ClientSocketHandle> CreateConnectedSocketHandle(
- DeterministicSocketData* data) {
+ SequencedSocketData* data) {
data->set_connect_data(MockConnect(SYNCHRONOUS, OK));
- scoped_ptr<DeterministicMockTCPClientSocket> transport(
- new DeterministicMockTCPClientSocket(nullptr, data));
- data->set_delegate(transport->AsWeakPtr());
+ scoped_ptr<MockTCPClientSocket> socket(
+ new MockTCPClientSocket(net::AddressList(), nullptr, data));
+ data->set_socket(socket.get());
TestCompletionCallback callback;
- EXPECT_EQ(OK, transport->Connect(callback.callback()));
+ EXPECT_EQ(OK, socket->Connect(callback.callback()));
scoped_ptr<ClientSocketHandle> socket_handle(new ClientSocketHandle);
- socket_handle->SetSocket(transport.Pass());
+ socket_handle->SetSocket(socket.Pass());
return socket_handle.Pass();
}
@@ -229,8 +229,7 @@ TEST(HttpStreamParser, AsyncSingleChunkAndAsyncSocket) {
ChunkedUploadDataStream upload_stream(0);
ASSERT_EQ(OK, upload_stream.Init(TestCompletionCallback().callback()));
- DeterministicSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
scoped_ptr<ClientSocketHandle> socket_handle =
CreateConnectedSocketHandle(&data);
@@ -254,25 +253,16 @@ TEST(HttpStreamParser, AsyncSingleChunkAndAsyncSocket) {
parser.SendRequest("GET /one.html HTTP/1.1\r\n", request_headers,
&response_info, callback.callback()));
- // Complete the initial request write.
- data.RunFor(1);
+ // Complete the initial request write. Callback should not have been invoked.
+ base::RunLoop().RunUntilIdle();
ASSERT_FALSE(callback.have_result());
- // Now append the only chunk.
+ // Now append the only chunk and wait for the callback.
upload_stream.AppendData(kChunk, arraysize(kChunk) - 1, true);
- // Write the chunk.
- data.RunFor(1);
- ASSERT_FALSE(callback.have_result());
-
- // Write the trailer.
- data.RunFor(1);
- ASSERT_TRUE(callback.have_result());
ASSERT_EQ(OK, callback.WaitForResult());
// Attempt to read the response status and the response headers.
ASSERT_EQ(ERR_IO_PENDING, parser.ReadResponseHeaders(callback.callback()));
- data.RunFor(2);
- ASSERT_TRUE(callback.have_result());
ASSERT_GT(callback.WaitForResult(), 0);
// Finally, attempt to read the response body.
@@ -280,8 +270,6 @@ TEST(HttpStreamParser, AsyncSingleChunkAndAsyncSocket) {
ASSERT_EQ(ERR_IO_PENDING,
parser.ReadResponseBody(body_buffer.get(), kBodySize,
callback.callback()));
- data.RunFor(1);
- ASSERT_TRUE(callback.have_result());
ASSERT_EQ(kBodySize, callback.WaitForResult());
}
@@ -315,8 +303,7 @@ TEST(HttpStreamParser, SyncSingleChunkAndAsyncSocket) {
// Append the only chunk.
upload_stream.AppendData(kChunk, arraysize(kChunk) - 1, true);
- DeterministicSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
scoped_ptr<ClientSocketHandle> socket_handle =
CreateConnectedSocketHandle(&data);
@@ -339,19 +326,10 @@ TEST(HttpStreamParser, SyncSingleChunkAndAsyncSocket) {
ASSERT_EQ(ERR_IO_PENDING,
parser.SendRequest("GET /one.html HTTP/1.1\r\n", request_headers,
&response_info, callback.callback()));
-
- // Write the request and the only chunk.
- data.RunFor(2);
-
- // Write the trailer.
- data.RunFor(1);
- ASSERT_TRUE(callback.have_result());
ASSERT_EQ(OK, callback.WaitForResult());
// Attempt to read the response status and the response headers.
ASSERT_EQ(ERR_IO_PENDING, parser.ReadResponseHeaders(callback.callback()));
- data.RunFor(2);
- ASSERT_TRUE(callback.have_result());
ASSERT_GT(callback.WaitForResult(), 0);
// Finally, attempt to read the response body.
@@ -359,8 +337,6 @@ TEST(HttpStreamParser, SyncSingleChunkAndAsyncSocket) {
ASSERT_EQ(ERR_IO_PENDING,
parser.ReadResponseBody(body_buffer.get(), kBodySize,
callback.callback()));
- data.RunFor(1);
- ASSERT_TRUE(callback.have_result());
ASSERT_EQ(kBodySize, callback.WaitForResult());
}
@@ -401,8 +377,7 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocketWithMultipleChunks) {
upload_stream.AppendData(kChunk1, arraysize(kChunk1) - 1, false);
ASSERT_EQ(OK, upload_stream.Init(TestCompletionCallback().callback()));
- DeterministicSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
scoped_ptr<ClientSocketHandle> socket_handle =
CreateConnectedSocketHandle(&data);
@@ -425,47 +400,26 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocketWithMultipleChunks) {
ASSERT_EQ(ERR_IO_PENDING,
parser.SendRequest("GET /one.html HTTP/1.1\r\n", request_headers,
&response_info, callback.callback()));
-
- // Complete the initial request write. Additionally, this should enqueue the
- // first chunk.
- data.RunFor(1);
ASSERT_FALSE(callback.have_result());
- // Now append another chunk (while the first write is still pending), which
- // should not confuse the state machine.
- upload_stream.AppendData(kChunk2, arraysize(kChunk2) - 1, false);
- ASSERT_FALSE(callback.have_result());
-
- // Complete writing the first chunk, which should then enqueue the second
- // chunk for writing and return, because it is set to complete
- // asynchronously.
- data.RunFor(1);
+ // Sending the request and the first chunk completes.
+ base::RunLoop().RunUntilIdle();
ASSERT_FALSE(callback.have_result());
- // Complete writing the second chunk. However, because no chunks are
- // available yet, no further writes should be called until a new chunk is
- // added.
- data.RunFor(1);
+ // Now append another chunk.
+ upload_stream.AppendData(kChunk2, arraysize(kChunk2) - 1, false);
ASSERT_FALSE(callback.have_result());
- // Add the final chunk. This will enqueue another write, but it will not
- // complete due to the async nature.
+ // Add the final chunk, while the write for the second is still pending,
+ // which should not confuse the state machine.
upload_stream.AppendData(kChunk3, arraysize(kChunk3) - 1, true);
ASSERT_FALSE(callback.have_result());
- // Finalize writing the last chunk, which will enqueue the trailer.
- data.RunFor(1);
- ASSERT_FALSE(callback.have_result());
-
- // Finalize writing the trailer.
- data.RunFor(1);
- ASSERT_TRUE(callback.have_result());
+ // Wait for writes to complete.
ASSERT_EQ(OK, callback.WaitForResult());
// Attempt to read the response status and the response headers.
ASSERT_EQ(ERR_IO_PENDING, parser.ReadResponseHeaders(callback.callback()));
- data.RunFor(2);
- ASSERT_TRUE(callback.have_result());
ASSERT_GT(callback.WaitForResult(), 0);
// Finally, attempt to read the response body.
@@ -473,8 +427,6 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocketWithMultipleChunks) {
ASSERT_EQ(ERR_IO_PENDING,
parser.ReadResponseBody(body_buffer.get(), kBodySize,
callback.callback()));
- data.RunFor(1);
- ASSERT_TRUE(callback.have_result());
ASSERT_EQ(kBodySize, callback.WaitForResult());
}
@@ -503,8 +455,7 @@ TEST(HttpStreamParser, AsyncEmptyChunkedUpload) {
ChunkedUploadDataStream upload_stream(0);
ASSERT_EQ(OK, upload_stream.Init(TestCompletionCallback().callback()));
- DeterministicSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
scoped_ptr<ClientSocketHandle> socket_handle =
CreateConnectedSocketHandle(&data);
@@ -528,23 +479,14 @@ TEST(HttpStreamParser, AsyncEmptyChunkedUpload) {
parser.SendRequest("GET /one.html HTTP/1.1\r\n", request_headers,
&response_info, callback.callback()));
- // Complete writing the request headers.
- data.RunFor(1);
- ASSERT_FALSE(callback.have_result());
-
// Now append the terminal 0-byte "chunk".
upload_stream.AppendData(nullptr, 0, true);
ASSERT_FALSE(callback.have_result());
- // Finalize writing the trailer.
- data.RunFor(1);
- ASSERT_TRUE(callback.have_result());
ASSERT_EQ(OK, callback.WaitForResult());
// Attempt to read the response status and the response headers.
ASSERT_EQ(ERR_IO_PENDING, parser.ReadResponseHeaders(callback.callback()));
- data.RunFor(2);
- ASSERT_TRUE(callback.have_result());
ASSERT_GT(callback.WaitForResult(), 0);
// Finally, attempt to read the response body.
@@ -552,8 +494,6 @@ TEST(HttpStreamParser, AsyncEmptyChunkedUpload) {
ASSERT_EQ(ERR_IO_PENDING,
parser.ReadResponseBody(body_buffer.get(), kBodySize,
callback.callback()));
- data.RunFor(1);
- ASSERT_TRUE(callback.have_result());
ASSERT_EQ(kBodySize, callback.WaitForResult());
}
@@ -584,8 +524,7 @@ TEST(HttpStreamParser, SyncEmptyChunkedUpload) {
// Append final empty chunk.
upload_stream.AppendData(nullptr, 0, true);
- DeterministicSocketData data(reads, arraysize(reads), writes,
- arraysize(writes));
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
scoped_ptr<ClientSocketHandle> socket_handle =
CreateConnectedSocketHandle(&data);
@@ -610,14 +549,10 @@ TEST(HttpStreamParser, SyncEmptyChunkedUpload) {
&response_info, callback.callback()));
// Complete writing the request headers and body.
- data.RunFor(2);
- ASSERT_TRUE(callback.have_result());
ASSERT_EQ(OK, callback.WaitForResult());
// Attempt to read the response status and the response headers.
ASSERT_EQ(ERR_IO_PENDING, parser.ReadResponseHeaders(callback.callback()));
- data.RunFor(2);
- ASSERT_TRUE(callback.have_result());
ASSERT_GT(callback.WaitForResult(), 0);
// Finally, attempt to read the response body.
@@ -625,8 +560,6 @@ TEST(HttpStreamParser, SyncEmptyChunkedUpload) {
ASSERT_EQ(ERR_IO_PENDING,
parser.ReadResponseBody(body_buffer.get(), kBodySize,
callback.callback()));
- data.RunFor(1);
- ASSERT_TRUE(callback.have_result());
ASSERT_EQ(kBodySize, callback.WaitForResult());
}
@@ -685,20 +618,9 @@ TEST(HttpStreamParser, TruncatedHeaders) {
for (size_t i = 0; i < arraysize(reads); i++) {
SCOPED_TRACE(i);
- DeterministicSocketData data(reads[i], 2, writes, arraysize(writes));
- data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
- data.SetStop(3);
-
- scoped_ptr<DeterministicMockTCPClientSocket> transport(
- new DeterministicMockTCPClientSocket(NULL, &data));
- data.set_delegate(transport->AsWeakPtr());
-
- TestCompletionCallback callback;
- int rv = transport->Connect(callback.callback());
- ASSERT_EQ(OK, rv);
-
- scoped_ptr<ClientSocketHandle> socket_handle(new ClientSocketHandle);
- socket_handle->SetSocket(transport.Pass());
+ SequencedSocketData data(reads[i], 2, writes, arraysize(writes));
+ scoped_ptr<ClientSocketHandle> socket_handle(
+ CreateConnectedSocketHandle(&data));
HttpRequestInfo request_info;
request_info.method = "GET";
@@ -715,11 +637,11 @@ TEST(HttpStreamParser, TruncatedHeaders) {
HttpRequestHeaders request_headers;
HttpResponseInfo response_info;
- rv = parser.SendRequest("GET / HTTP/1.1\r\n", request_headers,
- &response_info, callback.callback());
- ASSERT_EQ(OK, rv);
+ TestCompletionCallback callback;
+ ASSERT_EQ(OK, parser.SendRequest("GET / HTTP/1.1\r\n", request_headers,
+ &response_info, callback.callback()));
- rv = parser.ReadResponseHeaders(callback.callback());
+ int rv = parser.ReadResponseHeaders(callback.callback());
if (i == arraysize(reads) - 1) {
EXPECT_EQ(OK, rv);
EXPECT_TRUE(response_info.headers.get());
@@ -752,21 +674,9 @@ TEST(HttpStreamParser, Websocket101Response) {
MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n\r\n"),
};
- DeterministicSocketData data(reads, arraysize(reads),
- writes, arraysize(writes));
- data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
- data.SetStop(2);
-
- scoped_ptr<DeterministicMockTCPClientSocket> transport(
- new DeterministicMockTCPClientSocket(NULL, &data));
- data.set_delegate(transport->AsWeakPtr());
-
- TestCompletionCallback callback;
- int rv = transport->Connect(callback.callback());
- ASSERT_EQ(OK, rv);
-
- scoped_ptr<ClientSocketHandle> socket_handle(new ClientSocketHandle);
- socket_handle->SetSocket(transport.Pass());
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ scoped_ptr<ClientSocketHandle> socket_handle =
+ CreateConnectedSocketHandle(&data);
HttpRequestInfo request_info;
request_info.method = "GET";
@@ -779,12 +689,11 @@ TEST(HttpStreamParser, Websocket101Response) {
HttpRequestHeaders request_headers;
HttpResponseInfo response_info;
- rv = parser.SendRequest("GET / HTTP/1.1\r\n", request_headers,
- &response_info, callback.callback());
- ASSERT_EQ(OK, rv);
+ TestCompletionCallback callback;
+ ASSERT_EQ(OK, parser.SendRequest("GET / HTTP/1.1\r\n", request_headers,
+ &response_info, callback.callback()));
- rv = parser.ReadResponseHeaders(callback.callback());
- EXPECT_EQ(OK, rv);
+ EXPECT_EQ(OK, parser.ReadResponseHeaders(callback.callback()));
ASSERT_TRUE(response_info.headers.get());
EXPECT_EQ(101, response_info.headers->response_code());
EXPECT_TRUE(response_info.headers->HasHeaderValue("Connection", "Upgrade"));
@@ -822,21 +731,9 @@ class SimpleGetRunner {
void SetupParserAndSendRequest() {
reads_.push_back(MockRead(SYNCHRONOUS, 0, sequence_number_++)); // EOF
- socket_handle_.reset(new ClientSocketHandle);
- data_.reset(new DeterministicSocketData(
- &reads_.front(), reads_.size(), &writes_.front(), writes_.size()));
- data_->set_connect_data(MockConnect(SYNCHRONOUS, OK));
- data_->SetStop(reads_.size() + writes_.size());
-
- transport_.reset(new DeterministicMockTCPClientSocket(NULL, data_.get()));
- data_->set_delegate(transport_->AsWeakPtr());
-
- TestCompletionCallback callback;
- int rv = transport_->Connect(callback.callback());
- rv = callback.GetResult(rv);
- ASSERT_EQ(OK, rv);
-
- socket_handle_->SetSocket(transport_.Pass());
+ data_.reset(new SequencedSocketData(&reads_.front(), reads_.size(),
+ &writes_.front(), writes_.size()));
+ socket_handle_ = CreateConnectedSocketHandle(data_.get());
request_info_.method = "GET";
request_info_.url = GURL("http://localhost");
@@ -845,9 +742,9 @@ 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());
- ASSERT_EQ(OK, rv);
+ TestCompletionCallback callback;
+ ASSERT_EQ(OK, parser_->SendRequest("GET / HTTP/1.1\r\n", request_headers_,
+ &response_info_, callback.callback()));
}
void ReadHeaders() {
@@ -878,8 +775,7 @@ class SimpleGetRunner {
std::vector<MockRead> reads_;
std::vector<MockWrite> writes_;
scoped_ptr<ClientSocketHandle> socket_handle_;
- scoped_ptr<DeterministicSocketData> data_;
- scoped_ptr<DeterministicMockTCPClientSocket> transport_;
+ scoped_ptr<SequencedSocketData> data_;
scoped_ptr<HttpStreamParser> parser_;
int sequence_number_;
};
@@ -1118,30 +1014,20 @@ TEST(HttpStreamParser, ReadAfterUnownedObjectsDestroyed) {
MockWrite writes[] = {
MockWrite(SYNCHRONOUS, 0,
"GET /foo.html HTTP/1.1\r\n\r\n"),
- MockWrite(SYNCHRONOUS, 1, "1"),
};
const int kBodySize = 1;
MockRead reads[] = {
- MockRead(SYNCHRONOUS, 5, "HTTP/1.1 200 OK\r\n"),
- MockRead(SYNCHRONOUS, 6, "Content-Length: 1\r\n\r\n"),
- MockRead(SYNCHRONOUS, 6, "Connection: Keep-Alive\r\n\r\n"),
- MockRead(SYNCHRONOUS, 7, "1"),
- MockRead(SYNCHRONOUS, 0, 8), // EOF
+ MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 OK\r\n"),
+ MockRead(SYNCHRONOUS, 2, "Content-Length: 1\r\n\r\n"),
+ MockRead(SYNCHRONOUS, 3, "Connection: Keep-Alive\r\n\r\n"),
+ MockRead(SYNCHRONOUS, 4, "1"),
+ MockRead(SYNCHRONOUS, 0, 5), // EOF
};
- StaticSocketDataProvider data(reads, arraysize(reads), writes,
- arraysize(writes));
- data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
-
- scoped_ptr<MockTCPClientSocket> transport(
- new MockTCPClientSocket(AddressList(), NULL, &data));
-
- TestCompletionCallback callback;
- ASSERT_EQ(OK, transport->Connect(callback.callback()));
-
- scoped_ptr<ClientSocketHandle> socket_handle(new ClientSocketHandle);
- socket_handle->SetSocket(transport.Pass());
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ scoped_ptr<ClientSocketHandle> socket_handle =
+ CreateConnectedSocketHandle(&data);
scoped_ptr<HttpRequestInfo> request_info(new HttpRequestInfo());
request_info->method = "GET";
@@ -1153,6 +1039,7 @@ TEST(HttpStreamParser, ReadAfterUnownedObjectsDestroyed) {
scoped_ptr<HttpRequestHeaders> request_headers(new HttpRequestHeaders());
scoped_ptr<HttpResponseInfo> response_info(new HttpResponseInfo());
+ TestCompletionCallback callback;
ASSERT_EQ(OK, parser.SendRequest("GET /foo.html HTTP/1.1\r\n",
*request_headers, response_info.get(), callback.callback()));
ASSERT_EQ(OK, parser.ReadResponseHeaders(callback.callback()));
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698