diff options
-rw-r--r-- | net/net.gyp | 3 | ||||
-rw-r--r-- | net/spdy/spdy_websocket_test_util.cc | 17 | ||||
-rw-r--r-- | net/spdy/spdy_websocket_test_util.h | 14 | ||||
-rw-r--r-- | net/websockets/websocket_handshake_handler_spdy3_unittest.cc | 183 | ||||
-rw-r--r-- | net/websockets/websocket_handshake_handler_spdy_unittest.cc (renamed from net/websockets/websocket_handshake_handler_spdy2_unittest.cc) | 110 |
5 files changed, 91 insertions, 236 deletions
diff --git a/net/net.gyp b/net/net.gyp index 41c23d8..a57186b 100644 --- a/net/net.gyp +++ b/net/net.gyp @@ -1828,8 +1828,7 @@ 'websockets/websocket_frame_parser_unittest.cc', 'websockets/websocket_frame_unittest.cc', 'websockets/websocket_handshake_handler_unittest.cc', - 'websockets/websocket_handshake_handler_spdy2_unittest.cc', - 'websockets/websocket_handshake_handler_spdy3_unittest.cc', + 'websockets/websocket_handshake_handler_spdy_unittest.cc', 'websockets/websocket_job_unittest.cc', 'websockets/websocket_net_log_params_unittest.cc', 'websockets/websocket_throttle_unittest.cc', diff --git a/net/spdy/spdy_websocket_test_util.cc b/net/spdy/spdy_websocket_test_util.cc index 2327ee2..0872e3f 100644 --- a/net/spdy/spdy_websocket_test_util.cc +++ b/net/spdy/spdy_websocket_test_util.cc @@ -19,11 +19,17 @@ static const int kDefaultExtraHeaderCount = 0; SpdyWebSocketTestUtil::SpdyWebSocketTestUtil( NextProto protocol) : spdy_util_(protocol) {} +std::string SpdyWebSocketTestUtil::GetHeader(const SpdyHeaderBlock& headers, + const std::string& key) const { + SpdyHeaderBlock::const_iterator it = headers.find(GetHeaderKey(key)); + return (it == headers.end()) ? "" : it->second; +} + void SpdyWebSocketTestUtil::SetHeader( const std::string& key, const std::string& value, SpdyHeaderBlock* headers) const { - (*headers)[(spdy_util_.is_spdy2() ? "" : ":") + key] = value; + (*headers)[GetHeaderKey(key)] = value; } SpdyFrame* SpdyWebSocketTestUtil::ConstructSpdyWebSocketSynStream( @@ -146,4 +152,13 @@ SpdyFrame* SpdyWebSocketTestUtil::ConstructSpdySettings( return spdy_util_.ConstructSpdySettings(settings); } +SpdyMajorVersion SpdyWebSocketTestUtil::spdy_version() const { + return spdy_util_.spdy_version(); +} + +std::string SpdyWebSocketTestUtil::GetHeaderKey( + const std::string& key) const { + return (spdy_util_.is_spdy2() ? "" : ":") + key; +} + } // namespace net diff --git a/net/spdy/spdy_websocket_test_util.h b/net/spdy/spdy_websocket_test_util.h index f334919..7a9a59e 100644 --- a/net/spdy/spdy_websocket_test_util.h +++ b/net/spdy/spdy_websocket_test_util.h @@ -6,6 +6,7 @@ #define NET_SPDY_SPDY_WEBSOCKET_TEST_UTIL_H_ #include "net/base/request_priority.h" +#include "net/spdy/spdy_header_block.h" #include "net/spdy/spdy_protocol.h" #include "net/spdy/spdy_test_util_common.h" @@ -15,8 +16,13 @@ class SpdyWebSocketTestUtil { public: explicit SpdyWebSocketTestUtil(NextProto protocol); - // Adds the given key/value pair to |headers|, tweaking it depending - // on SPDY version. + // Returns the value corresponding to the given key (passed through + // GetHeaderKey()), or the empty string if none exists. + std::string GetHeader(const SpdyHeaderBlock& headers, + const std::string& key) const; + + // Adds the given key/value pair to |headers|, passing the key + // through GetHeaderKey(). void SetHeader(const std::string& key, const std::string& value, SpdyHeaderBlock* headers) const; @@ -57,8 +63,12 @@ class SpdyWebSocketTestUtil { // Forwards to |spdy_util_|. SpdyFrame* ConstructSpdySettings(const SettingsMap& settings) const; + SpdyMajorVersion spdy_version() const; private: + // Modify the header key based on the SPDY version and return it. + std::string GetHeaderKey(const std::string& key) const; + SpdyTestUtil spdy_util_; }; diff --git a/net/websockets/websocket_handshake_handler_spdy3_unittest.cc b/net/websockets/websocket_handshake_handler_spdy3_unittest.cc deleted file mode 100644 index d5f33b4..0000000 --- a/net/websockets/websocket_handshake_handler_spdy3_unittest.cc +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "net/websockets/websocket_handshake_handler.h" - -#include <string> - -#include "googleurl/src/gurl.h" -#include "net/http/http_util.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace net { - -namespace { - -TEST(WebSocketHandshakeHandlerSpdy3Test, RequestResponse) { - WebSocketHandshakeRequestHandler request_handler; - - static const char kHandshakeRequestMessage[] = - "GET /demo HTTP/1.1\r\n" - "Host: example.com\r\n" - "Upgrade: websocket\r\n" - "Connection: Upgrade\r\n" - "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n" - "Origin: http://example.com\r\n" - "Sec-WebSocket-Protocol: sample\r\n" - "Sec-WebSocket-Extensions: foo\r\n" - "Sec-WebSocket-Version: 13\r\n" - "X-Foo: foo\r\n" - "\r\n"; - - EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage, - strlen(kHandshakeRequestMessage))); - EXPECT_EQ(13, request_handler.protocol_version()); - - GURL url("ws://example.com/demo"); - std::string challenge; - SpdyHeaderBlock headers; - ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, - &headers, - &challenge, - 3)); - - EXPECT_EQ(url.path(), headers[":path"]); - 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-Key") == headers.end()); - EXPECT_TRUE(headers.find(":sec-websocket-key") == headers.end()); - EXPECT_TRUE(headers.find(":Sec-WebSocket-Version") == headers.end()); - EXPECT_TRUE(headers.find(":sec-webSocket-version") == headers.end()); - EXPECT_TRUE(headers.find(":x-foo") == headers.end()); - EXPECT_EQ("example.com", headers[":host"]); - EXPECT_EQ("http://example.com", headers[":origin"]); - EXPECT_EQ("sample", headers[":sec-websocket-protocol"]); - EXPECT_EQ("foo", headers[":sec-websocket-extensions"]); - EXPECT_EQ("ws", headers[":scheme"]); - EXPECT_EQ("WebSocket/13", headers[":version"]); - EXPECT_EQ("foo", headers["x-foo"]); - - static const char expected_challenge[] = "dGhlIHNhbXBsZSBub25jZQ=="; - - EXPECT_EQ(expected_challenge, challenge); - - headers.clear(); - - headers[":status"] = "101 Switching Protocols"; - headers[":sec-websocket-protocol"] = "sample"; - headers[":sec-websocket-extensions"] = "foo"; - headers["x-bar"] = "bar"; - - WebSocketHandshakeResponseHandler response_handler; - response_handler.set_protocol_version(13); - EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, - challenge, - 3)); - 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 Switching Protocols\r\n" - "Upgrade: websocket\r\n" - "Connection: Upgrade\r\n" - "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n" - "sec-websocket-extensions: foo\r\n" - "sec-websocket-protocol: sample\r\n" - "x-bar: bar\r\n" - "\r\n"; - - EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse()); -} - -TEST(WebSocketHandshakeHandlerSpdy3Test, RequestResponseWithCookies) { - 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" - "Upgrade: websocket\r\n" - "Connection: Upgrade\r\n" - "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n" - "Origin: http://example.com\r\n" - "Sec-WebSocket-Protocol: sample\r\n" - "Sec-WebSocket-Extensions: foo\r\n" - "Sec-WebSocket-Version: 13\r\n" - "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n" - "\r\n"; - - EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage, - strlen(kHandshakeRequestMessage))); - EXPECT_EQ(13, request_handler.protocol_version()); - - GURL url("ws://example.com/demo"); - std::string challenge; - SpdyHeaderBlock headers; - ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, - &headers, - &challenge, - 3)); - - EXPECT_EQ(url.path(), headers[":path"]); - 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-Key") == headers.end()); - EXPECT_TRUE(headers.find(":sec-websocket-key") == headers.end()); - EXPECT_TRUE(headers.find(":Sec-WebSocket-Version") == headers.end()); - EXPECT_TRUE(headers.find(":sec-webSocket-version") == headers.end()); - EXPECT_TRUE(headers.find(":Cookie") == headers.end()); - EXPECT_TRUE(headers.find(":cookie") == headers.end()); - EXPECT_EQ("example.com", headers[":host"]); - EXPECT_EQ("http://example.com", headers[":origin"]); - EXPECT_EQ("sample", headers[":sec-websocket-protocol"]); - EXPECT_EQ("foo", headers[":sec-websocket-extensions"]); - EXPECT_EQ("ws", headers[":scheme"]); - EXPECT_EQ("WebSocket/13", headers[":version"]); - EXPECT_EQ("WK-websocket-test=1; WK-websocket-test-httponly=1", - headers["cookie"]); - - const char expected_challenge[] = "dGhlIHNhbXBsZSBub25jZQ=="; - - EXPECT_EQ(expected_challenge, challenge); - - headers.clear(); - - headers[":status"] = "101 Switching Protocols"; - headers[":sec-websocket-protocol"] = "sample"; - headers[":sec-websocket-extensions"] = "foo"; - 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; - response_handler.set_protocol_version(13); - EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, - challenge, - 3)); - 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 Switching Protocols\r\n" - "Upgrade: websocket\r\n" - "Connection: Upgrade\r\n" - "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n" - "sec-websocket-extensions: foo\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"; - - EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse()); -} - -} // namespace - -} // namespace net diff --git a/net/websockets/websocket_handshake_handler_spdy2_unittest.cc b/net/websockets/websocket_handshake_handler_spdy_unittest.cc index 3109f75f..d019613 100644 --- a/net/websockets/websocket_handshake_handler_spdy2_unittest.cc +++ b/net/websockets/websocket_handshake_handler_spdy_unittest.cc @@ -7,14 +7,30 @@ #include <string> #include "googleurl/src/gurl.h" +#include "net/socket/next_proto.h" #include "net/spdy/spdy_header_block.h" +#include "net/spdy/spdy_websocket_test_util.h" #include "testing/gtest/include/gtest/gtest.h" namespace net { namespace { -TEST(WebSocketHandshakeHandlerSpdy2Test, RequestResponse) { +class WebSocketHandshakeHandlerSpdyTest + : public ::testing::Test, + public ::testing::WithParamInterface<NextProto> { + protected: + WebSocketHandshakeHandlerSpdyTest() : spdy_util_(GetParam()) {} + + SpdyWebSocketTestUtil spdy_util_; +}; + +INSTANTIATE_TEST_CASE_P( + NextProto, + WebSocketHandshakeHandlerSpdyTest, + testing::Values(kProtoSPDY2, kProtoSPDY3, kProtoSPDY31, kProtoSPDY4a2)); + +TEST_P(WebSocketHandshakeHandlerSpdyTest, RequestResponse) { WebSocketHandshakeRequestHandler request_handler; static const char kHandshakeRequestMessage[] = @@ -39,23 +55,23 @@ TEST(WebSocketHandshakeHandlerSpdy2Test, RequestResponse) { ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge, - 2)); - - EXPECT_EQ(url.path(), headers["path"]); - 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-Key") == headers.end()); - EXPECT_TRUE(headers.find("sec-websocket-key") == headers.end()); - EXPECT_TRUE(headers.find("Sec-WebSocket-Version") == headers.end()); - EXPECT_TRUE(headers.find("sec-webSocket-version") == headers.end()); - EXPECT_EQ("example.com", headers["host"]); - EXPECT_EQ("http://example.com", headers["origin"]); - EXPECT_EQ("sample", headers["sec-websocket-protocol"]); - EXPECT_EQ("foo", headers["sec-websocket-extensions"]); - EXPECT_EQ("ws", headers["scheme"]); - EXPECT_EQ("WebSocket/13", headers["version"]); + spdy_util_.spdy_version())); + + EXPECT_EQ(url.path(), spdy_util_.GetHeader(headers, "path")); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "upgrade").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "Upgrade").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "connection").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "Connection").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "Sec-WebSocket-Key").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "sec-websocket-key").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "Sec-WebSocket-Version").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "sec-webSocket-version").empty()); + EXPECT_EQ("example.com", spdy_util_.GetHeader(headers, "host")); + EXPECT_EQ("http://example.com", spdy_util_.GetHeader(headers, "origin")); + EXPECT_EQ("sample", spdy_util_.GetHeader(headers, "sec-websocket-protocol")); + EXPECT_EQ("foo", spdy_util_.GetHeader(headers, "sec-websocket-extensions")); + EXPECT_EQ("ws", spdy_util_.GetHeader(headers, "scheme")); + EXPECT_EQ("WebSocket/13", spdy_util_.GetHeader(headers, "version")); static const char expected_challenge[] = "dGhlIHNhbXBsZSBub25jZQ=="; @@ -63,15 +79,14 @@ TEST(WebSocketHandshakeHandlerSpdy2Test, RequestResponse) { headers.clear(); - headers["status"] = "101 Switching Protocols"; - headers["sec-websocket-protocol"] = "sample"; - headers["sec-websocket-extensions"] = "foo"; + spdy_util_.SetHeader("status", "101 Switching Protocols", &headers); + spdy_util_.SetHeader("sec-websocket-protocol", "sample", &headers); + spdy_util_.SetHeader("sec-websocket-extensions", "foo", &headers); WebSocketHandshakeResponseHandler response_handler; response_handler.set_protocol_version(13); - EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, - challenge, - 2)); + EXPECT_TRUE(response_handler.ParseResponseHeaderBlock( + headers, challenge, spdy_util_.spdy_version())); EXPECT_TRUE(response_handler.HasResponse()); // Note that order of sec-websocket-* is sensitive with hash_map order. @@ -87,7 +102,7 @@ TEST(WebSocketHandshakeHandlerSpdy2Test, RequestResponse) { EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse()); } -TEST(WebSocketHandshakeHandlerSpdy2Test, RequestResponseWithCookies) { +TEST_P(WebSocketHandshakeHandlerSpdyTest, RequestResponseWithCookies) { WebSocketHandshakeRequestHandler request_handler; // Note that websocket won't use multiple headers in request now. @@ -114,23 +129,23 @@ TEST(WebSocketHandshakeHandlerSpdy2Test, RequestResponseWithCookies) { ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge, - 2)); - - EXPECT_EQ(url.path(), headers["path"]); - 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-Key") == headers.end()); - EXPECT_TRUE(headers.find("sec-websocket-key") == headers.end()); - EXPECT_TRUE(headers.find("Sec-WebSocket-Version") == headers.end()); - EXPECT_TRUE(headers.find("sec-webSocket-version") == headers.end()); - EXPECT_EQ("example.com", headers["host"]); - EXPECT_EQ("http://example.com", headers["origin"]); - EXPECT_EQ("sample", headers["sec-websocket-protocol"]); - EXPECT_EQ("foo", headers["sec-websocket-extensions"]); - EXPECT_EQ("ws", headers["scheme"]); - EXPECT_EQ("WebSocket/13", headers["version"]); + spdy_util_.spdy_version())); + + EXPECT_EQ(url.path(), spdy_util_.GetHeader(headers, "path")); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "upgrade").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "Upgrade").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "connection").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "Connection").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "Sec-WebSocket-Key").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "sec-websocket-key").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "Sec-WebSocket-Version").empty()); + EXPECT_TRUE(spdy_util_.GetHeader(headers, "sec-webSocket-version").empty()); + EXPECT_EQ("example.com", spdy_util_.GetHeader(headers, "host")); + EXPECT_EQ("http://example.com", spdy_util_.GetHeader(headers, "origin")); + EXPECT_EQ("sample", spdy_util_.GetHeader(headers, "sec-websocket-protocol")); + EXPECT_EQ("foo", spdy_util_.GetHeader(headers, "sec-websocket-extensions")); + EXPECT_EQ("ws", spdy_util_.GetHeader(headers, "scheme")); + EXPECT_EQ("WebSocket/13", spdy_util_.GetHeader(headers, "version")); EXPECT_EQ("WK-websocket-test=1; WK-websocket-test-httponly=1", headers["cookie"]); @@ -140,9 +155,9 @@ TEST(WebSocketHandshakeHandlerSpdy2Test, RequestResponseWithCookies) { headers.clear(); - headers["status"] = "101 Switching Protocols"; - headers["sec-websocket-protocol"] = "sample"; - headers["sec-websocket-extensions"] = "foo"; + spdy_util_.SetHeader("status", "101 Switching Protocols", &headers); + spdy_util_.SetHeader("sec-websocket-protocol", "sample", &headers); + spdy_util_.SetHeader("sec-websocket-extensions", "foo", &headers); std::string cookie = "WK-websocket-test=1"; cookie.append(1, '\0'); cookie += "WK-websocket-test-httponly=1; HttpOnly"; @@ -151,9 +166,8 @@ TEST(WebSocketHandshakeHandlerSpdy2Test, RequestResponseWithCookies) { WebSocketHandshakeResponseHandler response_handler; response_handler.set_protocol_version(13); - EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, - challenge, - 2)); + EXPECT_TRUE(response_handler.ParseResponseHeaderBlock( + headers, challenge, spdy_util_.spdy_version())); EXPECT_TRUE(response_handler.HasResponse()); // Note that order of sec-websocket-* is sensitive with hash_map order. |