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

Side by Side Diff: net/server/web_socket_encoder_unittest.cc

Issue 769423005: Support WebSocket per-message deflate extension in http server. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed comment. Added unittest. Created 6 years 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 unified diff | Download patch
OLDNEW
(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 client_.reset(WebSocketEncoder::CreateClient(response_extensions));
35 }
36 };
37
38 TEST_F(WebSocketEncoderTest, ClientToServer) {
39 std::string frame("ClientToServer");
40 int mask = 123456;
41 std::string encoded;
42 int bytes_consumed;
43 std::string decoded;
44
45 client_->EncodeFrame(frame, mask, &encoded);
46 EXPECT_EQ(WebSocket::FRAME_OK,
47 server_->DecodeFrame(encoded, &bytes_consumed, &decoded));
48 EXPECT_EQ(frame, decoded);
49 EXPECT_EQ((int)encoded.length(), bytes_consumed);
50
51 std::string partial = encoded.substr(0, encoded.length() - 2);
52 EXPECT_EQ(WebSocket::FRAME_INCOMPLETE,
53 server_->DecodeFrame(partial, &bytes_consumed, &decoded));
54
55 std::string extra = encoded + "more stuff";
56 EXPECT_EQ(WebSocket::FRAME_OK,
57 server_->DecodeFrame(extra, &bytes_consumed, &decoded));
58 EXPECT_EQ(frame, decoded);
59 EXPECT_EQ((int)encoded.length(), bytes_consumed);
60
61 EXPECT_EQ(
62 WebSocket::FRAME_ERROR,
63 server_->DecodeFrame(std::string("abcde"), &bytes_consumed, &decoded));
64 }
65
66 TEST_F(WebSocketEncoderTest, ServerToClient) {
67 std::string frame("ServerToClient");
68 int mask = 0;
69 std::string encoded;
70 int bytes_consumed;
71 std::string decoded;
72
73 server_->EncodeFrame(frame, mask, &encoded);
74 EXPECT_EQ(WebSocket::FRAME_OK,
75 client_->DecodeFrame(encoded, &bytes_consumed, &decoded));
76 EXPECT_EQ(frame, decoded);
77 EXPECT_EQ((int)encoded.length(), bytes_consumed);
78
79 std::string partial = encoded.substr(0, encoded.length() - 2);
80 EXPECT_EQ(WebSocket::FRAME_INCOMPLETE,
81 client_->DecodeFrame(partial, &bytes_consumed, &decoded));
82
83 std::string extra = encoded + "more stuff";
84 EXPECT_EQ(WebSocket::FRAME_OK,
85 client_->DecodeFrame(extra, &bytes_consumed, &decoded));
86 EXPECT_EQ(frame, decoded);
87 EXPECT_EQ((int)encoded.length(), bytes_consumed);
88
89 EXPECT_EQ(
90 WebSocket::FRAME_ERROR,
91 client_->DecodeFrame(std::string("abcde"), &bytes_consumed, &decoded));
92 }
93
94 TEST_F(WebSocketEncoderCompressionTest, ClientToServer) {
95 std::string frame("CompressionCompressionCompressionCompression");
96 int mask = 654321;
97 std::string encoded;
98 int bytes_consumed;
99 std::string decoded;
100
101 client_->EncodeFrame(frame, mask, &encoded);
102 EXPECT_LT(encoded.length(), frame.length());
103 EXPECT_EQ(WebSocket::FRAME_OK,
104 server_->DecodeFrame(encoded, &bytes_consumed, &decoded));
105 EXPECT_EQ(frame, decoded);
106 EXPECT_EQ((int)encoded.length(), bytes_consumed);
107 }
108
109 TEST_F(WebSocketEncoderCompressionTest, ServerToClient) {
110 std::string frame("CompressionCompressionCompressionCompression");
111 int mask = 0;
112 std::string encoded;
113 int bytes_consumed;
114 std::string decoded;
115
116 server_->EncodeFrame(frame, mask, &encoded);
117 EXPECT_LT(encoded.length(), frame.length());
118 EXPECT_EQ(WebSocket::FRAME_OK,
119 client_->DecodeFrame(encoded, &bytes_consumed, &decoded));
120 EXPECT_EQ(frame, decoded);
121 EXPECT_EQ((int)encoded.length(), bytes_consumed);
122 }
123
124 TEST_F(WebSocketEncoderCompressionTest, LongFrame) {
125 int length = 1000000;
126 std::string temp;
127 temp.reserve(length);
128 for (int i = 0; i < length; ++i)
129 temp += (char)('a' + (i % 26));
130
131 std::string frame;
132 frame.reserve(length);
133 for (int i = 0; i < length; ++i) {
134 int64 j = i;
135 frame += temp.data()[(j * j) % length];
136 }
137
138 int mask = 0;
139 std::string encoded;
140 int bytes_consumed;
141 std::string decoded;
142
143 server_->EncodeFrame(frame, mask, &encoded);
144 EXPECT_LT(encoded.length(), frame.length());
145 EXPECT_EQ(WebSocket::FRAME_OK,
146 client_->DecodeFrame(encoded, &bytes_consumed, &decoded));
147 EXPECT_EQ(frame, decoded);
148 EXPECT_EQ((int)encoded.length(), bytes_consumed);
149 }
150
151 } // namespace net
OLDNEW
« net/server/web_socket_encoder.cc ('K') | « net/server/web_socket_encoder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698