OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 // Make some files. | 25 // Make some files. |
26 const struct { | 26 const struct { |
27 const char* name; | 27 const char* name; |
28 uint32_t open_flags; | 28 uint32_t open_flags; |
29 } files_to_create[] = { | 29 } files_to_create[] = { |
30 {"my_file1", mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate}, | 30 {"my_file1", mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate}, |
31 {"my_file2", mojom::kFlagWrite | mojom::kFlagCreate}, | 31 {"my_file2", mojom::kFlagWrite | mojom::kFlagCreate}, |
32 {"my_file3", mojom::kFlagAppend | mojom::kFlagCreate}}; | 32 {"my_file3", mojom::kFlagAppend | mojom::kFlagCreate}}; |
33 for (size_t i = 0; i < arraysize(files_to_create); i++) { | 33 for (size_t i = 0; i < arraysize(files_to_create); i++) { |
34 error = mojom::FileError::FAILED; | 34 error = mojom::FileError::FAILED; |
35 directory->OpenFile(files_to_create[i].name, nullptr, | 35 bool handled = directory->OpenFile(files_to_create[i].name, nullptr, |
36 files_to_create[i].open_flags, Capture(&error)); | 36 files_to_create[i].open_flags, &error); |
37 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 37 ASSERT_TRUE(handled); |
38 EXPECT_EQ(mojom::FileError::OK, error); | 38 EXPECT_EQ(mojom::FileError::OK, error); |
39 } | 39 } |
40 // Make a directory. | 40 // Make a directory. |
41 error = mojom::FileError::FAILED; | 41 error = mojom::FileError::FAILED; |
42 directory->OpenDirectory( | 42 bool handled = directory->OpenDirectory( |
43 "my_dir", nullptr, | 43 "my_dir", nullptr, |
44 mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate, | 44 mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate, &error); |
45 Capture(&error)); | 45 ASSERT_TRUE(handled); |
46 ASSERT_TRUE(directory.WaitForIncomingResponse()); | |
47 EXPECT_EQ(mojom::FileError::OK, error); | 46 EXPECT_EQ(mojom::FileError::OK, error); |
48 | 47 |
49 error = mojom::FileError::FAILED; | 48 error = mojom::FileError::FAILED; |
50 mojo::Array<mojom::DirectoryEntryPtr> directory_contents; | 49 mojo::Array<mojom::DirectoryEntryPtr> directory_contents; |
51 directory->Read(Capture(&error, &directory_contents)); | 50 handled = directory->Read(&error, &directory_contents); |
52 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 51 ASSERT_TRUE(handled); |
53 EXPECT_EQ(mojom::FileError::OK, error); | 52 EXPECT_EQ(mojom::FileError::OK, error); |
54 | 53 |
55 // Expected contents of the directory. | 54 // Expected contents of the directory. |
56 std::map<std::string, mojom::FsFileType> expected_contents; | 55 std::map<std::string, mojom::FsFileType> expected_contents; |
57 expected_contents["my_file1"] = mojom::FsFileType::REGULAR_FILE; | 56 expected_contents["my_file1"] = mojom::FsFileType::REGULAR_FILE; |
58 expected_contents["my_file2"] = mojom::FsFileType::REGULAR_FILE; | 57 expected_contents["my_file2"] = mojom::FsFileType::REGULAR_FILE; |
59 expected_contents["my_file3"] = mojom::FsFileType::REGULAR_FILE; | 58 expected_contents["my_file3"] = mojom::FsFileType::REGULAR_FILE; |
60 expected_contents["my_dir"] = mojom::FsFileType::DIRECTORY; | 59 expected_contents["my_dir"] = mojom::FsFileType::DIRECTORY; |
61 // Note: We don't expose ".." or ".". | 60 // Note: We don't expose ".." or ".". |
62 | 61 |
(...skipping 10 matching lines...) Expand all Loading... |
73 | 72 |
74 // TODO(vtl): Properly test OpenFile() and OpenDirectory() (including flags). | 73 // TODO(vtl): Properly test OpenFile() and OpenDirectory() (including flags). |
75 | 74 |
76 TEST_F(DirectoryImplTest, BasicRenameDelete) { | 75 TEST_F(DirectoryImplTest, BasicRenameDelete) { |
77 mojom::DirectoryPtr directory; | 76 mojom::DirectoryPtr directory; |
78 GetTemporaryRoot(&directory); | 77 GetTemporaryRoot(&directory); |
79 mojom::FileError error; | 78 mojom::FileError error; |
80 | 79 |
81 // Create my_file. | 80 // Create my_file. |
82 error = mojom::FileError::FAILED; | 81 error = mojom::FileError::FAILED; |
83 directory->OpenFile("my_file", nullptr, | 82 bool handled = directory->OpenFile( |
84 mojom::kFlagWrite | mojom::kFlagCreate, Capture(&error)); | 83 "my_file", nullptr, mojom::kFlagWrite | mojom::kFlagCreate, &error); |
85 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 84 ASSERT_TRUE(handled); |
86 EXPECT_EQ(mojom::FileError::OK, error); | 85 EXPECT_EQ(mojom::FileError::OK, error); |
87 | 86 |
88 // Opening my_file should succeed. | 87 // Opening my_file should succeed. |
89 error = mojom::FileError::FAILED; | 88 error = mojom::FileError::FAILED; |
90 directory->OpenFile("my_file", nullptr, mojom::kFlagRead | mojom::kFlagOpen, | 89 handled = directory->OpenFile("my_file", nullptr, |
91 Capture(&error)); | 90 mojom::kFlagRead | mojom::kFlagOpen, &error); |
92 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 91 ASSERT_TRUE(handled); |
93 EXPECT_EQ(mojom::FileError::OK, error); | 92 EXPECT_EQ(mojom::FileError::OK, error); |
94 | 93 |
95 // Rename my_file to my_new_file. | 94 // Rename my_file to my_new_file. |
96 directory->Rename("my_file", "my_new_file", Capture(&error)); | 95 handled = directory->Rename("my_file", "my_new_file", &error); |
97 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 96 ASSERT_TRUE(handled); |
98 EXPECT_EQ(mojom::FileError::OK, error); | 97 EXPECT_EQ(mojom::FileError::OK, error); |
99 | 98 |
100 // Opening my_file should fail. | 99 // Opening my_file should fail. |
101 | 100 |
102 error = mojom::FileError::FAILED; | 101 error = mojom::FileError::FAILED; |
103 directory->OpenFile("my_file", nullptr, mojom::kFlagRead | mojom::kFlagOpen, | 102 handled = directory->OpenFile("my_file", nullptr, |
104 Capture(&error)); | 103 mojom::kFlagRead | mojom::kFlagOpen, &error); |
105 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 104 ASSERT_TRUE(handled); |
106 EXPECT_EQ(mojom::FileError::NOT_FOUND, error); | 105 EXPECT_EQ(mojom::FileError::NOT_FOUND, error); |
107 | 106 |
108 // Opening my_new_file should succeed. | 107 // Opening my_new_file should succeed. |
109 error = mojom::FileError::FAILED; | 108 error = mojom::FileError::FAILED; |
110 directory->OpenFile("my_new_file", nullptr, | 109 handled = directory->OpenFile("my_new_file", nullptr, |
111 mojom::kFlagRead | mojom::kFlagOpen, Capture(&error)); | 110 mojom::kFlagRead | mojom::kFlagOpen, &error); |
112 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 111 ASSERT_TRUE(handled); |
113 EXPECT_EQ(mojom::FileError::OK, error); | 112 EXPECT_EQ(mojom::FileError::OK, error); |
114 | 113 |
115 // Delete my_new_file (no flags). | 114 // Delete my_new_file (no flags). |
116 directory->Delete("my_new_file", 0, Capture(&error)); | 115 handled = directory->Delete("my_new_file", 0, &error); |
117 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 116 ASSERT_TRUE(handled); |
118 EXPECT_EQ(mojom::FileError::OK, error); | 117 EXPECT_EQ(mojom::FileError::OK, error); |
119 | 118 |
120 // Opening my_new_file should fail. | 119 // Opening my_new_file should fail. |
121 error = mojom::FileError::FAILED; | 120 error = mojom::FileError::FAILED; |
122 directory->OpenFile("my_new_file", nullptr, | 121 handled = directory->OpenFile("my_new_file", nullptr, |
123 mojom::kFlagRead | mojom::kFlagOpen, Capture(&error)); | 122 mojom::kFlagRead | mojom::kFlagOpen, &error); |
124 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 123 ASSERT_TRUE(handled); |
125 EXPECT_EQ(mojom::FileError::NOT_FOUND, error); | 124 EXPECT_EQ(mojom::FileError::NOT_FOUND, error); |
126 } | 125 } |
127 | 126 |
128 TEST_F(DirectoryImplTest, CantOpenDirectoriesAsFiles) { | 127 TEST_F(DirectoryImplTest, CantOpenDirectoriesAsFiles) { |
129 mojom::DirectoryPtr directory; | 128 mojom::DirectoryPtr directory; |
130 GetTemporaryRoot(&directory); | 129 GetTemporaryRoot(&directory); |
131 mojom::FileError error; | 130 mojom::FileError error; |
132 | 131 |
133 { | 132 { |
134 // Create a directory called 'my_file' | 133 // Create a directory called 'my_file' |
135 mojom::DirectoryPtr my_file_directory; | 134 mojom::DirectoryPtr my_file_directory; |
136 error = mojom::FileError::FAILED; | 135 error = mojom::FileError::FAILED; |
137 directory->OpenDirectory( | 136 bool handled = directory->OpenDirectory( |
138 "my_file", GetProxy(&my_file_directory), | 137 "my_file", GetProxy(&my_file_directory), |
139 mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate, | 138 mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate, &error); |
140 Capture(&error)); | 139 ASSERT_TRUE(handled); |
141 ASSERT_TRUE(directory.WaitForIncomingResponse()); | |
142 EXPECT_EQ(mojom::FileError::OK, error); | 140 EXPECT_EQ(mojom::FileError::OK, error); |
143 } | 141 } |
144 | 142 |
145 { | 143 { |
146 // Attempt to open that directory as a file. This must fail! | 144 // Attempt to open that directory as a file. This must fail! |
147 mojom::FilePtr file; | 145 mojom::FilePtr file; |
148 error = mojom::FileError::FAILED; | 146 error = mojom::FileError::FAILED; |
149 directory->OpenFile("my_file", GetProxy(&file), | 147 bool handled = |
150 mojom::kFlagRead | mojom::kFlagOpen, Capture(&error)); | 148 directory->OpenFile("my_file", GetProxy(&file), |
151 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 149 mojom::kFlagRead | mojom::kFlagOpen, &error); |
| 150 ASSERT_TRUE(handled); |
152 EXPECT_EQ(mojom::FileError::NOT_A_FILE, error); | 151 EXPECT_EQ(mojom::FileError::NOT_A_FILE, error); |
153 } | 152 } |
154 } | 153 } |
155 | 154 |
156 TEST_F(DirectoryImplTest, Clone) { | 155 TEST_F(DirectoryImplTest, Clone) { |
157 mojom::DirectoryPtr clone_one; | 156 mojom::DirectoryPtr clone_one; |
158 mojom::DirectoryPtr clone_two; | 157 mojom::DirectoryPtr clone_two; |
159 mojom::FileError error; | 158 mojom::FileError error; |
160 | 159 |
161 { | 160 { |
162 mojom::DirectoryPtr directory; | 161 mojom::DirectoryPtr directory; |
163 GetTemporaryRoot(&directory); | 162 GetTemporaryRoot(&directory); |
164 | 163 |
165 directory->Clone(GetProxy(&clone_one)); | 164 directory->Clone(GetProxy(&clone_one)); |
166 directory->Clone(GetProxy(&clone_two)); | 165 directory->Clone(GetProxy(&clone_two)); |
167 | 166 |
168 // Original temporary directory goes out of scope here; shouldn't be | 167 // Original temporary directory goes out of scope here; shouldn't be |
169 // deleted since it has clones. | 168 // deleted since it has clones. |
170 } | 169 } |
171 | 170 |
172 std::string data("one two three"); | 171 std::string data("one two three"); |
173 { | 172 { |
174 clone_one->WriteFile("data", mojo::Array<uint8_t>::From(data), | 173 bool handled = |
175 Capture(&error)); | 174 clone_one->WriteFile("data", mojo::Array<uint8_t>::From(data), &error); |
176 ASSERT_TRUE(clone_one.WaitForIncomingResponse()); | 175 ASSERT_TRUE(handled); |
177 EXPECT_EQ(mojom::FileError::OK, error); | 176 EXPECT_EQ(mojom::FileError::OK, error); |
178 } | 177 } |
179 | 178 |
180 { | 179 { |
181 mojo::Array<uint8_t> file_contents; | 180 mojo::Array<uint8_t> file_contents; |
182 clone_two->ReadEntireFile("data", Capture(&error, &file_contents)); | 181 bool handled = clone_two->ReadEntireFile("data", &error, &file_contents); |
183 ASSERT_TRUE(clone_two.WaitForIncomingResponse()); | 182 ASSERT_TRUE(handled); |
184 EXPECT_EQ(mojom::FileError::OK, error); | 183 EXPECT_EQ(mojom::FileError::OK, error); |
185 | 184 |
186 EXPECT_EQ(data, file_contents.To<std::string>()); | 185 EXPECT_EQ(data, file_contents.To<std::string>()); |
187 } | 186 } |
188 } | 187 } |
189 | 188 |
190 TEST_F(DirectoryImplTest, WriteFileReadFile) { | 189 TEST_F(DirectoryImplTest, WriteFileReadFile) { |
191 mojom::DirectoryPtr directory; | 190 mojom::DirectoryPtr directory; |
192 GetTemporaryRoot(&directory); | 191 GetTemporaryRoot(&directory); |
193 mojom::FileError error; | 192 mojom::FileError error; |
194 | 193 |
195 std::string data("one two three"); | 194 std::string data("one two three"); |
196 { | 195 { |
197 directory->WriteFile("data", mojo::Array<uint8_t>::From(data), | 196 bool handled = |
198 Capture(&error)); | 197 directory->WriteFile("data", mojo::Array<uint8_t>::From(data), &error); |
199 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 198 ASSERT_TRUE(handled); |
200 EXPECT_EQ(mojom::FileError::OK, error); | 199 EXPECT_EQ(mojom::FileError::OK, error); |
201 } | 200 } |
202 | 201 |
203 { | 202 { |
204 mojo::Array<uint8_t> file_contents; | 203 mojo::Array<uint8_t> file_contents; |
205 directory->ReadEntireFile("data", Capture(&error, &file_contents)); | 204 bool handled = directory->ReadEntireFile("data", &error, &file_contents); |
206 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 205 ASSERT_TRUE(handled); |
207 EXPECT_EQ(mojom::FileError::OK, error); | 206 EXPECT_EQ(mojom::FileError::OK, error); |
208 | 207 |
209 EXPECT_EQ(data, file_contents.To<std::string>()); | 208 EXPECT_EQ(data, file_contents.To<std::string>()); |
210 } | 209 } |
211 } | 210 } |
212 | 211 |
213 TEST_F(DirectoryImplTest, ReadEmptyFileIsNotFoundError) { | 212 TEST_F(DirectoryImplTest, ReadEmptyFileIsNotFoundError) { |
214 mojom::DirectoryPtr directory; | 213 mojom::DirectoryPtr directory; |
215 GetTemporaryRoot(&directory); | 214 GetTemporaryRoot(&directory); |
216 mojom::FileError error; | 215 mojom::FileError error; |
217 | 216 |
218 { | 217 { |
219 mojo::Array<uint8_t> file_contents; | 218 mojo::Array<uint8_t> file_contents; |
220 directory->ReadEntireFile("doesnt_exist", Capture(&error, &file_contents)); | 219 bool handled = |
221 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 220 directory->ReadEntireFile("doesnt_exist", &error, &file_contents); |
| 221 ASSERT_TRUE(handled); |
222 EXPECT_EQ(mojom::FileError::NOT_FOUND, error); | 222 EXPECT_EQ(mojom::FileError::NOT_FOUND, error); |
223 } | 223 } |
224 } | 224 } |
225 | 225 |
226 TEST_F(DirectoryImplTest, CantReadEntireFileOnADirectory) { | 226 TEST_F(DirectoryImplTest, CantReadEntireFileOnADirectory) { |
227 mojom::DirectoryPtr directory; | 227 mojom::DirectoryPtr directory; |
228 GetTemporaryRoot(&directory); | 228 GetTemporaryRoot(&directory); |
229 mojom::FileError error; | 229 mojom::FileError error; |
230 | 230 |
231 // Create a directory | 231 // Create a directory |
232 { | 232 { |
233 mojom::DirectoryPtr my_file_directory; | 233 mojom::DirectoryPtr my_file_directory; |
234 error = mojom::FileError::FAILED; | 234 error = mojom::FileError::FAILED; |
235 directory->OpenDirectory( | 235 bool handled = directory->OpenDirectory( |
236 "my_dir", GetProxy(&my_file_directory), | 236 "my_dir", GetProxy(&my_file_directory), |
237 mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate, | 237 mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate, &error); |
238 Capture(&error)); | 238 ASSERT_TRUE(handled); |
239 ASSERT_TRUE(directory.WaitForIncomingResponse()); | |
240 EXPECT_EQ(mojom::FileError::OK, error); | 239 EXPECT_EQ(mojom::FileError::OK, error); |
241 } | 240 } |
242 | 241 |
243 // Try to read it as a file | 242 // Try to read it as a file |
244 { | 243 { |
245 mojo::Array<uint8_t> file_contents; | 244 mojo::Array<uint8_t> file_contents; |
246 directory->ReadEntireFile("my_dir", Capture(&error, &file_contents)); | 245 bool handled = directory->ReadEntireFile("my_dir", &error, &file_contents); |
247 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 246 ASSERT_TRUE(handled); |
248 EXPECT_EQ(mojom::FileError::NOT_A_FILE, error); | 247 EXPECT_EQ(mojom::FileError::NOT_A_FILE, error); |
249 } | 248 } |
250 } | 249 } |
251 | 250 |
252 TEST_F(DirectoryImplTest, CantWriteFileOnADirectory) { | 251 TEST_F(DirectoryImplTest, CantWriteFileOnADirectory) { |
253 mojom::DirectoryPtr directory; | 252 mojom::DirectoryPtr directory; |
254 GetTemporaryRoot(&directory); | 253 GetTemporaryRoot(&directory); |
255 mojom::FileError error; | 254 mojom::FileError error; |
256 | 255 |
257 // Create a directory | 256 // Create a directory |
258 { | 257 { |
259 mojom::DirectoryPtr my_file_directory; | 258 mojom::DirectoryPtr my_file_directory; |
260 error = mojom::FileError::FAILED; | 259 error = mojom::FileError::FAILED; |
261 directory->OpenDirectory( | 260 bool handled = directory->OpenDirectory( |
262 "my_dir", GetProxy(&my_file_directory), | 261 "my_dir", GetProxy(&my_file_directory), |
263 mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate, | 262 mojom::kFlagRead | mojom::kFlagWrite | mojom::kFlagCreate, &error); |
264 Capture(&error)); | 263 ASSERT_TRUE(handled); |
265 ASSERT_TRUE(directory.WaitForIncomingResponse()); | |
266 EXPECT_EQ(mojom::FileError::OK, error); | 264 EXPECT_EQ(mojom::FileError::OK, error); |
267 } | 265 } |
268 | 266 |
269 { | 267 { |
270 std::string data("one two three"); | 268 std::string data("one two three"); |
271 directory->WriteFile("my_dir", mojo::Array<uint8_t>::From(data), | 269 bool handled = directory->WriteFile( |
272 Capture(&error)); | 270 "my_dir", mojo::Array<uint8_t>::From(data), &error); |
273 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 271 ASSERT_TRUE(handled); |
274 EXPECT_EQ(mojom::FileError::NOT_A_FILE, error); | 272 EXPECT_EQ(mojom::FileError::NOT_A_FILE, error); |
275 } | 273 } |
276 } | 274 } |
277 | 275 |
278 // TODO(vtl): Test delete flags. | 276 // TODO(vtl): Test delete flags. |
279 | 277 |
280 } // namespace | 278 } // namespace |
281 } // namespace filesystem | 279 } // namespace filesystem |
OLD | NEW |