blob: c34e636a6a3160dee82561be6c43cf3c583d1652 [file] [log] [blame]
// Copyright (c) 2011 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 "testing/gtest/include/gtest/gtest.h"
#include <string>
#include "base/file_util.h"
#include "base/scoped_temp_dir.h"
#include "webkit/fileapi/file_system_origin_database.h"
namespace fileapi {
TEST(FileSystemOriginDatabaseTest, BasicTest) {
ScopedTempDir dir;
ASSERT_TRUE(dir.CreateUniqueTempDir());
const FilePath kDBFile = dir.path().AppendASCII("fsod.db");
EXPECT_FALSE(file_util::PathExists(kDBFile));
FileSystemOriginDatabase database(kDBFile);
std::string origin("origin");
EXPECT_FALSE(database.HasOriginPath(origin));
// Double-check to make sure that had no side effects.
EXPECT_FALSE(database.HasOriginPath(origin));
FilePath path0;
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(file_util::PathExists(kDBFile));
}
TEST(FileSystemOriginDatabaseTest, TwoPathTest) {
ScopedTempDir dir;
ASSERT_TRUE(dir.CreateUniqueTempDir());
const FilePath kDBFile = dir.path().AppendASCII("fsod.db");
EXPECT_FALSE(file_util::PathExists(kDBFile));
FileSystemOriginDatabase database(kDBFile);
std::string origin0("origin0");
std::string origin1("origin1");
EXPECT_FALSE(database.HasOriginPath(origin0));
EXPECT_FALSE(database.HasOriginPath(origin1));
FilePath path0;
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(file_util::PathExists(kDBFile));
}
TEST(FileSystemOriginDatabaseTest, DropDatabaseTest) {
ScopedTempDir dir;
ASSERT_TRUE(dir.CreateUniqueTempDir());
const FilePath kDBFile = dir.path().AppendASCII("fsod.db");
EXPECT_FALSE(file_util::PathExists(kDBFile));
FileSystemOriginDatabase database(kDBFile);
std::string origin("origin");
EXPECT_FALSE(database.HasOriginPath(origin));
FilePath path0;
EXPECT_TRUE(database.GetPathForOrigin(origin, &path0));
EXPECT_TRUE(database.HasOriginPath(origin));
EXPECT_FALSE(path0.empty());
EXPECT_TRUE(file_util::PathExists(kDBFile));
database.DropDatabase();
FilePath path1;
EXPECT_TRUE(database.HasOriginPath(origin));
EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
EXPECT_FALSE(path1.empty());
EXPECT_EQ(path0, path1);
}
TEST(FileSystemOriginDatabaseTest, DeleteOriginTest) {
ScopedTempDir dir;
ASSERT_TRUE(dir.CreateUniqueTempDir());
const FilePath kDBFile = dir.path().AppendASCII("fsod.db");
EXPECT_FALSE(file_util::PathExists(kDBFile));
FileSystemOriginDatabase database(kDBFile);
std::string origin("origin");
EXPECT_FALSE(database.HasOriginPath(origin));
EXPECT_TRUE(database.RemovePathForOrigin(origin));
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));
FilePath path1;
EXPECT_TRUE(database.GetPathForOrigin(origin, &path1));
EXPECT_FALSE(path1.empty());
EXPECT_NE(path0, path1);
}
TEST(FileSystemOriginDatabaseTest, ListOriginsTest) {
ScopedTempDir dir;
ASSERT_TRUE(dir.CreateUniqueTempDir());
const FilePath kDBFile = dir.path().AppendASCII("fsod.db");
EXPECT_FALSE(file_util::PathExists(kDBFile));
std::vector<FileSystemOriginDatabase::OriginRecord> origins;
FileSystemOriginDatabase database(kDBFile);
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));
FilePath path0;
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);
}
}
} // namespace fileapi