Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <set> | 6 #include <set> |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 469 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo( | 469 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo( |
| 470 context.get(), dest_path, &file_info, &data_path)); | 470 context.get(), dest_path, &file_info, &data_path)); |
| 471 EXPECT_NE(data_path, src_path); | 471 EXPECT_NE(data_path, src_path); |
| 472 EXPECT_TRUE(FileExists(data_path)); | 472 EXPECT_TRUE(FileExists(data_path)); |
| 473 EXPECT_EQ(src_file_length, GetSize(data_path)); | 473 EXPECT_EQ(src_file_length, GetSize(data_path)); |
| 474 | 474 |
| 475 EXPECT_EQ(base::PLATFORM_FILE_OK, | 475 EXPECT_EQ(base::PLATFORM_FILE_OK, |
| 476 ofu()->DeleteFile(context.get(), dest_path)); | 476 ofu()->DeleteFile(context.get(), dest_path)); |
| 477 } | 477 } |
| 478 | 478 |
| 479 void ClearTimestamp(const FilePath& path) { | |
| 480 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); | |
| 481 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 482 ofu()->Touch(context.get(), path, base::Time(), base::Time())); | |
| 483 EXPECT_EQ(base::Time(), GetModifiedTime(path)); | |
| 484 } | |
| 485 | |
| 486 base::Time GetModifiedTime(const FilePath& path) { | |
| 487 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); | |
| 488 FilePath data_path; | |
| 489 base::PlatformFileInfo file_info; | |
| 490 context.reset(NewContext(NULL)); | |
| 491 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 492 ofu()->GetFileInfo(context.get(), path, &file_info, &data_path)); | |
| 493 return file_info.last_modified; | |
| 494 } | |
| 495 | |
| 496 void TestDirectoryTimestampHelper(const FilePath& base_dir, | |
| 497 bool copy, | |
| 498 bool overwrite) { | |
| 499 scoped_ptr<FileSystemOperationContext> context; | |
| 500 const FilePath src_dir_path(base_dir.AppendASCII("foo_dir")); | |
| 501 const FilePath dest_dir_path(base_dir.AppendASCII("bar_dir")); | |
| 502 | |
| 503 const FilePath src_file_path(src_dir_path.AppendASCII("hoge")); | |
| 504 const FilePath dest_file_path(dest_dir_path.AppendASCII("fuga")); | |
| 505 | |
| 506 context.reset(NewContext(NULL)); | |
| 507 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 508 ofu()->CreateDirectory(context.get(), src_dir_path, true, true)); | |
| 509 context.reset(NewContext(NULL)); | |
| 510 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 511 ofu()->CreateDirectory(context.get(), dest_dir_path, true, true)); | |
| 512 | |
| 513 bool created = false; | |
| 514 context.reset(NewContext(NULL)); | |
| 515 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 516 ofu()->EnsureFileExists(context.get(), src_file_path, &created)); | |
| 517 if (overwrite) { | |
| 518 context.reset(NewContext(NULL)); | |
| 519 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 520 ofu()->EnsureFileExists(context.get(), | |
| 521 dest_file_path, &created)); | |
| 522 } | |
| 523 | |
| 524 ClearTimestamp(src_dir_path); | |
| 525 ClearTimestamp(dest_dir_path); | |
| 526 context.reset(NewContext(NULL)); | |
| 527 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 528 ofu()->CopyOrMoveFile(context.get(), | |
| 529 src_file_path, dest_file_path, | |
| 530 copy)); | |
| 531 | |
| 532 if (copy) | |
| 533 EXPECT_EQ(base::Time(), GetModifiedTime(src_dir_path)); | |
| 534 else | |
| 535 EXPECT_NE(base::Time(), GetModifiedTime(src_dir_path)); | |
| 536 EXPECT_NE(base::Time(), GetModifiedTime(dest_dir_path)); | |
| 537 } | |
| 538 | |
| 479 private: | 539 private: |
| 480 ScopedTempDir data_dir_; | 540 ScopedTempDir data_dir_; |
| 481 scoped_refptr<ObfuscatedFileUtil> obfuscated_file_util_; | 541 scoped_refptr<ObfuscatedFileUtil> obfuscated_file_util_; |
| 482 scoped_refptr<quota::QuotaManager> quota_manager_; | 542 scoped_refptr<quota::QuotaManager> quota_manager_; |
| 483 scoped_refptr<FileSystemContext> file_system_context_; | 543 scoped_refptr<FileSystemContext> file_system_context_; |
| 484 GURL origin_; | 544 GURL origin_; |
| 485 fileapi::FileSystemType type_; | 545 fileapi::FileSystemType type_; |
| 486 base::WeakPtrFactory<ObfuscatedFileUtilTest> weak_factory_; | 546 base::WeakPtrFactory<ObfuscatedFileUtilTest> weak_factory_; |
| 487 FileSystemTestOriginHelper test_helper_; | 547 FileSystemTestOriginHelper test_helper_; |
| 488 quota::QuotaStatusCode quota_status_; | 548 quota::QuotaStatusCode quota_status_; |
| (...skipping 944 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1433 EXPECT_EQ(base::PLATFORM_FILE_OK, | 1493 EXPECT_EQ(base::PLATFORM_FILE_OK, |
| 1434 ofu()->GetLocalFilePath(context.get(), kPath[0], &local_path)); | 1494 ofu()->GetLocalFilePath(context.get(), kPath[0], &local_path)); |
| 1435 EXPECT_TRUE(file_util::Delete(local_path, false)); | 1495 EXPECT_TRUE(file_util::Delete(local_path, false)); |
| 1436 | 1496 |
| 1437 context.reset(NewContext(NULL)); | 1497 context.reset(NewContext(NULL)); |
| 1438 entries.clear(); | 1498 entries.clear(); |
| 1439 EXPECT_EQ(base::PLATFORM_FILE_OK, | 1499 EXPECT_EQ(base::PLATFORM_FILE_OK, |
| 1440 ofu()->ReadDirectory(context.get(), FilePath(), &entries)); | 1500 ofu()->ReadDirectory(context.get(), FilePath(), &entries)); |
| 1441 EXPECT_EQ(ARRAYSIZE_UNSAFE(kPath) - 1, entries.size()); | 1501 EXPECT_EQ(ARRAYSIZE_UNSAFE(kPath) - 1, entries.size()); |
| 1442 } | 1502 } |
| 1503 | |
| 1504 TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCreation) { | |
| 1505 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); | |
| 1506 const FilePath dir_path(FILE_PATH_LITERAL("foo_dir")); | |
| 1507 | |
| 1508 // Create working directory. | |
| 1509 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1510 ofu()->CreateDirectory(context.get(), dir_path, false, false)); | |
| 1511 | |
| 1512 // EnsureFileExists, create case. | |
| 1513 FilePath path(dir_path.AppendASCII("EnsureFileExists_file")); | |
| 1514 bool created = false; | |
| 1515 ClearTimestamp(dir_path); | |
| 1516 context.reset(NewContext(NULL)); | |
| 1517 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1518 ofu()->EnsureFileExists(context.get(), path, &created)); | |
| 1519 EXPECT_TRUE(created); | |
| 1520 EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); | |
| 1521 | |
| 1522 // non create case. | |
| 1523 created = true; | |
| 1524 ClearTimestamp(dir_path); | |
| 1525 context.reset(NewContext(NULL)); | |
| 1526 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1527 ofu()->EnsureFileExists(context.get(), path, &created)); | |
| 1528 EXPECT_FALSE(created); | |
| 1529 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); | |
| 1530 | |
| 1531 // fail case. | |
| 1532 path = dir_path.AppendASCII("EnsureFileExists_dir"); | |
| 1533 context.reset(NewContext(NULL)); | |
| 1534 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1535 ofu()->CreateDirectory(context.get(), path, false, false)); | |
| 1536 | |
| 1537 ClearTimestamp(dir_path); | |
| 1538 context.reset(NewContext(NULL)); | |
| 1539 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_A_FILE, | |
| 1540 ofu()->EnsureFileExists(context.get(), path, &created)); | |
| 1541 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); | |
| 1542 | |
| 1543 // CreateOrOpen, create case. | |
| 1544 path = dir_path.AppendASCII("CreateOrOpen_file"); | |
| 1545 PlatformFile file_handle = base::kInvalidPlatformFileValue; | |
| 1546 created = false; | |
| 1547 ClearTimestamp(dir_path); | |
| 1548 context.reset(NewContext(NULL)); | |
| 1549 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1550 ofu()->CreateOrOpen( | |
| 1551 context.get(), path, | |
| 1552 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, | |
| 1553 &file_handle, &created)); | |
| 1554 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); | |
| 1555 EXPECT_TRUE(created); | |
| 1556 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); | |
| 1557 EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); | |
| 1558 | |
| 1559 // open case. | |
| 1560 file_handle = base::kInvalidPlatformFileValue; | |
| 1561 created = true; | |
| 1562 ClearTimestamp(dir_path); | |
| 1563 context.reset(NewContext(NULL)); | |
| 1564 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1565 ofu()->CreateOrOpen( | |
| 1566 context.get(), path, | |
| 1567 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE, | |
| 1568 &file_handle, &created)); | |
| 1569 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); | |
| 1570 EXPECT_FALSE(created); | |
| 1571 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); | |
| 1572 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); | |
| 1573 | |
| 1574 // fail case | |
| 1575 file_handle = base::kInvalidPlatformFileValue; | |
| 1576 ClearTimestamp(dir_path); | |
| 1577 context.reset(NewContext(NULL)); | |
| 1578 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, | |
| 1579 ofu()->CreateOrOpen( | |
| 1580 context.get(), path, | |
| 1581 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, | |
| 1582 &file_handle, &created)); | |
| 1583 EXPECT_EQ(base::kInvalidPlatformFileValue, file_handle); | |
| 1584 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); | |
| 1585 | |
| 1586 // CreateDirectory, create case. | |
| 1587 // Creating CreateDirectory_dir and CreateDirectory_dir/subdir. | |
| 1588 path = dir_path.AppendASCII("CreateDirectory_dir"); | |
| 1589 FilePath subdir_path(path.AppendASCII("subdir")); | |
| 1590 ClearTimestamp(dir_path); | |
| 1591 context.reset(NewContext(NULL)); | |
| 1592 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1593 ofu()->CreateDirectory(context.get(), subdir_path, | |
| 1594 true /* exclusive */, true /* recursive */)); | |
| 1595 EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); | |
| 1596 | |
| 1597 // create subdir case. | |
| 1598 // Creating CreateDirectory_dir/subdir2. | |
| 1599 subdir_path = path.AppendASCII("subdir2"); | |
| 1600 ClearTimestamp(dir_path); | |
|
ericu
2011/12/08 01:05:02
Missing a ClearTimestamp(path); here.
tzik
2011/12/08 02:11:40
Done.
| |
| 1601 context.reset(NewContext(NULL)); | |
| 1602 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1603 ofu()->CreateDirectory(context.get(), subdir_path, | |
| 1604 true /* exclusive */, true /* recursive */)); | |
| 1605 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); | |
| 1606 EXPECT_NE(base::Time(), GetModifiedTime(path)); | |
| 1607 | |
| 1608 // fail case. | |
| 1609 path = dir_path.AppendASCII("CreateDirectory_dir"); | |
| 1610 ClearTimestamp(dir_path); | |
| 1611 context.reset(NewContext(NULL)); | |
| 1612 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, | |
| 1613 ofu()->CreateDirectory(context.get(), path, | |
| 1614 true /* exclusive */, true /* recursive */)); | |
| 1615 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); | |
| 1616 | |
| 1617 // CopyInForeignFile, create case. | |
| 1618 path = dir_path.AppendASCII("CopyInForeignFile_file"); | |
| 1619 FilePath src_path = dir_path.AppendASCII("CopyInForeignFile_src_file"); | |
| 1620 context.reset(NewContext(NULL)); | |
| 1621 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1622 ofu()->EnsureFileExists(context.get(), src_path, &created)); | |
| 1623 EXPECT_TRUE(created); | |
| 1624 FilePath src_local_path; | |
| 1625 context.reset(NewContext(NULL)); | |
| 1626 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1627 ofu()->GetLocalFilePath(context.get(), src_path, &src_local_path)); | |
| 1628 | |
| 1629 ClearTimestamp(dir_path); | |
| 1630 context.reset(NewContext(NULL)); | |
| 1631 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1632 ofu()->CopyInForeignFile(context.get(), src_local_path, path)); | |
| 1633 EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); | |
| 1634 | |
| 1635 } | |
| 1636 | |
| 1637 TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForDeletion) { | |
| 1638 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); | |
| 1639 const FilePath dir_path(FILE_PATH_LITERAL("foo_dir")); | |
| 1640 | |
| 1641 // Create working directory. | |
| 1642 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1643 ofu()->CreateDirectory(context.get(), dir_path, false, false)); | |
| 1644 | |
| 1645 // DeleteFile, delete case. | |
| 1646 FilePath path = dir_path.AppendASCII("DeleteFile_file"); | |
| 1647 bool created = false; | |
| 1648 context.reset(NewContext(NULL)); | |
| 1649 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1650 ofu()->EnsureFileExists(context.get(), path, &created)); | |
| 1651 EXPECT_TRUE(created); | |
| 1652 | |
| 1653 ClearTimestamp(dir_path); | |
| 1654 context.reset(NewContext(NULL)); | |
| 1655 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1656 ofu()->DeleteFile(context.get(), path)); | |
| 1657 EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); | |
| 1658 | |
| 1659 // fail case. | |
| 1660 ClearTimestamp(dir_path); | |
| 1661 context.reset(NewContext(NULL)); | |
| 1662 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, | |
| 1663 ofu()->DeleteFile(context.get(), path)); | |
| 1664 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); | |
| 1665 | |
| 1666 // DeleteSingleDirectory, fail case. | |
| 1667 path = dir_path.AppendASCII("DeleteSingleDirectory_dir"); | |
| 1668 FilePath file_path(path.AppendASCII("pakeratta")); | |
| 1669 context.reset(NewContext(NULL)); | |
| 1670 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1671 ofu()->CreateDirectory(context.get(), path, true, true)); | |
| 1672 created = false; | |
| 1673 context.reset(NewContext(NULL)); | |
| 1674 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1675 ofu()->EnsureFileExists(context.get(), file_path, &created)); | |
| 1676 EXPECT_TRUE(created); | |
| 1677 | |
| 1678 ClearTimestamp(dir_path); | |
| 1679 context.reset(NewContext(NULL)); | |
| 1680 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_EMPTY, | |
| 1681 ofu()->DeleteSingleDirectory(context.get(), path)); | |
| 1682 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); | |
| 1683 | |
| 1684 // delete case. | |
| 1685 context.reset(NewContext(NULL)); | |
| 1686 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1687 ofu()->DeleteFile(context.get(), file_path)); | |
| 1688 | |
| 1689 ClearTimestamp(dir_path); | |
| 1690 context.reset(NewContext(NULL)); | |
| 1691 EXPECT_EQ(base::PLATFORM_FILE_OK, | |
| 1692 ofu()->DeleteSingleDirectory(context.get(), path)); | |
| 1693 EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); | |
| 1694 } | |
| 1695 | |
| 1696 TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCopyAndMove) { | |
| 1697 TestDirectoryTimestampHelper( | |
| 1698 FilePath(FILE_PATH_LITERAL("copy overwrite")), true, true); | |
| 1699 TestDirectoryTimestampHelper( | |
| 1700 FilePath(FILE_PATH_LITERAL("copy non-overwrite")), true, false); | |
| 1701 TestDirectoryTimestampHelper( | |
| 1702 FilePath(FILE_PATH_LITERAL("move overwrite")), false, true); | |
| 1703 TestDirectoryTimestampHelper( | |
| 1704 FilePath(FILE_PATH_LITERAL("move non-overwrite")),false, false); | |
| 1705 } | |
| OLD | NEW |