| 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 |