Commit fb159e7d authored by Matt Menke's avatar Matt Menke Committed by Commit Bot

Fix HttpServerTest.Request.

The test was waiting for the client end of a socket to be connected,
but not the server end. In general, the server side is connected first,
but there's an intervening Mojo pipe in this case wrapping both client
and server connections, and it's also not clear if platform APIs are
guaranteed to notify the server of the connection first, either.

This CL makes both the Mojo and non-Mojo HTTP server tests not rely on
that ordering.

Bug: 1032620
Change-Id: I925b9220d39a8e2f54b224e46c1c1853d2fdd067
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2023005
Commit-Queue: Matt Menke <mmenke@chromium.org>
Reviewed-by: default avatarMaksim Orlovich <morlovich@chromium.org>
Cr-Commit-Position: refs/heads/master@{#735569}
parent 707b9422
...@@ -189,6 +189,9 @@ class HttpServerTest : public TestWithTaskEnvironment, ...@@ -189,6 +189,9 @@ class HttpServerTest : public TestWithTaskEnvironment,
void OnConnect(int connection_id) override { void OnConnect(int connection_id) override {
DCHECK(connection_map_.find(connection_id) == connection_map_.end()); DCHECK(connection_map_.find(connection_id) == connection_map_.end());
connection_map_[connection_id] = true; connection_map_[connection_id] = true;
// This is set in CreateConnection(), which must be invoked once for every
// expected connection.
quit_on_create_loop_->Quit();
} }
void OnHttpRequest(int connection_id, void OnHttpRequest(int connection_id,
...@@ -227,6 +230,16 @@ class HttpServerTest : public TestWithTaskEnvironment, ...@@ -227,6 +230,16 @@ class HttpServerTest : public TestWithTaskEnvironment,
ASSERT_EQ(requests_.size(), count); ASSERT_EQ(requests_.size(), count);
} }
// Connections should only be created using this method, which waits until
// both the server and the client have received the connected socket.
void CreateConnection(TestHttpClient* client) {
ASSERT_FALSE(quit_on_create_loop_);
quit_on_create_loop_ = std::make_unique<base::RunLoop>();
EXPECT_THAT(client->ConnectAndWait(server_address_), IsOk());
quit_on_create_loop_->Run();
quit_on_create_loop_.reset();
}
void RunUntilConnectionIdClosed(int connection_id) { void RunUntilConnectionIdClosed(int connection_id) {
quit_on_close_connection_ = connection_id; quit_on_close_connection_ = connection_id;
auto iter = connection_map_.find(connection_id); auto iter = connection_map_.find(connection_id);
...@@ -256,8 +269,12 @@ class HttpServerTest : public TestWithTaskEnvironment, ...@@ -256,8 +269,12 @@ class HttpServerTest : public TestWithTaskEnvironment,
} }
void HandleAcceptResult(std::unique_ptr<StreamSocket> socket) { void HandleAcceptResult(std::unique_ptr<StreamSocket> socket) {
ASSERT_FALSE(quit_on_create_loop_);
quit_on_create_loop_ = std::make_unique<base::RunLoop>();
server_->accepted_socket_ = std::move(socket); server_->accepted_socket_ = std::move(socket);
server_->HandleAcceptResult(OK); server_->HandleAcceptResult(OK);
quit_on_create_loop_->Run();
quit_on_create_loop_.reset();
} }
std::unordered_map<int, bool>& connection_map() { return connection_map_; } std::unordered_map<int, bool>& connection_map() { return connection_map_; }
...@@ -272,6 +289,7 @@ class HttpServerTest : public TestWithTaskEnvironment, ...@@ -272,6 +289,7 @@ class HttpServerTest : public TestWithTaskEnvironment,
private: private:
size_t quit_after_request_count_; size_t quit_after_request_count_;
std::unique_ptr<base::RunLoop> quit_on_create_loop_;
int quit_on_close_connection_; int quit_on_close_connection_;
}; };
...@@ -293,7 +311,7 @@ class WebSocketTest : public HttpServerTest { ...@@ -293,7 +311,7 @@ class WebSocketTest : public HttpServerTest {
TEST_F(HttpServerTest, Request) { TEST_F(HttpServerTest, Request) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET /test HTTP/1.1\r\n\r\n"); client.Send("GET /test HTTP/1.1\r\n\r\n");
RunUntilRequestsReceived(1); RunUntilRequestsReceived(1);
ASSERT_EQ("GET", GetRequest(0).method); ASSERT_EQ("GET", GetRequest(0).method);
...@@ -306,7 +324,7 @@ TEST_F(HttpServerTest, Request) { ...@@ -306,7 +324,7 @@ TEST_F(HttpServerTest, Request) {
TEST_F(HttpServerTest, RequestBrokenTermination) { TEST_F(HttpServerTest, RequestBrokenTermination) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET /test HTTP/1.1\r\n\r)"); client.Send("GET /test HTTP/1.1\r\n\r)");
RunUntilConnectionIdClosed(1); RunUntilConnectionIdClosed(1);
EXPECT_EQ(0u, num_requests()); EXPECT_EQ(0u, num_requests());
...@@ -315,7 +333,7 @@ TEST_F(HttpServerTest, RequestBrokenTermination) { ...@@ -315,7 +333,7 @@ TEST_F(HttpServerTest, RequestBrokenTermination) {
TEST_F(HttpServerTest, RequestWithHeaders) { TEST_F(HttpServerTest, RequestWithHeaders) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
const char* const kHeaders[][3] = { const char* const kHeaders[][3] = {
{"Header", ": ", "1"}, {"Header", ": ", "1"},
{"HeaderWithNoWhitespace", ":", "1"}, {"HeaderWithNoWhitespace", ":", "1"},
...@@ -345,7 +363,7 @@ TEST_F(HttpServerTest, RequestWithHeaders) { ...@@ -345,7 +363,7 @@ TEST_F(HttpServerTest, RequestWithHeaders) {
TEST_F(HttpServerTest, RequestWithDuplicateHeaders) { TEST_F(HttpServerTest, RequestWithDuplicateHeaders) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
const char* const kHeaders[][3] = { const char* const kHeaders[][3] = {
{"FirstHeader", ": ", "1"}, {"FirstHeader", ": ", "1"},
{"DuplicateHeader", ": ", "2"}, {"DuplicateHeader", ": ", "2"},
...@@ -373,7 +391,7 @@ TEST_F(HttpServerTest, RequestWithDuplicateHeaders) { ...@@ -373,7 +391,7 @@ TEST_F(HttpServerTest, RequestWithDuplicateHeaders) {
TEST_F(HttpServerTest, HasHeaderValueTest) { TEST_F(HttpServerTest, HasHeaderValueTest) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
const char* const kHeaders[] = { const char* const kHeaders[] = {
"Header: Abcd", "Header: Abcd",
"HeaderWithNoWhitespace:E", "HeaderWithNoWhitespace:E",
...@@ -410,7 +428,7 @@ TEST_F(HttpServerTest, HasHeaderValueTest) { ...@@ -410,7 +428,7 @@ TEST_F(HttpServerTest, HasHeaderValueTest) {
TEST_F(HttpServerTest, RequestWithBody) { TEST_F(HttpServerTest, RequestWithBody) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
std::string body = "a" + std::string(1 << 10, 'b') + "c"; std::string body = "a" + std::string(1 << 10, 'b') + "c";
client.Send(base::StringPrintf( client.Send(base::StringPrintf(
"GET /test HTTP/1.1\r\n" "GET /test HTTP/1.1\r\n"
...@@ -427,7 +445,7 @@ TEST_F(HttpServerTest, RequestWithBody) { ...@@ -427,7 +445,7 @@ TEST_F(HttpServerTest, RequestWithBody) {
TEST_F(WebSocketTest, RequestWebSocket) { TEST_F(WebSocketTest, RequestWebSocket) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send( client.Send(
"GET /test HTTP/1.1\r\n" "GET /test HTTP/1.1\r\n"
"Upgrade: WebSocket\r\n" "Upgrade: WebSocket\r\n"
...@@ -440,7 +458,7 @@ TEST_F(WebSocketTest, RequestWebSocket) { ...@@ -440,7 +458,7 @@ TEST_F(WebSocketTest, RequestWebSocket) {
TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) { TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send( client.Send(
"GET /test HTTP/1.1\r\n" "GET /test HTTP/1.1\r\n"
"Upgrade: WebSocket\r\n" "Upgrade: WebSocket\r\n"
...@@ -454,7 +472,7 @@ TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) { ...@@ -454,7 +472,7 @@ TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) {
TEST_F(HttpServerTest, RequestWithTooLargeBody) { TEST_F(HttpServerTest, RequestWithTooLargeBody) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send( client.Send(
"GET /test HTTP/1.1\r\n" "GET /test HTTP/1.1\r\n"
"Content-Length: 1073741824\r\n\r\n"); "Content-Length: 1073741824\r\n\r\n");
...@@ -470,7 +488,7 @@ TEST_F(HttpServerTest, RequestWithTooLargeBody) { ...@@ -470,7 +488,7 @@ TEST_F(HttpServerTest, RequestWithTooLargeBody) {
TEST_F(HttpServerTest, Send200) { TEST_F(HttpServerTest, Send200) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET /test HTTP/1.1\r\n\r\n"); client.Send("GET /test HTTP/1.1\r\n\r\n");
RunUntilRequestsReceived(1); RunUntilRequestsReceived(1);
server_->Send200(GetConnectionId(0), "Response!", "text/plain", server_->Send200(GetConnectionId(0), "Response!", "text/plain",
...@@ -486,7 +504,7 @@ TEST_F(HttpServerTest, Send200) { ...@@ -486,7 +504,7 @@ TEST_F(HttpServerTest, Send200) {
TEST_F(HttpServerTest, SendRaw) { TEST_F(HttpServerTest, SendRaw) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET /test HTTP/1.1\r\n\r\n"); client.Send("GET /test HTTP/1.1\r\n\r\n");
RunUntilRequestsReceived(1); RunUntilRequestsReceived(1);
server_->SendRaw(GetConnectionId(0), "Raw Data ", server_->SendRaw(GetConnectionId(0), "Raw Data ",
...@@ -511,7 +529,7 @@ TEST_F(HttpServerTest, WrongProtocolRequest) { ...@@ -511,7 +529,7 @@ TEST_F(HttpServerTest, WrongProtocolRequest) {
for (size_t i = 0; i < base::size(kBadProtocolRequests); ++i) { for (size_t i = 0; i < base::size(kBadProtocolRequests); ++i) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send(kBadProtocolRequests[i]); client.Send(kBadProtocolRequests[i]);
client.ExpectUsedThenDisconnectedWithNoData(); client.ExpectUsedThenDisconnectedWithNoData();
...@@ -645,7 +663,7 @@ TEST_F(HttpServerTest, MultipleRequestsOnSameConnection) { ...@@ -645,7 +663,7 @@ TEST_F(HttpServerTest, MultipleRequestsOnSameConnection) {
// The idea behind this test is that requests with or without bodies should // The idea behind this test is that requests with or without bodies should
// not break parsing of the next request. // not break parsing of the next request.
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
std::string body = "body"; std::string body = "body";
client.Send(base::StringPrintf( client.Send(base::StringPrintf(
"GET /test HTTP/1.1\r\n" "GET /test HTTP/1.1\r\n"
...@@ -705,7 +723,7 @@ class CloseOnConnectHttpServerTest : public HttpServerTest { ...@@ -705,7 +723,7 @@ class CloseOnConnectHttpServerTest : public HttpServerTest {
TEST_F(CloseOnConnectHttpServerTest, ServerImmediatelyClosesConnection) { TEST_F(CloseOnConnectHttpServerTest, ServerImmediatelyClosesConnection) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET / HTTP/1.1\r\n\r\n"); client.Send("GET / HTTP/1.1\r\n\r\n");
// The server should close the socket without responding. // The server should close the socket without responding.
......
...@@ -194,6 +194,9 @@ class HttpServerTest : public testing::Test, public HttpServer::Delegate { ...@@ -194,6 +194,9 @@ class HttpServerTest : public testing::Test, public HttpServer::Delegate {
void OnConnect(int connection_id) override { void OnConnect(int connection_id) override {
DCHECK(connection_map_.find(connection_id) == connection_map_.end()); DCHECK(connection_map_.find(connection_id) == connection_map_.end());
connection_map_[connection_id] = true; connection_map_[connection_id] = true;
// This is set in CreateConnection(), which must be invoked once for every
// expected connection.
quit_on_create_loop_->Quit();
} }
void OnHttpRequest(int connection_id, void OnHttpRequest(int connection_id,
...@@ -236,6 +239,17 @@ class HttpServerTest : public testing::Test, public HttpServer::Delegate { ...@@ -236,6 +239,17 @@ class HttpServerTest : public testing::Test, public HttpServer::Delegate {
ASSERT_EQ(requests_.size(), count); ASSERT_EQ(requests_.size(), count);
} }
// Connections should only be created using this method, which waits until
// both the server and the client have received the connected socket over
// Mojo.
void CreateConnection(TestHttpClient* client) {
ASSERT_FALSE(quit_on_create_loop_);
quit_on_create_loop_ = std::make_unique<base::RunLoop>();
EXPECT_THAT(client->ConnectAndWait(server_address_), IsOk());
quit_on_create_loop_->Run();
quit_on_create_loop_.reset();
}
void RunUntilConnectionIdClosed(int connection_id) { void RunUntilConnectionIdClosed(int connection_id) {
quit_on_close_connection_ = connection_id; quit_on_close_connection_ = connection_id;
auto iter = connection_map_.find(connection_id); auto iter = connection_map_.find(connection_id);
...@@ -281,6 +295,7 @@ class HttpServerTest : public testing::Test, public HttpServer::Delegate { ...@@ -281,6 +295,7 @@ class HttpServerTest : public testing::Test, public HttpServer::Delegate {
private: private:
base::test::TaskEnvironment task_environment_; base::test::TaskEnvironment task_environment_;
size_t quit_after_request_count_; size_t quit_after_request_count_;
std::unique_ptr<base::RunLoop> quit_on_create_loop_;
int quit_on_close_connection_; int quit_on_close_connection_;
net::TestURLRequestContext url_request_context_; net::TestURLRequestContext url_request_context_;
...@@ -310,7 +325,7 @@ TEST_F(HttpServerTest, SetNonexistingConnectionBuffer) { ...@@ -310,7 +325,7 @@ TEST_F(HttpServerTest, SetNonexistingConnectionBuffer) {
TEST_F(HttpServerTest, Request) { TEST_F(HttpServerTest, Request) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET /test HTTP/1.1\r\n\r\n"); client.Send("GET /test HTTP/1.1\r\n\r\n");
int connection_id = connection_map_.begin()->first; int connection_id = connection_map_.begin()->first;
...@@ -330,7 +345,7 @@ TEST_F(HttpServerTest, Request) { ...@@ -330,7 +345,7 @@ TEST_F(HttpServerTest, Request) {
TEST_F(HttpServerTest, RequestBrokenTermination) { TEST_F(HttpServerTest, RequestBrokenTermination) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET /test HTTP/1.1\r\n\r)"); client.Send("GET /test HTTP/1.1\r\n\r)");
RunUntilConnectionIdClosed(1); RunUntilConnectionIdClosed(1);
EXPECT_EQ(0u, num_requests()); EXPECT_EQ(0u, num_requests());
...@@ -339,7 +354,7 @@ TEST_F(HttpServerTest, RequestBrokenTermination) { ...@@ -339,7 +354,7 @@ TEST_F(HttpServerTest, RequestBrokenTermination) {
TEST_F(HttpServerTest, RequestWithHeaders) { TEST_F(HttpServerTest, RequestWithHeaders) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
const char* const kHeaders[][3] = { const char* const kHeaders[][3] = {
{"Header", ": ", "1"}, {"Header", ": ", "1"},
{"HeaderWithNoWhitespace", ":", "1"}, {"HeaderWithNoWhitespace", ":", "1"},
...@@ -369,7 +384,7 @@ TEST_F(HttpServerTest, RequestWithHeaders) { ...@@ -369,7 +384,7 @@ TEST_F(HttpServerTest, RequestWithHeaders) {
TEST_F(HttpServerTest, RequestWithDuplicateHeaders) { TEST_F(HttpServerTest, RequestWithDuplicateHeaders) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
const char* const kHeaders[][3] = { const char* const kHeaders[][3] = {
{"FirstHeader", ": ", "1"}, {"DuplicateHeader", ": ", "2"}, {"FirstHeader", ": ", "1"}, {"DuplicateHeader", ": ", "2"},
{"MiddleHeader", ": ", "3"}, {"DuplicateHeader", ": ", "4"}, {"MiddleHeader", ": ", "3"}, {"DuplicateHeader", ": ", "4"},
...@@ -395,7 +410,7 @@ TEST_F(HttpServerTest, RequestWithDuplicateHeaders) { ...@@ -395,7 +410,7 @@ TEST_F(HttpServerTest, RequestWithDuplicateHeaders) {
TEST_F(HttpServerTest, HasHeaderValueTest) { TEST_F(HttpServerTest, HasHeaderValueTest) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
const char* const kHeaders[] = { const char* const kHeaders[] = {
"Header: Abcd", "Header: Abcd",
"HeaderWithNoWhitespace:E", "HeaderWithNoWhitespace:E",
...@@ -432,7 +447,7 @@ TEST_F(HttpServerTest, HasHeaderValueTest) { ...@@ -432,7 +447,7 @@ TEST_F(HttpServerTest, HasHeaderValueTest) {
TEST_F(HttpServerTest, RequestWithBody) { TEST_F(HttpServerTest, RequestWithBody) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
std::string body = "a" + std::string(1 << 10, 'b') + "c"; std::string body = "a" + std::string(1 << 10, 'b') + "c";
client.Send( client.Send(
base::StringPrintf("GET /test HTTP/1.1\r\n" base::StringPrintf("GET /test HTTP/1.1\r\n"
...@@ -450,7 +465,7 @@ TEST_F(HttpServerTest, RequestWithBody) { ...@@ -450,7 +465,7 @@ TEST_F(HttpServerTest, RequestWithBody) {
// socket and not try to read from an invalid pipe. // socket and not try to read from an invalid pipe.
TEST_F(WebSocketTest, PipeClosed) { TEST_F(WebSocketTest, PipeClosed) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send( client.Send(
"GET /test HTTP/1.1\r\n" "GET /test HTTP/1.1\r\n"
"Upgrade: WebSocket\r\n" "Upgrade: WebSocket\r\n"
...@@ -465,7 +480,7 @@ TEST_F(WebSocketTest, PipeClosed) { ...@@ -465,7 +480,7 @@ TEST_F(WebSocketTest, PipeClosed) {
TEST_F(WebSocketTest, RequestWebSocket) { TEST_F(WebSocketTest, RequestWebSocket) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send( client.Send(
"GET /test HTTP/1.1\r\n" "GET /test HTTP/1.1\r\n"
"Upgrade: WebSocket\r\n" "Upgrade: WebSocket\r\n"
...@@ -478,7 +493,7 @@ TEST_F(WebSocketTest, RequestWebSocket) { ...@@ -478,7 +493,7 @@ TEST_F(WebSocketTest, RequestWebSocket) {
TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) { TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send( client.Send(
"GET /test HTTP/1.1\r\n" "GET /test HTTP/1.1\r\n"
"Upgrade: WebSocket\r\n" "Upgrade: WebSocket\r\n"
...@@ -492,7 +507,7 @@ TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) { ...@@ -492,7 +507,7 @@ TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) {
TEST_F(HttpServerTest, RequestWithTooLargeBody) { TEST_F(HttpServerTest, RequestWithTooLargeBody) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send( client.Send(
"GET /test HTTP/1.1\r\n" "GET /test HTTP/1.1\r\n"
"Content-Length: 1073741824\r\n\r\n"); "Content-Length: 1073741824\r\n\r\n");
...@@ -508,7 +523,7 @@ TEST_F(HttpServerTest, RequestWithTooLargeBody) { ...@@ -508,7 +523,7 @@ TEST_F(HttpServerTest, RequestWithTooLargeBody) {
TEST_F(HttpServerTest, Send200) { TEST_F(HttpServerTest, Send200) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET /test HTTP/1.1\r\n\r\n"); client.Send("GET /test HTTP/1.1\r\n\r\n");
RunUntilRequestsReceived(1); RunUntilRequestsReceived(1);
server_->Send200(GetConnectionId(0), "Response!", "text/plain", server_->Send200(GetConnectionId(0), "Response!", "text/plain",
...@@ -524,7 +539,7 @@ TEST_F(HttpServerTest, Send200) { ...@@ -524,7 +539,7 @@ TEST_F(HttpServerTest, Send200) {
TEST_F(HttpServerTest, SendRaw) { TEST_F(HttpServerTest, SendRaw) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET /test HTTP/1.1\r\n\r\n"); client.Send("GET /test HTTP/1.1\r\n\r\n");
RunUntilRequestsReceived(1); RunUntilRequestsReceived(1);
server_->SendRaw(GetConnectionId(0), "Raw Data ", server_->SendRaw(GetConnectionId(0), "Raw Data ",
...@@ -541,15 +556,16 @@ TEST_F(HttpServerTest, SendRaw) { ...@@ -541,15 +556,16 @@ TEST_F(HttpServerTest, SendRaw) {
} }
TEST_F(HttpServerTest, SendRawOverTwoConnections) { TEST_F(HttpServerTest, SendRawOverTwoConnections) {
TestHttpClient client1, client2; TestHttpClient client1;
TestHttpClient client2;
// Requests are staggered so that their order is deterministic - otherwise the // Requests are staggered so that their order is deterministic - otherwise the
// test has no way of associating the response with the client object. // test has no way of associating the response with the client object.
ASSERT_THAT(client1.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client1);
client1.Send("GET /test1 HTTP/1.1\r\n\r\n"); client1.Send("GET /test1 HTTP/1.1\r\n\r\n");
RunUntilRequestsReceived(1); RunUntilRequestsReceived(1);
ASSERT_THAT(client2.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client2);
client2.Send("GET /test2 HTTP/1.1\r\n\r\n"); client2.Send("GET /test2 HTTP/1.1\r\n\r\n");
RunUntilRequestsReceived(2); RunUntilRequestsReceived(2);
...@@ -579,7 +595,7 @@ TEST_F(HttpServerTest, WrongProtocolRequest) { ...@@ -579,7 +595,7 @@ TEST_F(HttpServerTest, WrongProtocolRequest) {
for (size_t i = 0; i < base::size(kBadProtocolRequests); ++i) { for (size_t i = 0; i < base::size(kBadProtocolRequests); ++i) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send(kBadProtocolRequests[i]); client.Send(kBadProtocolRequests[i]);
client.ExpectUsedThenDisconnectedWithNoData(); client.ExpectUsedThenDisconnectedWithNoData();
...@@ -596,7 +612,7 @@ TEST_F(HttpServerTest, WrongProtocolRequest) { ...@@ -596,7 +612,7 @@ TEST_F(HttpServerTest, WrongProtocolRequest) {
TEST_F(HttpServerTest, RequestWithBodySplitAcrossPackets) { TEST_F(HttpServerTest, RequestWithBodySplitAcrossPackets) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
std::string body("body"); std::string body("body");
std::string request_text = base::StringPrintf( std::string request_text = base::StringPrintf(
...@@ -621,7 +637,7 @@ TEST_F(HttpServerTest, MultipleRequestsOnSameConnection) { ...@@ -621,7 +637,7 @@ TEST_F(HttpServerTest, MultipleRequestsOnSameConnection) {
// The idea behind this test is that requests with or without bodies should // The idea behind this test is that requests with or without bodies should
// not break parsing of the next request. // not break parsing of the next request.
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
std::string body = "body"; std::string body = "body";
client.Send( client.Send(
base::StringPrintf("GET /test HTTP/1.1\r\n" base::StringPrintf("GET /test HTTP/1.1\r\n"
...@@ -680,7 +696,7 @@ class CloseOnConnectHttpServerTest : public HttpServerTest { ...@@ -680,7 +696,7 @@ class CloseOnConnectHttpServerTest : public HttpServerTest {
TEST_F(CloseOnConnectHttpServerTest, ServerImmediatelyClosesConnection) { TEST_F(CloseOnConnectHttpServerTest, ServerImmediatelyClosesConnection) {
TestHttpClient client; TestHttpClient client;
ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); CreateConnection(&client);
client.Send("GET / HTTP/1.1\r\n\r\n"); client.Send("GET / HTTP/1.1\r\n\r\n");
// The server should close the socket without responding. // The server should close the socket without responding.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment