| 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,
|
|
|