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

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

Issue 1452823011: Make PacketReader/PacketWriter interfaces async-only. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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/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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698