Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/gdata/gdata_files.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_files.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | |
| 11 #include "base/sequenced_task_runner.h" | |
| 12 #include "base/string_number_conversions.h" | |
| 13 #include "base/threading/sequenced_worker_pool.h" | |
| 10 #include "base/message_loop.h" | 14 #include "base/message_loop.h" |
| 11 #include "chrome/browser/chromeos/gdata/gdata.pb.h" | 15 #include "chrome/browser/chromeos/gdata/gdata.pb.h" |
| 16 #include "chrome/browser/chromeos/gdata/gdata_cache.h" | |
| 12 #include "chrome/browser/chromeos/gdata/gdata_test_util.h" | 17 #include "chrome/browser/chromeos/gdata/gdata_test_util.h" |
| 18 #include "chrome/test/base/testing_profile.h" | |
| 19 #include "content/public/test/test_browser_thread.h" | |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 21 |
| 15 namespace gdata { | 22 namespace gdata { |
| 16 | |
| 17 namespace { | 23 namespace { |
| 18 | 24 |
| 19 // See gdata.proto for the difference between the two URLs. | 25 // See gdata.proto for the difference between the two URLs. |
| 20 const char kResumableEditMediaUrl[] = "http://resumable-edit-media/"; | 26 const char kResumableEditMediaUrl[] = "http://resumable-edit-media/"; |
| 21 const char kResumableCreateMediaUrl[] = "http://resumable-create-media/"; | 27 const char kResumableCreateMediaUrl[] = "http://resumable-create-media/"; |
| 22 | 28 |
| 29 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.
| |
| 30 GDataDirectoryService* directory_service, | |
| 31 int sequence_id) { | |
| 32 GDataDirectory* dir = new GDataDirectory(parent, directory_service); | |
| 33 const std::string dir_name = "dir" + base::IntToString(sequence_id); | |
| 34 const std::string resource_id = std::string("dir_resource_id:") + | |
| 35 dir_name; | |
| 36 dir->set_title(dir_name); | |
| 37 dir->set_resource_id(resource_id); | |
| 38 GDataFileError error = GDATA_FILE_ERROR_FAILED; | |
| 39 directory_service->AddEntryToDirectory( | |
| 40 parent->GetFilePath(), | |
| 41 dir, | |
| 42 base::Bind(&test_util::CopyErrorCodeFromFileOperationCallback, &error)); | |
| 43 test_util::RunBlockingPoolTask(); | |
| 44 EXPECT_EQ(GDATA_FILE_OK, error); | |
| 45 return dir; | |
| 46 } | |
| 47 | |
| 48 GDataFile* AddFile(GDataDirectory* parent, | |
|
satorux1
2012/08/03 06:32:50
ditto
achuithb
2012/08/03 23:27:35
Done.
| |
| 49 GDataDirectoryService* directory_service, | |
| 50 int sequence_id) { | |
| 51 GDataFile* file = new GDataFile(parent, directory_service); | |
| 52 const std::string title = "file" + base::IntToString(sequence_id); | |
| 53 const std::string resource_id = std::string("file_resource_id:") + | |
| 54 title; | |
| 55 file->set_title(title); | |
| 56 file->set_resource_id(resource_id); | |
| 57 file->set_file_md5(std::string("file_md5:") + title); | |
| 58 GDataFileError error = GDATA_FILE_ERROR_FAILED; | |
| 59 directory_service->AddEntryToDirectory( | |
| 60 parent->GetFilePath(), | |
| 61 file, | |
| 62 base::Bind(&test_util::CopyErrorCodeFromFileOperationCallback, &error)); | |
| 63 test_util::RunBlockingPoolTask(); | |
| 64 EXPECT_EQ(GDATA_FILE_OK, error); | |
| 65 return file; | |
| 66 } | |
| 67 | |
| 68 // Creates the following files/directories | |
| 69 // drive/dir1/ | |
| 70 // drive/dir2/ | |
| 71 // drive/dir1/dir3/ | |
| 72 // drive/dir1/file4 | |
| 73 // drive/dir1/file5 | |
| 74 // drive/dir2/file6 | |
| 75 // drive/dir2/file7 | |
| 76 // drive/dir2/file8 | |
| 77 // drive/dir1/dir3/file9 | |
| 78 // drive/dir1/dir3/file10 | |
| 79 void InitDirectoryService(GDataDirectoryService* directory_service) { | |
| 80 int sequence_id = 1; | |
| 81 GDataDirectory* dir1 = AddDirectory(directory_service->root(), | |
| 82 directory_service, sequence_id++); | |
| 83 GDataDirectory* dir2 = AddDirectory(directory_service->root(), | |
| 84 directory_service, sequence_id++); | |
| 85 GDataDirectory* dir3 = AddDirectory(dir1, directory_service, sequence_id++); | |
| 86 | |
| 87 AddFile(dir1, directory_service, sequence_id++); | |
| 88 AddFile(dir1, directory_service, sequence_id++); | |
| 89 | |
| 90 AddFile(dir2, directory_service, sequence_id++); | |
| 91 AddFile(dir2, directory_service, sequence_id++); | |
| 92 AddFile(dir2, directory_service, sequence_id++); | |
| 93 | |
| 94 AddFile(dir3, directory_service, sequence_id++); | |
| 95 AddFile(dir3, directory_service, sequence_id++); | |
| 96 } | |
| 97 | |
| 98 GDataDirectory* FindDir(GDataDirectoryService* directory_service, | |
| 99 const char* path) { | |
| 100 return directory_service->FindEntryByPathSync( | |
| 101 FilePath(path))->AsGDataDirectory(); | |
| 102 } | |
| 103 | |
| 104 GDataFile* FindFile(GDataDirectoryService* directory_service, | |
| 105 const char* path) { | |
| 106 return directory_service->FindEntryByPathSync(FilePath(path))->AsGDataFile(); | |
| 107 } | |
| 108 | |
| 23 } // namespace | 109 } // namespace |
| 24 | 110 |
| 111 void VerifyDirectoryService(GDataDirectoryService* directory_service) { | |
| 112 ASSERT_TRUE(directory_service->root()); | |
| 113 | |
| 114 GDataDirectory* dir1 = FindDir(directory_service, "drive/dir1"); | |
| 115 ASSERT_TRUE(dir1); | |
| 116 GDataDirectory* dir2 = FindDir(directory_service, "drive/dir2"); | |
| 117 ASSERT_TRUE(dir2); | |
| 118 GDataDirectory* dir3 = FindDir(directory_service, "drive/dir1/dir3"); | |
| 119 ASSERT_TRUE(dir3); | |
| 120 | |
| 121 GDataFile* file4 = FindFile(directory_service, "drive/dir1/file4"); | |
| 122 ASSERT_TRUE(file4); | |
| 123 EXPECT_EQ(file4->parent(), dir1); | |
| 124 | |
| 125 GDataFile* file5 = FindFile(directory_service, "drive/dir1/file5"); | |
| 126 ASSERT_TRUE(file5); | |
| 127 EXPECT_EQ(file5->parent(), dir1); | |
| 128 | |
| 129 GDataFile* file6 = FindFile(directory_service, "drive/dir2/file6"); | |
| 130 ASSERT_TRUE(file6); | |
| 131 EXPECT_EQ(file6->parent(), dir2); | |
| 132 | |
| 133 GDataFile* file7 = FindFile(directory_service, "drive/dir2/file7"); | |
| 134 ASSERT_TRUE(file7); | |
| 135 EXPECT_EQ(file7->parent(), dir2); | |
| 136 | |
| 137 GDataFile* file8 = FindFile(directory_service, "drive/dir2/file8"); | |
| 138 ASSERT_TRUE(file8); | |
| 139 EXPECT_EQ(file8->parent(), dir2); | |
| 140 | |
| 141 GDataFile* file9 = FindFile(directory_service, "drive/dir1/dir3/file9"); | |
| 142 ASSERT_TRUE(file9); | |
| 143 EXPECT_EQ(file9->parent(), dir3); | |
| 144 | |
| 145 GDataFile* file10 = FindFile(directory_service, "drive/dir1/dir3/file10"); | |
| 146 ASSERT_TRUE(file10); | |
| 147 EXPECT_EQ(file10->parent(), dir3); | |
| 148 | |
| 149 EXPECT_EQ(dir1, directory_service->GetEntryByResourceId( | |
| 150 "dir_resource_id:dir1")); | |
| 151 EXPECT_EQ(dir2, directory_service->GetEntryByResourceId( | |
| 152 "dir_resource_id:dir2")); | |
| 153 EXPECT_EQ(dir3, directory_service->GetEntryByResourceId( | |
| 154 "dir_resource_id:dir3")); | |
| 155 EXPECT_EQ(file4, directory_service->GetEntryByResourceId( | |
| 156 "file_resource_id:file4")); | |
| 157 EXPECT_EQ(file5, directory_service->GetEntryByResourceId( | |
| 158 "file_resource_id:file5")); | |
| 159 EXPECT_EQ(file6, directory_service->GetEntryByResourceId( | |
| 160 "file_resource_id:file6")); | |
| 161 EXPECT_EQ(file7, directory_service->GetEntryByResourceId( | |
| 162 "file_resource_id:file7")); | |
| 163 EXPECT_EQ(file8, directory_service->GetEntryByResourceId( | |
| 164 "file_resource_id:file8")); | |
| 165 EXPECT_EQ(file9, directory_service->GetEntryByResourceId( | |
| 166 "file_resource_id:file9")); | |
| 167 EXPECT_EQ(file10, directory_service->GetEntryByResourceId( | |
| 168 "file_resource_id:file10")); | |
| 169 } | |
| 170 | |
| 25 TEST(GDataEntryTest, FromProto_DetectBadUploadUrl) { | 171 TEST(GDataEntryTest, FromProto_DetectBadUploadUrl) { |
| 26 GDataEntryProto proto; | 172 GDataEntryProto proto; |
| 27 proto.set_title("test.txt"); | 173 proto.set_title("test.txt"); |
| 28 | 174 |
| 29 GDataEntry entry(NULL, NULL); | 175 GDataEntry entry(NULL, NULL); |
| 30 // This should fail as the upload URL is empty. | 176 // This should fail as the upload URL is empty. |
| 31 ASSERT_FALSE(entry.FromProto(proto)); | 177 ASSERT_FALSE(entry.FromProto(proto)); |
| 32 | 178 |
| 33 // Set a upload URL. | 179 // Set a upload URL. |
| 34 proto.set_upload_url(kResumableEditMediaUrl); | 180 proto.set_upload_url(kResumableEditMediaUrl); |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 269 | 415 |
| 270 TEST(GDataRootDirectoryTest, GetEntryByResourceId_RootDirectory) { | 416 TEST(GDataRootDirectoryTest, GetEntryByResourceId_RootDirectory) { |
| 271 GDataDirectoryService directory_service; | 417 GDataDirectoryService directory_service; |
| 272 // Look up the root directory by its resource ID. | 418 // Look up the root directory by its resource ID. |
| 273 GDataEntry* entry = directory_service.GetEntryByResourceId( | 419 GDataEntry* entry = directory_service.GetEntryByResourceId( |
| 274 kGDataRootDirectoryResourceId); | 420 kGDataRootDirectoryResourceId); |
| 275 ASSERT_TRUE(entry); | 421 ASSERT_TRUE(entry); |
| 276 EXPECT_EQ(kGDataRootDirectoryResourceId, entry->resource_id()); | 422 EXPECT_EQ(kGDataRootDirectoryResourceId, entry->resource_id()); |
| 277 } | 423 } |
| 278 | 424 |
| 425 TEST(GDataRootDirectoryTest, DBTest) { | |
| 426 MessageLoopForUI message_loop; | |
| 427 content::TestBrowserThread ui_thread(content::BrowserThread::UI, | |
| 428 &message_loop); | |
| 429 | |
| 430 scoped_ptr<TestingProfile> profile(new TestingProfile); | |
| 431 scoped_refptr<base::SequencedWorkerPool> pool = | |
| 432 content::BrowserThread::GetBlockingPool(); | |
| 433 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner = | |
| 434 pool->GetSequencedTaskRunner(pool->GetSequenceToken()); | |
| 435 | |
| 436 GDataDirectoryService directory_service; | |
| 437 FilePath db_path(GDataCache::GetCacheRootPath(profile.get()). | |
| 438 AppendASCII("meta").AppendASCII("resource_metadata.db")); | |
| 439 directory_service.InitFromDB(db_path, blocking_task_runner, NULL, | |
| 440 base::Closure()); | |
| 441 test_util::RunBlockingPoolTask(); | |
| 442 InitDirectoryService(&directory_service); | |
| 443 | |
| 444 // Write the filesystem to db. | |
| 445 directory_service.SaveToDB(); | |
| 446 test_util::RunBlockingPoolTask(); | |
| 447 | |
| 448 GDataDirectoryService directory_service2; | |
| 449 directory_service2.InitFromDB(db_path, blocking_task_runner, NULL, | |
| 450 base::Closure()); | |
| 451 test_util::RunBlockingPoolTask(); | |
| 452 | |
| 453 VerifyDirectoryService(&directory_service2); | |
| 454 } | |
| 455 | |
| 279 } // namespace gdata | 456 } // namespace gdata |
| OLD | NEW |