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

Unified Diff: base/file_util_unittest.cc

Issue 2001013: Use realpath() to find the path to the extension unpack dir on posix systems. (Closed)
Patch Set: Created 10 years, 7 months 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 side-by-side diff with in-line comments
Download patch
Index: base/file_util_unittest.cc
diff --git a/base/file_util_unittest.cc b/base/file_util_unittest.cc
index c49629040b546f7c65598ceca2a02722082f159c..efe79c9d68f7248cb4a6f99aeb0c87a49e8b90c9 100644
--- a/base/file_util_unittest.cc
+++ b/base/file_util_unittest.cc
@@ -387,6 +387,57 @@ TEST_F(FileUtilTest, FileAndDirectorySize) {
EXPECT_EQ(size_f1 + size_f2 + 3, computed_size);
}
+#if defined(OS_POSIX)
+TEST_F(FileUtilTest, RealPath) {
+ // Get the real test directory, in case some future change to the
+ // test setup makes the path to test_dir_ include a symlink.
+ FilePath real_test_dir;
+ ASSERT_TRUE(file_util::RealPath(test_dir_, &real_test_dir));
+
+ FilePath real_path;
+ ASSERT_TRUE(file_util::RealPath(real_test_dir, &real_path));
+ ASSERT_TRUE(real_test_dir == real_path);
+
+ // Link one file to another.
+ FilePath link_from = real_test_dir.Append(FPL("from_file"));
+ FilePath link_to = real_test_dir.Append(FPL("to_file"));
+ CreateTextFile(link_to, bogus_content);
+
+ ASSERT_EQ(0, symlink(link_to.value().c_str(), link_from.value().c_str()))
+ << "Failed to create file symlink.";
+
+ // Check that RealPath sees the link.
+ ASSERT_TRUE(file_util::RealPath(link_from, &real_path));
+ ASSERT_TRUE(link_to != link_from);
+ ASSERT_TRUE(link_to == real_path);
+
+
+ // Link to a directory.
+ link_from = real_test_dir.Append(FPL("from_dir"));
+ link_to = real_test_dir.Append(FPL("to_dir"));
+ file_util::CreateDirectory(link_to);
+
+ ASSERT_EQ(0, symlink(link_to.value().c_str(), link_from.value().c_str()))
+ << "Failed to create directory symlink.";
+
+ ASSERT_TRUE(file_util::RealPath(link_from, &real_path));
+ ASSERT_TRUE(link_to != link_from);
+ ASSERT_TRUE(link_to == real_path);
+
+
+ // Test that a loop in the links causes RealPath() to return false.
+ link_from = real_test_dir.Append(FPL("link_a"));
+ link_to = real_test_dir.Append(FPL("link_b"));
+ ASSERT_EQ(0, symlink(link_to.value().c_str(), link_from.value().c_str()))
+ << "Failed to create loop symlink a.";
+ ASSERT_EQ(0, symlink(link_from.value().c_str(), link_to.value().c_str()))
+ << "Failed to create loop symlink b.";
+
+ // Infinite loop!
+ ASSERT_FALSE(file_util::RealPath(link_from, &real_path));
+}
+#endif // defined(OS_POSIX)
+
TEST_F(FileUtilTest, DeleteNonExistent) {
FilePath non_existent = test_dir_.AppendASCII("bogus_file_dne.foobar");
ASSERT_FALSE(file_util::PathExists(non_existent));

Powered by Google App Engine
This is Rietveld 408576698