| Index: net/server/web_socket_encoder_unittest.cc
|
| diff --git a/net/server/web_socket_encoder_unittest.cc b/net/server/web_socket_encoder_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b52939a22e46be1efbc01e49ccceaa0d9e1b728f
|
| --- /dev/null
|
| +++ b/net/server/web_socket_encoder_unittest.cc
|
| @@ -0,0 +1,155 @@
|
| +// Copyright 2014 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/server/web_socket_encoder.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace net {
|
| +
|
| +class WebSocketEncoderTest : public testing::Test {
|
| + public:
|
| + WebSocketEncoderTest() {}
|
| +
|
| + void SetUp() override {
|
| + std::string response_extensions;
|
| + server_.reset(WebSocketEncoder::CreateServer("", &response_extensions));
|
| + EXPECT_EQ(std::string(), response_extensions);
|
| + client_.reset(WebSocketEncoder::CreateClient(""));
|
| + }
|
| +
|
| + protected:
|
| + scoped_ptr<WebSocketEncoder> server_;
|
| + scoped_ptr<WebSocketEncoder> client_;
|
| +};
|
| +
|
| +class WebSocketEncoderCompressionTest : public WebSocketEncoderTest {
|
| + public:
|
| + WebSocketEncoderCompressionTest() : WebSocketEncoderTest() {}
|
| +
|
| + void SetUp() override {
|
| + std::string response_extensions;
|
| + server_.reset(WebSocketEncoder::CreateServer(
|
| + "permessage-deflate; client_max_window_bits", &response_extensions));
|
| + EXPECT_EQ(
|
| + "permessage-deflate; server_max_window_bits=15; "
|
| + "client_max_window_bits=15",
|
| + response_extensions);
|
| + client_.reset(WebSocketEncoder::CreateClient(response_extensions));
|
| + }
|
| +};
|
| +
|
| +TEST_F(WebSocketEncoderTest, ClientToServer) {
|
| + std::string frame("ClientToServer");
|
| + int mask = 123456;
|
| + std::string encoded;
|
| + int bytes_consumed;
|
| + std::string decoded;
|
| +
|
| + client_->EncodeFrame(frame, mask, &encoded);
|
| + EXPECT_EQ(WebSocket::FRAME_OK,
|
| + server_->DecodeFrame(encoded, &bytes_consumed, &decoded));
|
| + EXPECT_EQ(frame, decoded);
|
| + EXPECT_EQ((int)encoded.length(), bytes_consumed);
|
| +
|
| + std::string partial = encoded.substr(0, encoded.length() - 2);
|
| + EXPECT_EQ(WebSocket::FRAME_INCOMPLETE,
|
| + server_->DecodeFrame(partial, &bytes_consumed, &decoded));
|
| +
|
| + std::string extra = encoded + "more stuff";
|
| + EXPECT_EQ(WebSocket::FRAME_OK,
|
| + server_->DecodeFrame(extra, &bytes_consumed, &decoded));
|
| + EXPECT_EQ(frame, decoded);
|
| + EXPECT_EQ((int)encoded.length(), bytes_consumed);
|
| +
|
| + EXPECT_EQ(
|
| + WebSocket::FRAME_ERROR,
|
| + server_->DecodeFrame(std::string("abcde"), &bytes_consumed, &decoded));
|
| +}
|
| +
|
| +TEST_F(WebSocketEncoderTest, ServerToClient) {
|
| + std::string frame("ServerToClient");
|
| + int mask = 0;
|
| + std::string encoded;
|
| + int bytes_consumed;
|
| + std::string decoded;
|
| +
|
| + server_->EncodeFrame(frame, mask, &encoded);
|
| + EXPECT_EQ(WebSocket::FRAME_OK,
|
| + client_->DecodeFrame(encoded, &bytes_consumed, &decoded));
|
| + EXPECT_EQ(frame, decoded);
|
| + EXPECT_EQ((int)encoded.length(), bytes_consumed);
|
| +
|
| + std::string partial = encoded.substr(0, encoded.length() - 2);
|
| + EXPECT_EQ(WebSocket::FRAME_INCOMPLETE,
|
| + client_->DecodeFrame(partial, &bytes_consumed, &decoded));
|
| +
|
| + std::string extra = encoded + "more stuff";
|
| + EXPECT_EQ(WebSocket::FRAME_OK,
|
| + client_->DecodeFrame(extra, &bytes_consumed, &decoded));
|
| + EXPECT_EQ(frame, decoded);
|
| + EXPECT_EQ((int)encoded.length(), bytes_consumed);
|
| +
|
| + EXPECT_EQ(
|
| + WebSocket::FRAME_ERROR,
|
| + client_->DecodeFrame(std::string("abcde"), &bytes_consumed, &decoded));
|
| +}
|
| +
|
| +TEST_F(WebSocketEncoderCompressionTest, ClientToServer) {
|
| + std::string frame("CompressionCompressionCompressionCompression");
|
| + int mask = 654321;
|
| + std::string encoded;
|
| + int bytes_consumed;
|
| + std::string decoded;
|
| +
|
| + client_->EncodeFrame(frame, mask, &encoded);
|
| + EXPECT_LT(encoded.length(), frame.length());
|
| + EXPECT_EQ(WebSocket::FRAME_OK,
|
| + server_->DecodeFrame(encoded, &bytes_consumed, &decoded));
|
| + EXPECT_EQ(frame, decoded);
|
| + EXPECT_EQ((int)encoded.length(), bytes_consumed);
|
| +}
|
| +
|
| +TEST_F(WebSocketEncoderCompressionTest, ServerToClient) {
|
| + std::string frame("CompressionCompressionCompressionCompression");
|
| + int mask = 0;
|
| + std::string encoded;
|
| + int bytes_consumed;
|
| + std::string decoded;
|
| +
|
| + server_->EncodeFrame(frame, mask, &encoded);
|
| + EXPECT_LT(encoded.length(), frame.length());
|
| + EXPECT_EQ(WebSocket::FRAME_OK,
|
| + client_->DecodeFrame(encoded, &bytes_consumed, &decoded));
|
| + EXPECT_EQ(frame, decoded);
|
| + EXPECT_EQ((int)encoded.length(), bytes_consumed);
|
| +}
|
| +
|
| +TEST_F(WebSocketEncoderCompressionTest, LongFrame) {
|
| + int length = 1000000;
|
| + std::string temp;
|
| + temp.reserve(length);
|
| + for (int i = 0; i < length; ++i)
|
| + temp += (char)('a' + (i % 26));
|
| +
|
| + std::string frame;
|
| + frame.reserve(length);
|
| + for (int i = 0; i < length; ++i) {
|
| + int64 j = i;
|
| + frame += temp.data()[(j * j) % length];
|
| + }
|
| +
|
| + int mask = 0;
|
| + std::string encoded;
|
| + int bytes_consumed;
|
| + std::string decoded;
|
| +
|
| + server_->EncodeFrame(frame, mask, &encoded);
|
| + EXPECT_LT(encoded.length(), frame.length());
|
| + EXPECT_EQ(WebSocket::FRAME_OK,
|
| + client_->DecodeFrame(encoded, &bytes_consumed, &decoded));
|
| + EXPECT_EQ(frame, decoded);
|
| + EXPECT_EQ((int)encoded.length(), bytes_consumed);
|
| +}
|
| +
|
| +} // namespace net
|
|
|