| 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 <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/files/file.h" | 11 #include "base/files/file.h" |
| 12 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
| 13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
| 15 #include "base/path_service.h" | 15 #include "base/path_service.h" |
| 16 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
| 17 #include "base/strings/string_util.h" | 17 #include "base/strings/string_util.h" |
| 18 #include "base/synchronization/waitable_event.h" | 18 #include "base/synchronization/waitable_event.h" |
| 19 #include "base/test/sequenced_worker_pool_owner.h" | 19 #include "base/test/sequenced_worker_pool_owner.h" |
| 20 #include "base/test/test_timeouts.h" | 20 #include "base/test/test_timeouts.h" |
| 21 #include "base/threading/thread_restrictions.h" | 21 #include "base/threading/thread_restrictions.h" |
| 22 #include "base/threading/thread_task_runner_handle.h" | 22 #include "base/threading/thread_task_runner_handle.h" |
| 23 #include "net/base/io_buffer.h" | 23 #include "net/base/io_buffer.h" |
| 24 #include "net/base/net_errors.h" | 24 #include "net/base/net_errors.h" |
| 25 #include "net/base/test_completion_callback.h" | 25 #include "net/base/test_completion_callback.h" |
| 26 #include "net/log/test_net_log.h" | 26 #include "net/log/test_net_log.h" |
| 27 #include "net/test/gtest_util.h" |
| 28 #include "testing/gmock/include/gmock/gmock.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 28 #include "testing/platform_test.h" | 30 #include "testing/platform_test.h" |
| 29 | 31 |
| 32 using net::test::IsError; |
| 33 using net::test::IsOk; |
| 34 |
| 30 #if defined(OS_ANDROID) | 35 #if defined(OS_ANDROID) |
| 31 #include "base/test/test_file_util.h" | 36 #include "base/test/test_file_util.h" |
| 32 #endif | 37 #endif |
| 33 | 38 |
| 34 namespace net { | 39 namespace net { |
| 35 | 40 |
| 36 namespace { | 41 namespace { |
| 37 | 42 |
| 38 const char kTestData[] = "0123456789"; | 43 const char kTestData[] = "0123456789"; |
| 39 const int kTestDataSize = arraysize(kTestData) - 1; | 44 const int kTestDataSize = arraysize(kTestData) - 1; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 | 77 |
| 73 namespace { | 78 namespace { |
| 74 | 79 |
| 75 TEST_F(FileStreamTest, OpenExplicitClose) { | 80 TEST_F(FileStreamTest, OpenExplicitClose) { |
| 76 TestCompletionCallback callback; | 81 TestCompletionCallback callback; |
| 77 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 82 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
| 78 int flags = base::File::FLAG_OPEN | | 83 int flags = base::File::FLAG_OPEN | |
| 79 base::File::FLAG_READ | | 84 base::File::FLAG_READ | |
| 80 base::File::FLAG_ASYNC; | 85 base::File::FLAG_ASYNC; |
| 81 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | 86 int rv = stream.Open(temp_file_path(), flags, callback.callback()); |
| 82 EXPECT_EQ(ERR_IO_PENDING, rv); | 87 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 83 EXPECT_EQ(OK, callback.WaitForResult()); | 88 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 84 EXPECT_TRUE(stream.IsOpen()); | 89 EXPECT_TRUE(stream.IsOpen()); |
| 85 EXPECT_EQ(ERR_IO_PENDING, stream.Close(callback.callback())); | 90 EXPECT_THAT(stream.Close(callback.callback()), IsError(ERR_IO_PENDING)); |
| 86 EXPECT_EQ(OK, callback.WaitForResult()); | 91 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 87 EXPECT_FALSE(stream.IsOpen()); | 92 EXPECT_FALSE(stream.IsOpen()); |
| 88 } | 93 } |
| 89 | 94 |
| 90 TEST_F(FileStreamTest, OpenExplicitCloseOrphaned) { | 95 TEST_F(FileStreamTest, OpenExplicitCloseOrphaned) { |
| 91 TestCompletionCallback callback; | 96 TestCompletionCallback callback; |
| 92 std::unique_ptr<FileStream> stream( | 97 std::unique_ptr<FileStream> stream( |
| 93 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 98 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
| 94 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 99 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
| 95 base::File::FLAG_ASYNC; | 100 base::File::FLAG_ASYNC; |
| 96 int rv = stream->Open(temp_file_path(), flags, callback.callback()); | 101 int rv = stream->Open(temp_file_path(), flags, callback.callback()); |
| 97 EXPECT_EQ(ERR_IO_PENDING, rv); | 102 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 98 EXPECT_EQ(OK, callback.WaitForResult()); | 103 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 99 EXPECT_TRUE(stream->IsOpen()); | 104 EXPECT_TRUE(stream->IsOpen()); |
| 100 EXPECT_EQ(ERR_IO_PENDING, stream->Close(callback.callback())); | 105 EXPECT_THAT(stream->Close(callback.callback()), IsError(ERR_IO_PENDING)); |
| 101 stream.reset(); | 106 stream.reset(); |
| 102 // File isn't actually closed yet. | 107 // File isn't actually closed yet. |
| 103 base::RunLoop runloop; | 108 base::RunLoop runloop; |
| 104 runloop.RunUntilIdle(); | 109 runloop.RunUntilIdle(); |
| 105 // The file should now be closed, though the callback has not been called. | 110 // The file should now be closed, though the callback has not been called. |
| 106 } | 111 } |
| 107 | 112 |
| 108 // Test the use of FileStream with a file handle provided at construction. | 113 // Test the use of FileStream with a file handle provided at construction. |
| 109 TEST_F(FileStreamTest, UseFileHandle) { | 114 TEST_F(FileStreamTest, UseFileHandle) { |
| 110 int rv = 0; | 115 int rv = 0; |
| 111 TestCompletionCallback callback; | 116 TestCompletionCallback callback; |
| 112 TestInt64CompletionCallback callback64; | 117 TestInt64CompletionCallback callback64; |
| 113 // 1. Test reading with a file handle. | 118 // 1. Test reading with a file handle. |
| 114 ASSERT_EQ(kTestDataSize, | 119 ASSERT_EQ(kTestDataSize, |
| 115 base::WriteFile(temp_file_path(), kTestData, kTestDataSize)); | 120 base::WriteFile(temp_file_path(), kTestData, kTestDataSize)); |
| 116 int flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ | | 121 int flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ | |
| 117 base::File::FLAG_ASYNC; | 122 base::File::FLAG_ASYNC; |
| 118 base::File file(temp_file_path(), flags); | 123 base::File file(temp_file_path(), flags); |
| 119 | 124 |
| 120 // Seek to the beginning of the file and read. | 125 // Seek to the beginning of the file and read. |
| 121 std::unique_ptr<FileStream> read_stream( | 126 std::unique_ptr<FileStream> read_stream( |
| 122 new FileStream(std::move(file), base::ThreadTaskRunnerHandle::Get())); | 127 new FileStream(std::move(file), base::ThreadTaskRunnerHandle::Get())); |
| 123 ASSERT_EQ(ERR_IO_PENDING, read_stream->Seek(0, callback64.callback())); | 128 ASSERT_THAT(read_stream->Seek(0, callback64.callback()), |
| 129 IsError(ERR_IO_PENDING)); |
| 124 ASSERT_EQ(0, callback64.WaitForResult()); | 130 ASSERT_EQ(0, callback64.WaitForResult()); |
| 125 // Read into buffer and compare. | 131 // Read into buffer and compare. |
| 126 scoped_refptr<IOBufferWithSize> read_buffer = | 132 scoped_refptr<IOBufferWithSize> read_buffer = |
| 127 new IOBufferWithSize(kTestDataSize); | 133 new IOBufferWithSize(kTestDataSize); |
| 128 rv = read_stream->Read(read_buffer.get(), kTestDataSize, callback.callback()); | 134 rv = read_stream->Read(read_buffer.get(), kTestDataSize, callback.callback()); |
| 129 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); | 135 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); |
| 130 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); | 136 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); |
| 131 read_stream.reset(); | 137 read_stream.reset(); |
| 132 | 138 |
| 133 // 2. Test writing with a file handle. | 139 // 2. Test writing with a file handle. |
| 134 base::DeleteFile(temp_file_path(), false); | 140 base::DeleteFile(temp_file_path(), false); |
| 135 flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE | | 141 flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE | |
| 136 base::File::FLAG_ASYNC; | 142 base::File::FLAG_ASYNC; |
| 137 file.Initialize(temp_file_path(), flags); | 143 file.Initialize(temp_file_path(), flags); |
| 138 | 144 |
| 139 std::unique_ptr<FileStream> write_stream( | 145 std::unique_ptr<FileStream> write_stream( |
| 140 new FileStream(std::move(file), base::ThreadTaskRunnerHandle::Get())); | 146 new FileStream(std::move(file), base::ThreadTaskRunnerHandle::Get())); |
| 141 ASSERT_EQ(ERR_IO_PENDING, write_stream->Seek(0, callback64.callback())); | 147 ASSERT_THAT(write_stream->Seek(0, callback64.callback()), |
| 148 IsError(ERR_IO_PENDING)); |
| 142 ASSERT_EQ(0, callback64.WaitForResult()); | 149 ASSERT_EQ(0, callback64.WaitForResult()); |
| 143 scoped_refptr<IOBufferWithSize> write_buffer = CreateTestDataBuffer(); | 150 scoped_refptr<IOBufferWithSize> write_buffer = CreateTestDataBuffer(); |
| 144 rv = write_stream->Write(write_buffer.get(), kTestDataSize, | 151 rv = write_stream->Write(write_buffer.get(), kTestDataSize, |
| 145 callback.callback()); | 152 callback.callback()); |
| 146 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); | 153 ASSERT_EQ(kTestDataSize, callback.GetResult(rv)); |
| 147 write_stream.reset(); | 154 write_stream.reset(); |
| 148 | 155 |
| 149 // Read into buffer and compare to make sure the handle worked fine. | 156 // Read into buffer and compare to make sure the handle worked fine. |
| 150 ASSERT_EQ(kTestDataSize, | 157 ASSERT_EQ(kTestDataSize, |
| 151 base::ReadFile(temp_file_path(), read_buffer->data(), | 158 base::ReadFile(temp_file_path(), read_buffer->data(), |
| 152 kTestDataSize)); | 159 kTestDataSize)); |
| 153 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); | 160 ASSERT_EQ(0, memcmp(kTestData, read_buffer->data(), kTestDataSize)); |
| 154 } | 161 } |
| 155 | 162 |
| 156 TEST_F(FileStreamTest, UseClosedStream) { | 163 TEST_F(FileStreamTest, UseClosedStream) { |
| 157 int rv = 0; | 164 int rv = 0; |
| 158 TestCompletionCallback callback; | 165 TestCompletionCallback callback; |
| 159 TestInt64CompletionCallback callback64; | 166 TestInt64CompletionCallback callback64; |
| 160 | 167 |
| 161 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 168 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
| 162 | 169 |
| 163 EXPECT_FALSE(stream.IsOpen()); | 170 EXPECT_FALSE(stream.IsOpen()); |
| 164 | 171 |
| 165 // Try seeking... | 172 // Try seeking... |
| 166 rv = stream.Seek(5, callback64.callback()); | 173 rv = stream.Seek(5, callback64.callback()); |
| 167 EXPECT_EQ(ERR_UNEXPECTED, callback64.GetResult(rv)); | 174 EXPECT_THAT(callback64.GetResult(rv), IsError(ERR_UNEXPECTED)); |
| 168 | 175 |
| 169 // Try reading... | 176 // Try reading... |
| 170 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(10); | 177 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(10); |
| 171 rv = stream.Read(buf.get(), buf->size(), callback.callback()); | 178 rv = stream.Read(buf.get(), buf->size(), callback.callback()); |
| 172 EXPECT_EQ(ERR_UNEXPECTED, callback.GetResult(rv)); | 179 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_UNEXPECTED)); |
| 173 } | 180 } |
| 174 | 181 |
| 175 TEST_F(FileStreamTest, Read) { | 182 TEST_F(FileStreamTest, Read) { |
| 176 int64_t file_size; | 183 int64_t file_size; |
| 177 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 184 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 178 | 185 |
| 179 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 186 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
| 180 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 187 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
| 181 base::File::FLAG_ASYNC; | 188 base::File::FLAG_ASYNC; |
| 182 TestCompletionCallback callback; | 189 TestCompletionCallback callback; |
| 183 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | 190 int rv = stream.Open(temp_file_path(), flags, callback.callback()); |
| 184 EXPECT_EQ(OK, callback.GetResult(rv)); | 191 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 185 | 192 |
| 186 int total_bytes_read = 0; | 193 int total_bytes_read = 0; |
| 187 | 194 |
| 188 std::string data_read; | 195 std::string data_read; |
| 189 for (;;) { | 196 for (;;) { |
| 190 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); | 197 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); |
| 191 rv = stream.Read(buf.get(), buf->size(), callback.callback()); | 198 rv = stream.Read(buf.get(), buf->size(), callback.callback()); |
| 192 rv = callback.GetResult(rv); | 199 rv = callback.GetResult(rv); |
| 193 EXPECT_LE(0, rv); | 200 EXPECT_LE(0, rv); |
| 194 if (rv <= 0) | 201 if (rv <= 0) |
| 195 break; | 202 break; |
| 196 total_bytes_read += rv; | 203 total_bytes_read += rv; |
| 197 data_read.append(buf->data(), rv); | 204 data_read.append(buf->data(), rv); |
| 198 } | 205 } |
| 199 EXPECT_EQ(file_size, total_bytes_read); | 206 EXPECT_EQ(file_size, total_bytes_read); |
| 200 EXPECT_EQ(kTestData, data_read); | 207 EXPECT_EQ(kTestData, data_read); |
| 201 } | 208 } |
| 202 | 209 |
| 203 TEST_F(FileStreamTest, Read_EarlyDelete) { | 210 TEST_F(FileStreamTest, Read_EarlyDelete) { |
| 204 int64_t file_size; | 211 int64_t file_size; |
| 205 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 212 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 206 | 213 |
| 207 std::unique_ptr<FileStream> stream( | 214 std::unique_ptr<FileStream> stream( |
| 208 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 215 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
| 209 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 216 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
| 210 base::File::FLAG_ASYNC; | 217 base::File::FLAG_ASYNC; |
| 211 TestCompletionCallback callback; | 218 TestCompletionCallback callback; |
| 212 int rv = stream->Open(temp_file_path(), flags, callback.callback()); | 219 int rv = stream->Open(temp_file_path(), flags, callback.callback()); |
| 213 EXPECT_EQ(ERR_IO_PENDING, rv); | 220 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 214 EXPECT_EQ(OK, callback.WaitForResult()); | 221 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 215 | 222 |
| 216 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); | 223 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); |
| 217 rv = stream->Read(buf.get(), buf->size(), callback.callback()); | 224 rv = stream->Read(buf.get(), buf->size(), callback.callback()); |
| 218 stream.reset(); // Delete instead of closing it. | 225 stream.reset(); // Delete instead of closing it. |
| 219 if (rv < 0) { | 226 if (rv < 0) { |
| 220 EXPECT_EQ(ERR_IO_PENDING, rv); | 227 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 221 // The callback should not be called if the request is cancelled. | 228 // The callback should not be called if the request is cancelled. |
| 222 base::RunLoop().RunUntilIdle(); | 229 base::RunLoop().RunUntilIdle(); |
| 223 EXPECT_FALSE(callback.have_result()); | 230 EXPECT_FALSE(callback.have_result()); |
| 224 } else { | 231 } else { |
| 225 EXPECT_EQ(std::string(kTestData, rv), std::string(buf->data(), rv)); | 232 EXPECT_EQ(std::string(kTestData, rv), std::string(buf->data(), rv)); |
| 226 } | 233 } |
| 227 } | 234 } |
| 228 | 235 |
| 229 TEST_F(FileStreamTest, Read_FromOffset) { | 236 TEST_F(FileStreamTest, Read_FromOffset) { |
| 230 int64_t file_size; | 237 int64_t file_size; |
| 231 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 238 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 232 | 239 |
| 233 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 240 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
| 234 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 241 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
| 235 base::File::FLAG_ASYNC; | 242 base::File::FLAG_ASYNC; |
| 236 TestCompletionCallback callback; | 243 TestCompletionCallback callback; |
| 237 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | 244 int rv = stream.Open(temp_file_path(), flags, callback.callback()); |
| 238 EXPECT_EQ(ERR_IO_PENDING, rv); | 245 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 239 EXPECT_EQ(OK, callback.WaitForResult()); | 246 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 240 | 247 |
| 241 TestInt64CompletionCallback callback64; | 248 TestInt64CompletionCallback callback64; |
| 242 const int64_t kOffset = 3; | 249 const int64_t kOffset = 3; |
| 243 rv = stream.Seek(kOffset, callback64.callback()); | 250 rv = stream.Seek(kOffset, callback64.callback()); |
| 244 ASSERT_EQ(ERR_IO_PENDING, rv); | 251 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 245 int64_t new_offset = callback64.WaitForResult(); | 252 int64_t new_offset = callback64.WaitForResult(); |
| 246 EXPECT_EQ(kOffset, new_offset); | 253 EXPECT_EQ(kOffset, new_offset); |
| 247 | 254 |
| 248 int total_bytes_read = 0; | 255 int total_bytes_read = 0; |
| 249 | 256 |
| 250 std::string data_read; | 257 std::string data_read; |
| 251 for (;;) { | 258 for (;;) { |
| 252 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); | 259 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); |
| 253 rv = stream.Read(buf.get(), buf->size(), callback.callback()); | 260 rv = stream.Read(buf.get(), buf->size(), callback.callback()); |
| 254 if (rv == ERR_IO_PENDING) | 261 if (rv == ERR_IO_PENDING) |
| 255 rv = callback.WaitForResult(); | 262 rv = callback.WaitForResult(); |
| 256 EXPECT_LE(0, rv); | 263 EXPECT_LE(0, rv); |
| 257 if (rv <= 0) | 264 if (rv <= 0) |
| 258 break; | 265 break; |
| 259 total_bytes_read += rv; | 266 total_bytes_read += rv; |
| 260 data_read.append(buf->data(), rv); | 267 data_read.append(buf->data(), rv); |
| 261 } | 268 } |
| 262 EXPECT_EQ(file_size - kOffset, total_bytes_read); | 269 EXPECT_EQ(file_size - kOffset, total_bytes_read); |
| 263 EXPECT_EQ(kTestData + kOffset, data_read); | 270 EXPECT_EQ(kTestData + kOffset, data_read); |
| 264 } | 271 } |
| 265 | 272 |
| 266 TEST_F(FileStreamTest, Write) { | 273 TEST_F(FileStreamTest, Write) { |
| 267 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 274 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
| 268 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | | 275 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | |
| 269 base::File::FLAG_ASYNC; | 276 base::File::FLAG_ASYNC; |
| 270 TestCompletionCallback callback; | 277 TestCompletionCallback callback; |
| 271 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | 278 int rv = stream.Open(temp_file_path(), flags, callback.callback()); |
| 272 EXPECT_EQ(OK, callback.GetResult(rv)); | 279 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 273 | 280 |
| 274 int64_t file_size; | 281 int64_t file_size; |
| 275 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 282 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 276 EXPECT_EQ(0, file_size); | 283 EXPECT_EQ(0, file_size); |
| 277 | 284 |
| 278 scoped_refptr<IOBuffer> buf = CreateTestDataBuffer(); | 285 scoped_refptr<IOBuffer> buf = CreateTestDataBuffer(); |
| 279 rv = stream.Write(buf.get(), kTestDataSize, callback.callback()); | 286 rv = stream.Write(buf.get(), kTestDataSize, callback.callback()); |
| 280 rv = callback.GetResult(rv); | 287 rv = callback.GetResult(rv); |
| 281 EXPECT_EQ(kTestDataSize, rv); | 288 EXPECT_EQ(kTestDataSize, rv); |
| 282 | 289 |
| 283 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 290 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 284 EXPECT_EQ(kTestDataSize, file_size); | 291 EXPECT_EQ(kTestDataSize, file_size); |
| 285 | 292 |
| 286 std::string data_read; | 293 std::string data_read; |
| 287 EXPECT_TRUE(base::ReadFileToString(temp_file_path(), &data_read)); | 294 EXPECT_TRUE(base::ReadFileToString(temp_file_path(), &data_read)); |
| 288 EXPECT_EQ(kTestData, data_read); | 295 EXPECT_EQ(kTestData, data_read); |
| 289 } | 296 } |
| 290 | 297 |
| 291 TEST_F(FileStreamTest, Write_EarlyDelete) { | 298 TEST_F(FileStreamTest, Write_EarlyDelete) { |
| 292 std::unique_ptr<FileStream> stream( | 299 std::unique_ptr<FileStream> stream( |
| 293 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 300 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
| 294 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | | 301 int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | |
| 295 base::File::FLAG_ASYNC; | 302 base::File::FLAG_ASYNC; |
| 296 TestCompletionCallback callback; | 303 TestCompletionCallback callback; |
| 297 int rv = stream->Open(temp_file_path(), flags, callback.callback()); | 304 int rv = stream->Open(temp_file_path(), flags, callback.callback()); |
| 298 EXPECT_EQ(ERR_IO_PENDING, rv); | 305 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 299 EXPECT_EQ(OK, callback.WaitForResult()); | 306 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 300 | 307 |
| 301 int64_t file_size; | 308 int64_t file_size; |
| 302 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 309 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 303 EXPECT_EQ(0, file_size); | 310 EXPECT_EQ(0, file_size); |
| 304 | 311 |
| 305 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); | 312 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); |
| 306 rv = stream->Write(buf.get(), buf->size(), callback.callback()); | 313 rv = stream->Write(buf.get(), buf->size(), callback.callback()); |
| 307 stream.reset(); | 314 stream.reset(); |
| 308 if (rv < 0) { | 315 if (rv < 0) { |
| 309 EXPECT_EQ(ERR_IO_PENDING, rv); | 316 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 310 // The callback should not be called if the request is cancelled. | 317 // The callback should not be called if the request is cancelled. |
| 311 base::RunLoop().RunUntilIdle(); | 318 base::RunLoop().RunUntilIdle(); |
| 312 EXPECT_FALSE(callback.have_result()); | 319 EXPECT_FALSE(callback.have_result()); |
| 313 } else { | 320 } else { |
| 314 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 321 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 315 EXPECT_EQ(file_size, rv); | 322 EXPECT_EQ(file_size, rv); |
| 316 } | 323 } |
| 317 } | 324 } |
| 318 | 325 |
| 319 TEST_F(FileStreamTest, Write_FromOffset) { | 326 TEST_F(FileStreamTest, Write_FromOffset) { |
| 320 int64_t file_size; | 327 int64_t file_size; |
| 321 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 328 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 322 | 329 |
| 323 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 330 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
| 324 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE | | 331 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE | |
| 325 base::File::FLAG_ASYNC; | 332 base::File::FLAG_ASYNC; |
| 326 TestCompletionCallback callback; | 333 TestCompletionCallback callback; |
| 327 int rv = stream.Open(temp_file_path(), flags, callback.callback()); | 334 int rv = stream.Open(temp_file_path(), flags, callback.callback()); |
| 328 EXPECT_EQ(ERR_IO_PENDING, rv); | 335 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 329 EXPECT_EQ(OK, callback.WaitForResult()); | 336 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 330 | 337 |
| 331 TestInt64CompletionCallback callback64; | 338 TestInt64CompletionCallback callback64; |
| 332 const int64_t kOffset = kTestDataSize; | 339 const int64_t kOffset = kTestDataSize; |
| 333 rv = stream.Seek(kOffset, callback64.callback()); | 340 rv = stream.Seek(kOffset, callback64.callback()); |
| 334 ASSERT_EQ(ERR_IO_PENDING, rv); | 341 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 335 int64_t new_offset = callback64.WaitForResult(); | 342 int64_t new_offset = callback64.WaitForResult(); |
| 336 EXPECT_EQ(kTestDataSize, new_offset); | 343 EXPECT_EQ(kTestDataSize, new_offset); |
| 337 | 344 |
| 338 int total_bytes_written = 0; | 345 int total_bytes_written = 0; |
| 339 | 346 |
| 340 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); | 347 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); |
| 341 scoped_refptr<DrainableIOBuffer> drainable = | 348 scoped_refptr<DrainableIOBuffer> drainable = |
| 342 new DrainableIOBuffer(buf.get(), buf->size()); | 349 new DrainableIOBuffer(buf.get(), buf->size()); |
| 343 while (total_bytes_written != kTestDataSize) { | 350 while (total_bytes_written != kTestDataSize) { |
| 344 rv = stream.Write(drainable.get(), drainable->BytesRemaining(), | 351 rv = stream.Write(drainable.get(), drainable->BytesRemaining(), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 358 TEST_F(FileStreamTest, BasicReadWrite) { | 365 TEST_F(FileStreamTest, BasicReadWrite) { |
| 359 int64_t file_size; | 366 int64_t file_size; |
| 360 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 367 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 361 | 368 |
| 362 std::unique_ptr<FileStream> stream( | 369 std::unique_ptr<FileStream> stream( |
| 363 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 370 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
| 364 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 371 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
| 365 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; | 372 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; |
| 366 TestCompletionCallback callback; | 373 TestCompletionCallback callback; |
| 367 int rv = stream->Open(temp_file_path(), flags, callback.callback()); | 374 int rv = stream->Open(temp_file_path(), flags, callback.callback()); |
| 368 EXPECT_EQ(ERR_IO_PENDING, rv); | 375 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 369 EXPECT_EQ(OK, callback.WaitForResult()); | 376 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 370 | 377 |
| 371 int64_t total_bytes_read = 0; | 378 int64_t total_bytes_read = 0; |
| 372 | 379 |
| 373 std::string data_read; | 380 std::string data_read; |
| 374 for (;;) { | 381 for (;;) { |
| 375 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); | 382 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); |
| 376 rv = stream->Read(buf.get(), buf->size(), callback.callback()); | 383 rv = stream->Read(buf.get(), buf->size(), callback.callback()); |
| 377 if (rv == ERR_IO_PENDING) | 384 if (rv == ERR_IO_PENDING) |
| 378 rv = callback.WaitForResult(); | 385 rv = callback.WaitForResult(); |
| 379 EXPECT_LE(0, rv); | 386 EXPECT_LE(0, rv); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 TEST_F(FileStreamTest, BasicWriteRead) { | 418 TEST_F(FileStreamTest, BasicWriteRead) { |
| 412 int64_t file_size; | 419 int64_t file_size; |
| 413 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 420 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 414 | 421 |
| 415 std::unique_ptr<FileStream> stream( | 422 std::unique_ptr<FileStream> stream( |
| 416 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 423 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
| 417 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 424 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
| 418 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; | 425 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; |
| 419 TestCompletionCallback callback; | 426 TestCompletionCallback callback; |
| 420 int rv = stream->Open(temp_file_path(), flags, callback.callback()); | 427 int rv = stream->Open(temp_file_path(), flags, callback.callback()); |
| 421 EXPECT_EQ(ERR_IO_PENDING, rv); | 428 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 422 EXPECT_EQ(OK, callback.WaitForResult()); | 429 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 423 | 430 |
| 424 TestInt64CompletionCallback callback64; | 431 TestInt64CompletionCallback callback64; |
| 425 rv = stream->Seek(file_size, callback64.callback()); | 432 rv = stream->Seek(file_size, callback64.callback()); |
| 426 ASSERT_EQ(ERR_IO_PENDING, rv); | 433 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 427 int64_t offset = callback64.WaitForResult(); | 434 int64_t offset = callback64.WaitForResult(); |
| 428 EXPECT_EQ(offset, file_size); | 435 EXPECT_EQ(offset, file_size); |
| 429 | 436 |
| 430 int total_bytes_written = 0; | 437 int total_bytes_written = 0; |
| 431 | 438 |
| 432 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); | 439 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); |
| 433 scoped_refptr<DrainableIOBuffer> drainable = | 440 scoped_refptr<DrainableIOBuffer> drainable = |
| 434 new DrainableIOBuffer(buf.get(), buf->size()); | 441 new DrainableIOBuffer(buf.get(), buf->size()); |
| 435 while (total_bytes_written != kTestDataSize) { | 442 while (total_bytes_written != kTestDataSize) { |
| 436 rv = stream->Write(drainable.get(), drainable->BytesRemaining(), | 443 rv = stream->Write(drainable.get(), drainable->BytesRemaining(), |
| 437 callback.callback()); | 444 callback.callback()); |
| 438 if (rv == ERR_IO_PENDING) | 445 if (rv == ERR_IO_PENDING) |
| 439 rv = callback.WaitForResult(); | 446 rv = callback.WaitForResult(); |
| 440 EXPECT_LT(0, rv); | 447 EXPECT_LT(0, rv); |
| 441 if (rv <= 0) | 448 if (rv <= 0) |
| 442 break; | 449 break; |
| 443 drainable->DidConsume(rv); | 450 drainable->DidConsume(rv); |
| 444 total_bytes_written += rv; | 451 total_bytes_written += rv; |
| 445 } | 452 } |
| 446 | 453 |
| 447 EXPECT_EQ(kTestDataSize, total_bytes_written); | 454 EXPECT_EQ(kTestDataSize, total_bytes_written); |
| 448 | 455 |
| 449 rv = stream->Seek(0, callback64.callback()); | 456 rv = stream->Seek(0, callback64.callback()); |
| 450 ASSERT_EQ(ERR_IO_PENDING, rv); | 457 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 451 offset = callback64.WaitForResult(); | 458 offset = callback64.WaitForResult(); |
| 452 EXPECT_EQ(0, offset); | 459 EXPECT_EQ(0, offset); |
| 453 | 460 |
| 454 int total_bytes_read = 0; | 461 int total_bytes_read = 0; |
| 455 | 462 |
| 456 std::string data_read; | 463 std::string data_read; |
| 457 for (;;) { | 464 for (;;) { |
| 458 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); | 465 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); |
| 459 rv = stream->Read(buf.get(), buf->size(), callback.callback()); | 466 rv = stream->Read(buf.get(), buf->size(), callback.callback()); |
| 460 if (rv == ERR_IO_PENDING) | 467 if (rv == ERR_IO_PENDING) |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 rv = stream_->Write( | 549 rv = stream_->Write( |
| 543 drainable_.get(), drainable_->BytesRemaining(), callback.callback()); | 550 drainable_.get(), drainable_->BytesRemaining(), callback.callback()); |
| 544 DCHECK_EQ(ERR_IO_PENDING, rv); | 551 DCHECK_EQ(ERR_IO_PENDING, rv); |
| 545 rv = callback.WaitForResult(); | 552 rv = callback.WaitForResult(); |
| 546 drainable_->DidConsume(total_bytes_written); | 553 drainable_->DidConsume(total_bytes_written); |
| 547 *total_bytes_written_ += total_bytes_written; | 554 *total_bytes_written_ += total_bytes_written; |
| 548 *total_bytes_read_ += total_bytes_read; | 555 *total_bytes_read_ += total_bytes_read; |
| 549 *data_read_ += data_read; | 556 *data_read_ += data_read; |
| 550 } else { // We're done writing all data. Start reading the data. | 557 } else { // We're done writing all data. Start reading the data. |
| 551 TestInt64CompletionCallback callback64; | 558 TestInt64CompletionCallback callback64; |
| 552 EXPECT_EQ(ERR_IO_PENDING, stream_->Seek(0, callback64.callback())); | 559 EXPECT_THAT(stream_->Seek(0, callback64.callback()), |
| 560 IsError(ERR_IO_PENDING)); |
| 553 { | 561 { |
| 554 base::MessageLoop::ScopedNestableTaskAllower allow( | 562 base::MessageLoop::ScopedNestableTaskAllower allow( |
| 555 base::MessageLoop::current()); | 563 base::MessageLoop::current()); |
| 556 EXPECT_LE(0, callback64.WaitForResult()); | 564 EXPECT_LE(0, callback64.WaitForResult()); |
| 557 } | 565 } |
| 558 } | 566 } |
| 559 | 567 |
| 560 result_ = *total_bytes_written_; | 568 result_ = *total_bytes_written_; |
| 561 have_result_ = true; | 569 have_result_ = true; |
| 562 if (waiting_for_result_) | 570 if (waiting_for_result_) |
| (...skipping 17 matching lines...) Expand all Loading... |
| 580 TEST_F(FileStreamTest, WriteRead) { | 588 TEST_F(FileStreamTest, WriteRead) { |
| 581 int64_t file_size; | 589 int64_t file_size; |
| 582 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 590 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 583 | 591 |
| 584 std::unique_ptr<FileStream> stream( | 592 std::unique_ptr<FileStream> stream( |
| 585 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 593 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
| 586 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 594 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
| 587 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; | 595 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; |
| 588 TestCompletionCallback open_callback; | 596 TestCompletionCallback open_callback; |
| 589 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); | 597 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); |
| 590 EXPECT_EQ(ERR_IO_PENDING, rv); | 598 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 591 EXPECT_EQ(OK, open_callback.WaitForResult()); | 599 EXPECT_THAT(open_callback.WaitForResult(), IsOk()); |
| 592 | 600 |
| 593 TestInt64CompletionCallback callback64; | 601 TestInt64CompletionCallback callback64; |
| 594 EXPECT_EQ(ERR_IO_PENDING, stream->Seek(file_size, callback64.callback())); | 602 EXPECT_THAT(stream->Seek(file_size, callback64.callback()), |
| 603 IsError(ERR_IO_PENDING)); |
| 595 EXPECT_EQ(file_size, callback64.WaitForResult()); | 604 EXPECT_EQ(file_size, callback64.WaitForResult()); |
| 596 | 605 |
| 597 int total_bytes_written = 0; | 606 int total_bytes_written = 0; |
| 598 int total_bytes_read = 0; | 607 int total_bytes_read = 0; |
| 599 std::string data_read; | 608 std::string data_read; |
| 600 TestWriteReadCompletionCallback callback(stream.get(), &total_bytes_written, | 609 TestWriteReadCompletionCallback callback(stream.get(), &total_bytes_written, |
| 601 &total_bytes_read, &data_read); | 610 &total_bytes_read, &data_read); |
| 602 | 611 |
| 603 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); | 612 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); |
| 604 rv = stream->Write(buf.get(), buf->size(), callback.callback()); | 613 rv = stream->Write(buf.get(), buf->size(), callback.callback()); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 686 TEST_F(FileStreamTest, WriteClose) { | 695 TEST_F(FileStreamTest, WriteClose) { |
| 687 int64_t file_size; | 696 int64_t file_size; |
| 688 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 697 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 689 | 698 |
| 690 std::unique_ptr<FileStream> stream( | 699 std::unique_ptr<FileStream> stream( |
| 691 new FileStream(base::ThreadTaskRunnerHandle::Get())); | 700 new FileStream(base::ThreadTaskRunnerHandle::Get())); |
| 692 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 701 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
| 693 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; | 702 base::File::FLAG_WRITE | base::File::FLAG_ASYNC; |
| 694 TestCompletionCallback open_callback; | 703 TestCompletionCallback open_callback; |
| 695 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); | 704 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); |
| 696 EXPECT_EQ(ERR_IO_PENDING, rv); | 705 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 697 EXPECT_EQ(OK, open_callback.WaitForResult()); | 706 EXPECT_THAT(open_callback.WaitForResult(), IsOk()); |
| 698 | 707 |
| 699 TestInt64CompletionCallback callback64; | 708 TestInt64CompletionCallback callback64; |
| 700 EXPECT_EQ(ERR_IO_PENDING, stream->Seek(file_size, callback64.callback())); | 709 EXPECT_THAT(stream->Seek(file_size, callback64.callback()), |
| 710 IsError(ERR_IO_PENDING)); |
| 701 EXPECT_EQ(file_size, callback64.WaitForResult()); | 711 EXPECT_EQ(file_size, callback64.WaitForResult()); |
| 702 | 712 |
| 703 int total_bytes_written = 0; | 713 int total_bytes_written = 0; |
| 704 TestWriteCloseCompletionCallback callback(stream.get(), &total_bytes_written); | 714 TestWriteCloseCompletionCallback callback(stream.get(), &total_bytes_written); |
| 705 | 715 |
| 706 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); | 716 scoped_refptr<IOBufferWithSize> buf = CreateTestDataBuffer(); |
| 707 rv = stream->Write(buf.get(), buf->size(), callback.callback()); | 717 rv = stream->Write(buf.get(), buf->size(), callback.callback()); |
| 708 if (rv == ERR_IO_PENDING) | 718 if (rv == ERR_IO_PENDING) |
| 709 total_bytes_written = callback.WaitForResult(); | 719 total_bytes_written = callback.WaitForResult(); |
| 710 EXPECT_LT(0, total_bytes_written); | 720 EXPECT_LT(0, total_bytes_written); |
| 711 EXPECT_EQ(kTestDataSize, total_bytes_written); | 721 EXPECT_EQ(kTestDataSize, total_bytes_written); |
| 712 | 722 |
| 713 stream.reset(); | 723 stream.reset(); |
| 714 | 724 |
| 715 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); | 725 EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size)); |
| 716 EXPECT_EQ(kTestDataSize * 2, file_size); | 726 EXPECT_EQ(kTestDataSize * 2, file_size); |
| 717 } | 727 } |
| 718 | 728 |
| 719 TEST_F(FileStreamTest, OpenAndDelete) { | 729 TEST_F(FileStreamTest, OpenAndDelete) { |
| 720 base::SequencedWorkerPoolOwner pool_owner(1, "StreamTest"); | 730 base::SequencedWorkerPoolOwner pool_owner(1, "StreamTest"); |
| 721 | 731 |
| 722 bool prev = base::ThreadRestrictions::SetIOAllowed(false); | 732 bool prev = base::ThreadRestrictions::SetIOAllowed(false); |
| 723 std::unique_ptr<FileStream> stream(new FileStream(pool_owner.pool())); | 733 std::unique_ptr<FileStream> stream(new FileStream(pool_owner.pool())); |
| 724 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE | | 734 int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE | |
| 725 base::File::FLAG_ASYNC; | 735 base::File::FLAG_ASYNC; |
| 726 TestCompletionCallback open_callback; | 736 TestCompletionCallback open_callback; |
| 727 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); | 737 int rv = stream->Open(temp_file_path(), flags, open_callback.callback()); |
| 728 EXPECT_EQ(ERR_IO_PENDING, rv); | 738 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 729 | 739 |
| 730 // Delete the stream without waiting for the open operation to be | 740 // Delete the stream without waiting for the open operation to be |
| 731 // complete. Should be safe. | 741 // complete. Should be safe. |
| 732 stream.reset(); | 742 stream.reset(); |
| 733 | 743 |
| 734 // Force an operation through the pool. | 744 // Force an operation through the pool. |
| 735 std::unique_ptr<FileStream> stream2(new FileStream(pool_owner.pool())); | 745 std::unique_ptr<FileStream> stream2(new FileStream(pool_owner.pool())); |
| 736 TestCompletionCallback open_callback2; | 746 TestCompletionCallback open_callback2; |
| 737 rv = stream2->Open(temp_file_path(), flags, open_callback2.callback()); | 747 rv = stream2->Open(temp_file_path(), flags, open_callback2.callback()); |
| 738 EXPECT_EQ(OK, open_callback2.GetResult(rv)); | 748 EXPECT_THAT(open_callback2.GetResult(rv), IsOk()); |
| 739 stream2.reset(); | 749 stream2.reset(); |
| 740 | 750 |
| 741 // open_callback won't be called. | 751 // open_callback won't be called. |
| 742 base::RunLoop().RunUntilIdle(); | 752 base::RunLoop().RunUntilIdle(); |
| 743 EXPECT_FALSE(open_callback.have_result()); | 753 EXPECT_FALSE(open_callback.have_result()); |
| 744 base::ThreadRestrictions::SetIOAllowed(prev); | 754 base::ThreadRestrictions::SetIOAllowed(prev); |
| 745 } | 755 } |
| 746 | 756 |
| 747 // Verify that Write() errors are mapped correctly. | 757 // Verify that Write() errors are mapped correctly. |
| 748 TEST_F(FileStreamTest, WriteError) { | 758 TEST_F(FileStreamTest, WriteError) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 809 EXPECT_TRUE(base::PathExists(path)); | 819 EXPECT_TRUE(base::PathExists(path)); |
| 810 int64_t file_size; | 820 int64_t file_size; |
| 811 EXPECT_TRUE(base::GetFileSize(path, &file_size)); | 821 EXPECT_TRUE(base::GetFileSize(path, &file_size)); |
| 812 EXPECT_LT(0, file_size); | 822 EXPECT_LT(0, file_size); |
| 813 | 823 |
| 814 FileStream stream(base::ThreadTaskRunnerHandle::Get()); | 824 FileStream stream(base::ThreadTaskRunnerHandle::Get()); |
| 815 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | | 825 int flags = base::File::FLAG_OPEN | base::File::FLAG_READ | |
| 816 base::File::FLAG_ASYNC; | 826 base::File::FLAG_ASYNC; |
| 817 TestCompletionCallback callback; | 827 TestCompletionCallback callback; |
| 818 int rv = stream.Open(path, flags, callback.callback()); | 828 int rv = stream.Open(path, flags, callback.callback()); |
| 819 EXPECT_EQ(ERR_IO_PENDING, rv); | 829 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 820 EXPECT_EQ(OK, callback.WaitForResult()); | 830 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 821 | 831 |
| 822 int total_bytes_read = 0; | 832 int total_bytes_read = 0; |
| 823 | 833 |
| 824 std::string data_read; | 834 std::string data_read; |
| 825 for (;;) { | 835 for (;;) { |
| 826 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); | 836 scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4); |
| 827 rv = stream.Read(buf.get(), buf->size(), callback.callback()); | 837 rv = stream.Read(buf.get(), buf->size(), callback.callback()); |
| 828 if (rv == ERR_IO_PENDING) | 838 if (rv == ERR_IO_PENDING) |
| 829 rv = callback.WaitForResult(); | 839 rv = callback.WaitForResult(); |
| 830 EXPECT_LE(0, rv); | 840 EXPECT_LE(0, rv); |
| 831 if (rv <= 0) | 841 if (rv <= 0) |
| 832 break; | 842 break; |
| 833 total_bytes_read += rv; | 843 total_bytes_read += rv; |
| 834 data_read.append(buf->data(), rv); | 844 data_read.append(buf->data(), rv); |
| 835 } | 845 } |
| 836 EXPECT_EQ(file_size, total_bytes_read); | 846 EXPECT_EQ(file_size, total_bytes_read); |
| 837 } | 847 } |
| 838 #endif | 848 #endif |
| 839 | 849 |
| 840 } // namespace | 850 } // namespace |
| 841 | 851 |
| 842 } // namespace net | 852 } // namespace net |
| OLD | NEW |