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

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

Powered by Google App Engine
This is Rietveld 408576698