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