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

Side by Side Diff: net/base/file_stream_unittest.cc

Issue 323683002: net: FileStream cleanup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add DCHECK, fix ASSERT message Created 6 years, 6 months 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 | Annotate | Revision Log
OLDNEW
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/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/file.h" 10 #include "base/files/file.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/message_loop/message_loop_proxy.h" 12 #include "base/message_loop/message_loop_proxy.h"
13 #include "base/path_service.h" 13 #include "base/path_service.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "base/strings/string_util.h"
15 #include "base/synchronization/waitable_event.h" 16 #include "base/synchronization/waitable_event.h"
16 #include "base/test/test_timeouts.h" 17 #include "base/test/test_timeouts.h"
17 #include "base/threading/sequenced_worker_pool.h" 18 #include "base/threading/sequenced_worker_pool.h"
18 #include "base/threading/thread_restrictions.h" 19 #include "base/threading/thread_restrictions.h"
19 #include "net/base/capturing_net_log.h" 20 #include "net/base/capturing_net_log.h"
20 #include "net/base/io_buffer.h" 21 #include "net/base/io_buffer.h"
21 #include "net/base/net_errors.h" 22 #include "net/base/net_errors.h"
22 #include "net/base/test_completion_callback.h" 23 #include "net/base/test_completion_callback.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 #include "testing/platform_test.h" 25 #include "testing/platform_test.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 } 62 }
62 63
63 const base::FilePath temp_file_path() const { return temp_file_path_; } 64 const base::FilePath temp_file_path() const { return temp_file_path_; }
64 65
65 private: 66 private:
66 base::FilePath temp_file_path_; 67 base::FilePath temp_file_path_;
67 }; 68 };
68 69
69 namespace { 70 namespace {
70 71
71 TEST_F(FileStreamTest, AsyncOpenExplicitClose) { 72 TEST_F(FileStreamTest, OpenExplicitClose) {
72 TestCompletionCallback callback; 73 TestCompletionCallback callback;
73 FileStream stream(base::MessageLoopProxy::current()); 74 FileStream stream(base::MessageLoopProxy::current());
74 int flags = base::File::FLAG_OPEN | 75 int flags = base::File::FLAG_OPEN |
75 base::File::FLAG_READ | 76 base::File::FLAG_READ |
76 base::File::FLAG_ASYNC; 77 base::File::FLAG_ASYNC;
77 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 78 int rv = stream.Open(temp_file_path(), flags, callback.callback());
78 EXPECT_EQ(ERR_IO_PENDING, rv); 79 EXPECT_EQ(ERR_IO_PENDING, rv);
79 EXPECT_EQ(OK, callback.WaitForResult()); 80 EXPECT_EQ(OK, callback.WaitForResult());
80 EXPECT_TRUE(stream.IsOpen()); 81 EXPECT_TRUE(stream.IsOpen());
81 EXPECT_TRUE(stream.GetFileForTesting().IsValid()); 82 EXPECT_TRUE(stream.GetFileForTesting().IsValid());
82 EXPECT_EQ(ERR_IO_PENDING, stream.Close(callback.callback())); 83 EXPECT_EQ(ERR_IO_PENDING, stream.Close(callback.callback()));
83 EXPECT_EQ(OK, callback.WaitForResult()); 84 EXPECT_EQ(OK, callback.WaitForResult());
84 EXPECT_FALSE(stream.IsOpen()); 85 EXPECT_FALSE(stream.IsOpen());
85 EXPECT_FALSE(stream.GetFileForTesting().IsValid()); 86 EXPECT_FALSE(stream.GetFileForTesting().IsValid());
86 } 87 }
87 88
88 TEST_F(FileStreamTest, AsyncOpenExplicitCloseOrphaned) { 89 TEST_F(FileStreamTest, OpenExplicitCloseOrphaned) {
89 TestCompletionCallback callback; 90 TestCompletionCallback callback;
90 scoped_ptr<FileStream> stream(new FileStream( 91 scoped_ptr<FileStream> stream(new FileStream(
91 base::MessageLoopProxy::current())); 92 base::MessageLoopProxy::current()));
92 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | 93 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
93 base::File::FLAG_ASYNC; 94 base::File::FLAG_ASYNC;
94 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 95 int rv = stream->Open(temp_file_path(), flags, callback.callback());
95 EXPECT_EQ(ERR_IO_PENDING, rv); 96 EXPECT_EQ(ERR_IO_PENDING, rv);
96 EXPECT_EQ(OK, callback.WaitForResult()); 97 EXPECT_EQ(OK, callback.WaitForResult());
97 EXPECT_TRUE(stream->IsOpen()); 98 EXPECT_TRUE(stream->IsOpen());
98 EXPECT_TRUE(stream->GetFileForTesting().IsValid()); 99 EXPECT_TRUE(stream->GetFileForTesting().IsValid());
(...skipping 14 matching lines...) Expand all
113 ASSERT_EQ(kTestDataSize, 114 ASSERT_EQ(kTestDataSize,
114 base::WriteFile(temp_file_path(), kTestData, kTestDataSize)); 115 base::WriteFile(temp_file_path(), kTestData, kTestDataSize));
115 int flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ | 116 int flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ |
116 base::File::FLAG_ASYNC; 117 base::File::FLAG_ASYNC;
117 base::File file(temp_file_path(), flags); 118 base::File file(temp_file_path(), flags);
118 119
119 // Seek to the beginning of the file and read. 120 // Seek to the beginning of the file and read.
120 scoped_ptr<FileStream> read_stream( 121 scoped_ptr<FileStream> read_stream(
121 new FileStream(file.Pass(), base::MessageLoopProxy::current())); 122 new FileStream(file.Pass(), base::MessageLoopProxy::current()));
122 ASSERT_EQ(ERR_IO_PENDING, 123 ASSERT_EQ(ERR_IO_PENDING,
123 read_stream->Seek(FROM_BEGIN, 0, callback64.callback())); 124 read_stream->Seek(base::File::FROM_BEGIN, 0,
125 callback64.callback()));
124 ASSERT_EQ(0, callback64.WaitForResult()); 126 ASSERT_EQ(0, callback64.WaitForResult());
125 // Read into buffer and compare. 127 // Read into buffer and compare.
126 scoped_refptr<IOBufferWithSize> read_buffer = 128 scoped_refptr<IOBufferWithSize> read_buffer =
127 new IOBufferWithSize(kTestDataSize); 129 new IOBufferWithSize(kTestDataSize);
128 rv = read_stream->Read(read_buffer.get(), kTestDataSize, callback.callback()); 130 rv = read_stream->Read(read_buffer.get(), kTestDataSize, callback.callback());
129 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); 131 ASSERT_EQ(kTestDataSize, callback.GetResult(rv));
130 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); 132 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize));
131 read_stream.reset(); 133 read_stream.reset();
132 134
133 // 2. Test writing with a file handle. 135 // 2. Test writing with a file handle.
134 base::DeleteFile(temp_file_path(), false); 136 base::DeleteFile(temp_file_path(), false);
135 flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE | 137 flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE |
136 base::File::FLAG_ASYNC; 138 base::File::FLAG_ASYNC;
137 file.Initialize(temp_file_path(), flags); 139 file.Initialize(temp_file_path(), flags);
138 140
139 scoped_ptr<FileStream> write_stream( 141 scoped_ptr<FileStream> write_stream(
140 new FileStream(file.Pass(), base::MessageLoopProxy::current())); 142 new FileStream(file.Pass(), base::MessageLoopProxy::current()));
141 ASSERT_EQ(ERR_IO_PENDING, 143 ASSERT_EQ(ERR_IO_PENDING,
142 write_stream->Seek(FROM_BEGIN, 0, callback64.callback())); 144 write_stream->Seek(base::File::FROM_BEGIN, 0,
145 callback64.callback()));
143 ASSERT_EQ(0, callback64.WaitForResult()); 146 ASSERT_EQ(0, callback64.WaitForResult());
144 scoped_refptr<IOBufferWithSize> write_buffer = CreateTestDataBuffer(); 147 scoped_refptr<IOBufferWithSize> write_buffer = CreateTestDataBuffer();
145 rv = write_stream->Write(write_buffer.get(), kTestDataSize, 148 rv = write_stream->Write(write_buffer.get(), kTestDataSize,
146 callback.callback()); 149 callback.callback());
147 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); 150 ASSERT_EQ(kTestDataSize, callback.GetResult(rv));
148 write_stream.reset(); 151 write_stream.reset();
149 152
150 // Read into buffer and compare to make sure the handle worked fine. 153 // Read into buffer and compare to make sure the handle worked fine.
151 ASSERT_EQ(kTestDataSize, 154 ASSERT_EQ(kTestDataSize,
152 base::ReadFile(temp_file_path(), read_buffer->data(), 155 base::ReadFile(temp_file_path(), read_buffer->data(),
153 kTestDataSize)); 156 kTestDataSize));
154 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); 157 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize));
155 } 158 }
156 159
157 TEST_F(FileStreamTest, UseClosedStream) { 160 TEST_F(FileStreamTest, UseClosedStream) {
158 int rv = 0; 161 int rv = 0;
159 TestCompletionCallback callback; 162 TestCompletionCallback callback;
160 TestInt64CompletionCallback callback64; 163 TestInt64CompletionCallback callback64;
161 164
162 FileStream stream(base::MessageLoopProxy::current()); 165 FileStream stream(base::MessageLoopProxy::current());
163 166
164 EXPECT_FALSE(stream.IsOpen()); 167 EXPECT_FALSE(stream.IsOpen());
165 168
166 // Try seeking... 169 // Try seeking...
167 rv = stream.Seek(FROM_BEGIN, 5, callback64.callback()); 170 rv = stream.Seek(base::File::FROM_BEGIN, 5, callback64.callback());
168 EXPECT_EQ(ERR_UNEXPECTED, callback64.GetResult(rv)); 171 EXPECT_EQ(ERR_UNEXPECTED, callback64.GetResult(rv));
169 172
170 // Try reading... 173 // Try reading...
171 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(10); 174 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(10);
172 rv = stream.Read(buf, buf->size(), callback.callback()); 175 rv = stream.Read(buf, buf->size(), callback.callback());
173 EXPECT_EQ(ERR_UNEXPECTED, callback.GetResult(rv)); 176 EXPECT_EQ(ERR_UNEXPECTED, callback.GetResult(rv));
174 } 177 }
175 178
176 TEST_F(FileStreamTest, AsyncRead) { 179 TEST_F(FileStreamTest, Read) {
177 int64 file_size; 180 int64 file_size;
178 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 181 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
179 182
180 FileStream stream(base::MessageLoopProxy::current()); 183 FileStream stream(base::MessageLoopProxy::current());
181 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | 184 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
182 base::File::FLAG_ASYNC; 185 base::File::FLAG_ASYNC;
183 TestCompletionCallback callback; 186 TestCompletionCallback callback;
184 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 187 int rv = stream.Open(temp_file_path(), flags, callback.callback());
185 EXPECT_EQ(ERR_IO_PENDING, rv); 188 EXPECT_EQ(OK, callback.GetResult(rv));
186 EXPECT_EQ(OK, callback.WaitForResult());
187 189
188 int total_bytes_read = 0; 190 int total_bytes_read = 0;
189 191
190 std::string data_read; 192 std::string data_read;
191 for (;;) { 193 for (;;) {
192 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); 194 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4);
193 rv = stream.Read(buf.get(), buf->size(), callback.callback()); 195 rv = stream.Read(buf.get(), buf->size(), callback.callback());
194 if (rv == ERR_IO_PENDING) 196 rv = callback.GetResult(rv);
195 rv = callback.WaitForResult();
196 EXPECT_LE(0, rv); 197 EXPECT_LE(0, rv);
197 if (rv <= 0) 198 if (rv <= 0)
198 break; 199 break;
199 total_bytes_read += rv; 200 total_bytes_read += rv;
200 data_read.append(buf->data(), rv); 201 data_read.append(buf->data(), rv);
201 } 202 }
202 EXPECT_EQ(file_size, total_bytes_read); 203 EXPECT_EQ(file_size, total_bytes_read);
203 EXPECT_EQ(kTestData, data_read); 204 EXPECT_EQ(kTestData, data_read);
204 } 205 }
205 206
206 TEST_F(FileStreamTest, AsyncRead_EarlyDelete) { 207 TEST_F(FileStreamTest, Read_EarlyDelete) {
207 int64 file_size; 208 int64 file_size;
208 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 209 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
209 210
210 scoped_ptr<FileStream> stream( 211 scoped_ptr<FileStream> stream(
211 new FileStream(base::MessageLoopProxy::current())); 212 new FileStream(base::MessageLoopProxy::current()));
212 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | 213 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
213 base::File::FLAG_ASYNC; 214 base::File::FLAG_ASYNC;
214 TestCompletionCallback callback; 215 TestCompletionCallback callback;
215 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 216 int rv = stream->Open(temp_file_path(), flags, callback.callback());
216 EXPECT_EQ(ERR_IO_PENDING, rv); 217 EXPECT_EQ(ERR_IO_PENDING, rv);
217 EXPECT_EQ(OK, callback.WaitForResult()); 218 EXPECT_EQ(OK, callback.WaitForResult());
218 219
219 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); 220 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4);
220 rv = stream->Read(buf.get(), buf->size(), callback.callback()); 221 rv = stream->Read(buf.get(), buf->size(), callback.callback());
221 stream.reset(); // Delete instead of closing it. 222 stream.reset(); // Delete instead of closing it.
222 if (rv < 0) { 223 if (rv < 0) {
223 EXPECT_EQ(ERR_IO_PENDING, rv); 224 EXPECT_EQ(ERR_IO_PENDING, rv);
224 // The callback should not be called if the request is cancelled. 225 // The callback should not be called if the request is cancelled.
225 base::RunLoop().RunUntilIdle(); 226 base::RunLoop().RunUntilIdle();
226 EXPECT_FALSE(callback.have_result()); 227 EXPECT_FALSE(callback.have_result());
227 } else { 228 } else {
228 EXPECT_EQ(std::string(kTestData, rv), std::string(buf->data(), rv)); 229 EXPECT_EQ(std::string(kTestData, rv), std::string(buf->data(), rv));
229 } 230 }
230 } 231 }
231 232
232 TEST_F(FileStreamTest, AsyncRead_FromOffset) { 233 TEST_F(FileStreamTest, Read_FromOffset) {
233 int64 file_size; 234 int64 file_size;
234 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 235 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
235 236
236 FileStream stream(base::MessageLoopProxy::current()); 237 FileStream stream(base::MessageLoopProxy::current());
237 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | 238 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
238 base::File::FLAG_ASYNC; 239 base::File::FLAG_ASYNC;
239 TestCompletionCallback callback; 240 TestCompletionCallback callback;
240 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 241 int rv = stream.Open(temp_file_path(), flags, callback.callback());
241 EXPECT_EQ(ERR_IO_PENDING, rv); 242 EXPECT_EQ(ERR_IO_PENDING, rv);
242 EXPECT_EQ(OK, callback.WaitForResult()); 243 EXPECT_EQ(OK, callback.WaitForResult());
243 244
244 TestInt64CompletionCallback callback64; 245 TestInt64CompletionCallback callback64;
245 const int64 kOffset = 3; 246 const int64 kOffset = 3;
246 rv = stream.Seek(FROM_BEGIN, kOffset, callback64.callback()); 247 rv = stream.Seek(base::File::FROM_BEGIN, kOffset, callback64.callback());
247 ASSERT_EQ(ERR_IO_PENDING, rv); 248 ASSERT_EQ(ERR_IO_PENDING, rv);
248 int64 new_offset = callback64.WaitForResult(); 249 int64 new_offset = callback64.WaitForResult();
249 EXPECT_EQ(kOffset, new_offset); 250 EXPECT_EQ(kOffset, new_offset);
250 251
251 int total_bytes_read = 0; 252 int total_bytes_read = 0;
252 253
253 std::string data_read; 254 std::string data_read;
254 for (;;) { 255 for (;;) {
255 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); 256 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4);
256 rv = stream.Read(buf.get(), buf->size(), callback.callback()); 257 rv = stream.Read(buf.get(), buf->size(), callback.callback());
257 if (rv == ERR_IO_PENDING) 258 if (rv == ERR_IO_PENDING)
258 rv = callback.WaitForResult(); 259 rv = callback.WaitForResult();
259 EXPECT_LE(0, rv); 260 EXPECT_LE(0, rv);
260 if (rv <= 0) 261 if (rv <= 0)
261 break; 262 break;
262 total_bytes_read += rv; 263 total_bytes_read += rv;
263 data_read.append(buf->data(), rv); 264 data_read.append(buf->data(), rv);
264 } 265 }
265 EXPECT_EQ(file_size - kOffset, total_bytes_read); 266 EXPECT_EQ(file_size - kOffset, total_bytes_read);
266 EXPECT_EQ(kTestData + kOffset, data_read); 267 EXPECT_EQ(kTestData + kOffset, data_read);
267 } 268 }
268 269
269 TEST_F(FileStreamTest, AsyncSeekAround) { 270 TEST_F(FileStreamTest, SeekAround) {
270 FileStream stream(base::MessageLoopProxy::current()); 271 FileStream stream(base::MessageLoopProxy::current());
271 int flags = base::File::FLAG_OPEN | base::File::FLAG_ASYNC | 272 int flags = base::File::FLAG_OPEN | base::File::FLAG_ASYNC |
272 base::File::FLAG_READ; 273 base::File::FLAG_READ;
273 TestCompletionCallback callback; 274 TestCompletionCallback callback;
274 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 275 int rv = stream.Open(temp_file_path(), flags, callback.callback());
275 EXPECT_EQ(ERR_IO_PENDING, rv); 276 EXPECT_EQ(ERR_IO_PENDING, rv);
276 EXPECT_EQ(OK, callback.WaitForResult()); 277 EXPECT_EQ(OK, callback.WaitForResult());
277 278
278 TestInt64CompletionCallback callback64; 279 TestInt64CompletionCallback callback64;
279 280
280 const int64 kOffset = 3; 281 const int64 kOffset = 3;
281 rv = stream.Seek(FROM_BEGIN, kOffset, callback64.callback()); 282 rv = stream.Seek(base::File::FROM_BEGIN, kOffset, callback64.callback());
282 ASSERT_EQ(ERR_IO_PENDING, rv); 283 ASSERT_EQ(ERR_IO_PENDING, rv);
283 int64 new_offset = callback64.WaitForResult(); 284 int64 new_offset = callback64.WaitForResult();
284 EXPECT_EQ(kOffset, new_offset); 285 EXPECT_EQ(kOffset, new_offset);
285 286
286 rv = stream.Seek(FROM_CURRENT, kOffset, callback64.callback()); 287 rv = stream.Seek(base::File::FROM_CURRENT, kOffset, callback64.callback());
287 ASSERT_EQ(ERR_IO_PENDING, rv); 288 ASSERT_EQ(ERR_IO_PENDING, rv);
288 new_offset = callback64.WaitForResult(); 289 new_offset = callback64.WaitForResult();
289 EXPECT_EQ(2 * kOffset, new_offset); 290 EXPECT_EQ(2 * kOffset, new_offset);
290 291
291 rv = stream.Seek(FROM_CURRENT, -kOffset, callback64.callback()); 292 rv = stream.Seek(base::File::FROM_CURRENT, -kOffset, callback64.callback());
292 ASSERT_EQ(ERR_IO_PENDING, rv); 293 ASSERT_EQ(ERR_IO_PENDING, rv);
293 new_offset = callback64.WaitForResult(); 294 new_offset = callback64.WaitForResult();
294 EXPECT_EQ(kOffset, new_offset); 295 EXPECT_EQ(kOffset, new_offset);
295 296
296 const int kTestDataLen = arraysize(kTestData) - 1; 297 const int kTestDataLen = arraysize(kTestData) - 1;
297 298
298 rv = stream.Seek(FROM_END, -kTestDataLen, callback64.callback()); 299 rv = stream.Seek(base::File::FROM_END, -kTestDataLen, callback64.callback());
299 ASSERT_EQ(ERR_IO_PENDING, rv); 300 ASSERT_EQ(ERR_IO_PENDING, rv);
300 new_offset = callback64.WaitForResult(); 301 new_offset = callback64.WaitForResult();
301 EXPECT_EQ(0, new_offset); 302 EXPECT_EQ(0, new_offset);
302 } 303 }
303 304
304 TEST_F(FileStreamTest, AsyncWrite) { 305 TEST_F(FileStreamTest, Write) {
305 FileStream stream(base::MessageLoopProxy::current()); 306 FileStream stream(base::MessageLoopProxy::current());
306 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | 307 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
307 base::File::FLAG_ASYNC; 308 base::File::FLAG_ASYNC;
308 TestCompletionCallback callback; 309 TestCompletionCallback callback;
309 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 310 int rv = stream.Open(temp_file_path(), flags, callback.callback());
310 EXPECT_EQ(ERR_IO_PENDING, rv); 311 EXPECT_EQ(OK, callback.GetResult(rv));
311 EXPECT_EQ(OK, callback.WaitForResult());
312 312
313 int64 file_size; 313 int64 file_size;
314 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 314 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
315 EXPECT_EQ(0, file_size); 315 EXPECT_EQ(0, file_size);
316 316
317 int total_bytes_written = 0; 317 scoped_refptr<IOBuffer> buf = CreateTestDataBuffer();
318 rv = stream.Write(buf.get(), kTestDataSize, callback.callback());
319 rv = callback.GetResult(rv);
320 EXPECT_EQ(kTestDataSize, rv);
318 321
319 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
320 scoped_refptr<DrainableIOBuffer> drainable =
321 new DrainableIOBuffer(buf.get(), buf->size());
322 while (total_bytes_written != kTestDataSize) {
323 rv = stream.Write(drainable.get(), drainable->BytesRemaining(),
324 callback.callback());
325 if (rv == ERR_IO_PENDING)
326 rv = callback.WaitForResult();
327 EXPECT_LT(0, rv);
328 if (rv <= 0)
329 break;
330 drainable->DidConsume(rv);
331 total_bytes_written += rv;
332 }
333 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 322 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
334 EXPECT_EQ(file_size, total_bytes_written); 323 EXPECT_EQ(kTestDataSize, file_size);
324
325 std::string data_read;
326 EXPECT_TRUE(base::ReadFileToString(temp_file_path(), &data_read));
327 EXPECT_EQ(kTestData, data_read);
335 } 328 }
336 329
337 TEST_F(FileStreamTest, AsyncWrite_EarlyDelete) { 330 TEST_F(FileStreamTest, Write_EarlyDelete) {
338 scoped_ptr<FileStream> stream( 331 scoped_ptr<FileStream> stream(
339 new FileStream(base::MessageLoopProxy::current())); 332 new FileStream(base::MessageLoopProxy::current()));
340 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | 333 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
341 base::File::FLAG_ASYNC; 334 base::File::FLAG_ASYNC;
342 TestCompletionCallback callback; 335 TestCompletionCallback callback;
343 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 336 int rv = stream->Open(temp_file_path(), flags, callback.callback());
344 EXPECT_EQ(ERR_IO_PENDING, rv); 337 EXPECT_EQ(ERR_IO_PENDING, rv);
345 EXPECT_EQ(OK, callback.WaitForResult()); 338 EXPECT_EQ(OK, callback.WaitForResult());
346 339
347 int64 file_size; 340 int64 file_size;
348 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 341 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
349 EXPECT_EQ(0, file_size); 342 EXPECT_EQ(0, file_size);
350 343
351 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 344 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
352 rv = stream->Write(buf.get(), buf->size(), callback.callback()); 345 rv = stream->Write(buf.get(), buf->size(), callback.callback());
353 stream.reset(); 346 stream.reset();
354 if (rv < 0) { 347 if (rv < 0) {
355 EXPECT_EQ(ERR_IO_PENDING, rv); 348 EXPECT_EQ(ERR_IO_PENDING, rv);
356 // The callback should not be called if the request is cancelled. 349 // The callback should not be called if the request is cancelled.
357 base::RunLoop().RunUntilIdle(); 350 base::RunLoop().RunUntilIdle();
358 EXPECT_FALSE(callback.have_result()); 351 EXPECT_FALSE(callback.have_result());
359 } else { 352 } else {
360 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 353 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
361 EXPECT_EQ(file_size, rv); 354 EXPECT_EQ(file_size, rv);
362 } 355 }
363 } 356 }
364 357
365 TEST_F(FileStreamTest, AsyncWrite_FromOffset) { 358 TEST_F(FileStreamTest, Write_FromOffset) {
366 int64 file_size; 359 int64 file_size;
367 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 360 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
368 361
369 FileStream stream(base::MessageLoopProxy::current()); 362 FileStream stream(base::MessageLoopProxy::current());
370 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE | 363 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE |
371 base::File::FLAG_ASYNC; 364 base::File::FLAG_ASYNC;
372 TestCompletionCallback callback; 365 TestCompletionCallback callback;
373 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 366 int rv = stream.Open(temp_file_path(), flags, callback.callback());
374 EXPECT_EQ(ERR_IO_PENDING, rv); 367 EXPECT_EQ(ERR_IO_PENDING, rv);
375 EXPECT_EQ(OK, callback.WaitForResult()); 368 EXPECT_EQ(OK, callback.WaitForResult());
376 369
377 TestInt64CompletionCallback callback64; 370 TestInt64CompletionCallback callback64;
378 const int64 kOffset = 0; 371 const int64 kOffset = 0;
379 rv = stream.Seek(FROM_END, kOffset, callback64.callback()); 372 rv = stream.Seek(base::File::FROM_END, kOffset, callback64.callback());
380 ASSERT_EQ(ERR_IO_PENDING, rv); 373 ASSERT_EQ(ERR_IO_PENDING, rv);
381 int64 new_offset = callback64.WaitForResult(); 374 int64 new_offset = callback64.WaitForResult();
382 EXPECT_EQ(kTestDataSize, new_offset); 375 EXPECT_EQ(kTestDataSize, new_offset);
383 376
384 int total_bytes_written = 0; 377 int total_bytes_written = 0;
385 378
386 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 379 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
387 scoped_refptr<DrainableIOBuffer> drainable = 380 scoped_refptr<DrainableIOBuffer> drainable =
388 new DrainableIOBuffer(buf.get(), buf->size()); 381 new DrainableIOBuffer(buf.get(), buf->size());
389 while (total_bytes_written != kTestDataSize) { 382 while (total_bytes_written != kTestDataSize) {
390 rv = stream.Write(drainable.get(), drainable->BytesRemaining(), 383 rv = stream.Write(drainable.get(), drainable->BytesRemaining(),
391 callback.callback()); 384 callback.callback());
392 if (rv == ERR_IO_PENDING) 385 if (rv == ERR_IO_PENDING)
393 rv = callback.WaitForResult(); 386 rv = callback.WaitForResult();
394 EXPECT_LT(0, rv); 387 EXPECT_LT(0, rv);
395 if (rv <= 0) 388 if (rv <= 0)
396 break; 389 break;
397 drainable->DidConsume(rv); 390 drainable->DidConsume(rv);
398 total_bytes_written += rv; 391 total_bytes_written += rv;
399 } 392 }
400 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 393 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
401 EXPECT_EQ(file_size, kTestDataSize * 2); 394 EXPECT_EQ(file_size, kTestDataSize * 2);
402 } 395 }
403 396
404 TEST_F(FileStreamTest, BasicAsyncReadWrite) { 397 TEST_F(FileStreamTest, BasicReadWrite) {
405 int64 file_size; 398 int64 file_size;
406 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 399 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
407 400
408 scoped_ptr<FileStream> stream( 401 scoped_ptr<FileStream> stream(
409 new FileStream(base::MessageLoopProxy::current())); 402 new FileStream(base::MessageLoopProxy::current()));
410 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | 403 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
411 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; 404 base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
412 TestCompletionCallback callback; 405 TestCompletionCallback callback;
413 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 406 int rv = stream->Open(temp_file_path(), flags, callback.callback());
414 EXPECT_EQ(ERR_IO_PENDING, rv); 407 EXPECT_EQ(ERR_IO_PENDING, rv);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 drainable->DidConsume(rv); 440 drainable->DidConsume(rv);
448 total_bytes_written += rv; 441 total_bytes_written += rv;
449 } 442 }
450 443
451 stream.reset(); 444 stream.reset();
452 445
453 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 446 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
454 EXPECT_EQ(kTestDataSize * 2, file_size); 447 EXPECT_EQ(kTestDataSize * 2, file_size);
455 } 448 }
456 449
457 TEST_F(FileStreamTest, BasicAsyncWriteRead) { 450 TEST_F(FileStreamTest, BasicWriteRead) {
458 int64 file_size; 451 int64 file_size;
459 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 452 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
460 453
461 scoped_ptr<FileStream> stream( 454 scoped_ptr<FileStream> stream(
462 new FileStream(base::MessageLoopProxy::current())); 455 new FileStream(base::MessageLoopProxy::current()));
463 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | 456 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
464 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; 457 base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
465 TestCompletionCallback callback; 458 TestCompletionCallback callback;
466 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 459 int rv = stream->Open(temp_file_path(), flags, callback.callback());
467 EXPECT_EQ(ERR_IO_PENDING, rv); 460 EXPECT_EQ(ERR_IO_PENDING, rv);
468 EXPECT_EQ(OK, callback.WaitForResult()); 461 EXPECT_EQ(OK, callback.WaitForResult());
469 462
470 TestInt64CompletionCallback callback64; 463 TestInt64CompletionCallback callback64;
471 rv = stream->Seek(FROM_END, 0, callback64.callback()); 464 rv = stream->Seek(base::File::FROM_END, 0, callback64.callback());
472 ASSERT_EQ(ERR_IO_PENDING, rv); 465 ASSERT_EQ(ERR_IO_PENDING, rv);
473 int64 offset = callback64.WaitForResult(); 466 int64 offset = callback64.WaitForResult();
474 EXPECT_EQ(offset, file_size); 467 EXPECT_EQ(offset, file_size);
475 468
476 int total_bytes_written = 0; 469 int total_bytes_written = 0;
477 470
478 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 471 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
479 scoped_refptr<DrainableIOBuffer> drainable = 472 scoped_refptr<DrainableIOBuffer> drainable =
480 new DrainableIOBuffer(buf.get(), buf->size()); 473 new DrainableIOBuffer(buf.get(), buf->size());
481 while (total_bytes_written != kTestDataSize) { 474 while (total_bytes_written != kTestDataSize) {
482 rv = stream->Write(drainable.get(), drainable->BytesRemaining(), 475 rv = stream->Write(drainable.get(), drainable->BytesRemaining(),
483 callback.callback()); 476 callback.callback());
484 if (rv == ERR_IO_PENDING) 477 if (rv == ERR_IO_PENDING)
485 rv = callback.WaitForResult(); 478 rv = callback.WaitForResult();
486 EXPECT_LT(0, rv); 479 EXPECT_LT(0, rv);
487 if (rv <= 0) 480 if (rv <= 0)
488 break; 481 break;
489 drainable->DidConsume(rv); 482 drainable->DidConsume(rv);
490 total_bytes_written += rv; 483 total_bytes_written += rv;
491 } 484 }
492 485
493 EXPECT_EQ(kTestDataSize, total_bytes_written); 486 EXPECT_EQ(kTestDataSize, total_bytes_written);
494 487
495 rv = stream->Seek(FROM_BEGIN, 0, callback64.callback()); 488 rv = stream->Seek(base::File::FROM_BEGIN, 0, callback64.callback());
496 ASSERT_EQ(ERR_IO_PENDING, rv); 489 ASSERT_EQ(ERR_IO_PENDING, rv);
497 offset = callback64.WaitForResult(); 490 offset = callback64.WaitForResult();
498 EXPECT_EQ(0, offset); 491 EXPECT_EQ(0, offset);
499 492
500 int total_bytes_read = 0; 493 int total_bytes_read = 0;
501 494
502 std::string data_read; 495 std::string data_read;
503 for (;;) { 496 for (;;) {
504 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); 497 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4);
505 rv = stream->Read(buf.get(), buf->size(), callback.callback()); 498 rv = stream->Read(buf.get(), buf->size(), callback.callback());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 drainable_.get(), drainable_->BytesRemaining(), callback.callback()); 563 drainable_.get(), drainable_->BytesRemaining(), callback.callback());
571 DCHECK_EQ(ERR_IO_PENDING, rv); 564 DCHECK_EQ(ERR_IO_PENDING, rv);
572 rv = callback.WaitForResult(); 565 rv = callback.WaitForResult();
573 drainable_->DidConsume(total_bytes_written); 566 drainable_->DidConsume(total_bytes_written);
574 *total_bytes_written_ += total_bytes_written; 567 *total_bytes_written_ += total_bytes_written;
575 *total_bytes_read_ += total_bytes_read; 568 *total_bytes_read_ += total_bytes_read;
576 *data_read_ += data_read; 569 *data_read_ += data_read;
577 } else { // We're done writing all data. Start reading the data. 570 } else { // We're done writing all data. Start reading the data.
578 TestInt64CompletionCallback callback64; 571 TestInt64CompletionCallback callback64;
579 EXPECT_EQ(ERR_IO_PENDING, 572 EXPECT_EQ(ERR_IO_PENDING,
580 stream_->Seek(FROM_BEGIN, 0, callback64.callback())); 573 stream_->Seek(base::File::FROM_BEGIN, 0,
574 callback64.callback()));
581 { 575 {
582 base::MessageLoop::ScopedNestableTaskAllower allow( 576 base::MessageLoop::ScopedNestableTaskAllower allow(
583 base::MessageLoop::current()); 577 base::MessageLoop::current());
584 EXPECT_LE(0, callback64.WaitForResult()); 578 EXPECT_LE(0, callback64.WaitForResult());
585 } 579 }
586 580
587 TestCompletionCallback callback; 581 TestCompletionCallback callback;
588 for (;;) { 582 for (;;) {
589 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); 583 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4);
590 rv = stream_->Read(buf.get(), buf->size(), callback.callback()); 584 rv = stream_->Read(buf.get(), buf->size(), callback.callback());
(...skipping 23 matching lines...) Expand all
614 int* total_bytes_written_; 608 int* total_bytes_written_;
615 int* total_bytes_read_; 609 int* total_bytes_read_;
616 std::string* data_read_; 610 std::string* data_read_;
617 const CompletionCallback callback_; 611 const CompletionCallback callback_;
618 scoped_refptr<IOBufferWithSize> test_data_; 612 scoped_refptr<IOBufferWithSize> test_data_;
619 scoped_refptr<DrainableIOBuffer> drainable_; 613 scoped_refptr<DrainableIOBuffer> drainable_;
620 614
621 DISALLOW_COPY_AND_ASSIGN(TestWriteReadCompletionCallback); 615 DISALLOW_COPY_AND_ASSIGN(TestWriteReadCompletionCallback);
622 }; 616 };
623 617
624 TEST_F(FileStreamTest, AsyncWriteRead) { 618 TEST_F(FileStreamTest, WriteRead) {
625 int64 file_size; 619 int64 file_size;
626 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 620 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
627 621
628 scoped_ptr<FileStream> stream( 622 scoped_ptr<FileStream> stream(
629 new FileStream(base::MessageLoopProxy::current())); 623 new FileStream(base::MessageLoopProxy::current()));
630 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | 624 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
631 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; 625 base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
632 TestCompletionCallback open_callback; 626 TestCompletionCallback open_callback;
633 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); 627 int rv = stream->Open(temp_file_path(), flags, open_callback.callback());
634 EXPECT_EQ(ERR_IO_PENDING, rv); 628 EXPECT_EQ(ERR_IO_PENDING, rv);
635 EXPECT_EQ(OK, open_callback.WaitForResult()); 629 EXPECT_EQ(OK, open_callback.WaitForResult());
636 630
637 TestInt64CompletionCallback callback64; 631 TestInt64CompletionCallback callback64;
638 EXPECT_EQ(ERR_IO_PENDING, stream->Seek(FROM_END, 0, callback64.callback())); 632 EXPECT_EQ(ERR_IO_PENDING,
633 stream->Seek(base::File::FROM_END, 0, callback64.callback()));
639 EXPECT_EQ(file_size, callback64.WaitForResult()); 634 EXPECT_EQ(file_size, callback64.WaitForResult());
640 635
641 int total_bytes_written = 0; 636 int total_bytes_written = 0;
642 int total_bytes_read = 0; 637 int total_bytes_read = 0;
643 std::string data_read; 638 std::string data_read;
644 TestWriteReadCompletionCallback callback(stream.get(), &total_bytes_written, 639 TestWriteReadCompletionCallback callback(stream.get(), &total_bytes_written,
645 &total_bytes_read, &data_read); 640 &total_bytes_read, &data_read);
646 641
647 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 642 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
648 rv = stream->Write(buf.get(), buf->size(), callback.callback()); 643 rv = stream->Write(buf.get(), buf->size(), callback.callback());
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 bool waiting_for_result_; 713 bool waiting_for_result_;
719 FileStream* stream_; 714 FileStream* stream_;
720 int* total_bytes_written_; 715 int* total_bytes_written_;
721 const CompletionCallback callback_; 716 const CompletionCallback callback_;
722 scoped_refptr<IOBufferWithSize> test_data_; 717 scoped_refptr<IOBufferWithSize> test_data_;
723 scoped_refptr<DrainableIOBuffer> drainable_; 718 scoped_refptr<DrainableIOBuffer> drainable_;
724 719
725 DISALLOW_COPY_AND_ASSIGN(TestWriteCloseCompletionCallback); 720 DISALLOW_COPY_AND_ASSIGN(TestWriteCloseCompletionCallback);
726 }; 721 };
727 722
728 TEST_F(FileStreamTest, AsyncWriteClose) { 723 TEST_F(FileStreamTest, WriteClose) {
729 int64 file_size; 724 int64 file_size;
730 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 725 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
731 726
732 scoped_ptr<FileStream> stream( 727 scoped_ptr<FileStream> stream(
733 new FileStream(base::MessageLoopProxy::current())); 728 new FileStream(base::MessageLoopProxy::current()));
734 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | 729 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
735 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; 730 base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
736 TestCompletionCallback open_callback; 731 TestCompletionCallback open_callback;
737 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); 732 int rv = stream->Open(temp_file_path(), flags, open_callback.callback());
738 EXPECT_EQ(ERR_IO_PENDING, rv); 733 EXPECT_EQ(ERR_IO_PENDING, rv);
739 EXPECT_EQ(OK, open_callback.WaitForResult()); 734 EXPECT_EQ(OK, open_callback.WaitForResult());
740 735
741 TestInt64CompletionCallback callback64; 736 TestInt64CompletionCallback callback64;
742 EXPECT_EQ(ERR_IO_PENDING, stream->Seek(FROM_END, 0, callback64.callback())); 737 EXPECT_EQ(ERR_IO_PENDING,
738 stream->Seek(base::File::FROM_END, 0, callback64.callback()));
743 EXPECT_EQ(file_size, callback64.WaitForResult()); 739 EXPECT_EQ(file_size, callback64.WaitForResult());
744 740
745 int total_bytes_written = 0; 741 int total_bytes_written = 0;
746 TestWriteCloseCompletionCallback callback(stream.get(), &total_bytes_written); 742 TestWriteCloseCompletionCallback callback(stream.get(), &total_bytes_written);
747 743
748 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 744 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
749 rv = stream->Write(buf.get(), buf->size(), callback.callback()); 745 rv = stream->Write(buf.get(), buf->size(), callback.callback());
750 if (rv == ERR_IO_PENDING) 746 if (rv == ERR_IO_PENDING)
751 total_bytes_written = callback.WaitForResult(); 747 total_bytes_written = callback.WaitForResult();
752 EXPECT_LT(0, total_bytes_written); 748 EXPECT_LT(0, total_bytes_written);
753 EXPECT_EQ(kTestDataSize, total_bytes_written); 749 EXPECT_EQ(kTestDataSize, total_bytes_written);
754 750
755 stream.reset(); 751 stream.reset();
756 752
757 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); 753 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
758 EXPECT_EQ(kTestDataSize * 2, file_size); 754 EXPECT_EQ(kTestDataSize * 2, file_size);
759 } 755 }
760 756
761 TEST_F(FileStreamTest, AsyncOpenAndDelete) { 757 TEST_F(FileStreamTest, OpenAndDelete) {
762 scoped_refptr<base::SequencedWorkerPool> pool( 758 scoped_refptr<base::SequencedWorkerPool> pool(
763 new base::SequencedWorkerPool(1, "StreamTest")); 759 new base::SequencedWorkerPool(1, "StreamTest"));
764 760
765 bool prev = base::ThreadRestrictions::SetIOAllowed(false); 761 bool prev = base::ThreadRestrictions::SetIOAllowed(false);
766 scoped_ptr<FileStream> stream(new FileStream(pool.get())); 762 scoped_ptr<FileStream> stream(new FileStream(pool.get()));
767 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE | 763 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE |
768 base::File::FLAG_ASYNC; 764 base::File::FLAG_ASYNC;
769 TestCompletionCallback open_callback; 765 TestCompletionCallback open_callback;
770 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); 766 int rv = stream->Open(temp_file_path(), flags, open_callback.callback());
771 EXPECT_EQ(ERR_IO_PENDING, rv); 767 EXPECT_EQ(ERR_IO_PENDING, rv);
(...skipping 10 matching lines...) Expand all
782 stream2.reset(); 778 stream2.reset();
783 779
784 pool->Shutdown(); 780 pool->Shutdown();
785 781
786 // open_callback won't be called. 782 // open_callback won't be called.
787 base::RunLoop().RunUntilIdle(); 783 base::RunLoop().RunUntilIdle();
788 EXPECT_FALSE(open_callback.have_result()); 784 EXPECT_FALSE(open_callback.have_result());
789 base::ThreadRestrictions::SetIOAllowed(prev); 785 base::ThreadRestrictions::SetIOAllowed(prev);
790 } 786 }
791 787
792 // Verify that async Write() errors are mapped correctly. 788 // Verify that Write() errors are mapped correctly.
793 TEST_F(FileStreamTest, AsyncWriteError) { 789 TEST_F(FileStreamTest, WriteError) {
794 // Try opening file as read-only and then writing to it using FileStream. 790 // Try opening file as read-only and then writing to it using FileStream.
795 uint32 flags = base::File::FLAG_OPEN | base::File::FLAG_READ | 791 uint32 flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
796 base::File::FLAG_ASYNC; 792 base::File::FLAG_ASYNC;
797 793
798 base::File file(temp_file_path(), flags); 794 base::File file(temp_file_path(), flags);
799 ASSERT_TRUE(file.IsValid()); 795 ASSERT_TRUE(file.IsValid());
800 796
801 scoped_ptr<FileStream> stream( 797 scoped_ptr<FileStream> stream(
802 new FileStream(file.Pass(), base::MessageLoopProxy::current())); 798 new FileStream(file.Pass(), base::MessageLoopProxy::current()));
803 799
804 scoped_refptr<IOBuffer> buf = new IOBuffer(1); 800 scoped_refptr<IOBuffer> buf = new IOBuffer(1);
805 buf->data()[0] = 0; 801 buf->data()[0] = 0;
806 802
807 TestCompletionCallback callback; 803 TestCompletionCallback callback;
808 int rv = stream->Write(buf.get(), 1, callback.callback()); 804 int rv = stream->Write(buf.get(), 1, callback.callback());
809 if (rv == ERR_IO_PENDING) 805 if (rv == ERR_IO_PENDING)
810 rv = callback.WaitForResult(); 806 rv = callback.WaitForResult();
811 EXPECT_LT(rv, 0); 807 EXPECT_LT(rv, 0);
812 808
813 stream.reset(); 809 stream.reset();
814 base::RunLoop().RunUntilIdle(); 810 base::RunLoop().RunUntilIdle();
815 } 811 }
816 812
817 // Verify that async Read() errors are mapped correctly. 813 // Verify that Read() errors are mapped correctly.
818 TEST_F(FileStreamTest, AsyncReadError) { 814 TEST_F(FileStreamTest, ReadError) {
819 // Try opening file for write and then reading from it using FileStream. 815 // Try opening file for write and then reading from it using FileStream.
820 uint32 flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE | 816 uint32 flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE |
821 base::File::FLAG_ASYNC; 817 base::File::FLAG_ASYNC;
822 818
823 base::File file(temp_file_path(), flags); 819 base::File file(temp_file_path(), flags);
824 ASSERT_TRUE(file.IsValid()); 820 ASSERT_TRUE(file.IsValid());
825 821
826 scoped_ptr<FileStream> stream( 822 scoped_ptr<FileStream> stream(
827 new FileStream(file.Pass(), base::MessageLoopProxy::current())); 823 new FileStream(file.Pass(), base::MessageLoopProxy::current()));
828 824
829 scoped_refptr<IOBuffer> buf = new IOBuffer(1); 825 scoped_refptr<IOBuffer> buf = new IOBuffer(1);
830 TestCompletionCallback callback; 826 TestCompletionCallback callback;
831 int rv = stream->Read(buf.get(), 1, callback.callback()); 827 int rv = stream->Read(buf.get(), 1, callback.callback());
832 if (rv == ERR_IO_PENDING) 828 if (rv == ERR_IO_PENDING)
833 rv = callback.WaitForResult(); 829 rv = callback.WaitForResult();
834 EXPECT_LT(rv, 0); 830 EXPECT_LT(rv, 0);
835 831
836 stream.reset(); 832 stream.reset();
837 base::RunLoop().RunUntilIdle(); 833 base::RunLoop().RunUntilIdle();
838 } 834 }
839 835
840 #if defined(OS_ANDROID) 836 #if defined(OS_ANDROID)
841 TEST_F(FileStreamTest, ContentUriAsyncRead) { 837 TEST_F(FileStreamTest, ContentUriRead) {
842 base::FilePath test_dir; 838 base::FilePath test_dir;
843 PathService::Get(base::DIR_SOURCE_ROOT, &test_dir); 839 PathService::Get(base::DIR_SOURCE_ROOT, &test_dir);
844 test_dir = test_dir.AppendASCII("net"); 840 test_dir = test_dir.AppendASCII("net");
845 test_dir = test_dir.AppendASCII("data"); 841 test_dir = test_dir.AppendASCII("data");
846 test_dir = test_dir.AppendASCII("file_stream_unittest"); 842 test_dir = test_dir.AppendASCII("file_stream_unittest");
847 ASSERT_TRUE(base::PathExists(test_dir)); 843 ASSERT_TRUE(base::PathExists(test_dir));
848 base::FilePath image_file = test_dir.Append(FILE_PATH_LITERAL("red.png")); 844 base::FilePath image_file = test_dir.Append(FILE_PATH_LITERAL("red.png"));
849 845
850 // Insert the image into MediaStore. MediaStore will do some conversions, and 846 // Insert the image into MediaStore. MediaStore will do some conversions, and
851 // return the content URI. 847 // return the content URI.
(...skipping 26 matching lines...) Expand all
878 total_bytes_read += rv; 874 total_bytes_read += rv;
879 data_read.append(buf->data(), rv); 875 data_read.append(buf->data(), rv);
880 } 876 }
881 EXPECT_EQ(file_size, total_bytes_read); 877 EXPECT_EQ(file_size, total_bytes_read);
882 } 878 }
883 #endif 879 #endif
884 880
885 } // namespace 881 } // namespace
886 882
887 } // namespace net 883 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698