Index: webkit/browser/fileapi/sandbox_directory_database_unittest.cc |
diff --git a/webkit/browser/fileapi/sandbox_directory_database_unittest.cc b/webkit/browser/fileapi/sandbox_directory_database_unittest.cc |
deleted file mode 100644 |
index 0201987593b7ae7df4c49e7db6ad00bf1de264df..0000000000000000000000000000000000000000 |
--- a/webkit/browser/fileapi/sandbox_directory_database_unittest.cc |
+++ /dev/null |
@@ -1,672 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "webkit/browser/fileapi/sandbox_directory_database.h" |
- |
-#include <math.h> |
-#include <limits> |
- |
-#include "base/file_util.h" |
-#include "base/files/file.h" |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_util.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/leveldatabase/src/include/leveldb/db.h" |
-#include "webkit/browser/fileapi/sandbox_database_test_helper.h" |
-#include "webkit/common/fileapi/file_system_util.h" |
- |
-#define FPL(x) FILE_PATH_LITERAL(x) |
- |
-namespace fileapi { |
- |
-namespace { |
-const base::FilePath::CharType kDirectoryDatabaseName[] = FPL("Paths"); |
-} |
- |
-class SandboxDirectoryDatabaseTest : public testing::Test { |
- public: |
- typedef SandboxDirectoryDatabase::FileId FileId; |
- typedef SandboxDirectoryDatabase::FileInfo FileInfo; |
- |
- SandboxDirectoryDatabaseTest() { |
- EXPECT_TRUE(base_.CreateUniqueTempDir()); |
- InitDatabase(); |
- } |
- |
- SandboxDirectoryDatabase* db() { |
- return db_.get(); |
- } |
- |
- void InitDatabase() { |
- // Call CloseDatabase() to avoid having multiple database instances for |
- // single directory at once. |
- CloseDatabase(); |
- db_.reset(new SandboxDirectoryDatabase(path(), NULL)); |
- } |
- |
- void CloseDatabase() { |
- db_.reset(); |
- } |
- |
- base::File::Error AddFileInfo( |
- FileId parent_id, const base::FilePath::StringType& name) { |
- FileId file_id; |
- FileInfo info; |
- info.parent_id = parent_id; |
- info.name = name; |
- return db_->AddFileInfo(info, &file_id); |
- } |
- |
- void CreateDirectory(FileId parent_id, |
- const base::FilePath::StringType& name, |
- FileId* file_id_out) { |
- FileInfo info; |
- info.parent_id = parent_id; |
- info.name = name; |
- ASSERT_EQ(base::File::FILE_OK, db_->AddFileInfo(info, file_id_out)); |
- } |
- |
- void CreateFile(FileId parent_id, |
- const base::FilePath::StringType& name, |
- const base::FilePath::StringType& data_path, |
- FileId* file_id_out) { |
- FileId file_id; |
- |
- FileInfo info; |
- info.parent_id = parent_id; |
- info.name = name; |
- info.data_path = base::FilePath(data_path).NormalizePathSeparators(); |
- ASSERT_EQ(base::File::FILE_OK, db_->AddFileInfo(info, &file_id)); |
- |
- base::FilePath local_path = path().Append(data_path); |
- if (!base::DirectoryExists(local_path.DirName())) |
- ASSERT_TRUE(base::CreateDirectory(local_path.DirName())); |
- |
- base::File file(local_path, |
- base::File::FLAG_CREATE | base::File::FLAG_WRITE); |
- ASSERT_TRUE(file.IsValid()); |
- ASSERT_TRUE(file.created()); |
- |
- if (file_id_out) |
- *file_id_out = file_id; |
- } |
- |
- void ClearDatabaseAndDirectory() { |
- db_.reset(); |
- ASSERT_TRUE(base::DeleteFile(path(), true /* recursive */)); |
- ASSERT_TRUE(base::CreateDirectory(path())); |
- db_.reset(new SandboxDirectoryDatabase(path(), NULL)); |
- } |
- |
- bool RepairDatabase() { |
- return db()->RepairDatabase( |
- FilePathToString(path().Append(kDirectoryDatabaseName))); |
- } |
- |
- const base::FilePath& path() { |
- return base_.path(); |
- } |
- |
- // Makes link from |parent_id| to |child_id| with |name|. |
- void MakeHierarchyLink(FileId parent_id, |
- FileId child_id, |
- const base::FilePath::StringType& name) { |
- ASSERT_TRUE(db()->db_->Put( |
- leveldb::WriteOptions(), |
- "CHILD_OF:" + base::Int64ToString(parent_id) + ":" + |
- FilePathToString(base::FilePath(name)), |
- base::Int64ToString(child_id)).ok()); |
- } |
- |
- // Deletes link from parent of |file_id| to |file_id|. |
- void DeleteHierarchyLink(FileId file_id) { |
- FileInfo file_info; |
- ASSERT_TRUE(db()->GetFileInfo(file_id, &file_info)); |
- ASSERT_TRUE(db()->db_->Delete( |
- leveldb::WriteOptions(), |
- "CHILD_OF:" + base::Int64ToString(file_info.parent_id) + ":" + |
- FilePathToString(base::FilePath(file_info.name))).ok()); |
- } |
- |
- protected: |
- // Common temp base for nondestructive uses. |
- base::ScopedTempDir base_; |
- scoped_ptr<SandboxDirectoryDatabase> db_; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(SandboxDirectoryDatabaseTest); |
-}; |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestMissingFileGetInfo) { |
- FileId file_id = 888; |
- FileInfo info; |
- EXPECT_FALSE(db()->GetFileInfo(file_id, &info)); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestGetRootFileInfoBeforeCreate) { |
- FileId file_id = 0; |
- FileInfo info; |
- EXPECT_TRUE(db()->GetFileInfo(file_id, &info)); |
- EXPECT_EQ(0, info.parent_id); |
- EXPECT_TRUE(info.name.empty()); |
- EXPECT_TRUE(info.data_path.empty()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestMissingParentAddFileInfo) { |
- FileId parent_id = 7; |
- EXPECT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY, |
- AddFileInfo(parent_id, FILE_PATH_LITERAL("foo"))); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestAddNameClash) { |
- FileInfo info; |
- FileId file_id; |
- info.parent_id = 0; |
- info.name = FILE_PATH_LITERAL("dir 0"); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id)); |
- |
- // Check for name clash in the root directory. |
- base::FilePath::StringType name = info.name; |
- EXPECT_EQ(base::File::FILE_ERROR_EXISTS, AddFileInfo(0, name)); |
- name = FILE_PATH_LITERAL("dir 1"); |
- EXPECT_EQ(base::File::FILE_OK, AddFileInfo(0, name)); |
- |
- name = FILE_PATH_LITERAL("subdir 0"); |
- EXPECT_EQ(base::File::FILE_OK, AddFileInfo(file_id, name)); |
- |
- // Check for name clash in a subdirectory. |
- EXPECT_EQ(base::File::FILE_ERROR_EXISTS, AddFileInfo(file_id, name)); |
- name = FILE_PATH_LITERAL("subdir 1"); |
- EXPECT_EQ(base::File::FILE_OK, AddFileInfo(file_id, name)); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestRenameNoMoveNameClash) { |
- FileInfo info; |
- FileId file_id0; |
- base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
- base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
- base::FilePath::StringType name2 = FILE_PATH_LITERAL("bas"); |
- info.parent_id = 0; |
- info.name = name0; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id0)); |
- EXPECT_EQ(base::File::FILE_OK, AddFileInfo(0, name1)); |
- info.name = name1; |
- EXPECT_FALSE(db()->UpdateFileInfo(file_id0, info)); |
- info.name = name2; |
- EXPECT_TRUE(db()->UpdateFileInfo(file_id0, info)); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestMoveSameNameNameClash) { |
- FileInfo info; |
- FileId file_id0; |
- FileId file_id1; |
- base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
- base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
- info.parent_id = 0; |
- info.name = name0; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id0)); |
- info.parent_id = file_id0; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id1)); |
- info.parent_id = 0; |
- EXPECT_FALSE(db()->UpdateFileInfo(file_id1, info)); |
- info.name = name1; |
- EXPECT_TRUE(db()->UpdateFileInfo(file_id1, info)); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestMoveRenameNameClash) { |
- FileInfo info; |
- FileId file_id0; |
- FileId file_id1; |
- base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
- base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
- base::FilePath::StringType name2 = FILE_PATH_LITERAL("bas"); |
- info.parent_id = 0; |
- info.name = name0; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id0)); |
- info.parent_id = file_id0; |
- info.name = name1; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id1)); |
- info.parent_id = 0; |
- info.name = name0; |
- EXPECT_FALSE(db()->UpdateFileInfo(file_id1, info)); |
- info.name = name1; |
- EXPECT_TRUE(db()->UpdateFileInfo(file_id1, info)); |
- // Also test a successful move+rename. |
- info.parent_id = file_id0; |
- info.name = name2; |
- EXPECT_TRUE(db()->UpdateFileInfo(file_id1, info)); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestRemoveWithChildren) { |
- FileInfo info; |
- FileId file_id0; |
- FileId file_id1; |
- info.parent_id = 0; |
- info.name = FILE_PATH_LITERAL("foo"); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id0)); |
- info.parent_id = file_id0; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id1)); |
- EXPECT_FALSE(db()->RemoveFileInfo(file_id0)); |
- EXPECT_TRUE(db()->RemoveFileInfo(file_id1)); |
- EXPECT_TRUE(db()->RemoveFileInfo(file_id0)); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestGetChildWithName) { |
- FileInfo info; |
- FileId file_id0; |
- FileId file_id1; |
- base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
- base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
- info.parent_id = 0; |
- info.name = name0; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id0)); |
- info.parent_id = file_id0; |
- info.name = name1; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id1)); |
- EXPECT_NE(file_id0, file_id1); |
- |
- FileId check_file_id; |
- EXPECT_FALSE(db()->GetChildWithName(0, name1, &check_file_id)); |
- EXPECT_TRUE(db()->GetChildWithName(0, name0, &check_file_id)); |
- EXPECT_EQ(file_id0, check_file_id); |
- EXPECT_FALSE(db()->GetChildWithName(file_id0, name0, &check_file_id)); |
- EXPECT_TRUE(db()->GetChildWithName(file_id0, name1, &check_file_id)); |
- EXPECT_EQ(file_id1, check_file_id); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestGetFileWithPath) { |
- FileInfo info; |
- FileId file_id0; |
- FileId file_id1; |
- FileId file_id2; |
- base::FilePath::StringType name0 = FILE_PATH_LITERAL("foo"); |
- base::FilePath::StringType name1 = FILE_PATH_LITERAL("bar"); |
- base::FilePath::StringType name2 = FILE_PATH_LITERAL("dog"); |
- |
- info.parent_id = 0; |
- info.name = name0; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id0)); |
- info.parent_id = file_id0; |
- info.name = name1; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id1)); |
- EXPECT_NE(file_id0, file_id1); |
- info.parent_id = file_id1; |
- info.name = name2; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id2)); |
- EXPECT_NE(file_id0, file_id2); |
- EXPECT_NE(file_id1, file_id2); |
- |
- FileId check_file_id; |
- base::FilePath path = base::FilePath(name0); |
- EXPECT_TRUE(db()->GetFileWithPath(path, &check_file_id)); |
- EXPECT_EQ(file_id0, check_file_id); |
- |
- path = path.Append(name1); |
- EXPECT_TRUE(db()->GetFileWithPath(path, &check_file_id)); |
- EXPECT_EQ(file_id1, check_file_id); |
- |
- path = path.Append(name2); |
- EXPECT_TRUE(db()->GetFileWithPath(path, &check_file_id)); |
- EXPECT_EQ(file_id2, check_file_id); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestListChildren) { |
- // No children in the root. |
- std::vector<FileId> children; |
- EXPECT_TRUE(db()->ListChildren(0, &children)); |
- EXPECT_TRUE(children.empty()); |
- |
- // One child in the root. |
- FileId file_id0; |
- FileInfo info; |
- info.parent_id = 0; |
- info.name = FILE_PATH_LITERAL("foo"); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id0)); |
- EXPECT_TRUE(db()->ListChildren(0, &children)); |
- EXPECT_EQ(children.size(), 1UL); |
- EXPECT_EQ(children[0], file_id0); |
- |
- // Two children in the root. |
- FileId file_id1; |
- info.name = FILE_PATH_LITERAL("bar"); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id1)); |
- EXPECT_TRUE(db()->ListChildren(0, &children)); |
- EXPECT_EQ(2UL, children.size()); |
- if (children[0] == file_id0) { |
- EXPECT_EQ(children[1], file_id1); |
- } else { |
- EXPECT_EQ(children[1], file_id0); |
- EXPECT_EQ(children[0], file_id1); |
- } |
- |
- // No children in a subdirectory. |
- EXPECT_TRUE(db()->ListChildren(file_id0, &children)); |
- EXPECT_TRUE(children.empty()); |
- |
- // One child in a subdirectory. |
- info.parent_id = file_id0; |
- info.name = FILE_PATH_LITERAL("foo"); |
- FileId file_id2; |
- FileId file_id3; |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id2)); |
- EXPECT_TRUE(db()->ListChildren(file_id0, &children)); |
- EXPECT_EQ(1UL, children.size()); |
- EXPECT_EQ(children[0], file_id2); |
- |
- // Two children in a subdirectory. |
- info.name = FILE_PATH_LITERAL("bar"); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info, &file_id3)); |
- EXPECT_TRUE(db()->ListChildren(file_id0, &children)); |
- EXPECT_EQ(2UL, children.size()); |
- if (children[0] == file_id2) { |
- EXPECT_EQ(children[1], file_id3); |
- } else { |
- EXPECT_EQ(children[1], file_id2); |
- EXPECT_EQ(children[0], file_id3); |
- } |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestUpdateModificationTime) { |
- FileInfo info0; |
- FileId file_id; |
- info0.parent_id = 0; |
- info0.name = FILE_PATH_LITERAL("name"); |
- info0.data_path = base::FilePath(FILE_PATH_LITERAL("fake path")); |
- info0.modification_time = base::Time::Now(); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info0, &file_id)); |
- FileInfo info1; |
- EXPECT_TRUE(db()->GetFileInfo(file_id, &info1)); |
- EXPECT_EQ(info0.name, info1.name); |
- EXPECT_EQ(info0.parent_id, info1.parent_id); |
- EXPECT_EQ(info0.data_path, info1.data_path); |
- EXPECT_EQ( |
- floor(info0.modification_time.ToDoubleT()), |
- info1.modification_time.ToDoubleT()); |
- |
- EXPECT_TRUE(db()->UpdateModificationTime(file_id, base::Time::UnixEpoch())); |
- EXPECT_TRUE(db()->GetFileInfo(file_id, &info1)); |
- EXPECT_EQ(info0.name, info1.name); |
- EXPECT_EQ(info0.parent_id, info1.parent_id); |
- EXPECT_EQ(info0.data_path, info1.data_path); |
- EXPECT_NE(info0.modification_time, info1.modification_time); |
- EXPECT_EQ( |
- info1.modification_time.ToDoubleT(), |
- floor(base::Time::UnixEpoch().ToDoubleT())); |
- |
- EXPECT_FALSE(db()->UpdateModificationTime(999, base::Time::UnixEpoch())); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestSimpleFileOperations) { |
- FileId file_id = 888; |
- FileInfo info0; |
- EXPECT_FALSE(db()->GetFileInfo(file_id, &info0)); |
- info0.parent_id = 0; |
- info0.data_path = base::FilePath(FILE_PATH_LITERAL("foo")); |
- info0.name = FILE_PATH_LITERAL("file name"); |
- info0.modification_time = base::Time::Now(); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info0, &file_id)); |
- FileInfo info1; |
- EXPECT_TRUE(db()->GetFileInfo(file_id, &info1)); |
- EXPECT_EQ(info0.parent_id, info1.parent_id); |
- EXPECT_EQ(info0.data_path, info1.data_path); |
- EXPECT_EQ(info0.name, info1.name); |
- EXPECT_EQ( |
- floor(info0.modification_time.ToDoubleT()), |
- info1.modification_time.ToDoubleT()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestOverwritingMoveFileSrcDirectory) { |
- FileId directory_id; |
- FileInfo info0; |
- info0.parent_id = 0; |
- info0.name = FILE_PATH_LITERAL("directory"); |
- info0.modification_time = base::Time::Now(); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info0, &directory_id)); |
- |
- FileId file_id; |
- FileInfo info1; |
- info1.parent_id = 0; |
- info1.data_path = base::FilePath(FILE_PATH_LITERAL("bar")); |
- info1.name = FILE_PATH_LITERAL("file"); |
- info1.modification_time = base::Time::UnixEpoch(); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info1, &file_id)); |
- |
- EXPECT_FALSE(db()->OverwritingMoveFile(directory_id, file_id)); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestOverwritingMoveFileDestDirectory) { |
- FileId file_id; |
- FileInfo info0; |
- info0.parent_id = 0; |
- info0.name = FILE_PATH_LITERAL("file"); |
- info0.data_path = base::FilePath(FILE_PATH_LITERAL("bar")); |
- info0.modification_time = base::Time::Now(); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info0, &file_id)); |
- |
- FileId directory_id; |
- FileInfo info1; |
- info1.parent_id = 0; |
- info1.name = FILE_PATH_LITERAL("directory"); |
- info1.modification_time = base::Time::UnixEpoch(); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info1, &directory_id)); |
- |
- EXPECT_FALSE(db()->OverwritingMoveFile(file_id, directory_id)); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestOverwritingMoveFileSuccess) { |
- FileId file_id0; |
- FileInfo info0; |
- info0.parent_id = 0; |
- info0.data_path = base::FilePath(FILE_PATH_LITERAL("foo")); |
- info0.name = FILE_PATH_LITERAL("file name 0"); |
- info0.modification_time = base::Time::Now(); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info0, &file_id0)); |
- |
- FileInfo dir_info; |
- FileId dir_id; |
- dir_info.parent_id = 0; |
- dir_info.name = FILE_PATH_LITERAL("directory name"); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(dir_info, &dir_id)); |
- |
- FileId file_id1; |
- FileInfo info1; |
- info1.parent_id = dir_id; |
- info1.data_path = base::FilePath(FILE_PATH_LITERAL("bar")); |
- info1.name = FILE_PATH_LITERAL("file name 1"); |
- info1.modification_time = base::Time::UnixEpoch(); |
- EXPECT_EQ(base::File::FILE_OK, db()->AddFileInfo(info1, &file_id1)); |
- |
- EXPECT_TRUE(db()->OverwritingMoveFile(file_id0, file_id1)); |
- |
- FileInfo check_info; |
- FileId check_id; |
- |
- EXPECT_FALSE(db()->GetFileWithPath(base::FilePath(info0.name), &check_id)); |
- EXPECT_TRUE(db()->GetFileWithPath( |
- base::FilePath(dir_info.name).Append(info1.name), &check_id)); |
- EXPECT_TRUE(db()->GetFileInfo(check_id, &check_info)); |
- |
- EXPECT_EQ(info0.data_path, check_info.data_path); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestGetNextInteger) { |
- int64 next = -1; |
- EXPECT_TRUE(db()->GetNextInteger(&next)); |
- EXPECT_EQ(0, next); |
- EXPECT_TRUE(db()->GetNextInteger(&next)); |
- EXPECT_EQ(1, next); |
- InitDatabase(); |
- EXPECT_TRUE(db()->GetNextInteger(&next)); |
- EXPECT_EQ(2, next); |
- EXPECT_TRUE(db()->GetNextInteger(&next)); |
- EXPECT_EQ(3, next); |
- InitDatabase(); |
- EXPECT_TRUE(db()->GetNextInteger(&next)); |
- EXPECT_EQ(4, next); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_Empty) { |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
- |
- int64 next = -1; |
- EXPECT_TRUE(db()->GetNextInteger(&next)); |
- EXPECT_EQ(0, next); |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_Consistent) { |
- FileId dir_id; |
- CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
- CreateDirectory(0, FPL("bar"), &dir_id); |
- CreateFile(dir_id, FPL("baz"), FPL("fuga"), NULL); |
- CreateFile(dir_id, FPL("fizz"), FPL("buzz"), NULL); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, |
- TestConsistencyCheck_BackingMultiEntry) { |
- const base::FilePath::CharType kBackingFileName[] = FPL("the celeb"); |
- CreateFile(0, FPL("foo"), kBackingFileName, NULL); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
- ASSERT_TRUE(base::DeleteFile(path().Append(kBackingFileName), false)); |
- CreateFile(0, FPL("bar"), kBackingFileName, NULL); |
- EXPECT_FALSE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_FileLost) { |
- const base::FilePath::CharType kBackingFileName[] = FPL("hoge"); |
- CreateFile(0, FPL("foo"), kBackingFileName, NULL); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
- ASSERT_TRUE(base::DeleteFile(path().Append(kBackingFileName), false)); |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_OrphanFile) { |
- CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
- |
- base::File file(path().Append(FPL("Orphan File")), |
- base::File::FLAG_CREATE | base::File::FLAG_WRITE); |
- ASSERT_TRUE(file.IsValid()); |
- ASSERT_TRUE(file.created()); |
- file.Close(); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_RootLoop) { |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
- MakeHierarchyLink(0, 0, base::FilePath::StringType()); |
- EXPECT_FALSE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_DirectoryLoop) { |
- FileId dir1_id; |
- FileId dir2_id; |
- base::FilePath::StringType dir1_name = FPL("foo"); |
- CreateDirectory(0, dir1_name, &dir1_id); |
- CreateDirectory(dir1_id, FPL("bar"), &dir2_id); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
- MakeHierarchyLink(dir2_id, dir1_id, dir1_name); |
- EXPECT_FALSE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_NameMismatch) { |
- FileId dir_id; |
- FileId file_id; |
- CreateDirectory(0, FPL("foo"), &dir_id); |
- CreateFile(dir_id, FPL("bar"), FPL("hoge/fuga/piyo"), &file_id); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
- DeleteHierarchyLink(file_id); |
- MakeHierarchyLink(dir_id, file_id, FPL("baz")); |
- EXPECT_FALSE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestConsistencyCheck_WreckedEntries) { |
- FileId dir1_id; |
- FileId dir2_id; |
- CreateDirectory(0, FPL("foo"), &dir1_id); |
- CreateDirectory(dir1_id, FPL("bar"), &dir2_id); |
- CreateFile(dir2_id, FPL("baz"), FPL("fizz/buzz"), NULL); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
- DeleteHierarchyLink(dir2_id); // Delete link from |dir1_id| to |dir2_id|. |
- EXPECT_FALSE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestRepairDatabase_Success) { |
- base::FilePath::StringType kFileName = FPL("bar"); |
- |
- FileId file_id_prev; |
- CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
- CreateFile(0, kFileName, FPL("fuga"), &file_id_prev); |
- |
- const base::FilePath kDatabaseDirectory = |
- path().Append(kDirectoryDatabaseName); |
- CloseDatabase(); |
- CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, |
- 0, std::numeric_limits<size_t>::max()); |
- InitDatabase(); |
- EXPECT_FALSE(db()->IsFileSystemConsistent()); |
- |
- FileId file_id; |
- EXPECT_TRUE(db()->GetChildWithName(0, kFileName, &file_id)); |
- EXPECT_EQ(file_id_prev, file_id); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestRepairDatabase_Failure) { |
- base::FilePath::StringType kFileName = FPL("bar"); |
- |
- CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
- CreateFile(0, kFileName, FPL("fuga"), NULL); |
- |
- const base::FilePath kDatabaseDirectory = |
- path().Append(kDirectoryDatabaseName); |
- CloseDatabase(); |
- CorruptDatabase(kDatabaseDirectory, leveldb::kDescriptorFile, |
- 0, std::numeric_limits<size_t>::max()); |
- CorruptDatabase(kDatabaseDirectory, leveldb::kLogFile, |
- -1, 1); |
- InitDatabase(); |
- EXPECT_FALSE(db()->IsFileSystemConsistent()); |
- |
- FileId file_id; |
- EXPECT_FALSE(db()->GetChildWithName(0, kFileName, &file_id)); |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
-} |
- |
-TEST_F(SandboxDirectoryDatabaseTest, TestRepairDatabase_MissingManifest) { |
- base::FilePath::StringType kFileName = FPL("bar"); |
- |
- FileId file_id_prev; |
- CreateFile(0, FPL("foo"), FPL("hoge"), NULL); |
- CreateFile(0, kFileName, FPL("fuga"), &file_id_prev); |
- |
- const base::FilePath kDatabaseDirectory = |
- path().Append(kDirectoryDatabaseName); |
- CloseDatabase(); |
- |
- DeleteDatabaseFile(kDatabaseDirectory, leveldb::kDescriptorFile); |
- |
- InitDatabase(); |
- EXPECT_FALSE(db()->IsFileSystemConsistent()); |
- |
- FileId file_id; |
- EXPECT_TRUE(db()->GetChildWithName(0, kFileName, &file_id)); |
- EXPECT_EQ(file_id_prev, file_id); |
- |
- EXPECT_TRUE(db()->IsFileSystemConsistent()); |
-} |
- |
-} // namespace fileapi |