| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "net/server/web_socket_encoder.h" | |
| 6 #include "testing/gtest/include/gtest/gtest.h" | |
| 7 | |
| 8 namespace net { | |
| 9 | |
| 10 class WebSocketEncoderTest : public testing::Test { | |
| 11 public: | |
| 12 WebSocketEncoderTest() {} | |
| 13 | |
| 14 void SetUp() override { | |
| 15 std::string response_extensions; | |
| 16 server_.reset(WebSocketEncoder::CreateServer("", &response_extensions)); | |
| 17 EXPECT_EQ(std::string(), response_extensions); | |
| 18 client_.reset(WebSocketEncoder::CreateClient("")); | |
| 19 } | |
| 20 | |
| 21 protected: | |
| 22 scoped_ptr<WebSocketEncoder> server_; | |
| 23 scoped_ptr<WebSocketEncoder> client_; | |
| 24 }; | |
| 25 | |
| 26 class WebSocketEncoderCompressionTest : public WebSocketEncoderTest { | |
| 27 public: | |
| 28 WebSocketEncoderCompressionTest() : WebSocketEncoderTest() {} | |
| 29 | |
| 30 void SetUp() override { | |
| 31 std::string response_extensions; | |
| 32 server_.reset(WebSocketEncoder::CreateServer( | |
| 33 "permessage-deflate; client_max_window_bits", &response_extensions)); | |
| 34 EXPECT_EQ( | |
| 35 "permessage-deflate; server_max_window_bits=15; " | |
| 36 "client_max_window_bits=15", | |
| 37 response_extensions); | |
| 38 client_.reset(WebSocketEncoder::CreateClient(response_extensions)); | |
| 39 } | |
| 40 }; | |
| 41 | |
| 42 TEST_F(WebSocketEncoderTest, ClientToServer) { | |
| 43 std::string frame("ClientToServer"); | |
| 44 int mask = 123456; | |
| 45 std::string encoded; | |
| 46 int bytes_consumed; | |
| 47 std::string decoded; | |
| 48 | |
| 49 client_->EncodeFrame(frame, mask, &encoded); | |
| 50 EXPECT_EQ(WebSocket::FRAME_OK, | |
| 51 server_->DecodeFrame(encoded, &bytes_consumed, &decoded)); | |
| 52 EXPECT_EQ(frame, decoded); | |
| 53 EXPECT_EQ((int)encoded.length(), bytes_consumed); | |
| 54 | |
| 55 std::string partial = encoded.substr(0, encoded.length() - 2); | |
| 56 EXPECT_EQ(WebSocket::FRAME_INCOMPLETE, | |
| 57 server_->DecodeFrame(partial, &bytes_consumed, &decoded)); | |
| 58 | |
| 59 std::string extra = encoded + "more stuff"; | |
| 60 EXPECT_EQ(WebSocket::FRAME_OK, | |
| 61 server_->DecodeFrame(extra, &bytes_consumed, &decoded)); | |
| 62 EXPECT_EQ(frame, decoded); | |
| 63 EXPECT_EQ((int)encoded.length(), bytes_consumed); | |
| 64 | |
| 65 EXPECT_EQ( | |
| 66 WebSocket::FRAME_ERROR, | |
| 67 server_->DecodeFrame(std::string("abcde"), &bytes_consumed, &decoded)); | |
| 68 } | |
| 69 | |
| 70 TEST_F(WebSocketEncoderTest, ServerToClient) { | |
| 71 std::string frame("ServerToClient"); | |
| 72 int mask = 0; | |
| 73 std::string encoded; | |
| 74 int bytes_consumed; | |
| 75 std::string decoded; | |
| 76 | |
| 77 server_->EncodeFrame(frame, mask, &encoded); | |
| 78 EXPECT_EQ(WebSocket::FRAME_OK, | |
| 79 client_->DecodeFrame(encoded, &bytes_consumed, &decoded)); | |
| 80 EXPECT_EQ(frame, decoded); | |
| 81 EXPECT_EQ((int)encoded.length(), bytes_consumed); | |
| 82 | |
| 83 std::string partial = encoded.substr(0, encoded.length() - 2); | |
| 84 EXPECT_EQ(WebSocket::FRAME_INCOMPLETE, | |
| 85 client_->DecodeFrame(partial, &bytes_consumed, &decoded)); | |
| 86 | |
| 87 std::string extra = encoded + "more stuff"; | |
| 88 EXPECT_EQ(WebSocket::FRAME_OK, | |
| 89 client_->DecodeFrame(extra, &bytes_consumed, &decoded)); | |
| 90 EXPECT_EQ(frame, decoded); | |
| 91 EXPECT_EQ((int)encoded.length(), bytes_consumed); | |
| 92 | |
| 93 EXPECT_EQ( | |
| 94 WebSocket::FRAME_ERROR, | |
| 95 client_->DecodeFrame(std::string("abcde"), &bytes_consumed, &decoded)); | |
| 96 } | |
| 97 | |
| 98 TEST_F(WebSocketEncoderCompressionTest, ClientToServer) { | |
| 99 std::string frame("CompressionCompressionCompressionCompression"); | |
| 100 int mask = 654321; | |
| 101 std::string encoded; | |
| 102 int bytes_consumed; | |
| 103 std::string decoded; | |
| 104 | |
| 105 client_->EncodeFrame(frame, mask, &encoded); | |
| 106 EXPECT_LT(encoded.length(), frame.length()); | |
| 107 EXPECT_EQ(WebSocket::FRAME_OK, | |
| 108 server_->DecodeFrame(encoded, &bytes_consumed, &decoded)); | |
| 109 EXPECT_EQ(frame, decoded); | |
| 110 EXPECT_EQ((int)encoded.length(), bytes_consumed); | |
| 111 } | |
| 112 | |
| 113 TEST_F(WebSocketEncoderCompressionTest, ServerToClient) { | |
| 114 std::string frame("CompressionCompressionCompressionCompression"); | |
| 115 int mask = 0; | |
| 116 std::string encoded; | |
| 117 int bytes_consumed; | |
| 118 std::string decoded; | |
| 119 | |
| 120 server_->EncodeFrame(frame, mask, &encoded); | |
| 121 EXPECT_LT(encoded.length(), frame.length()); | |
| 122 EXPECT_EQ(WebSocket::FRAME_OK, | |
| 123 client_->DecodeFrame(encoded, &bytes_consumed, &decoded)); | |
| 124 EXPECT_EQ(frame, decoded); | |
| 125 EXPECT_EQ((int)encoded.length(), bytes_consumed); | |
| 126 } | |
| 127 | |
| 128 TEST_F(WebSocketEncoderCompressionTest, LongFrame) { | |
| 129 int length = 1000000; | |
| 130 std::string temp; | |
| 131 temp.reserve(length); | |
| 132 for (int i = 0; i < length; ++i) | |
| 133 temp += (char)('a' + (i % 26)); | |
| 134 | |
| 135 std::string frame; | |
| 136 frame.reserve(length); | |
| 137 for (int i = 0; i < length; ++i) { | |
| 138 int64 j = i; | |
| 139 frame += temp.data()[(j * j) % length]; | |
| 140 } | |
| 141 | |
| 142 int mask = 0; | |
| 143 std::string encoded; | |
| 144 int bytes_consumed; | |
| 145 std::string decoded; | |
| 146 | |
| 147 server_->EncodeFrame(frame, mask, &encoded); | |
| 148 EXPECT_LT(encoded.length(), frame.length()); | |
| 149 EXPECT_EQ(WebSocket::FRAME_OK, | |
| 150 client_->DecodeFrame(encoded, &bytes_consumed, &decoded)); | |
| 151 EXPECT_EQ(frame, decoded); | |
| 152 EXPECT_EQ((int)encoded.length(), bytes_consumed); | |
| 153 } | |
| 154 | |
| 155 } // namespace net | |
| OLD | NEW |