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

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

Issue 10800092: Database support for GDataDirectoryService. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: minor Created 8 years, 5 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_files_unittest.cc
===================================================================
--- chrome/browser/chromeos/gdata/gdata_files_unittest.cc (revision 149697)
+++ chrome/browser/chromeos/gdata/gdata_files_unittest.cc (working copy)
@@ -7,21 +7,167 @@
#include <string>
#include <utility>
#include <vector>
+
+#include "base/sequenced_task_runner.h"
+#include "base/string_number_conversions.h"
+#include "base/threading/sequenced_worker_pool.h"
#include "base/message_loop.h"
#include "chrome/browser/chromeos/gdata/gdata.pb.h"
+#include "chrome/browser/chromeos/gdata/gdata_cache.h"
#include "chrome/browser/chromeos/gdata/gdata_test_util.h"
+#include "chrome/test/base/testing_profile.h"
+#include "content/public/test/test_browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace gdata {
-
namespace {
// See gdata.proto for the difference between the two URLs.
const char kResumableEditMediaUrl[] = "http://resumable-edit-media/";
const char kResumableCreateMediaUrl[] = "http://resumable-create-media/";
+GDataDirectory* AddDirectory(GDataDirectory* parent,
satorux1 2012/08/03 06:32:50 please write some comment. what's sequence_id, for
achuithb 2012/08/03 23:27:35 Done.
+ GDataDirectoryService* directory_service,
+ int sequence_id) {
+ GDataDirectory* dir = new GDataDirectory(parent, directory_service);
+ const std::string dir_name = "dir" + base::IntToString(sequence_id);
+ const std::string resource_id = std::string("dir_resource_id:") +
+ dir_name;
+ dir->set_title(dir_name);
+ dir->set_resource_id(resource_id);
+ GDataFileError error = GDATA_FILE_ERROR_FAILED;
+ directory_service->AddEntryToDirectory(
+ parent->GetFilePath(),
+ dir,
+ base::Bind(&test_util::CopyErrorCodeFromFileOperationCallback, &error));
+ test_util::RunBlockingPoolTask();
+ EXPECT_EQ(GDATA_FILE_OK, error);
+ return dir;
+}
+
+GDataFile* AddFile(GDataDirectory* parent,
satorux1 2012/08/03 06:32:50 ditto
achuithb 2012/08/03 23:27:35 Done.
+ GDataDirectoryService* directory_service,
+ int sequence_id) {
+ GDataFile* file = new GDataFile(parent, directory_service);
+ const std::string title = "file" + base::IntToString(sequence_id);
+ const std::string resource_id = std::string("file_resource_id:") +
+ title;
+ file->set_title(title);
+ file->set_resource_id(resource_id);
+ file->set_file_md5(std::string("file_md5:") + title);
+ GDataFileError error = GDATA_FILE_ERROR_FAILED;
+ directory_service->AddEntryToDirectory(
+ parent->GetFilePath(),
+ file,
+ base::Bind(&test_util::CopyErrorCodeFromFileOperationCallback, &error));
+ test_util::RunBlockingPoolTask();
+ EXPECT_EQ(GDATA_FILE_OK, error);
+ return file;
+}
+
+// Creates the following files/directories
+// drive/dir1/
+// drive/dir2/
+// drive/dir1/dir3/
+// drive/dir1/file4
+// drive/dir1/file5
+// drive/dir2/file6
+// drive/dir2/file7
+// drive/dir2/file8
+// drive/dir1/dir3/file9
+// drive/dir1/dir3/file10
+void InitDirectoryService(GDataDirectoryService* directory_service) {
+ int sequence_id = 1;
+ GDataDirectory* dir1 = AddDirectory(directory_service->root(),
+ directory_service, sequence_id++);
+ GDataDirectory* dir2 = AddDirectory(directory_service->root(),
+ directory_service, sequence_id++);
+ GDataDirectory* dir3 = AddDirectory(dir1, directory_service, sequence_id++);
+
+ AddFile(dir1, directory_service, sequence_id++);
+ AddFile(dir1, directory_service, sequence_id++);
+
+ AddFile(dir2, directory_service, sequence_id++);
+ AddFile(dir2, directory_service, sequence_id++);
+ AddFile(dir2, directory_service, sequence_id++);
+
+ AddFile(dir3, directory_service, sequence_id++);
+ AddFile(dir3, directory_service, sequence_id++);
+}
+
+GDataDirectory* FindDir(GDataDirectoryService* directory_service,
+ const char* path) {
+ return directory_service->FindEntryByPathSync(
+ FilePath(path))->AsGDataDirectory();
+}
+
+GDataFile* FindFile(GDataDirectoryService* directory_service,
+ const char* path) {
+ return directory_service->FindEntryByPathSync(FilePath(path))->AsGDataFile();
+}
+
} // namespace
+void VerifyDirectoryService(GDataDirectoryService* directory_service) {
+ ASSERT_TRUE(directory_service->root());
+
+ GDataDirectory* dir1 = FindDir(directory_service, "drive/dir1");
+ ASSERT_TRUE(dir1);
+ GDataDirectory* dir2 = FindDir(directory_service, "drive/dir2");
+ ASSERT_TRUE(dir2);
+ GDataDirectory* dir3 = FindDir(directory_service, "drive/dir1/dir3");
+ ASSERT_TRUE(dir3);
+
+ GDataFile* file4 = FindFile(directory_service, "drive/dir1/file4");
+ ASSERT_TRUE(file4);
+ EXPECT_EQ(file4->parent(), dir1);
+
+ GDataFile* file5 = FindFile(directory_service, "drive/dir1/file5");
+ ASSERT_TRUE(file5);
+ EXPECT_EQ(file5->parent(), dir1);
+
+ GDataFile* file6 = FindFile(directory_service, "drive/dir2/file6");
+ ASSERT_TRUE(file6);
+ EXPECT_EQ(file6->parent(), dir2);
+
+ GDataFile* file7 = FindFile(directory_service, "drive/dir2/file7");
+ ASSERT_TRUE(file7);
+ EXPECT_EQ(file7->parent(), dir2);
+
+ GDataFile* file8 = FindFile(directory_service, "drive/dir2/file8");
+ ASSERT_TRUE(file8);
+ EXPECT_EQ(file8->parent(), dir2);
+
+ GDataFile* file9 = FindFile(directory_service, "drive/dir1/dir3/file9");
+ ASSERT_TRUE(file9);
+ EXPECT_EQ(file9->parent(), dir3);
+
+ GDataFile* file10 = FindFile(directory_service, "drive/dir1/dir3/file10");
+ ASSERT_TRUE(file10);
+ EXPECT_EQ(file10->parent(), dir3);
+
+ EXPECT_EQ(dir1, directory_service->GetEntryByResourceId(
+ "dir_resource_id:dir1"));
+ EXPECT_EQ(dir2, directory_service->GetEntryByResourceId(
+ "dir_resource_id:dir2"));
+ EXPECT_EQ(dir3, directory_service->GetEntryByResourceId(
+ "dir_resource_id:dir3"));
+ EXPECT_EQ(file4, directory_service->GetEntryByResourceId(
+ "file_resource_id:file4"));
+ EXPECT_EQ(file5, directory_service->GetEntryByResourceId(
+ "file_resource_id:file5"));
+ EXPECT_EQ(file6, directory_service->GetEntryByResourceId(
+ "file_resource_id:file6"));
+ EXPECT_EQ(file7, directory_service->GetEntryByResourceId(
+ "file_resource_id:file7"));
+ EXPECT_EQ(file8, directory_service->GetEntryByResourceId(
+ "file_resource_id:file8"));
+ EXPECT_EQ(file9, directory_service->GetEntryByResourceId(
+ "file_resource_id:file9"));
+ EXPECT_EQ(file10, directory_service->GetEntryByResourceId(
+ "file_resource_id:file10"));
+}
+
TEST(GDataEntryTest, FromProto_DetectBadUploadUrl) {
GDataEntryProto proto;
proto.set_title("test.txt");
@@ -276,4 +422,35 @@
EXPECT_EQ(kGDataRootDirectoryResourceId, entry->resource_id());
}
+TEST(GDataRootDirectoryTest, DBTest) {
+ MessageLoopForUI message_loop;
+ content::TestBrowserThread ui_thread(content::BrowserThread::UI,
+ &message_loop);
+
+ scoped_ptr<TestingProfile> profile(new TestingProfile);
+ scoped_refptr<base::SequencedWorkerPool> pool =
+ content::BrowserThread::GetBlockingPool();
+ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner =
+ pool->GetSequencedTaskRunner(pool->GetSequenceToken());
+
+ GDataDirectoryService directory_service;
+ FilePath db_path(GDataCache::GetCacheRootPath(profile.get()).
+ AppendASCII("meta").AppendASCII("resource_metadata.db"));
+ directory_service.InitFromDB(db_path, blocking_task_runner, NULL,
+ base::Closure());
+ test_util::RunBlockingPoolTask();
+ InitDirectoryService(&directory_service);
+
+ // Write the filesystem to db.
+ directory_service.SaveToDB();
+ test_util::RunBlockingPoolTask();
+
+ GDataDirectoryService directory_service2;
+ directory_service2.InitFromDB(db_path, blocking_task_runner, NULL,
+ base::Closure());
+ test_util::RunBlockingPoolTask();
+
+ VerifyDirectoryService(&directory_service2);
+}
+
} // namespace gdata

Powered by Google App Engine
This is Rietveld 408576698