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

Unified Diff: base/files/file_util_unittest.cc

Issue 659303002: Fixed copying read-only directories (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git/+/master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « base/files/file_util_posix.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/files/file_util_unittest.cc
diff --git a/base/files/file_util_unittest.cc b/base/files/file_util_unittest.cc
index bd4839aad50771e4784594ea526900d857b2ab48..f6279915038a7631877ee85de9bc32b17ba36f40 100644
--- a/base/files/file_util_unittest.cc
+++ b/base/files/file_util_unittest.cc
@@ -1378,6 +1378,29 @@ TEST_F(FileUtilTest, CopyDirectoryWithTrailingSeparators) {
EXPECT_TRUE(PathExists(file_name_to));
}
+// Sets the source file to full access.
+void SetFullAccess(const FilePath& path) {
+ #if defined(OS_WIN)
+ // On Windows, it involves clearing a bit.
+ DWORD attrs = GetFileAttributes(path.value().c_str());
+ ASSERT_NE(INVALID_FILE_ATTRIBUTES, attrs);
+ ASSERT_TRUE(SetFileAttributes(
+ path.value().c_str(), attrs & ~FILE_ATTRIBUTE_READONLY));
+ // Files in the temporary directory should not be indexed ever. If this
rvargas (doing something else) 2014/10/23 01:12:11 This seems out of place here (yes, it's that way o
ripp 2014/10/23 07:04:51 TODO added to SetReadOnly function
+ // assumption change, fix this unit test accordingly.
+ // FILE_ATTRIBUTE_NOT_CONTENT_INDEXED doesn't exist on XP.
+ DWORD expected =
+ (attrs & (FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_DIRECTORY));
+ if (win::GetVersion() >= win::VERSION_VISTA)
+ expected |= FILE_ATTRIBUTE_NOT_CONTENT_INDEXED;
+ attrs = GetFileAttributes(path.value().c_str());
+ ASSERT_EQ(expected, attrs);
+ #else
+ // On all other platforms, it involves setting of all bits.
+ EXPECT_TRUE(SetPosixFilePermissions(path, S_IRUSR | S_IXUSR | S_IWUSR));
+ #endif
+}
+
// Sets the source file to read-only.
void SetReadOnly(const FilePath& path) {
#if defined(OS_WIN)
@@ -1386,17 +1409,20 @@ void SetReadOnly(const FilePath& path) {
ASSERT_NE(INVALID_FILE_ATTRIBUTES, attrs);
ASSERT_TRUE(SetFileAttributes(
path.value().c_str(), attrs | FILE_ATTRIBUTE_READONLY));
- attrs = GetFileAttributes(path.value().c_str());
// Files in the temporary directory should not be indexed ever. If this
// assumption change, fix this unit test accordingly.
// FILE_ATTRIBUTE_NOT_CONTENT_INDEXED doesn't exist on XP.
- DWORD expected = FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_READONLY;
+ DWORD expected =
+ (attrs & (FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_DIRECTORY)) |
+ FILE_ATTRIBUTE_READONLY;
if (win::GetVersion() >= win::VERSION_VISTA)
expected |= FILE_ATTRIBUTE_NOT_CONTENT_INDEXED;
+ attrs = GetFileAttributes(path.value().c_str());
ASSERT_EQ(expected, attrs);
#else
// On all other platforms, it involves removing the write bit.
- EXPECT_TRUE(SetPosixFilePermissions(path, S_IRUSR));
+ EXPECT_TRUE(SetPosixFilePermissions(
+ path, DirectoryExists(path) ? S_IRUSR | S_IXUSR : S_IRUSR));
#endif
}
@@ -1413,9 +1439,10 @@ bool IsReadOnly(const FilePath& path) {
}
TEST_F(FileUtilTest, CopyDirectoryACL) {
- // Create a directory.
+ // Create source directories.
FilePath src = temp_dir_.path().Append(FILE_PATH_LITERAL("src"));
- CreateDirectory(src);
+ FilePath src_subdir = src.Append(FILE_PATH_LITERAL("subdir"));
+ CreateDirectory(src_subdir);
ASSERT_TRUE(PathExists(src));
rvargas (doing something else) 2014/10/23 01:12:11 src_subdir ?
ripp 2014/10/23 07:04:51 Done.
// Create a file under the directory.
@@ -1424,12 +1451,20 @@ TEST_F(FileUtilTest, CopyDirectoryACL) {
SetReadOnly(src_file);
ASSERT_TRUE(IsReadOnly(src_file));
+ // Make data directory read-only
rvargas (doing something else) 2014/10/23 01:12:11 nit: remove "data" and end with period.
ripp 2014/10/23 07:04:51 Done.
+ SetReadOnly(src_subdir);
+
rvargas (doing something else) 2014/10/23 01:12:11 ASERT_TRUE(IsReadOnly())
ripp 2014/10/23 07:04:51 Done.
// Copy the directory recursively.
FilePath dst = temp_dir_.path().Append(FILE_PATH_LITERAL("dst"));
FilePath dst_file = dst.Append(FILE_PATH_LITERAL("src.txt"));
EXPECT_TRUE(CopyDirectory(src, dst, true));
+ FilePath dst_subdir = dst.Append(FILE_PATH_LITERAL("subdir"));
+ ASSERT_FALSE(IsReadOnly(dst_subdir));
ASSERT_FALSE(IsReadOnly(dst_file));
+
+ // Give write permissions to allow deletion
rvargas (doing something else) 2014/10/23 01:12:11 nit: end with period.
ripp 2014/10/23 07:04:51 Done.
+ SetFullAccess(src_subdir);
rvargas (doing something else) 2014/10/23 01:12:11 Why not SetReadOnly(path, false) ? There is a lot
ripp 2014/10/23 07:04:51 Ok, moved to SetReadOnly(path, false)
}
TEST_F(FileUtilTest, CopyFile) {
« no previous file with comments | « base/files/file_util_posix.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698