| Index: content/browser/fileapi/sandbox_origin_database_unittest.cc
|
| diff --git a/content/browser/fileapi/sandbox_origin_database_unittest.cc b/content/browser/fileapi/sandbox_origin_database_unittest.cc
|
| deleted file mode 100644
|
| index 8c92e4f7430946aba5aa81a4d246ad0c5a1b01e1..0000000000000000000000000000000000000000
|
| --- a/content/browser/fileapi/sandbox_origin_database_unittest.cc
|
| +++ /dev/null
|
| @@ -1,309 +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 <stddef.h>
|
| -
|
| -#include <algorithm>
|
| -#include <functional>
|
| -#include <limits>
|
| -#include <memory>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/files/file.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/files/file_util.h"
|
| -#include "base/files/scoped_temp_dir.h"
|
| -#include "base/macros.h"
|
| -#include "base/stl_util.h"
|
| -#include "content/browser/fileapi/sandbox_database_test_helper.h"
|
| -#include "storage/browser/fileapi/sandbox_origin_database.h"
|
| -#include "storage/common/fileapi/file_system_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "third_party/leveldatabase/src/db/filename.h"
|
| -#include "third_party/leveldatabase/src/include/leveldb/db.h"
|
| -
|
| -using storage::SandboxOriginDatabase;
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -const base::FilePath::CharType kFileSystemDirName[] =
|
| - FILE_PATH_LITERAL("File System");
|
| -const base::FilePath::CharType kOriginDatabaseName[] =
|
| - FILE_PATH_LITERAL("Origins");
|
| -} // namespace
|
| -
|
| -TEST(SandboxOriginDatabaseTest, BasicTest) {
|
| - base::ScopedTempDir dir;
|
| - ASSERT_TRUE(dir.CreateUniqueTempDir());
|
| - const base::FilePath kFSDir = dir.GetPath().Append(kFileSystemDirName);
|
| - EXPECT_FALSE(base::PathExists(kFSDir));
|
| - EXPECT_TRUE(base::CreateDirectory(kFSDir));
|
| -
|
| - SandboxOriginDatabase database(kFSDir, NULL);
|
| - std::string origin("origin");
|
| -
|
| - EXPECT_FALSE(database.HasOriginPath(origin));
|
| - // Double-check to make sure that had no side effects.
|
| - EXPECT_FALSE(database.HasOriginPath(origin));
|
| -
|
| - base::FilePath path0;
|
| - base::FilePath path1;
|
| -
|
| - // Empty strings aren't valid origins.
|
| - EXPECT_FALSE(database.GetPathForOrigin(std::string(), &path0));
|
| -
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
|
| - EXPECT_TRUE(database.HasOriginPath(origin));
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
|
| - EXPECT_FALSE(path0.empty());
|
| - EXPECT_FALSE(path1.empty());
|
| - EXPECT_EQ(path0, path1);
|
| -
|
| - EXPECT_TRUE(base::PathExists(kFSDir.Append(kOriginDatabaseName)));
|
| -}
|
| -
|
| -TEST(SandboxOriginDatabaseTest, TwoPathTest) {
|
| - base::ScopedTempDir dir;
|
| - ASSERT_TRUE(dir.CreateUniqueTempDir());
|
| - const base::FilePath kFSDir = dir.GetPath().Append(kFileSystemDirName);
|
| - EXPECT_FALSE(base::PathExists(kFSDir));
|
| - EXPECT_TRUE(base::CreateDirectory(kFSDir));
|
| -
|
| - SandboxOriginDatabase database(kFSDir, NULL);
|
| - std::string origin0("origin0");
|
| - std::string origin1("origin1");
|
| -
|
| - EXPECT_FALSE(database.HasOriginPath(origin0));
|
| - EXPECT_FALSE(database.HasOriginPath(origin1));
|
| -
|
| - base::FilePath path0;
|
| - base::FilePath path1;
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0));
|
| - EXPECT_TRUE(database.HasOriginPath(origin0));
|
| - EXPECT_FALSE(database.HasOriginPath(origin1));
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1));
|
| - EXPECT_TRUE(database.HasOriginPath(origin1));
|
| - EXPECT_FALSE(path0.empty());
|
| - EXPECT_FALSE(path1.empty());
|
| - EXPECT_NE(path0, path1);
|
| -
|
| - EXPECT_TRUE(base::PathExists(kFSDir.Append(kOriginDatabaseName)));
|
| -}
|
| -
|
| -TEST(SandboxOriginDatabaseTest, DropDatabaseTest) {
|
| - base::ScopedTempDir dir;
|
| - ASSERT_TRUE(dir.CreateUniqueTempDir());
|
| - const base::FilePath kFSDir = dir.GetPath().Append(kFileSystemDirName);
|
| - EXPECT_FALSE(base::PathExists(kFSDir));
|
| - EXPECT_TRUE(base::CreateDirectory(kFSDir));
|
| -
|
| - SandboxOriginDatabase database(kFSDir, NULL);
|
| - std::string origin("origin");
|
| -
|
| - EXPECT_FALSE(database.HasOriginPath(origin));
|
| -
|
| - base::FilePath path0;
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
|
| - EXPECT_TRUE(database.HasOriginPath(origin));
|
| - EXPECT_FALSE(path0.empty());
|
| -
|
| - EXPECT_TRUE(base::PathExists(kFSDir.Append(kOriginDatabaseName)));
|
| -
|
| - database.DropDatabase();
|
| -
|
| - base::FilePath path1;
|
| - EXPECT_TRUE(database.HasOriginPath(origin));
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
|
| - EXPECT_FALSE(path1.empty());
|
| - EXPECT_EQ(path0, path1);
|
| -}
|
| -
|
| -TEST(SandboxOriginDatabaseTest, DeleteOriginTest) {
|
| - base::ScopedTempDir dir;
|
| - ASSERT_TRUE(dir.CreateUniqueTempDir());
|
| - const base::FilePath kFSDir = dir.GetPath().Append(kFileSystemDirName);
|
| - EXPECT_FALSE(base::PathExists(kFSDir));
|
| - EXPECT_TRUE(base::CreateDirectory(kFSDir));
|
| -
|
| - SandboxOriginDatabase database(kFSDir, NULL);
|
| - std::string origin("origin");
|
| -
|
| - EXPECT_FALSE(database.HasOriginPath(origin));
|
| - EXPECT_TRUE(database.RemovePathForOrigin(origin));
|
| -
|
| - base::FilePath path0;
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
|
| - EXPECT_TRUE(database.HasOriginPath(origin));
|
| - EXPECT_FALSE(path0.empty());
|
| -
|
| - EXPECT_TRUE(database.RemovePathForOrigin(origin));
|
| - EXPECT_FALSE(database.HasOriginPath(origin));
|
| -
|
| - base::FilePath path1;
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
|
| - EXPECT_FALSE(path1.empty());
|
| - EXPECT_NE(path0, path1);
|
| -}
|
| -
|
| -TEST(SandboxOriginDatabaseTest, ListOriginsTest) {
|
| - base::ScopedTempDir dir;
|
| - ASSERT_TRUE(dir.CreateUniqueTempDir());
|
| - const base::FilePath kFSDir = dir.GetPath().Append(kFileSystemDirName);
|
| - EXPECT_FALSE(base::PathExists(kFSDir));
|
| - EXPECT_TRUE(base::CreateDirectory(kFSDir));
|
| -
|
| - std::vector<SandboxOriginDatabase::OriginRecord> origins;
|
| -
|
| - SandboxOriginDatabase database(kFSDir, NULL);
|
| - EXPECT_TRUE(database.ListAllOrigins(&origins));
|
| - EXPECT_TRUE(origins.empty());
|
| - origins.clear();
|
| -
|
| - std::string origin0("origin0");
|
| - std::string origin1("origin1");
|
| -
|
| - EXPECT_FALSE(database.HasOriginPath(origin0));
|
| - EXPECT_FALSE(database.HasOriginPath(origin1));
|
| -
|
| - base::FilePath path0;
|
| - base::FilePath path1;
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin0, &path0));
|
| - EXPECT_TRUE(database.ListAllOrigins(&origins));
|
| - EXPECT_EQ(origins.size(), 1UL);
|
| - EXPECT_EQ(origins[0].origin, origin0);
|
| - EXPECT_EQ(origins[0].path, path0);
|
| - origins.clear();
|
| - EXPECT_TRUE(database.GetPathForOrigin(origin1, &path1));
|
| - EXPECT_TRUE(database.ListAllOrigins(&origins));
|
| - EXPECT_EQ(origins.size(), 2UL);
|
| - if (origins[0].origin == origin0) {
|
| - EXPECT_EQ(origins[0].path, path0);
|
| - EXPECT_EQ(origins[1].origin, origin1);
|
| - EXPECT_EQ(origins[1].path, path1);
|
| - } else {
|
| - EXPECT_EQ(origins[0].origin, origin1);
|
| - EXPECT_EQ(origins[0].path, path1);
|
| - EXPECT_EQ(origins[1].origin, origin0);
|
| - EXPECT_EQ(origins[1].path, path0);
|
| - }
|
| -}
|
| -
|
| -TEST(SandboxOriginDatabaseTest, DatabaseRecoveryTest) {
|
| - // Checks if SandboxOriginDatabase properly handles database corruption.
|
| - // In this test, we'll register some origins to the origin database, then
|
| - // corrupt database and its log file.
|
| - // After repairing, the origin database should be consistent even when some
|
| - // entries lost.
|
| -
|
| - base::ScopedTempDir dir;
|
| - ASSERT_TRUE(dir.CreateUniqueTempDir());
|
| - const base::FilePath kFSDir = dir.GetPath().Append(kFileSystemDirName);
|
| - const base::FilePath kDBDir = kFSDir.Append(kOriginDatabaseName);
|
| - EXPECT_FALSE(base::PathExists(kFSDir));
|
| - EXPECT_TRUE(base::CreateDirectory(kFSDir));
|
| -
|
| - const std::string kOrigins[] = {
|
| - "foo.example.com",
|
| - "bar.example.com",
|
| - "baz.example.com",
|
| - "hoge.example.com",
|
| - "fuga.example.com",
|
| - };
|
| -
|
| - std::unique_ptr<SandboxOriginDatabase> database(
|
| - new SandboxOriginDatabase(kFSDir, NULL));
|
| - for (size_t i = 0; i < arraysize(kOrigins); ++i) {
|
| - base::FilePath path;
|
| - EXPECT_FALSE(database->HasOriginPath(kOrigins[i]));
|
| - EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path));
|
| - EXPECT_FALSE(path.empty());
|
| - EXPECT_TRUE(database->GetPathForOrigin(kOrigins[i], &path));
|
| -
|
| - if (i != 1)
|
| - EXPECT_TRUE(base::CreateDirectory(kFSDir.Append(path)));
|
| - }
|
| - database.reset();
|
| -
|
| - const base::FilePath kGarbageDir = kFSDir.AppendASCII("foo");
|
| - const base::FilePath kGarbageFile = kGarbageDir.AppendASCII("bar");
|
| - EXPECT_TRUE(base::CreateDirectory(kGarbageDir));
|
| - base::File file(kGarbageFile,
|
| - base::File::FLAG_CREATE | base::File::FLAG_WRITE);
|
| - EXPECT_TRUE(file.IsValid());
|
| - file.Close();
|
| -
|
| - // Corrupt database itself and last log entry to drop last 1 database
|
| - // operation. The database should detect the corruption and should recover
|
| - // its consistency after recovery.
|
| - CorruptDatabase(kDBDir, leveldb::kDescriptorFile,
|
| - 0, std::numeric_limits<size_t>::max());
|
| - CorruptDatabase(kDBDir, leveldb::kLogFile, -1, 1);
|
| -
|
| - base::FilePath path;
|
| - database.reset(new SandboxOriginDatabase(kFSDir, NULL));
|
| - std::vector<SandboxOriginDatabase::OriginRecord> origins_in_db;
|
| - EXPECT_TRUE(database->ListAllOrigins(&origins_in_db));
|
| -
|
| - // Expect all but last added origin will be repaired back, and kOrigins[1]
|
| - // should be dropped due to absence of backing directory.
|
| - EXPECT_EQ(arraysize(kOrigins) - 2, origins_in_db.size());
|
| -
|
| - const std::string kOrigin("piyo.example.org");
|
| - EXPECT_FALSE(database->HasOriginPath(kOrigin));
|
| - EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path));
|
| - EXPECT_FALSE(path.empty());
|
| - EXPECT_TRUE(database->HasOriginPath(kOrigin));
|
| -
|
| - EXPECT_FALSE(base::PathExists(kGarbageFile));
|
| - EXPECT_FALSE(base::PathExists(kGarbageDir));
|
| -}
|
| -
|
| -TEST(SandboxOriginDatabaseTest, DatabaseRecoveryForMissingDBFileTest) {
|
| - const leveldb::FileType kLevelDBFileTypes[] = {
|
| - leveldb::kLogFile,
|
| - leveldb::kDBLockFile,
|
| - leveldb::kTableFile,
|
| - leveldb::kDescriptorFile,
|
| - leveldb::kCurrentFile,
|
| - leveldb::kTempFile,
|
| - leveldb::kInfoLogFile,
|
| - };
|
| -
|
| - for (size_t i = 0; i < arraysize(kLevelDBFileTypes); ++i) {
|
| - base::ScopedTempDir dir;
|
| - ASSERT_TRUE(dir.CreateUniqueTempDir());
|
| - const base::FilePath kFSDir = dir.GetPath().Append(kFileSystemDirName);
|
| - const base::FilePath kDBDir = kFSDir.Append(kOriginDatabaseName);
|
| - EXPECT_FALSE(base::PathExists(kFSDir));
|
| - EXPECT_TRUE(base::CreateDirectory(kFSDir));
|
| -
|
| - const std::string kOrigin = "foo.example.com";
|
| - base::FilePath path;
|
| -
|
| - std::unique_ptr<SandboxOriginDatabase> database(
|
| - new SandboxOriginDatabase(kFSDir, NULL));
|
| - EXPECT_FALSE(database->HasOriginPath(kOrigin));
|
| - EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path));
|
| - EXPECT_FALSE(path.empty());
|
| - EXPECT_TRUE(database->GetPathForOrigin(kOrigin, &path));
|
| - EXPECT_TRUE(base::CreateDirectory(kFSDir.Append(path)));
|
| - database.reset();
|
| -
|
| - DeleteDatabaseFile(kDBDir, kLevelDBFileTypes[i]);
|
| -
|
| - database.reset(new SandboxOriginDatabase(kFSDir, NULL));
|
| - std::vector<SandboxOriginDatabase::OriginRecord> origins_in_db;
|
| - EXPECT_TRUE(database->ListAllOrigins(&origins_in_db));
|
| -
|
| - const std::string kOrigin2("piyo.example.org");
|
| - EXPECT_FALSE(database->HasOriginPath(kOrigin2));
|
| - EXPECT_TRUE(database->GetPathForOrigin(kOrigin2, &path));
|
| - EXPECT_FALSE(path.empty());
|
| - EXPECT_TRUE(database->HasOriginPath(kOrigin2));
|
| - }
|
| -}
|
| -
|
| -} // namespace content
|
|
|