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

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

Issue 189393002: net: Update FileStream to use base::File instead of PlatformFile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 9 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/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
11 #include "base/message_loop/message_loop_proxy.h" 12 #include "base/message_loop/message_loop_proxy.h"
12 #include "base/path_service.h" 13 #include "base/path_service.h"
13 #include "base/platform_file.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "base/synchronization/waitable_event.h" 15 #include "base/synchronization/waitable_event.h"
16 #include "base/test/test_timeouts.h" 16 #include "base/test/test_timeouts.h"
17 #include "net/base/capturing_net_log.h" 17 #include "net/base/capturing_net_log.h"
18 #include "net/base/io_buffer.h" 18 #include "net/base/io_buffer.h"
19 #include "net/base/net_errors.h" 19 #include "net/base/net_errors.h"
20 #include "net/base/test_completion_callback.h" 20 #include "net/base/test_completion_callback.h"
21 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
22 #include "testing/platform_test.h" 22 #include "testing/platform_test.h"
23 23
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 } 59 }
60 60
61 const base::FilePath temp_file_path() const { return temp_file_path_; } 61 const base::FilePath temp_file_path() const { return temp_file_path_; }
62 62
63 private: 63 private:
64 base::FilePath temp_file_path_; 64 base::FilePath temp_file_path_;
65 }; 65 };
66 66
67 namespace { 67 namespace {
68 68
69 TEST_F(FileStreamTest, BasicOpenClose) {
70 base::PlatformFile file = base::kInvalidPlatformFileValue;
71 {
72 FileStream stream(NULL, base::MessageLoopProxy::current());
73 int rv = stream.OpenSync(temp_file_path(),
74 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ);
75 EXPECT_EQ(OK, rv);
76 EXPECT_TRUE(stream.IsOpen());
77 file = stream.GetPlatformFileForTesting();
78 }
79 EXPECT_NE(base::kInvalidPlatformFileValue, file);
80 base::PlatformFileInfo info;
81 // The file should be closed.
82 EXPECT_FALSE(base::GetPlatformFileInfo(file, &info));
83 }
84
85 TEST_F(FileStreamTest, BasicOpenExplicitClose) { 69 TEST_F(FileStreamTest, BasicOpenExplicitClose) {
86 base::PlatformFile file = base::kInvalidPlatformFileValue;
87 FileStream stream(NULL); 70 FileStream stream(NULL);
88 int rv = stream.OpenSync(temp_file_path(), 71 int rv = stream.OpenSync(temp_file_path(),
89 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ); 72 base::File::FLAG_OPEN | base::File::FLAG_READ);
90 EXPECT_EQ(OK, rv); 73 EXPECT_EQ(OK, rv);
91 EXPECT_TRUE(stream.IsOpen()); 74 EXPECT_TRUE(stream.IsOpen());
92 file = stream.GetPlatformFileForTesting(); 75 EXPECT_TRUE(stream.GetFileForTesting().IsValid());
93 EXPECT_NE(base::kInvalidPlatformFileValue, file);
94 EXPECT_EQ(OK, stream.CloseSync()); 76 EXPECT_EQ(OK, stream.CloseSync());
95 EXPECT_FALSE(stream.IsOpen()); 77 EXPECT_FALSE(stream.IsOpen());
96 base::PlatformFileInfo info; 78 EXPECT_FALSE(stream.GetFileForTesting().IsValid());
97 // The file should be closed.
98 EXPECT_FALSE(base::GetPlatformFileInfo(file, &info));
99 } 79 }
100 80
101 TEST_F(FileStreamTest, AsyncOpenExplicitClose) { 81 TEST_F(FileStreamTest, AsyncOpenExplicitClose) {
102 base::PlatformFile file = base::kInvalidPlatformFileValue;
103 TestCompletionCallback callback; 82 TestCompletionCallback callback;
104 FileStream stream(NULL); 83 FileStream stream(NULL);
105 int flags = base::PLATFORM_FILE_OPEN | 84 int flags = base::File::FLAG_OPEN |
106 base::PLATFORM_FILE_READ | 85 base::File::FLAG_READ |
107 base::PLATFORM_FILE_ASYNC; 86 base::File::FLAG_ASYNC;
108 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 87 int rv = stream.Open(temp_file_path(), flags, callback.callback());
109 EXPECT_EQ(ERR_IO_PENDING, rv); 88 EXPECT_EQ(ERR_IO_PENDING, rv);
110 EXPECT_EQ(OK, callback.WaitForResult()); 89 EXPECT_EQ(OK, callback.WaitForResult());
111 EXPECT_TRUE(stream.IsOpen()); 90 EXPECT_TRUE(stream.IsOpen());
112 file = stream.GetPlatformFileForTesting(); 91 EXPECT_TRUE(stream.GetFileForTesting().IsValid());
113 EXPECT_EQ(ERR_IO_PENDING, stream.Close(callback.callback())); 92 EXPECT_EQ(ERR_IO_PENDING, stream.Close(callback.callback()));
114 EXPECT_EQ(OK, callback.WaitForResult()); 93 EXPECT_EQ(OK, callback.WaitForResult());
115 EXPECT_FALSE(stream.IsOpen()); 94 EXPECT_FALSE(stream.IsOpen());
116 base::PlatformFileInfo info; 95 EXPECT_FALSE(stream.GetFileForTesting().IsValid());
117 // The file should be closed.
118 EXPECT_FALSE(base::GetPlatformFileInfo(file, &info));
119 } 96 }
120 97
121 TEST_F(FileStreamTest, AsyncOpenExplicitCloseOrphaned) { 98 TEST_F(FileStreamTest, AsyncOpenExplicitCloseOrphaned) {
122 base::PlatformFile file = base::kInvalidPlatformFileValue;
123 TestCompletionCallback callback; 99 TestCompletionCallback callback;
124 base::PlatformFileInfo info;
125 scoped_ptr<FileStream> stream(new FileStream( 100 scoped_ptr<FileStream> stream(new FileStream(
126 NULL, base::MessageLoopProxy::current())); 101 NULL, base::MessageLoopProxy::current()));
127 int flags = base::PLATFORM_FILE_OPEN | 102 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
128 base::PLATFORM_FILE_READ | 103 base::File::FLAG_ASYNC;
129 base::PLATFORM_FILE_ASYNC;
130 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 104 int rv = stream->Open(temp_file_path(), flags, callback.callback());
131 EXPECT_EQ(ERR_IO_PENDING, rv); 105 EXPECT_EQ(ERR_IO_PENDING, rv);
132 EXPECT_EQ(OK, callback.WaitForResult()); 106 EXPECT_EQ(OK, callback.WaitForResult());
133 EXPECT_TRUE(stream->IsOpen()); 107 EXPECT_TRUE(stream->IsOpen());
134 file = stream->GetPlatformFileForTesting(); 108 EXPECT_TRUE(stream->GetFileForTesting().IsValid());
135 EXPECT_EQ(ERR_IO_PENDING, stream->Close(callback.callback())); 109 EXPECT_EQ(ERR_IO_PENDING, stream->Close(callback.callback()));
136 stream.reset(); 110 stream.reset();
137 // File isn't actually closed yet. 111 // File isn't actually closed yet.
138 EXPECT_TRUE(base::GetPlatformFileInfo(file, &info));
139 base::RunLoop runloop; 112 base::RunLoop runloop;
140 runloop.RunUntilIdle(); 113 runloop.RunUntilIdle();
141 // The file should now be closed, though the callback has not been called. 114 // The file should now be closed, though the callback has not been called.
142 EXPECT_FALSE(base::GetPlatformFileInfo(file, &info));
143 }
144
145 TEST_F(FileStreamTest, FileHandleNotLeftOpen) {
146 bool created = false;
147 ASSERT_EQ(kTestDataSize,
148 base::WriteFile(temp_file_path(), kTestData, kTestDataSize));
149 int flags = base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_READ;
150 base::PlatformFile file = base::CreatePlatformFile(
151 temp_file_path(), flags, &created, NULL);
152
153 {
154 // Seek to the beginning of the file and read.
155 FileStream read_stream(file, flags, NULL,
156 base::MessageLoopProxy::current());
157 EXPECT_TRUE(read_stream.IsOpen());
158 }
159
160 EXPECT_NE(base::kInvalidPlatformFileValue, file);
161 base::PlatformFileInfo info;
162 // The file should be closed.
163 EXPECT_FALSE(base::GetPlatformFileInfo(file, &info));
164 } 115 }
165 116
166 // Test the use of FileStream with a file handle provided at construction. 117 // Test the use of FileStream with a file handle provided at construction.
167 TEST_F(FileStreamTest, UseFileHandle) { 118 TEST_F(FileStreamTest, UseFileHandle) {
168 bool created = false;
169
170 // 1. Test reading with a file handle. 119 // 1. Test reading with a file handle.
171 ASSERT_EQ(kTestDataSize, 120 ASSERT_EQ(kTestDataSize,
172 base::WriteFile(temp_file_path(), kTestData, kTestDataSize)); 121 base::WriteFile(temp_file_path(), kTestData, kTestDataSize));
173 int flags = base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_READ; 122 int flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ;
174 base::PlatformFile file = base::CreatePlatformFile( 123 base::File file(temp_file_path(), flags);
175 temp_file_path(), flags, &created, NULL);
176 124
177 // Seek to the beginning of the file and read. 125 // Seek to the beginning of the file and read.
178 scoped_ptr<FileStream> read_stream( 126 scoped_ptr<FileStream> read_stream(
179 new FileStream(file, flags, NULL, base::MessageLoopProxy::current())); 127 new FileStream(file.Pass(), NULL, base::MessageLoopProxy::current()));
180 ASSERT_EQ(0, read_stream->SeekSync(FROM_BEGIN, 0)); 128 ASSERT_EQ(0, read_stream->SeekSync(FROM_BEGIN, 0));
181 ASSERT_EQ(kTestDataSize, read_stream->Available()); 129 ASSERT_EQ(kTestDataSize, read_stream->Available());
182 // Read into buffer and compare. 130 // Read into buffer and compare.
183 char buffer[kTestDataSize]; 131 char buffer[kTestDataSize];
184 ASSERT_EQ(kTestDataSize, 132 ASSERT_EQ(kTestDataSize,
185 read_stream->ReadSync(buffer, kTestDataSize)); 133 read_stream->ReadSync(buffer, kTestDataSize));
186 ASSERT_EQ(0, memcmp(kTestData, buffer, kTestDataSize)); 134 ASSERT_EQ(0, memcmp(kTestData, buffer, kTestDataSize));
187 read_stream.reset(); 135 read_stream.reset();
188 136
189 // 2. Test writing with a file handle. 137 // 2. Test writing with a file handle.
190 base::DeleteFile(temp_file_path(), false); 138 base::DeleteFile(temp_file_path(), false);
191 flags = base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_WRITE; 139 flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE;
192 file = base::CreatePlatformFile(temp_file_path(), flags, &created, NULL); 140 file.Initialize(temp_file_path(), flags);
193 141
194 scoped_ptr<FileStream> write_stream( 142 scoped_ptr<FileStream> write_stream(
195 new FileStream(file, flags, NULL, base::MessageLoopProxy::current())); 143 new FileStream(file.Pass(), NULL, base::MessageLoopProxy::current()));
196 ASSERT_EQ(0, write_stream->SeekSync(FROM_BEGIN, 0)); 144 ASSERT_EQ(0, write_stream->SeekSync(FROM_BEGIN, 0));
197 ASSERT_EQ(kTestDataSize, 145 ASSERT_EQ(kTestDataSize,
198 write_stream->WriteSync(kTestData, kTestDataSize)); 146 write_stream->WriteSync(kTestData, kTestDataSize));
199 write_stream.reset(); 147 write_stream.reset();
200 148
201 // Read into buffer and compare to make sure the handle worked fine. 149 // Read into buffer and compare to make sure the handle worked fine.
202 ASSERT_EQ(kTestDataSize, 150 ASSERT_EQ(kTestDataSize,
203 base::ReadFile(temp_file_path(), buffer, kTestDataSize)); 151 base::ReadFile(temp_file_path(), buffer, kTestDataSize));
204 ASSERT_EQ(0, memcmp(kTestData, buffer, kTestDataSize)); 152 ASSERT_EQ(0, memcmp(kTestData, buffer, kTestDataSize));
205 } 153 }
(...skipping 12 matching lines...) Expand all
218 EXPECT_EQ(ERR_UNEXPECTED, avail); 166 EXPECT_EQ(ERR_UNEXPECTED, avail);
219 167
220 // Try reading... 168 // Try reading...
221 char buf[10]; 169 char buf[10];
222 int rv = stream.ReadSync(buf, arraysize(buf)); 170 int rv = stream.ReadSync(buf, arraysize(buf));
223 EXPECT_EQ(ERR_UNEXPECTED, rv); 171 EXPECT_EQ(ERR_UNEXPECTED, rv);
224 } 172 }
225 173
226 TEST_F(FileStreamTest, BasicRead) { 174 TEST_F(FileStreamTest, BasicRead) {
227 int64 file_size; 175 int64 file_size;
228 bool ok = base::GetFileSize(temp_file_path(), &file_size); 176 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
229 EXPECT_TRUE(ok);
230 177
231 FileStream stream(NULL, base::MessageLoopProxy::current()); 178 FileStream stream(NULL, base::MessageLoopProxy::current());
232 int flags = base::PLATFORM_FILE_OPEN | 179 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ;
233 base::PLATFORM_FILE_READ;
234 int rv = stream.OpenSync(temp_file_path(), flags); 180 int rv = stream.OpenSync(temp_file_path(), flags);
235 EXPECT_EQ(OK, rv); 181 EXPECT_EQ(OK, rv);
236 182
237 int64 total_bytes_avail = stream.Available(); 183 int64 total_bytes_avail = stream.Available();
238 EXPECT_EQ(file_size, total_bytes_avail); 184 EXPECT_EQ(file_size, total_bytes_avail);
239 185
240 int total_bytes_read = 0; 186 int total_bytes_read = 0;
241 187
242 std::string data_read; 188 std::string data_read;
243 for (;;) { 189 for (;;) {
244 char buf[4]; 190 char buf[4];
245 rv = stream.ReadSync(buf, arraysize(buf)); 191 rv = stream.ReadSync(buf, arraysize(buf));
246 EXPECT_LE(0, rv); 192 EXPECT_LE(0, rv);
247 if (rv <= 0) 193 if (rv <= 0)
248 break; 194 break;
249 total_bytes_read += rv; 195 total_bytes_read += rv;
250 data_read.append(buf, rv); 196 data_read.append(buf, rv);
251 } 197 }
252 EXPECT_EQ(file_size, total_bytes_read); 198 EXPECT_EQ(file_size, total_bytes_read);
253 EXPECT_EQ(kTestData, data_read); 199 EXPECT_EQ(kTestData, data_read);
254 } 200 }
255 201
256 TEST_F(FileStreamTest, AsyncRead) { 202 TEST_F(FileStreamTest, AsyncRead) {
257 int64 file_size; 203 int64 file_size;
258 bool ok = base::GetFileSize(temp_file_path(), &file_size); 204 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
259 EXPECT_TRUE(ok);
260 205
261 FileStream stream(NULL, base::MessageLoopProxy::current()); 206 FileStream stream(NULL, base::MessageLoopProxy::current());
262 int flags = base::PLATFORM_FILE_OPEN | 207 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
263 base::PLATFORM_FILE_READ | 208 base::File::FLAG_ASYNC;
264 base::PLATFORM_FILE_ASYNC;
265 TestCompletionCallback callback; 209 TestCompletionCallback callback;
266 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 210 int rv = stream.Open(temp_file_path(), flags, callback.callback());
267 EXPECT_EQ(ERR_IO_PENDING, rv); 211 EXPECT_EQ(ERR_IO_PENDING, rv);
268 EXPECT_EQ(OK, callback.WaitForResult()); 212 EXPECT_EQ(OK, callback.WaitForResult());
269 213
270 int64 total_bytes_avail = stream.Available(); 214 int64 total_bytes_avail = stream.Available();
271 EXPECT_EQ(file_size, total_bytes_avail); 215 EXPECT_EQ(file_size, total_bytes_avail);
272 216
273 int total_bytes_read = 0; 217 int total_bytes_read = 0;
274 218
275 std::string data_read; 219 std::string data_read;
276 for (;;) { 220 for (;;) {
277 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); 221 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4);
278 rv = stream.Read(buf.get(), buf->size(), callback.callback()); 222 rv = stream.Read(buf.get(), buf->size(), callback.callback());
279 if (rv == ERR_IO_PENDING) 223 if (rv == ERR_IO_PENDING)
280 rv = callback.WaitForResult(); 224 rv = callback.WaitForResult();
281 EXPECT_LE(0, rv); 225 EXPECT_LE(0, rv);
282 if (rv <= 0) 226 if (rv <= 0)
283 break; 227 break;
284 total_bytes_read += rv; 228 total_bytes_read += rv;
285 data_read.append(buf->data(), rv); 229 data_read.append(buf->data(), rv);
286 } 230 }
287 EXPECT_EQ(file_size, total_bytes_read); 231 EXPECT_EQ(file_size, total_bytes_read);
288 EXPECT_EQ(kTestData, data_read); 232 EXPECT_EQ(kTestData, data_read);
289 } 233 }
290 234
291 TEST_F(FileStreamTest, AsyncRead_EarlyDelete) { 235 TEST_F(FileStreamTest, AsyncRead_EarlyDelete) {
292 int64 file_size; 236 int64 file_size;
293 bool ok = base::GetFileSize(temp_file_path(), &file_size); 237 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
294 EXPECT_TRUE(ok);
295 238
296 scoped_ptr<FileStream> stream( 239 scoped_ptr<FileStream> stream(
297 new FileStream(NULL, base::MessageLoopProxy::current())); 240 new FileStream(NULL, base::MessageLoopProxy::current()));
298 int flags = base::PLATFORM_FILE_OPEN | 241 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
299 base::PLATFORM_FILE_READ | 242 base::File::FLAG_ASYNC;
300 base::PLATFORM_FILE_ASYNC;
301 TestCompletionCallback callback; 243 TestCompletionCallback callback;
302 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 244 int rv = stream->Open(temp_file_path(), flags, callback.callback());
303 EXPECT_EQ(ERR_IO_PENDING, rv); 245 EXPECT_EQ(ERR_IO_PENDING, rv);
304 EXPECT_EQ(OK, callback.WaitForResult()); 246 EXPECT_EQ(OK, callback.WaitForResult());
305 247
306 int64 total_bytes_avail = stream->Available(); 248 int64 total_bytes_avail = stream->Available();
307 EXPECT_EQ(file_size, total_bytes_avail); 249 EXPECT_EQ(file_size, total_bytes_avail);
308 250
309 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); 251 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4);
310 rv = stream->Read(buf.get(), buf->size(), callback.callback()); 252 rv = stream->Read(buf.get(), buf->size(), callback.callback());
311 stream.reset(); // Delete instead of closing it. 253 stream.reset(); // Delete instead of closing it.
312 if (rv < 0) { 254 if (rv < 0) {
313 EXPECT_EQ(ERR_IO_PENDING, rv); 255 EXPECT_EQ(ERR_IO_PENDING, rv);
314 // The callback should not be called if the request is cancelled. 256 // The callback should not be called if the request is cancelled.
315 base::RunLoop().RunUntilIdle(); 257 base::RunLoop().RunUntilIdle();
316 EXPECT_FALSE(callback.have_result()); 258 EXPECT_FALSE(callback.have_result());
317 } else { 259 } else {
318 EXPECT_EQ(std::string(kTestData, rv), std::string(buf->data(), rv)); 260 EXPECT_EQ(std::string(kTestData, rv), std::string(buf->data(), rv));
319 } 261 }
320 } 262 }
321 263
322 TEST_F(FileStreamTest, BasicRead_FromOffset) { 264 TEST_F(FileStreamTest, BasicRead_FromOffset) {
323 int64 file_size; 265 int64 file_size;
324 bool ok = base::GetFileSize(temp_file_path(), &file_size); 266 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
325 EXPECT_TRUE(ok);
326 267
327 FileStream stream(NULL, base::MessageLoopProxy::current()); 268 FileStream stream(NULL, base::MessageLoopProxy::current());
328 int flags = base::PLATFORM_FILE_OPEN | 269 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ;
329 base::PLATFORM_FILE_READ;
330 int rv = stream.OpenSync(temp_file_path(), flags); 270 int rv = stream.OpenSync(temp_file_path(), flags);
331 EXPECT_EQ(OK, rv); 271 EXPECT_EQ(OK, rv);
332 272
333 const int64 kOffset = 3; 273 const int64 kOffset = 3;
334 int64 new_offset = stream.SeekSync(FROM_BEGIN, kOffset); 274 int64 new_offset = stream.SeekSync(FROM_BEGIN, kOffset);
335 EXPECT_EQ(kOffset, new_offset); 275 EXPECT_EQ(kOffset, new_offset);
336 276
337 int64 total_bytes_avail = stream.Available(); 277 int64 total_bytes_avail = stream.Available();
338 EXPECT_EQ(file_size - kOffset, total_bytes_avail); 278 EXPECT_EQ(file_size - kOffset, total_bytes_avail);
339 279
340 int64 total_bytes_read = 0; 280 int64 total_bytes_read = 0;
341 281
342 std::string data_read; 282 std::string data_read;
343 for (;;) { 283 for (;;) {
344 char buf[4]; 284 char buf[4];
345 rv = stream.ReadSync(buf, arraysize(buf)); 285 rv = stream.ReadSync(buf, arraysize(buf));
346 EXPECT_LE(0, rv); 286 EXPECT_LE(0, rv);
347 if (rv <= 0) 287 if (rv <= 0)
348 break; 288 break;
349 total_bytes_read += rv; 289 total_bytes_read += rv;
350 data_read.append(buf, rv); 290 data_read.append(buf, rv);
351 } 291 }
352 EXPECT_EQ(file_size - kOffset, total_bytes_read); 292 EXPECT_EQ(file_size - kOffset, total_bytes_read);
353 EXPECT_TRUE(data_read == kTestData + kOffset); 293 EXPECT_TRUE(data_read == kTestData + kOffset);
354 EXPECT_EQ(kTestData + kOffset, data_read); 294 EXPECT_EQ(kTestData + kOffset, data_read);
355 } 295 }
356 296
357 TEST_F(FileStreamTest, AsyncRead_FromOffset) { 297 TEST_F(FileStreamTest, AsyncRead_FromOffset) {
358 int64 file_size; 298 int64 file_size;
359 bool ok = base::GetFileSize(temp_file_path(), &file_size); 299 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
360 EXPECT_TRUE(ok);
361 300
362 FileStream stream(NULL, base::MessageLoopProxy::current()); 301 FileStream stream(NULL, base::MessageLoopProxy::current());
363 int flags = base::PLATFORM_FILE_OPEN | 302 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
364 base::PLATFORM_FILE_READ | 303 base::File::FLAG_ASYNC;
365 base::PLATFORM_FILE_ASYNC;
366 TestCompletionCallback callback; 304 TestCompletionCallback callback;
367 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 305 int rv = stream.Open(temp_file_path(), flags, callback.callback());
368 EXPECT_EQ(ERR_IO_PENDING, rv); 306 EXPECT_EQ(ERR_IO_PENDING, rv);
369 EXPECT_EQ(OK, callback.WaitForResult()); 307 EXPECT_EQ(OK, callback.WaitForResult());
370 308
371 TestInt64CompletionCallback callback64; 309 TestInt64CompletionCallback callback64;
372 const int64 kOffset = 3; 310 const int64 kOffset = 3;
373 rv = stream.Seek(FROM_BEGIN, kOffset, callback64.callback()); 311 rv = stream.Seek(FROM_BEGIN, kOffset, callback64.callback());
374 ASSERT_EQ(ERR_IO_PENDING, rv); 312 ASSERT_EQ(ERR_IO_PENDING, rv);
375 int64 new_offset = callback64.WaitForResult(); 313 int64 new_offset = callback64.WaitForResult();
(...skipping 15 matching lines...) Expand all
391 break; 329 break;
392 total_bytes_read += rv; 330 total_bytes_read += rv;
393 data_read.append(buf->data(), rv); 331 data_read.append(buf->data(), rv);
394 } 332 }
395 EXPECT_EQ(file_size - kOffset, total_bytes_read); 333 EXPECT_EQ(file_size - kOffset, total_bytes_read);
396 EXPECT_EQ(kTestData + kOffset, data_read); 334 EXPECT_EQ(kTestData + kOffset, data_read);
397 } 335 }
398 336
399 TEST_F(FileStreamTest, SeekAround) { 337 TEST_F(FileStreamTest, SeekAround) {
400 FileStream stream(NULL, base::MessageLoopProxy::current()); 338 FileStream stream(NULL, base::MessageLoopProxy::current());
401 int flags = base::PLATFORM_FILE_OPEN | 339 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ;
402 base::PLATFORM_FILE_READ;
403 int rv = stream.OpenSync(temp_file_path(), flags); 340 int rv = stream.OpenSync(temp_file_path(), flags);
404 EXPECT_EQ(OK, rv); 341 EXPECT_EQ(OK, rv);
405 342
406 const int64 kOffset = 3; 343 const int64 kOffset = 3;
407 int64 new_offset = stream.SeekSync(FROM_BEGIN, kOffset); 344 int64 new_offset = stream.SeekSync(FROM_BEGIN, kOffset);
408 EXPECT_EQ(kOffset, new_offset); 345 EXPECT_EQ(kOffset, new_offset);
409 346
410 new_offset = stream.SeekSync(FROM_CURRENT, kOffset); 347 new_offset = stream.SeekSync(FROM_CURRENT, kOffset);
411 EXPECT_EQ(2 * kOffset, new_offset); 348 EXPECT_EQ(2 * kOffset, new_offset);
412 349
413 new_offset = stream.SeekSync(FROM_CURRENT, -kOffset); 350 new_offset = stream.SeekSync(FROM_CURRENT, -kOffset);
414 EXPECT_EQ(kOffset, new_offset); 351 EXPECT_EQ(kOffset, new_offset);
415 352
416 const int kTestDataLen = arraysize(kTestData) - 1; 353 const int kTestDataLen = arraysize(kTestData) - 1;
417 354
418 new_offset = stream.SeekSync(FROM_END, -kTestDataLen); 355 new_offset = stream.SeekSync(FROM_END, -kTestDataLen);
419 EXPECT_EQ(0, new_offset); 356 EXPECT_EQ(0, new_offset);
420 } 357 }
421 358
422 TEST_F(FileStreamTest, AsyncSeekAround) { 359 TEST_F(FileStreamTest, AsyncSeekAround) {
423 FileStream stream(NULL, base::MessageLoopProxy::current()); 360 FileStream stream(NULL, base::MessageLoopProxy::current());
424 int flags = base::PLATFORM_FILE_OPEN | 361 int flags = base::File::FLAG_OPEN | base::File::FLAG_ASYNC |
425 base::PLATFORM_FILE_ASYNC | 362 base::File::FLAG_READ;
426 base::PLATFORM_FILE_READ;
427 TestCompletionCallback callback; 363 TestCompletionCallback callback;
428 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 364 int rv = stream.Open(temp_file_path(), flags, callback.callback());
429 EXPECT_EQ(ERR_IO_PENDING, rv); 365 EXPECT_EQ(ERR_IO_PENDING, rv);
430 EXPECT_EQ(OK, callback.WaitForResult()); 366 EXPECT_EQ(OK, callback.WaitForResult());
431 367
432 TestInt64CompletionCallback callback64; 368 TestInt64CompletionCallback callback64;
433 369
434 const int64 kOffset = 3; 370 const int64 kOffset = 3;
435 rv = stream.Seek(FROM_BEGIN, kOffset, callback64.callback()); 371 rv = stream.Seek(FROM_BEGIN, kOffset, callback64.callback());
436 ASSERT_EQ(ERR_IO_PENDING, rv); 372 ASSERT_EQ(ERR_IO_PENDING, rv);
(...skipping 14 matching lines...) Expand all
451 387
452 rv = stream.Seek(FROM_END, -kTestDataLen, callback64.callback()); 388 rv = stream.Seek(FROM_END, -kTestDataLen, callback64.callback());
453 ASSERT_EQ(ERR_IO_PENDING, rv); 389 ASSERT_EQ(ERR_IO_PENDING, rv);
454 new_offset = callback64.WaitForResult(); 390 new_offset = callback64.WaitForResult();
455 EXPECT_EQ(0, new_offset); 391 EXPECT_EQ(0, new_offset);
456 } 392 }
457 393
458 TEST_F(FileStreamTest, BasicWrite) { 394 TEST_F(FileStreamTest, BasicWrite) {
459 scoped_ptr<FileStream> stream( 395 scoped_ptr<FileStream> stream(
460 new FileStream(NULL, base::MessageLoopProxy::current())); 396 new FileStream(NULL, base::MessageLoopProxy::current()));
461 int flags = base::PLATFORM_FILE_CREATE_ALWAYS | 397 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE;
462 base::PLATFORM_FILE_WRITE;
463 int rv = stream->OpenSync(temp_file_path(), flags); 398 int rv = stream->OpenSync(temp_file_path(), flags);
464 EXPECT_EQ(OK, rv); 399 EXPECT_EQ(OK, rv);
465 400
466 int64 file_size; 401 int64 file_size;
467 bool ok = base::GetFileSize(temp_file_path(), &file_size); 402 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
468 EXPECT_TRUE(ok);
469 EXPECT_EQ(0, file_size); 403 EXPECT_EQ(0, file_size);
470 404
471 rv = stream->WriteSync(kTestData, kTestDataSize); 405 rv = stream->WriteSync(kTestData, kTestDataSize);
472 EXPECT_EQ(kTestDataSize, rv); 406 EXPECT_EQ(kTestDataSize, rv);
473 stream.reset(); 407 stream.reset();
474 408
475 ok = base::GetFileSize(temp_file_path(), &file_size); 409 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
476 EXPECT_TRUE(ok);
477 EXPECT_EQ(kTestDataSize, file_size); 410 EXPECT_EQ(kTestDataSize, file_size);
478 } 411 }
479 412
480 TEST_F(FileStreamTest, AsyncWrite) { 413 TEST_F(FileStreamTest, AsyncWrite) {
481 FileStream stream(NULL, base::MessageLoopProxy::current()); 414 FileStream stream(NULL, base::MessageLoopProxy::current());
482 int flags = base::PLATFORM_FILE_CREATE_ALWAYS | 415 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
483 base::PLATFORM_FILE_WRITE | 416 base::File::FLAG_ASYNC;
484 base::PLATFORM_FILE_ASYNC;
485 TestCompletionCallback callback; 417 TestCompletionCallback callback;
486 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 418 int rv = stream.Open(temp_file_path(), flags, callback.callback());
487 EXPECT_EQ(ERR_IO_PENDING, rv); 419 EXPECT_EQ(ERR_IO_PENDING, rv);
488 EXPECT_EQ(OK, callback.WaitForResult()); 420 EXPECT_EQ(OK, callback.WaitForResult());
489 421
490 int64 file_size; 422 int64 file_size;
491 bool ok = base::GetFileSize(temp_file_path(), &file_size); 423 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
492 EXPECT_TRUE(ok);
493 EXPECT_EQ(0, file_size); 424 EXPECT_EQ(0, file_size);
494 425
495 int total_bytes_written = 0; 426 int total_bytes_written = 0;
496 427
497 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 428 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
498 scoped_refptr<DrainableIOBuffer> drainable = 429 scoped_refptr<DrainableIOBuffer> drainable =
499 new DrainableIOBuffer(buf.get(), buf->size()); 430 new DrainableIOBuffer(buf.get(), buf->size());
500 while (total_bytes_written != kTestDataSize) { 431 while (total_bytes_written != kTestDataSize) {
501 rv = stream.Write( 432 rv = stream.Write(drainable.get(), drainable->BytesRemaining(),
502 drainable.get(), drainable->BytesRemaining(), callback.callback()); 433 callback.callback());
503 if (rv == ERR_IO_PENDING) 434 if (rv == ERR_IO_PENDING)
504 rv = callback.WaitForResult(); 435 rv = callback.WaitForResult();
505 EXPECT_LT(0, rv); 436 EXPECT_LT(0, rv);
506 if (rv <= 0) 437 if (rv <= 0)
507 break; 438 break;
508 drainable->DidConsume(rv); 439 drainable->DidConsume(rv);
509 total_bytes_written += rv; 440 total_bytes_written += rv;
510 } 441 }
511 ok = base::GetFileSize(temp_file_path(), &file_size); 442 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
512 EXPECT_TRUE(ok);
513 EXPECT_EQ(file_size, total_bytes_written); 443 EXPECT_EQ(file_size, total_bytes_written);
514 } 444 }
515 445
516 TEST_F(FileStreamTest, AsyncWrite_EarlyDelete) { 446 TEST_F(FileStreamTest, AsyncWrite_EarlyDelete) {
517 scoped_ptr<FileStream> stream( 447 scoped_ptr<FileStream> stream(
518 new FileStream(NULL, base::MessageLoopProxy::current())); 448 new FileStream(NULL, base::MessageLoopProxy::current()));
519 int flags = base::PLATFORM_FILE_CREATE_ALWAYS | 449 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
520 base::PLATFORM_FILE_WRITE | 450 base::File::FLAG_ASYNC;
521 base::PLATFORM_FILE_ASYNC;
522 TestCompletionCallback callback; 451 TestCompletionCallback callback;
523 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 452 int rv = stream->Open(temp_file_path(), flags, callback.callback());
524 EXPECT_EQ(ERR_IO_PENDING, rv); 453 EXPECT_EQ(ERR_IO_PENDING, rv);
525 EXPECT_EQ(OK, callback.WaitForResult()); 454 EXPECT_EQ(OK, callback.WaitForResult());
526 455
527 int64 file_size; 456 int64 file_size;
528 bool ok = base::GetFileSize(temp_file_path(), &file_size); 457 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
529 EXPECT_TRUE(ok);
530 EXPECT_EQ(0, file_size); 458 EXPECT_EQ(0, file_size);
531 459
532 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 460 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
533 rv = stream->Write(buf.get(), buf->size(), callback.callback()); 461 rv = stream->Write(buf.get(), buf->size(), callback.callback());
534 stream.reset(); 462 stream.reset();
535 if (rv < 0) { 463 if (rv < 0) {
536 EXPECT_EQ(ERR_IO_PENDING, rv); 464 EXPECT_EQ(ERR_IO_PENDING, rv);
537 // The callback should not be called if the request is cancelled. 465 // The callback should not be called if the request is cancelled.
538 base::RunLoop().RunUntilIdle(); 466 base::RunLoop().RunUntilIdle();
539 EXPECT_FALSE(callback.have_result()); 467 EXPECT_FALSE(callback.have_result());
540 } else { 468 } else {
541 ok = base::GetFileSize(temp_file_path(), &file_size); 469 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
542 EXPECT_TRUE(ok);
543 EXPECT_EQ(file_size, rv); 470 EXPECT_EQ(file_size, rv);
544 } 471 }
545 } 472 }
546 473
547 TEST_F(FileStreamTest, BasicWrite_FromOffset) { 474 TEST_F(FileStreamTest, BasicWrite_FromOffset) {
548 scoped_ptr<FileStream> stream( 475 scoped_ptr<FileStream> stream(
549 new FileStream(NULL, base::MessageLoopProxy::current())); 476 new FileStream(NULL, base::MessageLoopProxy::current()));
550 int flags = base::PLATFORM_FILE_OPEN | 477 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE;
551 base::PLATFORM_FILE_WRITE;
552 int rv = stream->OpenSync(temp_file_path(), flags); 478 int rv = stream->OpenSync(temp_file_path(), flags);
553 EXPECT_EQ(OK, rv); 479 EXPECT_EQ(OK, rv);
554 480
555 int64 file_size; 481 int64 file_size;
556 bool ok = base::GetFileSize(temp_file_path(), &file_size); 482 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
557 EXPECT_TRUE(ok);
558 EXPECT_EQ(kTestDataSize, file_size); 483 EXPECT_EQ(kTestDataSize, file_size);
559 484
560 const int64 kOffset = 0; 485 const int64 kOffset = 0;
561 int64 new_offset = stream->SeekSync(FROM_END, kOffset); 486 int64 new_offset = stream->SeekSync(FROM_END, kOffset);
562 EXPECT_EQ(kTestDataSize, new_offset); 487 EXPECT_EQ(kTestDataSize, new_offset);
563 488
564 rv = stream->WriteSync(kTestData, kTestDataSize); 489 rv = stream->WriteSync(kTestData, kTestDataSize);
565 EXPECT_EQ(kTestDataSize, rv); 490 EXPECT_EQ(kTestDataSize, rv);
566 stream.reset(); 491 stream.reset();
567 492
568 ok = base::GetFileSize(temp_file_path(), &file_size); 493 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
569 EXPECT_TRUE(ok);
570 EXPECT_EQ(kTestDataSize * 2, file_size); 494 EXPECT_EQ(kTestDataSize * 2, file_size);
571 } 495 }
572 496
573 TEST_F(FileStreamTest, AsyncWrite_FromOffset) { 497 TEST_F(FileStreamTest, AsyncWrite_FromOffset) {
574 int64 file_size; 498 int64 file_size;
575 bool ok = base::GetFileSize(temp_file_path(), &file_size); 499 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
576 EXPECT_TRUE(ok);
577 500
578 FileStream stream(NULL, base::MessageLoopProxy::current()); 501 FileStream stream(NULL, base::MessageLoopProxy::current());
579 int flags = base::PLATFORM_FILE_OPEN | 502 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE |
580 base::PLATFORM_FILE_WRITE | 503 base::File::FLAG_ASYNC;
581 base::PLATFORM_FILE_ASYNC;
582 TestCompletionCallback callback; 504 TestCompletionCallback callback;
583 int rv = stream.Open(temp_file_path(), flags, callback.callback()); 505 int rv = stream.Open(temp_file_path(), flags, callback.callback());
584 EXPECT_EQ(ERR_IO_PENDING, rv); 506 EXPECT_EQ(ERR_IO_PENDING, rv);
585 EXPECT_EQ(OK, callback.WaitForResult()); 507 EXPECT_EQ(OK, callback.WaitForResult());
586 508
587 TestInt64CompletionCallback callback64; 509 TestInt64CompletionCallback callback64;
588 const int64 kOffset = 0; 510 const int64 kOffset = 0;
589 rv = stream.Seek(FROM_END, kOffset, callback64.callback()); 511 rv = stream.Seek(FROM_END, kOffset, callback64.callback());
590 ASSERT_EQ(ERR_IO_PENDING, rv); 512 ASSERT_EQ(ERR_IO_PENDING, rv);
591 int64 new_offset = callback64.WaitForResult(); 513 int64 new_offset = callback64.WaitForResult();
592 EXPECT_EQ(kTestDataSize, new_offset); 514 EXPECT_EQ(kTestDataSize, new_offset);
593 515
594 int total_bytes_written = 0; 516 int total_bytes_written = 0;
595 517
596 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 518 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
597 scoped_refptr<DrainableIOBuffer> drainable = 519 scoped_refptr<DrainableIOBuffer> drainable =
598 new DrainableIOBuffer(buf.get(), buf->size()); 520 new DrainableIOBuffer(buf.get(), buf->size());
599 while (total_bytes_written != kTestDataSize) { 521 while (total_bytes_written != kTestDataSize) {
600 rv = stream.Write( 522 rv = stream.Write(drainable.get(), drainable->BytesRemaining(),
601 drainable.get(), drainable->BytesRemaining(), callback.callback()); 523 callback.callback());
602 if (rv == ERR_IO_PENDING) 524 if (rv == ERR_IO_PENDING)
603 rv = callback.WaitForResult(); 525 rv = callback.WaitForResult();
604 EXPECT_LT(0, rv); 526 EXPECT_LT(0, rv);
605 if (rv <= 0) 527 if (rv <= 0)
606 break; 528 break;
607 drainable->DidConsume(rv); 529 drainable->DidConsume(rv);
608 total_bytes_written += rv; 530 total_bytes_written += rv;
609 } 531 }
610 ok = base::GetFileSize(temp_file_path(), &file_size); 532 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
611 EXPECT_TRUE(ok);
612 EXPECT_EQ(file_size, kTestDataSize * 2); 533 EXPECT_EQ(file_size, kTestDataSize * 2);
613 } 534 }
614 535
615 TEST_F(FileStreamTest, BasicReadWrite) { 536 TEST_F(FileStreamTest, BasicReadWrite) {
616 int64 file_size; 537 int64 file_size;
617 bool ok = base::GetFileSize(temp_file_path(), &file_size); 538 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
618 EXPECT_TRUE(ok);
619 539
620 scoped_ptr<FileStream> stream( 540 scoped_ptr<FileStream> stream(
621 new FileStream(NULL, base::MessageLoopProxy::current())); 541 new FileStream(NULL, base::MessageLoopProxy::current()));
622 int flags = base::PLATFORM_FILE_OPEN | 542 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
623 base::PLATFORM_FILE_READ | 543 base::File::FLAG_WRITE;
624 base::PLATFORM_FILE_WRITE;
625 int rv = stream->OpenSync(temp_file_path(), flags); 544 int rv = stream->OpenSync(temp_file_path(), flags);
626 EXPECT_EQ(OK, rv); 545 EXPECT_EQ(OK, rv);
627 546
628 int64 total_bytes_avail = stream->Available(); 547 int64 total_bytes_avail = stream->Available();
629 EXPECT_EQ(file_size, total_bytes_avail); 548 EXPECT_EQ(file_size, total_bytes_avail);
630 549
631 int total_bytes_read = 0; 550 int total_bytes_read = 0;
632 551
633 std::string data_read; 552 std::string data_read;
634 for (;;) { 553 for (;;) {
635 char buf[4]; 554 char buf[4];
636 rv = stream->ReadSync(buf, arraysize(buf)); 555 rv = stream->ReadSync(buf, arraysize(buf));
637 EXPECT_LE(0, rv); 556 EXPECT_LE(0, rv);
638 if (rv <= 0) 557 if (rv <= 0)
639 break; 558 break;
640 total_bytes_read += rv; 559 total_bytes_read += rv;
641 data_read.append(buf, rv); 560 data_read.append(buf, rv);
642 } 561 }
643 EXPECT_EQ(file_size, total_bytes_read); 562 EXPECT_EQ(file_size, total_bytes_read);
644 EXPECT_TRUE(data_read == kTestData); 563 EXPECT_TRUE(data_read == kTestData);
645 564
646 rv = stream->WriteSync(kTestData, kTestDataSize); 565 rv = stream->WriteSync(kTestData, kTestDataSize);
647 EXPECT_EQ(kTestDataSize, rv); 566 EXPECT_EQ(kTestDataSize, rv);
648 stream.reset(); 567 stream.reset();
649 568
650 ok = base::GetFileSize(temp_file_path(), &file_size); 569 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
651 EXPECT_TRUE(ok);
652 EXPECT_EQ(kTestDataSize * 2, file_size); 570 EXPECT_EQ(kTestDataSize * 2, file_size);
653 } 571 }
654 572
655 TEST_F(FileStreamTest, BasicWriteRead) { 573 TEST_F(FileStreamTest, BasicWriteRead) {
656 int64 file_size; 574 int64 file_size;
657 bool ok = base::GetFileSize(temp_file_path(), &file_size); 575 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
658 EXPECT_TRUE(ok);
659 576
660 scoped_ptr<FileStream> stream( 577 scoped_ptr<FileStream> stream(
661 new FileStream(NULL, base::MessageLoopProxy::current())); 578 new FileStream(NULL, base::MessageLoopProxy::current()));
662 int flags = base::PLATFORM_FILE_OPEN | 579 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
663 base::PLATFORM_FILE_READ | 580 base::File::FLAG_WRITE;
664 base::PLATFORM_FILE_WRITE;
665 int rv = stream->OpenSync(temp_file_path(), flags); 581 int rv = stream->OpenSync(temp_file_path(), flags);
666 EXPECT_EQ(OK, rv); 582 EXPECT_EQ(OK, rv);
667 583
668 int64 total_bytes_avail = stream->Available(); 584 int64 total_bytes_avail = stream->Available();
669 EXPECT_EQ(file_size, total_bytes_avail); 585 EXPECT_EQ(file_size, total_bytes_avail);
670 586
671 int64 offset = stream->SeekSync(FROM_END, 0); 587 int64 offset = stream->SeekSync(FROM_END, 0);
672 EXPECT_EQ(offset, file_size); 588 EXPECT_EQ(offset, file_size);
673 589
674 rv = stream->WriteSync(kTestData, kTestDataSize); 590 rv = stream->WriteSync(kTestData, kTestDataSize);
675 EXPECT_EQ(kTestDataSize, rv); 591 EXPECT_EQ(kTestDataSize, rv);
676 592
677 offset = stream->SeekSync(FROM_BEGIN, 0); 593 offset = stream->SeekSync(FROM_BEGIN, 0);
678 EXPECT_EQ(0, offset); 594 EXPECT_EQ(0, offset);
679 595
680 int64 total_bytes_read = 0; 596 int64 total_bytes_read = 0;
681 597
682 std::string data_read; 598 std::string data_read;
683 for (;;) { 599 for (;;) {
684 char buf[4]; 600 char buf[4];
685 rv = stream->ReadSync(buf, arraysize(buf)); 601 rv = stream->ReadSync(buf, arraysize(buf));
686 EXPECT_LE(0, rv); 602 EXPECT_LE(0, rv);
687 if (rv <= 0) 603 if (rv <= 0)
688 break; 604 break;
689 total_bytes_read += rv; 605 total_bytes_read += rv;
690 data_read.append(buf, rv); 606 data_read.append(buf, rv);
691 } 607 }
692 stream.reset(); 608 stream.reset();
693 609
694 ok = base::GetFileSize(temp_file_path(), &file_size); 610 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
695 EXPECT_TRUE(ok);
696 EXPECT_EQ(kTestDataSize * 2, file_size); 611 EXPECT_EQ(kTestDataSize * 2, file_size);
697 EXPECT_EQ(kTestDataSize * 2, total_bytes_read); 612 EXPECT_EQ(kTestDataSize * 2, total_bytes_read);
698 613
699 const std::string kExpectedFileData = 614 const std::string kExpectedFileData =
700 std::string(kTestData) + std::string(kTestData); 615 std::string(kTestData) + std::string(kTestData);
701 EXPECT_EQ(kExpectedFileData, data_read); 616 EXPECT_EQ(kExpectedFileData, data_read);
702 } 617 }
703 618
704 TEST_F(FileStreamTest, BasicAsyncReadWrite) { 619 TEST_F(FileStreamTest, BasicAsyncReadWrite) {
705 int64 file_size; 620 int64 file_size;
706 bool ok = base::GetFileSize(temp_file_path(), &file_size); 621 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
707 EXPECT_TRUE(ok);
708 622
709 scoped_ptr<FileStream> stream( 623 scoped_ptr<FileStream> stream(
710 new FileStream(NULL, base::MessageLoopProxy::current())); 624 new FileStream(NULL, base::MessageLoopProxy::current()));
711 int flags = base::PLATFORM_FILE_OPEN | 625 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
712 base::PLATFORM_FILE_READ | 626 base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
713 base::PLATFORM_FILE_WRITE |
714 base::PLATFORM_FILE_ASYNC;
715 TestCompletionCallback callback; 627 TestCompletionCallback callback;
716 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 628 int rv = stream->Open(temp_file_path(), flags, callback.callback());
717 EXPECT_EQ(ERR_IO_PENDING, rv); 629 EXPECT_EQ(ERR_IO_PENDING, rv);
718 EXPECT_EQ(OK, callback.WaitForResult()); 630 EXPECT_EQ(OK, callback.WaitForResult());
719 631
720 int64 total_bytes_avail = stream->Available(); 632 int64 total_bytes_avail = stream->Available();
721 EXPECT_EQ(file_size, total_bytes_avail); 633 EXPECT_EQ(file_size, total_bytes_avail);
722 634
723 int64 total_bytes_read = 0; 635 int64 total_bytes_read = 0;
724 636
(...skipping 11 matching lines...) Expand all
736 } 648 }
737 EXPECT_EQ(file_size, total_bytes_read); 649 EXPECT_EQ(file_size, total_bytes_read);
738 EXPECT_TRUE(data_read == kTestData); 650 EXPECT_TRUE(data_read == kTestData);
739 651
740 int total_bytes_written = 0; 652 int total_bytes_written = 0;
741 653
742 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 654 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
743 scoped_refptr<DrainableIOBuffer> drainable = 655 scoped_refptr<DrainableIOBuffer> drainable =
744 new DrainableIOBuffer(buf.get(), buf->size()); 656 new DrainableIOBuffer(buf.get(), buf->size());
745 while (total_bytes_written != kTestDataSize) { 657 while (total_bytes_written != kTestDataSize) {
746 rv = stream->Write( 658 rv = stream->Write(drainable.get(), drainable->BytesRemaining(),
747 drainable.get(), drainable->BytesRemaining(), callback.callback()); 659 callback.callback());
748 if (rv == ERR_IO_PENDING) 660 if (rv == ERR_IO_PENDING)
749 rv = callback.WaitForResult(); 661 rv = callback.WaitForResult();
750 EXPECT_LT(0, rv); 662 EXPECT_LT(0, rv);
751 if (rv <= 0) 663 if (rv <= 0)
752 break; 664 break;
753 drainable->DidConsume(rv); 665 drainable->DidConsume(rv);
754 total_bytes_written += rv; 666 total_bytes_written += rv;
755 } 667 }
756 668
757 stream.reset(); 669 stream.reset();
758 670
759 ok = base::GetFileSize(temp_file_path(), &file_size); 671 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
760 EXPECT_TRUE(ok);
761 EXPECT_EQ(kTestDataSize * 2, file_size); 672 EXPECT_EQ(kTestDataSize * 2, file_size);
762 } 673 }
763 674
764 TEST_F(FileStreamTest, BasicAsyncWriteRead) { 675 TEST_F(FileStreamTest, BasicAsyncWriteRead) {
765 int64 file_size; 676 int64 file_size;
766 bool ok = base::GetFileSize(temp_file_path(), &file_size); 677 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
767 EXPECT_TRUE(ok);
768 678
769 scoped_ptr<FileStream> stream( 679 scoped_ptr<FileStream> stream(
770 new FileStream(NULL, base::MessageLoopProxy::current())); 680 new FileStream(NULL, base::MessageLoopProxy::current()));
771 int flags = base::PLATFORM_FILE_OPEN | 681 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
772 base::PLATFORM_FILE_READ | 682 base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
773 base::PLATFORM_FILE_WRITE |
774 base::PLATFORM_FILE_ASYNC;
775 TestCompletionCallback callback; 683 TestCompletionCallback callback;
776 int rv = stream->Open(temp_file_path(), flags, callback.callback()); 684 int rv = stream->Open(temp_file_path(), flags, callback.callback());
777 EXPECT_EQ(ERR_IO_PENDING, rv); 685 EXPECT_EQ(ERR_IO_PENDING, rv);
778 EXPECT_EQ(OK, callback.WaitForResult()); 686 EXPECT_EQ(OK, callback.WaitForResult());
779 687
780 int64 total_bytes_avail = stream->Available(); 688 int64 total_bytes_avail = stream->Available();
781 EXPECT_EQ(file_size, total_bytes_avail); 689 EXPECT_EQ(file_size, total_bytes_avail);
782 690
783 TestInt64CompletionCallback callback64; 691 TestInt64CompletionCallback callback64;
784 rv = stream->Seek(FROM_END, 0, callback64.callback()); 692 rv = stream->Seek(FROM_END, 0, callback64.callback());
785 ASSERT_EQ(ERR_IO_PENDING, rv); 693 ASSERT_EQ(ERR_IO_PENDING, rv);
786 int64 offset = callback64.WaitForResult(); 694 int64 offset = callback64.WaitForResult();
787 EXPECT_EQ(offset, file_size); 695 EXPECT_EQ(offset, file_size);
788 696
789 int total_bytes_written = 0; 697 int total_bytes_written = 0;
790 698
791 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 699 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
792 scoped_refptr<DrainableIOBuffer> drainable = 700 scoped_refptr<DrainableIOBuffer> drainable =
793 new DrainableIOBuffer(buf.get(), buf->size()); 701 new DrainableIOBuffer(buf.get(), buf->size());
794 while (total_bytes_written != kTestDataSize) { 702 while (total_bytes_written != kTestDataSize) {
795 rv = stream->Write( 703 rv = stream->Write(drainable.get(), drainable->BytesRemaining(),
796 drainable.get(), drainable->BytesRemaining(), callback.callback()); 704 callback.callback());
797 if (rv == ERR_IO_PENDING) 705 if (rv == ERR_IO_PENDING)
798 rv = callback.WaitForResult(); 706 rv = callback.WaitForResult();
799 EXPECT_LT(0, rv); 707 EXPECT_LT(0, rv);
800 if (rv <= 0) 708 if (rv <= 0)
801 break; 709 break;
802 drainable->DidConsume(rv); 710 drainable->DidConsume(rv);
803 total_bytes_written += rv; 711 total_bytes_written += rv;
804 } 712 }
805 713
806 EXPECT_EQ(kTestDataSize, total_bytes_written); 714 EXPECT_EQ(kTestDataSize, total_bytes_written);
(...skipping 12 matching lines...) Expand all
819 if (rv == ERR_IO_PENDING) 727 if (rv == ERR_IO_PENDING)
820 rv = callback.WaitForResult(); 728 rv = callback.WaitForResult();
821 EXPECT_LE(0, rv); 729 EXPECT_LE(0, rv);
822 if (rv <= 0) 730 if (rv <= 0)
823 break; 731 break;
824 total_bytes_read += rv; 732 total_bytes_read += rv;
825 data_read.append(buf->data(), rv); 733 data_read.append(buf->data(), rv);
826 } 734 }
827 stream.reset(); 735 stream.reset();
828 736
829 ok = base::GetFileSize(temp_file_path(), &file_size); 737 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
830 EXPECT_TRUE(ok);
831 EXPECT_EQ(kTestDataSize * 2, file_size); 738 EXPECT_EQ(kTestDataSize * 2, file_size);
832 739
833 EXPECT_EQ(kTestDataSize * 2, total_bytes_read); 740 EXPECT_EQ(kTestDataSize * 2, total_bytes_read);
834 const std::string kExpectedFileData = 741 const std::string kExpectedFileData =
835 std::string(kTestData) + std::string(kTestData); 742 std::string(kTestData) + std::string(kTestData);
836 EXPECT_EQ(kExpectedFileData, data_read); 743 EXPECT_EQ(kExpectedFileData, data_read);
837 } 744 }
838 745
839 class TestWriteReadCompletionCallback { 746 class TestWriteReadCompletionCallback {
840 public: 747 public:
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 std::string* data_read_; 830 std::string* data_read_;
924 const CompletionCallback callback_; 831 const CompletionCallback callback_;
925 scoped_refptr<IOBufferWithSize> test_data_; 832 scoped_refptr<IOBufferWithSize> test_data_;
926 scoped_refptr<DrainableIOBuffer> drainable_; 833 scoped_refptr<DrainableIOBuffer> drainable_;
927 834
928 DISALLOW_COPY_AND_ASSIGN(TestWriteReadCompletionCallback); 835 DISALLOW_COPY_AND_ASSIGN(TestWriteReadCompletionCallback);
929 }; 836 };
930 837
931 TEST_F(FileStreamTest, AsyncWriteRead) { 838 TEST_F(FileStreamTest, AsyncWriteRead) {
932 int64 file_size; 839 int64 file_size;
933 bool ok = base::GetFileSize(temp_file_path(), &file_size); 840 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
934 EXPECT_TRUE(ok);
935 841
936 scoped_ptr<FileStream> stream( 842 scoped_ptr<FileStream> stream(
937 new FileStream(NULL, base::MessageLoopProxy::current())); 843 new FileStream(NULL, base::MessageLoopProxy::current()));
938 int flags = base::PLATFORM_FILE_OPEN | 844 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
939 base::PLATFORM_FILE_READ | 845 base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
940 base::PLATFORM_FILE_WRITE |
941 base::PLATFORM_FILE_ASYNC;
942 TestCompletionCallback open_callback; 846 TestCompletionCallback open_callback;
943 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); 847 int rv = stream->Open(temp_file_path(), flags, open_callback.callback());
944 EXPECT_EQ(ERR_IO_PENDING, rv); 848 EXPECT_EQ(ERR_IO_PENDING, rv);
945 EXPECT_EQ(OK, open_callback.WaitForResult()); 849 EXPECT_EQ(OK, open_callback.WaitForResult());
946 850
947 int64 total_bytes_avail = stream->Available(); 851 int64 total_bytes_avail = stream->Available();
948 EXPECT_EQ(file_size, total_bytes_avail); 852 EXPECT_EQ(file_size, total_bytes_avail);
949 853
950 int64 offset = stream->SeekSync(FROM_END, 0); 854 int64 offset = stream->SeekSync(FROM_END, 0);
951 EXPECT_EQ(offset, file_size); 855 EXPECT_EQ(offset, file_size);
952 856
953 int total_bytes_written = 0; 857 int total_bytes_written = 0;
954 int total_bytes_read = 0; 858 int total_bytes_read = 0;
955 std::string data_read; 859 std::string data_read;
956 TestWriteReadCompletionCallback callback(stream.get(), &total_bytes_written, 860 TestWriteReadCompletionCallback callback(stream.get(), &total_bytes_written,
957 &total_bytes_read, &data_read); 861 &total_bytes_read, &data_read);
958 862
959 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 863 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
960 rv = stream->Write(buf.get(), buf->size(), callback.callback()); 864 rv = stream->Write(buf.get(), buf->size(), callback.callback());
961 if (rv == ERR_IO_PENDING) 865 if (rv == ERR_IO_PENDING)
962 rv = callback.WaitForResult(); 866 rv = callback.WaitForResult();
963 EXPECT_LT(0, rv); 867 EXPECT_LT(0, rv);
964 EXPECT_EQ(kTestDataSize, total_bytes_written); 868 EXPECT_EQ(kTestDataSize, total_bytes_written);
965 869
966 stream.reset(); 870 stream.reset();
967 871
968 ok = base::GetFileSize(temp_file_path(), &file_size); 872 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
969 EXPECT_TRUE(ok);
970 EXPECT_EQ(kTestDataSize * 2, file_size); 873 EXPECT_EQ(kTestDataSize * 2, file_size);
971 874
972 EXPECT_EQ(kTestDataSize * 2, total_bytes_read); 875 EXPECT_EQ(kTestDataSize * 2, total_bytes_read);
973 const std::string kExpectedFileData = 876 const std::string kExpectedFileData =
974 std::string(kTestData) + std::string(kTestData); 877 std::string(kTestData) + std::string(kTestData);
975 EXPECT_EQ(kExpectedFileData, data_read); 878 EXPECT_EQ(kExpectedFileData, data_read);
976 } 879 }
977 880
978 class TestWriteCloseCompletionCallback { 881 class TestWriteCloseCompletionCallback {
979 public: 882 public:
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 int* total_bytes_written_; 936 int* total_bytes_written_;
1034 const CompletionCallback callback_; 937 const CompletionCallback callback_;
1035 scoped_refptr<IOBufferWithSize> test_data_; 938 scoped_refptr<IOBufferWithSize> test_data_;
1036 scoped_refptr<DrainableIOBuffer> drainable_; 939 scoped_refptr<DrainableIOBuffer> drainable_;
1037 940
1038 DISALLOW_COPY_AND_ASSIGN(TestWriteCloseCompletionCallback); 941 DISALLOW_COPY_AND_ASSIGN(TestWriteCloseCompletionCallback);
1039 }; 942 };
1040 943
1041 TEST_F(FileStreamTest, AsyncWriteClose) { 944 TEST_F(FileStreamTest, AsyncWriteClose) {
1042 int64 file_size; 945 int64 file_size;
1043 bool ok = base::GetFileSize(temp_file_path(), &file_size); 946 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
1044 EXPECT_TRUE(ok);
1045 947
1046 scoped_ptr<FileStream> stream( 948 scoped_ptr<FileStream> stream(
1047 new FileStream(NULL, base::MessageLoopProxy::current())); 949 new FileStream(NULL, base::MessageLoopProxy::current()));
1048 int flags = base::PLATFORM_FILE_OPEN | 950 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
1049 base::PLATFORM_FILE_READ | 951 base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
1050 base::PLATFORM_FILE_WRITE |
1051 base::PLATFORM_FILE_ASYNC;
1052 TestCompletionCallback open_callback; 952 TestCompletionCallback open_callback;
1053 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); 953 int rv = stream->Open(temp_file_path(), flags, open_callback.callback());
1054 EXPECT_EQ(ERR_IO_PENDING, rv); 954 EXPECT_EQ(ERR_IO_PENDING, rv);
1055 EXPECT_EQ(OK, open_callback.WaitForResult()); 955 EXPECT_EQ(OK, open_callback.WaitForResult());
1056 956
1057 int64 total_bytes_avail = stream->Available(); 957 int64 total_bytes_avail = stream->Available();
1058 EXPECT_EQ(file_size, total_bytes_avail); 958 EXPECT_EQ(file_size, total_bytes_avail);
1059 959
1060 int64 offset = stream->SeekSync(FROM_END, 0); 960 int64 offset = stream->SeekSync(FROM_END, 0);
1061 EXPECT_EQ(offset, file_size); 961 EXPECT_EQ(offset, file_size);
1062 962
1063 int total_bytes_written = 0; 963 int total_bytes_written = 0;
1064 TestWriteCloseCompletionCallback callback(stream.get(), &total_bytes_written); 964 TestWriteCloseCompletionCallback callback(stream.get(), &total_bytes_written);
1065 965
1066 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); 966 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer();
1067 rv = stream->Write(buf.get(), buf->size(), callback.callback()); 967 rv = stream->Write(buf.get(), buf->size(), callback.callback());
1068 if (rv == ERR_IO_PENDING) 968 if (rv == ERR_IO_PENDING)
1069 total_bytes_written = callback.WaitForResult(); 969 total_bytes_written = callback.WaitForResult();
1070 EXPECT_LT(0, total_bytes_written); 970 EXPECT_LT(0, total_bytes_written);
1071 EXPECT_EQ(kTestDataSize, total_bytes_written); 971 EXPECT_EQ(kTestDataSize, total_bytes_written);
1072 972
1073 stream.reset(); 973 stream.reset();
1074 974
1075 ok = base::GetFileSize(temp_file_path(), &file_size); 975 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
1076 EXPECT_TRUE(ok);
1077 EXPECT_EQ(kTestDataSize * 2, file_size); 976 EXPECT_EQ(kTestDataSize * 2, file_size);
1078 } 977 }
1079 978
1080 // Tests truncating a file. 979 // Tests truncating a file.
1081 TEST_F(FileStreamTest, Truncate) { 980 TEST_F(FileStreamTest, Truncate) {
1082 int flags = base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_WRITE; 981 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE;
1083 982
1084 scoped_ptr<FileStream> write_stream( 983 scoped_ptr<FileStream> write_stream(
1085 new FileStream(NULL, base::MessageLoopProxy::current())); 984 new FileStream(NULL, base::MessageLoopProxy::current()));
1086 ASSERT_EQ(OK, write_stream->OpenSync(temp_file_path(), flags)); 985 ASSERT_EQ(OK, write_stream->OpenSync(temp_file_path(), flags));
1087 986
1088 // Write some data to the file. 987 // Write some data to the file.
1089 const char test_data[] = "0123456789"; 988 const char test_data[] = "0123456789";
1090 write_stream->WriteSync(test_data, arraysize(test_data)); 989 write_stream->WriteSync(test_data, arraysize(test_data));
1091 990
1092 // Truncate the file. 991 // Truncate the file.
1093 ASSERT_EQ(4, write_stream->Truncate(4)); 992 ASSERT_EQ(4, write_stream->Truncate(4));
1094 993
1095 // Write again. 994 // Write again.
1096 write_stream->WriteSync(test_data, 4); 995 write_stream->WriteSync(test_data, 4);
1097 996
1098 // Close the stream. 997 // Close the stream.
1099 write_stream.reset(); 998 write_stream.reset();
1100 999
1101 // Read in the contents and make sure we get back what we expected. 1000 // Read in the contents and make sure we get back what we expected.
1102 std::string read_contents; 1001 std::string read_contents;
1103 EXPECT_TRUE(base::ReadFileToString(temp_file_path(), &read_contents)); 1002 EXPECT_TRUE(base::ReadFileToString(temp_file_path(), &read_contents));
1104 1003
1105 EXPECT_EQ("01230123", read_contents); 1004 EXPECT_EQ("01230123", read_contents);
1106 } 1005 }
1107 1006
1108 TEST_F(FileStreamTest, AsyncOpenAndDelete) { 1007 TEST_F(FileStreamTest, AsyncOpenAndDelete) {
1109 scoped_ptr<FileStream> stream( 1008 scoped_ptr<FileStream> stream(
1110 new FileStream(NULL, base::MessageLoopProxy::current())); 1009 new FileStream(NULL, base::MessageLoopProxy::current()));
1111 int flags = base::PLATFORM_FILE_OPEN | 1010 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE |
1112 base::PLATFORM_FILE_WRITE | 1011 base::File::FLAG_ASYNC;
1113 base::PLATFORM_FILE_ASYNC;
1114 TestCompletionCallback open_callback; 1012 TestCompletionCallback open_callback;
1115 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); 1013 int rv = stream->Open(temp_file_path(), flags, open_callback.callback());
1116 EXPECT_EQ(ERR_IO_PENDING, rv); 1014 EXPECT_EQ(ERR_IO_PENDING, rv);
1117 1015
1118 // Delete the stream without waiting for the open operation to be 1016 // Delete the stream without waiting for the open operation to be
1119 // complete. Should be safe. 1017 // complete. Should be safe.
1120 stream.reset(); 1018 stream.reset();
1121 // open_callback won't be called. 1019 // open_callback won't be called.
1122 base::RunLoop().RunUntilIdle(); 1020 base::RunLoop().RunUntilIdle();
1123 EXPECT_FALSE(open_callback.have_result()); 1021 EXPECT_FALSE(open_callback.have_result());
1124 } 1022 }
1125 1023
1126 // Verify that async Write() errors are mapped correctly. 1024 // Verify that async Write() errors are mapped correctly.
1127 TEST_F(FileStreamTest, AsyncWriteError) { 1025 TEST_F(FileStreamTest, AsyncWriteError) {
1128 // Try opening file as read-only and then writing to it using FileStream. 1026 // Try opening file as read-only and then writing to it using FileStream.
1129 base::PlatformFile file = base::CreatePlatformFile( 1027 uint32 flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
1130 temp_file_path(), 1028 base::File::FLAG_ASYNC;
1131 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ |
1132 base::PLATFORM_FILE_ASYNC,
1133 NULL,
1134 NULL);
1135 ASSERT_NE(base::kInvalidPlatformFileValue, file);
1136 1029
1137 int flags = base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_WRITE | 1030 base::File file(temp_file_path(), flags);
1138 base::PLATFORM_FILE_ASYNC; 1031 ASSERT_TRUE(file.IsValid());
1032
1139 scoped_ptr<FileStream> stream( 1033 scoped_ptr<FileStream> stream(
1140 new FileStream(file, flags, NULL, base::MessageLoopProxy::current())); 1034 new FileStream(file.Pass(), NULL, base::MessageLoopProxy::current()));
1141 1035
1142 scoped_refptr<IOBuffer> buf = new IOBuffer(1); 1036 scoped_refptr<IOBuffer> buf = new IOBuffer(1);
1143 buf->data()[0] = 0; 1037 buf->data()[0] = 0;
1144 1038
1145 TestCompletionCallback callback; 1039 TestCompletionCallback callback;
1146 int rv = stream->Write(buf.get(), 1, callback.callback()); 1040 int rv = stream->Write(buf.get(), 1, callback.callback());
1147 if (rv == ERR_IO_PENDING) 1041 if (rv == ERR_IO_PENDING)
1148 rv = callback.WaitForResult(); 1042 rv = callback.WaitForResult();
1149 EXPECT_LT(rv, 0); 1043 EXPECT_LT(rv, 0);
1150 1044
1151 base::ClosePlatformFile(file); 1045 stream.reset();
1046 base::RunLoop().RunUntilIdle();
1152 } 1047 }
1153 1048
1154 // Verify that async Read() errors are mapped correctly. 1049 // Verify that async Read() errors are mapped correctly.
1155 TEST_F(FileStreamTest, AsyncReadError) { 1050 TEST_F(FileStreamTest, AsyncReadError) {
1156 // Try opening file for write and then reading from it using FileStream. 1051 // Try opening file for write and then reading from it using FileStream.
1157 base::PlatformFile file = base::CreatePlatformFile( 1052 uint32 flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE |
1158 temp_file_path(), 1053 base::File::FLAG_ASYNC;
1159 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE |
1160 base::PLATFORM_FILE_ASYNC,
1161 NULL,
1162 NULL);
1163 ASSERT_NE(base::kInvalidPlatformFileValue, file);
1164 1054
1165 int flags = base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ | 1055 base::File file(temp_file_path(), flags);
1166 base::PLATFORM_FILE_ASYNC; 1056 ASSERT_TRUE(file.IsValid());
1057
1167 scoped_ptr<FileStream> stream( 1058 scoped_ptr<FileStream> stream(
1168 new FileStream(file, flags, NULL, base::MessageLoopProxy::current())); 1059 new FileStream(file.Pass(), NULL, base::MessageLoopProxy::current()));
1169 1060
1170 scoped_refptr<IOBuffer> buf = new IOBuffer(1); 1061 scoped_refptr<IOBuffer> buf = new IOBuffer(1);
1171 TestCompletionCallback callback; 1062 TestCompletionCallback callback;
1172 int rv = stream->Read(buf.get(), 1, callback.callback()); 1063 int rv = stream->Read(buf.get(), 1, callback.callback());
1173 if (rv == ERR_IO_PENDING) 1064 if (rv == ERR_IO_PENDING)
1174 rv = callback.WaitForResult(); 1065 rv = callback.WaitForResult();
1175 EXPECT_LT(rv, 0); 1066 EXPECT_LT(rv, 0);
1176 1067
1177 base::ClosePlatformFile(file); 1068 stream.reset();
1069 base::RunLoop().RunUntilIdle();
1178 } 1070 }
1179 1071
1180 #if defined(OS_ANDROID) 1072 #if defined(OS_ANDROID)
1181 TEST_F(FileStreamTest, ContentUriAsyncRead) { 1073 TEST_F(FileStreamTest, ContentUriAsyncRead) {
1182 base::FilePath test_dir; 1074 base::FilePath test_dir;
1183 PathService::Get(base::DIR_SOURCE_ROOT, &test_dir); 1075 PathService::Get(base::DIR_SOURCE_ROOT, &test_dir);
1184 test_dir = test_dir.AppendASCII("net"); 1076 test_dir = test_dir.AppendASCII("net");
1185 test_dir = test_dir.AppendASCII("data"); 1077 test_dir = test_dir.AppendASCII("data");
1186 test_dir = test_dir.AppendASCII("file_stream_unittest"); 1078 test_dir = test_dir.AppendASCII("file_stream_unittest");
1187 ASSERT_TRUE(base::PathExists(test_dir)); 1079 ASSERT_TRUE(base::PathExists(test_dir));
1188 base::FilePath image_file = test_dir.Append(FILE_PATH_LITERAL("red.png")); 1080 base::FilePath image_file = test_dir.Append(FILE_PATH_LITERAL("red.png"));
1189 1081
1190 // Insert the image into MediaStore. MediaStore will do some conversions, and 1082 // Insert the image into MediaStore. MediaStore will do some conversions, and
1191 // return the content URI. 1083 // return the content URI.
1192 base::FilePath path = file_util::InsertImageIntoMediaStore(image_file); 1084 base::FilePath path = file_util::InsertImageIntoMediaStore(image_file);
1193 EXPECT_TRUE(path.IsContentUri()); 1085 EXPECT_TRUE(path.IsContentUri());
1194 EXPECT_TRUE(base::PathExists(path)); 1086 EXPECT_TRUE(base::PathExists(path));
1195 int64 file_size; 1087 int64 file_size;
1196 EXPECT_TRUE(base::GetFileSize(path, &file_size)); 1088 EXPECT_TRUE(base::GetFileSize(path, &file_size));
1197 EXPECT_LT(0, file_size); 1089 EXPECT_LT(0, file_size);
1198 1090
1199 FileStream stream(NULL, base::MessageLoopProxy::current()); 1091 FileStream stream(NULL, base::MessageLoopProxy::current());
1200 int flags = base::PLATFORM_FILE_OPEN | 1092 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
1201 base::PLATFORM_FILE_READ | 1093 base::File::FLAG_ASYNC;
1202 base::PLATFORM_FILE_ASYNC;
1203 TestCompletionCallback callback; 1094 TestCompletionCallback callback;
1204 int rv = stream.Open(path, flags, callback.callback()); 1095 int rv = stream.Open(path, flags, callback.callback());
1205 EXPECT_EQ(ERR_IO_PENDING, rv); 1096 EXPECT_EQ(ERR_IO_PENDING, rv);
1206 EXPECT_EQ(OK, callback.WaitForResult()); 1097 EXPECT_EQ(OK, callback.WaitForResult());
1207 1098
1208 int64 total_bytes_avail = stream.Available(); 1099 int64 total_bytes_avail = stream.Available();
1209 EXPECT_EQ(file_size, total_bytes_avail); 1100 EXPECT_EQ(file_size, total_bytes_avail);
1210 1101
1211 int total_bytes_read = 0; 1102 int total_bytes_read = 0;
1212 1103
1213 std::string data_read; 1104 std::string data_read;
1214 for (;;) { 1105 for (;;) {
1215 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); 1106 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4);
1216 rv = stream.Read(buf.get(), buf->size(), callback.callback()); 1107 rv = stream.Read(buf.get(), buf->size(), callback.callback());
1217 if (rv == ERR_IO_PENDING) 1108 if (rv == ERR_IO_PENDING)
1218 rv = callback.WaitForResult(); 1109 rv = callback.WaitForResult();
1219 EXPECT_LE(0, rv); 1110 EXPECT_LE(0, rv);
1220 if (rv <= 0) 1111 if (rv <= 0)
1221 break; 1112 break;
1222 total_bytes_read += rv; 1113 total_bytes_read += rv;
1223 data_read.append(buf->data(), rv); 1114 data_read.append(buf->data(), rv);
1224 } 1115 }
1225 EXPECT_EQ(file_size, total_bytes_read); 1116 EXPECT_EQ(file_size, total_bytes_read);
1226 } 1117 }
1227 #endif 1118 #endif
1228 1119
1229 } // namespace 1120 } // namespace
1230 1121
1231 } // namespace net 1122 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698