| 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/file_system_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_number_conversions.h" | 14 #include "base/string_number_conversions.h" |
| 15 #include "base/string_util.h" | 15 #include "base/string_util.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" | 18 #include "webkit/fileapi/file_system_database_test_helper.h" |
| 19 #include "webkit/fileapi/file_system_util.h" | 19 #include "webkit/fileapi/file_system_util.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 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 FileSystemDirectoryDatabaseTest : public testing::Test { |
| 30 public: | 30 public: |
| 31 typedef FileSystemDirectoryDatabase::FileId FileId; | 31 typedef FileSystemDirectoryDatabase::FileId FileId; |
| 32 typedef FileSystemDirectoryDatabase::FileInfo FileInfo; | 32 typedef FileSystemDirectoryDatabase::FileInfo FileInfo; |
| 33 | 33 |
| 34 FileSystemDirectoryDatabaseTest() { | 34 FileSystemDirectoryDatabaseTest() { |
| 35 EXPECT_TRUE(base_.CreateUniqueTempDir()); | 35 EXPECT_TRUE(base_.CreateUniqueTempDir()); |
| 36 InitDatabase(); | 36 InitDatabase(); |
| 37 } | 37 } |
| 38 | 38 |
| 39 FileSystemDirectoryDatabase* db() { | 39 FileSystemDirectoryDatabase* 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 FileSystemDirectoryDatabase(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 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; |
| 58 info.name = name; | 58 info.name = name; |
| 59 return db_->AddFileInfo(info, &file_id); | 59 return db_->AddFileInfo(info, &file_id); |
| 60 } | 60 } |
| 61 | 61 |
| 62 void CreateDirectory(FileId parent_id, | 62 void CreateDirectory(FileId parent_id, |
| 63 const FilePath::StringType& name, | 63 const base::FilePath::StringType& name, |
| 64 FileId* file_id_out) { | 64 FileId* file_id_out) { |
| 65 FileInfo info; | 65 FileInfo info; |
| 66 info.parent_id = parent_id; | 66 info.parent_id = parent_id; |
| 67 info.name = name; | 67 info.name = name; |
| 68 ASSERT_TRUE(db_->AddFileInfo(info, file_id_out)); | 68 ASSERT_TRUE(db_->AddFileInfo(info, file_id_out)); |
| 69 } | 69 } |
| 70 | 70 |
| 71 void CreateFile(FileId parent_id, | 71 void CreateFile(FileId parent_id, |
| 72 const FilePath::StringType& name, | 72 const base::FilePath::StringType& name, |
| 73 const FilePath::StringType& data_path, | 73 const base::FilePath::StringType& data_path, |
| 74 FileId* file_id_out) { | 74 FileId* file_id_out) { |
| 75 FileId file_id; | 75 FileId file_id; |
| 76 | 76 |
| 77 FileInfo info; | 77 FileInfo info; |
| 78 info.parent_id = parent_id; | 78 info.parent_id = parent_id; |
| 79 info.name = name; | 79 info.name = name; |
| 80 info.data_path = FilePath(data_path).NormalizePathSeparators(); | 80 info.data_path = base::FilePath(data_path).NormalizePathSeparators(); |
| 81 ASSERT_TRUE(db_->AddFileInfo(info, &file_id)); | 81 ASSERT_TRUE(db_->AddFileInfo(info, &file_id)); |
| 82 | 82 |
| 83 FilePath local_path = path().Append(data_path); | 83 base::FilePath local_path = path().Append(data_path); |
| 84 if (!file_util::DirectoryExists(local_path.DirName())) | 84 if (!file_util::DirectoryExists(local_path.DirName())) |
| 85 ASSERT_TRUE(file_util::CreateDirectory(local_path.DirName())); | 85 ASSERT_TRUE(file_util::CreateDirectory(local_path.DirName())); |
| 86 | 86 |
| 87 bool created = false; | 87 bool created = false; |
| 88 base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; | 88 base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; |
| 89 base::PlatformFile file = base::CreatePlatformFile( | 89 base::PlatformFile file = base::CreatePlatformFile( |
| 90 local_path, | 90 local_path, |
| 91 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, | 91 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, |
| 92 &created, &error); | 92 &created, &error); |
| 93 ASSERT_EQ(base::PLATFORM_FILE_OK, error); | 93 ASSERT_EQ(base::PLATFORM_FILE_OK, error); |
| 94 ASSERT_TRUE(created); | 94 ASSERT_TRUE(created); |
| 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 FileSystemDirectoryDatabase(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 FilePath& path() { | 113 const base::FilePath& path() { |
| 114 return base_.path(); | 114 return base_.path(); |
| 115 } | 115 } |
| 116 | 116 |
| 117 // Makes link from |parent_id| to |child_id| with |name|. | 117 // Makes link from |parent_id| to |child_id| with |name|. |
| 118 void MakeHierarchyLink(FileId parent_id, | 118 void MakeHierarchyLink(FileId parent_id, |
| 119 FileId child_id, | 119 FileId child_id, |
| 120 const FilePath::StringType& name) { | 120 const base::FilePath::StringType& name) { |
| 121 ASSERT_TRUE(db()->db_->Put( | 121 ASSERT_TRUE(db()->db_->Put( |
| 122 leveldb::WriteOptions(), | 122 leveldb::WriteOptions(), |
| 123 "CHILD_OF:" + base::Int64ToString(parent_id) + ":" + | 123 "CHILD_OF:" + base::Int64ToString(parent_id) + ":" + |
| 124 FilePathToString(FilePath(name)), | 124 FilePathToString(base::FilePath(name)), |
| 125 base::Int64ToString(child_id)).ok()); | 125 base::Int64ToString(child_id)).ok()); |
| 126 } | 126 } |
| 127 | 127 |
| 128 // Deletes link from parent of |file_id| to |file_id|. | 128 // Deletes link from parent of |file_id| to |file_id|. |
| 129 void DeleteHierarchyLink(FileId file_id) { | 129 void DeleteHierarchyLink(FileId file_id) { |
| 130 FileInfo file_info; | 130 FileInfo file_info; |
| 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(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<FileSystemDirectoryDatabase> db_; |
| 142 | 142 |
| 143 DISALLOW_COPY_AND_ASSIGN(FileSystemDirectoryDatabaseTest); | 143 DISALLOW_COPY_AND_ASSIGN(FileSystemDirectoryDatabaseTest); |
| 144 }; | 144 }; |
| 145 | 145 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 164 } | 164 } |
| 165 | 165 |
| 166 TEST_F(FileSystemDirectoryDatabaseTest, TestAddNameClash) { | 166 TEST_F(FileSystemDirectoryDatabaseTest, 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 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(FileSystemDirectoryDatabaseTest, TestRenameNoMoveNameClash) { |
| 189 FileInfo info; | 189 FileInfo info; |
| 190 FileId file_id0; | 190 FileId file_id0; |
| 191 FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 191 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 192 FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); | 192 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
| 193 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(FileSystemDirectoryDatabaseTest, TestMoveSameNameNameClash) { |
| 205 FileInfo info; | 205 FileInfo info; |
| 206 FileId file_id0; | 206 FileId file_id0; |
| 207 FileId file_id1; | 207 FileId file_id1; |
| 208 FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 208 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 209 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(FileSystemDirectoryDatabaseTest, TestMoveRenameNameClash) { |
| 222 FileInfo info; | 222 FileInfo info; |
| 223 FileId file_id0; | 223 FileId file_id0; |
| 224 FileId file_id1; | 224 FileId file_id1; |
| 225 FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 225 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 226 FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); | 226 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
| 227 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; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 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(FileSystemDirectoryDatabaseTest, TestGetChildWithName) { |
| 260 FileInfo info; | 260 FileInfo info; |
| 261 FileId file_id0; | 261 FileId file_id0; |
| 262 FileId file_id1; | 262 FileId file_id1; |
| 263 FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 263 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 264 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(FileSystemDirectoryDatabaseTest, 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 FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); | 287 base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
| 288 FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); | 288 base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
| 289 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; |
| 293 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); | 293 EXPECT_TRUE(db()->AddFileInfo(info, &file_id0)); |
| 294 info.parent_id = file_id0; | 294 info.parent_id = file_id0; |
| 295 info.name = name1; | 295 info.name = name1; |
| 296 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); | 296 EXPECT_TRUE(db()->AddFileInfo(info, &file_id1)); |
| 297 EXPECT_NE(file_id0, file_id1); | 297 EXPECT_NE(file_id0, file_id1); |
| 298 info.parent_id = file_id1; | 298 info.parent_id = file_id1; |
| 299 info.name = name2; | 299 info.name = name2; |
| 300 EXPECT_TRUE(db()->AddFileInfo(info, &file_id2)); | 300 EXPECT_TRUE(db()->AddFileInfo(info, &file_id2)); |
| 301 EXPECT_NE(file_id0, file_id2); | 301 EXPECT_NE(file_id0, file_id2); |
| 302 EXPECT_NE(file_id1, file_id2); | 302 EXPECT_NE(file_id1, file_id2); |
| 303 | 303 |
| 304 FileId check_file_id; | 304 FileId check_file_id; |
| 305 FilePath path = FilePath(name0); | 305 base::FilePath path = base::FilePath(name0); |
| 306 EXPECT_TRUE(db()->GetFileWithPath(path, &check_file_id)); | 306 EXPECT_TRUE(db()->GetFileWithPath(path, &check_file_id)); |
| 307 EXPECT_EQ(file_id0, check_file_id); | 307 EXPECT_EQ(file_id0, check_file_id); |
| 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); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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(FileSystemDirectoryDatabaseTest, 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 = 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(FileSystemDirectoryDatabaseTest, 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 = 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(FileSystemDirectoryDatabaseTest, 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 = 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(FileSystemDirectoryDatabaseTest, 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 = 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(FileSystemDirectoryDatabaseTest, 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 = 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; |
| 472 dir_info.parent_id = 0; | 472 dir_info.parent_id = 0; |
| 473 dir_info.name = FILE_PATH_LITERAL("directory name"); | 473 dir_info.name = FILE_PATH_LITERAL("directory name"); |
| 474 EXPECT_TRUE(db()->AddFileInfo(dir_info, &dir_id)); | 474 EXPECT_TRUE(db()->AddFileInfo(dir_info, &dir_id)); |
| 475 | 475 |
| 476 FileId file_id1; | 476 FileId file_id1; |
| 477 FileInfo info1; | 477 FileInfo info1; |
| 478 info1.parent_id = dir_id; | 478 info1.parent_id = dir_id; |
| 479 info1.data_path = FilePath(FILE_PATH_LITERAL("bar")); | 479 info1.data_path = base::FilePath(FILE_PATH_LITERAL("bar")); |
| 480 info1.name = FILE_PATH_LITERAL("file name 1"); | 480 info1.name = FILE_PATH_LITERAL("file name 1"); |
| 481 info1.modification_time = base::Time::UnixEpoch(); | 481 info1.modification_time = base::Time::UnixEpoch(); |
| 482 EXPECT_TRUE(db()->AddFileInfo(info1, &file_id1)); | 482 EXPECT_TRUE(db()->AddFileInfo(info1, &file_id1)); |
| 483 | 483 |
| 484 EXPECT_TRUE(db()->OverwritingMoveFile(file_id0, file_id1)); | 484 EXPECT_TRUE(db()->OverwritingMoveFile(file_id0, file_id1)); |
| 485 | 485 |
| 486 FileInfo check_info; | 486 FileInfo check_info; |
| 487 FileId check_id; | 487 FileId check_id; |
| 488 | 488 |
| 489 EXPECT_FALSE(db()->GetFileWithPath(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 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(FileSystemDirectoryDatabaseTest, 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)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 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(FileSystemDirectoryDatabaseTest, |
| 533 TestConsistencyCheck_BackingMultiEntry) { | 533 TestConsistencyCheck_BackingMultiEntry) { |
| 534 const 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(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_FileLost) { |
| 544 const 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(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_OrphanFile) { |
| 553 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); | 553 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
| 554 | 554 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 569 | 569 |
| 570 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_RootLoop) { | 570 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_RootLoop) { |
| 571 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 571 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 572 MakeHierarchyLink(0, 0, FPL("")); | 572 MakeHierarchyLink(0, 0, FPL("")); |
| 573 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 573 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 574 } | 574 } |
| 575 | 575 |
| 576 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_DirectoryLoop) { | 576 TEST_F(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_DirectoryLoop) { |
| 577 FileId dir1_id; | 577 FileId dir1_id; |
| 578 FileId dir2_id; | 578 FileId dir2_id; |
| 579 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(FileSystemDirectoryDatabaseTest, TestConsistencyCheck_NameMismatch) { |
| 589 FileId dir_id; | 589 FileId dir_id; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 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(FileSystemDirectoryDatabaseTest, TestRepairDatabase_Success) { |
| 613 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 FilePath kDatabaseDirectory = path().Append(kDirectoryDatabaseName); | 619 const base::FilePath kDatabaseDirectory = path().Append(kDirectoryDatabaseName
); |
| 620 CloseDatabase(); | 620 CloseDatabase(); |
| 621 CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, | 621 CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, |
| 622 0, std::numeric_limits<size_t>::max()); | 622 0, std::numeric_limits<size_t>::max()); |
| 623 InitDatabase(); | 623 InitDatabase(); |
| 624 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 624 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 625 | 625 |
| 626 FileId file_id; | 626 FileId file_id; |
| 627 EXPECT_TRUE(db()->GetChildWithName(0, kFileName, &file_id)); | 627 EXPECT_TRUE(db()->GetChildWithName(0, kFileName, &file_id)); |
| 628 EXPECT_EQ(file_id_prev, file_id); | 628 EXPECT_EQ(file_id_prev, file_id); |
| 629 | 629 |
| 630 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 630 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 631 } | 631 } |
| 632 | 632 |
| 633 TEST_F(FileSystemDirectoryDatabaseTest, TestRepairDatabase_Failure) { | 633 TEST_F(FileSystemDirectoryDatabaseTest, TestRepairDatabase_Failure) { |
| 634 FilePath::StringType kFileName = FPL("bar"); | 634 base::FilePath::StringType kFileName = FPL("bar"); |
| 635 | 635 |
| 636 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); | 636 CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
| 637 CreateFile(0, kFileName, FPL("fuga"), NULL); | 637 CreateFile(0, kFileName, FPL("fuga"), NULL); |
| 638 | 638 |
| 639 const FilePath kDatabaseDirectory = path().Append(kDirectoryDatabaseName); | 639 const base::FilePath kDatabaseDirectory = path().Append(kDirectoryDatabaseName
); |
| 640 CloseDatabase(); | 640 CloseDatabase(); |
| 641 CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, | 641 CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, |
| 642 0, std::numeric_limits<size_t>::max()); | 642 0, std::numeric_limits<size_t>::max()); |
| 643 CorruptDatabase(kDatabaseDirectory, leveldb::kLogFile, | 643 CorruptDatabase(kDatabaseDirectory, leveldb::kLogFile, |
| 644 -1, 1); | 644 -1, 1); |
| 645 InitDatabase(); | 645 InitDatabase(); |
| 646 EXPECT_FALSE(db()->IsFileSystemConsistent()); | 646 EXPECT_FALSE(db()->IsFileSystemConsistent()); |
| 647 | 647 |
| 648 FileId file_id; | 648 FileId file_id; |
| 649 EXPECT_FALSE(db()->GetChildWithName(0, kFileName, &file_id)); | 649 EXPECT_FALSE(db()->GetChildWithName(0, kFileName, &file_id)); |
| 650 EXPECT_TRUE(db()->IsFileSystemConsistent()); | 650 EXPECT_TRUE(db()->IsFileSystemConsistent()); |
| 651 } | 651 } |
| 652 | 652 |
| 653 } // namespace fileapi | 653 } // namespace fileapi |
| OLD | NEW |