| 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 <map> | 5 #include <map> |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "components/filesystem/files_test_base.h" | 8 #include "components/filesystem/files_test_base.h" |
| 9 | 9 |
| 10 namespace filesystem { | 10 namespace filesystem { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 uint32_t open_flags; | 23 uint32_t open_flags; |
| 24 } files_to_create[] = { | 24 } files_to_create[] = { |
| 25 {"my_file1", kOpenFlagRead | kOpenFlagWrite | kOpenFlagCreate}, | 25 {"my_file1", kOpenFlagRead | kOpenFlagWrite | kOpenFlagCreate}, |
| 26 {"my_file2", kOpenFlagWrite | kOpenFlagCreate | kOpenFlagExclusive}, | 26 {"my_file2", kOpenFlagWrite | kOpenFlagCreate | kOpenFlagExclusive}, |
| 27 {"my_file3", kOpenFlagWrite | kOpenFlagCreate | kOpenFlagAppend}, | 27 {"my_file3", kOpenFlagWrite | kOpenFlagCreate | kOpenFlagAppend}, |
| 28 {"my_file4", kOpenFlagWrite | kOpenFlagCreate | kOpenFlagTruncate}}; | 28 {"my_file4", kOpenFlagWrite | kOpenFlagCreate | kOpenFlagTruncate}}; |
| 29 for (size_t i = 0; i < arraysize(files_to_create); i++) { | 29 for (size_t i = 0; i < arraysize(files_to_create); i++) { |
| 30 error = ERROR_INTERNAL; | 30 error = ERROR_INTERNAL; |
| 31 directory->OpenFile(files_to_create[i].name, nullptr, | 31 directory->OpenFile(files_to_create[i].name, nullptr, |
| 32 files_to_create[i].open_flags, Capture(&error)); | 32 files_to_create[i].open_flags, Capture(&error)); |
| 33 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 33 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 34 EXPECT_EQ(ERROR_OK, error); | 34 EXPECT_EQ(ERROR_OK, error); |
| 35 } | 35 } |
| 36 // Make a directory. | 36 // Make a directory. |
| 37 error = ERROR_INTERNAL; | 37 error = ERROR_INTERNAL; |
| 38 directory->OpenDirectory("my_dir", nullptr, | 38 directory->OpenDirectory("my_dir", nullptr, |
| 39 kOpenFlagRead | kOpenFlagWrite | kOpenFlagCreate, | 39 kOpenFlagRead | kOpenFlagWrite | kOpenFlagCreate, |
| 40 Capture(&error)); | 40 Capture(&error)); |
| 41 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 41 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 42 EXPECT_EQ(ERROR_OK, error); | 42 EXPECT_EQ(ERROR_OK, error); |
| 43 | 43 |
| 44 error = ERROR_INTERNAL; | 44 error = ERROR_INTERNAL; |
| 45 mojo::Array<DirectoryEntryPtr> directory_contents; | 45 mojo::Array<DirectoryEntryPtr> directory_contents; |
| 46 directory->Read(Capture(&error, &directory_contents)); | 46 directory->Read(Capture(&error, &directory_contents)); |
| 47 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 47 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 48 EXPECT_EQ(ERROR_OK, error); | 48 EXPECT_EQ(ERROR_OK, error); |
| 49 | 49 |
| 50 // Expected contents of the directory. | 50 // Expected contents of the directory. |
| 51 std::map<std::string, FileType> expected_contents; | 51 std::map<std::string, FileType> expected_contents; |
| 52 expected_contents["my_file1"] = FILE_TYPE_REGULAR_FILE; | 52 expected_contents["my_file1"] = FILE_TYPE_REGULAR_FILE; |
| 53 expected_contents["my_file2"] = FILE_TYPE_REGULAR_FILE; | 53 expected_contents["my_file2"] = FILE_TYPE_REGULAR_FILE; |
| 54 expected_contents["my_file3"] = FILE_TYPE_REGULAR_FILE; | 54 expected_contents["my_file3"] = FILE_TYPE_REGULAR_FILE; |
| 55 expected_contents["my_file4"] = FILE_TYPE_REGULAR_FILE; | 55 expected_contents["my_file4"] = FILE_TYPE_REGULAR_FILE; |
| 56 expected_contents["my_dir"] = FILE_TYPE_DIRECTORY; | 56 expected_contents["my_dir"] = FILE_TYPE_DIRECTORY; |
| 57 expected_contents["."] = FILE_TYPE_DIRECTORY; | 57 expected_contents["."] = FILE_TYPE_DIRECTORY; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 74 // be harder to split this file. | 74 // be harder to split this file. |
| 75 TEST_F(DirectoryImplTest, StatTouch) { | 75 TEST_F(DirectoryImplTest, StatTouch) { |
| 76 DirectoryPtr directory; | 76 DirectoryPtr directory; |
| 77 GetTemporaryRoot(&directory); | 77 GetTemporaryRoot(&directory); |
| 78 Error error; | 78 Error error; |
| 79 | 79 |
| 80 // Stat it. | 80 // Stat it. |
| 81 error = ERROR_INTERNAL; | 81 error = ERROR_INTERNAL; |
| 82 FileInformationPtr file_info; | 82 FileInformationPtr file_info; |
| 83 directory->Stat(Capture(&error, &file_info)); | 83 directory->Stat(Capture(&error, &file_info)); |
| 84 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 84 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 85 EXPECT_EQ(ERROR_OK, error); | 85 EXPECT_EQ(ERROR_OK, error); |
| 86 ASSERT_FALSE(file_info.is_null()); | 86 ASSERT_FALSE(file_info.is_null()); |
| 87 EXPECT_EQ(FILE_TYPE_DIRECTORY, file_info->type); | 87 EXPECT_EQ(FILE_TYPE_DIRECTORY, file_info->type); |
| 88 EXPECT_EQ(0, file_info->size); | 88 EXPECT_EQ(0, file_info->size); |
| 89 ASSERT_FALSE(file_info->atime.is_null()); | 89 ASSERT_FALSE(file_info->atime.is_null()); |
| 90 EXPECT_GT(file_info->atime->seconds, 0); // Expect that it's not 1970-01-01. | 90 EXPECT_GT(file_info->atime->seconds, 0); // Expect that it's not 1970-01-01. |
| 91 ASSERT_FALSE(file_info->mtime.is_null()); | 91 ASSERT_FALSE(file_info->mtime.is_null()); |
| 92 EXPECT_GT(file_info->mtime->seconds, 0); | 92 EXPECT_GT(file_info->mtime->seconds, 0); |
| 93 int64_t first_mtime = file_info->mtime->seconds; | 93 int64_t first_mtime = file_info->mtime->seconds; |
| 94 | 94 |
| 95 // Touch only the atime. | 95 // Touch only the atime. |
| 96 error = ERROR_INTERNAL; | 96 error = ERROR_INTERNAL; |
| 97 TimespecOrNowPtr t(TimespecOrNow::New()); | 97 TimespecOrNowPtr t(TimespecOrNow::New()); |
| 98 t->now = false; | 98 t->now = false; |
| 99 t->timespec = Timespec::New(); | 99 t->timespec = Timespec::New(); |
| 100 const int64_t kPartyTime1 = 1234567890; // Party like it's 2009-02-13. | 100 const int64_t kPartyTime1 = 1234567890; // Party like it's 2009-02-13. |
| 101 t->timespec->seconds = kPartyTime1; | 101 t->timespec->seconds = kPartyTime1; |
| 102 directory->Touch(t.Pass(), nullptr, Capture(&error)); | 102 directory->Touch(t.Pass(), nullptr, Capture(&error)); |
| 103 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 103 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 104 EXPECT_EQ(ERROR_OK, error); | 104 EXPECT_EQ(ERROR_OK, error); |
| 105 | 105 |
| 106 // Stat again. | 106 // Stat again. |
| 107 error = ERROR_INTERNAL; | 107 error = ERROR_INTERNAL; |
| 108 file_info.reset(); | 108 file_info.reset(); |
| 109 directory->Stat(Capture(&error, &file_info)); | 109 directory->Stat(Capture(&error, &file_info)); |
| 110 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 110 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 111 EXPECT_EQ(ERROR_OK, error); | 111 EXPECT_EQ(ERROR_OK, error); |
| 112 ASSERT_FALSE(file_info.is_null()); | 112 ASSERT_FALSE(file_info.is_null()); |
| 113 ASSERT_FALSE(file_info->atime.is_null()); | 113 ASSERT_FALSE(file_info->atime.is_null()); |
| 114 EXPECT_EQ(kPartyTime1, file_info->atime->seconds); | 114 EXPECT_EQ(kPartyTime1, file_info->atime->seconds); |
| 115 ASSERT_FALSE(file_info->mtime.is_null()); | 115 ASSERT_FALSE(file_info->mtime.is_null()); |
| 116 EXPECT_EQ(first_mtime, file_info->mtime->seconds); | 116 EXPECT_EQ(first_mtime, file_info->mtime->seconds); |
| 117 | 117 |
| 118 // Touch only the mtime. | 118 // Touch only the mtime. |
| 119 t = TimespecOrNow::New(); | 119 t = TimespecOrNow::New(); |
| 120 t->now = false; | 120 t->now = false; |
| 121 t->timespec = Timespec::New(); | 121 t->timespec = Timespec::New(); |
| 122 const int64_t kPartyTime2 = 1425059525; // No time like the present. | 122 const int64_t kPartyTime2 = 1425059525; // No time like the present. |
| 123 t->timespec->seconds = kPartyTime2; | 123 t->timespec->seconds = kPartyTime2; |
| 124 directory->Touch(nullptr, t.Pass(), Capture(&error)); | 124 directory->Touch(nullptr, t.Pass(), Capture(&error)); |
| 125 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 125 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 126 EXPECT_EQ(ERROR_OK, error); | 126 EXPECT_EQ(ERROR_OK, error); |
| 127 | 127 |
| 128 // Stat again. | 128 // Stat again. |
| 129 error = ERROR_INTERNAL; | 129 error = ERROR_INTERNAL; |
| 130 file_info.reset(); | 130 file_info.reset(); |
| 131 directory->Stat(Capture(&error, &file_info)); | 131 directory->Stat(Capture(&error, &file_info)); |
| 132 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 132 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 133 EXPECT_EQ(ERROR_OK, error); | 133 EXPECT_EQ(ERROR_OK, error); |
| 134 ASSERT_FALSE(file_info.is_null()); | 134 ASSERT_FALSE(file_info.is_null()); |
| 135 ASSERT_FALSE(file_info->atime.is_null()); | 135 ASSERT_FALSE(file_info->atime.is_null()); |
| 136 EXPECT_EQ(kPartyTime1, file_info->atime->seconds); | 136 EXPECT_EQ(kPartyTime1, file_info->atime->seconds); |
| 137 ASSERT_FALSE(file_info->mtime.is_null()); | 137 ASSERT_FALSE(file_info->mtime.is_null()); |
| 138 EXPECT_EQ(kPartyTime2, file_info->mtime->seconds); | 138 EXPECT_EQ(kPartyTime2, file_info->mtime->seconds); |
| 139 | 139 |
| 140 // TODO(vtl): Also test Touch() "now" options. | 140 // TODO(vtl): Also test Touch() "now" options. |
| 141 // TODO(vtl): Also test touching both atime and mtime. | 141 // TODO(vtl): Also test touching both atime and mtime. |
| 142 } | 142 } |
| 143 | 143 |
| 144 // TODO(vtl): Properly test OpenFile() and OpenDirectory() (including flags). | 144 // TODO(vtl): Properly test OpenFile() and OpenDirectory() (including flags). |
| 145 | 145 |
| 146 TEST_F(DirectoryImplTest, BasicRenameDelete) { | 146 TEST_F(DirectoryImplTest, BasicRenameDelete) { |
| 147 DirectoryPtr directory; | 147 DirectoryPtr directory; |
| 148 GetTemporaryRoot(&directory); | 148 GetTemporaryRoot(&directory); |
| 149 Error error; | 149 Error error; |
| 150 | 150 |
| 151 // Create my_file. | 151 // Create my_file. |
| 152 error = ERROR_INTERNAL; | 152 error = ERROR_INTERNAL; |
| 153 directory->OpenFile("my_file", nullptr, kOpenFlagWrite | kOpenFlagCreate, | 153 directory->OpenFile("my_file", nullptr, kOpenFlagWrite | kOpenFlagCreate, |
| 154 Capture(&error)); | 154 Capture(&error)); |
| 155 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 155 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 156 EXPECT_EQ(ERROR_OK, error); | 156 EXPECT_EQ(ERROR_OK, error); |
| 157 | 157 |
| 158 // Opening my_file should succeed. | 158 // Opening my_file should succeed. |
| 159 error = ERROR_INTERNAL; | 159 error = ERROR_INTERNAL; |
| 160 directory->OpenFile("my_file", nullptr, kOpenFlagRead, Capture(&error)); | 160 directory->OpenFile("my_file", nullptr, kOpenFlagRead, Capture(&error)); |
| 161 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 161 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 162 EXPECT_EQ(ERROR_OK, error); | 162 EXPECT_EQ(ERROR_OK, error); |
| 163 | 163 |
| 164 // Rename my_file to my_new_file. | 164 // Rename my_file to my_new_file. |
| 165 directory->Rename("my_file", "my_new_file", Capture(&error)); | 165 directory->Rename("my_file", "my_new_file", Capture(&error)); |
| 166 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 166 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 167 EXPECT_EQ(ERROR_OK, error); | 167 EXPECT_EQ(ERROR_OK, error); |
| 168 | 168 |
| 169 // Opening my_file should fail. | 169 // Opening my_file should fail. |
| 170 error = ERROR_INTERNAL; | 170 error = ERROR_INTERNAL; |
| 171 directory->OpenFile("my_file", nullptr, kOpenFlagRead, Capture(&error)); | 171 directory->OpenFile("my_file", nullptr, kOpenFlagRead, Capture(&error)); |
| 172 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 172 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 173 EXPECT_EQ(ERROR_UNKNOWN, error); | 173 EXPECT_EQ(ERROR_UNKNOWN, error); |
| 174 | 174 |
| 175 // Opening my_new_file should succeed. | 175 // Opening my_new_file should succeed. |
| 176 error = ERROR_INTERNAL; | 176 error = ERROR_INTERNAL; |
| 177 directory->OpenFile("my_new_file", nullptr, kOpenFlagRead, Capture(&error)); | 177 directory->OpenFile("my_new_file", nullptr, kOpenFlagRead, Capture(&error)); |
| 178 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 178 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 179 EXPECT_EQ(ERROR_OK, error); | 179 EXPECT_EQ(ERROR_OK, error); |
| 180 | 180 |
| 181 // Delete my_new_file (no flags). | 181 // Delete my_new_file (no flags). |
| 182 directory->Delete("my_new_file", 0, Capture(&error)); | 182 directory->Delete("my_new_file", 0, Capture(&error)); |
| 183 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 183 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 184 EXPECT_EQ(ERROR_OK, error); | 184 EXPECT_EQ(ERROR_OK, error); |
| 185 | 185 |
| 186 // Opening my_new_file should fail. | 186 // Opening my_new_file should fail. |
| 187 error = ERROR_INTERNAL; | 187 error = ERROR_INTERNAL; |
| 188 directory->OpenFile("my_new_file", nullptr, kOpenFlagRead, Capture(&error)); | 188 directory->OpenFile("my_new_file", nullptr, kOpenFlagRead, Capture(&error)); |
| 189 ASSERT_TRUE(directory.WaitForIncomingResponse()); | 189 ASSERT_TRUE(directory.WaitForIncomingMethodCall()); |
| 190 EXPECT_EQ(ERROR_UNKNOWN, error); | 190 EXPECT_EQ(ERROR_UNKNOWN, error); |
| 191 } | 191 } |
| 192 | 192 |
| 193 // TODO(vtl): Test that an open file can be moved (by someone else) without | 193 // TODO(vtl): Test that an open file can be moved (by someone else) without |
| 194 // operations on it being affected. | 194 // operations on it being affected. |
| 195 // TODO(vtl): Test delete flags. | 195 // TODO(vtl): Test delete flags. |
| 196 | 196 |
| 197 } // namespace | 197 } // namespace |
| 198 } // namespace filesystem | 198 } // namespace filesystem |
| OLD | NEW |