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 |