Index: net/server/http_server_unittest.cc |
diff --git a/net/server/http_server_unittest.cc b/net/server/http_server_unittest.cc |
index de8690f138e05608447ffe718c878a186fd0d4cd..207c454acfbc3a8b09eb97eb4d8a3cfba89e5862 100644 |
--- a/net/server/http_server_unittest.cc |
+++ b/net/server/http_server_unittest.cc |
@@ -209,6 +209,22 @@ class HttpServerTest : public testing::Test, |
size_t quit_after_request_count_; |
}; |
+class WebSocketTest : public HttpServerTest { |
+ virtual void OnHttpRequest(int connection_id, |
+ const HttpServerRequestInfo& info) OVERRIDE { |
+ NOTREACHED(); |
+ } |
+ |
+ virtual void OnWebSocketRequest(int connection_id, |
+ const HttpServerRequestInfo& info) OVERRIDE { |
+ HttpServerTest::OnHttpRequest(connection_id, info); |
+ } |
+ |
+ virtual void OnWebSocketMessage(int connection_id, |
+ const std::string& data) OVERRIDE { |
+ } |
+}; |
+ |
TEST_F(HttpServerTest, Request) { |
TestHttpClient client; |
ASSERT_EQ(OK, client.ConnectAndWait(server_address_)); |
@@ -253,6 +269,71 @@ TEST_F(HttpServerTest, RequestWithHeaders) { |
} |
} |
+TEST_F(HttpServerTest, RequestWithDuplicateHeaders) { |
+ TestHttpClient client; |
+ ASSERT_EQ(OK, client.ConnectAndWait(server_address_)); |
+ const char* kHeaders[][3] = { |
+ {"FirstHeader", ": ", "1"}, |
+ {"DuplicateHeader", ": ", "2"}, |
+ {"MiddleHeader", ": ", "3"}, |
+ {"DuplicateHeader", ": ", "4"}, |
+ {"LastHeader", ": ", "5"}, |
+ }; |
+ std::string headers; |
+ for (size_t i = 0; i < arraysize(kHeaders); ++i) { |
+ headers += |
+ std::string(kHeaders[i][0]) + kHeaders[i][1] + kHeaders[i][2] + "\r\n"; |
+ } |
+ |
+ client.Send("GET /test HTTP/1.1\r\n" + headers + "\r\n"); |
+ ASSERT_TRUE(RunUntilRequestsReceived(1)); |
+ ASSERT_EQ("", GetRequest(0).data); |
+ |
+ for (size_t i = 0; i < arraysize(kHeaders); ++i) { |
+ std::string field = StringToLowerASCII(std::string(kHeaders[i][0])); |
+ std::string value = (field == "duplicateheader") ? "2,4" : kHeaders[i][2]; |
+ ASSERT_EQ(1u, GetRequest(0).headers.count(field)) << field; |
+ ASSERT_EQ(value, GetRequest(0).headers[field]) << kHeaders[i][0]; |
+ } |
+} |
+ |
+TEST_F(HttpServerTest, HasHeaderValueTest) { |
+ TestHttpClient client; |
+ ASSERT_EQ(OK, client.ConnectAndWait(server_address_)); |
+ const char* kHeaders[] = { |
+ "Header: Abcd", |
+ "HeaderWithNoWhitespace:E", |
+ "HeaderWithWhitespace : \t f \t ", |
+ "DuplicateHeader: g", |
+ "HeaderWithComma: h, i ,j", |
+ "DuplicateHeader: k", |
+ "EmptyHeader:", |
+ "EmptyHeaderWithWhitespace: \t ", |
+ "HeaderWithNonASCII: \xf7", |
+ }; |
+ std::string headers; |
+ for (size_t i = 0; i < arraysize(kHeaders); ++i) { |
+ headers += std::string(kHeaders[i]) + "\r\n"; |
+ } |
+ |
+ client.Send("GET /test HTTP/1.1\r\n" + headers + "\r\n"); |
+ ASSERT_TRUE(RunUntilRequestsReceived(1)); |
+ ASSERT_EQ("", GetRequest(0).data); |
+ |
+ ASSERT_TRUE(GetRequest(0).HasHeaderValue("header", "abcd")); |
+ ASSERT_FALSE(GetRequest(0).HasHeaderValue("header", "bc")); |
+ ASSERT_TRUE(GetRequest(0).HasHeaderValue("headerwithnowhitespace", "e")); |
+ ASSERT_TRUE(GetRequest(0).HasHeaderValue("headerwithwhitespace", "f")); |
+ ASSERT_TRUE(GetRequest(0).HasHeaderValue("duplicateheader", "g")); |
+ ASSERT_TRUE(GetRequest(0).HasHeaderValue("headerwithcomma", "h")); |
+ ASSERT_TRUE(GetRequest(0).HasHeaderValue("headerwithcomma", "i")); |
+ ASSERT_TRUE(GetRequest(0).HasHeaderValue("headerwithcomma", "j")); |
+ ASSERT_TRUE(GetRequest(0).HasHeaderValue("duplicateheader", "k")); |
+ ASSERT_FALSE(GetRequest(0).HasHeaderValue("emptyheader", "x")); |
+ ASSERT_FALSE(GetRequest(0).HasHeaderValue("emptyheaderwithwhitespace", "x")); |
+ ASSERT_TRUE(GetRequest(0).HasHeaderValue("headerwithnonascii", "\xf7")); |
+} |
+ |
TEST_F(HttpServerTest, RequestWithBody) { |
TestHttpClient client; |
ASSERT_EQ(OK, client.ConnectAndWait(server_address_)); |
@@ -270,6 +351,19 @@ TEST_F(HttpServerTest, RequestWithBody) { |
ASSERT_EQ('c', *body.rbegin()); |
} |
+TEST_F(WebSocketTest, RequestWebSocket) { |
+ TestHttpClient client; |
+ ASSERT_EQ(OK, client.ConnectAndWait(server_address_)); |
+ client.Send( |
+ "GET /test HTTP/1.1\r\n" |
+ "Upgrade: WebSocket\r\n" |
+ "Connection: SomethingElse, Upgrade\r\n" |
+ "Sec-WebSocket-Version: 8\r\n" |
+ "Sec-WebSocket-Key: key\r\n" |
+ "\r\n"); |
+ ASSERT_TRUE(RunUntilRequestsReceived(1)); |
+} |
+ |
TEST_F(HttpServerTest, RequestWithTooLargeBody) { |
class TestURLFetcherDelegate : public URLFetcherDelegate { |
public: |