| 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_directory_service.h" | 5 #include "chrome/browser/chromeos/gdata/drive_resource_metadata.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/sequenced_task_runner.h" | 12 #include "base/sequenced_task_runner.h" |
| 13 #include "base/string_number_conversions.h" | 13 #include "base/string_number_conversions.h" |
| 14 #include "base/threading/sequenced_worker_pool.h" | 14 #include "base/threading/sequenced_worker_pool.h" |
| 15 #include "base/message_loop.h" | 15 #include "base/message_loop.h" |
| 16 #include "chrome/browser/chromeos/gdata/drive.pb.h" | 16 #include "chrome/browser/chromeos/gdata/drive.pb.h" |
| 17 #include "chrome/browser/chromeos/gdata/drive_files.h" | 17 #include "chrome/browser/chromeos/gdata/drive_files.h" |
| 18 #include "chrome/browser/chromeos/gdata/gdata_cache.h" | 18 #include "chrome/browser/chromeos/gdata/gdata_cache.h" |
| 19 #include "chrome/browser/chromeos/gdata/gdata_test_util.h" | 19 #include "chrome/browser/chromeos/gdata/gdata_test_util.h" |
| 20 #include "chrome/test/base/testing_profile.h" | 20 #include "chrome/test/base/testing_profile.h" |
| 21 #include "content/public/test/test_browser_thread.h" | 21 #include "content/public/test/test_browser_thread.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 23 |
| 24 namespace gdata { | 24 namespace gdata { |
| 25 namespace { | 25 namespace { |
| 26 | 26 |
| 27 // See drive.proto for the difference between the two URLs. | 27 // See drive.proto for the difference between the two URLs. |
| 28 const char kResumableEditMediaUrl[] = "http://resumable-edit-media/"; | 28 const char kResumableEditMediaUrl[] = "http://resumable-edit-media/"; |
| 29 const char kResumableCreateMediaUrl[] = "http://resumable-create-media/"; | 29 const char kResumableCreateMediaUrl[] = "http://resumable-create-media/"; |
| 30 | 30 |
| 31 // Add a directory to |parent| and return that directory. The name and | 31 // Add a directory to |parent| and return that directory. The name and |
| 32 // resource_id are determined by the incrementing counter |sequence_id|. | 32 // resource_id are determined by the incrementing counter |sequence_id|. |
| 33 DriveDirectory* AddDirectory(DriveDirectory* parent, | 33 DriveDirectory* AddDirectory(DriveDirectory* parent, |
| 34 GDataDirectoryService* directory_service, | 34 DriveResourceMetadata* resource_metadata, |
| 35 int sequence_id) { | 35 int sequence_id) { |
| 36 DriveDirectory* dir = directory_service->CreateDriveDirectory(); | 36 DriveDirectory* dir = resource_metadata->CreateDriveDirectory(); |
| 37 const std::string dir_name = "dir" + base::IntToString(sequence_id); | 37 const std::string dir_name = "dir" + base::IntToString(sequence_id); |
| 38 const std::string resource_id = std::string("dir_resource_id:") + | 38 const std::string resource_id = std::string("dir_resource_id:") + |
| 39 dir_name; | 39 dir_name; |
| 40 dir->set_title(dir_name); | 40 dir->set_title(dir_name); |
| 41 dir->set_resource_id(resource_id); | 41 dir->set_resource_id(resource_id); |
| 42 GDataFileError error = GDATA_FILE_ERROR_FAILED; | 42 GDataFileError error = GDATA_FILE_ERROR_FAILED; |
| 43 FilePath moved_file_path; | 43 FilePath moved_file_path; |
| 44 directory_service->MoveEntryToDirectory( | 44 resource_metadata->MoveEntryToDirectory( |
| 45 parent->GetFilePath(), | 45 parent->GetFilePath(), |
| 46 dir, | 46 dir, |
| 47 base::Bind(&test_util::CopyResultsFromFileMoveCallback, | 47 base::Bind(&test_util::CopyResultsFromFileMoveCallback, |
| 48 &error, | 48 &error, |
| 49 &moved_file_path)); | 49 &moved_file_path)); |
| 50 test_util::RunBlockingPoolTask(); | 50 test_util::RunBlockingPoolTask(); |
| 51 EXPECT_EQ(GDATA_FILE_OK, error); | 51 EXPECT_EQ(GDATA_FILE_OK, error); |
| 52 EXPECT_EQ(parent->GetFilePath().AppendASCII(dir_name), moved_file_path); | 52 EXPECT_EQ(parent->GetFilePath().AppendASCII(dir_name), moved_file_path); |
| 53 return dir; | 53 return dir; |
| 54 } | 54 } |
| 55 | 55 |
| 56 // Add a file to |parent| and return that file. The name and | 56 // Add a file to |parent| and return that file. The name and |
| 57 // resource_id are determined by the incrementing counter |sequence_id|. | 57 // resource_id are determined by the incrementing counter |sequence_id|. |
| 58 DriveFile* AddFile(DriveDirectory* parent, | 58 DriveFile* AddFile(DriveDirectory* parent, |
| 59 GDataDirectoryService* directory_service, | 59 DriveResourceMetadata* resource_metadata, |
| 60 int sequence_id) { | 60 int sequence_id) { |
| 61 DriveFile* file = directory_service->CreateDriveFile(); | 61 DriveFile* file = resource_metadata->CreateDriveFile(); |
| 62 const std::string title = "file" + base::IntToString(sequence_id); | 62 const std::string title = "file" + base::IntToString(sequence_id); |
| 63 const std::string resource_id = std::string("file_resource_id:") + | 63 const std::string resource_id = std::string("file_resource_id:") + |
| 64 title; | 64 title; |
| 65 file->set_title(title); | 65 file->set_title(title); |
| 66 file->set_resource_id(resource_id); | 66 file->set_resource_id(resource_id); |
| 67 file->set_file_md5(std::string("file_md5:") + title); | 67 file->set_file_md5(std::string("file_md5:") + title); |
| 68 GDataFileError error = GDATA_FILE_ERROR_FAILED; | 68 GDataFileError error = GDATA_FILE_ERROR_FAILED; |
| 69 FilePath moved_file_path; | 69 FilePath moved_file_path; |
| 70 directory_service->MoveEntryToDirectory( | 70 resource_metadata->MoveEntryToDirectory( |
| 71 parent->GetFilePath(), | 71 parent->GetFilePath(), |
| 72 file, | 72 file, |
| 73 base::Bind(&test_util::CopyResultsFromFileMoveCallback, | 73 base::Bind(&test_util::CopyResultsFromFileMoveCallback, |
| 74 &error, | 74 &error, |
| 75 &moved_file_path)); | 75 &moved_file_path)); |
| 76 test_util::RunBlockingPoolTask(); | 76 test_util::RunBlockingPoolTask(); |
| 77 EXPECT_EQ(GDATA_FILE_OK, error); | 77 EXPECT_EQ(GDATA_FILE_OK, error); |
| 78 EXPECT_EQ(parent->GetFilePath().AppendASCII(title), moved_file_path); | 78 EXPECT_EQ(parent->GetFilePath().AppendASCII(title), moved_file_path); |
| 79 return file; | 79 return file; |
| 80 } | 80 } |
| 81 | 81 |
| 82 // Creates the following files/directories | 82 // Creates the following files/directories |
| 83 // drive/dir1/ | 83 // drive/dir1/ |
| 84 // drive/dir2/ | 84 // drive/dir2/ |
| 85 // drive/dir1/dir3/ | 85 // drive/dir1/dir3/ |
| 86 // drive/dir1/file4 | 86 // drive/dir1/file4 |
| 87 // drive/dir1/file5 | 87 // drive/dir1/file5 |
| 88 // drive/dir2/file6 | 88 // drive/dir2/file6 |
| 89 // drive/dir2/file7 | 89 // drive/dir2/file7 |
| 90 // drive/dir2/file8 | 90 // drive/dir2/file8 |
| 91 // drive/dir1/dir3/file9 | 91 // drive/dir1/dir3/file9 |
| 92 // drive/dir1/dir3/file10 | 92 // drive/dir1/dir3/file10 |
| 93 void InitDirectoryService(GDataDirectoryService* directory_service) { | 93 void InitDirectoryService(DriveResourceMetadata* resource_metadata) { |
| 94 int sequence_id = 1; | 94 int sequence_id = 1; |
| 95 DriveDirectory* dir1 = AddDirectory(directory_service->root(), | 95 DriveDirectory* dir1 = AddDirectory(resource_metadata->root(), |
| 96 directory_service, sequence_id++); | 96 resource_metadata, sequence_id++); |
| 97 DriveDirectory* dir2 = AddDirectory(directory_service->root(), | 97 DriveDirectory* dir2 = AddDirectory(resource_metadata->root(), |
| 98 directory_service, sequence_id++); | 98 resource_metadata, sequence_id++); |
| 99 DriveDirectory* dir3 = AddDirectory(dir1, directory_service, sequence_id++); | 99 DriveDirectory* dir3 = AddDirectory(dir1, resource_metadata, sequence_id++); |
| 100 | 100 |
| 101 AddFile(dir1, directory_service, sequence_id++); | 101 AddFile(dir1, resource_metadata, sequence_id++); |
| 102 AddFile(dir1, directory_service, sequence_id++); | 102 AddFile(dir1, resource_metadata, sequence_id++); |
| 103 | 103 |
| 104 AddFile(dir2, directory_service, sequence_id++); | 104 AddFile(dir2, resource_metadata, sequence_id++); |
| 105 AddFile(dir2, directory_service, sequence_id++); | 105 AddFile(dir2, resource_metadata, sequence_id++); |
| 106 AddFile(dir2, directory_service, sequence_id++); | 106 AddFile(dir2, resource_metadata, sequence_id++); |
| 107 | 107 |
| 108 AddFile(dir3, directory_service, sequence_id++); | 108 AddFile(dir3, resource_metadata, sequence_id++); |
| 109 AddFile(dir3, directory_service, sequence_id++); | 109 AddFile(dir3, resource_metadata, sequence_id++); |
| 110 } | 110 } |
| 111 | 111 |
| 112 // Find directory by path. | 112 // Find directory by path. |
| 113 DriveDirectory* FindDirectory(GDataDirectoryService* directory_service, | 113 DriveDirectory* FindDirectory(DriveResourceMetadata* resource_metadata, |
| 114 const char* path) { | 114 const char* path) { |
| 115 return directory_service->FindEntryByPathSync( | 115 return resource_metadata->FindEntryByPathSync( |
| 116 FilePath(path))->AsDriveDirectory(); | 116 FilePath(path))->AsDriveDirectory(); |
| 117 } | 117 } |
| 118 | 118 |
| 119 // Find file by path. | 119 // Find file by path. |
| 120 DriveFile* FindFile(GDataDirectoryService* directory_service, | 120 DriveFile* FindFile(DriveResourceMetadata* resource_metadata, |
| 121 const char* path) { | 121 const char* path) { |
| 122 return directory_service->FindEntryByPathSync(FilePath(path))->AsDriveFile(); | 122 return resource_metadata->FindEntryByPathSync(FilePath(path))->AsDriveFile(); |
| 123 } | 123 } |
| 124 | 124 |
| 125 // Verify that the recreated directory service matches what we created in | 125 // Verify that the recreated directory service matches what we created in |
| 126 // InitDirectoryService. | 126 // InitDirectoryService. |
| 127 void VerifyDirectoryService(GDataDirectoryService* directory_service) { | 127 void VerifyDirectoryService(DriveResourceMetadata* resource_metadata) { |
| 128 ASSERT_TRUE(directory_service->root()); | 128 ASSERT_TRUE(resource_metadata->root()); |
| 129 | 129 |
| 130 DriveDirectory* dir1 = FindDirectory(directory_service, "drive/dir1"); | 130 DriveDirectory* dir1 = FindDirectory(resource_metadata, "drive/dir1"); |
| 131 ASSERT_TRUE(dir1); | 131 ASSERT_TRUE(dir1); |
| 132 DriveDirectory* dir2 = FindDirectory(directory_service, "drive/dir2"); | 132 DriveDirectory* dir2 = FindDirectory(resource_metadata, "drive/dir2"); |
| 133 ASSERT_TRUE(dir2); | 133 ASSERT_TRUE(dir2); |
| 134 DriveDirectory* dir3 = FindDirectory(directory_service, "drive/dir1/dir3"); | 134 DriveDirectory* dir3 = FindDirectory(resource_metadata, "drive/dir1/dir3"); |
| 135 ASSERT_TRUE(dir3); | 135 ASSERT_TRUE(dir3); |
| 136 | 136 |
| 137 DriveFile* file4 = FindFile(directory_service, "drive/dir1/file4"); | 137 DriveFile* file4 = FindFile(resource_metadata, "drive/dir1/file4"); |
| 138 ASSERT_TRUE(file4); | 138 ASSERT_TRUE(file4); |
| 139 EXPECT_EQ(file4->parent(), dir1); | 139 EXPECT_EQ(file4->parent(), dir1); |
| 140 | 140 |
| 141 DriveFile* file5 = FindFile(directory_service, "drive/dir1/file5"); | 141 DriveFile* file5 = FindFile(resource_metadata, "drive/dir1/file5"); |
| 142 ASSERT_TRUE(file5); | 142 ASSERT_TRUE(file5); |
| 143 EXPECT_EQ(file5->parent(), dir1); | 143 EXPECT_EQ(file5->parent(), dir1); |
| 144 | 144 |
| 145 DriveFile* file6 = FindFile(directory_service, "drive/dir2/file6"); | 145 DriveFile* file6 = FindFile(resource_metadata, "drive/dir2/file6"); |
| 146 ASSERT_TRUE(file6); | 146 ASSERT_TRUE(file6); |
| 147 EXPECT_EQ(file6->parent(), dir2); | 147 EXPECT_EQ(file6->parent(), dir2); |
| 148 | 148 |
| 149 DriveFile* file7 = FindFile(directory_service, "drive/dir2/file7"); | 149 DriveFile* file7 = FindFile(resource_metadata, "drive/dir2/file7"); |
| 150 ASSERT_TRUE(file7); | 150 ASSERT_TRUE(file7); |
| 151 EXPECT_EQ(file7->parent(), dir2); | 151 EXPECT_EQ(file7->parent(), dir2); |
| 152 | 152 |
| 153 DriveFile* file8 = FindFile(directory_service, "drive/dir2/file8"); | 153 DriveFile* file8 = FindFile(resource_metadata, "drive/dir2/file8"); |
| 154 ASSERT_TRUE(file8); | 154 ASSERT_TRUE(file8); |
| 155 EXPECT_EQ(file8->parent(), dir2); | 155 EXPECT_EQ(file8->parent(), dir2); |
| 156 | 156 |
| 157 DriveFile* file9 = FindFile(directory_service, "drive/dir1/dir3/file9"); | 157 DriveFile* file9 = FindFile(resource_metadata, "drive/dir1/dir3/file9"); |
| 158 ASSERT_TRUE(file9); | 158 ASSERT_TRUE(file9); |
| 159 EXPECT_EQ(file9->parent(), dir3); | 159 EXPECT_EQ(file9->parent(), dir3); |
| 160 | 160 |
| 161 DriveFile* file10 = FindFile(directory_service, "drive/dir1/dir3/file10"); | 161 DriveFile* file10 = FindFile(resource_metadata, "drive/dir1/dir3/file10"); |
| 162 ASSERT_TRUE(file10); | 162 ASSERT_TRUE(file10); |
| 163 EXPECT_EQ(file10->parent(), dir3); | 163 EXPECT_EQ(file10->parent(), dir3); |
| 164 | 164 |
| 165 EXPECT_EQ(dir1, directory_service->GetEntryByResourceId( | 165 EXPECT_EQ(dir1, resource_metadata->GetEntryByResourceId( |
| 166 "dir_resource_id:dir1")); | 166 "dir_resource_id:dir1")); |
| 167 EXPECT_EQ(dir2, directory_service->GetEntryByResourceId( | 167 EXPECT_EQ(dir2, resource_metadata->GetEntryByResourceId( |
| 168 "dir_resource_id:dir2")); | 168 "dir_resource_id:dir2")); |
| 169 EXPECT_EQ(dir3, directory_service->GetEntryByResourceId( | 169 EXPECT_EQ(dir3, resource_metadata->GetEntryByResourceId( |
| 170 "dir_resource_id:dir3")); | 170 "dir_resource_id:dir3")); |
| 171 EXPECT_EQ(file4, directory_service->GetEntryByResourceId( | 171 EXPECT_EQ(file4, resource_metadata->GetEntryByResourceId( |
| 172 "file_resource_id:file4")); | 172 "file_resource_id:file4")); |
| 173 EXPECT_EQ(file5, directory_service->GetEntryByResourceId( | 173 EXPECT_EQ(file5, resource_metadata->GetEntryByResourceId( |
| 174 "file_resource_id:file5")); | 174 "file_resource_id:file5")); |
| 175 EXPECT_EQ(file6, directory_service->GetEntryByResourceId( | 175 EXPECT_EQ(file6, resource_metadata->GetEntryByResourceId( |
| 176 "file_resource_id:file6")); | 176 "file_resource_id:file6")); |
| 177 EXPECT_EQ(file7, directory_service->GetEntryByResourceId( | 177 EXPECT_EQ(file7, resource_metadata->GetEntryByResourceId( |
| 178 "file_resource_id:file7")); | 178 "file_resource_id:file7")); |
| 179 EXPECT_EQ(file8, directory_service->GetEntryByResourceId( | 179 EXPECT_EQ(file8, resource_metadata->GetEntryByResourceId( |
| 180 "file_resource_id:file8")); | 180 "file_resource_id:file8")); |
| 181 EXPECT_EQ(file9, directory_service->GetEntryByResourceId( | 181 EXPECT_EQ(file9, resource_metadata->GetEntryByResourceId( |
| 182 "file_resource_id:file9")); | 182 "file_resource_id:file9")); |
| 183 EXPECT_EQ(file10, directory_service->GetEntryByResourceId( | 183 EXPECT_EQ(file10, resource_metadata->GetEntryByResourceId( |
| 184 "file_resource_id:file10")); | 184 "file_resource_id:file10")); |
| 185 } | 185 } |
| 186 | 186 |
| 187 // Callback for GDataDirectoryService::InitFromDB. | 187 // Callback for DriveResourceMetadata::InitFromDB. |
| 188 void InitFromDBCallback(GDataFileError expected_error, | 188 void InitFromDBCallback(GDataFileError expected_error, |
| 189 GDataFileError actual_error) { | 189 GDataFileError actual_error) { |
| 190 EXPECT_EQ(expected_error, actual_error); | 190 EXPECT_EQ(expected_error, actual_error); |
| 191 } | 191 } |
| 192 | 192 |
| 193 // Callback for GDataDirectoryService::ReadDirectoryByPath. | 193 // Callback for DriveResourceMetadata::ReadDirectoryByPath. |
| 194 void ReadDirectoryByPathCallback( | 194 void ReadDirectoryByPathCallback( |
| 195 scoped_ptr<DriveEntryProtoVector>* result, | 195 scoped_ptr<DriveEntryProtoVector>* result, |
| 196 GDataFileError error, | 196 GDataFileError error, |
| 197 scoped_ptr<DriveEntryProtoVector> entries) { | 197 scoped_ptr<DriveEntryProtoVector> entries) { |
| 198 EXPECT_EQ(GDATA_FILE_OK, error); | 198 EXPECT_EQ(GDATA_FILE_OK, error); |
| 199 *result = entries.Pass(); | 199 *result = entries.Pass(); |
| 200 } | 200 } |
| 201 | 201 |
| 202 } // namespace | 202 } // namespace |
| 203 | 203 |
| 204 TEST(GDataDirectoryServiceTest, VersionCheck) { | 204 TEST(DriveResourceMetadataTest, VersionCheck) { |
| 205 // Set up the root directory. | 205 // Set up the root directory. |
| 206 DriveRootDirectoryProto proto; | 206 DriveRootDirectoryProto proto; |
| 207 DriveEntryProto* mutable_entry = | 207 DriveEntryProto* mutable_entry = |
| 208 proto.mutable_gdata_directory()->mutable_gdata_entry(); | 208 proto.mutable_gdata_directory()->mutable_gdata_entry(); |
| 209 mutable_entry->mutable_file_info()->set_is_directory(true); | 209 mutable_entry->mutable_file_info()->set_is_directory(true); |
| 210 mutable_entry->set_resource_id(kGDataRootDirectoryResourceId); | 210 mutable_entry->set_resource_id(kDriveRootDirectoryResourceId); |
| 211 mutable_entry->set_upload_url(kResumableCreateMediaUrl); | 211 mutable_entry->set_upload_url(kResumableCreateMediaUrl); |
| 212 mutable_entry->set_title("drive"); | 212 mutable_entry->set_title("drive"); |
| 213 | 213 |
| 214 GDataDirectoryService directory_service; | 214 DriveResourceMetadata resource_metadata; |
| 215 | 215 |
| 216 std::string serialized_proto; | 216 std::string serialized_proto; |
| 217 ASSERT_TRUE(proto.SerializeToString(&serialized_proto)); | 217 ASSERT_TRUE(proto.SerializeToString(&serialized_proto)); |
| 218 // This should fail as the version is emtpy. | 218 // This should fail as the version is emtpy. |
| 219 ASSERT_FALSE(directory_service.ParseFromString(serialized_proto)); | 219 ASSERT_FALSE(resource_metadata.ParseFromString(serialized_proto)); |
| 220 | 220 |
| 221 // Set an older version, and serialize. | 221 // Set an older version, and serialize. |
| 222 proto.set_version(kProtoVersion - 1); | 222 proto.set_version(kProtoVersion - 1); |
| 223 ASSERT_TRUE(proto.SerializeToString(&serialized_proto)); | 223 ASSERT_TRUE(proto.SerializeToString(&serialized_proto)); |
| 224 // This should fail as the version is older. | 224 // This should fail as the version is older. |
| 225 ASSERT_FALSE(directory_service.ParseFromString(serialized_proto)); | 225 ASSERT_FALSE(resource_metadata.ParseFromString(serialized_proto)); |
| 226 | 226 |
| 227 // Set the current version, and serialize. | 227 // Set the current version, and serialize. |
| 228 proto.set_version(kProtoVersion); | 228 proto.set_version(kProtoVersion); |
| 229 ASSERT_TRUE(proto.SerializeToString(&serialized_proto)); | 229 ASSERT_TRUE(proto.SerializeToString(&serialized_proto)); |
| 230 // This should succeed as the version matches the current number. | 230 // This should succeed as the version matches the current number. |
| 231 ASSERT_TRUE(directory_service.ParseFromString(serialized_proto)); | 231 ASSERT_TRUE(resource_metadata.ParseFromString(serialized_proto)); |
| 232 | 232 |
| 233 // Set a newer version, and serialize. | 233 // Set a newer version, and serialize. |
| 234 proto.set_version(kProtoVersion + 1); | 234 proto.set_version(kProtoVersion + 1); |
| 235 ASSERT_TRUE(proto.SerializeToString(&serialized_proto)); | 235 ASSERT_TRUE(proto.SerializeToString(&serialized_proto)); |
| 236 // This should fail as the version is newer. | 236 // This should fail as the version is newer. |
| 237 ASSERT_FALSE(directory_service.ParseFromString(serialized_proto)); | 237 ASSERT_FALSE(resource_metadata.ParseFromString(serialized_proto)); |
| 238 } | 238 } |
| 239 | 239 |
| 240 TEST(GDataDirectoryServiceTest, RefreshFile) { | 240 TEST(DriveResourceMetadataTest, RefreshFile) { |
| 241 MessageLoopForUI message_loop; | 241 MessageLoopForUI message_loop; |
| 242 content::TestBrowserThread ui_thread(content::BrowserThread::UI, | 242 content::TestBrowserThread ui_thread(content::BrowserThread::UI, |
| 243 &message_loop); | 243 &message_loop); |
| 244 | 244 |
| 245 GDataDirectoryService directory_service; | 245 DriveResourceMetadata resource_metadata; |
| 246 // Add a directory to the file system. | 246 // Add a directory to the file system. |
| 247 DriveDirectory* directory_entry = directory_service.CreateDriveDirectory(); | 247 DriveDirectory* directory_entry = resource_metadata.CreateDriveDirectory(); |
| 248 directory_entry->set_resource_id("folder:directory_resource_id"); | 248 directory_entry->set_resource_id("folder:directory_resource_id"); |
| 249 directory_entry->set_title("directory"); | 249 directory_entry->set_title("directory"); |
| 250 directory_entry->SetBaseNameFromTitle(); | 250 directory_entry->SetBaseNameFromTitle(); |
| 251 GDataFileError error = GDATA_FILE_ERROR_FAILED; | 251 GDataFileError error = GDATA_FILE_ERROR_FAILED; |
| 252 FilePath moved_file_path; | 252 FilePath moved_file_path; |
| 253 FilePath root_path(kGDataRootDirectory); | 253 FilePath root_path(kDriveRootDirectory); |
| 254 directory_service.MoveEntryToDirectory( | 254 resource_metadata.MoveEntryToDirectory( |
| 255 root_path, | 255 root_path, |
| 256 directory_entry, | 256 directory_entry, |
| 257 base::Bind(&test_util::CopyResultsFromFileMoveCallback, | 257 base::Bind(&test_util::CopyResultsFromFileMoveCallback, |
| 258 &error, | 258 &error, |
| 259 &moved_file_path)); | 259 &moved_file_path)); |
| 260 test_util::RunBlockingPoolTask(); | 260 test_util::RunBlockingPoolTask(); |
| 261 ASSERT_EQ(GDATA_FILE_OK, error); | 261 ASSERT_EQ(GDATA_FILE_OK, error); |
| 262 EXPECT_EQ(root_path.AppendASCII(directory_entry->base_name()), | 262 EXPECT_EQ(root_path.AppendASCII(directory_entry->base_name()), |
| 263 moved_file_path); | 263 moved_file_path); |
| 264 | 264 |
| 265 // Add a new file to the directory. | 265 // Add a new file to the directory. |
| 266 DriveFile* initial_file_entry = directory_service.CreateDriveFile(); | 266 DriveFile* initial_file_entry = resource_metadata.CreateDriveFile(); |
| 267 initial_file_entry->set_resource_id("file:file_resource_id"); | 267 initial_file_entry->set_resource_id("file:file_resource_id"); |
| 268 initial_file_entry->set_title("file"); | 268 initial_file_entry->set_title("file"); |
| 269 initial_file_entry->SetBaseNameFromTitle(); | 269 initial_file_entry->SetBaseNameFromTitle(); |
| 270 error = GDATA_FILE_ERROR_FAILED; | 270 error = GDATA_FILE_ERROR_FAILED; |
| 271 moved_file_path.clear(); | 271 moved_file_path.clear(); |
| 272 directory_service.MoveEntryToDirectory( | 272 resource_metadata.MoveEntryToDirectory( |
| 273 directory_entry->GetFilePath(), | 273 directory_entry->GetFilePath(), |
| 274 initial_file_entry, | 274 initial_file_entry, |
| 275 base::Bind(&test_util::CopyResultsFromFileMoveCallback, | 275 base::Bind(&test_util::CopyResultsFromFileMoveCallback, |
| 276 &error, | 276 &error, |
| 277 &moved_file_path)); | 277 &moved_file_path)); |
| 278 test_util::RunBlockingPoolTask(); | 278 test_util::RunBlockingPoolTask(); |
| 279 ASSERT_EQ(GDATA_FILE_OK, error); | 279 ASSERT_EQ(GDATA_FILE_OK, error); |
| 280 EXPECT_EQ(directory_entry->GetFilePath().AppendASCII( | 280 EXPECT_EQ(directory_entry->GetFilePath().AppendASCII( |
| 281 initial_file_entry->base_name()), moved_file_path); | 281 initial_file_entry->base_name()), moved_file_path); |
| 282 | 282 |
| 283 ASSERT_EQ(directory_entry, initial_file_entry->parent()); | 283 ASSERT_EQ(directory_entry, initial_file_entry->parent()); |
| 284 | 284 |
| 285 // Initial file system state set, let's try refreshing entries. | 285 // Initial file system state set, let's try refreshing entries. |
| 286 | 286 |
| 287 // New value for the entry with resource id "file:file_resource_id". | 287 // New value for the entry with resource id "file:file_resource_id". |
| 288 DriveFile* new_file_entry = directory_service.CreateDriveFile(); | 288 DriveFile* new_file_entry = resource_metadata.CreateDriveFile(); |
| 289 new_file_entry->set_resource_id("file:file_resource_id"); | 289 new_file_entry->set_resource_id("file:file_resource_id"); |
| 290 directory_service.RefreshFile(scoped_ptr<DriveFile>(new_file_entry).Pass()); | 290 resource_metadata.RefreshFile(scoped_ptr<DriveFile>(new_file_entry).Pass()); |
| 291 // Root should have |new_file_entry|, not |initial_file_entry|. | 291 // Root should have |new_file_entry|, not |initial_file_entry|. |
| 292 // If this is not true, |new_file_entry| has probably been destroyed, hence | 292 // If this is not true, |new_file_entry| has probably been destroyed, hence |
| 293 // ASSERT (we're trying to access |new_file_entry| later on). | 293 // ASSERT (we're trying to access |new_file_entry| later on). |
| 294 ASSERT_EQ(new_file_entry, | 294 ASSERT_EQ(new_file_entry, |
| 295 directory_service.GetEntryByResourceId("file:file_resource_id")); | 295 resource_metadata.GetEntryByResourceId("file:file_resource_id")); |
| 296 // We have just verified new_file_entry exists inside root, so accessing | 296 // We have just verified new_file_entry exists inside root, so accessing |
| 297 // |new_file_entry->parent()| should be safe. | 297 // |new_file_entry->parent()| should be safe. |
| 298 EXPECT_EQ(directory_entry, new_file_entry->parent()); | 298 EXPECT_EQ(directory_entry, new_file_entry->parent()); |
| 299 | 299 |
| 300 // Let's try refreshing file that didn't prviously exist. | 300 // Let's try refreshing file that didn't prviously exist. |
| 301 DriveFile* non_existent_entry = directory_service.CreateDriveFile(); | 301 DriveFile* non_existent_entry = resource_metadata.CreateDriveFile(); |
| 302 non_existent_entry->set_resource_id("file:does_not_exist"); | 302 non_existent_entry->set_resource_id("file:does_not_exist"); |
| 303 directory_service.RefreshFile( | 303 resource_metadata.RefreshFile( |
| 304 scoped_ptr<DriveFile>(non_existent_entry).Pass()); | 304 scoped_ptr<DriveFile>(non_existent_entry).Pass()); |
| 305 // File with non existent resource id should not be added. | 305 // File with non existent resource id should not be added. |
| 306 EXPECT_FALSE(directory_service.GetEntryByResourceId("file:does_not_exist")); | 306 EXPECT_FALSE(resource_metadata.GetEntryByResourceId("file:does_not_exist")); |
| 307 } | 307 } |
| 308 | 308 |
| 309 TEST(GDataDirectoryServiceTest, GetEntryByResourceId_RootDirectory) { | 309 TEST(DriveResourceMetadataTest, GetEntryByResourceId_RootDirectory) { |
| 310 GDataDirectoryService directory_service; | 310 DriveResourceMetadata resource_metadata; |
| 311 // Look up the root directory by its resource ID. | 311 // Look up the root directory by its resource ID. |
| 312 DriveEntry* entry = directory_service.GetEntryByResourceId( | 312 DriveEntry* entry = resource_metadata.GetEntryByResourceId( |
| 313 kGDataRootDirectoryResourceId); | 313 kDriveRootDirectoryResourceId); |
| 314 ASSERT_TRUE(entry); | 314 ASSERT_TRUE(entry); |
| 315 EXPECT_EQ(kGDataRootDirectoryResourceId, entry->resource_id()); | 315 EXPECT_EQ(kDriveRootDirectoryResourceId, entry->resource_id()); |
| 316 } | 316 } |
| 317 | 317 |
| 318 TEST(GDataDirectoryServiceTest, GetEntryInfoByResourceId) { | 318 TEST(DriveResourceMetadataTest, GetEntryInfoByResourceId) { |
| 319 MessageLoopForUI message_loop; | 319 MessageLoopForUI message_loop; |
| 320 content::TestBrowserThread ui_thread(content::BrowserThread::UI, | 320 content::TestBrowserThread ui_thread(content::BrowserThread::UI, |
| 321 &message_loop); | 321 &message_loop); |
| 322 GDataDirectoryService directory_service; | 322 DriveResourceMetadata resource_metadata; |
| 323 InitDirectoryService(&directory_service); | 323 InitDirectoryService(&resource_metadata); |
| 324 | 324 |
| 325 // Confirm that an existing file is found. | 325 // Confirm that an existing file is found. |
| 326 GDataFileError error = GDATA_FILE_ERROR_FAILED; | 326 GDataFileError error = GDATA_FILE_ERROR_FAILED; |
| 327 FilePath drive_file_path; | 327 FilePath drive_file_path; |
| 328 scoped_ptr<DriveEntryProto> entry_proto; | 328 scoped_ptr<DriveEntryProto> entry_proto; |
| 329 directory_service.GetEntryInfoByResourceId( | 329 resource_metadata.GetEntryInfoByResourceId( |
| 330 "file_resource_id:file4", | 330 "file_resource_id:file4", |
| 331 base::Bind(&test_util::CopyResultsFromGetEntryInfoWithFilePathCallback, | 331 base::Bind(&test_util::CopyResultsFromGetEntryInfoWithFilePathCallback, |
| 332 &error, &drive_file_path, &entry_proto)); | 332 &error, &drive_file_path, &entry_proto)); |
| 333 test_util::RunBlockingPoolTask(); | 333 test_util::RunBlockingPoolTask(); |
| 334 EXPECT_EQ(GDATA_FILE_OK, error); | 334 EXPECT_EQ(GDATA_FILE_OK, error); |
| 335 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/file4"), drive_file_path); | 335 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/file4"), drive_file_path); |
| 336 ASSERT_TRUE(entry_proto.get()); | 336 ASSERT_TRUE(entry_proto.get()); |
| 337 EXPECT_EQ("file4", entry_proto->base_name()); | 337 EXPECT_EQ("file4", entry_proto->base_name()); |
| 338 | 338 |
| 339 // Confirm that a non existing file is not found. | 339 // Confirm that a non existing file is not found. |
| 340 error = GDATA_FILE_ERROR_FAILED; | 340 error = GDATA_FILE_ERROR_FAILED; |
| 341 entry_proto.reset(); | 341 entry_proto.reset(); |
| 342 directory_service.GetEntryInfoByResourceId( | 342 resource_metadata.GetEntryInfoByResourceId( |
| 343 "file:non_existing", | 343 "file:non_existing", |
| 344 base::Bind(&test_util::CopyResultsFromGetEntryInfoWithFilePathCallback, | 344 base::Bind(&test_util::CopyResultsFromGetEntryInfoWithFilePathCallback, |
| 345 &error, &drive_file_path, &entry_proto)); | 345 &error, &drive_file_path, &entry_proto)); |
| 346 test_util::RunBlockingPoolTask(); | 346 test_util::RunBlockingPoolTask(); |
| 347 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, error); | 347 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, error); |
| 348 EXPECT_FALSE(entry_proto.get()); | 348 EXPECT_FALSE(entry_proto.get()); |
| 349 } | 349 } |
| 350 | 350 |
| 351 TEST(GDataDirectoryServiceTest, GetEntryInfoByPath) { | 351 TEST(DriveResourceMetadataTest, GetEntryInfoByPath) { |
| 352 MessageLoopForUI message_loop; | 352 MessageLoopForUI message_loop; |
| 353 content::TestBrowserThread ui_thread(content::BrowserThread::UI, | 353 content::TestBrowserThread ui_thread(content::BrowserThread::UI, |
| 354 &message_loop); | 354 &message_loop); |
| 355 GDataDirectoryService directory_service; | 355 DriveResourceMetadata resource_metadata; |
| 356 InitDirectoryService(&directory_service); | 356 InitDirectoryService(&resource_metadata); |
| 357 | 357 |
| 358 // Confirm that an existing file is found. | 358 // Confirm that an existing file is found. |
| 359 GDataFileError error = GDATA_FILE_ERROR_FAILED; | 359 GDataFileError error = GDATA_FILE_ERROR_FAILED; |
| 360 scoped_ptr<DriveEntryProto> entry_proto; | 360 scoped_ptr<DriveEntryProto> entry_proto; |
| 361 directory_service.GetEntryInfoByPath( | 361 resource_metadata.GetEntryInfoByPath( |
| 362 FilePath::FromUTF8Unsafe("drive/dir1/file4"), | 362 FilePath::FromUTF8Unsafe("drive/dir1/file4"), |
| 363 base::Bind(&test_util::CopyResultsFromGetEntryInfoCallback, | 363 base::Bind(&test_util::CopyResultsFromGetEntryInfoCallback, |
| 364 &error, &entry_proto)); | 364 &error, &entry_proto)); |
| 365 test_util::RunBlockingPoolTask(); | 365 test_util::RunBlockingPoolTask(); |
| 366 EXPECT_EQ(GDATA_FILE_OK, error); | 366 EXPECT_EQ(GDATA_FILE_OK, error); |
| 367 ASSERT_TRUE(entry_proto.get()); | 367 ASSERT_TRUE(entry_proto.get()); |
| 368 EXPECT_EQ("file4", entry_proto->base_name()); | 368 EXPECT_EQ("file4", entry_proto->base_name()); |
| 369 | 369 |
| 370 // Confirm that a non existing file is not found. | 370 // Confirm that a non existing file is not found. |
| 371 error = GDATA_FILE_ERROR_FAILED; | 371 error = GDATA_FILE_ERROR_FAILED; |
| 372 entry_proto.reset(); | 372 entry_proto.reset(); |
| 373 directory_service.GetEntryInfoByPath( | 373 resource_metadata.GetEntryInfoByPath( |
| 374 FilePath::FromUTF8Unsafe("drive/dir1/non_existing"), | 374 FilePath::FromUTF8Unsafe("drive/dir1/non_existing"), |
| 375 base::Bind(&test_util::CopyResultsFromGetEntryInfoCallback, | 375 base::Bind(&test_util::CopyResultsFromGetEntryInfoCallback, |
| 376 &error, &entry_proto)); | 376 &error, &entry_proto)); |
| 377 test_util::RunBlockingPoolTask(); | 377 test_util::RunBlockingPoolTask(); |
| 378 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, error); | 378 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, error); |
| 379 EXPECT_FALSE(entry_proto.get()); | 379 EXPECT_FALSE(entry_proto.get()); |
| 380 } | 380 } |
| 381 | 381 |
| 382 TEST(GDataDirectoryServiceTest, ReadDirectoryByPath) { | 382 TEST(DriveResourceMetadataTest, ReadDirectoryByPath) { |
| 383 MessageLoopForUI message_loop; | 383 MessageLoopForUI message_loop; |
| 384 content::TestBrowserThread ui_thread(content::BrowserThread::UI, | 384 content::TestBrowserThread ui_thread(content::BrowserThread::UI, |
| 385 &message_loop); | 385 &message_loop); |
| 386 GDataDirectoryService directory_service; | 386 DriveResourceMetadata resource_metadata; |
| 387 InitDirectoryService(&directory_service); | 387 InitDirectoryService(&resource_metadata); |
| 388 | 388 |
| 389 // Confirm that an existing directory is found. | 389 // Confirm that an existing directory is found. |
| 390 GDataFileError error = GDATA_FILE_ERROR_FAILED; | 390 GDataFileError error = GDATA_FILE_ERROR_FAILED; |
| 391 scoped_ptr<DriveEntryProtoVector> entries; | 391 scoped_ptr<DriveEntryProtoVector> entries; |
| 392 directory_service.ReadDirectoryByPath( | 392 resource_metadata.ReadDirectoryByPath( |
| 393 FilePath::FromUTF8Unsafe("drive/dir1"), | 393 FilePath::FromUTF8Unsafe("drive/dir1"), |
| 394 base::Bind(&test_util::CopyResultsFromReadDirectoryCallback, | 394 base::Bind(&test_util::CopyResultsFromReadDirectoryCallback, |
| 395 &error, &entries)); | 395 &error, &entries)); |
| 396 test_util::RunBlockingPoolTask(); | 396 test_util::RunBlockingPoolTask(); |
| 397 EXPECT_EQ(GDATA_FILE_OK, error); | 397 EXPECT_EQ(GDATA_FILE_OK, error); |
| 398 ASSERT_TRUE(entries.get()); | 398 ASSERT_TRUE(entries.get()); |
| 399 ASSERT_EQ(3U, entries->size()); | 399 ASSERT_EQ(3U, entries->size()); |
| 400 | 400 |
| 401 // The order is not guaranteed so we should sort the base names. | 401 // The order is not guaranteed so we should sort the base names. |
| 402 std::vector<std::string> base_names; | 402 std::vector<std::string> base_names; |
| 403 for (size_t i = 0; i < 3; ++i) | 403 for (size_t i = 0; i < 3; ++i) |
| 404 base_names.push_back(entries->at(i).base_name()); | 404 base_names.push_back(entries->at(i).base_name()); |
| 405 std::sort(base_names.begin(), base_names.end()); | 405 std::sort(base_names.begin(), base_names.end()); |
| 406 | 406 |
| 407 EXPECT_EQ("dir3", base_names[0]); | 407 EXPECT_EQ("dir3", base_names[0]); |
| 408 EXPECT_EQ("file4", base_names[1]); | 408 EXPECT_EQ("file4", base_names[1]); |
| 409 EXPECT_EQ("file5", base_names[2]); | 409 EXPECT_EQ("file5", base_names[2]); |
| 410 | 410 |
| 411 // Confirm that a non existing directory is not found. | 411 // Confirm that a non existing directory is not found. |
| 412 error = GDATA_FILE_ERROR_FAILED; | 412 error = GDATA_FILE_ERROR_FAILED; |
| 413 entries.reset(); | 413 entries.reset(); |
| 414 directory_service.ReadDirectoryByPath( | 414 resource_metadata.ReadDirectoryByPath( |
| 415 FilePath::FromUTF8Unsafe("drive/non_existing"), | 415 FilePath::FromUTF8Unsafe("drive/non_existing"), |
| 416 base::Bind(&test_util::CopyResultsFromReadDirectoryCallback, | 416 base::Bind(&test_util::CopyResultsFromReadDirectoryCallback, |
| 417 &error, &entries)); | 417 &error, &entries)); |
| 418 test_util::RunBlockingPoolTask(); | 418 test_util::RunBlockingPoolTask(); |
| 419 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, error); | 419 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, error); |
| 420 EXPECT_FALSE(entries.get()); | 420 EXPECT_FALSE(entries.get()); |
| 421 | 421 |
| 422 // Confirm that reading a file results in GDATA_FILE_ERROR_NOT_A_DIRECTORY. | 422 // Confirm that reading a file results in GDATA_FILE_ERROR_NOT_A_DIRECTORY. |
| 423 error = GDATA_FILE_ERROR_FAILED; | 423 error = GDATA_FILE_ERROR_FAILED; |
| 424 entries.reset(); | 424 entries.reset(); |
| 425 directory_service.ReadDirectoryByPath( | 425 resource_metadata.ReadDirectoryByPath( |
| 426 FilePath::FromUTF8Unsafe("drive/dir1/file4"), | 426 FilePath::FromUTF8Unsafe("drive/dir1/file4"), |
| 427 base::Bind(&test_util::CopyResultsFromReadDirectoryCallback, | 427 base::Bind(&test_util::CopyResultsFromReadDirectoryCallback, |
| 428 &error, &entries)); | 428 &error, &entries)); |
| 429 test_util::RunBlockingPoolTask(); | 429 test_util::RunBlockingPoolTask(); |
| 430 EXPECT_EQ(GDATA_FILE_ERROR_NOT_A_DIRECTORY, error); | 430 EXPECT_EQ(GDATA_FILE_ERROR_NOT_A_DIRECTORY, error); |
| 431 EXPECT_FALSE(entries.get()); | 431 EXPECT_FALSE(entries.get()); |
| 432 } | 432 } |
| 433 | 433 |
| 434 TEST(GDataDirectoryServiceTest, GetEntryInfoPairByPaths) { | 434 TEST(DriveResourceMetadataTest, GetEntryInfoPairByPaths) { |
| 435 MessageLoopForUI message_loop; | 435 MessageLoopForUI message_loop; |
| 436 content::TestBrowserThread ui_thread(content::BrowserThread::UI, | 436 content::TestBrowserThread ui_thread(content::BrowserThread::UI, |
| 437 &message_loop); | 437 &message_loop); |
| 438 GDataDirectoryService directory_service; | 438 DriveResourceMetadata resource_metadata; |
| 439 InitDirectoryService(&directory_service); | 439 InitDirectoryService(&resource_metadata); |
| 440 | 440 |
| 441 // Confirm that existing two files are found. | 441 // Confirm that existing two files are found. |
| 442 scoped_ptr<EntryInfoPairResult> pair_result; | 442 scoped_ptr<EntryInfoPairResult> pair_result; |
| 443 directory_service.GetEntryInfoPairByPaths( | 443 resource_metadata.GetEntryInfoPairByPaths( |
| 444 FilePath::FromUTF8Unsafe("drive/dir1/file4"), | 444 FilePath::FromUTF8Unsafe("drive/dir1/file4"), |
| 445 FilePath::FromUTF8Unsafe("drive/dir1/file5"), | 445 FilePath::FromUTF8Unsafe("drive/dir1/file5"), |
| 446 base::Bind(&test_util::CopyResultsFromGetEntryInfoPairCallback, | 446 base::Bind(&test_util::CopyResultsFromGetEntryInfoPairCallback, |
| 447 &pair_result)); | 447 &pair_result)); |
| 448 test_util::RunBlockingPoolTask(); | 448 test_util::RunBlockingPoolTask(); |
| 449 // The first entry should be found. | 449 // The first entry should be found. |
| 450 EXPECT_EQ(GDATA_FILE_OK, pair_result->first.error); | 450 EXPECT_EQ(GDATA_FILE_OK, pair_result->first.error); |
| 451 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/file4"), | 451 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/file4"), |
| 452 pair_result->first.path); | 452 pair_result->first.path); |
| 453 ASSERT_TRUE(pair_result->first.proto.get()); | 453 ASSERT_TRUE(pair_result->first.proto.get()); |
| 454 EXPECT_EQ("file4", pair_result->first.proto->base_name()); | 454 EXPECT_EQ("file4", pair_result->first.proto->base_name()); |
| 455 // The second entry should be found. | 455 // The second entry should be found. |
| 456 EXPECT_EQ(GDATA_FILE_OK, pair_result->second.error); | 456 EXPECT_EQ(GDATA_FILE_OK, pair_result->second.error); |
| 457 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/file5"), | 457 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/file5"), |
| 458 pair_result->second.path); | 458 pair_result->second.path); |
| 459 ASSERT_TRUE(pair_result->second.proto.get()); | 459 ASSERT_TRUE(pair_result->second.proto.get()); |
| 460 EXPECT_EQ("file5", pair_result->second.proto->base_name()); | 460 EXPECT_EQ("file5", pair_result->second.proto->base_name()); |
| 461 | 461 |
| 462 // Confirm that the first non existent file is not found. | 462 // Confirm that the first non existent file is not found. |
| 463 pair_result.reset(); | 463 pair_result.reset(); |
| 464 directory_service.GetEntryInfoPairByPaths( | 464 resource_metadata.GetEntryInfoPairByPaths( |
| 465 FilePath::FromUTF8Unsafe("drive/dir1/non_existent"), | 465 FilePath::FromUTF8Unsafe("drive/dir1/non_existent"), |
| 466 FilePath::FromUTF8Unsafe("drive/dir1/file5"), | 466 FilePath::FromUTF8Unsafe("drive/dir1/file5"), |
| 467 base::Bind(&test_util::CopyResultsFromGetEntryInfoPairCallback, | 467 base::Bind(&test_util::CopyResultsFromGetEntryInfoPairCallback, |
| 468 &pair_result)); | 468 &pair_result)); |
| 469 test_util::RunBlockingPoolTask(); | 469 test_util::RunBlockingPoolTask(); |
| 470 // The first entry should not be found. | 470 // The first entry should not be found. |
| 471 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, pair_result->first.error); | 471 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, pair_result->first.error); |
| 472 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/non_existent"), | 472 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/non_existent"), |
| 473 pair_result->first.path); | 473 pair_result->first.path); |
| 474 ASSERT_FALSE(pair_result->first.proto.get()); | 474 ASSERT_FALSE(pair_result->first.proto.get()); |
| 475 // The second entry should not be found, because the first one failed. | 475 // The second entry should not be found, because the first one failed. |
| 476 EXPECT_EQ(GDATA_FILE_ERROR_FAILED, pair_result->second.error); | 476 EXPECT_EQ(GDATA_FILE_ERROR_FAILED, pair_result->second.error); |
| 477 EXPECT_EQ(FilePath(), pair_result->second.path); | 477 EXPECT_EQ(FilePath(), pair_result->second.path); |
| 478 ASSERT_FALSE(pair_result->second.proto.get()); | 478 ASSERT_FALSE(pair_result->second.proto.get()); |
| 479 | 479 |
| 480 // Confirm that the second non existent file is not found. | 480 // Confirm that the second non existent file is not found. |
| 481 pair_result.reset(); | 481 pair_result.reset(); |
| 482 directory_service.GetEntryInfoPairByPaths( | 482 resource_metadata.GetEntryInfoPairByPaths( |
| 483 FilePath::FromUTF8Unsafe("drive/dir1/file4"), | 483 FilePath::FromUTF8Unsafe("drive/dir1/file4"), |
| 484 FilePath::FromUTF8Unsafe("drive/dir1/non_existent"), | 484 FilePath::FromUTF8Unsafe("drive/dir1/non_existent"), |
| 485 base::Bind(&test_util::CopyResultsFromGetEntryInfoPairCallback, | 485 base::Bind(&test_util::CopyResultsFromGetEntryInfoPairCallback, |
| 486 &pair_result)); | 486 &pair_result)); |
| 487 test_util::RunBlockingPoolTask(); | 487 test_util::RunBlockingPoolTask(); |
| 488 // The first entry should be found. | 488 // The first entry should be found. |
| 489 EXPECT_EQ(GDATA_FILE_OK, pair_result->first.error); | 489 EXPECT_EQ(GDATA_FILE_OK, pair_result->first.error); |
| 490 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/file4"), | 490 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/file4"), |
| 491 pair_result->first.path); | 491 pair_result->first.path); |
| 492 ASSERT_TRUE(pair_result->first.proto.get()); | 492 ASSERT_TRUE(pair_result->first.proto.get()); |
| 493 EXPECT_EQ("file4", pair_result->first.proto->base_name()); | 493 EXPECT_EQ("file4", pair_result->first.proto->base_name()); |
| 494 // The second entry should not be found. | 494 // The second entry should not be found. |
| 495 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, pair_result->second.error); | 495 EXPECT_EQ(GDATA_FILE_ERROR_NOT_FOUND, pair_result->second.error); |
| 496 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/non_existent"), | 496 EXPECT_EQ(FilePath::FromUTF8Unsafe("drive/dir1/non_existent"), |
| 497 pair_result->second.path); | 497 pair_result->second.path); |
| 498 ASSERT_FALSE(pair_result->second.proto.get()); | 498 ASSERT_FALSE(pair_result->second.proto.get()); |
| 499 } | 499 } |
| 500 | 500 |
| 501 TEST(GDataDirectoryServiceTest, DBTest) { | 501 TEST(DriveResourceMetadataTest, DBTest) { |
| 502 MessageLoopForUI message_loop; | 502 MessageLoopForUI message_loop; |
| 503 content::TestBrowserThread ui_thread(content::BrowserThread::UI, | 503 content::TestBrowserThread ui_thread(content::BrowserThread::UI, |
| 504 &message_loop); | 504 &message_loop); |
| 505 | 505 |
| 506 scoped_ptr<TestingProfile> profile(new TestingProfile); | 506 scoped_ptr<TestingProfile> profile(new TestingProfile); |
| 507 scoped_refptr<base::SequencedWorkerPool> pool = | 507 scoped_refptr<base::SequencedWorkerPool> pool = |
| 508 content::BrowserThread::GetBlockingPool(); | 508 content::BrowserThread::GetBlockingPool(); |
| 509 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner = | 509 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner = |
| 510 pool->GetSequencedTaskRunner(pool->GetSequenceToken()); | 510 pool->GetSequencedTaskRunner(pool->GetSequenceToken()); |
| 511 | 511 |
| 512 GDataDirectoryService directory_service; | 512 DriveResourceMetadata resource_metadata; |
| 513 FilePath db_path(GDataCache::GetCacheRootPath(profile.get()). | 513 FilePath db_path(GDataCache::GetCacheRootPath(profile.get()). |
| 514 AppendASCII("meta").AppendASCII("resource_metadata.db")); | 514 AppendASCII("meta").AppendASCII("resource_metadata.db")); |
| 515 // InitFromDB should fail with GDATA_FILE_ERROR_NOT_FOUND since the db | 515 // InitFromDB should fail with GDATA_FILE_ERROR_NOT_FOUND since the db |
| 516 // doesn't exist. | 516 // doesn't exist. |
| 517 directory_service.InitFromDB(db_path, blocking_task_runner, | 517 resource_metadata.InitFromDB(db_path, blocking_task_runner, |
| 518 base::Bind(&InitFromDBCallback, GDATA_FILE_ERROR_NOT_FOUND)); | 518 base::Bind(&InitFromDBCallback, GDATA_FILE_ERROR_NOT_FOUND)); |
| 519 test_util::RunBlockingPoolTask(); | 519 test_util::RunBlockingPoolTask(); |
| 520 InitDirectoryService(&directory_service); | 520 InitDirectoryService(&resource_metadata); |
| 521 | 521 |
| 522 // Write the filesystem to db. | 522 // Write the filesystem to db. |
| 523 directory_service.SaveToDB(); | 523 resource_metadata.SaveToDB(); |
| 524 test_util::RunBlockingPoolTask(); | 524 test_util::RunBlockingPoolTask(); |
| 525 | 525 |
| 526 GDataDirectoryService directory_service2; | 526 DriveResourceMetadata resource_metadata2; |
| 527 // InitFromDB should succeed with GDATA_FILE_OK as the db now exists. | 527 // InitFromDB should succeed with GDATA_FILE_OK as the db now exists. |
| 528 directory_service2.InitFromDB(db_path, blocking_task_runner, | 528 resource_metadata2.InitFromDB(db_path, blocking_task_runner, |
| 529 base::Bind(&InitFromDBCallback, GDATA_FILE_OK)); | 529 base::Bind(&InitFromDBCallback, GDATA_FILE_OK)); |
| 530 test_util::RunBlockingPoolTask(); | 530 test_util::RunBlockingPoolTask(); |
| 531 | 531 |
| 532 VerifyDirectoryService(&directory_service2); | 532 VerifyDirectoryService(&resource_metadata2); |
| 533 } | 533 } |
| 534 | 534 |
| 535 } // namespace gdata | 535 } // namespace gdata |
| OLD | NEW |