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

Unified Diff: net/server/http_server_unittest.cc

Issue 2314073003: Handle non-HTTP/1.1 requests more gracefully in net::HttpServer. (Closed)
Patch Set: . Created 4 years, 3 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 | « net/server/http_server.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/server/http_server_unittest.cc
diff --git a/net/server/http_server_unittest.cc b/net/server/http_server_unittest.cc
index 03544f12b3d5f82a90c83ab5d8a0ba1cfbf2d4d7..997d8650cde1513f43e72e18b40d28e90bd27e45 100644
--- a/net/server/http_server_unittest.cc
+++ b/net/server/http_server_unittest.cc
@@ -132,6 +132,8 @@ class TestHttpClient {
return true;
}
+ TCPClientSocket& socket() { return *socket_; }
+
private:
void OnConnect(const base::Closure& quit_loop, int result) {
connect_result_ = result;
@@ -198,7 +200,10 @@ class HttpServerTest : public testing::Test,
ASSERT_THAT(server_->GetLocalAddress(&server_address_), IsOk());
}
- void OnConnect(int connection_id) override {}
+ void OnConnect(int connection_id) override {
+ DCHECK(connection_map_.find(connection_id) == connection_map_.end());
+ connection_map_[connection_id] = true;
+ }
void OnHttpRequest(int connection_id,
const HttpServerRequestInfo& info) override {
@@ -216,7 +221,10 @@ class HttpServerTest : public testing::Test,
NOTREACHED();
}
- void OnClose(int connection_id) override {}
+ void OnClose(int connection_id) override {
+ DCHECK(connection_map_.find(connection_id) != connection_map_.end());
+ connection_map_[connection_id] = false;
+ }
bool RunUntilRequestsReceived(size_t count) {
quit_after_request_count_ = count;
@@ -243,11 +251,15 @@ class HttpServerTest : public testing::Test,
server_->HandleAcceptResult(OK);
}
+ std::unordered_map<int, bool>& connection_map() { return connection_map_; }
+
protected:
std::unique_ptr<HttpServer> server_;
IPEndPoint server_address_;
base::Closure run_loop_quit_func_;
std::vector<std::pair<HttpServerRequestInfo, int> > requests_;
+ std::unordered_map<int /* connection_id */, bool /* connected */>
+ connection_map_;
private:
size_t quit_after_request_count_;
@@ -472,6 +484,38 @@ TEST_F(HttpServerTest, SendRaw) {
ASSERT_EQ(expected_response, response);
}
+TEST_F(HttpServerTest, WrongProtocolRequest) {
+ const char* const kBadProtocolRequests[] = {
+ "GET /test HTTP/1.0\r\n\r\n",
+ "GET /test foo\r\n\r\n",
+ "GET /test \r\n\r\n",
+ };
+
+ for (size_t i = 0; i < arraysize(kBadProtocolRequests); ++i) {
+ TestHttpClient client;
+ ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk());
+
+ client.Send(kBadProtocolRequests[i]);
+ ASSERT_FALSE(RunUntilRequestsReceived(1));
+
+ // Assert that the delegate was updated properly.
+ ASSERT_EQ(1u, connection_map().size());
+ ASSERT_FALSE(connection_map().begin()->second);
+
+ // Assert that the socket was opened...
+ ASSERT_TRUE(client.socket().WasEverUsed());
+
+ // ...then closed when the server disconnected. Verify that the socket was
+ // closed by checking that a Read() fails.
+ std::string response;
+ ASSERT_FALSE(client.Read(&response, 1u));
+ ASSERT_EQ(std::string(), response);
+
+ // Reset the state of the connection map.
+ connection_map().clear();
+ }
+}
+
class MockStreamSocket : public StreamSocket {
public:
MockStreamSocket()
@@ -640,6 +684,7 @@ TEST_F(HttpServerTest, MultipleRequestsOnSameConnection) {
class CloseOnConnectHttpServerTest : public HttpServerTest {
public:
void OnConnect(int connection_id) override {
+ HttpServerTest::OnConnect(connection_id);
connection_ids_.push_back(connection_id);
server_->Close(connection_id);
}
« no previous file with comments | « net/server/http_server.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698