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); |
| 1601 ClearTimestamp(path); |
| 1602 context.reset(NewContext(NULL)); |
| 1603 EXPECT_EQ(base::PLATFORM_FILE_OK, |
| 1604 ofu()->CreateDirectory(context.get(), subdir_path, |
| 1605 true /* exclusive */, true /* recursive */)); |
| 1606 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); |
| 1607 EXPECT_NE(base::Time(), GetModifiedTime(path)); |
| 1608 |
| 1609 // fail case. |
| 1610 path = dir_path.AppendASCII("CreateDirectory_dir"); |
| 1611 ClearTimestamp(dir_path); |
| 1612 context.reset(NewContext(NULL)); |
| 1613 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, |
| 1614 ofu()->CreateDirectory(context.get(), path, |
| 1615 true /* exclusive */, true /* recursive */)); |
| 1616 EXPECT_EQ(base::Time(), GetModifiedTime(dir_path)); |
| 1617 |
| 1618 // CopyInForeignFile, create case. |
| 1619 path = dir_path.AppendASCII("CopyInForeignFile_file"); |
| 1620 FilePath src_path = dir_path.AppendASCII("CopyInForeignFile_src_file"); |
| 1621 context.reset(NewContext(NULL)); |
| 1622 EXPECT_EQ(base::PLATFORM_FILE_OK, |
| 1623 ofu()->EnsureFileExists(context.get(), src_path, &created)); |
| 1624 EXPECT_TRUE(created); |
| 1625 FilePath src_local_path; |
| 1626 context.reset(NewContext(NULL)); |
| 1627 EXPECT_EQ(base::PLATFORM_FILE_OK, |
| 1628 ofu()->GetLocalFilePath(context.get(), src_path, &src_local_path)); |
| 1629 |
| 1630 ClearTimestamp(dir_path); |
| 1631 context.reset(NewContext(NULL)); |
| 1632 EXPECT_EQ(base::PLATFORM_FILE_OK, |
| 1633 ofu()->CopyInForeignFile(context.get(), src_local_path, path)); |
| 1634 EXPECT_NE(base::Time(), GetModifiedTime(dir_path)); |
| 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 |