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

Unified Diff: util/file/file_io_test.cc

Issue 1390023002: Add FileWriteMode::kCreateOrFail (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Test that kReuseOrCreate can create Created 5 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 | « util/file/file_io_posix.cc ('k') | util/file/file_io_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: util/file/file_io_test.cc
diff --git a/util/file/file_io_test.cc b/util/file/file_io_test.cc
index 5719dccb084ad15afc835cbf435780f01247d82f..29cf320444e9c6b1bc1a7e57857744310a246202 100644
--- a/util/file/file_io_test.cc
+++ b/util/file/file_io_test.cc
@@ -19,13 +19,100 @@
#include "base/files/file_path.h"
#include "gtest/gtest.h"
#include "test/errors.h"
+#include "test/file.h"
#include "test/scoped_temp_dir.h"
+#include "util/misc/implicit_cast.h"
#include "util/thread/thread.h"
namespace crashpad {
namespace test {
namespace {
+TEST(FileIO, OpenFileForWrite) {
+ ScopedTempDir temp_dir;
+ base::FilePath file_path_1 =
+ temp_dir.path().Append(FILE_PATH_LITERAL("file_1"));
+ ASSERT_FALSE(FileExists(file_path_1));
+
+ ScopedFileHandle
+ file_handle(LoggingOpenFileForWrite(file_path_1,
+ FileWriteMode::kReuseOrFail,
+ FilePermissions::kWorldReadable));
+ EXPECT_EQ(kInvalidFileHandle, file_handle);
+ EXPECT_FALSE(FileExists(file_path_1));
+
+ file_handle.reset(LoggingOpenFileForWrite(file_path_1,
+ FileWriteMode::kCreateOrFail,
+ FilePermissions::kWorldReadable));
+ EXPECT_NE(kInvalidFileHandle, file_handle);
+ EXPECT_TRUE(FileExists(file_path_1));
+ EXPECT_EQ(0, FileSize(file_path_1));
+
+ file_handle.reset(LoggingOpenFileForWrite(file_path_1,
+ FileWriteMode::kReuseOrCreate,
+ FilePermissions::kWorldReadable));
+ EXPECT_NE(kInvalidFileHandle, file_handle);
+ EXPECT_TRUE(FileExists(file_path_1));
+ EXPECT_EQ(0, FileSize(file_path_1));
+
+ const char data = '%';
+ EXPECT_TRUE(LoggingWriteFile(file_handle.get(), &data, sizeof(data)));
+
+ // Close file_handle to ensure that the write is flushed to disk.
+ file_handle.reset();
+ EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1));
+
+ file_handle.reset(LoggingOpenFileForWrite(file_path_1,
+ FileWriteMode::kReuseOrCreate,
+ FilePermissions::kWorldReadable));
+ EXPECT_NE(kInvalidFileHandle, file_handle);
+ EXPECT_TRUE(FileExists(file_path_1));
+ EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1));
+
+ file_handle.reset(LoggingOpenFileForWrite(file_path_1,
+ FileWriteMode::kCreateOrFail,
+ FilePermissions::kWorldReadable));
+ EXPECT_EQ(kInvalidFileHandle, file_handle);
+ EXPECT_TRUE(FileExists(file_path_1));
+ EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1));
+
+ file_handle.reset(LoggingOpenFileForWrite(file_path_1,
+ FileWriteMode::kReuseOrFail,
+ FilePermissions::kWorldReadable));
+ EXPECT_NE(kInvalidFileHandle, file_handle);
+ EXPECT_TRUE(FileExists(file_path_1));
+ EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1));
+
+ file_handle.reset(LoggingOpenFileForWrite(file_path_1,
+ FileWriteMode::kTruncateOrCreate,
+ FilePermissions::kWorldReadable));
+ EXPECT_NE(kInvalidFileHandle, file_handle);
+ EXPECT_TRUE(FileExists(file_path_1));
+ EXPECT_EQ(0, FileSize(file_path_1));
+
+ base::FilePath file_path_2 =
+ temp_dir.path().Append(FILE_PATH_LITERAL("file_2"));
+ ASSERT_FALSE(FileExists(file_path_2));
+
+ file_handle.reset(LoggingOpenFileForWrite(file_path_2,
+ FileWriteMode::kTruncateOrCreate,
+ FilePermissions::kWorldReadable));
+ EXPECT_NE(kInvalidFileHandle, file_handle);
+ EXPECT_TRUE(FileExists(file_path_2));
+ EXPECT_EQ(0, FileSize(file_path_2));
+
+ base::FilePath file_path_3 =
+ temp_dir.path().Append(FILE_PATH_LITERAL("file_3"));
+ ASSERT_FALSE(FileExists(file_path_3));
+
+ file_handle.reset(LoggingOpenFileForWrite(file_path_3,
+ FileWriteMode::kReuseOrCreate,
+ FilePermissions::kWorldReadable));
+ EXPECT_NE(kInvalidFileHandle, file_handle);
+ EXPECT_TRUE(FileExists(file_path_3));
+ EXPECT_EQ(0, FileSize(file_path_3));
+}
+
enum class ReadOrWrite : bool {
kRead,
kWrite,
« no previous file with comments | « util/file/file_io_posix.cc ('k') | util/file/file_io_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698