OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/base/file_stream.h" | 5 #include "net/base/file_stream.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |