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 |