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

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

Powered by Google App Engine
This is Rietveld 408576698