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

Side by Side Diff: net/websockets/websocket_deflater_test.cc

Issue 23623008: Implement WebSocketDeflater. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 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
(Empty)
1 // Copyright (c) 2013 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/websockets/websocket_deflater.h"
6
7 #include <string>
8
9 #include "base/memory/ref_counted.h"
10 #include "net/base/io_buffer.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace net {
14
15 namespace {
16
17 std::string ToString(IOBufferWithSize* buffer) {
18 return std::string(buffer->data(), buffer->size());
19 }
20
21 TEST(WebSocketDeflaterTest, Construct) {
22 WebSocketDeflater deflater(8, WebSocketDeflater::TAKE_OVER_CONTEXT);
23 ASSERT_EQ(0u, deflater.CurrentOutputSize());
24 ASSERT_TRUE(deflater.Finish());
25 scoped_refptr<IOBufferWithSize> actual =
26 deflater.GetOutput(deflater.CurrentOutputSize());
27 EXPECT_EQ(std::string("\x02\00", 2), ToString(actual.get()));
28 ASSERT_EQ(0u, deflater.CurrentOutputSize());
tyoshino (SeeGerritForStatus) 2013/09/09 06:44:13 please add a test that does - add some non-empty d
yhirano 2013/09/09 08:02:34 Done.
29 }
30
31 TEST(WebSocketDeflaterTest, DeflateHelloTakeOverContext) {
32 WebSocketDeflater deflater(15, WebSocketDeflater::TAKE_OVER_CONTEXT);
33 scoped_refptr<IOBufferWithSize> actual1, actual2;
34
35 ASSERT_TRUE(deflater.AddBytes("Hello", strlen("Hello")));
36 ASSERT_TRUE(deflater.Finish());
37 actual1 = deflater.GetOutput(deflater.CurrentOutputSize());
38 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7),
39 ToString(actual1.get()));
40
41 ASSERT_TRUE(deflater.AddBytes("Hello", strlen("Hello")));
42 ASSERT_TRUE(deflater.Finish());
43 actual2 = deflater.GetOutput(deflater.CurrentOutputSize());
44 EXPECT_EQ(std::string("\xf2\x00\x11\x00\x00", 5), ToString(actual2.get()));
45 }
46
47 TEST(WebSocketDeflaterTest, DeflateHelloDoNotTakeOverContext) {
48 WebSocketDeflater deflater(15, WebSocketDeflater::DO_NOT_TAKE_OVER_CONTEXT);
49 scoped_refptr<IOBufferWithSize> actual1, actual2;
50
51 ASSERT_TRUE(deflater.AddBytes("Hello", strlen("Hello")));
52 ASSERT_TRUE(deflater.Finish());
53 actual1 = deflater.GetOutput(deflater.CurrentOutputSize());
54 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7),
55 ToString(actual1.get()));
56
57 ASSERT_TRUE(deflater.AddBytes("Hello", strlen("Hello")));
58 ASSERT_TRUE(deflater.Finish());
59 actual2 = deflater.GetOutput(deflater.CurrentOutputSize());
60 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7),
61 ToString(actual2.get()));
62 }
63
64 TEST(WebSocketDeflaterTest, MultipleAddBytesCalls) {
65 WebSocketDeflater deflater(15, WebSocketDeflater::DO_NOT_TAKE_OVER_CONTEXT);
66 std::string input(32, 'a');
67 scoped_refptr<IOBufferWithSize> actual;
68
69 for (size_t i = 0; i < input.size(); ++i) {
70 ASSERT_TRUE(deflater.AddBytes(&input[i], 1));
71 }
72 ASSERT_TRUE(deflater.Finish());
73 actual = deflater.GetOutput(deflater.CurrentOutputSize());
74 EXPECT_EQ(std::string("\x4a\x4c\xc4\x0f\x00\x00", 6), ToString(actual.get()));
75 }
76
77 TEST(WebSocketDeflaterTest, WindowBits8) {
78 WebSocketDeflater deflater(8, WebSocketDeflater::DO_NOT_TAKE_OVER_CONTEXT);
79 // Set the head and tail of |input| so that back-reference
80 // can be used if the window size is sufficiently-large.
81 const std::string word = "Chromium";
82 std::string input = word + std::string(256, 'a') + word;
83 scoped_refptr<IOBufferWithSize> actual;
84
85 ASSERT_TRUE(deflater.AddBytes(input.data(), input.size()));
86 ASSERT_TRUE(deflater.Finish());
87 actual = deflater.GetOutput(deflater.CurrentOutputSize());
88 EXPECT_EQ(std::string("r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x39\xa3"
89 "(?7\xb3\x34\x17\x00", 21),
90 ToString(actual.get()));
91 }
92
93 TEST(WebSocketDeflaterTest, WindowBits10) {
94 WebSocketDeflater deflater(10, WebSocketDeflater::DO_NOT_TAKE_OVER_CONTEXT);
95 // Set the head and tail of |input| so that back-reference
96 // can be used if the window size is sufficiently-large.
97 const std::string word = "Chromium";
98 std::string input = word + std::string(256, 'a') + word;
99 scoped_refptr<IOBufferWithSize> actual;
100
101 ASSERT_TRUE(deflater.AddBytes(input.data(), input.size()));
102 ASSERT_TRUE(deflater.Finish());
103 actual = deflater.GetOutput(deflater.CurrentOutputSize());
104 EXPECT_EQ(
105 std::string("r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x19\x1a\x0e\0\0", 17),
106 ToString(actual.get()));
107 }
108
109 } // namespace
110
111 } // namespace net
OLDNEW
« net/websockets/websocket_deflater.cc ('K') | « net/websockets/websocket_deflater.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698