OLD | NEW |
1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 1 // Copyright 2015 The Crashpad Authors. All rights reserved. |
2 // | 2 // |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
6 // | 6 // |
7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
8 // | 8 // |
9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "test/errors.h" | 21 #include "test/errors.h" |
22 #include "test/file.h" | 22 #include "test/file.h" |
23 #include "test/scoped_temp_dir.h" | 23 #include "test/scoped_temp_dir.h" |
24 #include "util/misc/implicit_cast.h" | 24 #include "util/misc/implicit_cast.h" |
25 #include "util/thread/thread.h" | 25 #include "util/thread/thread.h" |
26 | 26 |
27 namespace crashpad { | 27 namespace crashpad { |
28 namespace test { | 28 namespace test { |
29 namespace { | 29 namespace { |
30 | 30 |
31 TEST(FileIO, OpenFileForWrite) { | 31 void TestOpenFileForWrite(FileHandle (*opener)(const base::FilePath&, |
| 32 FileWriteMode, |
| 33 FilePermissions)) { |
32 ScopedTempDir temp_dir; | 34 ScopedTempDir temp_dir; |
33 base::FilePath file_path_1 = | 35 base::FilePath file_path_1 = |
34 temp_dir.path().Append(FILE_PATH_LITERAL("file_1")); | 36 temp_dir.path().Append(FILE_PATH_LITERAL("file_1")); |
35 ASSERT_FALSE(FileExists(file_path_1)); | 37 ASSERT_FALSE(FileExists(file_path_1)); |
36 | 38 |
37 ScopedFileHandle | 39 ScopedFileHandle file_handle(opener(file_path_1, |
38 file_handle(LoggingOpenFileForWrite(file_path_1, | 40 FileWriteMode::kReuseOrFail, |
39 FileWriteMode::kReuseOrFail, | 41 FilePermissions::kWorldReadable)); |
40 FilePermissions::kWorldReadable)); | |
41 EXPECT_EQ(kInvalidFileHandle, file_handle); | 42 EXPECT_EQ(kInvalidFileHandle, file_handle); |
42 EXPECT_FALSE(FileExists(file_path_1)); | 43 EXPECT_FALSE(FileExists(file_path_1)); |
43 | 44 |
44 file_handle.reset(LoggingOpenFileForWrite(file_path_1, | 45 file_handle.reset(opener(file_path_1, |
45 FileWriteMode::kCreateOrFail, | 46 FileWriteMode::kCreateOrFail, |
46 FilePermissions::kWorldReadable)); | 47 FilePermissions::kWorldReadable)); |
47 EXPECT_NE(kInvalidFileHandle, file_handle); | 48 EXPECT_NE(kInvalidFileHandle, file_handle); |
48 EXPECT_TRUE(FileExists(file_path_1)); | 49 EXPECT_TRUE(FileExists(file_path_1)); |
49 EXPECT_EQ(0, FileSize(file_path_1)); | 50 EXPECT_EQ(0, FileSize(file_path_1)); |
50 | 51 |
51 file_handle.reset(LoggingOpenFileForWrite(file_path_1, | 52 file_handle.reset(opener(file_path_1, |
52 FileWriteMode::kReuseOrCreate, | 53 FileWriteMode::kReuseOrCreate, |
53 FilePermissions::kWorldReadable)); | 54 FilePermissions::kWorldReadable)); |
54 EXPECT_NE(kInvalidFileHandle, file_handle); | 55 EXPECT_NE(kInvalidFileHandle, file_handle); |
55 EXPECT_TRUE(FileExists(file_path_1)); | 56 EXPECT_TRUE(FileExists(file_path_1)); |
56 EXPECT_EQ(0, FileSize(file_path_1)); | 57 EXPECT_EQ(0, FileSize(file_path_1)); |
57 | 58 |
58 const char data = '%'; | 59 const char data = '%'; |
59 EXPECT_TRUE(LoggingWriteFile(file_handle.get(), &data, sizeof(data))); | 60 EXPECT_TRUE(LoggingWriteFile(file_handle.get(), &data, sizeof(data))); |
60 | 61 |
61 // Close file_handle to ensure that the write is flushed to disk. | 62 // Close file_handle to ensure that the write is flushed to disk. |
62 file_handle.reset(); | 63 file_handle.reset(); |
63 EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1)); | 64 EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1)); |
64 | 65 |
65 file_handle.reset(LoggingOpenFileForWrite(file_path_1, | 66 file_handle.reset(opener(file_path_1, |
66 FileWriteMode::kReuseOrCreate, | 67 FileWriteMode::kReuseOrCreate, |
67 FilePermissions::kWorldReadable)); | 68 FilePermissions::kWorldReadable)); |
68 EXPECT_NE(kInvalidFileHandle, file_handle); | 69 EXPECT_NE(kInvalidFileHandle, file_handle); |
69 EXPECT_TRUE(FileExists(file_path_1)); | 70 EXPECT_TRUE(FileExists(file_path_1)); |
70 EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1)); | 71 EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1)); |
71 | 72 |
72 file_handle.reset(LoggingOpenFileForWrite(file_path_1, | 73 file_handle.reset(opener(file_path_1, |
73 FileWriteMode::kCreateOrFail, | 74 FileWriteMode::kCreateOrFail, |
74 FilePermissions::kWorldReadable)); | 75 FilePermissions::kWorldReadable)); |
75 EXPECT_EQ(kInvalidFileHandle, file_handle); | 76 EXPECT_EQ(kInvalidFileHandle, file_handle); |
76 EXPECT_TRUE(FileExists(file_path_1)); | 77 EXPECT_TRUE(FileExists(file_path_1)); |
77 EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1)); | 78 EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1)); |
78 | 79 |
79 file_handle.reset(LoggingOpenFileForWrite(file_path_1, | 80 file_handle.reset(opener(file_path_1, |
80 FileWriteMode::kReuseOrFail, | 81 FileWriteMode::kReuseOrFail, |
81 FilePermissions::kWorldReadable)); | 82 FilePermissions::kWorldReadable)); |
82 EXPECT_NE(kInvalidFileHandle, file_handle); | 83 EXPECT_NE(kInvalidFileHandle, file_handle); |
83 EXPECT_TRUE(FileExists(file_path_1)); | 84 EXPECT_TRUE(FileExists(file_path_1)); |
84 EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1)); | 85 EXPECT_EQ(implicit_cast<FileOffset>(sizeof(data)), FileSize(file_path_1)); |
85 | 86 |
86 file_handle.reset(LoggingOpenFileForWrite(file_path_1, | 87 file_handle.reset(opener(file_path_1, |
87 FileWriteMode::kTruncateOrCreate, | 88 FileWriteMode::kTruncateOrCreate, |
88 FilePermissions::kWorldReadable)); | 89 FilePermissions::kWorldReadable)); |
89 EXPECT_NE(kInvalidFileHandle, file_handle); | 90 EXPECT_NE(kInvalidFileHandle, file_handle); |
90 EXPECT_TRUE(FileExists(file_path_1)); | 91 EXPECT_TRUE(FileExists(file_path_1)); |
91 EXPECT_EQ(0, FileSize(file_path_1)); | 92 EXPECT_EQ(0, FileSize(file_path_1)); |
92 | 93 |
93 base::FilePath file_path_2 = | 94 base::FilePath file_path_2 = |
94 temp_dir.path().Append(FILE_PATH_LITERAL("file_2")); | 95 temp_dir.path().Append(FILE_PATH_LITERAL("file_2")); |
95 ASSERT_FALSE(FileExists(file_path_2)); | 96 ASSERT_FALSE(FileExists(file_path_2)); |
96 | 97 |
97 file_handle.reset(LoggingOpenFileForWrite(file_path_2, | 98 file_handle.reset(opener(file_path_2, |
98 FileWriteMode::kTruncateOrCreate, | 99 FileWriteMode::kTruncateOrCreate, |
99 FilePermissions::kWorldReadable)); | 100 FilePermissions::kWorldReadable)); |
100 EXPECT_NE(kInvalidFileHandle, file_handle); | 101 EXPECT_NE(kInvalidFileHandle, file_handle); |
101 EXPECT_TRUE(FileExists(file_path_2)); | 102 EXPECT_TRUE(FileExists(file_path_2)); |
102 EXPECT_EQ(0, FileSize(file_path_2)); | 103 EXPECT_EQ(0, FileSize(file_path_2)); |
103 | 104 |
104 base::FilePath file_path_3 = | 105 base::FilePath file_path_3 = |
105 temp_dir.path().Append(FILE_PATH_LITERAL("file_3")); | 106 temp_dir.path().Append(FILE_PATH_LITERAL("file_3")); |
106 ASSERT_FALSE(FileExists(file_path_3)); | 107 ASSERT_FALSE(FileExists(file_path_3)); |
107 | 108 |
108 file_handle.reset(LoggingOpenFileForWrite(file_path_3, | 109 file_handle.reset(opener(file_path_3, |
109 FileWriteMode::kReuseOrCreate, | 110 FileWriteMode::kReuseOrCreate, |
110 FilePermissions::kWorldReadable)); | 111 FilePermissions::kWorldReadable)); |
111 EXPECT_NE(kInvalidFileHandle, file_handle); | 112 EXPECT_NE(kInvalidFileHandle, file_handle); |
112 EXPECT_TRUE(FileExists(file_path_3)); | 113 EXPECT_TRUE(FileExists(file_path_3)); |
113 EXPECT_EQ(0, FileSize(file_path_3)); | 114 EXPECT_EQ(0, FileSize(file_path_3)); |
114 } | 115 } |
115 | 116 |
| 117 TEST(FileIO, OpenFileForWrite) { |
| 118 TestOpenFileForWrite(OpenFileForWrite); |
| 119 } |
| 120 |
| 121 TEST(FileIO, OpenFileForReadAndWrite) { |
| 122 TestOpenFileForWrite(OpenFileForReadAndWrite); |
| 123 } |
| 124 |
| 125 TEST(FileIO, LoggingOpenFileForWrite) { |
| 126 TestOpenFileForWrite(LoggingOpenFileForWrite); |
| 127 } |
| 128 |
| 129 TEST(FileIO, LoggingOpenFileForReadAndWrite) { |
| 130 TestOpenFileForWrite(LoggingOpenFileForReadAndWrite); |
| 131 } |
| 132 |
116 enum class ReadOrWrite : bool { | 133 enum class ReadOrWrite : bool { |
117 kRead, | 134 kRead, |
118 kWrite, | 135 kWrite, |
119 }; | 136 }; |
120 | 137 |
121 void FileShareModeTest(ReadOrWrite first, ReadOrWrite second) { | 138 void FileShareModeTest(ReadOrWrite first, ReadOrWrite second) { |
122 ScopedTempDir temp_dir; | 139 ScopedTempDir temp_dir; |
123 base::FilePath shared_file = | 140 base::FilePath shared_file = |
124 temp_dir.path().Append(FILE_PATH_LITERAL("shared_file")); | 141 temp_dir.path().Append(FILE_PATH_LITERAL("shared_file")); |
125 { | 142 { |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 LockingTest(FileLocking::kExclusive, FileLocking::kShared); | 302 LockingTest(FileLocking::kExclusive, FileLocking::kShared); |
286 } | 303 } |
287 | 304 |
288 TEST(FileIO, SharedVsExclusives) { | 305 TEST(FileIO, SharedVsExclusives) { |
289 LockingTest(FileLocking::kShared, FileLocking::kExclusive); | 306 LockingTest(FileLocking::kShared, FileLocking::kExclusive); |
290 } | 307 } |
291 | 308 |
292 } // namespace | 309 } // namespace |
293 } // namespace test | 310 } // namespace test |
294 } // namespace crashpad | 311 } // namespace crashpad |
OLD | NEW |