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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc

Issue 22341005: [SyncFS] Delete old MetadataDatabase code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/metadata_database.proto ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 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/sync_file_system/drive_backend/metadata_database.h" 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/message_loop/message_loop_proxy.h" 10 #include "base/message_loop/message_loop_proxy.h"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "chrome/browser/google_apis/drive_api_parser.h" 12 #include "chrome/browser/google_apis/drive_api_parser.h"
13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "third_party/leveldatabase/src/include/leveldb/db.h" 15 #include "third_party/leveldatabase/src/include/leveldb/db.h"
16 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" 16 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
17 17
18 #define FPL(a) FILE_PATH_LITERAL(a) 18 #define FPL(a) FILE_PATH_LITERAL(a)
19 19
20 namespace sync_file_system { 20 namespace sync_file_system {
21 namespace drive_backend { 21 namespace drive_backend {
22 22
23 typedef MetadataDatabase::FileSet FileSet;
24 typedef MetadataDatabase::FileByFileID FileByFileID;
25 typedef MetadataDatabase::FilesByParent FilesByParent;
26 typedef MetadataDatabase::FileByParentAndTitle FileByParentAndTitle;
27 typedef MetadataDatabase::FileByAppID FileByAppID;
28
29 namespace { 23 namespace {
30 24
31 const int64 kInitialChangeID = 1234; 25 const int64 kInitialChangeID = 1234;
32 const char kSyncRootFolderID[] = "sync_root_folder_id";
33
34 void ExpectEquivalent(const DriveFileMetadata::Details* left,
35 const DriveFileMetadata::Details* right) {
36 EXPECT_EQ(left->title(), right->title());
37 EXPECT_EQ(left->kind(), right->kind());
38 EXPECT_EQ(left->md5(), right->md5());
39 EXPECT_EQ(left->etag(), right->etag());
40 EXPECT_EQ(left->creation_time(), right->creation_time());
41 EXPECT_EQ(left->modification_time(), right->modification_time());
42 EXPECT_EQ(left->deleted(), right->deleted());
43 EXPECT_EQ(left->change_id(), right->change_id());
44 }
45
46 void ExpectEquivalent(const DriveFileMetadata* left,
47 const DriveFileMetadata* right) {
48 EXPECT_EQ(left->file_id(), right->file_id());
49 EXPECT_EQ(left->parent_folder_id(), right->parent_folder_id());
50 EXPECT_EQ(left->app_id(), right->app_id());
51 EXPECT_EQ(left->is_app_root(), right->is_app_root());
52
53 {
54 SCOPED_TRACE("Expect equivalent synced_details.");
55 ExpectEquivalent(&left->synced_details(), &right->synced_details());
56 }
57
58 {
59 SCOPED_TRACE("Expect equivalent remote_details.");
60 ExpectEquivalent(&left->remote_details(), &right->remote_details());
61 }
62
63 EXPECT_EQ(left->dirty(), right->dirty());
64 EXPECT_EQ(left->active(), right->active());
65 EXPECT_EQ(left->needs_folder_listing(), right->needs_folder_listing());
66 }
67
68 template <typename Container>
69 void ExpectEquivalentMaps(const Container& left, const Container& right);
70 template <typename Key, typename Value, typename Compare>
71 void ExpectEquivalent(const std::map<Key, Value, Compare>& left,
72 const std::map<Key, Value, Compare>& right) {
73 ExpectEquivalentMaps(left, right);
74 }
75
76 template <typename Container>
77 void ExpectEquivalentSets(const Container& left, const Container& right);
78 template <typename Value, typename Compare>
79 void ExpectEquivalent(const std::set<Value, Compare>& left,
80 const std::set<Value, Compare>& right) {
81 return ExpectEquivalentSets(left, right);
82 }
83
84 template <typename Container>
85 void ExpectEquivalentMaps(const Container& left, const Container& right) {
86 ASSERT_EQ(left.size(), right.size());
87
88 typedef typename Container::const_iterator const_iterator;
89 const_iterator left_itr = left.begin();
90 const_iterator right_itr = right.begin();
91 while (left_itr != left.end()) {
92 EXPECT_EQ(left_itr->first, right_itr->first);
93 ExpectEquivalent(left_itr->second, right_itr->second);
94 ++left_itr;
95 ++right_itr;
96 }
97 }
98
99 template <typename Container>
100 void ExpectEquivalentSets(const Container& left, const Container& right) {
101 ASSERT_EQ(left.size(), right.size());
102
103 typedef typename Container::const_iterator const_iterator;
104 const_iterator left_itr = left.begin();
105 const_iterator right_itr = right.begin();
106 while (left_itr != left.end()) {
107 ExpectEquivalent(*left_itr, *right_itr);
108 ++left_itr;
109 ++right_itr;
110 }
111 }
112 26
113 void SyncStatusResultCallback(SyncStatusCode* status_out, 27 void SyncStatusResultCallback(SyncStatusCode* status_out,
114 SyncStatusCode status) { 28 SyncStatusCode status) {
115 EXPECT_EQ(SYNC_STATUS_UNKNOWN, *status_out); 29 EXPECT_EQ(SYNC_STATUS_UNKNOWN, *status_out);
116 *status_out = status; 30 *status_out = status;
117 } 31 }
118 32
119 void DatabaseCreateResultCallback(SyncStatusCode* status_out, 33 void DatabaseCreateResultCallback(SyncStatusCode* status_out,
120 scoped_ptr<MetadataDatabase>* database_out, 34 scoped_ptr<MetadataDatabase>* database_out,
121 SyncStatusCode status, 35 SyncStatusCode status,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 95
182 db->Put(leveldb::WriteOptions(), "VERSION", base::Int64ToString(3)); 96 db->Put(leveldb::WriteOptions(), "VERSION", base::Int64ToString(3));
183 SetUpServiceMetadata(db); 97 SetUpServiceMetadata(db);
184 98
185 return make_scoped_ptr(db); 99 return make_scoped_ptr(db);
186 } 100 }
187 101
188 void SetUpServiceMetadata(leveldb::DB* db) { 102 void SetUpServiceMetadata(leveldb::DB* db) {
189 ServiceMetadata service_metadata; 103 ServiceMetadata service_metadata;
190 service_metadata.set_largest_change_id(kInitialChangeID); 104 service_metadata.set_largest_change_id(kInitialChangeID);
191 service_metadata.set_sync_root_folder_id(kSyncRootFolderID);
192 std::string value; 105 std::string value;
193 ASSERT_TRUE(service_metadata.SerializeToString(&value)); 106 ASSERT_TRUE(service_metadata.SerializeToString(&value));
194 db->Put(leveldb::WriteOptions(), "SERVICE", value); 107 db->Put(leveldb::WriteOptions(), "SERVICE", value);
195 } 108 }
196 109
197 DriveFileMetadata CreateSyncRootMetadata() {
198 DriveFileMetadata sync_root;
199 sync_root.set_file_id(kSyncRootFolderID);
200 sync_root.set_parent_folder_id(std::string());
201 sync_root.mutable_synced_details()->set_title("Chrome Syncable FileSystem");
202 sync_root.mutable_synced_details()->set_kind(KIND_FOLDER);
203 sync_root.set_active(true);
204 sync_root.set_dirty(false);
205 return sync_root;
206 }
207
208 DriveFileMetadata CreateAppRootMetadata(const DriveFileMetadata& sync_root,
209 const std::string& app_id) {
210 DriveFileMetadata app_root(
211 CreateFolderMetadata(sync_root, app_id /* title */));
212 app_root.set_app_id(app_id);
213 app_root.set_is_app_root(true);
214 return app_root;
215 }
216
217 DriveFileMetadata CreateUnknownFileMetadata(const DriveFileMetadata& parent) {
218 DriveFileMetadata file;
219 file.set_file_id(GenerateFileID());
220 file.set_parent_folder_id(parent.file_id());
221 file.set_app_id(parent.app_id());
222 file.set_is_app_root(false);
223 return file;
224 }
225
226 DriveFileMetadata CreateFileMetadata(const DriveFileMetadata& parent,
227 const std::string& title) {
228 DriveFileMetadata file(CreateUnknownFileMetadata(parent));
229 file.mutable_synced_details()->add_parent_folder_id(parent.file_id());
230 file.mutable_synced_details()->set_title(title);
231 file.mutable_synced_details()->set_kind(KIND_FILE);
232 file.mutable_synced_details()->set_md5(
233 "md5_value_" + base::Int64ToString(next_md5_sequence_number_++));
234 file.set_active(true);
235 file.set_dirty(false);
236 return file;
237 }
238
239 DriveFileMetadata CreateFolderMetadata(const DriveFileMetadata& parent,
240 const std::string& title) {
241 DriveFileMetadata folder(CreateUnknownFileMetadata(parent));
242 folder.mutable_synced_details()->add_parent_folder_id(parent.file_id());
243 folder.mutable_synced_details()->set_title(title);
244 folder.mutable_synced_details()->set_kind(KIND_FOLDER);
245 folder.set_active(true);
246 folder.set_dirty(false);
247 return folder;
248 }
249
250 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata(
251 const DriveFileMetadata& file) {
252 scoped_ptr<google_apis::ChangeResource> change(
253 new google_apis::ChangeResource);
254 change->set_change_id(file.remote_details().change_id());
255 change->set_file_id(file.file_id());
256 change->set_deleted(file.remote_details().deleted());
257 if (change->is_deleted())
258 return change.Pass();
259
260 scoped_ptr<google_apis::FileResource> file_resource(
261 new google_apis::FileResource);
262 ScopedVector<google_apis::ParentReference> parents;
263 for (int i = 0; i < file.remote_details().parent_folder_id_size(); ++i) {
264 scoped_ptr<google_apis::ParentReference> parent(
265 new google_apis::ParentReference);
266 parent->set_file_id(file.remote_details().parent_folder_id(i));
267 parents.push_back(parent.release());
268 }
269
270 file_resource->set_file_id(file.file_id());
271 file_resource->set_parents(&parents);
272 file_resource->set_title(file.remote_details().title());
273 if (file.remote_details().kind() == KIND_FOLDER)
274 file_resource->set_mime_type("application/vnd.google-apps.folder");
275 else if (file.remote_details().kind() == KIND_FILE)
276 file_resource->set_mime_type("text/plain");
277 else
278 file_resource->set_mime_type("application/vnd.google-apps.document");
279 file_resource->set_md5_checksum(file.remote_details().md5());
280 file_resource->set_etag(file.remote_details().etag());
281 file_resource->set_created_date(base::Time::FromInternalValue(
282 file.remote_details().creation_time()));
283 file_resource->set_modified_date(base::Time::FromInternalValue(
284 file.remote_details().modification_time()));
285
286 change->set_file(file_resource.Pass());
287 return change.Pass();
288 }
289
290 void ApplyRenameChangeToMetadata(const std::string& new_title,
291 DriveFileMetadata* file) {
292 DriveFileMetadata::Details* details = file->mutable_remote_details();
293 *details = file->synced_details();
294 details->set_title(new_title);
295 details->set_change_id(next_change_id_++);
296 file->set_dirty(true);
297 }
298
299 void ApplyReorganizeChangeToMetadata(const std::string& new_parent,
300 DriveFileMetadata* file) {
301 DriveFileMetadata::Details* details = file->mutable_remote_details();
302 *details = file->synced_details();
303 details->clear_parent_folder_id();
304 details->add_parent_folder_id(new_parent);
305 details->set_change_id(next_change_id_++);
306 file->set_dirty(true);
307 }
308
309 void ApplyContentChangeToMetadata(DriveFileMetadata* file) {
310 DriveFileMetadata::Details* details = file->mutable_remote_details();
311 *details = file->synced_details();
312 details->set_md5(
313 "md5_value_" + base::Int64ToString(next_md5_sequence_number_++));
314 details->set_change_id(next_change_id_++);
315 file->set_dirty(true);
316 }
317
318 void ApplyNoopChangeToMetadata(DriveFileMetadata* file) {
319 *file->mutable_remote_details() = file->synced_details();
320 file->mutable_remote_details()->set_change_id(next_change_id_++);
321 file->set_dirty(true);
322 }
323
324 void ApplyNewFileChangeToMetadata(DriveFileMetadata* file) {
325 *file->mutable_remote_details() = file->synced_details();
326 file->clear_synced_details();
327 file->mutable_remote_details()->set_change_id(next_change_id_++);
328 file->set_active(false);
329 file->set_dirty(true);
330 }
331
332 void PushToChangeList(scoped_ptr<google_apis::ChangeResource> change, 110 void PushToChangeList(scoped_ptr<google_apis::ChangeResource> change,
333 ScopedVector<google_apis::ChangeResource>* changes) { 111 ScopedVector<google_apis::ChangeResource>* changes) {
334 changes->push_back(change.release()); 112 changes->push_back(change.release());
335 } 113 }
336 114
337 leveldb::Status PutFileToDB(leveldb::DB* db, const DriveFileMetadata& file) {
338 std::string key = "FILE: " + file.file_id();
339 std::string value;
340 file.SerializeToString(&value);
341 return db->Put(leveldb::WriteOptions(), key, value);
342 }
343
344 void VerifyReloadConsistency() {
345 scoped_ptr<MetadataDatabase> metadata_database_2;
346 ASSERT_EQ(SYNC_STATUS_OK,
347 MetadataDatabase::CreateForTesting(
348 metadata_database_->db_.Pass(),
349 &metadata_database_2));
350 metadata_database_->db_ = metadata_database_2->db_.Pass();
351
352 {
353 SCOPED_TRACE("Expect equivalent file_by_file_id_ contents.");
354 ExpectEquivalent(metadata_database_->file_by_file_id_,
355 metadata_database_2->file_by_file_id_);
356 }
357
358 {
359 SCOPED_TRACE("Expect equivalent files_by_parent_ contents.");
360 ExpectEquivalent(metadata_database_->files_by_parent_,
361 metadata_database_2->files_by_parent_);
362 }
363
364 {
365 SCOPED_TRACE("Expect equivalent app_root_by_app_id_ contents.");
366 ExpectEquivalent(metadata_database_->app_root_by_app_id_,
367 metadata_database_2->app_root_by_app_id_);
368 }
369
370 {
371 SCOPED_TRACE("Expect equivalent"
372 " active_file_by_parent_and_title_ contents.");
373 ExpectEquivalent(metadata_database_->active_file_by_parent_and_title_,
374 metadata_database_2->active_file_by_parent_and_title_);
375 }
376
377 {
378 SCOPED_TRACE("Expect equivalent dirty_files_ contents.");
379 ExpectEquivalent(metadata_database_->dirty_files_,
380 metadata_database_2->dirty_files_);
381 }
382 }
383
384 void VerifyFile(const DriveFileMetadata& file) {
385 DriveFileMetadata file_in_metadata_db;
386 ASSERT_TRUE(metadata_database()->FindFileByFileID(
387 file.file_id(), &file_in_metadata_db));
388
389 SCOPED_TRACE("Expect equivalent " + file.file_id());
390 ExpectEquivalent(&file, &file_in_metadata_db);
391 }
392
393 SyncStatusCode RegisterApp(const std::string& app_id, 115 SyncStatusCode RegisterApp(const std::string& app_id,
394 const std::string& folder_id) { 116 const std::string& folder_id) {
395 SyncStatusCode status = SYNC_STATUS_UNKNOWN; 117 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
396 metadata_database_->RegisterApp( 118 metadata_database_->RegisterApp(
397 app_id, folder_id, 119 app_id, folder_id,
398 base::Bind(&SyncStatusResultCallback, &status)); 120 base::Bind(&SyncStatusResultCallback, &status));
399 message_loop_.RunUntilIdle(); 121 message_loop_.RunUntilIdle();
400 return status; 122 return status;
401 } 123 }
402 124
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 162
441 scoped_ptr<MetadataDatabase> metadata_database_; 163 scoped_ptr<MetadataDatabase> metadata_database_;
442 164
443 int64 next_change_id_; 165 int64 next_change_id_;
444 int64 next_file_id_number_; 166 int64 next_file_id_number_;
445 int64 next_md5_sequence_number_; 167 int64 next_md5_sequence_number_;
446 168
447 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseTest); 169 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseTest);
448 }; 170 };
449 171
450 TEST_F(MetadataDatabaseTest, InitializationTest_Empty) {
451 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
452 DropDatabase();
453 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
454 }
455
456 TEST_F(MetadataDatabaseTest, InitializationTest_SimpleTree) {
457 std::string app_id = "app_id";
458 DriveFileMetadata sync_root(CreateSyncRootMetadata());
459 DriveFileMetadata app_root(CreateAppRootMetadata(sync_root, "app_id"));
460 DriveFileMetadata file(CreateFileMetadata(app_root, "file"));
461 DriveFileMetadata folder(CreateFolderMetadata(app_root, "folder"));
462 DriveFileMetadata file_in_folder(
463 CreateFileMetadata(folder, "file_in_folder"));
464 DriveFileMetadata orphaned(CreateUnknownFileMetadata(sync_root));
465 orphaned.set_parent_folder_id(std::string());
466
467 {
468 scoped_ptr<leveldb::DB> db = InitializeLevelDB();
469 ASSERT_TRUE(db);
470
471 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok());
472 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok());
473 EXPECT_TRUE(PutFileToDB(db.get(), file).ok());
474 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok());
475 EXPECT_TRUE(PutFileToDB(db.get(), file_in_folder).ok());
476 EXPECT_TRUE(PutFileToDB(db.get(), orphaned).ok());
477 }
478
479 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
480
481 VerifyFile(sync_root);
482 VerifyFile(app_root);
483 VerifyFile(file);
484 VerifyFile(folder);
485 VerifyFile(file_in_folder);
486 EXPECT_FALSE(metadata_database()->FindFileByFileID(orphaned.file_id(), NULL));
487 }
488
489 TEST_F(MetadataDatabaseTest, AppManagementTest) {
490 DriveFileMetadata sync_root(CreateSyncRootMetadata());
491 DriveFileMetadata app_root(CreateAppRootMetadata(sync_root, "app_id"));
492 DriveFileMetadata folder(CreateFolderMetadata(sync_root, "folder"));
493 folder.set_active(false);
494
495 {
496 scoped_ptr<leveldb::DB> db = InitializeLevelDB();
497 ASSERT_TRUE(db);
498
499 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok());
500 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok());
501 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok());
502 }
503
504 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
505 VerifyFile(sync_root);
506 VerifyFile(app_root);
507 VerifyFile(folder);
508
509 folder.set_app_id("foo");
510 EXPECT_EQ(SYNC_STATUS_OK, RegisterApp(folder.app_id(), folder.file_id()));
511
512 folder.set_is_app_root(true);
513 folder.set_active(true);
514 folder.set_dirty(true);
515 folder.set_needs_folder_listing(true);
516 VerifyFile(folder);
517 VerifyReloadConsistency();
518
519 EXPECT_EQ(SYNC_STATUS_OK, DisableApp(folder.app_id()));
520 folder.set_active(false);
521 VerifyFile(folder);
522 VerifyReloadConsistency();
523
524 EXPECT_EQ(SYNC_STATUS_OK, EnableApp(folder.app_id()));
525 folder.set_active(true);
526 VerifyFile(folder);
527 VerifyReloadConsistency();
528
529 EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(folder.app_id()));
530 folder.set_app_id(std::string());
531 folder.set_is_app_root(false);
532 folder.set_active(false);
533 VerifyFile(folder);
534 VerifyReloadConsistency();
535 }
536
537 TEST_F(MetadataDatabaseTest, BuildPathTest) {
538 DriveFileMetadata sync_root(CreateSyncRootMetadata());
539 DriveFileMetadata app_root(
540 CreateAppRootMetadata(sync_root, "app_id"));
541 DriveFileMetadata folder(CreateFolderMetadata(app_root, "folder"));
542 DriveFileMetadata file(CreateFolderMetadata(folder, "file"));
543 DriveFileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder"));
544
545 {
546 scoped_ptr<leveldb::DB> db = InitializeLevelDB();
547 ASSERT_TRUE(db);
548
549 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok());
550 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok());
551 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok());
552 EXPECT_TRUE(PutFileToDB(db.get(), file).ok());
553 }
554
555 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
556
557 base::FilePath path;
558 EXPECT_FALSE(metadata_database()->BuildPathForFile(sync_root.file_id(),
559 &path));
560 EXPECT_TRUE(metadata_database()->BuildPathForFile(app_root.file_id(), &path));
561 EXPECT_EQ(base::FilePath(FPL("/")).NormalizePathSeparators(),
562 path);
563 EXPECT_TRUE(metadata_database()->BuildPathForFile(file.file_id(), &path));
564 EXPECT_EQ(base::FilePath(FPL("/folder/file")).NormalizePathSeparators(),
565 path);
566 }
567
568 TEST_F(MetadataDatabaseTest, UpdateByChangeListTest) {
569 DriveFileMetadata sync_root(CreateSyncRootMetadata());
570 DriveFileMetadata app_root(CreateAppRootMetadata(sync_root, "app_id"));
571 DriveFileMetadata disabled_app_root(
572 CreateAppRootMetadata(sync_root, "disabled_app"));
573 DriveFileMetadata file(CreateFileMetadata(app_root, "file"));
574 DriveFileMetadata renamed_file(CreateFileMetadata(app_root, "to be renamed"));
575 DriveFileMetadata folder(CreateFolderMetadata(app_root, "folder"));
576 DriveFileMetadata reorganized_file(
577 CreateFileMetadata(app_root, "to be reorganized"));
578 DriveFileMetadata updated_file(CreateFileMetadata(app_root, "to be updated"));
579 DriveFileMetadata noop_file(CreateFileMetadata(app_root, "have noop change"));
580 DriveFileMetadata new_file(CreateFileMetadata(app_root, "to be added later"));
581
582 {
583 scoped_ptr<leveldb::DB> db = InitializeLevelDB();
584 ASSERT_TRUE(db);
585
586 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok());
587 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok());
588 EXPECT_TRUE(PutFileToDB(db.get(), disabled_app_root).ok());
589 EXPECT_TRUE(PutFileToDB(db.get(), file).ok());
590 EXPECT_TRUE(PutFileToDB(db.get(), renamed_file).ok());
591 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok());
592 EXPECT_TRUE(PutFileToDB(db.get(), reorganized_file).ok());
593 EXPECT_TRUE(PutFileToDB(db.get(), updated_file).ok());
594 EXPECT_TRUE(PutFileToDB(db.get(), noop_file).ok());
595 }
596
597 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
598
599 ApplyRenameChangeToMetadata("renamed", &renamed_file);
600 ApplyReorganizeChangeToMetadata(folder.file_id(), &reorganized_file);
601 ApplyContentChangeToMetadata(&updated_file);
602 ApplyNoopChangeToMetadata(&noop_file);
603 ApplyNewFileChangeToMetadata(&new_file);
604
605 ScopedVector<google_apis::ChangeResource> changes;
606 PushToChangeList(CreateChangeResourceFromMetadata(renamed_file), &changes);
607 PushToChangeList(CreateChangeResourceFromMetadata(
608 reorganized_file), &changes);
609 PushToChangeList(CreateChangeResourceFromMetadata(updated_file), &changes);
610 PushToChangeList(CreateChangeResourceFromMetadata(noop_file), &changes);
611 PushToChangeList(CreateChangeResourceFromMetadata(new_file), &changes);
612 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass()));
613
614 VerifyFile(sync_root);
615 VerifyFile(app_root);
616 VerifyFile(disabled_app_root);
617 VerifyFile(file);
618 VerifyFile(renamed_file);
619 VerifyFile(folder);
620 VerifyFile(reorganized_file);
621 VerifyFile(updated_file);
622 VerifyFile(noop_file);
623 VerifyFile(new_file);
624 VerifyReloadConsistency();
625 }
626
627 } // namespace drive_backend 172 } // namespace drive_backend
628 } // namespace sync_file_system 173 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/metadata_database.proto ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698