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 <map> | 5 #include <map> |
6 #include <queue> | 6 #include <queue> |
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/file_util.h" | 10 #include "base/file_util.h" |
11 #include "base/files/scoped_temp_dir.h" | 11 #include "base/files/scoped_temp_dir.h" |
12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
13 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
14 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
15 #include "content/public/test/async_file_test_helper.h" | 15 #include "content/public/test/async_file_test_helper.h" |
16 #include "content/public/test/test_file_system_backend.h" | 16 #include "content/public/test/test_file_system_backend.h" |
17 #include "content/public/test/test_file_system_context.h" | 17 #include "content/public/test/test_file_system_context.h" |
| 18 #include "content/test/fileapi_test_file_set.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
19 #include "webkit/browser/blob/file_stream_reader.h" | 20 #include "webkit/browser/blob/file_stream_reader.h" |
20 #include "webkit/browser/fileapi/copy_or_move_file_validator.h" | 21 #include "webkit/browser/fileapi/copy_or_move_file_validator.h" |
21 #include "webkit/browser/fileapi/copy_or_move_operation_delegate.h" | 22 #include "webkit/browser/fileapi/copy_or_move_operation_delegate.h" |
22 #include "webkit/browser/fileapi/file_stream_writer.h" | 23 #include "webkit/browser/fileapi/file_stream_writer.h" |
23 #include "webkit/browser/fileapi/file_system_backend.h" | 24 #include "webkit/browser/fileapi/file_system_backend.h" |
24 #include "webkit/browser/fileapi/file_system_context.h" | 25 #include "webkit/browser/fileapi/file_system_context.h" |
25 #include "webkit/browser/fileapi/file_system_operation.h" | 26 #include "webkit/browser/fileapi/file_system_operation.h" |
26 #include "webkit/browser/fileapi/file_system_url.h" | 27 #include "webkit/browser/fileapi/file_system_url.h" |
27 #include "webkit/browser/fileapi/test_file_set.h" | |
28 #include "webkit/browser/quota/mock_quota_manager.h" | 28 #include "webkit/browser/quota/mock_quota_manager.h" |
29 #include "webkit/browser/quota/mock_quota_manager_proxy.h" | 29 #include "webkit/browser/quota/mock_quota_manager_proxy.h" |
30 #include "webkit/browser/quota/quota_manager.h" | 30 #include "webkit/browser/quota/quota_manager.h" |
31 #include "webkit/common/fileapi/file_system_util.h" | 31 #include "webkit/common/fileapi/file_system_util.h" |
32 | 32 |
33 using content::AsyncFileTestHelper; | 33 using content::AsyncFileTestHelper; |
34 using fileapi::CopyOrMoveOperationDelegate; | 34 using fileapi::CopyOrMoveOperationDelegate; |
35 using fileapi::FileStreamWriter; | 35 using fileapi::FileStreamWriter; |
36 using fileapi::FileSystemOperation; | 36 using fileapi::FileSystemOperation; |
37 using fileapi::FileSystemType; | 37 using fileapi::FileSystemType; |
38 using fileapi::FileSystemURL; | 38 using fileapi::FileSystemURL; |
39 using fileapi::test::TestCaseRecord; | |
40 | 39 |
41 namespace content { | 40 namespace content { |
42 | 41 |
43 typedef fileapi::FileSystemOperation::FileEntryList FileEntryList; | 42 typedef fileapi::FileSystemOperation::FileEntryList FileEntryList; |
44 | 43 |
45 namespace { | 44 namespace { |
46 | 45 |
47 void ExpectOk(const GURL& origin_url, | 46 void ExpectOk(const GURL& origin_url, |
48 const std::string& name, | 47 const std::string& name, |
49 base::File::Error error) { | 48 base::File::Error error) { |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 file_system_context_.get(), src, dest, progress_callback); | 274 file_system_context_.get(), src, dest, progress_callback); |
276 } | 275 } |
277 | 276 |
278 base::File::Error Move(const FileSystemURL& src, | 277 base::File::Error Move(const FileSystemURL& src, |
279 const FileSystemURL& dest) { | 278 const FileSystemURL& dest) { |
280 return AsyncFileTestHelper::Move(file_system_context_.get(), src, dest); | 279 return AsyncFileTestHelper::Move(file_system_context_.get(), src, dest); |
281 } | 280 } |
282 | 281 |
283 base::File::Error SetUpTestCaseFiles( | 282 base::File::Error SetUpTestCaseFiles( |
284 const FileSystemURL& root, | 283 const FileSystemURL& root, |
285 const TestCaseRecord* const test_cases, | 284 const FileSystemTestCaseRecord* const test_cases, |
286 size_t test_case_size) { | 285 size_t test_case_size) { |
287 base::File::Error result = base::File::FILE_ERROR_FAILED; | 286 base::File::Error result = base::File::FILE_ERROR_FAILED; |
288 for (size_t i = 0; i < test_case_size; ++i) { | 287 for (size_t i = 0; i < test_case_size; ++i) { |
289 const TestCaseRecord& test_case = test_cases[i]; | 288 const FileSystemTestCaseRecord& test_case = test_cases[i]; |
290 FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL( | 289 FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL( |
291 root.origin(), | 290 root.origin(), |
292 root.mount_type(), | 291 root.mount_type(), |
293 root.virtual_path().Append(test_case.path)); | 292 root.virtual_path().Append(test_case.path)); |
294 if (test_case.is_directory) | 293 if (test_case.is_directory) |
295 result = CreateDirectory(url); | 294 result = CreateDirectory(url); |
296 else | 295 else |
297 result = CreateFile(url, test_case.data_file_size); | 296 result = CreateFile(url, test_case.data_file_size); |
298 EXPECT_EQ(base::File::FILE_OK, result) << url.DebugString(); | 297 EXPECT_EQ(base::File::FILE_OK, result) << url.DebugString(); |
299 if (result != base::File::FILE_OK) | 298 if (result != base::File::FILE_OK) |
300 return result; | 299 return result; |
301 } | 300 } |
302 return result; | 301 return result; |
303 } | 302 } |
304 | 303 |
305 void VerifyTestCaseFiles( | 304 void VerifyTestCaseFiles( |
306 const FileSystemURL& root, | 305 const FileSystemURL& root, |
307 const TestCaseRecord* const test_cases, | 306 const FileSystemTestCaseRecord* const test_cases, |
308 size_t test_case_size) { | 307 size_t test_case_size) { |
309 std::map<base::FilePath, const TestCaseRecord*> test_case_map; | 308 std::map<base::FilePath, const FileSystemTestCaseRecord*> test_case_map; |
310 for (size_t i = 0; i < test_case_size; ++i) { | 309 for (size_t i = 0; i < test_case_size; ++i) { |
311 test_case_map[ | 310 test_case_map[ |
312 base::FilePath(test_cases[i].path).NormalizePathSeparators()] = | 311 base::FilePath(test_cases[i].path).NormalizePathSeparators()] = |
313 &test_cases[i]; | 312 &test_cases[i]; |
314 } | 313 } |
315 | 314 |
316 std::queue<FileSystemURL> directories; | 315 std::queue<FileSystemURL> directories; |
317 FileEntryList entries; | 316 FileEntryList entries; |
318 directories.push(root); | 317 directories.push(root); |
319 while (!directories.empty()) { | 318 while (!directories.empty()) { |
(...skipping 13 matching lines...) Expand all Loading... |
333 EXPECT_TRUE(test_case_map[relative]->is_directory); | 332 EXPECT_TRUE(test_case_map[relative]->is_directory); |
334 directories.push(url); | 333 directories.push(url); |
335 } else { | 334 } else { |
336 EXPECT_FALSE(test_case_map[relative]->is_directory); | 335 EXPECT_FALSE(test_case_map[relative]->is_directory); |
337 EXPECT_TRUE(FileExists(url, test_case_map[relative]->data_file_size)); | 336 EXPECT_TRUE(FileExists(url, test_case_map[relative]->data_file_size)); |
338 } | 337 } |
339 test_case_map.erase(relative); | 338 test_case_map.erase(relative); |
340 } | 339 } |
341 } | 340 } |
342 EXPECT_TRUE(test_case_map.empty()); | 341 EXPECT_TRUE(test_case_map.empty()); |
343 std::map<base::FilePath, const TestCaseRecord*>::const_iterator it; | 342 std::map<base::FilePath, |
| 343 const FileSystemTestCaseRecord*>::const_iterator it; |
344 for (it = test_case_map.begin(); it != test_case_map.end(); ++it) { | 344 for (it = test_case_map.begin(); it != test_case_map.end(); ++it) { |
345 LOG(ERROR) << "Extra entry: " << it->first.LossyDisplayName(); | 345 LOG(ERROR) << "Extra entry: " << it->first.LossyDisplayName(); |
346 } | 346 } |
347 } | 347 } |
348 | 348 |
349 base::File::Error ReadDirectory(const FileSystemURL& url, | 349 base::File::Error ReadDirectory(const FileSystemURL& url, |
350 FileEntryList* entries) { | 350 FileEntryList* entries) { |
351 return AsyncFileTestHelper::ReadDirectory( | 351 return AsyncFileTestHelper::ReadDirectory( |
352 file_system_context_.get(), url, entries); | 352 file_system_context_.get(), url, entries); |
353 } | 353 } |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 | 522 |
523 FileSystemURL src = helper.SourceURL("a"); | 523 FileSystemURL src = helper.SourceURL("a"); |
524 FileSystemURL dest = helper.DestURL("b"); | 524 FileSystemURL dest = helper.DestURL("b"); |
525 int64 src_initial_usage = helper.GetSourceUsage(); | 525 int64 src_initial_usage = helper.GetSourceUsage(); |
526 int64 dest_initial_usage = helper.GetDestUsage(); | 526 int64 dest_initial_usage = helper.GetDestUsage(); |
527 | 527 |
528 // Set up a source directory. | 528 // Set up a source directory. |
529 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); | 529 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); |
530 ASSERT_EQ(base::File::FILE_OK, | 530 ASSERT_EQ(base::File::FILE_OK, |
531 helper.SetUpTestCaseFiles(src, | 531 helper.SetUpTestCaseFiles(src, |
532 fileapi::test::kRegularTestCases, | 532 kRegularFileSystemTestCases, |
533 fileapi::test::kRegularTestCaseSize)); | 533 kRegularFileSystemTestCaseSize)); |
534 int64 src_increase = helper.GetSourceUsage() - src_initial_usage; | 534 int64 src_increase = helper.GetSourceUsage() - src_initial_usage; |
535 | 535 |
536 // Copy it. | 536 // Copy it. |
537 ASSERT_EQ(base::File::FILE_OK, | 537 ASSERT_EQ(base::File::FILE_OK, |
538 helper.CopyWithProgress( | 538 helper.CopyWithProgress( |
539 src, dest, | 539 src, dest, |
540 AsyncFileTestHelper::CopyProgressCallback())); | 540 AsyncFileTestHelper::CopyProgressCallback())); |
541 | 541 |
542 // Verify. | 542 // Verify. |
543 ASSERT_TRUE(helper.DirectoryExists(src)); | 543 ASSERT_TRUE(helper.DirectoryExists(src)); |
544 ASSERT_TRUE(helper.DirectoryExists(dest)); | 544 ASSERT_TRUE(helper.DirectoryExists(dest)); |
545 | 545 |
546 helper.VerifyTestCaseFiles(dest, | 546 helper.VerifyTestCaseFiles(dest, |
547 fileapi::test::kRegularTestCases, | 547 kRegularFileSystemTestCases, |
548 fileapi::test::kRegularTestCaseSize); | 548 kRegularFileSystemTestCaseSize); |
549 | 549 |
550 int64 src_new_usage = helper.GetSourceUsage(); | 550 int64 src_new_usage = helper.GetSourceUsage(); |
551 ASSERT_EQ(src_initial_usage + src_increase, src_new_usage); | 551 ASSERT_EQ(src_initial_usage + src_increase, src_new_usage); |
552 | 552 |
553 int64 dest_increase = helper.GetDestUsage() - dest_initial_usage; | 553 int64 dest_increase = helper.GetDestUsage() - dest_initial_usage; |
554 ASSERT_EQ(src_increase, dest_increase); | 554 ASSERT_EQ(src_increase, dest_increase); |
555 } | 555 } |
556 | 556 |
557 TEST(LocalFileSystemCopyOrMoveOperationTest, MoveDirectory) { | 557 TEST(LocalFileSystemCopyOrMoveOperationTest, MoveDirectory) { |
558 CopyOrMoveOperationTestHelper helper(GURL("http://foo"), | 558 CopyOrMoveOperationTestHelper helper(GURL("http://foo"), |
559 fileapi::kFileSystemTypeTemporary, | 559 fileapi::kFileSystemTypeTemporary, |
560 fileapi::kFileSystemTypePersistent); | 560 fileapi::kFileSystemTypePersistent); |
561 helper.SetUp(); | 561 helper.SetUp(); |
562 | 562 |
563 FileSystemURL src = helper.SourceURL("a"); | 563 FileSystemURL src = helper.SourceURL("a"); |
564 FileSystemURL dest = helper.DestURL("b"); | 564 FileSystemURL dest = helper.DestURL("b"); |
565 int64 src_initial_usage = helper.GetSourceUsage(); | 565 int64 src_initial_usage = helper.GetSourceUsage(); |
566 int64 dest_initial_usage = helper.GetDestUsage(); | 566 int64 dest_initial_usage = helper.GetDestUsage(); |
567 | 567 |
568 // Set up a source directory. | 568 // Set up a source directory. |
569 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); | 569 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); |
570 ASSERT_EQ(base::File::FILE_OK, | 570 ASSERT_EQ(base::File::FILE_OK, |
571 helper.SetUpTestCaseFiles(src, | 571 helper.SetUpTestCaseFiles(src, |
572 fileapi::test::kRegularTestCases, | 572 kRegularFileSystemTestCases, |
573 fileapi::test::kRegularTestCaseSize)); | 573 kRegularFileSystemTestCaseSize)); |
574 int64 src_increase = helper.GetSourceUsage() - src_initial_usage; | 574 int64 src_increase = helper.GetSourceUsage() - src_initial_usage; |
575 | 575 |
576 // Move it. | 576 // Move it. |
577 ASSERT_EQ(base::File::FILE_OK, helper.Move(src, dest)); | 577 ASSERT_EQ(base::File::FILE_OK, helper.Move(src, dest)); |
578 | 578 |
579 // Verify. | 579 // Verify. |
580 ASSERT_FALSE(helper.DirectoryExists(src)); | 580 ASSERT_FALSE(helper.DirectoryExists(src)); |
581 ASSERT_TRUE(helper.DirectoryExists(dest)); | 581 ASSERT_TRUE(helper.DirectoryExists(dest)); |
582 | 582 |
583 helper.VerifyTestCaseFiles(dest, | 583 helper.VerifyTestCaseFiles(dest, |
584 fileapi::test::kRegularTestCases, | 584 kRegularFileSystemTestCases, |
585 fileapi::test::kRegularTestCaseSize); | 585 kRegularFileSystemTestCaseSize); |
586 | 586 |
587 int64 src_new_usage = helper.GetSourceUsage(); | 587 int64 src_new_usage = helper.GetSourceUsage(); |
588 ASSERT_EQ(src_initial_usage, src_new_usage); | 588 ASSERT_EQ(src_initial_usage, src_new_usage); |
589 | 589 |
590 int64 dest_increase = helper.GetDestUsage() - dest_initial_usage; | 590 int64 dest_increase = helper.GetDestUsage() - dest_initial_usage; |
591 ASSERT_EQ(src_increase, dest_increase); | 591 ASSERT_EQ(src_increase, dest_increase); |
592 } | 592 } |
593 | 593 |
594 TEST(LocalFileSystemCopyOrMoveOperationTest, | 594 TEST(LocalFileSystemCopyOrMoveOperationTest, |
595 MoveDirectoryFailPostWriteValidation) { | 595 MoveDirectoryFailPostWriteValidation) { |
596 CopyOrMoveOperationTestHelper helper(GURL("http://foo"), | 596 CopyOrMoveOperationTestHelper helper(GURL("http://foo"), |
597 fileapi::kFileSystemTypeTemporary, | 597 fileapi::kFileSystemTypeTemporary, |
598 fileapi::kFileSystemTypeTest); | 598 fileapi::kFileSystemTypeTest); |
599 helper.SetUp(); | 599 helper.SetUp(); |
600 | 600 |
601 FileSystemURL src = helper.SourceURL("a"); | 601 FileSystemURL src = helper.SourceURL("a"); |
602 FileSystemURL dest = helper.DestURL("b"); | 602 FileSystemURL dest = helper.DestURL("b"); |
603 | 603 |
604 // Set up a source directory. | 604 // Set up a source directory. |
605 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); | 605 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); |
606 ASSERT_EQ(base::File::FILE_OK, | 606 ASSERT_EQ(base::File::FILE_OK, |
607 helper.SetUpTestCaseFiles(src, | 607 helper.SetUpTestCaseFiles(src, |
608 fileapi::test::kRegularTestCases, | 608 kRegularFileSystemTestCases, |
609 fileapi::test::kRegularTestCaseSize)); | 609 kRegularFileSystemTestCaseSize)); |
610 | 610 |
611 // Move it. | 611 // Move it. |
612 helper.Move(src, dest); | 612 helper.Move(src, dest); |
613 | 613 |
614 // Verify. | 614 // Verify. |
615 ASSERT_TRUE(helper.DirectoryExists(src)); | 615 ASSERT_TRUE(helper.DirectoryExists(src)); |
616 ASSERT_TRUE(helper.DirectoryExists(dest)); | 616 ASSERT_TRUE(helper.DirectoryExists(dest)); |
617 | 617 |
618 TestCaseRecord kMoveDirResultCases[] = { | 618 FileSystemTestCaseRecord kMoveDirResultCases[] = { |
619 {false, FILE_PATH_LITERAL("file 0"), 38}, | 619 {false, FILE_PATH_LITERAL("file 0"), 38}, |
620 {false, FILE_PATH_LITERAL("file 3"), 0}, | 620 {false, FILE_PATH_LITERAL("file 3"), 0}, |
621 }; | 621 }; |
622 | 622 |
623 helper.VerifyTestCaseFiles(dest, | 623 helper.VerifyTestCaseFiles(dest, |
624 kMoveDirResultCases, | 624 kMoveDirResultCases, |
625 arraysize(kMoveDirResultCases)); | 625 arraysize(kMoveDirResultCases)); |
626 } | 626 } |
627 | 627 |
628 TEST(LocalFileSystemCopyOrMoveOperationTest, CopySingleFileNoValidator) { | 628 TEST(LocalFileSystemCopyOrMoveOperationTest, CopySingleFileNoValidator) { |
(...skipping 20 matching lines...) Expand all Loading... |
649 fileapi::kFileSystemTypePersistent); | 649 fileapi::kFileSystemTypePersistent); |
650 helper.SetUp(); | 650 helper.SetUp(); |
651 | 651 |
652 FileSystemURL src = helper.SourceURL("a"); | 652 FileSystemURL src = helper.SourceURL("a"); |
653 FileSystemURL dest = helper.DestURL("b"); | 653 FileSystemURL dest = helper.DestURL("b"); |
654 | 654 |
655 // Set up a source directory. | 655 // Set up a source directory. |
656 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); | 656 ASSERT_EQ(base::File::FILE_OK, helper.CreateDirectory(src)); |
657 ASSERT_EQ(base::File::FILE_OK, | 657 ASSERT_EQ(base::File::FILE_OK, |
658 helper.SetUpTestCaseFiles(src, | 658 helper.SetUpTestCaseFiles(src, |
659 fileapi::test::kRegularTestCases, | 659 kRegularFileSystemTestCases, |
660 fileapi::test::kRegularTestCaseSize)); | 660 kRegularFileSystemTestCaseSize)); |
661 | 661 |
662 std::vector<ProgressRecord> records; | 662 std::vector<ProgressRecord> records; |
663 ASSERT_EQ(base::File::FILE_OK, | 663 ASSERT_EQ(base::File::FILE_OK, |
664 helper.CopyWithProgress(src, dest, | 664 helper.CopyWithProgress(src, dest, |
665 base::Bind(&RecordProgressCallback, | 665 base::Bind(&RecordProgressCallback, |
666 base::Unretained(&records)))); | 666 base::Unretained(&records)))); |
667 | 667 |
668 // Verify progress callback. | 668 // Verify progress callback. |
669 for (size_t i = 0; i < fileapi::test::kRegularTestCaseSize; ++i) { | 669 for (size_t i = 0; i < kRegularFileSystemTestCaseSize; ++i) { |
670 const TestCaseRecord& test_case = fileapi::test::kRegularTestCases[i]; | 670 const FileSystemTestCaseRecord& test_case = kRegularFileSystemTestCases[i]; |
671 | 671 |
672 FileSystemURL src_url = helper.SourceURL( | 672 FileSystemURL src_url = helper.SourceURL( |
673 std::string("a/") + base::FilePath(test_case.path).AsUTF8Unsafe()); | 673 std::string("a/") + base::FilePath(test_case.path).AsUTF8Unsafe()); |
674 FileSystemURL dest_url = helper.DestURL( | 674 FileSystemURL dest_url = helper.DestURL( |
675 std::string("b/") + base::FilePath(test_case.path).AsUTF8Unsafe()); | 675 std::string("b/") + base::FilePath(test_case.path).AsUTF8Unsafe()); |
676 | 676 |
677 // Find the first and last progress record. | 677 // Find the first and last progress record. |
678 size_t begin_index = records.size(); | 678 size_t begin_index = records.size(); |
679 size_t end_index = records.size(); | 679 size_t end_index = records.size(); |
680 for (size_t j = 0; j < records.size(); ++j) { | 680 for (size_t j = 0; j < records.size(); ++j) { |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
870 | 870 |
871 base::File::Error error = base::File::FILE_ERROR_FAILED; | 871 base::File::Error error = base::File::FILE_ERROR_FAILED; |
872 base::RunLoop run_loop; | 872 base::RunLoop run_loop; |
873 helper.Run(base::Bind(&AssignAndQuit, &run_loop, &error)); | 873 helper.Run(base::Bind(&AssignAndQuit, &run_loop, &error)); |
874 run_loop.Run(); | 874 run_loop.Run(); |
875 | 875 |
876 EXPECT_EQ(base::File::FILE_ERROR_ABORT, error); | 876 EXPECT_EQ(base::File::FILE_ERROR_ABORT, error); |
877 } | 877 } |
878 | 878 |
879 } // namespace content | 879 } // namespace content |
OLD | NEW |