summaryrefslogtreecommitdiffstats
path: root/chromium/webkit/browser/fileapi/sandbox_directory_database_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/webkit/browser/fileapi/sandbox_directory_database_unittest.cc')
-rw-r--r--chromium/webkit/browser/fileapi/sandbox_directory_database_unittest.cc681
1 files changed, 0 insertions, 681 deletions
diff --git a/chromium/webkit/browser/fileapi/sandbox_directory_database_unittest.cc b/chromium/webkit/browser/fileapi/sandbox_directory_database_unittest.cc
deleted file mode 100644
index b43dc23ee74..00000000000
--- a/chromium/webkit/browser/fileapi/sandbox_directory_database_unittest.cc
+++ /dev/null
@@ -1,681 +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/scoped_temp_dir.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/platform_file.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()));
- }
-
- void CloseDatabase() {
- db_.reset();
- }
-
- base::PlatformFileError 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::PLATFORM_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::PLATFORM_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()));
-
- bool created = false;
- base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED;
- base::PlatformFile file = base::CreatePlatformFile(
- local_path,
- base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE,
- &created, &error);
- ASSERT_EQ(base::PLATFORM_FILE_OK, error);
- ASSERT_TRUE(created);
- ASSERT_TRUE(base::ClosePlatformFile(file));
-
- 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()));
- }
-
- 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::PLATFORM_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::PLATFORM_FILE_OK, db()->AddFileInfo(info, &file_id));
-
- // Check for name clash in the root directory.
- base::FilePath::StringType name = info.name;
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, AddFileInfo(0, name));
- name = FILE_PATH_LITERAL("dir 1");
- EXPECT_EQ(base::PLATFORM_FILE_OK, AddFileInfo(0, name));
-
- name = FILE_PATH_LITERAL("subdir 0");
- EXPECT_EQ(base::PLATFORM_FILE_OK, AddFileInfo(file_id, name));
-
- // Check for name clash in a subdirectory.
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, AddFileInfo(file_id, name));
- name = FILE_PATH_LITERAL("subdir 1");
- EXPECT_EQ(base::PLATFORM_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::PLATFORM_FILE_OK, db()->AddFileInfo(info, &file_id0));
- EXPECT_EQ(base::PLATFORM_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::PLATFORM_FILE_OK, db()->AddFileInfo(info, &file_id0));
- info.parent_id = file_id0;
- EXPECT_EQ(base::PLATFORM_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::PLATFORM_FILE_OK, db()->AddFileInfo(info, &file_id0));
- info.parent_id = file_id0;
- info.name = name1;
- EXPECT_EQ(base::PLATFORM_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::PLATFORM_FILE_OK, db()->AddFileInfo(info, &file_id0));
- info.parent_id = file_id0;
- EXPECT_EQ(base::PLATFORM_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::PLATFORM_FILE_OK, db()->AddFileInfo(info, &file_id0));
- info.parent_id = file_id0;
- info.name = name1;
- EXPECT_EQ(base::PLATFORM_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::PLATFORM_FILE_OK, db()->AddFileInfo(info, &file_id0));
- info.parent_id = file_id0;
- info.name = name1;
- EXPECT_EQ(base::PLATFORM_FILE_OK, db()->AddFileInfo(info, &file_id1));
- EXPECT_NE(file_id0, file_id1);
- info.parent_id = file_id1;
- info.name = name2;
- EXPECT_EQ(base::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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::PLATFORM_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());
-
- bool created = false;
- base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED;
- base::PlatformFile file = base::CreatePlatformFile(
- path().Append(FPL("Orphan File")),
- base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE,
- &created, &error);
- ASSERT_EQ(base::PLATFORM_FILE_OK, error);
- ASSERT_TRUE(created);
- ASSERT_TRUE(base::ClosePlatformFile(file));
-
- 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