aboutsummaryrefslogtreecommitdiffstats
path: root/brillo/file_utils_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'brillo/file_utils_unittest.cc')
-rw-r--r--brillo/file_utils_unittest.cc135
1 files changed, 135 insertions, 0 deletions
diff --git a/brillo/file_utils_unittest.cc b/brillo/file_utils_unittest.cc
new file mode 100644
index 0000000..f8898a0
--- /dev/null
+++ b/brillo/file_utils_unittest.cc
@@ -0,0 +1,135 @@
+// Copyright 2014 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "brillo/file_utils.h"
+
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <string>
+
+#include <base/files/file_util.h>
+#include <base/files/scoped_temp_dir.h>
+#include <gtest/gtest.h>
+
+namespace brillo {
+
+class FileUtilsTest : public testing::Test {
+ public:
+ FileUtilsTest() {
+ CHECK(temp_dir_.CreateUniqueTempDir());
+ file_path_ = temp_dir_.path().Append("test.temp");
+ }
+
+ protected:
+ base::FilePath file_path_;
+ base::ScopedTempDir temp_dir_;
+
+ // Writes |contents| to |file_path_|. Pulled into a separate function just
+ // to improve readability of tests.
+ void WriteFile(const std::string& contents) {
+ EXPECT_EQ(contents.length(),
+ base::WriteFile(file_path_, contents.c_str(), contents.length()));
+ }
+
+ // Verifies that the file at |file_path_| exists and contains |contents|.
+ void ExpectFileContains(const std::string& contents) {
+ EXPECT_TRUE(base::PathExists(file_path_));
+ std::string new_contents;
+ EXPECT_TRUE(base::ReadFileToString(file_path_, &new_contents));
+ EXPECT_EQ(contents, new_contents);
+ }
+
+ // Verifies that the file at |file_path_| has |permissions|.
+ void ExpectFilePermissions(int permissions) {
+ int actual_permissions;
+ EXPECT_TRUE(base::GetPosixFilePermissions(file_path_, &actual_permissions));
+ EXPECT_EQ(permissions, actual_permissions);
+ }
+};
+
+namespace {
+
+enum {
+ kPermissions600 =
+ base::FILE_PERMISSION_READ_BY_USER | base::FILE_PERMISSION_WRITE_BY_USER,
+ kPermissions700 = base::FILE_PERMISSION_USER_MASK,
+ kPermissions777 = base::FILE_PERMISSION_MASK
+};
+
+} // namespace
+
+TEST_F(FileUtilsTest, TouchFileCreate) {
+ EXPECT_TRUE(TouchFile(file_path_));
+ ExpectFileContains("");
+ ExpectFilePermissions(kPermissions600);
+}
+
+TEST_F(FileUtilsTest, TouchFileCreateThroughUmask) {
+ mode_t old_umask = umask(kPermissions777);
+ EXPECT_TRUE(TouchFile(file_path_));
+ umask(old_umask);
+ ExpectFileContains("");
+ ExpectFilePermissions(kPermissions600);
+}
+
+TEST_F(FileUtilsTest, TouchFileCreateDirectoryStructure) {
+ file_path_ = temp_dir_.path().Append("foo/bar/baz/test.temp");
+ EXPECT_TRUE(TouchFile(file_path_));
+ ExpectFileContains("");
+}
+
+TEST_F(FileUtilsTest, TouchFileExisting) {
+ WriteFile("abcd");
+ EXPECT_TRUE(TouchFile(file_path_));
+ ExpectFileContains("abcd");
+}
+
+TEST_F(FileUtilsTest, TouchFileReplaceDirectory) {
+ EXPECT_TRUE(base::CreateDirectory(file_path_));
+ EXPECT_TRUE(TouchFile(file_path_));
+ EXPECT_FALSE(base::DirectoryExists(file_path_));
+ ExpectFileContains("");
+}
+
+TEST_F(FileUtilsTest, TouchFileReplaceSymlink) {
+ base::FilePath symlink_target = temp_dir_.path().Append("target.temp");
+ EXPECT_TRUE(base::CreateSymbolicLink(symlink_target, file_path_));
+ EXPECT_TRUE(TouchFile(file_path_));
+ EXPECT_FALSE(base::IsLink(file_path_));
+ ExpectFileContains("");
+}
+
+TEST_F(FileUtilsTest, TouchFileReplaceOtherUser) {
+ WriteFile("abcd");
+ EXPECT_TRUE(TouchFile(file_path_, kPermissions777, geteuid() + 1, getegid()));
+ ExpectFileContains("");
+}
+
+TEST_F(FileUtilsTest, TouchFileReplaceOtherGroup) {
+ WriteFile("abcd");
+ EXPECT_TRUE(TouchFile(file_path_, kPermissions777, geteuid(), getegid() + 1));
+ ExpectFileContains("");
+}
+
+TEST_F(FileUtilsTest, TouchFileCreateWithAllPermissions) {
+ EXPECT_TRUE(TouchFile(file_path_, kPermissions777, geteuid(), getegid()));
+ ExpectFileContains("");
+ ExpectFilePermissions(kPermissions777);
+}
+
+TEST_F(FileUtilsTest, TouchFileCreateWithOwnerPermissions) {
+ EXPECT_TRUE(TouchFile(file_path_, kPermissions700, geteuid(), getegid()));
+ ExpectFileContains("");
+ ExpectFilePermissions(kPermissions700);
+}
+
+TEST_F(FileUtilsTest, TouchFileExistingPermissionsUnchanged) {
+ EXPECT_TRUE(TouchFile(file_path_, kPermissions777, geteuid(), getegid()));
+ EXPECT_TRUE(TouchFile(file_path_, kPermissions700, geteuid(), getegid()));
+ ExpectFileContains("");
+ ExpectFilePermissions(kPermissions777);
+}
+
+} // namespace brillo