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

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, 3 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
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 std::string failure_message;
16 scoped_ptr<WebSocketEncoder> server(
17 WebSocketEncoder::CreateServer("", &params, &failure_message));
18
19 EXPECT_FALSE(server);
20 EXPECT_EQ("Failed to parse extensions header.", failure_message);
21 }
22
10 TEST(WebSocketEncoderHandshakeTest, 23 TEST(WebSocketEncoderHandshakeTest,
11 CreateServerWithoutClientMaxWindowBitsParameter) { 24 CreateServerWithoutClientMaxWindowBitsParameter) {
12 std::string response_extensions; 25 WebSocketDeflateParameters params;
26 std::string failure_message;
13 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer( 27 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer(
14 "permessage-deflate", &response_extensions)); 28 "permessage-deflate", &params, &failure_message));
15 // The response must not include client_max_window_bits if the client didn't 29
16 // declare that it accepts the parameter. 30 ASSERT_TRUE(server);
17 EXPECT_EQ("permessage-deflate; server_max_window_bits=15", 31 EXPECT_TRUE(server->deflate_enabled());
18 response_extensions); 32 EXPECT_EQ("permessage-deflate", params.AsExtension().ToString());
19 } 33 }
20 34
21 TEST(WebSocketEncoderHandshakeTest, 35 TEST(WebSocketEncoderHandshakeTest,
22 CreateServerWithServerNoContextTakeoverParameter) { 36 CreateServerWithServerNoContextTakeoverParameter) {
23 std::string response_extensions; 37 WebSocketDeflateParameters params;
38 std::string failure_message;
24 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer( 39 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer(
25 "permessage-deflate; server_no_context_takeover", &response_extensions)); 40 "permessage-deflate; server_no_context_takeover", &params,
26 EXPECT_EQ( 41 &failure_message));
27 "permessage-deflate; server_max_window_bits=15" 42 ASSERT_TRUE(server);
28 "; server_no_context_takeover", 43 EXPECT_TRUE(server->deflate_enabled());
29 response_extensions); 44 EXPECT_EQ("permessage-deflate; server_no_context_takeover",
45 params.AsExtension().ToString());
46 }
47
48 TEST(WebSocketEncoderHandshakeTest, FirstExtensionShouldBeChosen) {
49 WebSocketDeflateParameters params;
50 std::string failure_message;
51 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer(
52 "permessage-deflate; server_no_context_takeover,"
53 "permessage-deflate; server_max_window_bits=15",
54 &params, &failure_message));
55
56 ASSERT_TRUE(server);
57 EXPECT_TRUE(server->deflate_enabled());
58 EXPECT_EQ("permessage-deflate; server_no_context_takeover",
59 params.AsExtension().ToString());
60 }
61
62 TEST(WebSocketEncoderHandshakeTest, AllExtensionsShouldBeChecked) {
63 WebSocketDeflateParameters params;
64 std::string failure_message;
65 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer(
66 "permessage-deflate; server_no_context_takeover,"
67 "permessage-deflate; Xserver_max_window_bits=15",
68 &params, &failure_message));
69
70 ASSERT_FALSE(server);
71 EXPECT_EQ("Received an unexpected permessage-deflate extension parameter",
72 failure_message);
30 } 73 }
31 74
32 class WebSocketEncoderTest : public testing::Test { 75 class WebSocketEncoderTest : public testing::Test {
33 public: 76 public:
34 WebSocketEncoderTest() {} 77 WebSocketEncoderTest() {}
35 78
36 void SetUp() override { 79 void SetUp() override {
37 std::string response_extensions; 80 std::string response_extensions;
38 server_.reset(WebSocketEncoder::CreateServer("", &response_extensions)); 81 server_ = WebSocketEncoder::CreateServer();
39 EXPECT_EQ(std::string(), response_extensions); 82 EXPECT_EQ(std::string(), response_extensions);
40 client_.reset(WebSocketEncoder::CreateClient("")); 83 client_.reset(WebSocketEncoder::CreateClient(""));
41 } 84 }
42 85
43 protected: 86 protected:
44 scoped_ptr<WebSocketEncoder> server_; 87 scoped_ptr<WebSocketEncoder> server_;
45 scoped_ptr<WebSocketEncoder> client_; 88 scoped_ptr<WebSocketEncoder> client_;
46 }; 89 };
47 90
48 class WebSocketEncoderCompressionTest : public WebSocketEncoderTest { 91 class WebSocketEncoderCompressionTest : public WebSocketEncoderTest {
49 public: 92 public:
50 WebSocketEncoderCompressionTest() : WebSocketEncoderTest() {} 93 WebSocketEncoderCompressionTest() : WebSocketEncoderTest() {}
51 94
52 void SetUp() override { 95 void SetUp() override {
53 std::string response_extensions; 96 WebSocketDeflateParameters params;
54 server_.reset(WebSocketEncoder::CreateServer( 97 std::string failure_message;
55 "permessage-deflate; client_max_window_bits", &response_extensions)); 98 server_ = WebSocketEncoder::CreateServer(
56 EXPECT_EQ( 99 "permessage-deflate; client_max_window_bits", &params,
57 "permessage-deflate; server_max_window_bits=15; " 100 &failure_message);
58 "client_max_window_bits=15", 101 ASSERT_TRUE(server_);
59 response_extensions); 102
60 client_.reset(WebSocketEncoder::CreateClient(response_extensions)); 103 EXPECT_EQ("permessage-deflate; client_max_window_bits=8",
104 params.AsExtension().ToString());
105 client_.reset(
106 WebSocketEncoder::CreateClient(params.AsExtension().ToString()));
61 } 107 }
62 }; 108 };
63 109
110 TEST_F(WebSocketEncoderTest, DeflateDisabledEncoder) {
111 scoped_ptr<WebSocketEncoder> server(WebSocketEncoder::CreateServer());
112 scoped_ptr<WebSocketEncoder> client(WebSocketEncoder::CreateClient(""));
113
114 ASSERT_TRUE(server);
115 ASSERT_TRUE(client);
116
117 EXPECT_FALSE(server->deflate_enabled());
118 EXPECT_FALSE(client->deflate_enabled());
119 }
120
64 TEST_F(WebSocketEncoderTest, ClientToServer) { 121 TEST_F(WebSocketEncoderTest, ClientToServer) {
65 std::string frame("ClientToServer"); 122 std::string frame("ClientToServer");
66 int mask = 123456; 123 int mask = 123456;
67 std::string encoded; 124 std::string encoded;
68 int bytes_consumed; 125 int bytes_consumed;
69 std::string decoded; 126 std::string decoded;
70 127
71 client_->EncodeFrame(frame, mask, &encoded); 128 client_->EncodeFrame(frame, mask, &encoded);
72 EXPECT_EQ(WebSocket::FRAME_OK, 129 EXPECT_EQ(WebSocket::FRAME_OK,
73 server_->DecodeFrame(encoded, &bytes_consumed, &decoded)); 130 server_->DecodeFrame(encoded, &bytes_consumed, &decoded));
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 225
169 server_->EncodeFrame(frame, mask, &encoded); 226 server_->EncodeFrame(frame, mask, &encoded);
170 EXPECT_LT(encoded.length(), frame.length()); 227 EXPECT_LT(encoded.length(), frame.length());
171 EXPECT_EQ(WebSocket::FRAME_OK, 228 EXPECT_EQ(WebSocket::FRAME_OK,
172 client_->DecodeFrame(encoded, &bytes_consumed, &decoded)); 229 client_->DecodeFrame(encoded, &bytes_consumed, &decoded));
173 EXPECT_EQ(frame, decoded); 230 EXPECT_EQ(frame, decoded);
174 EXPECT_EQ((int)encoded.length(), bytes_consumed); 231 EXPECT_EQ((int)encoded.length(), bytes_consumed);
175 } 232 }
176 233
177 } // namespace net 234 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698