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/file_stream.h" | 5 #include "net/base/file_stream.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/files/file.h" | 9 #include "base/files/file.h" |
10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 TEST_F(FileStreamTest, OpenExplicitClose) { | 72 TEST_F(FileStreamTest, OpenExplicitClose) { |
73 TestCompletionCallback callback; | 73 TestCompletionCallback callback; |
74 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 74 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
75 int flags = base::File::FLAG_OPEN | | 75 int flags = base::File::FLAG_OPEN | |
76 base::File::FLAG_READ | | 76 base::File::FLAG_READ | |
77 base::File::FLAG_ASYNC; | 77 base::File::FLAG_ASYNC; |
78 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | 78 int rv = stream.Open(temp_file_path(), flags, callback.callback()); |
79 EXPECT_EQ(ERR_IO_PENDING, rv); | 79 EXPECT_EQ(ERR_IO_PENDING, rv); |
80 EXPECT_EQ(OK, callback.WaitForResult()); | 80 EXPECT_EQ(OK, callback.WaitForResult()); |
81 EXPECT_TRUE(stream.IsOpen()); | 81 EXPECT_TRUE(stream.IsOpen()); |
82 EXPECT_TRUE(stream.GetFileForTesting().IsValid()); | |
83 EXPECT_EQ(ERR_IO_PENDING, stream.Close(callback.callback())); | 82 EXPECT_EQ(ERR_IO_PENDING, stream.Close(callback.callback())); |
84 EXPECT_EQ(OK, callback.WaitForResult()); | 83 EXPECT_EQ(OK, callback.WaitForResult()); |
85 EXPECT_FALSE(stream.IsOpen()); | 84 EXPECT_FALSE(stream.IsOpen()); |
86 EXPECT_FALSE(stream.GetFileForTesting().IsValid()); | |
87 } | 85 } |
88 | 86 |
89 TEST_F(FileStreamTest, OpenExplicitCloseOrphaned) { | 87 TEST_F(FileStreamTest, OpenExplicitCloseOrphaned) { |
90 TestCompletionCallback callback; | 88 TestCompletionCallback callback; |
91 scoped_ptr<FileStream> stream( | 89 scoped_ptr<FileStream> stream( |
92 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 90 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
93 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 91 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
94 base::File::FLAG_ASYNC; | 92 base::File::FLAG_ASYNC; |
95 int rv = stream->Open(temp_file_path(), flags, callback.callback()); | 93 int rv = stream->Open(temp_file_path(), flags, callback.callback()); |
96 EXPECT_EQ(ERR_IO_PENDING, rv); | 94 EXPECT_EQ(ERR_IO_PENDING, rv); |
97 EXPECT_EQ(OK, callback.WaitForResult()); | 95 EXPECT_EQ(OK, callback.WaitForResult()); |
98 EXPECT_TRUE(stream->IsOpen()); | 96 EXPECT_TRUE(stream->IsOpen()); |
99 EXPECT_TRUE(stream->GetFileForTesting().IsValid()); | |
100 EXPECT_EQ(ERR_IO_PENDING, stream->Close(callback.callback())); | 97 EXPECT_EQ(ERR_IO_PENDING, stream->Close(callback.callback())); |
101 stream.reset(); | 98 stream.reset(); |
102 // File isn't actually closed yet. | 99 // File isn't actually closed yet. |
103 base::RunLoop runloop; | 100 base::RunLoop runloop; |
104 runloop.RunUntilIdle(); | 101 runloop.RunUntilIdle(); |
105 // The file should now be closed, though the callback has not been called. | 102 // The file should now be closed, though the callback has not been called. |
106 } | 103 } |
107 | 104 |
108 // Test the use of FileStream with a file handle provided at construction. | 105 // Test the use of FileStream with a file handle provided at construction. |
109 TEST_F(FileStreamTest, UseFileHandle) { | 106 TEST_F(FileStreamTest, UseFileHandle) { |
110 int rv = 0; | 107 int rv = 0; |
111 TestCompletionCallback callback; | 108 TestCompletionCallback callback; |
112 TestInt64CompletionCallback callback64; | 109 TestInt64CompletionCallback callback64; |
113 // 1. Test reading with a file handle. | 110 // 1. Test reading with a file handle. |
114 ASSERT_EQ(kTestDataSize, | 111 ASSERT_EQ(kTestDataSize, |
115 base::WriteFile(temp_file_path(), kTestData, kTestDataSize)); | 112 base::WriteFile(temp_file_path(), kTestData, kTestDataSize)); |
116 int flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ | | 113 int flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ | |
117 base::File::FLAG_ASYNC; | 114 base::File::FLAG_ASYNC; |
118 base::File file(temp_file_path(), flags); | 115 base::File file(temp_file_path(), flags); |
119 | 116 |
120 // Seek to the beginning of the file and read. | 117 // Seek to the beginning of the file and read. |
121 scoped_ptr<FileStream> read_stream( | 118 scoped_ptr<FileStream> read_stream( |
122 new FileStream(file.Pass(), base::ThreadTaskRunnerHandle::Get())); | 119 new FileStream(file.Pass(), base::ThreadTaskRunnerHandle::Get())); |
123 ASSERT_EQ(ERR_IO_PENDING, | 120 ASSERT_EQ(ERR_IO_PENDING, read_stream->Seek(0, callback64.callback())); |
124 read_stream->Seek(base::File::FROM_BEGIN, 0, | |
125 callback64.callback())); | |
126 ASSERT_EQ(0, callback64.WaitForResult()); | 121 ASSERT_EQ(0, callback64.WaitForResult()); |
127 // Read into buffer and compare. | 122 // Read into buffer and compare. |
128 scoped_refptr<IOBufferWithSize> read_buffer = | 123 scoped_refptr<IOBufferWithSize> read_buffer = |
129 new IOBufferWithSize(kTestDataSize); | 124 new IOBufferWithSize(kTestDataSize); |
130 rv = read_stream->Read(read_buffer.get(), kTestDataSize, callback.callback()); | 125 rv = read_stream->Read(read_buffer.get(), kTestDataSize, callback.callback()); |
131 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); | 126 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); |
132 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); | 127 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); |
133 read_stream.reset(); | 128 read_stream.reset(); |
134 | 129 |
135 // 2. Test writing with a file handle. | 130 // 2. Test writing with a file handle. |
136 base::DeleteFile(temp_file_path(), false); | 131 base::DeleteFile(temp_file_path(), false); |
137 flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE | | 132 flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE | |
138 base::File::FLAG_ASYNC; | 133 base::File::FLAG_ASYNC; |
139 file.Initialize(temp_file_path(), flags); | 134 file.Initialize(temp_file_path(), flags); |
140 | 135 |
141 scoped_ptr<FileStream> write_stream( | 136 scoped_ptr<FileStream> write_stream( |
142 new FileStream(file.Pass(), base::ThreadTaskRunnerHandle::Get())); | 137 new FileStream(file.Pass(), base::ThreadTaskRunnerHandle::Get())); |
143 ASSERT_EQ(ERR_IO_PENDING, | 138 ASSERT_EQ(ERR_IO_PENDING, write_stream->Seek(0, callback64.callback())); |
144 write_stream->Seek(base::File::FROM_BEGIN, 0, | |
145 callback64.callback())); | |
146 ASSERT_EQ(0, callback64.WaitForResult()); | 139 ASSERT_EQ(0, callback64.WaitForResult()); |
147 scoped_refptr<IOBufferWithSize> write_buffer = CreateTestDataBuffer(); | 140 scoped_refptr<IOBufferWithSize> write_buffer = CreateTestDataBuffer(); |
148 rv = write_stream->Write(write_buffer.get(), kTestDataSize, | 141 rv = write_stream->Write(write_buffer.get(), kTestDataSize, |
149 callback.callback()); | 142 callback.callback()); |
150 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); | 143 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); |
151 write_stream.reset(); | 144 write_stream.reset(); |
152 | 145 |
153 // Read into buffer and compare to make sure the handle worked fine. | 146 // Read into buffer and compare to make sure the handle worked fine. |
154 ASSERT_EQ(kTestDataSize, | 147 ASSERT_EQ(kTestDataSize, |
155 base::ReadFile(temp_file_path(), read_buffer->data(), | 148 base::ReadFile(temp_file_path(), read_buffer->data(), |
156 kTestDataSize)); | 149 kTestDataSize)); |
157 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); | 150 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); |
158 } | 151 } |
159 | 152 |
160 TEST_F(FileStreamTest, UseClosedStream) { | 153 TEST_F(FileStreamTest, UseClosedStream) { |
161 int rv = 0; | 154 int rv = 0; |
162 TestCompletionCallback callback; | 155 TestCompletionCallback callback; |
163 TestInt64CompletionCallback callback64; | 156 TestInt64CompletionCallback callback64; |
164 | 157 |
165 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 158 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
166 | 159 |
167 EXPECT_FALSE(stream.IsOpen()); | 160 EXPECT_FALSE(stream.IsOpen()); |
168 | 161 |
169 // Try seeking... | 162 // Try seeking... |
170 rv = stream.Seek(base::File::FROM_BEGIN, 5, callback64.callback()); | 163 rv = stream.Seek(5, callback64.callback()); |
171 EXPECT_EQ(ERR_UNEXPECTED, callback64.GetResult(rv)); | 164 EXPECT_EQ(ERR_UNEXPECTED, callback64.GetResult(rv)); |
172 | 165 |
173 // Try reading... | 166 // Try reading... |
174 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(10); | 167 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(10); |
175 rv = stream.Read(buf.get(), buf->size(), callback.callback()); | 168 rv = stream.Read(buf.get(), buf->size(), callback.callback()); |
176 EXPECT_EQ(ERR_UNEXPECTED, callback.GetResult(rv)); | 169 EXPECT_EQ(ERR_UNEXPECTED, callback.GetResult(rv)); |
177 } | 170 } |
178 | 171 |
179 TEST_F(FileStreamTest, Read) { | 172 TEST_F(FileStreamTest, Read) { |
180 int64_t file_size; | 173 int64_t file_size; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 230 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
238 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 231 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
239 base::File::FLAG_ASYNC; | 232 base::File::FLAG_ASYNC; |
240 TestCompletionCallback callback; | 233 TestCompletionCallback callback; |
241 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | 234 int rv = stream.Open(temp_file_path(), flags, callback.callback()); |
242 EXPECT_EQ(ERR_IO_PENDING, rv); | 235 EXPECT_EQ(ERR_IO_PENDING, rv); |
243 EXPECT_EQ(OK, callback.WaitForResult()); | 236 EXPECT_EQ(OK, callback.WaitForResult()); |
244 | 237 |
245 TestInt64CompletionCallback callback64; | 238 TestInt64CompletionCallback callback64; |
246 const int64_t kOffset = 3; | 239 const int64_t kOffset = 3; |
247 rv = stream.Seek(base::File::FROM_BEGIN, kOffset, callback64.callback()); | 240 rv = stream.Seek(kOffset, callback64.callback()); |
248 ASSERT_EQ(ERR_IO_PENDING, rv); | 241 ASSERT_EQ(ERR_IO_PENDING, rv); |
249 int64_t new_offset = callback64.WaitForResult(); | 242 int64_t new_offset = callback64.WaitForResult(); |
250 EXPECT_EQ(kOffset, new_offset); | 243 EXPECT_EQ(kOffset, new_offset); |
251 | 244 |
252 int total_bytes_read = 0; | 245 int total_bytes_read = 0; |
253 | 246 |
254 std::string data_read; | 247 std::string data_read; |
255 for (;;) { | 248 for (;;) { |
256 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); | 249 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); |
257 rv = stream.Read(buf.get(), buf->size(), callback.callback()); | 250 rv = stream.Read(buf.get(), buf->size(), callback.callback()); |
258 if (rv == ERR_IO_PENDING) | 251 if (rv == ERR_IO_PENDING) |
259 rv = callback.WaitForResult(); | 252 rv = callback.WaitForResult(); |
260 EXPECT_LE(0, rv); | 253 EXPECT_LE(0, rv); |
261 if (rv <= 0) | 254 if (rv <= 0) |
262 break; | 255 break; |
263 total_bytes_read += rv; | 256 total_bytes_read += rv; |
264 data_read.append(buf->data(), rv); | 257 data_read.append(buf->data(), rv); |
265 } | 258 } |
266 EXPECT_EQ(file_size - kOffset, total_bytes_read); | 259 EXPECT_EQ(file_size - kOffset, total_bytes_read); |
267 EXPECT_EQ(kTestData + kOffset, data_read); | 260 EXPECT_EQ(kTestData + kOffset, data_read); |
268 } | 261 } |
269 | 262 |
270 TEST_F(FileStreamTest, SeekAround) { | |
271 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | |
272 int flags = base::File::FLAG_OPEN | base::File::FLAG_ASYNC | | |
273 base::File::FLAG_READ; | |
274 TestCompletionCallback callback; | |
275 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | |
276 EXPECT_EQ(ERR_IO_PENDING, rv); | |
277 EXPECT_EQ(OK, callback.WaitForResult()); | |
278 | |
279 TestInt64CompletionCallback callback64; | |
280 | |
281 const int64_t kOffset = 3; | |
282 rv = stream.Seek(base::File::FROM_BEGIN, kOffset, callback64.callback()); | |
283 ASSERT_EQ(ERR_IO_PENDING, rv); | |
284 int64_t new_offset = callback64.WaitForResult(); | |
285 EXPECT_EQ(kOffset, new_offset); | |
286 | |
287 rv = stream.Seek(base::File::FROM_CURRENT, kOffset, callback64.callback()); | |
288 ASSERT_EQ(ERR_IO_PENDING, rv); | |
289 new_offset = callback64.WaitForResult(); | |
290 EXPECT_EQ(2 * kOffset, new_offset); | |
291 | |
292 rv = stream.Seek(base::File::FROM_CURRENT, -kOffset, callback64.callback()); | |
293 ASSERT_EQ(ERR_IO_PENDING, rv); | |
294 new_offset = callback64.WaitForResult(); | |
295 EXPECT_EQ(kOffset, new_offset); | |
296 | |
297 const int kTestDataLen = arraysize(kTestData) - 1; | |
298 | |
299 rv = stream.Seek(base::File::FROM_END, -kTestDataLen, callback64.callback()); | |
300 ASSERT_EQ(ERR_IO_PENDING, rv); | |
301 new_offset = callback64.WaitForResult(); | |
302 EXPECT_EQ(0, new_offset); | |
303 } | |
304 | |
305 TEST_F(FileStreamTest, Write) { | 263 TEST_F(FileStreamTest, Write) { |
306 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 264 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
307 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | | 265 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | |
308 base::File::FLAG_ASYNC; | 266 base::File::FLAG_ASYNC; |
309 TestCompletionCallback callback; | 267 TestCompletionCallback callback; |
310 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | 268 int rv = stream.Open(temp_file_path(), flags, callback.callback()); |
311 EXPECT_EQ(OK, callback.GetResult(rv)); | 269 EXPECT_EQ(OK, callback.GetResult(rv)); |
312 | 270 |
313 int64_t file_size; | 271 int64_t file_size; |
314 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 272 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 | 319 |
362 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 320 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
363 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE | | 321 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE | |
364 base::File::FLAG_ASYNC; | 322 base::File::FLAG_ASYNC; |
365 TestCompletionCallback callback; | 323 TestCompletionCallback callback; |
366 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | 324 int rv = stream.Open(temp_file_path(), flags, callback.callback()); |
367 EXPECT_EQ(ERR_IO_PENDING, rv); | 325 EXPECT_EQ(ERR_IO_PENDING, rv); |
368 EXPECT_EQ(OK, callback.WaitForResult()); | 326 EXPECT_EQ(OK, callback.WaitForResult()); |
369 | 327 |
370 TestInt64CompletionCallback callback64; | 328 TestInt64CompletionCallback callback64; |
371 const int64_t kOffset = 0; | 329 const int64_t kOffset = kTestDataSize; |
372 rv = stream.Seek(base::File::FROM_END, kOffset, callback64.callback()); | 330 rv = stream.Seek(kOffset, callback64.callback()); |
373 ASSERT_EQ(ERR_IO_PENDING, rv); | 331 ASSERT_EQ(ERR_IO_PENDING, rv); |
374 int64_t new_offset = callback64.WaitForResult(); | 332 int64_t new_offset = callback64.WaitForResult(); |
375 EXPECT_EQ(kTestDataSize, new_offset); | 333 EXPECT_EQ(kTestDataSize, new_offset); |
376 | 334 |
377 int total_bytes_written = 0; | 335 int total_bytes_written = 0; |
378 | 336 |
379 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); | 337 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); |
380 scoped_refptr<DrainableIOBuffer> drainable = | 338 scoped_refptr<DrainableIOBuffer> drainable = |
381 new DrainableIOBuffer(buf.get(), buf->size()); | 339 new DrainableIOBuffer(buf.get(), buf->size()); |
382 while (total_bytes_written != kTestDataSize) { | 340 while (total_bytes_written != kTestDataSize) { |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 scoped_ptr<FileStream> stream( | 412 scoped_ptr<FileStream> stream( |
455 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 413 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
456 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 414 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
457 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; | 415 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; |
458 TestCompletionCallback callback; | 416 TestCompletionCallback callback; |
459 int rv = stream->Open(temp_file_path(), flags, callback.callback()); | 417 int rv = stream->Open(temp_file_path(), flags, callback.callback()); |
460 EXPECT_EQ(ERR_IO_PENDING, rv); | 418 EXPECT_EQ(ERR_IO_PENDING, rv); |
461 EXPECT_EQ(OK, callback.WaitForResult()); | 419 EXPECT_EQ(OK, callback.WaitForResult()); |
462 | 420 |
463 TestInt64CompletionCallback callback64; | 421 TestInt64CompletionCallback callback64; |
464 rv = stream->Seek(base::File::FROM_END, 0, callback64.callback()); | 422 rv = stream->Seek(file_size, callback64.callback()); |
465 ASSERT_EQ(ERR_IO_PENDING, rv); | 423 ASSERT_EQ(ERR_IO_PENDING, rv); |
466 int64_t offset = callback64.WaitForResult(); | 424 int64_t offset = callback64.WaitForResult(); |
467 EXPECT_EQ(offset, file_size); | 425 EXPECT_EQ(offset, file_size); |
468 | 426 |
469 int total_bytes_written = 0; | 427 int total_bytes_written = 0; |
470 | 428 |
471 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); | 429 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); |
472 scoped_refptr<DrainableIOBuffer> drainable = | 430 scoped_refptr<DrainableIOBuffer> drainable = |
473 new DrainableIOBuffer(buf.get(), buf->size()); | 431 new DrainableIOBuffer(buf.get(), buf->size()); |
474 while (total_bytes_written != kTestDataSize) { | 432 while (total_bytes_written != kTestDataSize) { |
475 rv = stream->Write(drainable.get(), drainable->BytesRemaining(), | 433 rv = stream->Write(drainable.get(), drainable->BytesRemaining(), |
476 callback.callback()); | 434 callback.callback()); |
477 if (rv == ERR_IO_PENDING) | 435 if (rv == ERR_IO_PENDING) |
478 rv = callback.WaitForResult(); | 436 rv = callback.WaitForResult(); |
479 EXPECT_LT(0, rv); | 437 EXPECT_LT(0, rv); |
480 if (rv <= 0) | 438 if (rv <= 0) |
481 break; | 439 break; |
482 drainable->DidConsume(rv); | 440 drainable->DidConsume(rv); |
483 total_bytes_written += rv; | 441 total_bytes_written += rv; |
484 } | 442 } |
485 | 443 |
486 EXPECT_EQ(kTestDataSize, total_bytes_written); | 444 EXPECT_EQ(kTestDataSize, total_bytes_written); |
487 | 445 |
488 rv = stream->Seek(base::File::FROM_BEGIN, 0, callback64.callback()); | 446 rv = stream->Seek(0, callback64.callback()); |
489 ASSERT_EQ(ERR_IO_PENDING, rv); | 447 ASSERT_EQ(ERR_IO_PENDING, rv); |
490 offset = callback64.WaitForResult(); | 448 offset = callback64.WaitForResult(); |
491 EXPECT_EQ(0, offset); | 449 EXPECT_EQ(0, offset); |
492 | 450 |
493 int total_bytes_read = 0; | 451 int total_bytes_read = 0; |
494 | 452 |
495 std::string data_read; | 453 std::string data_read; |
496 for (;;) { | 454 for (;;) { |
497 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); | 455 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); |
498 rv = stream->Read(buf.get(), buf->size(), callback.callback()); | 456 rv = stream->Read(buf.get(), buf->size(), callback.callback()); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 rv = stream_->Write( | 539 rv = stream_->Write( |
582 drainable_.get(), drainable_->BytesRemaining(), callback.callback()); | 540 drainable_.get(), drainable_->BytesRemaining(), callback.callback()); |
583 DCHECK_EQ(ERR_IO_PENDING, rv); | 541 DCHECK_EQ(ERR_IO_PENDING, rv); |
584 rv = callback.WaitForResult(); | 542 rv = callback.WaitForResult(); |
585 drainable_->DidConsume(total_bytes_written); | 543 drainable_->DidConsume(total_bytes_written); |
586 *total_bytes_written_ += total_bytes_written; | 544 *total_bytes_written_ += total_bytes_written; |
587 *total_bytes_read_ += total_bytes_read; | 545 *total_bytes_read_ += total_bytes_read; |
588 *data_read_ += data_read; | 546 *data_read_ += data_read; |
589 } else { // We're done writing all data. Start reading the data. | 547 } else { // We're done writing all data. Start reading the data. |
590 TestInt64CompletionCallback callback64; | 548 TestInt64CompletionCallback callback64; |
591 EXPECT_EQ(ERR_IO_PENDING, | 549 EXPECT_EQ(ERR_IO_PENDING, stream_->Seek(0, callback64.callback())); |
592 stream_->Seek(base::File::FROM_BEGIN, 0, | |
593 callback64.callback())); | |
594 { | 550 { |
595 base::MessageLoop::ScopedNestableTaskAllower allow( | 551 base::MessageLoop::ScopedNestableTaskAllower allow( |
596 base::MessageLoop::current()); | 552 base::MessageLoop::current()); |
597 EXPECT_LE(0, callback64.WaitForResult()); | 553 EXPECT_LE(0, callback64.WaitForResult()); |
598 } | 554 } |
599 } | 555 } |
600 | 556 |
601 result_ = *total_bytes_written_; | 557 result_ = *total_bytes_written_; |
602 have_result_ = true; | 558 have_result_ = true; |
603 if (waiting_for_result_) | 559 if (waiting_for_result_) |
(...skipping 21 matching lines...) Expand all Loading... |
625 scoped_ptr<FileStream> stream( | 581 scoped_ptr<FileStream> stream( |
626 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 582 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
627 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 583 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
628 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; | 584 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; |
629 TestCompletionCallback open_callback; | 585 TestCompletionCallback open_callback; |
630 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); | 586 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); |
631 EXPECT_EQ(ERR_IO_PENDING, rv); | 587 EXPECT_EQ(ERR_IO_PENDING, rv); |
632 EXPECT_EQ(OK, open_callback.WaitForResult()); | 588 EXPECT_EQ(OK, open_callback.WaitForResult()); |
633 | 589 |
634 TestInt64CompletionCallback callback64; | 590 TestInt64CompletionCallback callback64; |
635 EXPECT_EQ(ERR_IO_PENDING, | 591 EXPECT_EQ(ERR_IO_PENDING, stream->Seek(file_size, callback64.callback())); |
636 stream->Seek(base::File::FROM_END, 0, callback64.callback())); | |
637 EXPECT_EQ(file_size, callback64.WaitForResult()); | 592 EXPECT_EQ(file_size, callback64.WaitForResult()); |
638 | 593 |
639 int total_bytes_written = 0; | 594 int total_bytes_written = 0; |
640 int total_bytes_read = 0; | 595 int total_bytes_read = 0; |
641 std::string data_read; | 596 std::string data_read; |
642 TestWriteReadCompletionCallback callback(stream.get(), &total_bytes_written, | 597 TestWriteReadCompletionCallback callback(stream.get(), &total_bytes_written, |
643 &total_bytes_read, &data_read); | 598 &total_bytes_read, &data_read); |
644 | 599 |
645 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); | 600 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); |
646 rv = stream->Write(buf.get(), buf->size(), callback.callback()); | 601 rv = stream->Write(buf.get(), buf->size(), callback.callback()); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 scoped_ptr<FileStream> stream( | 687 scoped_ptr<FileStream> stream( |
733 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 688 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
734 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 689 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
735 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; | 690 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; |
736 TestCompletionCallback open_callback; | 691 TestCompletionCallback open_callback; |
737 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); | 692 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); |
738 EXPECT_EQ(ERR_IO_PENDING, rv); | 693 EXPECT_EQ(ERR_IO_PENDING, rv); |
739 EXPECT_EQ(OK, open_callback.WaitForResult()); | 694 EXPECT_EQ(OK, open_callback.WaitForResult()); |
740 | 695 |
741 TestInt64CompletionCallback callback64; | 696 TestInt64CompletionCallback callback64; |
742 EXPECT_EQ(ERR_IO_PENDING, | 697 EXPECT_EQ(ERR_IO_PENDING, stream->Seek(file_size, callback64.callback())); |
743 stream->Seek(base::File::FROM_END, 0, callback64.callback())); | |
744 EXPECT_EQ(file_size, callback64.WaitForResult()); | 698 EXPECT_EQ(file_size, callback64.WaitForResult()); |
745 | 699 |
746 int total_bytes_written = 0; | 700 int total_bytes_written = 0; |
747 TestWriteCloseCompletionCallback callback(stream.get(), &total_bytes_written); | 701 TestWriteCloseCompletionCallback callback(stream.get(), &total_bytes_written); |
748 | 702 |
749 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); | 703 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); |
750 rv = stream->Write(buf.get(), buf->size(), callback.callback()); | 704 rv = stream->Write(buf.get(), buf->size(), callback.callback()); |
751 if (rv == ERR_IO_PENDING) | 705 if (rv == ERR_IO_PENDING) |
752 total_bytes_written = callback.WaitForResult(); | 706 total_bytes_written = callback.WaitForResult(); |
753 EXPECT_LT(0, total_bytes_written); | 707 EXPECT_LT(0, total_bytes_written); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
879 total_bytes_read += rv; | 833 total_bytes_read += rv; |
880 data_read.append(buf->data(), rv); | 834 data_read.append(buf->data(), rv); |
881 } | 835 } |
882 EXPECT_EQ(file_size, total_bytes_read); | 836 EXPECT_EQ(file_size, total_bytes_read); |
883 } | 837 } |
884 #endif | 838 #endif |
885 | 839 |
886 } // namespace | 840 } // namespace |
887 | 841 |
888 } // namespace net | 842 } // namespace net |
OLD | NEW |