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

Side by Side Diff: blimp/net/stream_packet_reader_unittest.cc

Issue 1825263003: Blimp: add packet-level DEFLATE compression using zlib. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Wez feedback. Created 4 years, 8 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <stddef.h> 5 #include <stddef.h>
6 #include <string> 6 #include <string>
7 7
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/sys_byteorder.h" 9 #include "base/sys_byteorder.h"
10 #include "blimp/net/common.h" 10 #include "blimp/net/common.h"
(...skipping 11 matching lines...) Expand all
22 using testing::DoAll; 22 using testing::DoAll;
23 using testing::Mock; 23 using testing::Mock;
24 using testing::NotNull; 24 using testing::NotNull;
25 using testing::Return; 25 using testing::Return;
26 using testing::SaveArg; 26 using testing::SaveArg;
27 using testing::WithArg; 27 using testing::WithArg;
28 28
29 namespace blimp { 29 namespace blimp {
30 namespace { 30 namespace {
31 31
32 const size_t kTestMaxBufferSize = 1 << 16; // 64KB
33
34 class StreamPacketReaderTest : public testing::Test { 32 class StreamPacketReaderTest : public testing::Test {
35 public: 33 public:
36 StreamPacketReaderTest() 34 StreamPacketReaderTest()
37 : buffer_(new net::GrowableIOBuffer), 35 : buffer_(new net::GrowableIOBuffer),
38 test_msg_("U WOT M8"), 36 test_msg_("U WOT M8"),
39 data_reader_(&socket_) { 37 data_reader_(&socket_) {}
40 buffer_->SetCapacity(kTestMaxBufferSize);
41 }
42 38
43 ~StreamPacketReaderTest() override {} 39 ~StreamPacketReaderTest() override {}
44 40
45 void ReadPacket() { data_reader_.ReadPacket(buffer_, callback_.callback()); } 41 void ReadPacket() { data_reader_.ReadPacket(buffer_, callback_.callback()); }
46 42
47 protected: 43 protected:
48 base::MessageLoop message_loop_; 44 base::MessageLoop message_loop_;
49 scoped_refptr<net::GrowableIOBuffer> buffer_; 45 scoped_refptr<net::GrowableIOBuffer> buffer_;
50 std::string test_msg_; 46 std::string test_msg_;
51 net::TestCompletionCallback callback_; 47 net::TestCompletionCallback callback_;
52 testing::StrictMock<MockStreamSocket> socket_; 48 testing::StrictMock<MockStreamSocket> socket_;
53 testing::InSequence sequence_; 49 testing::InSequence sequence_;
54 StreamPacketReader data_reader_; 50 StreamPacketReader data_reader_;
55 }; 51 };
56 52
57 // Successful read with 1 async header read and 1 async payload read. 53 // Successful read with 1 async header read and 1 async payload read.
58 TEST_F(StreamPacketReaderTest, ReadAsyncHeaderAsyncPayload) { 54 TEST_F(StreamPacketReaderTest, ReadAsyncHeaderAsyncPayload) {
59 net::CompletionCallback socket_cb; 55 net::CompletionCallback socket_cb;
60 56
61 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) 57 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _))
62 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), 58 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())),
63 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); 59 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING)));
64 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) 60 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _))
65 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_), 61 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_),
66 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); 62 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING)));
67 63
68 ReadPacket(); 64 ReadPacket();
69 socket_cb.Run(kPacketHeaderSizeBytes); 65 socket_cb.Run(kPacketHeaderSizeBytes);
70 socket_cb.Run(test_msg_.size()); 66 socket_cb.Run(test_msg_.size());
71 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); 67 ASSERT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult());
72 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); 68 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_.size(), test_msg_));
73 } 69 }
74 70
75 // Successful read with 1 async header read and 1 sync payload read. 71 // Successful read with 1 async header read and 1 sync payload read.
76 TEST_F(StreamPacketReaderTest, ReadAsyncHeaderSyncPayload) { 72 TEST_F(StreamPacketReaderTest, ReadAsyncHeaderSyncPayload) {
77 net::CompletionCallback socket_cb; 73 net::CompletionCallback socket_cb;
78 74
79 // Asynchronous payload read expectation. 75 // Asynchronous payload read expectation.
80 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) 76 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _))
81 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), 77 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())),
82 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); 78 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING)));
83 79
84 // Synchronous payload read expectation. Fills the buffer and returns 80 // Synchronous payload read expectation. Fills the buffer and returns
85 // immediately. 81 // immediately.
86 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) 82 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _))
87 .WillOnce( 83 .WillOnce(
88 DoAll(FillBufferFromString<0>(test_msg_), Return(test_msg_.size()))); 84 DoAll(FillBufferFromString<0>(test_msg_), Return(test_msg_.size())));
89 85
90 ReadPacket(); 86 ReadPacket();
91 EXPECT_FALSE(callback_.have_result()); 87 EXPECT_FALSE(callback_.have_result());
92 88
93 socket_cb.Run(kPacketHeaderSizeBytes); 89 socket_cb.Run(kPacketHeaderSizeBytes);
94 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); 90 ASSERT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult());
95 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); 91 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_.size(), test_msg_));
96 } 92 }
97 93
98 // Successful read with 1 sync header read and 1 async payload read. 94 // Successful read with 1 sync header read and 1 async payload read.
99 TEST_F(StreamPacketReaderTest, ReadSyncHeaderAsyncPayload) { 95 TEST_F(StreamPacketReaderTest, ReadSyncHeaderAsyncPayload) {
100 net::CompletionCallback socket_cb; 96 net::CompletionCallback socket_cb;
101 97
102 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) 98 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _))
103 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), 99 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())),
104 Return(kPacketHeaderSizeBytes))); 100 Return(kPacketHeaderSizeBytes)));
105 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) 101 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _))
106 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_), 102 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_),
107 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); 103 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING)));
108 104
109 ReadPacket(); 105 ReadPacket();
110 socket_cb.Run(test_msg_.size()); 106 socket_cb.Run(test_msg_.size());
111 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); 107 ASSERT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult());
112 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); 108 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_.size(), test_msg_));
113 } 109 }
114 110
115 // Successful read with 1 sync header read and 1 sync payload read. 111 // Successful read with 1 sync header read and 1 sync payload read.
116 TEST_F(StreamPacketReaderTest, ReadSyncHeaderSyncPayload) { 112 TEST_F(StreamPacketReaderTest, ReadSyncHeaderSyncPayload) {
117 net::CompletionCallback socket_cb; 113 net::CompletionCallback socket_cb;
118 114
119 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) 115 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _))
120 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), 116 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())),
121 Return(kPacketHeaderSizeBytes))); 117 Return(kPacketHeaderSizeBytes)));
122 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) 118 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _))
123 .WillOnce( 119 .WillOnce(
124 DoAll(FillBufferFromString<0>(test_msg_), Return(test_msg_.size()))); 120 DoAll(FillBufferFromString<0>(test_msg_), Return(test_msg_.size())));
125 121
126 ReadPacket(); 122 ReadPacket();
127 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); 123 ASSERT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult());
128 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); 124 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_.size(), test_msg_));
129 } 125 }
130 126
131 // Successful read of 2 messages, header and payload reads all completing 127 // Successful read of 2 messages, header and payload reads all completing
132 // synchronously with no partial results. 128 // synchronously with no partial results.
133 TEST_F(StreamPacketReaderTest, ReadMultipleMessagesSync) { 129 TEST_F(StreamPacketReaderTest, ReadMultipleMessagesSync) {
134 net::CompletionCallback socket_cb; 130 net::CompletionCallback socket_cb;
135 std::string test_msg2 = test_msg_ + "SlightlyLongerString"; 131 std::string test_msg2 = test_msg_ + "SlightlyLongerString";
136 132
137 // Read the first message's header synchronously. 133 // Read the first message's header synchronously.
138 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) 134 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _))
(...skipping 13 matching lines...) Expand all
152 Return(kPacketHeaderSizeBytes))) 148 Return(kPacketHeaderSizeBytes)))
153 .RetiresOnSaturation(); 149 .RetiresOnSaturation();
154 150
155 // Read the second message's payload synchronously. 151 // Read the second message's payload synchronously.
156 EXPECT_CALL(socket_, Read(NotNull(), test_msg2.size(), _)) 152 EXPECT_CALL(socket_, Read(NotNull(), test_msg2.size(), _))
157 .WillOnce( 153 .WillOnce(
158 DoAll(FillBufferFromString<0>(test_msg2), Return(test_msg2.size()))) 154 DoAll(FillBufferFromString<0>(test_msg2), Return(test_msg2.size())))
159 .RetiresOnSaturation(); 155 .RetiresOnSaturation();
160 156
161 ReadPacket(); 157 ReadPacket();
162 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); 158 ASSERT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult());
163 159
164 ReadPacket(); 160 ReadPacket();
165 EXPECT_EQ(static_cast<int>(test_msg2.size()), callback_.WaitForResult()); 161 ASSERT_EQ(static_cast<int>(test_msg2.size()), callback_.WaitForResult());
166 162
167 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); 163 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg2.size(), test_msg2));
168 EXPECT_FALSE(callback_.have_result()); 164 EXPECT_FALSE(callback_.have_result());
169 } 165 }
170 166
171 // Successful read of 2 messages, header and payload reads all completing 167 // Successful read of 2 messages, header and payload reads all completing
172 // asynchronously with no partial results. 168 // asynchronously with no partial results.
173 TEST_F(StreamPacketReaderTest, ReadMultipleMessagesAsync) { 169 TEST_F(StreamPacketReaderTest, ReadMultipleMessagesAsync) {
174 net::TestCompletionCallback read_cb1; 170 net::TestCompletionCallback read_cb1;
175 net::TestCompletionCallback read_cb2; 171 net::TestCompletionCallback read_cb2;
176 net::CompletionCallback socket_cb; 172 net::CompletionCallback socket_cb;
177 173
(...skipping 17 matching lines...) Expand all
195 191
196 // Read a payload asynchronously. 192 // Read a payload asynchronously.
197 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) 193 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _))
198 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_), 194 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_),
199 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))) 195 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING)))
200 .RetiresOnSaturation(); 196 .RetiresOnSaturation();
201 197
202 data_reader_.ReadPacket(buffer_, read_cb1.callback()); 198 data_reader_.ReadPacket(buffer_, read_cb1.callback());
203 socket_cb.Run(kPacketHeaderSizeBytes); 199 socket_cb.Run(kPacketHeaderSizeBytes);
204 socket_cb.Run(test_msg_.size()); 200 socket_cb.Run(test_msg_.size());
205 EXPECT_EQ(static_cast<int>(test_msg_.size()), read_cb1.WaitForResult()); 201 ASSERT_EQ(static_cast<int>(test_msg_.size()), read_cb1.WaitForResult());
206 202
207 data_reader_.ReadPacket(buffer_, read_cb2.callback()); 203 data_reader_.ReadPacket(buffer_, read_cb2.callback());
208 socket_cb.Run(kPacketHeaderSizeBytes); 204 socket_cb.Run(kPacketHeaderSizeBytes);
209 socket_cb.Run(test_msg_.size()); 205 socket_cb.Run(test_msg_.size());
210 EXPECT_EQ(static_cast<int>(test_msg_.size()), read_cb2.WaitForResult()); 206 ASSERT_EQ(static_cast<int>(test_msg_.size()), read_cb2.WaitForResult());
211 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); 207 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_.size(), test_msg_));
212 } 208 }
213 209
214 // Verify that partial header reads are supported. 210 // Verify that partial header reads are supported.
215 // Read #0: 1 header byte is read. 211 // Read #0: 1 header byte is read.
216 // Read #1: Remainder of header bytes read. 212 // Read #1: Remainder of header bytes read.
217 TEST_F(StreamPacketReaderTest, PartialHeaderReadAsync) { 213 TEST_F(StreamPacketReaderTest, PartialHeaderReadAsync) {
218 net::CompletionCallback cb; 214 net::CompletionCallback cb;
219 std::string header = EncodeHeader(test_msg_.size()); 215 std::string header = EncodeHeader(test_msg_.size());
220 216
221 // The first byte is received (sliced via substr()). 217 // The first byte is received (sliced via substr()).
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 Return(kPacketHeaderSizeBytes))) 348 Return(kPacketHeaderSizeBytes)))
353 .RetiresOnSaturation(); 349 .RetiresOnSaturation();
354 350
355 ReadPacket(); 351 ReadPacket();
356 EXPECT_EQ(net::ERR_INVALID_RESPONSE, callback_.WaitForResult()); 352 EXPECT_EQ(net::ERR_INVALID_RESPONSE, callback_.WaitForResult());
357 } 353 }
358 354
359 // Verify that an illegally large payloads is reported as an erroneous inputs. 355 // Verify that an illegally large payloads is reported as an erroneous inputs.
360 TEST_F(StreamPacketReaderTest, ReadErrorIllegallyLargePayload) { 356 TEST_F(StreamPacketReaderTest, ReadErrorIllegallyLargePayload) {
361 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) 357 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _))
362 .WillOnce( 358 .WillOnce(DoAll(
363 DoAll(FillBufferFromString<0>(EncodeHeader(kTestMaxBufferSize + 1)), 359 FillBufferFromString<0>(EncodeHeader(kMaxPacketPayloadSizeBytes + 1)),
364 Return(kPacketHeaderSizeBytes))); 360 Return(kPacketHeaderSizeBytes)));
365 361
366 ReadPacket(); 362 ReadPacket();
367 EXPECT_EQ(net::ERR_INVALID_RESPONSE, callback_.WaitForResult()); 363 EXPECT_EQ(net::ERR_INVALID_RESPONSE, callback_.WaitForResult());
368 } 364 }
369 365
370 } // namespace 366 } // namespace
371 367
372 } // namespace blimp 368 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698