| 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "webkit/browser/fileapi/mock_file_system_context.h" | 26 #include "webkit/browser/fileapi/mock_file_system_context.h" |
| 27 #include "webkit/browser/fileapi/sandbox_file_stream_writer.h" | 27 #include "webkit/browser/fileapi/sandbox_file_stream_writer.h" |
| 28 | 28 |
| 29 namespace fileapi { | 29 namespace fileapi { |
| 30 | 30 |
| 31 namespace { | 31 namespace { |
| 32 | 32 |
| 33 const GURL kOrigin("http://example.com"); | 33 const GURL kOrigin("http://example.com"); |
| 34 const FileSystemType kFileSystemType = kFileSystemTypeTest; | 34 const FileSystemType kFileSystemType = kFileSystemTypeTest; |
| 35 | 35 |
| 36 const char kData[] = "The quick brown fox jumps over the lazy dog.\n"; |
| 37 const int kDataSize = ARRAYSIZE_UNSAFE(kData) - 1; |
| 38 |
| 36 class Result { | 39 class Result { |
| 37 public: | 40 public: |
| 38 Result() | 41 Result() |
| 39 : status_(base::PLATFORM_FILE_OK), | 42 : status_(base::PLATFORM_FILE_OK), |
| 40 bytes_written_(0), | 43 bytes_written_(0), |
| 41 write_status_(FileWriterDelegate::SUCCESS_IO_PENDING) {} | 44 write_status_(FileWriterDelegate::SUCCESS_IO_PENDING) {} |
| 42 | 45 |
| 43 base::PlatformFileError status() const { return status_; } | 46 base::PlatformFileError status() const { return status_; } |
| 44 int64 bytes_written() const { return bytes_written_; } | 47 int64 bytes_written() const { return bytes_written_; } |
| 45 FileWriterDelegate::WriteProgressStatus write_status() const { | 48 FileWriterDelegate::WriteProgressStatus write_status() const { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 60 } | 63 } |
| 61 } | 64 } |
| 62 | 65 |
| 63 private: | 66 private: |
| 64 // For post-operation status. | 67 // For post-operation status. |
| 65 base::PlatformFileError status_; | 68 base::PlatformFileError status_; |
| 66 int64 bytes_written_; | 69 int64 bytes_written_; |
| 67 FileWriterDelegate::WriteProgressStatus write_status_; | 70 FileWriterDelegate::WriteProgressStatus write_status_; |
| 68 }; | 71 }; |
| 69 | 72 |
| 70 const char kData[] = "The quick brown fox jumps over the lazy dog.\n"; | |
| 71 const int kDataSize = ARRAYSIZE_UNSAFE(kData) - 1; | |
| 72 | |
| 73 } // namespace (anonymous) | 73 } // namespace (anonymous) |
| 74 | 74 |
| 75 class FileWriterDelegateTest : public PlatformTest { | 75 class FileWriterDelegateTest : public PlatformTest { |
| 76 public: | 76 public: |
| 77 FileWriterDelegateTest() | 77 FileWriterDelegateTest() |
| 78 : loop_(base::MessageLoop::TYPE_IO) {} | 78 : loop_(base::MessageLoop::TYPE_IO) {} |
| 79 | 79 |
| 80 protected: | 80 protected: |
| 81 virtual void SetUp() OVERRIDE; | 81 virtual void SetUp() OVERRIDE; |
| 82 virtual void TearDown() OVERRIDE; | 82 virtual void TearDown() OVERRIDE; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 new FileSystemOperationContext(file_system_context_.get()); | 116 new FileSystemOperationContext(file_system_context_.get()); |
| 117 context->set_update_observers( | 117 context->set_update_observers( |
| 118 *file_system_context_->GetUpdateObservers(kFileSystemType)); | 118 *file_system_context_->GetUpdateObservers(kFileSystemType)); |
| 119 context->set_root_path(dir_.path()); | 119 context->set_root_path(dir_.path()); |
| 120 return make_scoped_ptr(context); | 120 return make_scoped_ptr(context); |
| 121 } | 121 } |
| 122 | 122 |
| 123 FileWriterDelegate* CreateWriterDelegate( | 123 FileWriterDelegate* CreateWriterDelegate( |
| 124 const char* test_file_path, | 124 const char* test_file_path, |
| 125 int64 offset, | 125 int64 offset, |
| 126 int64 allowed_growth, | 126 int64 allowed_growth) { |
| 127 Result* result) { | |
| 128 SandboxFileStreamWriter* writer = new SandboxFileStreamWriter( | 127 SandboxFileStreamWriter* writer = new SandboxFileStreamWriter( |
| 129 file_system_context_.get(), | 128 file_system_context_.get(), |
| 130 GetFileSystemURL(test_file_path), | 129 GetFileSystemURL(test_file_path), |
| 131 offset, | 130 offset, |
| 132 *file_system_context_->GetUpdateObservers(kFileSystemType)); | 131 *file_system_context_->GetUpdateObservers(kFileSystemType)); |
| 133 writer->set_default_quota(allowed_growth); | 132 writer->set_default_quota(allowed_growth); |
| 134 return new FileWriterDelegate( | 133 return new FileWriterDelegate(scoped_ptr<FileStreamWriter>(writer)); |
| 135 base::Bind(&Result::DidWrite, base::Unretained(result)), | 134 } |
| 136 scoped_ptr<FileStreamWriter>(writer)); | 135 |
| 136 FileWriterDelegate::DelegateWriteCallback GetWriteCallback(Result* result) { |
| 137 return base::Bind(&Result::DidWrite, base::Unretained(result)); |
| 137 } | 138 } |
| 138 | 139 |
| 139 // Creates and sets up a FileWriterDelegate for writing the given |blob_url|, | 140 // Creates and sets up a FileWriterDelegate for writing the given |blob_url|, |
| 140 // and creates a new FileWriterDelegate for the file. | 141 // and creates a new FileWriterDelegate for the file. |
| 141 void PrepareForWrite(const char* test_file_path, | 142 void PrepareForWrite(const char* test_file_path, |
| 142 const GURL& blob_url, | 143 const GURL& blob_url, |
| 143 int64 offset, | 144 int64 offset, |
| 144 int64 allowed_growth) { | 145 int64 allowed_growth) { |
| 145 result_.reset(new Result()); | |
| 146 file_writer_delegate_.reset( | 146 file_writer_delegate_.reset( |
| 147 CreateWriterDelegate(test_file_path, offset, allowed_growth, | 147 CreateWriterDelegate(test_file_path, offset, allowed_growth)); |
| 148 result_.get())); | |
| 149 request_.reset(empty_context_.CreateRequest( | 148 request_.reset(empty_context_.CreateRequest( |
| 150 blob_url, file_writer_delegate_.get())); | 149 blob_url, file_writer_delegate_.get())); |
| 151 } | 150 } |
| 152 | 151 |
| 153 static net::URLRequest::ProtocolFactory Factory; | 152 static net::URLRequest::ProtocolFactory Factory; |
| 154 | 153 |
| 155 // This should be alive until the very end of this instance. | 154 // This should be alive until the very end of this instance. |
| 156 base::MessageLoop loop_; | 155 base::MessageLoop loop_; |
| 157 | 156 |
| 158 scoped_refptr<FileSystemContext> file_system_context_; | 157 scoped_refptr<FileSystemContext> file_system_context_; |
| 159 | 158 |
| 160 net::URLRequestContext empty_context_; | 159 net::URLRequestContext empty_context_; |
| 161 scoped_ptr<FileWriterDelegate> file_writer_delegate_; | 160 scoped_ptr<FileWriterDelegate> file_writer_delegate_; |
| 162 scoped_ptr<net::URLRequest> request_; | 161 scoped_ptr<net::URLRequest> request_; |
| 163 scoped_ptr<Result> result_; | |
| 164 | 162 |
| 165 base::ScopedTempDir dir_; | 163 base::ScopedTempDir dir_; |
| 166 | 164 |
| 167 static const char* content_; | 165 static const char* content_; |
| 168 }; | 166 }; |
| 169 | 167 |
| 170 const char* FileWriterDelegateTest::content_ = NULL; | 168 const char* FileWriterDelegateTest::content_ = NULL; |
| 171 | 169 |
| 172 namespace { | 170 namespace { |
| 173 | 171 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 file_system_context_ = NULL; | 250 file_system_context_ = NULL; |
| 253 base::MessageLoop::current()->RunUntilIdle(); | 251 base::MessageLoop::current()->RunUntilIdle(); |
| 254 } | 252 } |
| 255 | 253 |
| 256 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) { | 254 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) { |
| 257 const GURL kBlobURL("blob:nolimit"); | 255 const GURL kBlobURL("blob:nolimit"); |
| 258 content_ = kData; | 256 content_ = kData; |
| 259 | 257 |
| 260 PrepareForWrite("test", kBlobURL, 0, kint64max); | 258 PrepareForWrite("test", kBlobURL, 0, kint64max); |
| 261 | 259 |
| 260 Result result; |
| 262 ASSERT_EQ(0, usage()); | 261 ASSERT_EQ(0, usage()); |
| 263 file_writer_delegate_->Start(request_.Pass()); | 262 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 264 base::MessageLoop::current()->Run(); | 263 base::MessageLoop::current()->Run(); |
| 265 | 264 |
| 266 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 265 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 267 file_writer_delegate_.reset(); | 266 file_writer_delegate_.reset(); |
| 268 | 267 |
| 269 ASSERT_EQ(kDataSize, usage()); | 268 ASSERT_EQ(kDataSize, usage()); |
| 270 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 269 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 271 EXPECT_EQ(kDataSize, result_->bytes_written()); | 270 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 272 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 271 EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); |
| 273 } | 272 } |
| 274 | 273 |
| 275 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) { | 274 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) { |
| 276 const GURL kBlobURL("blob:just"); | 275 const GURL kBlobURL("blob:just"); |
| 277 content_ = kData; | 276 content_ = kData; |
| 278 const int64 kAllowedGrowth = kDataSize; | 277 const int64 kAllowedGrowth = kDataSize; |
| 279 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 278 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); |
| 280 | 279 |
| 280 Result result; |
| 281 ASSERT_EQ(0, usage()); | 281 ASSERT_EQ(0, usage()); |
| 282 file_writer_delegate_->Start(request_.Pass()); | 282 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 283 base::MessageLoop::current()->Run(); | 283 base::MessageLoop::current()->Run(); |
| 284 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 284 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 285 file_writer_delegate_.reset(); | 285 file_writer_delegate_.reset(); |
| 286 | 286 |
| 287 ASSERT_EQ(kAllowedGrowth, usage()); | 287 ASSERT_EQ(kAllowedGrowth, usage()); |
| 288 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 288 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 289 | 289 |
| 290 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); | 290 EXPECT_EQ(kAllowedGrowth, result.bytes_written()); |
| 291 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 291 EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); |
| 292 } | 292 } |
| 293 | 293 |
| 294 TEST_F(FileWriterDelegateTest, DISABLED_WriteFailureByQuota) { | 294 TEST_F(FileWriterDelegateTest, DISABLED_WriteFailureByQuota) { |
| 295 const GURL kBlobURL("blob:failure"); | 295 const GURL kBlobURL("blob:failure"); |
| 296 content_ = kData; | 296 content_ = kData; |
| 297 const int64 kAllowedGrowth = kDataSize - 1; | 297 const int64 kAllowedGrowth = kDataSize - 1; |
| 298 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 298 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); |
| 299 | 299 |
| 300 Result result; |
| 300 ASSERT_EQ(0, usage()); | 301 ASSERT_EQ(0, usage()); |
| 301 file_writer_delegate_->Start(request_.Pass()); | 302 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 302 base::MessageLoop::current()->Run(); | 303 base::MessageLoop::current()->Run(); |
| 303 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result_->write_status()); | 304 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); |
| 304 file_writer_delegate_.reset(); | 305 file_writer_delegate_.reset(); |
| 305 | 306 |
| 306 ASSERT_EQ(kAllowedGrowth, usage()); | 307 ASSERT_EQ(kAllowedGrowth, usage()); |
| 307 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 308 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 308 | 309 |
| 309 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); | 310 EXPECT_EQ(kAllowedGrowth, result.bytes_written()); |
| 310 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); | 311 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result.status()); |
| 311 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result_->write_status()); | 312 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); |
| 312 } | 313 } |
| 313 | 314 |
| 314 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) { | 315 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) { |
| 315 const GURL kBlobURL("blob:zero"); | 316 const GURL kBlobURL("blob:zero"); |
| 316 content_ = ""; | 317 content_ = ""; |
| 317 int64 kAllowedGrowth = 0; | 318 int64 kAllowedGrowth = 0; |
| 318 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 319 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); |
| 319 | 320 |
| 321 Result result; |
| 320 ASSERT_EQ(0, usage()); | 322 ASSERT_EQ(0, usage()); |
| 321 file_writer_delegate_->Start(request_.Pass()); | 323 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 322 base::MessageLoop::current()->Run(); | 324 base::MessageLoop::current()->Run(); |
| 323 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 325 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 324 file_writer_delegate_.reset(); | 326 file_writer_delegate_.reset(); |
| 325 | 327 |
| 326 ASSERT_EQ(kAllowedGrowth, usage()); | 328 ASSERT_EQ(kAllowedGrowth, usage()); |
| 327 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 329 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 328 | 330 |
| 329 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); | 331 EXPECT_EQ(kAllowedGrowth, result.bytes_written()); |
| 330 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 332 EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); |
| 331 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 333 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 332 } | 334 } |
| 333 | 335 |
| 334 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimitConcurrent) { | 336 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimitConcurrent) { |
| 335 scoped_ptr<FileWriterDelegate> file_writer_delegate2; | 337 scoped_ptr<FileWriterDelegate> file_writer_delegate2; |
| 336 scoped_ptr<net::URLRequest> request2; | 338 scoped_ptr<net::URLRequest> request2; |
| 337 scoped_ptr<Result> result2; | |
| 338 | 339 |
| 339 bool created = false; | 340 bool created = false; |
| 340 file_util()->EnsureFileExists(NewOperationContext().get(), | 341 file_util()->EnsureFileExists(NewOperationContext().get(), |
| 341 GetFileSystemURL("test2"), | 342 GetFileSystemURL("test2"), |
| 342 &created); | 343 &created); |
| 343 ASSERT_TRUE(created); | 344 ASSERT_TRUE(created); |
| 344 | 345 |
| 345 const GURL kBlobURL("blob:nolimitconcurrent"); | 346 const GURL kBlobURL("blob:nolimitconcurrent"); |
| 346 const GURL kBlobURL2("blob:nolimitconcurrent2"); | 347 const GURL kBlobURL2("blob:nolimitconcurrent2"); |
| 347 content_ = kData; | 348 content_ = kData; |
| 348 | 349 |
| 349 PrepareForWrite("test", kBlobURL, 0, kint64max); | 350 PrepareForWrite("test", kBlobURL, 0, kint64max); |
| 350 | 351 |
| 351 // Credate another FileWriterDelegate for concurrent write. | 352 // Credate another FileWriterDelegate for concurrent write. |
| 352 result2.reset(new Result()); | 353 file_writer_delegate2.reset(CreateWriterDelegate("test2", 0, kint64max)); |
| 353 file_writer_delegate2.reset(CreateWriterDelegate( | |
| 354 "test2", 0, kint64max, result2.get())); | |
| 355 request2.reset(empty_context_.CreateRequest( | 354 request2.reset(empty_context_.CreateRequest( |
| 356 kBlobURL2, file_writer_delegate2.get())); | 355 kBlobURL2, file_writer_delegate2.get())); |
| 357 | 356 |
| 357 Result result, result2; |
| 358 ASSERT_EQ(0, usage()); | 358 ASSERT_EQ(0, usage()); |
| 359 file_writer_delegate_->Start(request_.Pass()); | 359 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 360 file_writer_delegate2->Start(request2.Pass()); | 360 file_writer_delegate2->Start(request2.Pass(), GetWriteCallback(&result2)); |
| 361 base::MessageLoop::current()->Run(); | 361 base::MessageLoop::current()->Run(); |
| 362 if (result_->write_status() == FileWriterDelegate::SUCCESS_IO_PENDING || | 362 if (result.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING || |
| 363 result2->write_status() == FileWriterDelegate::SUCCESS_IO_PENDING) | 363 result2.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING) |
| 364 base::MessageLoop::current()->Run(); | 364 base::MessageLoop::current()->Run(); |
| 365 | 365 |
| 366 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 366 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 367 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result2->write_status()); | 367 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result2.write_status()); |
| 368 file_writer_delegate_.reset(); | 368 file_writer_delegate_.reset(); |
| 369 file_writer_delegate2.reset(); | 369 file_writer_delegate2.reset(); |
| 370 | 370 |
| 371 ASSERT_EQ(kDataSize * 2, usage()); | 371 ASSERT_EQ(kDataSize * 2, usage()); |
| 372 EXPECT_EQ(GetFileSizeOnDisk("test") + GetFileSizeOnDisk("test2"), usage()); | 372 EXPECT_EQ(GetFileSizeOnDisk("test") + GetFileSizeOnDisk("test2"), usage()); |
| 373 | 373 |
| 374 EXPECT_EQ(kDataSize, result_->bytes_written()); | 374 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 375 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 375 EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); |
| 376 EXPECT_EQ(kDataSize, result2->bytes_written()); | 376 EXPECT_EQ(kDataSize, result2.bytes_written()); |
| 377 EXPECT_EQ(base::PLATFORM_FILE_OK, result2->status()); | 377 EXPECT_EQ(base::PLATFORM_FILE_OK, result2.status()); |
| 378 } | 378 } |
| 379 | 379 |
| 380 TEST_F(FileWriterDelegateTest, WritesWithQuotaAndOffset) { | 380 TEST_F(FileWriterDelegateTest, WritesWithQuotaAndOffset) { |
| 381 const GURL kBlobURL("blob:failure-with-updated-quota"); | 381 const GURL kBlobURL("blob:failure-with-updated-quota"); |
| 382 content_ = kData; | 382 content_ = kData; |
| 383 | 383 |
| 384 // Writing kDataSize (=45) bytes data while allowed_growth is 100. | 384 // Writing kDataSize (=45) bytes data while allowed_growth is 100. |
| 385 int64 offset = 0; | 385 int64 offset = 0; |
| 386 int64 allowed_growth = 100; | 386 int64 allowed_growth = 100; |
| 387 ASSERT_LT(kDataSize, allowed_growth); | 387 ASSERT_LT(kDataSize, allowed_growth); |
| 388 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 388 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 389 | 389 |
| 390 ASSERT_EQ(0, usage()); | 390 { |
| 391 file_writer_delegate_->Start(request_.Pass()); | 391 Result result; |
| 392 base::MessageLoop::current()->Run(); | 392 ASSERT_EQ(0, usage()); |
| 393 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 393 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 394 file_writer_delegate_.reset(); | 394 base::MessageLoop::current()->Run(); |
| 395 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 396 file_writer_delegate_.reset(); |
| 395 | 397 |
| 396 ASSERT_EQ(kDataSize, usage()); | 398 ASSERT_EQ(kDataSize, usage()); |
| 397 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 399 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 398 EXPECT_EQ(kDataSize, result_->bytes_written()); | 400 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 399 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 401 EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); |
| 402 } |
| 400 | 403 |
| 401 // Trying to overwrite kDataSize bytes data while allowed_growth is 20. | 404 // Trying to overwrite kDataSize bytes data while allowed_growth is 20. |
| 402 offset = 0; | 405 offset = 0; |
| 403 allowed_growth = 20; | 406 allowed_growth = 20; |
| 404 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 407 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 405 | 408 |
| 406 file_writer_delegate_->Start(request_.Pass()); | 409 { |
| 407 base::MessageLoop::current()->Run(); | 410 Result result; |
| 408 EXPECT_EQ(kDataSize, usage()); | 411 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 409 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 412 base::MessageLoop::current()->Run(); |
| 410 EXPECT_EQ(kDataSize, result_->bytes_written()); | 413 EXPECT_EQ(kDataSize, usage()); |
| 411 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 414 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 412 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 415 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 416 EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); |
| 417 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 418 } |
| 413 | 419 |
| 414 // Trying to write kDataSize bytes data from offset 25 while | 420 // Trying to write kDataSize bytes data from offset 25 while |
| 415 // allowed_growth is 55. | 421 // allowed_growth is 55. |
| 416 offset = 25; | 422 offset = 25; |
| 417 allowed_growth = 55; | 423 allowed_growth = 55; |
| 418 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 424 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 419 | 425 |
| 420 file_writer_delegate_->Start(request_.Pass()); | 426 { |
| 421 base::MessageLoop::current()->Run(); | 427 Result result; |
| 422 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 428 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 423 file_writer_delegate_.reset(); | 429 base::MessageLoop::current()->Run(); |
| 430 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 431 file_writer_delegate_.reset(); |
| 424 | 432 |
| 425 EXPECT_EQ(offset + kDataSize, usage()); | 433 EXPECT_EQ(offset + kDataSize, usage()); |
| 426 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 434 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 427 EXPECT_EQ(kDataSize, result_->bytes_written()); | 435 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 428 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 436 EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); |
| 437 } |
| 429 | 438 |
| 430 // Trying to overwrite 45 bytes data while allowed_growth is -20. | 439 // Trying to overwrite 45 bytes data while allowed_growth is -20. |
| 431 offset = 0; | 440 offset = 0; |
| 432 allowed_growth = -20; | 441 allowed_growth = -20; |
| 433 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 442 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 443 int64 pre_write_usage = GetFileSizeOnDisk("test"); |
| 434 | 444 |
| 435 int64 pre_write_usage = GetFileSizeOnDisk("test"); | 445 { |
| 436 file_writer_delegate_->Start(request_.Pass()); | 446 Result result; |
| 437 base::MessageLoop::current()->Run(); | 447 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 438 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 448 base::MessageLoop::current()->Run(); |
| 439 file_writer_delegate_.reset(); | 449 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 450 file_writer_delegate_.reset(); |
| 440 | 451 |
| 441 EXPECT_EQ(pre_write_usage, usage()); | 452 EXPECT_EQ(pre_write_usage, usage()); |
| 442 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 453 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 443 EXPECT_EQ(kDataSize, result_->bytes_written()); | 454 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 444 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 455 EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); |
| 456 } |
| 445 | 457 |
| 446 // Trying to overwrite 45 bytes data with offset pre_write_usage - 20, | 458 // Trying to overwrite 45 bytes data with offset pre_write_usage - 20, |
| 447 // while allowed_growth is 10. | 459 // while allowed_growth is 10. |
| 448 const int kOverlap = 20; | 460 const int kOverlap = 20; |
| 449 offset = pre_write_usage - kOverlap; | 461 offset = pre_write_usage - kOverlap; |
| 450 allowed_growth = 10; | 462 allowed_growth = 10; |
| 451 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 463 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 452 | 464 |
| 453 file_writer_delegate_->Start(request_.Pass()); | 465 { |
| 454 base::MessageLoop::current()->Run(); | 466 Result result; |
| 455 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result_->write_status()); | 467 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); |
| 456 file_writer_delegate_.reset(); | 468 base::MessageLoop::current()->Run(); |
| 469 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); |
| 470 file_writer_delegate_.reset(); |
| 457 | 471 |
| 458 EXPECT_EQ(pre_write_usage + allowed_growth, | 472 EXPECT_EQ(pre_write_usage + allowed_growth, usage()); |
| 459 usage()); | 473 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 460 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 474 EXPECT_EQ(kOverlap + allowed_growth, result.bytes_written()); |
| 461 EXPECT_EQ(kOverlap + allowed_growth, result_->bytes_written()); | 475 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result.status()); |
| 462 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); | 476 } |
| 463 } | 477 } |
| 464 | 478 |
| 465 } // namespace fileapi | 479 } // namespace fileapi |
| OLD | NEW |