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

Unified Diff: net/websockets/websocket_handshake_handler_unittest.cc

Issue 2743003: Add Spdy support in WebSocketHandshake*Handler (Closed)
Patch Set: fix Created 10 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 | « net/websockets/websocket_handshake_handler.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/websockets/websocket_handshake_handler_unittest.cc
diff --git a/net/websockets/websocket_handshake_handler_unittest.cc b/net/websockets/websocket_handshake_handler_unittest.cc
index 8bac084a28e0d462ffa205870cf8a92d5364162e..4204d6ad6ebc75de757d88dd211ab0a0ab16dca7 100644
--- a/net/websockets/websocket_handshake_handler_unittest.cc
+++ b/net/websockets/websocket_handshake_handler_unittest.cc
@@ -151,7 +151,7 @@ TEST(WebSocketHandshakeResponseHandlerTest, ReplaceResponseCookies) {
EXPECT_EQ(kHandshakeResponseExpectedMessage, handler.GetResponse());
}
-TEST(WebSocketHandshakeHandlerTest, RequestResponse) {
+TEST(WebSocketHandshakeHandlerTest, HttpRequestResponse) {
WebSocketHandshakeRequestHandler request_handler;
static const char* kHandshakeRequestMessage =
@@ -233,4 +233,148 @@ TEST(WebSocketHandshakeHandlerTest, RequestResponse) {
EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
}
+TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponse) {
+ WebSocketHandshakeRequestHandler request_handler;
+
+ static const char* kHandshakeRequestMessage =
+ "GET /demo HTTP/1.1\r\n"
+ "Host: example.com\r\n"
+ "Connection: Upgrade\r\n"
+ "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n"
+ "Sec-WebSocket-Protocol: sample\r\n"
+ "Upgrade: WebSocket\r\n"
+ "X-bogus-header: X\r\n"
+ "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n"
+ "Origin: http://example.com\r\n"
+ "X-bogus-header: Y\r\n"
+ "\r\n"
+ "^n:ds[4U";
+
+ EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
+ strlen(kHandshakeRequestMessage)));
+
+ GURL url("ws://example.com/demo");
+ std::string challenge;
+ spdy::SpdyHeaderBlock headers;
+ ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
+
+ EXPECT_EQ(url.spec(), headers["url"]);
+ EXPECT_TRUE(headers.find("upgrade") == headers.end());
+ EXPECT_TRUE(headers.find("Upgrade") == headers.end());
+ EXPECT_TRUE(headers.find("connection") == headers.end());
+ EXPECT_TRUE(headers.find("Connection") == headers.end());
+ EXPECT_TRUE(headers.find("Sec-WebSocket-Key1") == headers.end());
+ EXPECT_TRUE(headers.find("sec-websocket-key1") == headers.end());
+ EXPECT_TRUE(headers.find("Sec-WebSocket-Key2") == headers.end());
+ EXPECT_TRUE(headers.find("sec-websocket-key2") == headers.end());
+ EXPECT_EQ("example.com", headers["host"]);
+ EXPECT_EQ("http://example.com", headers["origin"]);
+ EXPECT_EQ("sample", headers["sec-websocket-protocol"]);
+ const char bogus_header[] = "X\0Y";
+ std::string bogus_header_str(bogus_header, sizeof(bogus_header) - 1);
+ EXPECT_EQ(bogus_header_str, headers["x-bogus-header"]);
+
+ const char expected_challenge[] = "\x31\x6e\x41\x13\x0f\x7e\xd6\x3c^n:ds[4U";
+
+ EXPECT_EQ(expected_challenge, challenge);
+
+ headers.clear();
+
+ headers["sec-websocket-origin"] = "http://example.com";
+ headers["sec-websocket-location"] = "ws://example.com/demo";
+ headers["sec-websocket-protocol"] = "sample";
+
+ WebSocketHandshakeResponseHandler response_handler;
+ EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
+ EXPECT_TRUE(response_handler.HasResponse());
+
+ // Note that order of sec-websocket-* is sensitive with hash_map order.
+ static const char* kHandshakeResponseExpectedMessage =
+ "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
+ "Upgrade: WebSocket\r\n"
+ "Connection: Upgrade\r\n"
+ "sec-websocket-location: ws://example.com/demo\r\n"
Yuta Kitamura 2010/06/29 09:09:08 Why these header names are all lower-case? Is it r
ukai 2010/06/29 09:14:18 These comes from spdy and we'll use lower case fie
Yuta Kitamura 2010/06/29 09:20:33 I know it's valid, but I'm a bit worried about Web
+ "sec-websocket-origin: http://example.com\r\n"
+ "sec-websocket-protocol: sample\r\n"
+ "\r\n"
+ "8jKS'y:G*Co,Wxa-";
+
+ EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
+}
+
+
+TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseWithCookies) {
+ WebSocketHandshakeRequestHandler request_handler;
+
+ // Note that websocket won't use multiple headers in request now.
+ static const char* kHandshakeRequestMessage =
+ "GET /demo HTTP/1.1\r\n"
+ "Host: example.com\r\n"
+ "Connection: Upgrade\r\n"
+ "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n"
+ "Sec-WebSocket-Protocol: sample\r\n"
+ "Upgrade: WebSocket\r\n"
+ "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n"
+ "Origin: http://example.com\r\n"
+ "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n"
+ "\r\n"
+ "^n:ds[4U";
+
+ EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
+ strlen(kHandshakeRequestMessage)));
+
+ GURL url("ws://example.com/demo");
+ std::string challenge;
+ spdy::SpdyHeaderBlock headers;
+ ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
+
+ EXPECT_EQ(url.spec(), headers["url"]);
+ EXPECT_TRUE(headers.find("upgrade") == headers.end());
+ EXPECT_TRUE(headers.find("Upgrade") == headers.end());
+ EXPECT_TRUE(headers.find("connection") == headers.end());
+ EXPECT_TRUE(headers.find("Connection") == headers.end());
+ EXPECT_TRUE(headers.find("Sec-WebSocket-Key1") == headers.end());
+ EXPECT_TRUE(headers.find("sec-websocket-key1") == headers.end());
+ EXPECT_TRUE(headers.find("Sec-WebSocket-Key2") == headers.end());
+ EXPECT_TRUE(headers.find("sec-websocket-key2") == headers.end());
+ EXPECT_EQ("example.com", headers["host"]);
+ EXPECT_EQ("http://example.com", headers["origin"]);
+ EXPECT_EQ("sample", headers["sec-websocket-protocol"]);
+ EXPECT_EQ("WK-websocket-test=1; WK-websocket-test-httponly=1",
+ headers["cookie"]);
+
+ const char expected_challenge[] = "\x31\x6e\x41\x13\x0f\x7e\xd6\x3c^n:ds[4U";
+
+ EXPECT_EQ(expected_challenge, challenge);
+
+ headers.clear();
+
+ headers["sec-websocket-origin"] = "http://example.com";
+ headers["sec-websocket-location"] = "ws://example.com/demo";
+ headers["sec-websocket-protocol"] = "sample";
+ std::string cookie = "WK-websocket-test=1";
+ cookie.append(1, '\0');
+ cookie += "WK-websocket-test-httponly=1; HttpOnly";
+ headers["set-cookie"] = cookie;
+
+ WebSocketHandshakeResponseHandler response_handler;
+ EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
+ EXPECT_TRUE(response_handler.HasResponse());
+
+ // Note that order of sec-websocket-* is sensitive with hash_map order.
+ static const char* kHandshakeResponseExpectedMessage =
+ "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
+ "Upgrade: WebSocket\r\n"
+ "Connection: Upgrade\r\n"
+ "sec-websocket-location: ws://example.com/demo\r\n"
+ "sec-websocket-origin: http://example.com\r\n"
+ "sec-websocket-protocol: sample\r\n"
+ "set-cookie: WK-websocket-test=1\r\n"
+ "set-cookie: WK-websocket-test-httponly=1; HttpOnly\r\n"
+ "\r\n"
+ "8jKS'y:G*Co,Wxa-";
+
+ EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
+}
+
} // namespace net
« no previous file with comments | « net/websockets/websocket_handshake_handler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698