Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Side by Side Diff: webkit/fileapi/obfuscated_file_util_unittest.cc

Issue 8728029: Update mtime of directory when containee changed. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW
« webkit/fileapi/obfuscated_file_util.cc ('K') | « webkit/fileapi/obfuscated_file_util.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698