1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/sync_file_system/drive_backend_v1/drive_metadata_store.h"
9 #include "base/files/file_path.h"
10 #include "base/files/scoped_temp_dir.h"
11 #include "base/message_loop/message_loop.h"
12 #include "base/single_thread_task_runner.h"
13 #include "base/stl_util.h"
14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_util.h"
16 #include "base/threading/thread.h"
17 #include "base/values.h"
18 #include "chrome/browser/sync_file_system/drive_backend/metadata_db_migration_util.h"
19 #include "chrome/browser/sync_file_system/drive_backend_v1/drive_file_sync_service.h"
20 #include "chrome/browser/sync_file_system/drive_backend_v1/drive_file_sync_util.h"
21 #include "chrome/browser/sync_file_system/sync_file_system.pb.h"
22 #include "chrome/browser/sync_file_system/syncable_file_system_util.h"
23 #include "content/public/browser/browser_thread.h"
24 #include "testing/gtest/include/gtest/gtest.h"
25 #include "third_party/leveldatabase/src/include/leveldb/db.h"
26 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
27 #include "webkit/browser/fileapi/isolated_context.h"
29 #define FPL FILE_PATH_LITERAL
31 using content::BrowserThread;
33 namespace sync_file_system {
37 const char kOrigin[] = "chrome-extension://example";
39 typedef DriveMetadataStore::ResourceIdByOrigin ResourceIdByOrigin;
40 typedef DriveMetadataStore::OriginByResourceId OriginByResourceId;
42 fileapi::FileSystemURL URL(const base::FilePath& path) {
43 return CreateSyncableFileSystemURL(GURL(kOrigin), path);
46 std::string GetResourceID(const ResourceIdByOrigin& sync_origins,
48 ResourceIdByOrigin::const_iterator itr = sync_origins.find(origin);
49 if (itr == sync_origins.end())
54 std::string CreateResourceId(const std::string& resource_id) {
55 return IsDriveAPIDisabled() ? resource_id
56 : drive_backend::RemoveWapiIdPrefix(resource_id);
59 DriveMetadata CreateMetadata(const std::string& resource_id,
60 const std::string& md5_checksum,
63 DriveMetadata_ResourceType file_type) {
64 DriveMetadata metadata;
65 metadata.set_resource_id(CreateResourceId(resource_id));
66 metadata.set_md5_checksum(md5_checksum);
67 metadata.set_conflicted(conflicted);
68 metadata.set_to_be_fetched(to_be_fetched);
69 metadata.set_type(file_type);
75 class DriveMetadataStoreTest : public testing::Test {
77 DriveMetadataStoreTest()
80 virtual ~DriveMetadataStoreTest() {}
82 virtual void SetUp() OVERRIDE {
83 file_thread_.reset(new base::Thread("Thread_File"));
84 file_thread_->Start();
86 ui_task_runner_ = base::MessageLoopProxy::current();
87 file_task_runner_ = file_thread_->message_loop_proxy();
89 ASSERT_TRUE(base_dir_.CreateUniqueTempDir());
90 RegisterSyncableFileSystem();
93 virtual void TearDown() OVERRIDE {
94 SetDisableDriveAPI(false);
95 RevokeSyncableFileSystem();
99 message_loop_.RunUntilIdle();
103 void InitializeDatabase() {
104 EXPECT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread());
107 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
108 bool created = false;
110 drive_metadata_store_.reset(
111 new DriveMetadataStore(base_dir_.path(), file_task_runner_.get()));
112 drive_metadata_store_->Initialize(
113 base::Bind(&DriveMetadataStoreTest::DidInitializeDatabase,
114 base::Unretained(this),
121 EXPECT_EQ(SYNC_STATUS_OK, status);
124 EXPECT_FALSE(created_);
128 EXPECT_TRUE(created_);
131 void DropDatabase() {
132 EXPECT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread());
133 drive_metadata_store_.reset();
136 SyncStatusCode EnableOrigin(const GURL& origin) {
137 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
138 drive_metadata_store_->EnableOrigin(
139 origin, base::Bind(&DriveMetadataStoreTest::DidFinishDBTask,
140 base::Unretained(this), &status));
145 SyncStatusCode DisableOrigin(const GURL& origin) {
146 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
147 drive_metadata_store_->DisableOrigin(
148 origin, base::Bind(&DriveMetadataStoreTest::DidFinishDBTask,
149 base::Unretained(this), &status));
154 SyncStatusCode RemoveOrigin(const GURL& url) {
155 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
156 drive_metadata_store_->RemoveOrigin(
157 url, base::Bind(&DriveMetadataStoreTest::DidFinishDBTask,
158 base::Unretained(this), &status));
163 SyncStatusCode UpdateEntry(const fileapi::FileSystemURL& url,
164 const DriveMetadata& metadata) {
165 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
166 drive_metadata_store_->UpdateEntry(
168 base::Bind(&DriveMetadataStoreTest::DidFinishDBTask,
169 base::Unretained(this), &status));
174 SyncStatusCode DeleteEntry(const fileapi::FileSystemURL& url) {
175 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
176 drive_metadata_store_->DeleteEntry(
178 base::Bind(&DriveMetadataStoreTest::DidFinishDBTask,
179 base::Unretained(this), &status));
184 SyncStatusCode SetLargestChangeStamp(int64 changestamp) {
185 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
186 drive_metadata_store_->SetLargestChangeStamp(
187 changestamp, base::Bind(&DriveMetadataStoreTest::DidFinishDBTask,
188 base::Unretained(this), &status));
193 void DidFinishDBTask(SyncStatusCode* status_out,
194 SyncStatusCode status) {
195 *status_out = status;
196 message_loop_.Quit();
199 void MarkAsCreated() {
203 void VerifyUntrackedOrigin(const GURL& origin) {
204 EXPECT_FALSE(metadata_store()->IsIncrementalSyncOrigin(origin));
205 EXPECT_FALSE(metadata_store()->IsOriginDisabled(origin));
208 void VerifyIncrementalSyncOrigin(const GURL& origin,
209 const std::string& resource_id) {
210 EXPECT_TRUE(metadata_store()->IsIncrementalSyncOrigin(origin));
211 EXPECT_FALSE(metadata_store()->IsOriginDisabled(origin));
212 EXPECT_EQ(resource_id,
213 GetResourceID(metadata_store()->incremental_sync_origins(),
217 void VerifyDisabledOrigin(const GURL& origin,
218 const std::string& resource_id) {
219 EXPECT_FALSE(metadata_store()->IsIncrementalSyncOrigin(origin));
220 EXPECT_TRUE(metadata_store()->IsOriginDisabled(origin));
221 EXPECT_EQ(resource_id,
222 GetResourceID(metadata_store()->disabled_origins(), origin));
225 base::FilePath base_dir() {
226 return base_dir_.path();
229 DriveMetadataStore* metadata_store() {
230 return drive_metadata_store_.get();
233 leveldb::DB* metadata_db() {
234 return drive_metadata_store_->GetDBInstanceForTesting();
237 const DriveMetadataStore::MetadataMap& metadata_map() {
238 return drive_metadata_store_->metadata_map_;
241 void VerifyReverseMap() {
242 const ResourceIdByOrigin& incremental_sync_origins =
243 drive_metadata_store_->incremental_sync_origins_;
244 const ResourceIdByOrigin& disabled_origins =
245 drive_metadata_store_->disabled_origins_;
246 const OriginByResourceId& origin_by_resource_id =
247 drive_metadata_store_->origin_by_resource_id_;
249 size_t expected_size = incremental_sync_origins.size() +
250 disabled_origins.size();
251 size_t actual_size = origin_by_resource_id.size();
252 EXPECT_EQ(expected_size, actual_size);
253 EXPECT_TRUE(VerifyReverseMapInclusion(incremental_sync_origins,
254 origin_by_resource_id));
255 EXPECT_TRUE(VerifyReverseMapInclusion(disabled_origins,
256 origin_by_resource_id));
259 void ReadWrite_Body();
260 void GetConflictURLs_Body();
261 void GetToBeFetchedFiles_Body();
262 void StoreSyncRootDirectory_Body();
263 void StoreSyncOrigin_Body();
264 void DisableOrigin_Body();
265 void RemoveOrigin_Body();
266 void GetResourceIdForOrigin_Body();
267 void ResetOriginRootDirectory_Body();
268 void GetFileMetadataMap_Body();
271 void DidInitializeDatabase(bool* done_out,
272 SyncStatusCode* status_out,
274 SyncStatusCode status,
277 *status_out = status;
278 *created_out = created;
279 message_loop_.Quit();
282 bool VerifyReverseMapInclusion(const ResourceIdByOrigin& left,
283 const OriginByResourceId& right) {
284 for (ResourceIdByOrigin::const_iterator itr = left.begin();
285 itr != left.end(); ++itr) {
286 OriginByResourceId::const_iterator found = right.find(itr->second);
287 if (found == right.end() || found->second != itr->first)
293 base::ScopedTempDir base_dir_;
295 base::MessageLoop message_loop_;
296 scoped_ptr<base::Thread> file_thread_;
298 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
299 scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
301 scoped_ptr<DriveMetadataStore> drive_metadata_store_;
305 DISALLOW_COPY_AND_ASSIGN(DriveMetadataStoreTest);
308 void DriveMetadataStoreTest::ReadWrite_Body() {
309 InitializeDatabase();
311 const fileapi::FileSystemURL url = URL(base::FilePath());
312 DriveMetadata metadata;
313 EXPECT_EQ(SYNC_DATABASE_ERROR_NOT_FOUND,
314 metadata_store()->ReadEntry(url, &metadata));
316 metadata = CreateMetadata(
317 "file:1234567890", "09876543210", true, false,
318 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE);
319 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(url, metadata));
320 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1));
323 InitializeDatabase();
325 EXPECT_EQ(1, metadata_store()->GetLargestChangeStamp());
327 DriveMetadata metadata2;
328 EXPECT_EQ(SYNC_STATUS_OK,
329 metadata_store()->ReadEntry(url, &metadata2));
330 EXPECT_EQ(metadata.resource_id(), metadata2.resource_id());
331 EXPECT_EQ(metadata.md5_checksum(), metadata2.md5_checksum());
332 EXPECT_EQ(metadata.conflicted(), metadata2.conflicted());
334 EXPECT_EQ(SYNC_STATUS_OK, DeleteEntry(url));
335 EXPECT_EQ(SYNC_DATABASE_ERROR_NOT_FOUND,
336 metadata_store()->ReadEntry(url, &metadata));
337 EXPECT_EQ(SYNC_DATABASE_ERROR_NOT_FOUND, DeleteEntry(url));
342 void DriveMetadataStoreTest::GetConflictURLs_Body() {
343 InitializeDatabase();
345 fileapi::FileSystemURLSet urls;
346 EXPECT_EQ(SYNC_STATUS_OK, metadata_store()->GetConflictURLs(&urls));
347 EXPECT_EQ(0U, urls.size());
349 const base::FilePath path1(FPL("file1"));
350 const base::FilePath path2(FPL("file2"));
351 const base::FilePath path3(FPL("file3"));
353 // Populate metadata in DriveMetadataStore. The metadata identified by "file2"
354 // and "file3" are marked as conflicted.
355 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
357 CreateMetadata("file:1", "1", false, false,
358 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)));
359 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
361 CreateMetadata("file:2", "2", true, false,
362 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)));
363 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
365 CreateMetadata("file:3", "3", true, false,
366 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)));
368 EXPECT_EQ(SYNC_STATUS_OK, metadata_store()->GetConflictURLs(&urls));
369 EXPECT_EQ(2U, urls.size());
370 EXPECT_FALSE(ContainsKey(urls, URL(path1)));
371 EXPECT_TRUE(ContainsKey(urls, URL(path2)));
372 EXPECT_TRUE(ContainsKey(urls, URL(path3)));
377 void DriveMetadataStoreTest::GetToBeFetchedFiles_Body() {
378 InitializeDatabase();
380 DriveMetadataStore::URLAndDriveMetadataList list;
381 EXPECT_EQ(SYNC_STATUS_OK, metadata_store()->GetToBeFetchedFiles(&list));
382 EXPECT_TRUE(list.empty());
384 const base::FilePath path1(FPL("file1"));
385 const base::FilePath path2(FPL("file2"));
386 const base::FilePath path3(FPL("file3"));
388 // Populate metadata in DriveMetadataStore. The metadata identified by "file2"
389 // and "file3" are marked to be fetched.
390 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
392 CreateMetadata("file:1", "1", false, false,
393 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)));
394 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
396 CreateMetadata("file:2", "2", false, true,
397 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)));
398 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
400 CreateMetadata("file:3", "3", false, true,
401 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)));
403 EXPECT_EQ(SYNC_STATUS_OK,
404 metadata_store()->GetToBeFetchedFiles(&list));
405 EXPECT_EQ(2U, list.size());
406 EXPECT_EQ(list[0].first, URL(path2));
407 EXPECT_EQ(list[1].first, URL(path3));
412 void DriveMetadataStoreTest::StoreSyncRootDirectory_Body() {
413 const std::string kResourceId(CreateResourceId("folder:hoge"));
415 InitializeDatabase();
416 EXPECT_TRUE(metadata_store()->sync_root_directory().empty());
418 metadata_store()->SetSyncRootDirectory(kResourceId);
419 EXPECT_EQ(kResourceId, metadata_store()->sync_root_directory());
422 InitializeDatabase();
423 EXPECT_EQ(kResourceId, metadata_store()->sync_root_directory());
426 void DriveMetadataStoreTest::StoreSyncOrigin_Body() {
427 const GURL kOrigin1("chrome-extension://example1");
428 const GURL kOrigin2("chrome-extension://example2");
429 const std::string kResourceId1(CreateResourceId("folder:hoge"));
430 const std::string kResourceId2(CreateResourceId("folder:fuga"));
432 InitializeDatabase();
434 // Make sure origins have not been marked yet.
435 VerifyUntrackedOrigin(kOrigin1);
436 VerifyUntrackedOrigin(kOrigin2);
438 // Mark origins as incremental sync origins.
439 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1);
440 metadata_store()->AddIncrementalSyncOrigin(kOrigin2, kResourceId2);
441 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1);
442 VerifyIncrementalSyncOrigin(kOrigin2, kResourceId2);
444 // Disabled origin 2, origin 1 should still be incremental.
445 DisableOrigin(kOrigin2);
446 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1);
447 VerifyDisabledOrigin(kOrigin2, kResourceId2);
450 InitializeDatabase();
452 // Make sure origins have been restored.
453 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1);
454 VerifyDisabledOrigin(kOrigin2, kResourceId2);
459 void DriveMetadataStoreTest::DisableOrigin_Body() {
460 const GURL kOrigin1("chrome-extension://example1");
461 const std::string kResourceId1(CreateResourceId("folder:hoge"));
463 InitializeDatabase();
464 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1));
466 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1);
467 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1);
469 DisableOrigin(kOrigin1);
470 VerifyDisabledOrigin(kOrigin1, kResourceId1);
472 // Re-enabled origins go back to DriveFileSyncService and are not tracked
473 // in DriveMetadataStore.
474 EnableOrigin(kOrigin1);
475 VerifyUntrackedOrigin(kOrigin1);
478 void DriveMetadataStoreTest::RemoveOrigin_Body() {
479 const GURL kOrigin1("chrome-extension://example1");
480 const GURL kOrigin2("chrome-extension://example2");
481 const GURL kOrigin3("chrome-extension://example3");
482 const std::string kResourceId1(CreateResourceId("folder:hogera"));
483 const std::string kResourceId2(CreateResourceId("folder:fugaga"));
484 const std::string kResourceId3(CreateResourceId("folder:piyopiyo"));
486 InitializeDatabase();
487 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1));
489 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1);
490 metadata_store()->AddIncrementalSyncOrigin(kOrigin2, kResourceId2);
491 metadata_store()->AddIncrementalSyncOrigin(kOrigin3, kResourceId3);
492 DisableOrigin(kOrigin3);
493 EXPECT_EQ(2u, metadata_store()->incremental_sync_origins().size());
494 EXPECT_EQ(1u, metadata_store()->disabled_origins().size());
496 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
497 CreateSyncableFileSystemURL(kOrigin1, base::FilePath(FPL("guf"))),
498 CreateMetadata("file:foo", "spam", false, false,
499 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)));
500 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
501 CreateSyncableFileSystemURL(kOrigin2, base::FilePath(FPL("mof"))),
502 CreateMetadata("file:bar", "ham", false, false,
503 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)));
504 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
505 CreateSyncableFileSystemURL(kOrigin3, base::FilePath(FPL("waf"))),
506 CreateMetadata("folder:baz", "egg", false, false,
507 DriveMetadata_ResourceType_RESOURCE_TYPE_FOLDER)));
509 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin2));
510 EXPECT_EQ(SYNC_STATUS_OK, RemoveOrigin(kOrigin3));
513 InitializeDatabase();
515 // kOrigin1 should be the only one left.
516 EXPECT_EQ(1u, metadata_store()->incremental_sync_origins().size());
517 EXPECT_EQ(0u, metadata_store()->disabled_origins().size());
518 EXPECT_TRUE(metadata_store()->IsIncrementalSyncOrigin(kOrigin1));
519 EXPECT_EQ(1u, metadata_map().size());
521 DriveMetadataStore::MetadataMap::const_iterator found =
522 metadata_map().find(kOrigin1);
523 EXPECT_TRUE(found != metadata_map().end() && found->second.size() == 1u);
528 void DriveMetadataStoreTest::GetResourceIdForOrigin_Body() {
529 const GURL kOrigin1("chrome-extension://example1");
530 const GURL kOrigin2("chrome-extension://example2");
531 const GURL kOrigin3("chrome-extension://example3");
532 const std::string kResourceId1(CreateResourceId("folder:hogera"));
533 const std::string kResourceId2(CreateResourceId("folder:fugaga"));
534 const std::string kResourceId3(CreateResourceId("folder:piyopiyo"));
536 InitializeDatabase();
537 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1));
538 metadata_store()->SetSyncRootDirectory(CreateResourceId("folder:root"));
540 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1);
541 metadata_store()->AddIncrementalSyncOrigin(kOrigin2, kResourceId2);
542 metadata_store()->AddIncrementalSyncOrigin(kOrigin3, kResourceId3);
543 DisableOrigin(kOrigin3);
545 EXPECT_EQ(kResourceId1, metadata_store()->GetResourceIdForOrigin(kOrigin1));
546 EXPECT_EQ(kResourceId2, metadata_store()->GetResourceIdForOrigin(kOrigin2));
547 EXPECT_EQ(kResourceId3, metadata_store()->GetResourceIdForOrigin(kOrigin3));
550 InitializeDatabase();
552 EXPECT_EQ(kResourceId1, metadata_store()->GetResourceIdForOrigin(kOrigin1));
553 EXPECT_EQ(kResourceId2, metadata_store()->GetResourceIdForOrigin(kOrigin2));
554 EXPECT_EQ(kResourceId3, metadata_store()->GetResourceIdForOrigin(kOrigin3));
556 // Resetting the root directory resource ID to empty makes any
557 // GetResourceIdForOrigin return an empty resource ID too, regardless of
558 // whether they are known origin or not.
559 metadata_store()->SetSyncRootDirectory(std::string());
560 EXPECT_TRUE(metadata_store()->GetResourceIdForOrigin(kOrigin1).empty());
561 EXPECT_TRUE(metadata_store()->GetResourceIdForOrigin(kOrigin2).empty());
562 EXPECT_TRUE(metadata_store()->GetResourceIdForOrigin(kOrigin3).empty());
564 // Make sure they're still known origins.
565 EXPECT_TRUE(metadata_store()->IsKnownOrigin(kOrigin1));
566 EXPECT_TRUE(metadata_store()->IsKnownOrigin(kOrigin2));
567 EXPECT_TRUE(metadata_store()->IsKnownOrigin(kOrigin3));
572 void DriveMetadataStoreTest::ResetOriginRootDirectory_Body() {
573 const GURL kOrigin1("chrome-extension://example1");
574 const std::string kResourceId1(CreateResourceId("folder:hoge"));
575 const std::string kResourceId2(CreateResourceId("folder:fuga"));
577 InitializeDatabase();
578 EXPECT_EQ(SYNC_STATUS_OK, SetLargestChangeStamp(1));
580 metadata_store()->AddIncrementalSyncOrigin(kOrigin1, kResourceId1);
581 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId1);
584 metadata_store()->SetOriginRootDirectory(kOrigin1, kResourceId2);
585 VerifyIncrementalSyncOrigin(kOrigin1, kResourceId2);
589 void DriveMetadataStoreTest::GetFileMetadataMap_Body() {
590 InitializeDatabase();
592 // Save one file and folder to the origin.
593 const base::FilePath file_path = base::FilePath(FPL("file_0"));
594 const base::FilePath folder_path = base::FilePath(FPL("folder_0"));
596 const GURL origin = GURL("chrome-extension://app_a");
597 const fileapi::FileSystemURL url_0 = CreateSyncableFileSystemURL(
599 const fileapi::FileSystemURL url_1 = CreateSyncableFileSystemURL(
600 origin, folder_path);
602 // Insert DrivaMetadata objects.
603 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
605 CreateMetadata("file:0", "1", false, false,
606 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)));
607 EXPECT_EQ(SYNC_STATUS_OK, UpdateEntry(
609 CreateMetadata("folder:0", "2", false, true,
610 DriveMetadata_ResourceType_RESOURCE_TYPE_FOLDER)));
612 // Check that DriveMetadata objects get mapped back to generalized
613 // FileMetadata objects.
614 scoped_ptr<base::ListValue> files = metadata_store()->DumpFiles(origin);
615 ASSERT_EQ(2u, files->GetSize());
617 base::DictionaryValue* file = NULL;
620 ASSERT_TRUE(files->GetDictionary(0, &file));
621 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0");
622 EXPECT_TRUE(file->GetString("type", &str) && str == "file");
623 EXPECT_TRUE(file->HasKey("details"));
625 ASSERT_TRUE(files->GetDictionary(1, &file));
626 EXPECT_TRUE(file->GetString("title", &str) && str == "folder_0");
627 EXPECT_TRUE(file->GetString("type", &str) && str == "folder");
628 EXPECT_TRUE(file->HasKey("details"));
631 TEST_F(DriveMetadataStoreTest, Initialization) {
632 ASSERT_FALSE(IsDriveAPIDisabled());
633 InitializeDatabase();
636 TEST_F(DriveMetadataStoreTest, Initialization_WAPI) {
637 SetDisableDriveAPI(true);
638 InitializeDatabase();
641 TEST_F(DriveMetadataStoreTest, ReadWrite) {
642 ASSERT_FALSE(IsDriveAPIDisabled());
646 TEST_F(DriveMetadataStoreTest, ReadWrite_WAPI) {
647 SetDisableDriveAPI(true);
651 TEST_F(DriveMetadataStoreTest, GetConflictURLs) {
652 ASSERT_FALSE(IsDriveAPIDisabled());
653 GetConflictURLs_Body();
656 TEST_F(DriveMetadataStoreTest, GetConflictURLs_WAPI) {
657 SetDisableDriveAPI(true);
658 GetConflictURLs_Body();
661 TEST_F(DriveMetadataStoreTest, GetToBeFetchedFiles) {
662 ASSERT_FALSE(IsDriveAPIDisabled());
663 GetToBeFetchedFiles_Body();
666 TEST_F(DriveMetadataStoreTest, GetToBeFetchedFiles_WAPI) {
667 SetDisableDriveAPI(true);
668 GetToBeFetchedFiles_Body();
671 TEST_F(DriveMetadataStoreTest, StoreSyncRootDirectory) {
672 ASSERT_FALSE(IsDriveAPIDisabled());
673 StoreSyncRootDirectory_Body();
676 TEST_F(DriveMetadataStoreTest, StoreSyncRootDirectory_WAPI) {
677 SetDisableDriveAPI(true);
678 StoreSyncRootDirectory_Body();
681 TEST_F(DriveMetadataStoreTest, StoreSyncOrigin) {
682 ASSERT_FALSE(IsDriveAPIDisabled());
683 StoreSyncOrigin_Body();
686 TEST_F(DriveMetadataStoreTest, StoreSyncOrigin_WAPI) {
687 SetDisableDriveAPI(true);
688 StoreSyncOrigin_Body();
691 TEST_F(DriveMetadataStoreTest, DisableOrigin) {
692 ASSERT_FALSE(IsDriveAPIDisabled());
693 DisableOrigin_Body();
696 TEST_F(DriveMetadataStoreTest, DisableOrigin_WAPI) {
697 SetDisableDriveAPI(true);
698 DisableOrigin_Body();
701 TEST_F(DriveMetadataStoreTest, RemoveOrigin) {
702 ASSERT_FALSE(IsDriveAPIDisabled());
706 TEST_F(DriveMetadataStoreTest, RemoveOrigin_WAPI) {
707 SetDisableDriveAPI(true);
711 TEST_F(DriveMetadataStoreTest, GetResourceIdForOrigin) {
712 ASSERT_FALSE(IsDriveAPIDisabled());
713 GetResourceIdForOrigin_Body();
716 TEST_F(DriveMetadataStoreTest, GetResourceIdForOrigin_WAPI) {
717 SetDisableDriveAPI(true);
718 GetResourceIdForOrigin_Body();
721 TEST_F(DriveMetadataStoreTest, ResetOriginRootDirectory) {
722 ASSERT_FALSE(IsDriveAPIDisabled());
723 ResetOriginRootDirectory_Body();
726 TEST_F(DriveMetadataStoreTest, ResetOriginRootDirectory_WAPI) {
727 SetDisableDriveAPI(true);
728 ResetOriginRootDirectory_Body();
731 TEST_F(DriveMetadataStoreTest, GetFileMetadataMap) {
732 ASSERT_FALSE(IsDriveAPIDisabled());
733 GetFileMetadataMap_Body();
736 TEST_F(DriveMetadataStoreTest, GetFileMetadataMap_WAPI) {
737 SetDisableDriveAPI(true);
738 GetFileMetadataMap_Body();
741 } // namespace sync_file_system