Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(414)

Unified Diff: chrome/browser/chromeos/gdata/gdata_db_unittest.cc

Issue 10168025: GDataDB support with leveldb. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: final nits Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/gdata/gdata_db_unittest.cc
===================================================================
--- chrome/browser/chromeos/gdata/gdata_db_unittest.cc (revision 0)
+++ chrome/browser/chromeos/gdata/gdata_db_unittest.cc (revision 0)
@@ -0,0 +1,266 @@
+// 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 "chrome/browser/chromeos/gdata/gdata_db.h"
+
+#include "base/string_number_conversions.h"
+#include "chrome/browser/chromeos/gdata/gdata_db_factory.h"
+#include "chrome/browser/chromeos/gdata/gdata_files.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "chrome/test/base/testing_profile.h"
+
+namespace gdata {
+namespace {
+
+class GDataDBTest : public testing::Test {
+ public:
+ GDataDBTest() {
+ }
+
+ virtual ~GDataDBTest() {
+ }
+
+ protected:
+ // testing::Test implementation.
+ virtual void SetUp() OVERRIDE;
+
+ // Tests GDataDB::GetPath and GDataDB::ResourceId, ensuring that an entry
+ // matching |source| does not exist.
+ void TestGetNotFound(const GDataEntry& source);
+
+ // Tests GDataDB::GetPath and GDataDB::ResourceId, ensuring that an entry
+ // matching |source| exists.
+ void TestGetFound(const GDataEntry& source);
+
+ // Initialize the database with the following entries:
+ // dir1
+ // dir2
+ // dir1/dir3
+ // dir1/file4
+ // dir1/file5
+ // dir2/file6
+ // dir2/file7
+ // dir2/file8
+ // dir1/dir3/file9
+ // dir1/dir3/file10
+ void InitDB();
+
+ // Helper functions to add a directory/file, incrementing index.
+ GDataDirectory* AddDirectory(GDataDirectory* parent, int sequence_id);
+ GDataFile* AddFile(GDataDirectory* parent, int sequence_id);
+
+ // Tests GDataDB::NewIterator and GDataDBIter::GetNext.
+ // Creates an iterator with start at |parent|, and iterates comparing with
+ // expected |filenames|.
+ void TestIter(const std::string& parent,
+ const char* file_paths[],
+ size_t file_paths_size);
+
+ scoped_ptr<TestingProfile> profile_;
+ scoped_ptr<GDataDB> gdata_db_;
+ GDataRootDirectory root_;
+};
+
+void GDataDBTest::SetUp() {
+ profile_.reset(new TestingProfile());
+ gdata_db_ = db_factory::CreateGDataDB(
+ profile_->GetPath().Append("testdb"));
+}
+
+void GDataDBTest::TestGetNotFound(const GDataEntry& source) {
+ scoped_ptr<GDataEntry> entry;
+ GDataDB::Status status = gdata_db_->GetByPath(source.GetFilePath(), &entry);
+ EXPECT_EQ(GDataDB::DB_KEY_NOT_FOUND, status);
+ EXPECT_FALSE(entry.get());
+
+ status = gdata_db_->GetByResourceId(source.resource_id(), &entry);
+ EXPECT_EQ(GDataDB::DB_KEY_NOT_FOUND, status);
+ EXPECT_FALSE(entry.get());
+}
+
+void GDataDBTest::TestGetFound(const GDataEntry& source) {
+ scoped_ptr<GDataEntry> entry;
+ GDataDB::Status status = gdata_db_->GetByPath(source.GetFilePath(), &entry);
+ EXPECT_EQ(GDataDB::DB_OK, status);
+ ASSERT_TRUE(entry.get());
+ EXPECT_EQ(source.file_name(), entry->file_name());
+ EXPECT_EQ(source.resource_id(), entry->resource_id());
+ EXPECT_EQ(source.content_url(), entry->content_url());
+ entry.reset();
+
+ status = gdata_db_->GetByResourceId(source.resource_id(), &entry);
+ EXPECT_EQ(GDataDB::DB_OK, status);
+ ASSERT_TRUE(entry.get());
+ EXPECT_EQ(source.file_name(), entry->file_name());
+ EXPECT_EQ(source.resource_id(), entry->resource_id());
+ EXPECT_EQ(source.content_url(), entry->content_url());
+}
+
+void GDataDBTest::InitDB() {
+ int sequence_id = 1;
+ GDataDirectory* dir1 = AddDirectory(NULL, sequence_id++);
+ GDataDirectory* dir2 = AddDirectory(NULL, sequence_id++);
+ GDataDirectory* dir3 = AddDirectory(dir1, sequence_id++);
+
+ AddFile(dir1, sequence_id++);
+ AddFile(dir1, sequence_id++);
+
+ AddFile(dir2, sequence_id++);
+ AddFile(dir2, sequence_id++);
+ AddFile(dir2, sequence_id++);
+
+ AddFile(dir3, sequence_id++);
+ AddFile(dir3, sequence_id++);
+}
+
+GDataDirectory* GDataDBTest::AddDirectory(GDataDirectory* parent,
+ int sequence_id) {
+ GDataDirectory* dir = new GDataDirectory(parent ? parent : &root_, &root_);
+ const std::string dir_name = "dir" + base::IntToString(sequence_id);
+ const std::string resource_id = std::string("dir_resource_id:") +
+ dir_name;
+ dir->set_file_name(dir_name);
+ dir->set_resource_id(resource_id);
+ GDataDB::Status status = gdata_db_->Put(*dir);
+ EXPECT_EQ(GDataDB::DB_OK, status);
+ DVLOG(1) << "AddDirectory " << dir->GetFilePath().value()
+ << ", " << resource_id;
+ return dir;
+}
+
+GDataFile* GDataDBTest::AddFile(GDataDirectory* parent,
+ int sequence_id) {
+ GDataFile* file = new GDataFile(parent, &root_);
+ const std::string file_name = "file" + base::IntToString(sequence_id);
+ const std::string resource_id = std::string("file_resource_id:") +
+ file_name;
+ file->set_file_name(file_name);
+ file->set_resource_id(resource_id);
+ GDataDB::Status status = gdata_db_->Put(*file);
+ EXPECT_EQ(GDataDB::DB_OK, status);
+ DVLOG(1) << "AddFile " << file->GetFilePath().value()
+ << ", " << resource_id;
+ return file;
+}
+
+void GDataDBTest::TestIter(const std::string& parent,
+ const char* file_paths[],
+ size_t file_paths_size) {
+ scoped_ptr<GDataDBIter> iter = gdata_db_->CreateIterator(
+ FilePath::FromUTF8Unsafe(parent));
+ for (size_t i = 0; ; ++i) {
+ scoped_ptr<GDataEntry> entry;
+ std::string path;
+ if (!iter->GetNext(&path, &entry)) {
+ EXPECT_EQ(i, file_paths_size);
+ break;
+ }
+ ASSERT_LT(i, file_paths_size);
+ // TODO(achuith): Also test entry->GetFilePath().
+ EXPECT_EQ(FilePath(file_paths[i]).BaseName().value(), entry->file_name());
+ EXPECT_EQ(file_paths[i], path);
+ DVLOG(1) << "Iter " << path;
+ }
+}
+
+} // namespace
+
+TEST_F(GDataDBTest, PutTest) {
+ GDataDirectory* dir = new GDataDirectory(&root_, &root_);
+ dir->set_file_name("dir");
+ dir->set_resource_id("dir_resource_id");
+ dir->set_content_url(GURL("http://content/dir"));
+ dir->set_upload_url(GURL("http://upload/dir"));
+
+ TestGetNotFound(*dir);
+
+ GDataDB::Status status = gdata_db_->Put(*dir);
+ EXPECT_EQ(GDataDB::DB_OK, status);
+
+ TestGetFound(*dir);
+
+ scoped_ptr<GDataEntry> entry;
+ gdata_db_->GetByPath(dir->GetFilePath(), &entry);
+ EXPECT_EQ(dir->upload_url(), entry->AsGDataDirectory()->upload_url());
+ EXPECT_TRUE(entry->AsGDataDirectory()->file_info().is_directory);
+
+ status = gdata_db_->DeleteByPath(dir->GetFilePath());
+ EXPECT_EQ(GDataDB::DB_OK, status);
+
+ TestGetNotFound(*dir);
+
+ GDataFile* file = new GDataFile(dir, &root_);
+ file->set_file_name("file1");
+ file->set_resource_id("file1_resource_id");
+ file->set_content_url(GURL("http://content/dir1/file1"));
+ file->set_file_md5("file1_md5");
+
+ TestGetNotFound(*file);
+
+ status = gdata_db_->Put(*file);
+ EXPECT_EQ(GDataDB::DB_OK, status);
+
+ TestGetFound(*file);
+
+ gdata_db_->GetByPath(file->GetFilePath(), &entry);
+ EXPECT_EQ(file->file_md5(), entry->AsGDataFile()->file_md5());
+ EXPECT_FALSE(entry->AsGDataFile()->file_info().is_directory);
+
+ status = gdata_db_->DeleteByPath(file->GetFilePath());
+ EXPECT_EQ(GDataDB::DB_OK, status);
+
+ TestGetNotFound(*file);
+}
+
+TEST_F(GDataDBTest, IterTest) {
+ InitDB();
+
+ const char* dir1_children[] = {
+ "dir1",
+ "dir1/dir3",
+ "dir1/dir3/file10",
+ "dir1/dir3/file9",
+ "dir1/file4",
+ "dir1/file5",
+ };
+ TestIter("dir1", dir1_children, arraysize(dir1_children));
+
+ const char* dir2_children[] = {
+ "dir2",
+ "dir2/file6",
+ "dir2/file7",
+ "dir2/file8",
+ };
+ TestIter("dir2", dir2_children, arraysize(dir2_children));
+
+ const char* dir3_children[] = {
+ "dir1/dir3",
+ "dir1/dir3/file10",
+ "dir1/dir3/file9",
+ };
+ TestIter("dir1/dir3", dir3_children, arraysize(dir3_children));
+
+ const char* file10[] = {
+ "dir1/dir3/file10",
+ };
+ TestIter(file10[0], file10, arraysize(file10));
+
+ const char* all_entries[] = {
+ "dir1",
+ "dir1/dir3",
+ "dir1/dir3/file10",
+ "dir1/dir3/file9",
+ "dir1/file4",
+ "dir1/file5",
+ "dir2",
+ "dir2/file6",
+ "dir2/file7",
+ "dir2/file8",
+ };
+ TestIter("", all_entries, arraysize(all_entries));
+
+ TestIter("dir4", NULL, 0);
+}
+
+} // namespace gdata
Property changes on: chrome/browser/chromeos/gdata/gdata_db_unittest.cc
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698