| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <windows.h> | 8 #include <windows.h> |
| 9 #include <winioctl.h> | 9 #include <winioctl.h> |
| 10 #include <shellapi.h> | 10 #include <shellapi.h> |
| (...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 ASSERT_TRUE(DeleteReparsePoint(reparse_to_sub_a)); | 574 ASSERT_TRUE(DeleteReparsePoint(reparse_to_sub_a)); |
| 575 ASSERT_TRUE(DeleteReparsePoint(reparse_to_base_b)); | 575 ASSERT_TRUE(DeleteReparsePoint(reparse_to_base_b)); |
| 576 ASSERT_TRUE(DeleteReparsePoint(reparse_to_sub_long)); | 576 ASSERT_TRUE(DeleteReparsePoint(reparse_to_sub_long)); |
| 577 | 577 |
| 578 ASSERT_FALSE(file_util::NormalizeFilePath(to_sub_a.Append(FPL("file.txt")), | 578 ASSERT_FALSE(file_util::NormalizeFilePath(to_sub_a.Append(FPL("file.txt")), |
| 579 &normalized_path)); | 579 &normalized_path)); |
| 580 } | 580 } |
| 581 | 581 |
| 582 #endif // defined(OS_WIN) | 582 #endif // defined(OS_WIN) |
| 583 | 583 |
| 584 #if defined(OS_POSIX) |
| 585 |
| 586 TEST_F(FileUtilTest, CreateAndReadSymlinks) { |
| 587 FilePath link_from = temp_dir_.path().Append(FPL("from_file")); |
| 588 FilePath link_to = temp_dir_.path().Append(FPL("to_file")); |
| 589 CreateTextFile(link_to, bogus_content); |
| 590 |
| 591 ASSERT_TRUE(file_util::CreateSymbolicLink(link_to, link_from)) |
| 592 << "Failed to create file symlink."; |
| 593 |
| 594 // If we created the link properly, we should be able to read the |
| 595 // contents through it. |
| 596 std::wstring contents = ReadTextFile(link_from); |
| 597 ASSERT_EQ(contents, bogus_content); |
| 598 |
| 599 FilePath result; |
| 600 ASSERT_TRUE(file_util::ReadSymbolicLink(link_from, &result)); |
| 601 ASSERT_EQ(link_to.value(), result.value()); |
| 602 |
| 603 // Link to a directory. |
| 604 link_from = temp_dir_.path().Append(FPL("from_dir")); |
| 605 link_to = temp_dir_.path().Append(FPL("to_dir")); |
| 606 file_util::CreateDirectory(link_to); |
| 607 |
| 608 ASSERT_TRUE(file_util::CreateSymbolicLink(link_to, link_from)) |
| 609 << "Failed to create directory symlink."; |
| 610 |
| 611 // Test failures. |
| 612 ASSERT_FALSE(file_util::CreateSymbolicLink(link_to, link_to)); |
| 613 ASSERT_FALSE(file_util::ReadSymbolicLink(link_to, &result)); |
| 614 FilePath missing = temp_dir_.path().Append(FPL("missing")); |
| 615 ASSERT_FALSE(file_util::ReadSymbolicLink(missing, &result)); |
| 616 } |
| 617 |
| 618 |
| 584 // The following test of NormalizeFilePath() require that we create a symlink. | 619 // The following test of NormalizeFilePath() require that we create a symlink. |
| 585 // This can not be done on windows before vista. On vista, creating a symlink | 620 // This can not be done on Windows before Vista. On Vista, creating a symlink |
| 586 // requires privilege "SeCreateSymbolicLinkPrivilege". | 621 // requires privilege "SeCreateSymbolicLinkPrivilege". |
| 587 // TODO(skerner): Investigate the possibility of giving base_unittests the | 622 // TODO(skerner): Investigate the possibility of giving base_unittests the |
| 588 // privileges required to create a symlink. | 623 // privileges required to create a symlink. |
| 589 #if defined(OS_POSIX) | |
| 590 | |
| 591 bool MakeSymlink(const FilePath& link_to, const FilePath& link_from) { | |
| 592 return (symlink(link_to.value().c_str(), link_from.value().c_str()) == 0); | |
| 593 } | |
| 594 | |
| 595 TEST_F(FileUtilTest, NormalizeFilePathSymlinks) { | 624 TEST_F(FileUtilTest, NormalizeFilePathSymlinks) { |
| 596 FilePath normalized_path; | 625 FilePath normalized_path; |
| 597 | 626 |
| 598 // Link one file to another. | 627 // Link one file to another. |
| 599 FilePath link_from = temp_dir_.path().Append(FPL("from_file")); | 628 FilePath link_from = temp_dir_.path().Append(FPL("from_file")); |
| 600 FilePath link_to = temp_dir_.path().Append(FPL("to_file")); | 629 FilePath link_to = temp_dir_.path().Append(FPL("to_file")); |
| 601 CreateTextFile(link_to, bogus_content); | 630 CreateTextFile(link_to, bogus_content); |
| 602 | 631 |
| 603 ASSERT_TRUE(MakeSymlink(link_to, link_from)) | 632 ASSERT_TRUE(file_util::CreateSymbolicLink(link_to, link_from)) |
| 604 << "Failed to create file symlink."; | 633 << "Failed to create file symlink."; |
| 605 | 634 |
| 606 // Check that NormalizeFilePath sees the link. | 635 // Check that NormalizeFilePath sees the link. |
| 607 ASSERT_TRUE(file_util::NormalizeFilePath(link_from, &normalized_path)); | 636 ASSERT_TRUE(file_util::NormalizeFilePath(link_from, &normalized_path)); |
| 608 ASSERT_TRUE(link_to != link_from); | 637 ASSERT_TRUE(link_to != link_from); |
| 609 ASSERT_EQ(link_to.BaseName().value(), normalized_path.BaseName().value()); | 638 ASSERT_EQ(link_to.BaseName().value(), normalized_path.BaseName().value()); |
| 610 ASSERT_EQ(link_to.BaseName().value(), normalized_path.BaseName().value()); | 639 ASSERT_EQ(link_to.BaseName().value(), normalized_path.BaseName().value()); |
| 611 | 640 |
| 612 // Link to a directory. | 641 // Link to a directory. |
| 613 link_from = temp_dir_.path().Append(FPL("from_dir")); | 642 link_from = temp_dir_.path().Append(FPL("from_dir")); |
| 614 link_to = temp_dir_.path().Append(FPL("to_dir")); | 643 link_to = temp_dir_.path().Append(FPL("to_dir")); |
| 615 file_util::CreateDirectory(link_to); | 644 file_util::CreateDirectory(link_to); |
| 616 | 645 |
| 617 ASSERT_TRUE(MakeSymlink(link_to, link_from)) | 646 ASSERT_TRUE(file_util::CreateSymbolicLink(link_to, link_from)) |
| 618 << "Failed to create directory symlink."; | 647 << "Failed to create directory symlink."; |
| 619 | 648 |
| 620 ASSERT_FALSE(file_util::NormalizeFilePath(link_from, &normalized_path)) | 649 ASSERT_FALSE(file_util::NormalizeFilePath(link_from, &normalized_path)) |
| 621 << "Links to directories should return false."; | 650 << "Links to directories should return false."; |
| 622 | 651 |
| 623 // Test that a loop in the links causes NormalizeFilePath() to return false. | 652 // Test that a loop in the links causes NormalizeFilePath() to return false. |
| 624 link_from = temp_dir_.path().Append(FPL("link_a")); | 653 link_from = temp_dir_.path().Append(FPL("link_a")); |
| 625 link_to = temp_dir_.path().Append(FPL("link_b")); | 654 link_to = temp_dir_.path().Append(FPL("link_b")); |
| 626 ASSERT_TRUE(MakeSymlink(link_to, link_from)) | 655 ASSERT_TRUE(file_util::CreateSymbolicLink(link_to, link_from)) |
| 627 << "Failed to create loop symlink a."; | 656 << "Failed to create loop symlink a."; |
| 628 ASSERT_TRUE(MakeSymlink(link_from, link_to)) | 657 ASSERT_TRUE(file_util::CreateSymbolicLink(link_from, link_to)) |
| 629 << "Failed to create loop symlink b."; | 658 << "Failed to create loop symlink b."; |
| 630 | 659 |
| 631 // Infinite loop! | 660 // Infinite loop! |
| 632 ASSERT_FALSE(file_util::NormalizeFilePath(link_from, &normalized_path)); | 661 ASSERT_FALSE(file_util::NormalizeFilePath(link_from, &normalized_path)); |
| 633 } | 662 } |
| 634 #endif // defined(OS_POSIX) | 663 #endif // defined(OS_POSIX) |
| 635 | 664 |
| 636 TEST_F(FileUtilTest, DeleteNonExistent) { | 665 TEST_F(FileUtilTest, DeleteNonExistent) { |
| 637 FilePath non_existent = temp_dir_.path().AppendASCII("bogus_file_dne.foobar"); | 666 FilePath non_existent = temp_dir_.path().AppendASCII("bogus_file_dne.foobar"); |
| 638 ASSERT_FALSE(file_util::PathExists(non_existent)); | 667 ASSERT_FALSE(file_util::PathExists(non_existent)); |
| (...skipping 1159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1798 EXPECT_TRUE(file_util::IsDirectoryEmpty(empty_dir)); | 1827 EXPECT_TRUE(file_util::IsDirectoryEmpty(empty_dir)); |
| 1799 | 1828 |
| 1800 FilePath foo(empty_dir.Append(FILE_PATH_LITERAL("foo.txt"))); | 1829 FilePath foo(empty_dir.Append(FILE_PATH_LITERAL("foo.txt"))); |
| 1801 std::string bar("baz"); | 1830 std::string bar("baz"); |
| 1802 ASSERT_TRUE(file_util::WriteFile(foo, bar.c_str(), bar.length())); | 1831 ASSERT_TRUE(file_util::WriteFile(foo, bar.c_str(), bar.length())); |
| 1803 | 1832 |
| 1804 EXPECT_FALSE(file_util::IsDirectoryEmpty(empty_dir)); | 1833 EXPECT_FALSE(file_util::IsDirectoryEmpty(empty_dir)); |
| 1805 } | 1834 } |
| 1806 | 1835 |
| 1807 } // namespace | 1836 } // namespace |
| OLD | NEW |