OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/base/upload_data_stream.h" | 5 #include "net/base/upload_data_stream.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 init_result_(OK), | 63 init_result_(OK), |
64 read_result_(OK) {} | 64 read_result_(OK) {} |
65 | 65 |
66 virtual ~MockUploadElementReader() {} | 66 virtual ~MockUploadElementReader() {} |
67 | 67 |
68 // UploadElementReader overrides. | 68 // UploadElementReader overrides. |
69 MOCK_METHOD1(Init, int(const CompletionCallback& callback)); | 69 MOCK_METHOD1(Init, int(const CompletionCallback& callback)); |
70 virtual uint64 GetContentLength() const OVERRIDE { return content_length_; } | 70 virtual uint64 GetContentLength() const OVERRIDE { return content_length_; } |
71 virtual uint64 BytesRemaining() const OVERRIDE { return bytes_remaining_; } | 71 virtual uint64 BytesRemaining() const OVERRIDE { return bytes_remaining_; } |
72 virtual bool IsInMemory() const OVERRIDE { return is_in_memory_; } | 72 virtual bool IsInMemory() const OVERRIDE { return is_in_memory_; } |
73 MOCK_METHOD3(Read, int(IOBuffer* buf, | 73 MOCK_METHOD3(Read, |
74 int buf_length, | 74 int(IOBuffer* buf, |
75 const CompletionCallback& callback)); | 75 int buf_length, |
| 76 const CompletionCallback& callback)); |
76 | 77 |
77 // Sets expectation to return the specified result from Init() asynchronously. | 78 // Sets expectation to return the specified result from Init() asynchronously. |
78 void SetAsyncInitExpectation(int result) { | 79 void SetAsyncInitExpectation(int result) { |
79 init_result_ = result; | 80 init_result_ = result; |
80 EXPECT_CALL(*this, Init(_)) | 81 EXPECT_CALL(*this, Init(_)) |
81 .WillOnce(DoAll(Invoke(this, &MockUploadElementReader::OnInit), | 82 .WillOnce(DoAll(Invoke(this, &MockUploadElementReader::OnInit), |
82 Return(ERR_IO_PENDING))); | 83 Return(ERR_IO_PENDING))); |
83 } | 84 } |
84 | 85 |
85 // Sets expectation to return the specified result from Read(). | 86 // Sets expectation to return the specified result from Read(). |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 TEST_F(UploadDataStreamTest, EmptyUploadData) { | 145 TEST_F(UploadDataStreamTest, EmptyUploadData) { |
145 UploadDataStream stream(element_readers_.Pass(), 0); | 146 UploadDataStream stream(element_readers_.Pass(), 0); |
146 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 147 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
147 EXPECT_TRUE(stream.IsInMemory()); | 148 EXPECT_TRUE(stream.IsInMemory()); |
148 EXPECT_EQ(0U, stream.size()); | 149 EXPECT_EQ(0U, stream.size()); |
149 EXPECT_EQ(0U, stream.position()); | 150 EXPECT_EQ(0U, stream.position()); |
150 EXPECT_TRUE(stream.IsEOF()); | 151 EXPECT_TRUE(stream.IsEOF()); |
151 } | 152 } |
152 | 153 |
153 TEST_F(UploadDataStreamTest, ConsumeAllBytes) { | 154 TEST_F(UploadDataStreamTest, ConsumeAllBytes) { |
154 element_readers_.push_back(new UploadBytesElementReader( | 155 element_readers_.push_back( |
155 kTestData, kTestDataSize)); | 156 new UploadBytesElementReader(kTestData, kTestDataSize)); |
156 UploadDataStream stream(element_readers_.Pass(), 0); | 157 UploadDataStream stream(element_readers_.Pass(), 0); |
157 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 158 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
158 EXPECT_TRUE(stream.IsInMemory()); | 159 EXPECT_TRUE(stream.IsInMemory()); |
159 EXPECT_EQ(kTestDataSize, stream.size()); | 160 EXPECT_EQ(kTestDataSize, stream.size()); |
160 EXPECT_EQ(0U, stream.position()); | 161 EXPECT_EQ(0U, stream.position()); |
161 EXPECT_FALSE(stream.IsEOF()); | 162 EXPECT_FALSE(stream.IsEOF()); |
162 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 163 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
163 while (!stream.IsEOF()) { | 164 while (!stream.IsEOF()) { |
164 int bytes_read = | 165 int bytes_read = |
165 stream.Read(buf.get(), kTestBufferSize, CompletionCallback()); | 166 stream.Read(buf.get(), kTestBufferSize, CompletionCallback()); |
166 ASSERT_LE(0, bytes_read); // Not an error. | 167 ASSERT_LE(0, bytes_read); // Not an error. |
167 } | 168 } |
168 EXPECT_EQ(kTestDataSize, stream.position()); | 169 EXPECT_EQ(kTestDataSize, stream.position()); |
169 ASSERT_TRUE(stream.IsEOF()); | 170 ASSERT_TRUE(stream.IsEOF()); |
170 } | 171 } |
171 | 172 |
172 TEST_F(UploadDataStreamTest, File) { | 173 TEST_F(UploadDataStreamTest, File) { |
173 base::FilePath temp_file_path; | 174 base::FilePath temp_file_path; |
174 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 175 ASSERT_TRUE( |
175 &temp_file_path)); | 176 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
176 ASSERT_EQ(static_cast<int>(kTestDataSize), | 177 ASSERT_EQ(static_cast<int>(kTestDataSize), |
177 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 178 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
178 | 179 |
179 element_readers_.push_back( | 180 element_readers_.push_back( |
180 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 181 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
181 temp_file_path, | 182 temp_file_path, |
182 0, | 183 0, |
183 kuint64max, | 184 kuint64max, |
184 base::Time())); | 185 base::Time())); |
185 | 186 |
(...skipping 12 matching lines...) Expand all Loading... |
198 ERR_IO_PENDING, | 199 ERR_IO_PENDING, |
199 stream.Read(buf.get(), kTestBufferSize, read_callback.callback())); | 200 stream.Read(buf.get(), kTestBufferSize, read_callback.callback())); |
200 ASSERT_LE(0, read_callback.WaitForResult()); // Not an error. | 201 ASSERT_LE(0, read_callback.WaitForResult()); // Not an error. |
201 } | 202 } |
202 EXPECT_EQ(kTestDataSize, stream.position()); | 203 EXPECT_EQ(kTestDataSize, stream.position()); |
203 ASSERT_TRUE(stream.IsEOF()); | 204 ASSERT_TRUE(stream.IsEOF()); |
204 } | 205 } |
205 | 206 |
206 TEST_F(UploadDataStreamTest, FileSmallerThanLength) { | 207 TEST_F(UploadDataStreamTest, FileSmallerThanLength) { |
207 base::FilePath temp_file_path; | 208 base::FilePath temp_file_path; |
208 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 209 ASSERT_TRUE( |
209 &temp_file_path)); | 210 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
210 ASSERT_EQ(static_cast<int>(kTestDataSize), | 211 ASSERT_EQ(static_cast<int>(kTestDataSize), |
211 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 212 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
212 const uint64 kFakeSize = kTestDataSize*2; | 213 const uint64 kFakeSize = kTestDataSize * 2; |
213 | 214 |
214 UploadFileElementReader::ScopedOverridingContentLengthForTests | 215 UploadFileElementReader::ScopedOverridingContentLengthForTests |
215 overriding_content_length(kFakeSize); | 216 overriding_content_length(kFakeSize); |
216 | 217 |
217 element_readers_.push_back( | 218 element_readers_.push_back( |
218 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 219 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
219 temp_file_path, | 220 temp_file_path, |
220 0, | 221 0, |
221 kuint64max, | 222 kuint64max, |
222 base::Time())); | 223 base::Time())); |
(...skipping 26 matching lines...) Expand all Loading... |
249 | 250 |
250 TEST_F(UploadDataStreamTest, ReadErrorSync) { | 251 TEST_F(UploadDataStreamTest, ReadErrorSync) { |
251 // This element cannot be read. | 252 // This element cannot be read. |
252 MockUploadElementReader* reader = | 253 MockUploadElementReader* reader = |
253 new MockUploadElementReader(kTestDataSize, true); | 254 new MockUploadElementReader(kTestDataSize, true); |
254 EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); | 255 EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); |
255 reader->SetReadExpectation(ERR_FAILED); | 256 reader->SetReadExpectation(ERR_FAILED); |
256 element_readers_.push_back(reader); | 257 element_readers_.push_back(reader); |
257 | 258 |
258 // This element is ignored because of the error from the previous reader. | 259 // This element is ignored because of the error from the previous reader. |
259 element_readers_.push_back(new UploadBytesElementReader( | 260 element_readers_.push_back( |
260 kTestData, kTestDataSize)); | 261 new UploadBytesElementReader(kTestData, kTestDataSize)); |
261 | 262 |
262 UploadDataStream stream(element_readers_.Pass(), 0); | 263 UploadDataStream stream(element_readers_.Pass(), 0); |
263 | 264 |
264 // Run Init(). | 265 // Run Init(). |
265 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 266 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
266 EXPECT_EQ(kTestDataSize*2, stream.size()); | 267 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
267 EXPECT_EQ(0U, stream.position()); | 268 EXPECT_EQ(0U, stream.position()); |
268 EXPECT_FALSE(stream.IsEOF()); | 269 EXPECT_FALSE(stream.IsEOF()); |
269 | 270 |
270 // Prepare a buffer filled with non-zero data. | 271 // Prepare a buffer filled with non-zero data. |
271 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 272 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
272 std::fill_n(buf->data(), kTestBufferSize, -1); | 273 std::fill_n(buf->data(), kTestBufferSize, -1); |
273 | 274 |
274 // Read() results in success even when the reader returns error. | 275 // Read() results in success even when the reader returns error. |
275 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), | 276 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), |
276 stream.Read(buf.get(), kTestBufferSize, CompletionCallback())); | 277 stream.Read(buf.get(), kTestBufferSize, CompletionCallback())); |
277 EXPECT_EQ(kTestDataSize * 2, stream.position()); | 278 EXPECT_EQ(kTestDataSize * 2, stream.position()); |
278 EXPECT_TRUE(stream.IsEOF()); | 279 EXPECT_TRUE(stream.IsEOF()); |
279 | 280 |
280 // The buffer is filled with zero. | 281 // The buffer is filled with zero. |
281 EXPECT_EQ(static_cast<int>(kTestDataSize*2), | 282 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), |
282 std::count(buf->data(), buf->data() + kTestBufferSize, 0)); | 283 std::count(buf->data(), buf->data() + kTestBufferSize, 0)); |
283 } | 284 } |
284 | 285 |
285 TEST_F(UploadDataStreamTest, ReadErrorAsync) { | 286 TEST_F(UploadDataStreamTest, ReadErrorAsync) { |
286 // This element cannot be read. | 287 // This element cannot be read. |
287 MockUploadElementReader* reader = | 288 MockUploadElementReader* reader = |
288 new MockUploadElementReader(kTestDataSize, false); | 289 new MockUploadElementReader(kTestDataSize, false); |
289 reader->SetAsyncInitExpectation(OK); | 290 reader->SetAsyncInitExpectation(OK); |
290 reader->SetReadExpectation(ERR_FAILED); | 291 reader->SetReadExpectation(ERR_FAILED); |
291 element_readers_.push_back(reader); | 292 element_readers_.push_back(reader); |
292 | 293 |
293 // This element is ignored because of the error from the previous reader. | 294 // This element is ignored because of the error from the previous reader. |
294 element_readers_.push_back(new UploadBytesElementReader( | 295 element_readers_.push_back( |
295 kTestData, kTestDataSize)); | 296 new UploadBytesElementReader(kTestData, kTestDataSize)); |
296 | 297 |
297 UploadDataStream stream(element_readers_.Pass(), 0); | 298 UploadDataStream stream(element_readers_.Pass(), 0); |
298 | 299 |
299 // Run Init(). | 300 // Run Init(). |
300 TestCompletionCallback init_callback; | 301 TestCompletionCallback init_callback; |
301 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); | 302 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); |
302 EXPECT_EQ(OK, init_callback.WaitForResult()); | 303 EXPECT_EQ(OK, init_callback.WaitForResult()); |
303 EXPECT_EQ(kTestDataSize*2, stream.size()); | 304 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
304 EXPECT_EQ(0U, stream.position()); | 305 EXPECT_EQ(0U, stream.position()); |
305 EXPECT_FALSE(stream.IsEOF()); | 306 EXPECT_FALSE(stream.IsEOF()); |
306 | 307 |
307 // Prepare a buffer filled with non-zero data. | 308 // Prepare a buffer filled with non-zero data. |
308 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 309 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
309 std::fill_n(buf->data(), kTestBufferSize, -1); | 310 std::fill_n(buf->data(), kTestBufferSize, -1); |
310 | 311 |
311 // Read() results in success even when the reader returns error. | 312 // Read() results in success even when the reader returns error. |
312 TestCompletionCallback read_callback; | 313 TestCompletionCallback read_callback; |
313 ASSERT_EQ(ERR_IO_PENDING, | 314 ASSERT_EQ(ERR_IO_PENDING, |
314 stream.Read(buf.get(), kTestBufferSize, read_callback.callback())); | 315 stream.Read(buf.get(), kTestBufferSize, read_callback.callback())); |
315 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), read_callback.WaitForResult()); | 316 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), read_callback.WaitForResult()); |
316 EXPECT_EQ(kTestDataSize*2, stream.position()); | 317 EXPECT_EQ(kTestDataSize * 2, stream.position()); |
317 EXPECT_TRUE(stream.IsEOF()); | 318 EXPECT_TRUE(stream.IsEOF()); |
318 | 319 |
319 // The buffer is filled with zero. | 320 // The buffer is filled with zero. |
320 EXPECT_EQ(static_cast<int>(kTestDataSize*2), | 321 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), |
321 std::count(buf->data(), buf->data() + kTestBufferSize, 0)); | 322 std::count(buf->data(), buf->data() + kTestBufferSize, 0)); |
322 } | 323 } |
323 | 324 |
324 TEST_F(UploadDataStreamTest, FileAndBytes) { | 325 TEST_F(UploadDataStreamTest, FileAndBytes) { |
325 base::FilePath temp_file_path; | 326 base::FilePath temp_file_path; |
326 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 327 ASSERT_TRUE( |
327 &temp_file_path)); | 328 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
328 ASSERT_EQ(static_cast<int>(kTestDataSize), | 329 ASSERT_EQ(static_cast<int>(kTestDataSize), |
329 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 330 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
330 | 331 |
331 const uint64 kFileRangeOffset = 1; | 332 const uint64 kFileRangeOffset = 1; |
332 const uint64 kFileRangeLength = 4; | 333 const uint64 kFileRangeLength = 4; |
333 element_readers_.push_back( | 334 element_readers_.push_back( |
334 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 335 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
335 temp_file_path, | 336 temp_file_path, |
336 kFileRangeOffset, | 337 kFileRangeOffset, |
337 kFileRangeLength, | 338 kFileRangeLength, |
338 base::Time())); | 339 base::Time())); |
339 | 340 |
340 element_readers_.push_back(new UploadBytesElementReader( | 341 element_readers_.push_back( |
341 kTestData, kTestDataSize)); | 342 new UploadBytesElementReader(kTestData, kTestDataSize)); |
342 | 343 |
343 const uint64 kStreamSize = kTestDataSize + kFileRangeLength; | 344 const uint64 kStreamSize = kTestDataSize + kFileRangeLength; |
344 TestCompletionCallback init_callback; | 345 TestCompletionCallback init_callback; |
345 UploadDataStream stream(element_readers_.Pass(), 0); | 346 UploadDataStream stream(element_readers_.Pass(), 0); |
346 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); | 347 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); |
347 ASSERT_EQ(OK, init_callback.WaitForResult()); | 348 ASSERT_EQ(OK, init_callback.WaitForResult()); |
348 EXPECT_FALSE(stream.IsInMemory()); | 349 EXPECT_FALSE(stream.IsInMemory()); |
349 EXPECT_EQ(kStreamSize, stream.size()); | 350 EXPECT_EQ(kStreamSize, stream.size()); |
350 EXPECT_EQ(0U, stream.position()); | 351 EXPECT_EQ(0U, stream.position()); |
351 EXPECT_FALSE(stream.IsEOF()); | 352 EXPECT_FALSE(stream.IsEOF()); |
352 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 353 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
353 while (!stream.IsEOF()) { | 354 while (!stream.IsEOF()) { |
354 TestCompletionCallback read_callback; | 355 TestCompletionCallback read_callback; |
355 const int result = | 356 const int result = |
356 stream.Read(buf.get(), kTestBufferSize, read_callback.callback()); | 357 stream.Read(buf.get(), kTestBufferSize, read_callback.callback()); |
357 const int bytes_read = | 358 const int bytes_read = |
358 result != ERR_IO_PENDING ? result : read_callback.WaitForResult(); | 359 result != ERR_IO_PENDING ? result : read_callback.WaitForResult(); |
359 ASSERT_LE(0, bytes_read); // Not an error. | 360 ASSERT_LE(0, bytes_read); // Not an error. |
360 } | 361 } |
361 EXPECT_EQ(kStreamSize, stream.position()); | 362 EXPECT_EQ(kStreamSize, stream.position()); |
362 ASSERT_TRUE(stream.IsEOF()); | 363 ASSERT_TRUE(stream.IsEOF()); |
363 } | 364 } |
364 | 365 |
365 TEST_F(UploadDataStreamTest, Chunk) { | 366 TEST_F(UploadDataStreamTest, Chunk) { |
366 const uint64 kStreamSize = kTestDataSize*2; | 367 const uint64 kStreamSize = kTestDataSize * 2; |
367 UploadDataStream stream(UploadDataStream::CHUNKED, 0); | 368 UploadDataStream stream(UploadDataStream::CHUNKED, 0); |
368 stream.AppendChunk(kTestData, kTestDataSize, false); | 369 stream.AppendChunk(kTestData, kTestDataSize, false); |
369 stream.AppendChunk(kTestData, kTestDataSize, true); | 370 stream.AppendChunk(kTestData, kTestDataSize, true); |
370 | 371 |
371 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 372 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
372 EXPECT_FALSE(stream.IsInMemory()); | 373 EXPECT_FALSE(stream.IsInMemory()); |
373 EXPECT_EQ(0U, stream.size()); // Content-Length is 0 for chunked data. | 374 EXPECT_EQ(0U, stream.size()); // Content-Length is 0 for chunked data. |
374 EXPECT_EQ(0U, stream.position()); | 375 EXPECT_EQ(0U, stream.position()); |
375 EXPECT_FALSE(stream.IsEOF()); | 376 EXPECT_FALSE(stream.IsEOF()); |
376 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 377 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 UploadDataStream stream(element_readers_.Pass(), 0); | 450 UploadDataStream stream(element_readers_.Pass(), 0); |
450 | 451 |
451 // Run Init(). | 452 // Run Init(). |
452 TestCompletionCallback callback; | 453 TestCompletionCallback callback; |
453 ASSERT_EQ(ERR_IO_PENDING, stream.Init(callback.callback())); | 454 ASSERT_EQ(ERR_IO_PENDING, stream.Init(callback.callback())); |
454 EXPECT_EQ(ERR_FAILED, callback.WaitForResult()); | 455 EXPECT_EQ(ERR_FAILED, callback.WaitForResult()); |
455 } | 456 } |
456 | 457 |
457 // Read with a buffer whose size is same as the data. | 458 // Read with a buffer whose size is same as the data. |
458 TEST_F(UploadDataStreamTest, ReadAsyncWithExactSizeBuffer) { | 459 TEST_F(UploadDataStreamTest, ReadAsyncWithExactSizeBuffer) { |
459 element_readers_.push_back(new UploadBytesElementReader( | 460 element_readers_.push_back( |
460 kTestData, kTestDataSize)); | 461 new UploadBytesElementReader(kTestData, kTestDataSize)); |
461 UploadDataStream stream(element_readers_.Pass(), 0); | 462 UploadDataStream stream(element_readers_.Pass(), 0); |
462 | 463 |
463 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 464 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
464 EXPECT_TRUE(stream.IsInMemory()); | 465 EXPECT_TRUE(stream.IsInMemory()); |
465 EXPECT_EQ(kTestDataSize, stream.size()); | 466 EXPECT_EQ(kTestDataSize, stream.size()); |
466 EXPECT_EQ(0U, stream.position()); | 467 EXPECT_EQ(0U, stream.position()); |
467 EXPECT_FALSE(stream.IsEOF()); | 468 EXPECT_FALSE(stream.IsEOF()); |
468 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestDataSize); | 469 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestDataSize); |
469 int bytes_read = stream.Read(buf.get(), kTestDataSize, CompletionCallback()); | 470 int bytes_read = stream.Read(buf.get(), kTestDataSize, CompletionCallback()); |
470 ASSERT_EQ(static_cast<int>(kTestDataSize), bytes_read); // Not an error. | 471 ASSERT_EQ(static_cast<int>(kTestDataSize), bytes_read); // Not an error. |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); | 543 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); |
543 int error_code = init_callback.WaitForResult(); | 544 int error_code = init_callback.WaitForResult(); |
544 if (error_expected) | 545 if (error_expected) |
545 ASSERT_EQ(ERR_UPLOAD_FILE_CHANGED, error_code); | 546 ASSERT_EQ(ERR_UPLOAD_FILE_CHANGED, error_code); |
546 else | 547 else |
547 ASSERT_EQ(OK, error_code); | 548 ASSERT_EQ(OK, error_code); |
548 } | 549 } |
549 | 550 |
550 TEST_F(UploadDataStreamTest, FileChanged) { | 551 TEST_F(UploadDataStreamTest, FileChanged) { |
551 base::FilePath temp_file_path; | 552 base::FilePath temp_file_path; |
552 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 553 ASSERT_TRUE( |
553 &temp_file_path)); | 554 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
554 ASSERT_EQ(static_cast<int>(kTestDataSize), | 555 ASSERT_EQ(static_cast<int>(kTestDataSize), |
555 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 556 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
556 | 557 |
557 base::File::Info file_info; | 558 base::File::Info file_info; |
558 ASSERT_TRUE(base::GetFileInfo(temp_file_path, &file_info)); | 559 ASSERT_TRUE(base::GetFileInfo(temp_file_path, &file_info)); |
559 | 560 |
560 // Test file not changed. | 561 // Test file not changed. |
561 FileChangedHelper(temp_file_path, file_info.last_modified, false); | 562 FileChangedHelper(temp_file_path, file_info.last_modified, false); |
562 | 563 |
563 // Test file changed. | 564 // Test file changed. |
564 FileChangedHelper(temp_file_path, | 565 FileChangedHelper(temp_file_path, |
565 file_info.last_modified - base::TimeDelta::FromSeconds(1), | 566 file_info.last_modified - base::TimeDelta::FromSeconds(1), |
566 true); | 567 true); |
567 } | 568 } |
568 | 569 |
569 TEST_F(UploadDataStreamTest, MultipleInit) { | 570 TEST_F(UploadDataStreamTest, MultipleInit) { |
570 base::FilePath temp_file_path; | 571 base::FilePath temp_file_path; |
571 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 572 ASSERT_TRUE( |
572 &temp_file_path)); | 573 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
573 ASSERT_EQ(static_cast<int>(kTestDataSize), | 574 ASSERT_EQ(static_cast<int>(kTestDataSize), |
574 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 575 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
575 | 576 |
576 // Prepare data. | 577 // Prepare data. |
577 element_readers_.push_back(new UploadBytesElementReader( | 578 element_readers_.push_back( |
578 kTestData, kTestDataSize)); | 579 new UploadBytesElementReader(kTestData, kTestDataSize)); |
579 element_readers_.push_back( | 580 element_readers_.push_back( |
580 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 581 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
581 temp_file_path, | 582 temp_file_path, |
582 0, | 583 0, |
583 kuint64max, | 584 kuint64max, |
584 base::Time())); | 585 base::Time())); |
585 UploadDataStream stream(element_readers_.Pass(), 0); | 586 UploadDataStream stream(element_readers_.Pass(), 0); |
586 | 587 |
587 std::string expected_data(kTestData, kTestData + kTestDataSize); | 588 std::string expected_data(kTestData, kTestData + kTestDataSize); |
588 expected_data += expected_data; | 589 expected_data += expected_data; |
589 | 590 |
590 // Call Init(). | 591 // Call Init(). |
591 TestCompletionCallback init_callback1; | 592 TestCompletionCallback init_callback1; |
592 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); | 593 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); |
593 ASSERT_EQ(OK, init_callback1.WaitForResult()); | 594 ASSERT_EQ(OK, init_callback1.WaitForResult()); |
594 EXPECT_FALSE(stream.IsEOF()); | 595 EXPECT_FALSE(stream.IsEOF()); |
595 EXPECT_EQ(kTestDataSize*2, stream.size()); | 596 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
596 | 597 |
597 // Read. | 598 // Read. |
598 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); | 599 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); |
599 EXPECT_TRUE(stream.IsEOF()); | 600 EXPECT_TRUE(stream.IsEOF()); |
600 | 601 |
601 // Call Init() again to reset. | 602 // Call Init() again to reset. |
602 TestCompletionCallback init_callback2; | 603 TestCompletionCallback init_callback2; |
603 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); | 604 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); |
604 ASSERT_EQ(OK, init_callback2.WaitForResult()); | 605 ASSERT_EQ(OK, init_callback2.WaitForResult()); |
605 EXPECT_FALSE(stream.IsEOF()); | 606 EXPECT_FALSE(stream.IsEOF()); |
606 EXPECT_EQ(kTestDataSize*2, stream.size()); | 607 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
607 | 608 |
608 // Read again. | 609 // Read again. |
609 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); | 610 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); |
610 EXPECT_TRUE(stream.IsEOF()); | 611 EXPECT_TRUE(stream.IsEOF()); |
611 } | 612 } |
612 | 613 |
613 TEST_F(UploadDataStreamTest, MultipleInitAsync) { | 614 TEST_F(UploadDataStreamTest, MultipleInitAsync) { |
614 base::FilePath temp_file_path; | 615 base::FilePath temp_file_path; |
615 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 616 ASSERT_TRUE( |
616 &temp_file_path)); | 617 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
617 ASSERT_EQ(static_cast<int>(kTestDataSize), | 618 ASSERT_EQ(static_cast<int>(kTestDataSize), |
618 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 619 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
619 TestCompletionCallback test_callback; | 620 TestCompletionCallback test_callback; |
620 | 621 |
621 // Prepare data. | 622 // Prepare data. |
622 element_readers_.push_back(new UploadBytesElementReader( | 623 element_readers_.push_back( |
623 kTestData, kTestDataSize)); | 624 new UploadBytesElementReader(kTestData, kTestDataSize)); |
624 element_readers_.push_back( | 625 element_readers_.push_back( |
625 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 626 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
626 temp_file_path, | 627 temp_file_path, |
627 0, | 628 0, |
628 kuint64max, | 629 kuint64max, |
629 base::Time())); | 630 base::Time())); |
630 UploadDataStream stream(element_readers_.Pass(), 0); | 631 UploadDataStream stream(element_readers_.Pass(), 0); |
631 | 632 |
632 std::string expected_data(kTestData, kTestData + kTestDataSize); | 633 std::string expected_data(kTestData, kTestData + kTestDataSize); |
633 expected_data += expected_data; | 634 expected_data += expected_data; |
634 | 635 |
635 // Call Init(). | 636 // Call Init(). |
636 ASSERT_EQ(ERR_IO_PENDING, stream.Init(test_callback.callback())); | 637 ASSERT_EQ(ERR_IO_PENDING, stream.Init(test_callback.callback())); |
637 EXPECT_EQ(OK, test_callback.WaitForResult()); | 638 EXPECT_EQ(OK, test_callback.WaitForResult()); |
638 EXPECT_FALSE(stream.IsEOF()); | 639 EXPECT_FALSE(stream.IsEOF()); |
639 EXPECT_EQ(kTestDataSize*2, stream.size()); | 640 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
640 | 641 |
641 // Read. | 642 // Read. |
642 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); | 643 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); |
643 EXPECT_TRUE(stream.IsEOF()); | 644 EXPECT_TRUE(stream.IsEOF()); |
644 | 645 |
645 // Call Init() again to reset. | 646 // Call Init() again to reset. |
646 ASSERT_EQ(ERR_IO_PENDING, stream.Init(test_callback.callback())); | 647 ASSERT_EQ(ERR_IO_PENDING, stream.Init(test_callback.callback())); |
647 EXPECT_EQ(OK, test_callback.WaitForResult()); | 648 EXPECT_EQ(OK, test_callback.WaitForResult()); |
648 EXPECT_FALSE(stream.IsEOF()); | 649 EXPECT_FALSE(stream.IsEOF()); |
649 EXPECT_EQ(kTestDataSize*2, stream.size()); | 650 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
650 | 651 |
651 // Read again. | 652 // Read again. |
652 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); | 653 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); |
653 EXPECT_TRUE(stream.IsEOF()); | 654 EXPECT_TRUE(stream.IsEOF()); |
654 } | 655 } |
655 | 656 |
656 TEST_F(UploadDataStreamTest, InitToReset) { | 657 TEST_F(UploadDataStreamTest, InitToReset) { |
657 base::FilePath temp_file_path; | 658 base::FilePath temp_file_path; |
658 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 659 ASSERT_TRUE( |
659 &temp_file_path)); | 660 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
660 ASSERT_EQ(static_cast<int>(kTestDataSize), | 661 ASSERT_EQ(static_cast<int>(kTestDataSize), |
661 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 662 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
662 | 663 |
663 // Prepare data. | 664 // Prepare data. |
664 element_readers_.push_back(new UploadBytesElementReader( | 665 element_readers_.push_back( |
665 kTestData, kTestDataSize)); | 666 new UploadBytesElementReader(kTestData, kTestDataSize)); |
666 element_readers_.push_back( | 667 element_readers_.push_back( |
667 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 668 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
668 temp_file_path, | 669 temp_file_path, |
669 0, | 670 0, |
670 kuint64max, | 671 kuint64max, |
671 base::Time())); | 672 base::Time())); |
672 UploadDataStream stream(element_readers_.Pass(), 0); | 673 UploadDataStream stream(element_readers_.Pass(), 0); |
673 | 674 |
674 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); | 675 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); |
675 expected_data.insert(expected_data.end(), expected_data.begin(), | 676 expected_data.insert(expected_data.end(), |
| 677 expected_data.begin(), |
676 expected_data.begin() + kTestDataSize); | 678 expected_data.begin() + kTestDataSize); |
677 | 679 |
678 // Call Init(). | 680 // Call Init(). |
679 TestCompletionCallback init_callback1; | 681 TestCompletionCallback init_callback1; |
680 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); | 682 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); |
681 EXPECT_EQ(OK, init_callback1.WaitForResult()); | 683 EXPECT_EQ(OK, init_callback1.WaitForResult()); |
682 EXPECT_FALSE(stream.IsEOF()); | 684 EXPECT_FALSE(stream.IsEOF()); |
683 EXPECT_EQ(kTestDataSize*2, stream.size()); | 685 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
684 | 686 |
685 // Read some. | 687 // Read some. |
686 TestCompletionCallback read_callback1; | 688 TestCompletionCallback read_callback1; |
687 std::vector<char> buf(kTestDataSize + kTestDataSize/2); | 689 std::vector<char> buf(kTestDataSize + kTestDataSize / 2); |
688 scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); | 690 scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); |
689 EXPECT_EQ( | 691 EXPECT_EQ( |
690 ERR_IO_PENDING, | 692 ERR_IO_PENDING, |
691 stream.Read(wrapped_buffer.get(), buf.size(), read_callback1.callback())); | 693 stream.Read(wrapped_buffer.get(), buf.size(), read_callback1.callback())); |
692 EXPECT_EQ(static_cast<int>(buf.size()), read_callback1.WaitForResult()); | 694 EXPECT_EQ(static_cast<int>(buf.size()), read_callback1.WaitForResult()); |
693 EXPECT_EQ(buf.size(), stream.position()); | 695 EXPECT_EQ(buf.size(), stream.position()); |
694 | 696 |
695 // Call Init to reset the state. | 697 // Call Init to reset the state. |
696 TestCompletionCallback init_callback2; | 698 TestCompletionCallback init_callback2; |
697 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); | 699 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); |
698 EXPECT_EQ(OK, init_callback2.WaitForResult()); | 700 EXPECT_EQ(OK, init_callback2.WaitForResult()); |
699 EXPECT_FALSE(stream.IsEOF()); | 701 EXPECT_FALSE(stream.IsEOF()); |
700 EXPECT_EQ(kTestDataSize*2, stream.size()); | 702 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
701 | 703 |
702 // Read. | 704 // Read. |
703 TestCompletionCallback read_callback2; | 705 TestCompletionCallback read_callback2; |
704 std::vector<char> buf2(kTestDataSize*2); | 706 std::vector<char> buf2(kTestDataSize * 2); |
705 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); | 707 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); |
706 EXPECT_EQ(ERR_IO_PENDING, | 708 EXPECT_EQ(ERR_IO_PENDING, |
707 stream.Read( | 709 stream.Read( |
708 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 710 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |
709 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 711 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |
710 EXPECT_EQ(expected_data, buf2); | 712 EXPECT_EQ(expected_data, buf2); |
711 } | 713 } |
712 | 714 |
713 TEST_F(UploadDataStreamTest, InitDuringAsyncInit) { | 715 TEST_F(UploadDataStreamTest, InitDuringAsyncInit) { |
714 base::FilePath temp_file_path; | 716 base::FilePath temp_file_path; |
715 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 717 ASSERT_TRUE( |
716 &temp_file_path)); | 718 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
717 ASSERT_EQ(static_cast<int>(kTestDataSize), | 719 ASSERT_EQ(static_cast<int>(kTestDataSize), |
718 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 720 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
719 | 721 |
720 // Prepare data. | 722 // Prepare data. |
721 element_readers_.push_back(new UploadBytesElementReader( | 723 element_readers_.push_back( |
722 kTestData, kTestDataSize)); | 724 new UploadBytesElementReader(kTestData, kTestDataSize)); |
723 element_readers_.push_back( | 725 element_readers_.push_back( |
724 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 726 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
725 temp_file_path, | 727 temp_file_path, |
726 0, | 728 0, |
727 kuint64max, | 729 kuint64max, |
728 base::Time())); | 730 base::Time())); |
729 UploadDataStream stream(element_readers_.Pass(), 0); | 731 UploadDataStream stream(element_readers_.Pass(), 0); |
730 | 732 |
731 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); | 733 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); |
732 expected_data.insert(expected_data.end(), expected_data.begin(), | 734 expected_data.insert(expected_data.end(), |
| 735 expected_data.begin(), |
733 expected_data.begin() + kTestDataSize); | 736 expected_data.begin() + kTestDataSize); |
734 | 737 |
735 // Start Init. | 738 // Start Init. |
736 TestCompletionCallback init_callback1; | 739 TestCompletionCallback init_callback1; |
737 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); | 740 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); |
738 | 741 |
739 // Call Init again to cancel the previous init. | 742 // Call Init again to cancel the previous init. |
740 TestCompletionCallback init_callback2; | 743 TestCompletionCallback init_callback2; |
741 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); | 744 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); |
742 EXPECT_EQ(OK, init_callback2.WaitForResult()); | 745 EXPECT_EQ(OK, init_callback2.WaitForResult()); |
743 EXPECT_FALSE(stream.IsEOF()); | 746 EXPECT_FALSE(stream.IsEOF()); |
744 EXPECT_EQ(kTestDataSize*2, stream.size()); | 747 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
745 | 748 |
746 // Read. | 749 // Read. |
747 TestCompletionCallback read_callback2; | 750 TestCompletionCallback read_callback2; |
748 std::vector<char> buf2(kTestDataSize*2); | 751 std::vector<char> buf2(kTestDataSize * 2); |
749 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); | 752 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); |
750 EXPECT_EQ(ERR_IO_PENDING, | 753 EXPECT_EQ(ERR_IO_PENDING, |
751 stream.Read( | 754 stream.Read( |
752 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 755 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |
753 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 756 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |
754 EXPECT_EQ(expected_data, buf2); | 757 EXPECT_EQ(expected_data, buf2); |
755 EXPECT_TRUE(stream.IsEOF()); | 758 EXPECT_TRUE(stream.IsEOF()); |
756 | 759 |
757 // Make sure callbacks are not called for cancelled operations. | 760 // Make sure callbacks are not called for cancelled operations. |
758 EXPECT_FALSE(init_callback1.have_result()); | 761 EXPECT_FALSE(init_callback1.have_result()); |
759 } | 762 } |
760 | 763 |
761 TEST_F(UploadDataStreamTest, InitDuringAsyncRead) { | 764 TEST_F(UploadDataStreamTest, InitDuringAsyncRead) { |
762 base::FilePath temp_file_path; | 765 base::FilePath temp_file_path; |
763 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 766 ASSERT_TRUE( |
764 &temp_file_path)); | 767 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
765 ASSERT_EQ(static_cast<int>(kTestDataSize), | 768 ASSERT_EQ(static_cast<int>(kTestDataSize), |
766 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 769 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
767 | 770 |
768 // Prepare data. | 771 // Prepare data. |
769 element_readers_.push_back(new UploadBytesElementReader( | 772 element_readers_.push_back( |
770 kTestData, kTestDataSize)); | 773 new UploadBytesElementReader(kTestData, kTestDataSize)); |
771 element_readers_.push_back( | 774 element_readers_.push_back( |
772 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 775 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
773 temp_file_path, | 776 temp_file_path, |
774 0, | 777 0, |
775 kuint64max, | 778 kuint64max, |
776 base::Time())); | 779 base::Time())); |
777 UploadDataStream stream(element_readers_.Pass(), 0); | 780 UploadDataStream stream(element_readers_.Pass(), 0); |
778 | 781 |
779 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); | 782 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); |
780 expected_data.insert(expected_data.end(), expected_data.begin(), | 783 expected_data.insert(expected_data.end(), |
| 784 expected_data.begin(), |
781 expected_data.begin() + kTestDataSize); | 785 expected_data.begin() + kTestDataSize); |
782 | 786 |
783 // Call Init(). | 787 // Call Init(). |
784 TestCompletionCallback init_callback1; | 788 TestCompletionCallback init_callback1; |
785 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); | 789 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); |
786 EXPECT_EQ(OK, init_callback1.WaitForResult()); | 790 EXPECT_EQ(OK, init_callback1.WaitForResult()); |
787 EXPECT_FALSE(stream.IsEOF()); | 791 EXPECT_FALSE(stream.IsEOF()); |
788 EXPECT_EQ(kTestDataSize*2, stream.size()); | 792 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
789 | 793 |
790 // Start reading. | 794 // Start reading. |
791 TestCompletionCallback read_callback1; | 795 TestCompletionCallback read_callback1; |
792 std::vector<char> buf(kTestDataSize*2); | 796 std::vector<char> buf(kTestDataSize * 2); |
793 scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); | 797 scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); |
794 EXPECT_EQ( | 798 EXPECT_EQ( |
795 ERR_IO_PENDING, | 799 ERR_IO_PENDING, |
796 stream.Read(wrapped_buffer.get(), buf.size(), read_callback1.callback())); | 800 stream.Read(wrapped_buffer.get(), buf.size(), read_callback1.callback())); |
797 | 801 |
798 // Call Init to cancel the previous read. | 802 // Call Init to cancel the previous read. |
799 TestCompletionCallback init_callback2; | 803 TestCompletionCallback init_callback2; |
800 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); | 804 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); |
801 EXPECT_EQ(OK, init_callback2.WaitForResult()); | 805 EXPECT_EQ(OK, init_callback2.WaitForResult()); |
802 EXPECT_FALSE(stream.IsEOF()); | 806 EXPECT_FALSE(stream.IsEOF()); |
803 EXPECT_EQ(kTestDataSize*2, stream.size()); | 807 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
804 | 808 |
805 // Read. | 809 // Read. |
806 TestCompletionCallback read_callback2; | 810 TestCompletionCallback read_callback2; |
807 std::vector<char> buf2(kTestDataSize*2); | 811 std::vector<char> buf2(kTestDataSize * 2); |
808 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); | 812 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); |
809 EXPECT_EQ(ERR_IO_PENDING, | 813 EXPECT_EQ(ERR_IO_PENDING, |
810 stream.Read( | 814 stream.Read( |
811 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 815 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |
812 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 816 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |
813 EXPECT_EQ(expected_data, buf2); | 817 EXPECT_EQ(expected_data, buf2); |
814 EXPECT_TRUE(stream.IsEOF()); | 818 EXPECT_TRUE(stream.IsEOF()); |
815 | 819 |
816 // Make sure callbacks are not called for cancelled operations. | 820 // Make sure callbacks are not called for cancelled operations. |
817 EXPECT_FALSE(read_callback1.have_result()); | 821 EXPECT_FALSE(read_callback1.have_result()); |
818 } | 822 } |
819 | 823 |
820 } // namespace net | 824 } // namespace net |
OLD | NEW |