| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "webkit/fileapi/file_system_directory_database.h" | 5 #include "webkit/fileapi/sandbox_directory_database.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| 11 #include "base/files/scoped_temp_dir.h" | 11 #include "base/files/scoped_temp_dir.h" |
| 12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/platform_file.h" | 13 #include "base/platform_file.h" |
| 14 #include "base/string_util.h" | 14 #include "base/string_util.h" |
| 15 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "third_party/leveldatabase/src/include/leveldb/db.h" | 17 #include "third_party/leveldatabase/src/include/leveldb/db.h" |
| 18 #include "webkit/fileapi/file_system_database_test_helper.h" | |
| 19 #include "webkit/fileapi/file_system_util.h" | 18 #include "webkit/fileapi/file_system_util.h" |
| 19 #include "webkit/fileapi/sandbox_database_test_helper.h" |
| 20 | 20 |
| 21 #define FPL(x) FILE_PATH_LITERAL(x) | 21 #define FPL(x) FILE_PATH_LITERAL(x) |
| 22 | 22 |
| 23 namespace fileapi { | 23 namespace fileapi { |
| 24 | 24 |
| 25 namespace { | 25 namespace { |
| 26 const base::FilePath::CharType kDirectoryDatabaseName[] = FPL("Paths"); | 26 const base::FilePath::CharType kDirectoryDatabaseName[] = FPL("Paths"); |
| 27 } | 27 } |
| 28 | 28 |
| 29 class FileSystemDirectoryDatabaseTest : public testing::Test { | 29 class SandboxDirectoryDatabaseTest : public testing::Test { |
| 30 public: | 30 public: |
| 31 typedef FileSystemDirectoryDatabase::FileId FileId; | 31 typedef SandboxDirectoryDatabase::FileId FileId; |
| 32 typedef FileSystemDirectoryDatabase::FileInfo FileInfo; | 32 typedef SandboxDirectoryDatabase::FileInfo FileInfo; |
| 33 | 33 |
| 34 FileSystemDirectoryDatabaseTest() { | 34 SandboxDirectoryDatabaseTest() { |
| 35 EXPECT_TRUE(base_.CreateUniqueTempDir()); | 35 EXPECT_TRUE(base_.CreateUniqueTempDir()); |
| 36 InitDatabase(); | 36 InitDatabase(); |
| 37 } | 37 } |
| 38 | 38 |
| 39 FileSystemDirectoryDatabase* db() { | 39 SandboxDirectoryDatabase* db() { |
| 40 return db_.get(); | 40 return db_.get(); |
| 41 } | 41 } |
| 42 | 42 |
| 43 void InitDatabase() { | 43 void InitDatabase() { |
| 44 // Call CloseDatabase() to avoid having multiple database instances for | 44 // Call CloseDatabase() to avoid having multiple database instances for |
| 45 // single directory at once. | 45 // single directory at once. |
| 46 CloseDatabase(); | 46 CloseDatabase(); |
| 47 db_.reset(new FileSystemDirectoryDatabase(path())); | 47 db_.reset(new SandboxDirectoryDatabase(path())); |
| 48 } | 48 } |
| 49 | 49 |
| 50 void CloseDatabase() { | 50 void CloseDatabase() { |
| 51 db_.reset(); | 51 db_.reset(); |
| 52 } | 52 } |
| 53 | 53 |
| 54 bool AddFileInfo(FileId parent_id, const base::FilePath::StringType& name) { | 54 bool AddFileInfo(FileId parent_id, const base::FilePath::StringType& name) { |
| 55 FileId file_id; | 55 FileId file_id; |
| 56 FileInfo info; | 56 FileInfo info; |
| 57 info.parent_id = parent_id; | 57 info.parent_id = parent_id; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 ASSERT_TRUE(base::ClosePlatformFile(file)); | 95 ASSERT_TRUE(base::ClosePlatformFile(file)); |
| 96 | 96 |
| 97 if (file_id_out) | 97 if (file_id_out) |
| 98 *file_id_out = file_id; | 98 *file_id_out = file_id; |
| 99 } | 99 } |
| 100 | 100 |
| 101 void ClearDatabaseAndDirectory() { | 101 void ClearDatabaseAndDirectory() { |
| 102 db_.reset(); | 102 db_.reset(); |
| 103 ASSERT_TRUE(file_util::Delete(path(), true /* recursive */)); | 103 ASSERT_TRUE(file_util::Delete(path(), true /* recursive */)); |
| 104 ASSERT_TRUE(file_util::CreateDirectory(path())); | 104 ASSERT_TRUE(file_util::CreateDirectory(path())); |
| 105 db_.reset(new FileSystemDirectoryDatabase(path())); | 105 db_.reset(new SandboxDirectoryDatabase(path())); |
| 106 } | 106 } |
| 107 | 107 |
| 108 bool RepairDatabase() { | 108 bool RepairDatabase() { |
| 109 return db()->RepairDatabase( | 109 return db()->RepairDatabase( |
| 110 FilePathToString(path().Append(kDirectoryDatabaseName))); | 110 FilePathToString(path().Append(kDirectoryDatabaseName))); |
| 111 } | 111 } |
| 112 | 112 |
| 113 const base::FilePath& path() { | 113 const base::FilePath& path() { |
| 114 return base_.path(); | 114 return base_.path(); |
| 115 } | 115 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 131 ASSERT_TRUE(db()->GetFileInfo(file_id, &file_info)); | 131 ASSERT_TRUE(db()->GetFileInfo(file_id, &file_info)); |
| 132 ASSERT_TRUE(db()->db_->Delete( | 132 ASSERT_TRUE(db()->db_->Delete( |
| 133 leveldb::WriteOptions(), | 133 leveldb::WriteOptions(), |
| 134 "CHILD_OF:" + base::Int64ToString(file_info.parent_id) + ":" + | 134 "CHILD_OF:" + base::Int64ToString(file_info.parent_id) + ":" + |
| 135 FilePathToString(base::FilePath(file_info.name))).ok()); | 135 FilePathToString(base::FilePath(file_info.name))).ok()); |
| 136 } | 136 } |
| 137 | 137 |
| 138 protected: | 138 protected: |
| 139 // Common temp base for nondestructive uses. | 139 // Common temp base for nondestructive uses. |
| 140 base::ScopedTempDir base_; | 140 base::ScopedTempDir base_; |
| 141 scoped_ptr<FileSystemDirectoryDatabase> db_; | 141 scoped_ptr<SandboxDirectoryDatabase> db_; |
| 142 | 142 |
| 143 DISALLOW_COPY_AND_ASSIGN(FileSystemDirectoryDatabaseTest); | 143 DISALLOW_COPY_AND_ASSIGN(SandboxDirectoryDatabaseTest); |
| 144 }; | 144 }; |
| 145 | 145 |
| 146 TEST_F(FileSystemDirectoryDatabaseTest, TestMissingFileGetInfo) { | 146 TEST_F(SandboxDirectoryDatabaseTest, TestMissingFileGetInfo) { |
| 147 FileId file_id = 888; | 147 FileId file_id = 888; |
| 148 FileInfo info; | 148 FileInfo info; |
| 149 EXPECT_FALSE(db()->GetFileInfo(file_id, &info)); | 149 EXPECT_FALSE(db()->GetFileInfo(file_id, &info)); |
| 150 } | 150 } |
| 151 | 151 |
| 152 TEST_F(FileSystemDirectoryDatabaseTest, TestGetRootFileInfoBeforeCreate) { | 152 TEST_F(SandboxDirectoryDatabaseTest, TestGetRootFileInfoBeforeCreate) { |
| 153 FileId file_id = 0; | 153 FileId file_id = 0; |
| 154 FileInfo info; | 154 FileInfo info; |
| 155 EXPECT_TRUE(db()->GetFileInfo(file_id, &info)); | 155 EXPECT_TRUE(db()->GetFileInfo(file_id, &info)); |
| 156 EXPECT_EQ(0, info.parent_id); | 156 EXPECT_EQ(0, info.parent_id); |
| 157 EXPECT_TRUE(info.name.empty()); | 157 EXPECT_TRUE(info.name.empty()); |
| 158 EXPECT_TRUE(info.data_path.empty()); | 158 EXPECT_TRUE(info.data_path.empty()); |
| 159 } | 159 } |
| 160 | 160 |
| 161 TEST_F(FileSystemDirectoryDatabaseTest, TestMissingParentAddFileInfo) { | 161 TEST_F(SandboxDirectoryDatabaseTest, TestMissingParentAddFileInfo) { |
| 162 FileId parent_id = 7; | 162 FileId parent_id = 7; |
| 163 EXPECT_FALSE(AddFileInfo(parent_id, FILE_PATH_LITERAL("foo"))); | 163 EXPECT_FALSE(AddFileInfo(parent_id, FILE_PATH_LITERAL("foo"))); |
| 164 } | 164 } |
| 165 | 165 |
| 166 TEST_F(FileSystemDirectoryDatabaseTest, TestAddNameClash) { | 166 TEST_F(SandboxDirectoryDatabaseTest, TestAddNameClash) { |
| 167 FileInfo info; | 167 FileInfo info; |
| 168 FileId file_id; | 168 FileId file_id; |
| 169 info.parent_id = 0; | 169 info.parent_id = 0; |
| 170 info.name = FILE_PATH_LITERAL("dir 0"); | 170 info.name = FILE_PATH_LITERAL("dir 0"); |
| 171 EXPECT_TRUE(db()->AddFileInfo(info, &file_id)); | 171 EXPECT_TRUE(db()->AddFileInfo(info, &file_id)); |
| 172 | 172 |
| 173 // Check for name clash in the root directory. | 173 // Check for name clash in the root directory. |
| 174 base::FilePath::StringType name = info.name; | 174 base::FilePath::StringType name = info.name; |
| 175 EXPECT_FALSE(AddFileInfo(0, name)); | 175 EXPECT_FALSE(AddFileInfo(0, name)); |
| 176 name = FILE_PATH_LITERAL("dir 1"); | 176 name = FILE_PATH_LITERAL("dir 1"); |
| 177 EXPECT_TRUE(AddFileInfo(0, name)); | 177 EXPECT_TRUE(AddFileInfo(0, name)); |
| 178 | 178 |
| 179 name = FILE_PATH_LITERAL("subdir 0"); | 179 name = FILE_PATH_LITERAL("subdir 0"); |
| 180 EXPECT_TRUE(AddFileInfo(file_id, name)); | 180 EXPECT_TRUE(AddFileInfo(file_id, name)); |
| 181 | 181 |
| 182 // Check for name clash in a subdirectory. | 182 // Check for name clash in a subdirectory. |
| 183 EXPECT_FALSE(AddFileInfo(file_id, name)); | 183 EXPECT_FALSE(AddFileInfo(file_id, name)); |
| 184 name = FILE_PATH_LITERAL("subdir 1"); | 184 name = FILE_PATH_LITERAL("subdir 1"); |
| 185 EXPECT_TRUE(AddFileInfo(file_id, name)); | 185 EXPECT_TRUE(AddFileInfo(file_id, name)); |
| 186 } | 186 } |
| 187 | 187 |
| 188 TEST_F(FileSystemDirectoryDatabaseTest, TestRenameNoMoveNameClash) { | 188 TEST_F(SandboxDirectoryDatabaseTest, TestRenameNoMoveNameClash) { |
| 189 FileInfo info; | 189 FileInfo info; |
| 190 FileId file_id0; | 190 FileId file_id0; |
| 191 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 191 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 192 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); | 192 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
| 193 base::FilePath::StringType name2 = FILE_PATH_LITERAL("bas"); | 193 base::FilePath::StringType name2 = FILE_PATH_LITERAL("bas"); |
| 194 info.parent_id = 0; | 194 info.parent_id = 0; |
| 195 info.name = name0; | 195 info.name = name0; |
| 196 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); | 196 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); |
| 197 EXPECT_TRUE(AddFileInfo(0, name1)); | 197 EXPECT_TRUE(AddFileInfo(0, name1)); |
| 198 info.name = name1; | 198 info.name = name1; |
| 199 EXPECT_FALSE(db()->UpdateFileInfo(file_id0, info)); | 199 EXPECT_FALSE(db()->UpdateFileInfo(file_id0, info)); |
| 200 info.name = name2; | 200 info.name = name2; |
| 201 EXPECT_TRUE(db()->UpdateFileInfo(file_id0, info)); | 201 EXPECT_TRUE(db()->UpdateFileInfo(file_id0, info)); |
| 202 } | 202 } |
| 203 | 203 |
| 204 TEST_F(FileSystemDirectoryDatabaseTest, TestMoveSameNameNameClash) { | 204 TEST_F(SandboxDirectoryDatabaseTest, TestMoveSameNameNameClash) { |
| 205 FileInfo info; | 205 FileInfo info; |
| 206 FileId file_id0; | 206 FileId file_id0; |
| 207 FileId file_id1; | 207 FileId file_id1; |
| 208 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 208 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 209 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); | 209 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
| 210 info.parent_id = 0; | 210 info.parent_id = 0; |
| 211 info.name = name0; | 211 info.name = name0; |
| 212 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); | 212 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); |
| 213 info.parent_id = file_id0; | 213 info.parent_id = file_id0; |
| 214 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); | 214 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); |
| 215 info.parent_id = 0; | 215 info.parent_id = 0; |
| 216 EXPECT_FALSE(db()->UpdateFileInfo(file_id1, info)); | 216 EXPECT_FALSE(db()->UpdateFileInfo(file_id1, info)); |
| 217 info.name = name1; | 217 info.name = name1; |
| 218 EXPECT_TRUE(db()->UpdateFileInfo(file_id1, info)); | 218 EXPECT_TRUE(db()->UpdateFileInfo(file_id1, info)); |
| 219 } | 219 } |
| 220 | 220 |
| 221 TEST_F(FileSystemDirectoryDatabaseTest, TestMoveRenameNameClash) { | 221 TEST_F(SandboxDirectoryDatabaseTest, TestMoveRenameNameClash) { |
| 222 FileInfo info; | 222 FileInfo info; |
| 223 FileId file_id0; | 223 FileId file_id0; |
| 224 FileId file_id1; | 224 FileId file_id1; |
| 225 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 225 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 226 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); | 226 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
| 227 base::FilePath::StringType name2 = FILE_PATH_LITERAL("bas"); | 227 base::FilePath::StringType name2 = FILE_PATH_LITERAL("bas"); |
| 228 info.parent_id = 0; | 228 info.parent_id = 0; |
| 229 info.name = name0; | 229 info.name = name0; |
| 230 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); | 230 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); |
| 231 info.parent_id = file_id0; | 231 info.parent_id = file_id0; |
| 232 info.name = name1; | 232 info.name = name1; |
| 233 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); | 233 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); |
| 234 info.parent_id = 0; | 234 info.parent_id = 0; |
| 235 info.name = name0; | 235 info.name = name0; |
| 236 EXPECT_FALSE(db()->UpdateFileInfo(file_id1, info)); | 236 EXPECT_FALSE(db()->UpdateFileInfo(file_id1, info)); |
| 237 info.name = name1; | 237 info.name = name1; |
| 238 EXPECT_TRUE(db()->UpdateFileInfo(file_id1, info)); | 238 EXPECT_TRUE(db()->UpdateFileInfo(file_id1, info)); |
| 239 // Also test a successful move+rename. | 239 // Also test a successful move+rename. |
| 240 info.parent_id = file_id0; | 240 info.parent_id = file_id0; |
| 241 info.name = name2; | 241 info.name = name2; |
| 242 EXPECT_TRUE(db()->UpdateFileInfo(file_id1, info)); | 242 EXPECT_TRUE(db()->UpdateFileInfo(file_id1, info)); |
| 243 } | 243 } |
| 244 | 244 |
| 245 TEST_F(FileSystemDirectoryDatabaseTest, TestRemoveWithChildren) { | 245 TEST_F(SandboxDirectoryDatabaseTest, TestRemoveWithChildren) { |
| 246 FileInfo info; | 246 FileInfo info; |
| 247 FileId file_id0; | 247 FileId file_id0; |
| 248 FileId file_id1; | 248 FileId file_id1; |
| 249 info.parent_id = 0; | 249 info.parent_id = 0; |
| 250 info.name = FILE_PATH_LITERAL("foo"); | 250 info.name = FILE_PATH_LITERAL("foo"); |
| 251 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); | 251 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); |
| 252 info.parent_id = file_id0; | 252 info.parent_id = file_id0; |
| 253 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); | 253 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); |
| 254 EXPECT_FALSE(db()->RemoveFileInfo(file_id0)); | 254 EXPECT_FALSE(db()->RemoveFileInfo(file_id0)); |
| 255 EXPECT_TRUE(db()->RemoveFileInfo(file_id1)); | 255 EXPECT_TRUE(db()->RemoveFileInfo(file_id1)); |
| 256 EXPECT_TRUE(db()->RemoveFileInfo(file_id0)); | 256 EXPECT_TRUE(db()->RemoveFileInfo(file_id0)); |
| 257 } | 257 } |
| 258 | 258 |
| 259 TEST_F(FileSystemDirectoryDatabaseTest, TestGetChildWithName) { | 259 TEST_F(SandboxDirectoryDatabaseTest, TestGetChildWithName) { |
| 260 FileInfo info; | 260 FileInfo info; |
| 261 FileId file_id0; | 261 FileId file_id0; |
| 262 FileId file_id1; | 262 FileId file_id1; |
| 263 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 263 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 264 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); | 264 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
| 265 info.parent_id = 0; | 265 info.parent_id = 0; |
| 266 info.name = name0; | 266 info.name = name0; |
| 267 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); | 267 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); |
| 268 info.parent_id = file_id0; | 268 info.parent_id = file_id0; |
| 269 info.name = name1; | 269 info.name = name1; |
| 270 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); | 270 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); |
| 271 EXPECT_NE(file_id0, file_id1); | 271 EXPECT_NE(file_id0, file_id1); |
| 272 | 272 |
| 273 FileId check_file_id; | 273 FileId check_file_id; |
| 274 EXPECT_FALSE(db()->GetChildWithName(0, name1, &check_file_id)); | 274 EXPECT_FALSE(db()->GetChildWithName(0, name1, &check_file_id)); |
| 275 EXPECT_TRUE(db()->GetChildWithName(0, name0, &check_file_id)); | 275 EXPECT_TRUE(db()->GetChildWithName(0, name0, &check_file_id)); |
| 276 EXPECT_EQ(file_id0, check_file_id); | 276 EXPECT_EQ(file_id0, check_file_id); |
| 277 EXPECT_FALSE(db()->GetChildWithName(file_id0, name0, &check_file_id)); | 277 EXPECT_FALSE(db()->GetChildWithName(file_id0, name0, &check_file_id)); |
| 278 EXPECT_TRUE(db()->GetChildWithName(file_id0, name1, &check_file_id)); | 278 EXPECT_TRUE(db()->GetChildWithName(file_id0, name1, &check_file_id)); |
| 279 EXPECT_EQ(file_id1, check_file_id); | 279 EXPECT_EQ(file_id1, check_file_id); |
| 280 } | 280 } |
| 281 | 281 |
| 282 TEST_F(FileSystemDirectoryDatabaseTest, TestGetFileWithPath) { | 282 TEST_F(SandboxDirectoryDatabaseTest, TestGetFileWithPath) { |
| 283 FileInfo info; | 283 FileInfo info; |
| 284 FileId file_id0; | 284 FileId file_id0; |
| 285 FileId file_id1; | 285 FileId file_id1; |
| 286 FileId file_id2; | 286 FileId file_id2; |
| 287 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 287 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 288 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); | 288 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
| 289 base::FilePath::StringType name2 = FILE_PATH_LITERAL("dog"); | 289 base::FilePath::StringType name2 = FILE_PATH_LITERAL("dog"); |
| 290 | 290 |
| 291 info.parent_id = 0; | 291 info.parent_id = 0; |
| 292 info.name = name0; | 292 info.name = name0; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 308 | 308 |
| 309 path = path.Append(name1); | 309 path = path.Append(name1); |
| 310 EXPECT_TRUE(db()->GetFileWithPath(path, &check_file_id)); | 310 EXPECT_TRUE(db()->GetFileWithPath(path, &check_file_id)); |
| 311 EXPECT_EQ(file_id1, check_file_id); | 311 EXPECT_EQ(file_id1, check_file_id); |
| 312 | 312 |
| 313 path = path.Append(name2); | 313 path = path.Append(name2); |
| 314 EXPECT_TRUE(db()->GetFileWithPath(path, &check_file_id)); | 314 EXPECT_TRUE(db()->GetFileWithPath(path, &check_file_id)); |
| 315 EXPECT_EQ(file_id2, check_file_id); | 315 EXPECT_EQ(file_id2, check_file_id); |
| 316 } | 316 } |
| 317 | 317 |
| 318 TEST_F(FileSystemDirectoryDatabaseTest, TestListChildren) { | 318 TEST_F(SandboxDirectoryDatabaseTest, TestListChildren) { |
| 319 // No children in the root. | 319 // No children in the root. |
| 320 std::vector<FileId> children; | 320 std::vector<FileId> children; |
| 321 EXPECT_TRUE(db()->ListChildren(0, &children)); | 321 EXPECT_TRUE(db()->ListChildren(0, &children)); |
| 322 EXPECT_TRUE(children.empty()); | 322 EXPECT_TRUE(children.empty()); |
| 323 | 323 |
| 324 // One child in the root. | 324 // One child in the root. |
| 325 FileId file_id0; | 325 FileId file_id0; |
| 326 FileInfo info; | 326 FileInfo info; |
| 327 info.parent_id = 0; | 327 info.parent_id = 0; |
| 328 info.name = FILE_PATH_LITERAL("foo"); | 328 info.name = FILE_PATH_LITERAL("foo"); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 EXPECT_TRUE(db()->ListChildren(file_id0, &children)); | 364 EXPECT_TRUE(db()->ListChildren(file_id0, &children)); |
| 365 EXPECT_EQ(2UL, children.size()); | 365 EXPECT_EQ(2UL, children.size()); |
| 366 if (children[0] == file_id2) { | 366 if (children[0] == file_id2) { |
| 367 EXPECT_EQ(children[1], file_id3); | 367 EXPECT_EQ(children[1], file_id3); |
| 368 } else { | 368 } else { |
| 369 EXPECT_EQ(children[1], file_id2); | 369 EXPECT_EQ(children[1], file_id2); |
| 370 EXPECT_EQ(children[0], file_id3); | 370 EXPECT_EQ(children[0], file_id3); |
| 371 } | 371 } |
| 372 } | 372 } |
| 373 | 373 |
| 374 TEST_F(FileSystemDirectoryDatabaseTest, TestUpdateModificationTime) { | 374 TEST_F(SandboxDirectoryDatabaseTest, TestUpdateModificationTime) { |
| 375 FileInfo info0; | 375 FileInfo info0; |
| 376 FileId file_id; | 376 FileId file_id; |
| 377 info0.parent_id = 0; | 377 info0.parent_id = 0; |
| 378 info0.name = FILE_PATH_LITERAL("name"); | 378 info0.name = FILE_PATH_LITERAL("name"); |
| 379 info0.data_path = base::FilePath(FILE_PATH_LITERAL("fake path")); | 379 info0.data_path = base::FilePath(FILE_PATH_LITERAL("fake path")); |
| 380 info0.modification_time = base::Time::Now(); | 380 info0.modification_time = base::Time::Now(); |
| 381 EXPECT_TRUE(db()->AddFileInfo(info0, &file_id)); | 381 EXPECT_TRUE(db()->AddFileInfo(info0, &file_id)); |
| 382 FileInfo info1; | 382 FileInfo info1; |
| 383 EXPECT_TRUE(db()->GetFileInfo(file_id, &info1)); | 383 EXPECT_TRUE(db()->GetFileInfo(file_id, &info1)); |
| 384 EXPECT_EQ(info0.name, info1.name); | 384 EXPECT_EQ(info0.name, info1.name); |
| 385 EXPECT_EQ(info0.parent_id, info1.parent_id); | 385 EXPECT_EQ(info0.parent_id, info1.parent_id); |
| 386 EXPECT_EQ(info0.data_path, info1.data_path); | 386 EXPECT_EQ(info0.data_path, info1.data_path); |
| 387 EXPECT_EQ( | 387 EXPECT_EQ( |
| 388 floor(info0.modification_time.ToDoubleT()), | 388 floor(info0.modification_time.ToDoubleT()), |
| 389 info1.modification_time.ToDoubleT()); | 389 info1.modification_time.ToDoubleT()); |
| 390 | 390 |
| 391 EXPECT_TRUE(db()->UpdateModificationTime(file_id, base::Time::UnixEpoch())); | 391 EXPECT_TRUE(db()->UpdateModificationTime(file_id, base::Time::UnixEpoch())); |
| 392 EXPECT_TRUE(db()->GetFileInfo(file_id, &info1)); | 392 EXPECT_TRUE(db()->GetFileInfo(file_id, &info1)); |
| 393 EXPECT_EQ(info0.name, info1.name); | 393 EXPECT_EQ(info0.name, info1.name); |
| 394 EXPECT_EQ(info0.parent_id, info1.parent_id); | 394 EXPECT_EQ(info0.parent_id, info1.parent_id); |
| 395 EXPECT_EQ(info0.data_path, info1.data_path); | 395 EXPECT_EQ(info0.data_path, info1.data_path); |
| 396 EXPECT_NE(info0.modification_time, info1.modification_time); | 396 EXPECT_NE(info0.modification_time, info1.modification_time); |
| 397 EXPECT_EQ( | 397 EXPECT_EQ( |
| 398 info1.modification_time.ToDoubleT(), | 398 info1.modification_time.ToDoubleT(), |
| 399 floor(base::Time::UnixEpoch().ToDoubleT())); | 399 floor(base::Time::UnixEpoch().ToDoubleT())); |
| 400 | 400 |
| 401 EXPECT_FALSE(db()->UpdateModificationTime(999, base::Time::UnixEpoch())); | 401 EXPECT_FALSE(db()->UpdateModificationTime(999, base::Time::UnixEpoch())); |
| 402 } | 402 } |
| 403 | 403 |
| 404 TEST_F(FileSystemDirectoryDatabaseTest, TestSimpleFileOperations) { | 404 TEST_F(SandboxDirectoryDatabaseTest, TestSimpleFileOperations) { |
| 405 FileId file_id = 888; | 405 FileId file_id = 888; |
| 406 FileInfo info0; | 406 FileInfo info0; |
| 407 EXPECT_FALSE(db()->GetFileInfo(file_id, &info0)); | 407 EXPECT_FALSE(db()->GetFileInfo(file_id, &info0)); |
| 408 info0.parent_id = 0; | 408 info0.parent_id = 0; |
| 409 info0.data_path = base::FilePath(FILE_PATH_LITERAL("foo")); | 409 info0.data_path = base::FilePath(FILE_PATH_LITERAL("foo")); |
| 410 info0.name = FILE_PATH_LITERAL("file name"); | 410 info0.name = FILE_PATH_LITERAL("file name"); |
| 411 info0.modification_time = base::Time::Now(); | 411 info0.modification_time = base::Time::Now(); |
| 412 EXPECT_TRUE(db()->AddFileInfo(info0, &file_id)); | 412 EXPECT_TRUE(db()->AddFileInfo(info0, &file_id)); |
| 413 FileInfo info1; | 413 FileInfo info1; |
| 414 EXPECT_TRUE(db()->GetFileInfo(file_id, &info1)); | 414 EXPECT_TRUE(db()->GetFileInfo(file_id, &info1)); |
| 415 EXPECT_EQ(info0.parent_id, info1.parent_id); | 415 EXPECT_EQ(info0.parent_id, info1.parent_id); |
| 416 EXPECT_EQ(info0.data_path, info1.data_path); | 416 EXPECT_EQ(info0.data_path, info1.data_path); |
| 417 EXPECT_EQ(info0.name, info1.name); | 417 EXPECT_EQ(info0.name, info1.name); |
| 418 EXPECT_EQ( | 418 EXPECT_EQ( |
| 419 floor(info0.modification_time.ToDoubleT()), | 419 floor(info0.modification_time.ToDoubleT()), |
| 420 info1.modification_time.ToDoubleT()); | 420 info1.modification_time.ToDoubleT()); |
| 421 } | 421 } |
| 422 | 422 |
| 423 TEST_F(FileSystemDirectoryDatabaseTest, TestOverwritingMoveFileSrcDirectory) { | 423 TEST_F(SandboxDirectoryDatabaseTest, TestOverwritingMoveFileSrcDirectory) { |
| 424 FileId directory_id; | 424 FileId directory_id; |
| 425 FileInfo info0; | 425 FileInfo info0; |
| 426 info0.parent_id = 0; | 426 info0.parent_id = 0; |
| 427 info0.name = FILE_PATH_LITERAL("directory"); | 427 info0.name = FILE_PATH_LITERAL("directory"); |
| 428 info0.modification_time = base::Time::Now(); | 428 info0.modification_time = base::Time::Now(); |
| 429 EXPECT_TRUE(db()->AddFileInfo(info0, &directory_id)); | 429 EXPECT_TRUE(db()->AddFileInfo(info0, &directory_id)); |
| 430 | 430 |
| 431 FileId file_id; | 431 FileId file_id; |
| 432 FileInfo info1; | 432 FileInfo info1; |
| 433 info1.parent_id = 0; | 433 info1.parent_id = 0; |
| 434 info1.data_path = base::FilePath(FILE_PATH_LITERAL("bar")); | 434 info1.data_path = base::FilePath(FILE_PATH_LITERAL("bar")); |
| 435 info1.name = FILE_PATH_LITERAL("file"); | 435 info1.name = FILE_PATH_LITERAL("file"); |
| 436 info1.modification_time = base::Time::UnixEpoch(); | 436 info1.modification_time = base::Time::UnixEpoch(); |
| 437 EXPECT_TRUE(db()->AddFileInfo(info1, &file_id)); | 437 EXPECT_TRUE(db()->AddFileInfo(info1, &file_id)); |
| 438 | 438 |
| 439 EXPECT_FALSE(db()->OverwritingMoveFile(directory_id, file_id)); | 439 EXPECT_FALSE(db()->OverwritingMoveFile(directory_id, file_id)); |
| 440 } | 440 } |
| 441 | 441 |
| 442 TEST_F(FileSystemDirectoryDatabaseTest, TestOverwritingMoveFileDestDirectory) { | 442 TEST_F(SandboxDirectoryDatabaseTest, TestOverwritingMoveFileDestDirectory) { |
| 443 FileId file_id; | 443 FileId file_id; |
| 444 FileInfo info0; | 444 FileInfo info0; |
| 445 info0.parent_id = 0; | 445 info0.parent_id = 0; |
| 446 info0.name = FILE_PATH_LITERAL("file"); | 446 info0.name = FILE_PATH_LITERAL("file"); |
| 447 info0.data_path = base::FilePath(FILE_PATH_LITERAL("bar")); | 447 info0.data_path = base::FilePath(FILE_PATH_LITERAL("bar")); |
| 448 info0.modification_time = base::Time::Now(); | 448 info0.modification_time = base::Time::Now(); |
| 449 EXPECT_TRUE(db()->AddFileInfo(info0, &file_id)); | 449 EXPECT_TRUE(db()->AddFileInfo(info0, &file_id)); |
| 450 | 450 |
| 451 FileId directory_id; | 451 FileId directory_id; |
| 452 FileInfo info1; | 452 FileInfo info1; |
| 453 info1.parent_id = 0; | 453 info1.parent_id = 0; |
| 454 info1.name = FILE_PATH_LITERAL("directory"); | 454 info1.name = FILE_PATH_LITERAL("directory"); |
| 455 info1.modification_time = base::Time::UnixEpoch(); | 455 info1.modification_time = base::Time::UnixEpoch(); |
| 456 EXPECT_TRUE(db()->AddFileInfo(info1, &directory_id)); | 456 EXPECT_TRUE(db()->AddFileInfo(info1, &directory_id)); |
| 457 | 457 |
| 458 EXPECT_FALSE(db()->OverwritingMoveFile(file_id, directory_id)); | 458 EXPECT_FALSE(db()->OverwritingMoveFile(file_id, directory_id)); |
| 459 } | 459 } |
| 460 | 460 |
| 461 TEST_F(FileSystemDirectoryDatabaseTest, TestOverwritingMoveFileSuccess) { | 461 TEST_F(SandboxDirectoryDatabaseTest, TestOverwritingMoveFileSuccess) { |
| 462 FileId file_id0; | 462 FileId file_id0; |
| 463 FileInfo info0; | 463 FileInfo info0; |
| 464 info0.parent_id = 0; | 464 info0.parent_id = 0; |
| 465 info0.data_path = base::FilePath(FILE_PATH_LITERAL("foo")); | 465 info0.data_path = base::FilePath(FILE_PATH_LITERAL("foo")); |
| 466 info0.name = FILE_PATH_LITERAL("file name 0"); | 466 info0.name = FILE_PATH_LITERAL("file name 0"); |
| 467 info0.modification_time = base::Time::Now(); | 467 info0.modification_time = base::Time::Now(); |
| 468 EXPECT_TRUE(db()->AddFileInfo(info0, &file_id0)); | 468 EXPECT_TRUE(db()->AddFileInfo(info0, &file_id0)); |
| 469 | 469 |
| 470 FileInfo dir_info; | 470 FileInfo dir_info; |
| 471 FileId dir_id; | 471 FileId dir_id; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 487 FileId check_id; | 487 FileId check_id; |
| 488 | 488 |
| 489 EXPECT_FALSE(db()->GetFileWithPath(base::FilePath(info0.name), &check_id)); | 489 EXPECT_FALSE(db()->GetFileWithPath(base::FilePath(info0.name), &check_id)); |
| 490 EXPECT_TRUE(db()->GetFileWithPath( | 490 EXPECT_TRUE(db()->GetFileWithPath( |
| 491 base::FilePath(dir_info.name).Append(info1.name), &check_id)); | 491 base::FilePath(dir_info.name).Append(info1.name), &check_id)); |
| 492 EXPECT_TRUE(db()->GetFileInfo(check_id, &check_info)); | 492 EXPECT_TRUE(db()->GetFileInfo(check_id, &check_info)); |
| 493 | 493 |
| 494 EXPECT_EQ(info0.data_path, check_info.data_path); | 494 EXPECT_EQ(info0.data_path, check_info.data_path); |
| 495 } | 495 } |
| 496 | 496 |
| 497 TEST_F(FileSystemDirectoryDatabaseTest, TestGetNextInteger) { | 497 TEST_F(SandboxDirectoryDatabaseTest, TestGetNextInteger) { |
| 498 int64 next = -1; | 498 int64 next = -1; |
| 499 EXPECT_TRUE(db()->GetNextInteger(&next)); | 499 EXPECT_TRUE(db()->GetNextInteger(&next)); |
| 500 EXPECT_EQ(0, next); | 500 EXPECT_EQ(0, next); |
| 501 EXPECT_TRUE(db()->GetNextInteger(&next)); | 501 EXPECT_TRUE(db()->GetNextInteger(&next)); |
| 502 EXPECT_EQ(1, next); | 502 EXPECT_EQ(1, next); |
| 503 InitDatabase(); | 503 InitDatabase(); |
| 504 EXPECT_TRUE(db()->GetNextInteger(&next)); | 504 EXPECT_TRUE(db()->GetNextInteger(&next)); |
| 505 EXPECT_EQ(2, next); | 505 EXPECT_EQ(2, next); |
| 506 EXPECT_TRUE(db()->GetNextInteger(&next)); | 506 EXPECT_TRUE(db()->GetNextInteger(&next)); |
| 507 EXPECT_EQ(3, next); | 507 EXPECT_EQ(3, next); |
| 508 InitDatabase(); | 508 InitDatabase(); |
| 509 EXPECT_TRUE(db()->GetNextInteger(&next)); | 509 EXPECT_TRUE(db()->GetNextInteger(&next)); |
| 510 EXPECT_EQ(4, next); | 510 EXPECT_EQ(4, next); |
| 511 } | 511 } |
| 512 | 512 |
| 513 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_Empty) { | 513 TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_Empty) { |
| 514 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 514 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 515 | 515 |
| 516 int64 next = -1; | 516 int64 next = -1; |
| 517 EXPECT_TRUE(db()->GetNextInteger(&next)); | 517 EXPECT_TRUE(db()->GetNextInteger(&next)); |
| 518 EXPECT_EQ(0, next); | 518 EXPECT_EQ(0, next); |
| 519 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 519 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 520 } | 520 } |
| 521 | 521 |
| 522 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_Consistent) { | 522 TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_Consistent) { |
| 523 FileId dir_id; | 523 FileId dir_id; |
| 524 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); | 524 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
| 525 CreateDirectory(0, FPL("bar"), &dir_id); | 525 CreateDirectory(0, FPL("bar"), &dir_id); |
| 526 CreateFile(dir_id, FPL("baz"), FPL("fuga"), NULL); | 526 CreateFile(dir_id, FPL("baz"), FPL("fuga"), NULL); |
| 527 CreateFile(dir_id, FPL("fizz"), FPL("buzz"), NULL); | 527 CreateFile(dir_id, FPL("fizz"), FPL("buzz"), NULL); |
| 528 | 528 |
| 529 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 529 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 530 } | 530 } |
| 531 | 531 |
| 532 TEST_F(FileSystemDirectoryDatabaseTest, | 532 TEST_F(SandboxDirectoryDatabaseTest, |
| 533 TestConsistencyCheck_BackingMultiEntry) { | 533 TestConsistencyCheck_BackingMultiEntry) { |
| 534 const base::FilePath::CharType kBackingFileName[] = FPL("the celeb"); | 534 const base::FilePath::CharType kBackingFileName[] = FPL("the celeb"); |
| 535 CreateFile(0, FPL("foo"), kBackingFileName, NULL); | 535 CreateFile(0, FPL("foo"), kBackingFileName, NULL); |
| 536 | 536 |
| 537 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 537 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 538 ASSERT_TRUE(file_util::Delete(path().Append(kBackingFileName), false)); | 538 ASSERT_TRUE(file_util::Delete(path().Append(kBackingFileName), false)); |
| 539 CreateFile(0, FPL("bar"), kBackingFileName, NULL); | 539 CreateFile(0, FPL("bar"), kBackingFileName, NULL); |
| 540 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 540 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 541 } | 541 } |
| 542 | 542 |
| 543 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_FileLost) { | 543 TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_FileLost) { |
| 544 const base::FilePath::CharType kBackingFileName[] = FPL("hoge"); | 544 const base::FilePath::CharType kBackingFileName[] = FPL("hoge"); |
| 545 CreateFile(0, FPL("foo"), kBackingFileName, NULL); | 545 CreateFile(0, FPL("foo"), kBackingFileName, NULL); |
| 546 | 546 |
| 547 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 547 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 548 ASSERT_TRUE(file_util::Delete(path().Append(kBackingFileName), false)); | 548 ASSERT_TRUE(file_util::Delete(path().Append(kBackingFileName), false)); |
| 549 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 549 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 550 } | 550 } |
| 551 | 551 |
| 552 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_OrphanFile) { | 552 TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_OrphanFile) { |
| 553 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); | 553 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
| 554 | 554 |
| 555 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 555 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 556 | 556 |
| 557 bool created = false; | 557 bool created = false; |
| 558 base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; | 558 base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; |
| 559 base::PlatformFile file = base::CreatePlatformFile( | 559 base::PlatformFile file = base::CreatePlatformFile( |
| 560 path().Append(FPL("Orphan File")), | 560 path().Append(FPL("Orphan File")), |
| 561 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, | 561 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, |
| 562 &created, &error); | 562 &created, &error); |
| 563 ASSERT_EQ(base::PLATFORM_FILE_OK, error); | 563 ASSERT_EQ(base::PLATFORM_FILE_OK, error); |
| 564 ASSERT_TRUE(created); | 564 ASSERT_TRUE(created); |
| 565 ASSERT_TRUE(base::ClosePlatformFile(file)); | 565 ASSERT_TRUE(base::ClosePlatformFile(file)); |
| 566 | 566 |
| 567 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 567 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 568 } | 568 } |
| 569 | 569 |
| 570 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_RootLoop) { | 570 TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_RootLoop) { |
| 571 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 571 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 572 MakeHierarchyLink(0, 0, base::FilePath::StringType()); | 572 MakeHierarchyLink(0, 0, base::FilePath::StringType()); |
| 573 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 573 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 574 } | 574 } |
| 575 | 575 |
| 576 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_DirectoryLoop) { | 576 TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_DirectoryLoop) { |
| 577 FileId dir1_id; | 577 FileId dir1_id; |
| 578 FileId dir2_id; | 578 FileId dir2_id; |
| 579 base::FilePath::StringType dir1_name = FPL("foo"); | 579 base::FilePath::StringType dir1_name = FPL("foo"); |
| 580 CreateDirectory(0, dir1_name, &dir1_id); | 580 CreateDirectory(0, dir1_name, &dir1_id); |
| 581 CreateDirectory(dir1_id, FPL("bar"), &dir2_id); | 581 CreateDirectory(dir1_id, FPL("bar"), &dir2_id); |
| 582 | 582 |
| 583 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 583 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 584 MakeHierarchyLink(dir2_id, dir1_id, dir1_name); | 584 MakeHierarchyLink(dir2_id, dir1_id, dir1_name); |
| 585 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 585 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 586 } | 586 } |
| 587 | 587 |
| 588 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_NameMismatch) { | 588 TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_NameMismatch) { |
| 589 FileId dir_id; | 589 FileId dir_id; |
| 590 FileId file_id; | 590 FileId file_id; |
| 591 CreateDirectory(0, FPL("foo"), &dir_id); | 591 CreateDirectory(0, FPL("foo"), &dir_id); |
| 592 CreateFile(dir_id, FPL("bar"), FPL("hoge/fuga/piyo"), &file_id); | 592 CreateFile(dir_id, FPL("bar"), FPL("hoge/fuga/piyo"), &file_id); |
| 593 | 593 |
| 594 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 594 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 595 DeleteHierarchyLink(file_id); | 595 DeleteHierarchyLink(file_id); |
| 596 MakeHierarchyLink(dir_id, file_id, FPL("baz")); | 596 MakeHierarchyLink(dir_id, file_id, FPL("baz")); |
| 597 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 597 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 598 } | 598 } |
| 599 | 599 |
| 600 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_WreckedEntries) { | 600 TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_WreckedEntries) { |
| 601 FileId dir1_id; | 601 FileId dir1_id; |
| 602 FileId dir2_id; | 602 FileId dir2_id; |
| 603 CreateDirectory(0, FPL("foo"), &dir1_id); | 603 CreateDirectory(0, FPL("foo"), &dir1_id); |
| 604 CreateDirectory(dir1_id, FPL("bar"), &dir2_id); | 604 CreateDirectory(dir1_id, FPL("bar"), &dir2_id); |
| 605 CreateFile(dir2_id, FPL("baz"), FPL("fizz/buzz"), NULL); | 605 CreateFile(dir2_id, FPL("baz"), FPL("fizz/buzz"), NULL); |
| 606 | 606 |
| 607 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 607 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 608 DeleteHierarchyLink(dir2_id); // Delete link from |dir1_id| to |dir2_id|. | 608 DeleteHierarchyLink(dir2_id); // Delete link from |dir1_id| to |dir2_id|. |
| 609 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 609 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 610 } | 610 } |
| 611 | 611 |
| 612 TEST_F(FileSystemDirectoryDatabaseTest, TestRepairDatabase_Success) { | 612 TEST_F(SandboxDirectoryDatabaseTest, TestRepairDatabase_Success) { |
| 613 base::FilePath::StringType kFileName = FPL("bar"); | 613 base::FilePath::StringType kFileName = FPL("bar"); |
| 614 | 614 |
| 615 FileId file_id_prev; | 615 FileId file_id_prev; |
| 616 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); | 616 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
| 617 CreateFile(0, kFileName, FPL("fuga"), &file_id_prev); | 617 CreateFile(0, kFileName, FPL("fuga"), &file_id_prev); |
| 618 | 618 |
| 619 const base::FilePath kDatabaseDirectory = path().Append(kDirectoryDatabaseName
); | 619 const base::FilePath kDatabaseDirectory = |
| 620 path().Append(kDirectoryDatabaseName); |
| 620 CloseDatabase(); | 621 CloseDatabase(); |
| 621 CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, | 622 CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, |
| 622 0, std::numeric_limits<size_t>::max()); | 623 0, std::numeric_limits<size_t>::max()); |
| 623 InitDatabase(); | 624 InitDatabase(); |
| 624 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 625 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 625 | 626 |
| 626 FileId file_id; | 627 FileId file_id; |
| 627 EXPECT_TRUE(db()->GetChildWithName(0, kFileName, &file_id)); | 628 EXPECT_TRUE(db()->GetChildWithName(0, kFileName, &file_id)); |
| 628 EXPECT_EQ(file_id_prev, file_id); | 629 EXPECT_EQ(file_id_prev, file_id); |
| 629 | 630 |
| 630 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 631 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 631 } | 632 } |
| 632 | 633 |
| 633 TEST_F(FileSystemDirectoryDatabaseTest, TestRepairDatabase_Failure) { | 634 TEST_F(SandboxDirectoryDatabaseTest, TestRepairDatabase_Failure) { |
| 634 base::FilePath::StringType kFileName = FPL("bar"); | 635 base::FilePath::StringType kFileName = FPL("bar"); |
| 635 | 636 |
| 636 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); | 637 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
| 637 CreateFile(0, kFileName, FPL("fuga"), NULL); | 638 CreateFile(0, kFileName, FPL("fuga"), NULL); |
| 638 | 639 |
| 639 const base::FilePath kDatabaseDirectory = path().Append(kDirectoryDatabaseName
); | 640 const base::FilePath kDatabaseDirectory = |
| 641 path().Append(kDirectoryDatabaseName); |
| 640 CloseDatabase(); | 642 CloseDatabase(); |
| 641 CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, | 643 CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, |
| 642 0, std::numeric_limits<size_t>::max()); | 644 0, std::numeric_limits<size_t>::max()); |
| 643 CorruptDatabase(kDatabaseDirectory, leveldb::kLogFile, | 645 CorruptDatabase(kDatabaseDirectory, leveldb::kLogFile, |
| 644 -1, 1); | 646 -1, 1); |
| 645 InitDatabase(); | 647 InitDatabase(); |
| 646 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 648 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 647 | 649 |
| 648 FileId file_id; | 650 FileId file_id; |
| 649 EXPECT_FALSE(db()->GetChildWithName(0, kFileName, &file_id)); | 651 EXPECT_FALSE(db()->GetChildWithName(0, kFileName, &file_id)); |
| 650 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 652 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 651 } | 653 } |
| 652 | 654 |
| 653 TEST_F(FileSystemDirectoryDatabaseTest, TestRepairDatabase_MissingManifest) { | 655 TEST_F(SandboxDirectoryDatabaseTest, TestRepairDatabase_MissingManifest) { |
| 654 base::FilePath::StringType kFileName = FPL("bar"); | 656 base::FilePath::StringType kFileName = FPL("bar"); |
| 655 | 657 |
| 656 FileId file_id_prev; | 658 FileId file_id_prev; |
| 657 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); | 659 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
| 658 CreateFile(0, kFileName, FPL("fuga"), &file_id_prev); | 660 CreateFile(0, kFileName, FPL("fuga"), &file_id_prev); |
| 659 | 661 |
| 660 const base::FilePath kDatabaseDirectory = | 662 const base::FilePath kDatabaseDirectory = |
| 661 path().Append(kDirectoryDatabaseName); | 663 path().Append(kDirectoryDatabaseName); |
| 662 CloseDatabase(); | 664 CloseDatabase(); |
| 663 | 665 |
| 664 DeleteDatabaseFile(kDatabaseDirectory, leveldb::kDescriptorFile); | 666 DeleteDatabaseFile(kDatabaseDirectory, leveldb::kDescriptorFile); |
| 665 | 667 |
| 666 InitDatabase(); | 668 InitDatabase(); |
| 667 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 669 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 668 | 670 |
| 669 FileId file_id; | 671 FileId file_id; |
| 670 EXPECT_TRUE(db()->GetChildWithName(0, kFileName, &file_id)); | 672 EXPECT_TRUE(db()->GetChildWithName(0, kFileName, &file_id)); |
| 671 EXPECT_EQ(file_id_prev, file_id); | 673 EXPECT_EQ(file_id_prev, file_id); |
| 672 | 674 |
| 673 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 675 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 674 } | 676 } |
| 675 | 677 |
| 676 } // namespace fileapi | 678 } // namespace fileapi |
| OLD | NEW |