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

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

Issue 1340523002: Fix WebSocketServer extension parser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ws-constructor-fix
Patch Set: Created 5 years, 2 months 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
« no previous file with comments | « net/server/web_socket_encoder.cc ('k') | net/websockets/websocket_deflate_parameters.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/server/web_socket_encoder.h" 5 #include "net/server/web_socket_encoder.h"
6
7 #include "net/websockets/websocket_deflate_parameters.h"
8 #include "net/websockets/websocket_extension.h"
6 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
7 10
8 namespace net { 11 namespace net {
9 12
13 TEST(WebSocketEncoderHandshakeTest, EmptyRequestShouldBeRejected) {
14 WebSocketDeflateParameters params;
15 scoped_ptr<WebSocketEncoder> server =
16 WebSocketEncoder::CreateServer("", &params);
17
18 EXPECT_FALSE(server);
19 }
20
10 TEST(WebSocketEncoderHandshakeTest, 21 TEST(WebSocketEncoderHandshakeTest,
11 CreateServerWithoutClientMaxWindowBitsParameter) { 22 CreateServerWithoutClientMaxWindowBitsParameter) {
12 std::string response_extensions; 23 WebSocketDeflateParameters params;
13 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer( 24 scoped_ptr<WebSocketEncoder> server =
14 "permessage-deflate", &response_extensions)); 25 WebSocketEncoder::CreateServer("permessage-deflate", &params);
15 // The response must not include client_max_window_bits if the client didn't 26
16 // declare that it accepts the parameter. 27 ASSERT_TRUE(server);
17 EXPECT_EQ("permessage-deflate; server_max_window_bits=15", 28 EXPECT_TRUE(server->deflate_enabled());
18 response_extensions); 29 EXPECT_EQ("permessage-deflate", params.AsExtension().ToString());
19 } 30 }
20 31
21 TEST(WebSocketEncoderHandshakeTest, 32 TEST(WebSocketEncoderHandshakeTest,
22 CreateServerWithServerNoContextTakeoverParameter) { 33 CreateServerWithServerNoContextTakeoverParameter) {
23 std::string response_extensions; 34 WebSocketDeflateParameters params;
24 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer( 35 scoped_ptr<WebSocketEncoder> server = WebSocketEncoder::CreateServer(
25 "permessage-deflate; server_no_context_takeover", &response_extensions)); 36 "permessage-deflate; server_no_context_takeover", &params);
26 EXPECT_EQ( 37 ASSERT_TRUE(server);
27 "permessage-deflate; server_max_window_bits=15" 38 EXPECT_TRUE(server->deflate_enabled());
28 "; server_no_context_takeover", 39 EXPECT_EQ("permessage-deflate; server_no_context_takeover",
29 response_extensions); 40 params.AsExtension().ToString());
41 }
42
43 TEST(WebSocketEncoderHandshakeTest, FirstExtensionShouldBeChosen) {
44 WebSocketDeflateParameters params;
45 scoped_ptr<WebSocketEncoder> server = WebSocketEncoder::CreateServer(
46 "permessage-deflate; server_no_context_takeover,"
47 "permessage-deflate; server_max_window_bits=15",
48 &params);
49
50 ASSERT_TRUE(server);
51 EXPECT_TRUE(server->deflate_enabled());
52 EXPECT_EQ("permessage-deflate; server_no_context_takeover",
53 params.AsExtension().ToString());
54 }
55
56 TEST(WebSocketEncoderHandshakeTest, FirstValidExtensionShouldBeChosen) {
57 WebSocketDeflateParameters params;
58 scoped_ptr<WebSocketEncoder> server = WebSocketEncoder::CreateServer(
59 "permessage-deflate; Xserver_no_context_takeover,"
60 "permessage-deflate; server_max_window_bits=15",
61 &params);
62
63 ASSERT_TRUE(server);
64 EXPECT_TRUE(server->deflate_enabled());
65 EXPECT_EQ("permessage-deflate; server_max_window_bits=15",
66 params.AsExtension().ToString());
67 }
68
69 TEST(WebSocketEncoderHandshakeTest, AllExtensionsAreUnknownOrMalformed) {
70 WebSocketDeflateParameters params;
71 scoped_ptr<WebSocketEncoder> server =
72 WebSocketEncoder::CreateServer("unknown, permessage-deflate; x", &params);
73
74 ASSERT_TRUE(server);
75 EXPECT_FALSE(server->deflate_enabled());
30 } 76 }
31 77
32 class WebSocketEncoderTest : public testing::Test { 78 class WebSocketEncoderTest : public testing::Test {
33 public: 79 public:
34 WebSocketEncoderTest() {} 80 WebSocketEncoderTest() {}
35 81
36 void SetUp() override { 82 void SetUp() override {
37 std::string response_extensions; 83 std::string response_extensions;
38 server_.reset(WebSocketEncoder::CreateServer("", &response_extensions)); 84 server_ = WebSocketEncoder::CreateServer();
39 EXPECT_EQ(std::string(), response_extensions); 85 EXPECT_EQ(std::string(), response_extensions);
40 client_.reset(WebSocketEncoder::CreateClient("")); 86 client_.reset(WebSocketEncoder::CreateClient(""));
41 } 87 }
42 88
43 protected: 89 protected:
44 scoped_ptr<WebSocketEncoder> server_; 90 scoped_ptr<WebSocketEncoder> server_;
45 scoped_ptr<WebSocketEncoder> client_; 91 scoped_ptr<WebSocketEncoder> client_;
46 }; 92 };
47 93
48 class WebSocketEncoderCompressionTest : public WebSocketEncoderTest { 94 class WebSocketEncoderCompressionTest : public WebSocketEncoderTest {
49 public: 95 public:
50 WebSocketEncoderCompressionTest() : WebSocketEncoderTest() {} 96 WebSocketEncoderCompressionTest() : WebSocketEncoderTest() {}
51 97
52 void SetUp() override { 98 void SetUp() override {
53 std::string response_extensions; 99 WebSocketDeflateParameters params;
54 server_.reset(WebSocketEncoder::CreateServer( 100 server_ = WebSocketEncoder::CreateServer(
55 "permessage-deflate; client_max_window_bits", &response_extensions)); 101 "permessage-deflate; client_max_window_bits", &params);
56 EXPECT_EQ( 102 ASSERT_TRUE(server_);
57 "permessage-deflate; server_max_window_bits=15; " 103 EXPECT_TRUE(server_->deflate_enabled());
58 "client_max_window_bits=15", 104 EXPECT_EQ("permessage-deflate; client_max_window_bits=15",
59 response_extensions); 105 params.AsExtension().ToString());
60 client_.reset(WebSocketEncoder::CreateClient(response_extensions)); 106 client_.reset(
107 WebSocketEncoder::CreateClient(params.AsExtension().ToString()));
61 } 108 }
62 }; 109 };
63 110
111 TEST_F(WebSocketEncoderTest, DeflateDisabledEncoder) {
112 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer());
113 scoped_ptr<WebSocketEncoder> client(WebSocketEncoder::CreateClient(""));
114
115 ASSERT_TRUE(server);
116 ASSERT_TRUE(client);
117
118 EXPECT_FALSE(server->deflate_enabled());
119 EXPECT_FALSE(client->deflate_enabled());
120 }
121
64 TEST_F(WebSocketEncoderTest, ClientToServer) { 122 TEST_F(WebSocketEncoderTest, ClientToServer) {
65 std::string frame("ClientToServer"); 123 std::string frame("ClientToServer");
66 int mask = 123456; 124 int mask = 123456;
67 std::string encoded; 125 std::string encoded;
68 int bytes_consumed; 126 int bytes_consumed;
69 std::string decoded; 127 std::string decoded;
70 128
71 client_->EncodeFrame(frame, mask, &encoded); 129 client_->EncodeFrame(frame, mask, &encoded);
72 EXPECT_EQ(WebSocket::FRAME_OK, 130 EXPECT_EQ(WebSocket::FRAME_OK,
73 server_->DecodeFrame(encoded, &bytes_consumed, &decoded)); 131 server_->DecodeFrame(encoded, &bytes_consumed, &decoded));
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 226
169 server_->EncodeFrame(frame, mask, &encoded); 227 server_->EncodeFrame(frame, mask, &encoded);
170 EXPECT_LT(encoded.length(), frame.length()); 228 EXPECT_LT(encoded.length(), frame.length());
171 EXPECT_EQ(WebSocket::FRAME_OK, 229 EXPECT_EQ(WebSocket::FRAME_OK,
172 client_->DecodeFrame(encoded, &bytes_consumed, &decoded)); 230 client_->DecodeFrame(encoded, &bytes_consumed, &decoded));
173 EXPECT_EQ(frame, decoded); 231 EXPECT_EQ(frame, decoded);
174 EXPECT_EQ((int)encoded.length(), bytes_consumed); 232 EXPECT_EQ((int)encoded.length(), bytes_consumed);
175 } 233 }
176 234
177 } // namespace net 235 } // namespace net
OLDNEW
« no previous file with comments | « net/server/web_socket_encoder.cc ('k') | net/websockets/websocket_deflate_parameters.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698