| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | |
| 7 #include <limits> | 6 #include <limits> |
| 8 #include <string> | 7 #include <string> |
| 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/bind_helpers.h" | 12 #include "base/bind_helpers.h" |
| 13 #include "base/files/scoped_temp_dir.h" | 13 #include "base/files/scoped_temp_dir.h" |
| 14 #include "base/location.h" | 14 #include "base/location.h" |
| 15 #include "base/macros.h" | 15 #include "base/macros.h" |
| 16 #include "base/memory/weak_ptr.h" | 16 #include "base/memory/weak_ptr.h" |
| 17 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
| 18 #include "base/single_thread_task_runner.h" | 18 #include "base/single_thread_task_runner.h" |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 } | 277 } |
| 278 | 278 |
| 279 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) { | 279 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) { |
| 280 const GURL kBlobURL("blob:nolimit"); | 280 const GURL kBlobURL("blob:nolimit"); |
| 281 content_ = kData; | 281 content_ = kData; |
| 282 | 282 |
| 283 PrepareForWrite("test", kBlobURL, 0, std::numeric_limits<int64_t>::max()); | 283 PrepareForWrite("test", kBlobURL, 0, std::numeric_limits<int64_t>::max()); |
| 284 | 284 |
| 285 Result result; | 285 Result result; |
| 286 ASSERT_EQ(0, usage()); | 286 ASSERT_EQ(0, usage()); |
| 287 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 287 file_writer_delegate_->Start(std::move(request_), GetWriteCallback(&result)); |
| 288 base::MessageLoop::current()->Run(); | 288 base::MessageLoop::current()->Run(); |
| 289 | 289 |
| 290 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 290 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 291 file_writer_delegate_.reset(); | 291 file_writer_delegate_.reset(); |
| 292 | 292 |
| 293 ASSERT_EQ(kDataSize, usage()); | 293 ASSERT_EQ(kDataSize, usage()); |
| 294 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 294 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 295 EXPECT_EQ(kDataSize, result.bytes_written()); | 295 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 296 EXPECT_EQ(base::File::FILE_OK, result.status()); | 296 EXPECT_EQ(base::File::FILE_OK, result.status()); |
| 297 } | 297 } |
| 298 | 298 |
| 299 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) { | 299 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) { |
| 300 const GURL kBlobURL("blob:just"); | 300 const GURL kBlobURL("blob:just"); |
| 301 content_ = kData; | 301 content_ = kData; |
| 302 const int64_t kAllowedGrowth = kDataSize; | 302 const int64_t kAllowedGrowth = kDataSize; |
| 303 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 303 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); |
| 304 | 304 |
| 305 Result result; | 305 Result result; |
| 306 ASSERT_EQ(0, usage()); | 306 ASSERT_EQ(0, usage()); |
| 307 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 307 file_writer_delegate_->Start(std::move(request_), GetWriteCallback(&result)); |
| 308 base::MessageLoop::current()->Run(); | 308 base::MessageLoop::current()->Run(); |
| 309 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 309 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 310 file_writer_delegate_.reset(); | 310 file_writer_delegate_.reset(); |
| 311 | 311 |
| 312 ASSERT_EQ(kAllowedGrowth, usage()); | 312 ASSERT_EQ(kAllowedGrowth, usage()); |
| 313 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 313 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 314 | 314 |
| 315 EXPECT_EQ(kAllowedGrowth, result.bytes_written()); | 315 EXPECT_EQ(kAllowedGrowth, result.bytes_written()); |
| 316 EXPECT_EQ(base::File::FILE_OK, result.status()); | 316 EXPECT_EQ(base::File::FILE_OK, result.status()); |
| 317 } | 317 } |
| 318 | 318 |
| 319 TEST_F(FileWriterDelegateTest, DISABLED_WriteFailureByQuota) { | 319 TEST_F(FileWriterDelegateTest, DISABLED_WriteFailureByQuota) { |
| 320 const GURL kBlobURL("blob:failure"); | 320 const GURL kBlobURL("blob:failure"); |
| 321 content_ = kData; | 321 content_ = kData; |
| 322 const int64_t kAllowedGrowth = kDataSize - 1; | 322 const int64_t kAllowedGrowth = kDataSize - 1; |
| 323 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 323 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); |
| 324 | 324 |
| 325 Result result; | 325 Result result; |
| 326 ASSERT_EQ(0, usage()); | 326 ASSERT_EQ(0, usage()); |
| 327 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 327 file_writer_delegate_->Start(std::move(request_), GetWriteCallback(&result)); |
| 328 base::MessageLoop::current()->Run(); | 328 base::MessageLoop::current()->Run(); |
| 329 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); | 329 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); |
| 330 file_writer_delegate_.reset(); | 330 file_writer_delegate_.reset(); |
| 331 | 331 |
| 332 ASSERT_EQ(kAllowedGrowth, usage()); | 332 ASSERT_EQ(kAllowedGrowth, usage()); |
| 333 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 333 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 334 | 334 |
| 335 EXPECT_EQ(kAllowedGrowth, result.bytes_written()); | 335 EXPECT_EQ(kAllowedGrowth, result.bytes_written()); |
| 336 EXPECT_EQ(base::File::FILE_ERROR_NO_SPACE, result.status()); | 336 EXPECT_EQ(base::File::FILE_ERROR_NO_SPACE, result.status()); |
| 337 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); | 337 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); |
| 338 } | 338 } |
| 339 | 339 |
| 340 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) { | 340 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) { |
| 341 const GURL kBlobURL("blob:zero"); | 341 const GURL kBlobURL("blob:zero"); |
| 342 content_ = ""; | 342 content_ = ""; |
| 343 int64_t kAllowedGrowth = 0; | 343 int64_t kAllowedGrowth = 0; |
| 344 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 344 PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); |
| 345 | 345 |
| 346 Result result; | 346 Result result; |
| 347 ASSERT_EQ(0, usage()); | 347 ASSERT_EQ(0, usage()); |
| 348 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 348 file_writer_delegate_->Start(std::move(request_), GetWriteCallback(&result)); |
| 349 base::MessageLoop::current()->Run(); | 349 base::MessageLoop::current()->Run(); |
| 350 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 350 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 351 file_writer_delegate_.reset(); | 351 file_writer_delegate_.reset(); |
| 352 | 352 |
| 353 ASSERT_EQ(kAllowedGrowth, usage()); | 353 ASSERT_EQ(kAllowedGrowth, usage()); |
| 354 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 354 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 355 | 355 |
| 356 EXPECT_EQ(kAllowedGrowth, result.bytes_written()); | 356 EXPECT_EQ(kAllowedGrowth, result.bytes_written()); |
| 357 EXPECT_EQ(base::File::FILE_OK, result.status()); | 357 EXPECT_EQ(base::File::FILE_OK, result.status()); |
| 358 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 358 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 373 PrepareForWrite("test", kBlobURL, 0, std::numeric_limits<int64_t>::max()); | 373 PrepareForWrite("test", kBlobURL, 0, std::numeric_limits<int64_t>::max()); |
| 374 | 374 |
| 375 // Credate another FileWriterDelegate for concurrent write. | 375 // Credate another FileWriterDelegate for concurrent write. |
| 376 file_writer_delegate2.reset( | 376 file_writer_delegate2.reset( |
| 377 CreateWriterDelegate("test2", 0, std::numeric_limits<int64_t>::max())); | 377 CreateWriterDelegate("test2", 0, std::numeric_limits<int64_t>::max())); |
| 378 request2 = empty_context_.CreateRequest( | 378 request2 = empty_context_.CreateRequest( |
| 379 kBlobURL2, net::DEFAULT_PRIORITY, file_writer_delegate2.get()); | 379 kBlobURL2, net::DEFAULT_PRIORITY, file_writer_delegate2.get()); |
| 380 | 380 |
| 381 Result result, result2; | 381 Result result, result2; |
| 382 ASSERT_EQ(0, usage()); | 382 ASSERT_EQ(0, usage()); |
| 383 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 383 file_writer_delegate_->Start(std::move(request_), GetWriteCallback(&result)); |
| 384 file_writer_delegate2->Start(request2.Pass(), GetWriteCallback(&result2)); | 384 file_writer_delegate2->Start(std::move(request2), GetWriteCallback(&result2)); |
| 385 base::MessageLoop::current()->Run(); | 385 base::MessageLoop::current()->Run(); |
| 386 if (result.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING || | 386 if (result.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING || |
| 387 result2.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING) | 387 result2.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING) |
| 388 base::MessageLoop::current()->Run(); | 388 base::MessageLoop::current()->Run(); |
| 389 | 389 |
| 390 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 390 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 391 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result2.write_status()); | 391 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result2.write_status()); |
| 392 file_writer_delegate_.reset(); | 392 file_writer_delegate_.reset(); |
| 393 file_writer_delegate2.reset(); | 393 file_writer_delegate2.reset(); |
| 394 | 394 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 407 | 407 |
| 408 // Writing kDataSize (=45) bytes data while allowed_growth is 100. | 408 // Writing kDataSize (=45) bytes data while allowed_growth is 100. |
| 409 int64_t offset = 0; | 409 int64_t offset = 0; |
| 410 int64_t allowed_growth = 100; | 410 int64_t allowed_growth = 100; |
| 411 ASSERT_LT(kDataSize, allowed_growth); | 411 ASSERT_LT(kDataSize, allowed_growth); |
| 412 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 412 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 413 | 413 |
| 414 { | 414 { |
| 415 Result result; | 415 Result result; |
| 416 ASSERT_EQ(0, usage()); | 416 ASSERT_EQ(0, usage()); |
| 417 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 417 file_writer_delegate_->Start(std::move(request_), |
| 418 GetWriteCallback(&result)); |
| 418 base::MessageLoop::current()->Run(); | 419 base::MessageLoop::current()->Run(); |
| 419 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 420 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 420 file_writer_delegate_.reset(); | 421 file_writer_delegate_.reset(); |
| 421 | 422 |
| 422 ASSERT_EQ(kDataSize, usage()); | 423 ASSERT_EQ(kDataSize, usage()); |
| 423 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 424 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 424 EXPECT_EQ(kDataSize, result.bytes_written()); | 425 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 425 EXPECT_EQ(base::File::FILE_OK, result.status()); | 426 EXPECT_EQ(base::File::FILE_OK, result.status()); |
| 426 } | 427 } |
| 427 | 428 |
| 428 // Trying to overwrite kDataSize bytes data while allowed_growth is 20. | 429 // Trying to overwrite kDataSize bytes data while allowed_growth is 20. |
| 429 offset = 0; | 430 offset = 0; |
| 430 allowed_growth = 20; | 431 allowed_growth = 20; |
| 431 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 432 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 432 | 433 |
| 433 { | 434 { |
| 434 Result result; | 435 Result result; |
| 435 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 436 file_writer_delegate_->Start(std::move(request_), |
| 437 GetWriteCallback(&result)); |
| 436 base::MessageLoop::current()->Run(); | 438 base::MessageLoop::current()->Run(); |
| 437 EXPECT_EQ(kDataSize, usage()); | 439 EXPECT_EQ(kDataSize, usage()); |
| 438 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 440 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 439 EXPECT_EQ(kDataSize, result.bytes_written()); | 441 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 440 EXPECT_EQ(base::File::FILE_OK, result.status()); | 442 EXPECT_EQ(base::File::FILE_OK, result.status()); |
| 441 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 443 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 442 } | 444 } |
| 443 | 445 |
| 444 // Trying to write kDataSize bytes data from offset 25 while | 446 // Trying to write kDataSize bytes data from offset 25 while |
| 445 // allowed_growth is 55. | 447 // allowed_growth is 55. |
| 446 offset = 25; | 448 offset = 25; |
| 447 allowed_growth = 55; | 449 allowed_growth = 55; |
| 448 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 450 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 449 | 451 |
| 450 { | 452 { |
| 451 Result result; | 453 Result result; |
| 452 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 454 file_writer_delegate_->Start(std::move(request_), |
| 455 GetWriteCallback(&result)); |
| 453 base::MessageLoop::current()->Run(); | 456 base::MessageLoop::current()->Run(); |
| 454 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 457 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 455 file_writer_delegate_.reset(); | 458 file_writer_delegate_.reset(); |
| 456 | 459 |
| 457 EXPECT_EQ(offset + kDataSize, usage()); | 460 EXPECT_EQ(offset + kDataSize, usage()); |
| 458 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 461 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 459 EXPECT_EQ(kDataSize, result.bytes_written()); | 462 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 460 EXPECT_EQ(base::File::FILE_OK, result.status()); | 463 EXPECT_EQ(base::File::FILE_OK, result.status()); |
| 461 } | 464 } |
| 462 | 465 |
| 463 // Trying to overwrite 45 bytes data while allowed_growth is -20. | 466 // Trying to overwrite 45 bytes data while allowed_growth is -20. |
| 464 offset = 0; | 467 offset = 0; |
| 465 allowed_growth = -20; | 468 allowed_growth = -20; |
| 466 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 469 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 467 int64_t pre_write_usage = GetFileSizeOnDisk("test"); | 470 int64_t pre_write_usage = GetFileSizeOnDisk("test"); |
| 468 | 471 |
| 469 { | 472 { |
| 470 Result result; | 473 Result result; |
| 471 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 474 file_writer_delegate_->Start(std::move(request_), |
| 475 GetWriteCallback(&result)); |
| 472 base::MessageLoop::current()->Run(); | 476 base::MessageLoop::current()->Run(); |
| 473 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 477 ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); |
| 474 file_writer_delegate_.reset(); | 478 file_writer_delegate_.reset(); |
| 475 | 479 |
| 476 EXPECT_EQ(pre_write_usage, usage()); | 480 EXPECT_EQ(pre_write_usage, usage()); |
| 477 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 481 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 478 EXPECT_EQ(kDataSize, result.bytes_written()); | 482 EXPECT_EQ(kDataSize, result.bytes_written()); |
| 479 EXPECT_EQ(base::File::FILE_OK, result.status()); | 483 EXPECT_EQ(base::File::FILE_OK, result.status()); |
| 480 } | 484 } |
| 481 | 485 |
| 482 // Trying to overwrite 45 bytes data with offset pre_write_usage - 20, | 486 // Trying to overwrite 45 bytes data with offset pre_write_usage - 20, |
| 483 // while allowed_growth is 10. | 487 // while allowed_growth is 10. |
| 484 const int kOverlap = 20; | 488 const int kOverlap = 20; |
| 485 offset = pre_write_usage - kOverlap; | 489 offset = pre_write_usage - kOverlap; |
| 486 allowed_growth = 10; | 490 allowed_growth = 10; |
| 487 PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 491 PrepareForWrite("test", kBlobURL, offset, allowed_growth); |
| 488 | 492 |
| 489 { | 493 { |
| 490 Result result; | 494 Result result; |
| 491 file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 495 file_writer_delegate_->Start(std::move(request_), |
| 496 GetWriteCallback(&result)); |
| 492 base::MessageLoop::current()->Run(); | 497 base::MessageLoop::current()->Run(); |
| 493 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); | 498 ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); |
| 494 file_writer_delegate_.reset(); | 499 file_writer_delegate_.reset(); |
| 495 | 500 |
| 496 EXPECT_EQ(pre_write_usage + allowed_growth, usage()); | 501 EXPECT_EQ(pre_write_usage + allowed_growth, usage()); |
| 497 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 502 EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); |
| 498 EXPECT_EQ(kOverlap + allowed_growth, result.bytes_written()); | 503 EXPECT_EQ(kOverlap + allowed_growth, result.bytes_written()); |
| 499 EXPECT_EQ(base::File::FILE_ERROR_NO_SPACE, result.status()); | 504 EXPECT_EQ(base::File::FILE_ERROR_NO_SPACE, result.status()); |
| 500 } | 505 } |
| 501 } | 506 } |
| 502 | 507 |
| 503 } // namespace content | 508 } // namespace content |
| OLD | NEW |