| Index: content/browser/fileapi/sandbox_directory_database_unittest.cc
|
| diff --git a/content/browser/fileapi/sandbox_directory_database_unittest.cc b/content/browser/fileapi/sandbox_directory_database_unittest.cc
|
| deleted file mode 100644
|
| index 77525f2846315f574e417375751edf89cd50809b..0000000000000000000000000000000000000000
|
| --- a/content/browser/fileapi/sandbox_directory_database_unittest.cc
|
| +++ /dev/null
|
| @@ -1,677 +0,0 @@
|
| -// Copyright 2014 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 "storage/browser/fileapi/sandbox_directory_database.h"
|
| -
|
| -#include <math.h>
|
| -#include <stddef.h>
|
| -#include <stdint.h>
|
| -
|
| -#include <limits>
|
| -#include <memory>
|
| -
|
| -#include "base/files/file.h"
|
| -#include "base/files/file_util.h"
|
| -#include "base/files/scoped_temp_dir.h"
|
| -#include "base/macros.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "content/browser/fileapi/sandbox_database_test_helper.h"
|
| -#include "storage/common/fileapi/file_system_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "third_party/leveldatabase/src/include/leveldb/db.h"
|
| -
|
| -#define FPL(x) FILE_PATH_LITERAL(x)
|
| -
|
| -using storage::FilePathToString;
|
| -using storage::SandboxDirectoryDatabase;
|
| -
|
| -namespace content {
|
| -
|
| -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_.GetPath(); }
|
| -
|
| - // 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_;
|
| - std::unique_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_t 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_t 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 content
|
|
|