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