diff options
author | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-03 08:58:08 +0000 |
---|---|---|
committer | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-03 08:58:08 +0000 |
commit | 817fc50713c37fb0cb41fbc455d83fb40b40da7e (patch) | |
tree | dfde9cc335e1e35bf9c19fc140c696c3d00e3281 /net/websockets/websocket_handshake_handler_unittest.cc | |
parent | 18141b6e06116e417b40e3bfc16a042e8188fb2b (diff) | |
download | chromium_src-817fc50713c37fb0cb41fbc455d83fb40b40da7e.zip chromium_src-817fc50713c37fb0cb41fbc455d83fb40b40da7e.tar.gz chromium_src-817fc50713c37fb0cb41fbc455d83fb40b40da7e.tar.bz2 |
Refactor WebSocket handshake.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/2452001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48816 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/websockets/websocket_handshake_handler_unittest.cc')
-rw-r--r-- | net/websockets/websocket_handshake_handler_unittest.cc | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/net/websockets/websocket_handshake_handler_unittest.cc b/net/websockets/websocket_handshake_handler_unittest.cc new file mode 100644 index 0000000..44e1633 --- /dev/null +++ b/net/websockets/websocket_handshake_handler_unittest.cc @@ -0,0 +1,152 @@ +// Copyright (c) 2010 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 <string> +#include <vector> + +#include "base/basictypes.h" +#include "googleurl/src/gurl.h" +#include "net/websockets/websocket_handshake_handler.h" + +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/platform_test.h" + +namespace { + +const char* const kCookieHeaders[] = { + "cookie", "cookie2" +}; + +const char* const kSetCookieHeaders[] = { + "set-cookie", "set-cookie2" +}; + +} + +namespace net { + +TEST(WebSocketHandshakeRequestHandlerTest, SimpleRequest) { + WebSocketHandshakeRequestHandler 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" + "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n" + "Origin: http://example.com\r\n" + "\r\n" + "^n:ds[4U"; + + EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage, + strlen(kHandshakeRequestMessage))); + + handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders)); + + EXPECT_EQ(kHandshakeRequestMessage, handler.GetRawRequest()); +} + +TEST(WebSocketHandshakeRequestHandlerTest, ReplaceRequestCookies) { + WebSocketHandshakeRequestHandler 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" + "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n" + "Origin: http://example.com\r\n" + "Cookie: WK-websocket-test=1\r\n" + "\r\n" + "^n:ds[4U"; + + EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage, + strlen(kHandshakeRequestMessage))); + + handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders)); + + handler.AppendHeaderIfMissing("Cookie", + "WK-websocket-test=1; " + "WK-websocket-test-httponly=1"); + + static const char* kHandshakeRequestExpectedMessage = + "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_EQ(kHandshakeRequestExpectedMessage, handler.GetRawRequest()); +} + +TEST(WebSocketHandshakeResponseHandlerTest, SimpleResponse) { + WebSocketHandshakeResponseHandler handler; + + static const char* kHandshakeResponseMessage = + "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Origin: http://example.com\r\n" + "Sec-WebSocket-Location: ws://example.com/demo\r\n" + "Sec-WebSocket-Protocol: sample\r\n" + "\r\n" + "8jKS'y:G*Co,Wxa-"; + + EXPECT_TRUE(handler.ParseRawResponse(kHandshakeResponseMessage, + strlen(kHandshakeResponseMessage))); + + handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders)); + + EXPECT_EQ(kHandshakeResponseMessage, handler.GetResponse()); +} + +TEST(WebSocketHandshakeResponseHandlerTest, ReplaceResponseCookies) { + WebSocketHandshakeResponseHandler handler; + + static const char* kHandshakeResponseMessage = + "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Origin: http://example.com\r\n" + "Sec-WebSocket-Location: ws://example.com/demo\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_TRUE(handler.ParseRawResponse(kHandshakeResponseMessage, + strlen(kHandshakeResponseMessage))); + std::vector<std::string> cookies; + handler.GetHeaders(kSetCookieHeaders, arraysize(kSetCookieHeaders), &cookies); + ASSERT_EQ(2U, cookies.size()); + EXPECT_EQ("WK-websocket-test-1", cookies[0]); + EXPECT_EQ("WK-websocket-test-httponly=1; HttpOnly", cookies[1]); + handler.RemoveHeaders(kSetCookieHeaders, arraysize(kSetCookieHeaders)); + + static const char* kHandshakeResponseExpectedMessage = + "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Origin: http://example.com\r\n" + "Sec-WebSocket-Location: ws://example.com/demo\r\n" + "Sec-WebSocket-Protocol: sample\r\n" + "\r\n" + "8jKS'y:G*Co,Wxa-"; + + EXPECT_EQ(kHandshakeResponseExpectedMessage, handler.GetResponse()); +} + +} // namespace net |