OLD | NEW |
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/sys_byteorder.h" | 8 #include "base/sys_byteorder.h" |
9 #include "blimp/net/common.h" | 9 #include "blimp/net/common.h" |
10 #include "blimp/net/stream_packet_reader.h" | 10 #include "blimp/net/stream_packet_reader.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 public: | 34 public: |
35 StreamPacketReaderTest() | 35 StreamPacketReaderTest() |
36 : buffer_(new net::GrowableIOBuffer), | 36 : buffer_(new net::GrowableIOBuffer), |
37 test_msg_("U WOT M8"), | 37 test_msg_("U WOT M8"), |
38 data_reader_(&socket_) { | 38 data_reader_(&socket_) { |
39 buffer_->SetCapacity(kTestMaxBufferSize); | 39 buffer_->SetCapacity(kTestMaxBufferSize); |
40 } | 40 } |
41 | 41 |
42 ~StreamPacketReaderTest() override {} | 42 ~StreamPacketReaderTest() override {} |
43 | 43 |
44 int ReadPacket() { | 44 void ReadPacket() { data_reader_.ReadPacket(buffer_, callback_.callback()); } |
45 return data_reader_.ReadPacket(buffer_, callback_.callback()); | |
46 } | |
47 | 45 |
48 protected: | 46 protected: |
49 scoped_refptr<net::GrowableIOBuffer> buffer_; | 47 scoped_refptr<net::GrowableIOBuffer> buffer_; |
50 std::string test_msg_; | 48 std::string test_msg_; |
51 net::TestCompletionCallback callback_; | 49 net::TestCompletionCallback callback_; |
52 testing::StrictMock<MockStreamSocket> socket_; | 50 testing::StrictMock<MockStreamSocket> socket_; |
53 testing::InSequence sequence_; | 51 testing::InSequence sequence_; |
54 StreamPacketReader data_reader_; | 52 StreamPacketReader data_reader_; |
55 }; | 53 }; |
56 | 54 |
57 // Successful read with 1 async header read and 1 async payload read. | 55 // Successful read with 1 async header read and 1 async payload read. |
58 TEST_F(StreamPacketReaderTest, ReadAsyncHeaderAsyncPayload) { | 56 TEST_F(StreamPacketReaderTest, ReadAsyncHeaderAsyncPayload) { |
59 net::CompletionCallback socket_cb; | 57 net::CompletionCallback socket_cb; |
60 | 58 |
61 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 59 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
62 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 60 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
63 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); | 61 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); |
64 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 62 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
65 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_), | 63 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_), |
66 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); | 64 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); |
67 | 65 |
68 EXPECT_EQ(net::ERR_IO_PENDING, ReadPacket()); | 66 ReadPacket(); |
69 socket_cb.Run(kPacketHeaderSizeBytes); | 67 socket_cb.Run(kPacketHeaderSizeBytes); |
70 socket_cb.Run(test_msg_.size()); | 68 socket_cb.Run(test_msg_.size()); |
71 int rv = callback_.WaitForResult(); | 69 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); |
72 | |
73 EXPECT_EQ(rv, static_cast<int>(test_msg_.size())); | |
74 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); | 70 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); |
75 } | 71 } |
76 | 72 |
77 // Successful read with 1 async header read and 1 sync payload read. | 73 // Successful read with 1 async header read and 1 sync payload read. |
78 TEST_F(StreamPacketReaderTest, ReadAsyncHeaderSyncPayload) { | 74 TEST_F(StreamPacketReaderTest, ReadAsyncHeaderSyncPayload) { |
79 net::CompletionCallback socket_cb; | 75 net::CompletionCallback socket_cb; |
80 | 76 |
81 // Asynchronous payload read expectation. | 77 // Asynchronous payload read expectation. |
82 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 78 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
83 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 79 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
84 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); | 80 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); |
85 | 81 |
86 // Synchronous payload read expectation. Fills the buffer and returns | 82 // Synchronous payload read expectation. Fills the buffer and returns |
87 // immediately. | 83 // immediately. |
88 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 84 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
89 .WillOnce( | 85 .WillOnce( |
90 DoAll(FillBufferFromString<0>(test_msg_), Return(test_msg_.size()))); | 86 DoAll(FillBufferFromString<0>(test_msg_), Return(test_msg_.size()))); |
91 | 87 |
92 EXPECT_EQ(net::ERR_IO_PENDING, ReadPacket()); | 88 ReadPacket(); |
93 EXPECT_FALSE(callback_.have_result()); | 89 EXPECT_FALSE(callback_.have_result()); |
94 | 90 |
95 socket_cb.Run(kPacketHeaderSizeBytes); | 91 socket_cb.Run(kPacketHeaderSizeBytes); |
96 int rv = callback_.WaitForResult(); | 92 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); |
97 EXPECT_GT(rv, 0); | |
98 EXPECT_EQ(rv, static_cast<int>(test_msg_.size())); | |
99 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); | 93 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); |
100 } | 94 } |
101 | 95 |
102 // Successful read with 1 sync header read and 1 async payload read. | 96 // Successful read with 1 sync header read and 1 async payload read. |
103 TEST_F(StreamPacketReaderTest, ReadSyncHeaderAsyncPayload) { | 97 TEST_F(StreamPacketReaderTest, ReadSyncHeaderAsyncPayload) { |
104 net::CompletionCallback socket_cb; | 98 net::CompletionCallback socket_cb; |
105 | 99 |
106 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 100 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
107 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 101 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
108 Return(kPacketHeaderSizeBytes))); | 102 Return(kPacketHeaderSizeBytes))); |
109 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 103 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
110 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_), | 104 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_), |
111 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); | 105 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))); |
112 | 106 |
113 EXPECT_EQ(net::ERR_IO_PENDING, ReadPacket()); | 107 ReadPacket(); |
114 socket_cb.Run(test_msg_.size()); | 108 socket_cb.Run(test_msg_.size()); |
115 int rv = callback_.WaitForResult(); | 109 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); |
116 | |
117 EXPECT_GT(rv, 0); | |
118 EXPECT_EQ(rv, static_cast<int>(test_msg_.size())); | |
119 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); | 110 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); |
120 } | 111 } |
121 | 112 |
122 // Successful read with 1 sync header read and 1 sync payload read. | 113 // Successful read with 1 sync header read and 1 sync payload read. |
123 TEST_F(StreamPacketReaderTest, ReadSyncHeaderSyncPayload) { | 114 TEST_F(StreamPacketReaderTest, ReadSyncHeaderSyncPayload) { |
124 net::CompletionCallback socket_cb; | 115 net::CompletionCallback socket_cb; |
125 | 116 |
126 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 117 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
127 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 118 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
128 Return(kPacketHeaderSizeBytes))); | 119 Return(kPacketHeaderSizeBytes))); |
129 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 120 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
130 .WillOnce( | 121 .WillOnce( |
131 DoAll(FillBufferFromString<0>(test_msg_), Return(test_msg_.size()))); | 122 DoAll(FillBufferFromString<0>(test_msg_), Return(test_msg_.size()))); |
132 | 123 |
133 int rv = ReadPacket(); | 124 ReadPacket(); |
134 | 125 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); |
135 EXPECT_GT(rv, 0); | |
136 EXPECT_EQ(rv, static_cast<int>(test_msg_.size())); | |
137 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); | 126 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); |
138 EXPECT_FALSE(callback_.have_result()); | |
139 } | 127 } |
140 | 128 |
141 // Successful read of 2 messages, header and payload reads all completing | 129 // Successful read of 2 messages, header and payload reads all completing |
142 // synchronously with no partial results. | 130 // synchronously with no partial results. |
143 TEST_F(StreamPacketReaderTest, ReadMultipleMessagesSync) { | 131 TEST_F(StreamPacketReaderTest, ReadMultipleMessagesSync) { |
144 net::CompletionCallback socket_cb; | 132 net::CompletionCallback socket_cb; |
145 std::string test_msg2 = test_msg_ + "SlightlyLongerString"; | 133 std::string test_msg2 = test_msg_ + "SlightlyLongerString"; |
146 | 134 |
147 // Read the first message's header synchronously. | 135 // Read the first message's header synchronously. |
148 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 136 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
(...skipping 12 matching lines...) Expand all Loading... |
161 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg2.size())), | 149 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg2.size())), |
162 Return(kPacketHeaderSizeBytes))) | 150 Return(kPacketHeaderSizeBytes))) |
163 .RetiresOnSaturation(); | 151 .RetiresOnSaturation(); |
164 | 152 |
165 // Read the second message's payload synchronously. | 153 // Read the second message's payload synchronously. |
166 EXPECT_CALL(socket_, Read(NotNull(), test_msg2.size(), _)) | 154 EXPECT_CALL(socket_, Read(NotNull(), test_msg2.size(), _)) |
167 .WillOnce( | 155 .WillOnce( |
168 DoAll(FillBufferFromString<0>(test_msg2), Return(test_msg2.size()))) | 156 DoAll(FillBufferFromString<0>(test_msg2), Return(test_msg2.size()))) |
169 .RetiresOnSaturation(); | 157 .RetiresOnSaturation(); |
170 | 158 |
171 int rv = ReadPacket(); | 159 ReadPacket(); |
| 160 EXPECT_EQ(callback_.WaitForResult(), static_cast<int>(test_msg_.size())); |
172 | 161 |
173 EXPECT_GT(rv, 0); | 162 ReadPacket(); |
174 EXPECT_EQ(rv, static_cast<int>(test_msg_.size())); | 163 EXPECT_EQ(callback_.WaitForResult(), static_cast<int>(test_msg2.size())); |
175 rv = ReadPacket(); | 164 |
176 EXPECT_GT(rv, 0); | |
177 EXPECT_EQ(rv, static_cast<int>(test_msg2.size())); | |
178 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); | 165 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); |
179 EXPECT_FALSE(callback_.have_result()); | 166 EXPECT_FALSE(callback_.have_result()); |
180 } | 167 } |
181 | 168 |
182 // Successful read of 2 messages, header and payload reads all completing | 169 // Successful read of 2 messages, header and payload reads all completing |
183 // asynchronously with no partial results. | 170 // asynchronously with no partial results. |
184 TEST_F(StreamPacketReaderTest, ReadMultipleMessagesAsync) { | 171 TEST_F(StreamPacketReaderTest, ReadMultipleMessagesAsync) { |
185 net::TestCompletionCallback read_cb1; | 172 net::TestCompletionCallback read_cb1; |
186 net::TestCompletionCallback read_cb2; | 173 net::TestCompletionCallback read_cb2; |
187 net::CompletionCallback socket_cb; | 174 net::CompletionCallback socket_cb; |
(...skipping 15 matching lines...) Expand all Loading... |
203 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 190 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
204 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))) | 191 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))) |
205 .RetiresOnSaturation(); | 192 .RetiresOnSaturation(); |
206 | 193 |
207 // Read a payload asynchronously. | 194 // Read a payload asynchronously. |
208 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 195 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
209 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_), | 196 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_), |
210 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))) | 197 SaveArg<2>(&socket_cb), Return(net::ERR_IO_PENDING))) |
211 .RetiresOnSaturation(); | 198 .RetiresOnSaturation(); |
212 | 199 |
213 EXPECT_EQ(net::ERR_IO_PENDING, | 200 data_reader_.ReadPacket(buffer_, read_cb1.callback()); |
214 data_reader_.ReadPacket(buffer_, read_cb1.callback())); | |
215 socket_cb.Run(kPacketHeaderSizeBytes); | 201 socket_cb.Run(kPacketHeaderSizeBytes); |
216 socket_cb.Run(test_msg_.size()); | 202 socket_cb.Run(test_msg_.size()); |
217 int rv = read_cb1.WaitForResult(); | 203 int rv = read_cb1.WaitForResult(); |
218 | 204 |
219 EXPECT_GT(rv, 0); | 205 EXPECT_GT(rv, 0); |
220 EXPECT_EQ(rv, static_cast<int>(test_msg_.size())); | 206 EXPECT_EQ(rv, static_cast<int>(test_msg_.size())); |
221 | 207 |
222 EXPECT_EQ(net::ERR_IO_PENDING, | 208 data_reader_.ReadPacket(buffer_, read_cb2.callback()); |
223 data_reader_.ReadPacket(buffer_, read_cb2.callback())); | |
224 socket_cb.Run(kPacketHeaderSizeBytes); | 209 socket_cb.Run(kPacketHeaderSizeBytes); |
225 socket_cb.Run(test_msg_.size()); | 210 socket_cb.Run(test_msg_.size()); |
226 rv = read_cb2.WaitForResult(); | 211 rv = read_cb2.WaitForResult(); |
227 | 212 |
228 EXPECT_GT(rv, 0); | 213 EXPECT_GT(rv, 0); |
229 EXPECT_EQ(rv, static_cast<int>(test_msg_.size())); | 214 EXPECT_EQ(rv, static_cast<int>(test_msg_.size())); |
230 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); | 215 EXPECT_TRUE(BufferStartsWith(buffer_.get(), test_msg_)); |
231 } | 216 } |
232 | 217 |
233 // Verify that partial header reads are supported. | 218 // Verify that partial header reads are supported. |
234 // Read #0: 1 header byte is read. | 219 // Read #0: 1 header byte is read. |
235 // Read #1: Remainder of header bytes read. | 220 // Read #1: Remainder of header bytes read. |
236 TEST_F(StreamPacketReaderTest, PartialHeaderReadAsync) { | 221 TEST_F(StreamPacketReaderTest, PartialHeaderReadAsync) { |
237 net::CompletionCallback cb; | 222 net::CompletionCallback cb; |
238 std::string header = EncodeHeader(test_msg_.size()); | 223 std::string header = EncodeHeader(test_msg_.size()); |
239 | 224 |
240 // The first byte is received (sliced via substr()). | 225 // The first byte is received (sliced via substr()). |
241 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 226 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
242 .WillOnce(DoAll(FillBufferFromString<0>(header.substr(0, 1)), | 227 .WillOnce(DoAll(FillBufferFromString<0>(header.substr(0, 1)), |
243 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); | 228 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); |
244 // The remainder is received (sliced via substr()). | 229 // The remainder is received (sliced via substr()). |
245 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes - 1, _)) | 230 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes - 1, _)) |
246 .WillOnce(DoAll( | 231 .WillOnce(DoAll( |
247 FillBufferFromString<0>(header.substr(1, kPacketHeaderSizeBytes - 1)), | 232 FillBufferFromString<0>(header.substr(1, kPacketHeaderSizeBytes - 1)), |
248 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); | 233 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); |
249 // Verify that we start reading the body once the header has been fully read. | 234 // Verify that we start reading the body once the header has been fully read. |
250 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 235 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
251 .WillOnce(Return(net::ERR_IO_PENDING)); | 236 .WillOnce(Return(net::ERR_IO_PENDING)); |
252 | 237 |
253 EXPECT_EQ(net::ERR_IO_PENDING, ReadPacket()); | 238 ReadPacket(); |
254 cb.Run(1); | 239 cb.Run(1); |
255 cb.Run(kPacketHeaderSizeBytes - 1); | 240 cb.Run(kPacketHeaderSizeBytes - 1); |
256 } | 241 } |
257 | 242 |
258 // Verify that partial payload reads are supported. | 243 // Verify that partial payload reads are supported. |
259 // Read #0: Header is fully read synchronously. | 244 // Read #0: Header is fully read synchronously. |
260 // Read #1: First payload byte is read. (Um, it's an acoustic cup modem.) | 245 // Read #1: First payload byte is read. (Um, it's an acoustic cup modem.) |
261 // Read #2: Remainder of payload bytes are read. | 246 // Read #2: Remainder of payload bytes are read. |
262 TEST_F(StreamPacketReaderTest, PartialPayloadReadAsync) { | 247 TEST_F(StreamPacketReaderTest, PartialPayloadReadAsync) { |
263 net::CompletionCallback cb; | 248 net::CompletionCallback cb; |
264 | 249 |
265 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 250 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
266 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 251 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
267 Return(kPacketHeaderSizeBytes))); | 252 Return(kPacketHeaderSizeBytes))); |
268 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 253 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
269 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_.substr(0, 1)), | 254 .WillOnce(DoAll(FillBufferFromString<0>(test_msg_.substr(0, 1)), |
270 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); | 255 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); |
271 EXPECT_EQ(net::ERR_IO_PENDING, ReadPacket()); | 256 ReadPacket(); |
272 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size() - 1, _)) | 257 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size() - 1, _)) |
273 .WillOnce(DoAll( | 258 .WillOnce(DoAll( |
274 FillBufferFromString<0>(test_msg_.substr(1, test_msg_.size() - 1)), | 259 FillBufferFromString<0>(test_msg_.substr(1, test_msg_.size() - 1)), |
275 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); | 260 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); |
276 | 261 |
277 cb.Run(1); | 262 cb.Run(1); |
278 cb.Run(test_msg_.size() - 1); | 263 cb.Run(test_msg_.size() - 1); |
279 int rv = callback_.WaitForResult(); | 264 EXPECT_EQ(static_cast<int>(test_msg_.size()), callback_.WaitForResult()); |
280 | |
281 EXPECT_GT(rv, 0); | |
282 EXPECT_EQ(static_cast<int>(test_msg_.size()), rv); | |
283 } | 265 } |
284 | 266 |
285 // Verify that synchronous header read errors are reported correctly. | 267 // Verify that synchronous header read errors are reported correctly. |
286 TEST_F(StreamPacketReaderTest, ReadHeaderErrorSync) { | 268 TEST_F(StreamPacketReaderTest, ReadHeaderErrorSync) { |
287 net::CompletionCallback cb; | 269 net::CompletionCallback cb; |
288 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 270 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
289 .WillOnce(Return(net::ERR_FAILED)); | 271 .WillOnce(Return(net::ERR_FAILED)); |
290 EXPECT_EQ(net::ERR_FAILED, ReadPacket()); | 272 ReadPacket(); |
| 273 EXPECT_EQ(net::ERR_FAILED, callback_.WaitForResult()); |
291 } | 274 } |
292 | 275 |
293 // Verify that synchronous payload read errors are reported correctly. | 276 // Verify that synchronous payload read errors are reported correctly. |
294 TEST_F(StreamPacketReaderTest, ReadPayloadErrorSync) { | 277 TEST_F(StreamPacketReaderTest, ReadPayloadErrorSync) { |
295 net::CompletionCallback cb; | 278 net::CompletionCallback cb; |
296 | 279 |
297 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 280 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
298 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 281 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
299 Return(kPacketHeaderSizeBytes))); | 282 Return(kPacketHeaderSizeBytes))); |
300 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 283 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
301 .WillOnce(Return(net::ERR_FAILED)); | 284 .WillOnce(Return(net::ERR_FAILED)); |
302 | 285 |
303 EXPECT_EQ(net::ERR_FAILED, ReadPacket()); | 286 ReadPacket(); |
| 287 EXPECT_EQ(net::ERR_FAILED, callback_.WaitForResult()); |
304 } | 288 } |
305 | 289 |
306 // Verify that async header read errors are reported correctly. | 290 // Verify that async header read errors are reported correctly. |
307 TEST_F(StreamPacketReaderTest, ReadHeaderErrorAsync) { | 291 TEST_F(StreamPacketReaderTest, ReadHeaderErrorAsync) { |
308 net::CompletionCallback cb; | 292 net::CompletionCallback cb; |
309 net::TestCompletionCallback test_cb; | 293 net::TestCompletionCallback test_cb; |
310 | 294 |
311 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 295 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
312 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 296 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
313 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); | 297 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); |
314 | 298 |
315 EXPECT_EQ(net::ERR_IO_PENDING, ReadPacket()); | 299 ReadPacket(); |
316 cb.Run(net::ERR_FAILED); | 300 cb.Run(net::ERR_FAILED); |
317 EXPECT_EQ(net::ERR_FAILED, callback_.WaitForResult()); | 301 EXPECT_EQ(net::ERR_FAILED, callback_.WaitForResult()); |
318 } | 302 } |
319 | 303 |
320 // Verify that asynchronous paylod read errors are reported correctly. | 304 // Verify that asynchronous paylod read errors are reported correctly. |
321 TEST_F(StreamPacketReaderTest, ReadPayloadErrorAsync) { | 305 TEST_F(StreamPacketReaderTest, ReadPayloadErrorAsync) { |
322 net::CompletionCallback cb; | 306 net::CompletionCallback cb; |
323 | 307 |
324 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 308 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
325 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 309 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
326 Return(kPacketHeaderSizeBytes))); | 310 Return(kPacketHeaderSizeBytes))); |
327 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 311 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
328 .WillOnce(DoAll(SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); | 312 .WillOnce(DoAll(SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); |
329 | 313 |
330 EXPECT_EQ(net::ERR_IO_PENDING, ReadPacket()); | 314 ReadPacket(); |
331 cb.Run(net::ERR_FAILED); | 315 cb.Run(net::ERR_FAILED); |
332 EXPECT_EQ(net::ERR_FAILED, callback_.WaitForResult()); | 316 EXPECT_EQ(net::ERR_FAILED, callback_.WaitForResult()); |
333 } | 317 } |
334 | 318 |
335 // Verify that async header read completions don't break us if the | 319 // Verify that async header read completions don't break us if the |
336 // StreamPacketReader object was destroyed. | 320 // StreamPacketReader object was destroyed. |
337 TEST_F(StreamPacketReaderTest, ReaderDeletedDuringAsyncHeaderRead) { | 321 TEST_F(StreamPacketReaderTest, ReaderDeletedDuringAsyncHeaderRead) { |
338 net::CompletionCallback cb; | 322 net::CompletionCallback cb; |
339 net::TestCompletionCallback test_cb; | 323 net::TestCompletionCallback test_cb; |
340 scoped_ptr<StreamPacketReader> reader(new StreamPacketReader(&socket_)); | 324 scoped_ptr<StreamPacketReader> reader(new StreamPacketReader(&socket_)); |
341 | 325 |
342 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 326 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
343 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 327 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
344 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); | 328 SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); |
345 | 329 |
346 EXPECT_EQ(net::ERR_IO_PENDING, | 330 reader->ReadPacket(buffer_, callback_.callback()); |
347 reader->ReadPacket(buffer_, callback_.callback())); | |
348 reader.reset(); // Delete the reader object. | 331 reader.reset(); // Delete the reader object. |
349 cb.Run(kPacketHeaderSizeBytes); // Complete the socket operation. | 332 cb.Run(kPacketHeaderSizeBytes); // Complete the socket operation. |
350 } | 333 } |
351 | 334 |
352 // Verify that async payload read completions don't break us if the | 335 // Verify that async payload read completions don't break us if the |
353 // StreamPacketReader object was destroyed. | 336 // StreamPacketReader object was destroyed. |
354 TEST_F(StreamPacketReaderTest, ReaderDeletedDuringAsyncPayloadRead) { | 337 TEST_F(StreamPacketReaderTest, ReaderDeletedDuringAsyncPayloadRead) { |
355 net::CompletionCallback cb; | 338 net::CompletionCallback cb; |
356 scoped_ptr<StreamPacketReader> reader(new StreamPacketReader(&socket_)); | 339 scoped_ptr<StreamPacketReader> reader(new StreamPacketReader(&socket_)); |
357 | 340 |
358 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 341 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
359 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), | 342 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(test_msg_.size())), |
360 Return(kPacketHeaderSizeBytes))); | 343 Return(kPacketHeaderSizeBytes))); |
361 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) | 344 EXPECT_CALL(socket_, Read(NotNull(), test_msg_.size(), _)) |
362 .WillOnce(DoAll(SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); | 345 .WillOnce(DoAll(SaveArg<2>(&cb), Return(net::ERR_IO_PENDING))); |
363 EXPECT_EQ(net::ERR_IO_PENDING, | 346 reader->ReadPacket(buffer_, callback_.callback()); |
364 reader->ReadPacket(buffer_, callback_.callback())); | |
365 | 347 |
366 reader.reset(); // Delete the reader object. | 348 reader.reset(); // Delete the reader object. |
367 cb.Run(net::ERR_FAILED); // Complete the socket operation. | 349 cb.Run(net::ERR_FAILED); // Complete the socket operation. |
368 } | 350 } |
369 | 351 |
370 // Verify that zero-length payload is reported as an erroneous input. | 352 // Verify that zero-length payload is reported as an erroneous input. |
371 TEST_F(StreamPacketReaderTest, ReadWhatIsThisAPacketForAnts) { | 353 TEST_F(StreamPacketReaderTest, ReadWhatIsThisAPacketForAnts) { |
372 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 354 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
373 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(0)), | 355 .WillOnce(DoAll(FillBufferFromString<0>(EncodeHeader(0)), |
374 Return(kPacketHeaderSizeBytes))) | 356 Return(kPacketHeaderSizeBytes))) |
375 .RetiresOnSaturation(); | 357 .RetiresOnSaturation(); |
376 | 358 |
377 EXPECT_EQ(net::ERR_INVALID_RESPONSE, ReadPacket()); | 359 ReadPacket(); |
| 360 EXPECT_EQ(net::ERR_INVALID_RESPONSE, callback_.WaitForResult()); |
378 } | 361 } |
379 | 362 |
380 // Verify that an illegally large payloads is reported as an erroneous inputs. | 363 // Verify that an illegally large payloads is reported as an erroneous inputs. |
381 TEST_F(StreamPacketReaderTest, ReadErrorIllegallyLargePayload) { | 364 TEST_F(StreamPacketReaderTest, ReadErrorIllegallyLargePayload) { |
382 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) | 365 EXPECT_CALL(socket_, Read(NotNull(), kPacketHeaderSizeBytes, _)) |
383 .WillOnce( | 366 .WillOnce( |
384 DoAll(FillBufferFromString<0>(EncodeHeader(kTestMaxBufferSize + 1)), | 367 DoAll(FillBufferFromString<0>(EncodeHeader(kTestMaxBufferSize + 1)), |
385 Return(kPacketHeaderSizeBytes))); | 368 Return(kPacketHeaderSizeBytes))); |
386 | 369 |
387 EXPECT_EQ(net::ERR_INVALID_RESPONSE, ReadPacket()); | 370 ReadPacket(); |
| 371 EXPECT_EQ(net::ERR_INVALID_RESPONSE, callback_.WaitForResult()); |
388 } | 372 } |
389 | 373 |
390 } // namespace | 374 } // namespace |
391 | 375 |
392 } // namespace blimp | 376 } // namespace blimp |
OLD | NEW |