| OLD | NEW | 
|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 // Syncer unit tests. Unfortunately a lot of these tests | 5 // Syncer unit tests. Unfortunately a lot of these tests | 
| 6 // are outdated and need to be reworked and updated. | 6 // are outdated and need to be reworked and updated. | 
| 7 | 7 | 
| 8 #include <algorithm> | 8 #include <algorithm> | 
| 9 #include <limits> | 9 #include <limits> | 
| 10 #include <list> | 10 #include <list> | 
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 164       case SyncEngineEvent::SYNC_CYCLE_BEGIN: // Fall through. | 164       case SyncEngineEvent::SYNC_CYCLE_BEGIN: // Fall through. | 
| 165       case SyncEngineEvent::STATUS_CHANGED: | 165       case SyncEngineEvent::STATUS_CHANGED: | 
| 166       case SyncEngineEvent::SYNC_CYCLE_ENDED: | 166       case SyncEngineEvent::SYNC_CYCLE_ENDED: | 
| 167         return; | 167         return; | 
| 168       default: | 168       default: | 
| 169         CHECK(false) << "Handling unknown error type in unit tests!!"; | 169         CHECK(false) << "Handling unknown error type in unit tests!!"; | 
| 170     } | 170     } | 
| 171     saw_syncer_event_ = true; | 171     saw_syncer_event_ = true; | 
| 172   } | 172   } | 
| 173 | 173 | 
| 174   SyncSession* MakeSession() { | 174   void SyncShareNudge() { | 
| 175     ModelSafeRoutingInfo info; | 175     ModelSafeRoutingInfo info; | 
| 176     GetModelSafeRoutingInfo(&info); | 176     GetModelSafeRoutingInfo(&info); | 
| 177     ModelTypeInvalidationMap invalidation_map = | 177     ModelTypeInvalidationMap invalidation_map = | 
| 178         ModelSafeRoutingInfoToInvalidationMap(info, std::string()); | 178         ModelSafeRoutingInfoToInvalidationMap(info, std::string()); | 
| 179     sessions::SyncSourceInfo source_info(sync_pb::GetUpdatesCallerInfo::UNKNOWN, | 179     sessions::SyncSourceInfo source_info( | 
| 180                                          invalidation_map); | 180         sync_pb::GetUpdatesCallerInfo::LOCAL, | 
| 181     return new SyncSession(context_.get(), this, source_info); | 181         invalidation_map); | 
| 182   } | 182     // Use our dummy nudge tracker.  These tests won't notice that it hasn't | 
|  | 183     // been tracking anything. | 
|  | 184     session_.reset( | 
|  | 185         new SyncSession(context_.get(), this, source_info, &nudge_tracker_)); | 
| 183 | 186 | 
| 184   void SyncShareNudge() { |  | 
| 185     session_.reset(MakeSession()); |  | 
| 186     EXPECT_TRUE(syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END)); | 187     EXPECT_TRUE(syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END)); | 
| 187   } | 188   } | 
| 188 | 189 | 
| 189   void SyncShareConfigure() { | 190   void SyncShareConfigure() { | 
| 190     session_.reset(MakeSession()); | 191     ModelSafeRoutingInfo info; | 
|  | 192     GetModelSafeRoutingInfo(&info); | 
|  | 193     ModelTypeInvalidationMap invalidation_map = | 
|  | 194         ModelSafeRoutingInfoToInvalidationMap(info, std::string()); | 
|  | 195     sessions::SyncSourceInfo source_info( | 
|  | 196         sync_pb::GetUpdatesCallerInfo::RECONFIGURATION, | 
|  | 197         invalidation_map); | 
|  | 198     session_.reset(new SyncSession(context_.get(), this, source_info)); | 
| 191     EXPECT_TRUE( | 199     EXPECT_TRUE( | 
| 192         syncer_->SyncShare(session_.get(), DOWNLOAD_UPDATES, APPLY_UPDATES)); | 200         syncer_->SyncShare(session_.get(), DOWNLOAD_UPDATES, APPLY_UPDATES)); | 
| 193   } | 201   } | 
| 194 | 202 | 
| 195   virtual void SetUp() { | 203   virtual void SetUp() { | 
| 196     dir_maker_.SetUp(); | 204     dir_maker_.SetUp(); | 
| 197     mock_server_.reset(new MockConnectionManager(directory())); | 205     mock_server_.reset(new MockConnectionManager(directory())); | 
| 198     EnableDatatype(BOOKMARKS); | 206     EnableDatatype(BOOKMARKS); | 
| 199     EnableDatatype(NIGORI); | 207     EnableDatatype(NIGORI); | 
| 200     EnableDatatype(PREFERENCES); | 208     EnableDatatype(PREFERENCES); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 213 | 221 | 
| 214     context_.reset( | 222     context_.reset( | 
| 215         new SyncSessionContext( | 223         new SyncSessionContext( | 
| 216             mock_server_.get(), directory(), workers, | 224             mock_server_.get(), directory(), workers, | 
| 217             &extensions_activity_monitor_, throttled_data_type_tracker_.get(), | 225             &extensions_activity_monitor_, throttled_data_type_tracker_.get(), | 
| 218             listeners, NULL, &traffic_recorder_, | 226             listeners, NULL, &traffic_recorder_, | 
| 219             true,  // enable keystore encryption | 227             true,  // enable keystore encryption | 
| 220             "fake_invalidator_client_id")); | 228             "fake_invalidator_client_id")); | 
| 221     context_->set_routing_info(routing_info); | 229     context_->set_routing_info(routing_info); | 
| 222     syncer_ = new Syncer(); | 230     syncer_ = new Syncer(); | 
| 223     session_.reset(MakeSession()); |  | 
| 224 | 231 | 
| 225     syncable::ReadTransaction trans(FROM_HERE, directory()); | 232     syncable::ReadTransaction trans(FROM_HERE, directory()); | 
| 226     syncable::Directory::ChildHandles children; | 233     syncable::Directory::ChildHandles children; | 
| 227     directory()->GetChildHandlesById(&trans, trans.root_id(), &children); | 234     directory()->GetChildHandlesById(&trans, trans.root_id(), &children); | 
| 228     ASSERT_EQ(0u, children.size()); | 235     ASSERT_EQ(0u, children.size()); | 
| 229     saw_syncer_event_ = false; | 236     saw_syncer_event_ = false; | 
| 230     root_id_ = TestIdFactory::root(); | 237     root_id_ = TestIdFactory::root(); | 
| 231     parent_id_ = ids_.MakeServer("parent id"); | 238     parent_id_ = ids_.MakeServer("parent id"); | 
| 232     child_id_ = ids_.MakeServer("child id"); | 239     child_id_ = ids_.MakeServer("child id"); | 
| 233     directory()->set_store_birthday(mock_server_->store_birthday()); | 240     directory()->set_store_birthday(mock_server_->store_birthday()); | 
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 560   scoped_ptr<SyncSession> session_; | 567   scoped_ptr<SyncSession> session_; | 
| 561   scoped_ptr<SyncSessionContext> context_; | 568   scoped_ptr<SyncSessionContext> context_; | 
| 562   bool saw_syncer_event_; | 569   bool saw_syncer_event_; | 
| 563   base::TimeDelta last_short_poll_interval_received_; | 570   base::TimeDelta last_short_poll_interval_received_; | 
| 564   base::TimeDelta last_long_poll_interval_received_; | 571   base::TimeDelta last_long_poll_interval_received_; | 
| 565   base::TimeDelta last_sessions_commit_delay_seconds_; | 572   base::TimeDelta last_sessions_commit_delay_seconds_; | 
| 566   scoped_refptr<ModelSafeWorker> worker_; | 573   scoped_refptr<ModelSafeWorker> worker_; | 
| 567 | 574 | 
| 568   ModelTypeSet enabled_datatypes_; | 575   ModelTypeSet enabled_datatypes_; | 
| 569   TrafficRecorder traffic_recorder_; | 576   TrafficRecorder traffic_recorder_; | 
|  | 577   sessions::NudgeTracker nudge_tracker_; | 
| 570 | 578 | 
| 571   DISALLOW_COPY_AND_ASSIGN(SyncerTest); | 579   DISALLOW_COPY_AND_ASSIGN(SyncerTest); | 
| 572 }; | 580 }; | 
| 573 | 581 | 
| 574 TEST_F(SyncerTest, TestCallGatherUnsyncedEntries) { | 582 TEST_F(SyncerTest, TestCallGatherUnsyncedEntries) { | 
| 575   { | 583   { | 
| 576     Syncer::UnsyncedMetaHandles handles; | 584     Syncer::UnsyncedMetaHandles handles; | 
| 577     { | 585     { | 
| 578       syncable::ReadTransaction trans(FROM_HERE, directory()); | 586       syncable::ReadTransaction trans(FROM_HERE, directory()); | 
| 579       GetUnsyncedEntries(&trans, &handles); | 587       GetUnsyncedEntries(&trans, &handles); | 
| (...skipping 1655 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2235     MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); | 2243     MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); | 
| 2236     ASSERT_TRUE(entry.good()); | 2244     ASSERT_TRUE(entry.good()); | 
| 2237     entry.Put(syncable::IS_DIR, true); | 2245     entry.Put(syncable::IS_DIR, true); | 
| 2238     entry.Put(syncable::IS_UNSYNCED, true); | 2246     entry.Put(syncable::IS_UNSYNCED, true); | 
| 2239     entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); | 2247     entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); | 
| 2240   } | 2248   } | 
| 2241 | 2249 | 
| 2242   mock_server_->SetMidCommitCallback( | 2250   mock_server_->SetMidCommitCallback( | 
| 2243       base::Bind(&EntryCreatedInNewFolderTest::CreateFolderInBob, | 2251       base::Bind(&EntryCreatedInNewFolderTest::CreateFolderInBob, | 
| 2244                  base::Unretained(this))); | 2252                  base::Unretained(this))); | 
| 2245   syncer_->SyncShare(session_.get(), COMMIT, SYNCER_END); | 2253   SyncShareNudge(); | 
| 2246   // We loop until no unsynced handles remain, so we will commit both ids. | 2254   // We loop until no unsynced handles remain, so we will commit both ids. | 
| 2247   EXPECT_EQ(2u, mock_server_->committed_ids().size()); | 2255   EXPECT_EQ(2u, mock_server_->committed_ids().size()); | 
| 2248   { | 2256   { | 
| 2249     syncable::ReadTransaction trans(FROM_HERE, directory()); | 2257     syncable::ReadTransaction trans(FROM_HERE, directory()); | 
| 2250     Entry parent_entry(&trans, syncable::GET_BY_ID, | 2258     Entry parent_entry(&trans, syncable::GET_BY_ID, | 
| 2251         GetOnlyEntryWithName(&trans, TestIdFactory::root(), "bob")); | 2259         GetOnlyEntryWithName(&trans, TestIdFactory::root(), "bob")); | 
| 2252     ASSERT_TRUE(parent_entry.good()); | 2260     ASSERT_TRUE(parent_entry.good()); | 
| 2253 | 2261 | 
| 2254     Id child_id = | 2262     Id child_id = | 
| 2255         GetOnlyEntryWithName(&trans, parent_entry.Get(ID), "bob"); | 2263         GetOnlyEntryWithName(&trans, parent_entry.Get(ID), "bob"); | 
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2473     entry.Put(ID, ids_.FromNumber(20)); | 2481     entry.Put(ID, ids_.FromNumber(20)); | 
| 2474     entry.Put(BASE_VERSION, 1); | 2482     entry.Put(BASE_VERSION, 1); | 
| 2475     entry.Put(SERVER_VERSION, 1); | 2483     entry.Put(SERVER_VERSION, 1); | 
| 2476     entry.Put(SERVER_PARENT_ID, ids_.FromNumber(9999));  // Bad parent. | 2484     entry.Put(SERVER_PARENT_ID, ids_.FromNumber(9999));  // Bad parent. | 
| 2477     entry.Put(IS_UNSYNCED, true); | 2485     entry.Put(IS_UNSYNCED, true); | 
| 2478     entry.Put(IS_UNAPPLIED_UPDATE, true); | 2486     entry.Put(IS_UNAPPLIED_UPDATE, true); | 
| 2479     entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 2487     entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 
| 2480     entry.Put(SERVER_SPECIFICS, DefaultBookmarkSpecifics()); | 2488     entry.Put(SERVER_SPECIFICS, DefaultBookmarkSpecifics()); | 
| 2481     entry.Put(IS_DEL, false); | 2489     entry.Put(IS_DEL, false); | 
| 2482   } | 2490   } | 
| 2483   syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); | 2491   SyncShareNudge(); | 
| 2484   syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); |  | 
| 2485   EXPECT_EQ(1, session_->status_controller().TotalNumConflictingItems()); | 2492   EXPECT_EQ(1, session_->status_controller().TotalNumConflictingItems()); | 
| 2486   saw_syncer_event_ = false; | 2493   saw_syncer_event_ = false; | 
| 2487 } | 2494 } | 
| 2488 | 2495 | 
| 2489 // Original problem synopsis: | 2496 // Original problem synopsis: | 
| 2490 //   Illegal parent | 2497 //   Illegal parent | 
| 2491 // Unexpected error during sync if we: | 2498 // Unexpected error during sync if we: | 
| 2492 //   make a new folder bob | 2499 //   make a new folder bob | 
| 2493 //   wait for sync | 2500 //   wait for sync | 
| 2494 //   make a new folder fred | 2501 //   make a new folder fred | 
| 2495 //   move bob into fred | 2502 //   move bob into fred | 
| 2496 //   remove bob | 2503 //   remove bob | 
| 2497 //   remove fred | 2504 //   remove fred | 
| 2498 // if no syncing occured midway, bob will have an illegal parent | 2505 // if no syncing occured midway, bob will have an illegal parent | 
| 2499 TEST_F(SyncerTest, DeletingEntryInFolder) { | 2506 TEST_F(SyncerTest, DeletingEntryInFolder) { | 
| 2500   // This test is a little fake. | 2507   // This test is a little fake. | 
| 2501   int64 existing_metahandle; | 2508   int64 existing_metahandle; | 
| 2502   { | 2509   { | 
| 2503     WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 2510     WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 
| 2504     MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "existing"); | 2511     MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "existing"); | 
| 2505     ASSERT_TRUE(entry.good()); | 2512     ASSERT_TRUE(entry.good()); | 
| 2506     entry.Put(IS_DIR, true); | 2513     entry.Put(IS_DIR, true); | 
| 2507     entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 2514     entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 
| 2508     entry.Put(IS_UNSYNCED, true); | 2515     entry.Put(IS_UNSYNCED, true); | 
| 2509     existing_metahandle = entry.Get(META_HANDLE); | 2516     existing_metahandle = entry.Get(META_HANDLE); | 
| 2510   } | 2517   } | 
| 2511   syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); | 2518   SyncShareNudge(); | 
| 2512   { | 2519   { | 
| 2513     WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 2520     WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 
| 2514     MutableEntry newfolder(&trans, CREATE, BOOKMARKS, trans.root_id(), "new"); | 2521     MutableEntry newfolder(&trans, CREATE, BOOKMARKS, trans.root_id(), "new"); | 
| 2515     ASSERT_TRUE(newfolder.good()); | 2522     ASSERT_TRUE(newfolder.good()); | 
| 2516     newfolder.Put(IS_DIR, true); | 2523     newfolder.Put(IS_DIR, true); | 
| 2517     newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 2524     newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 
| 2518     newfolder.Put(IS_UNSYNCED, true); | 2525     newfolder.Put(IS_UNSYNCED, true); | 
| 2519 | 2526 | 
| 2520     MutableEntry existing(&trans, GET_BY_HANDLE, existing_metahandle); | 2527     MutableEntry existing(&trans, GET_BY_HANDLE, existing_metahandle); | 
| 2521     ASSERT_TRUE(existing.good()); | 2528     ASSERT_TRUE(existing.good()); | 
| 2522     existing.Put(PARENT_ID, newfolder.Get(ID)); | 2529     existing.Put(PARENT_ID, newfolder.Get(ID)); | 
| 2523     existing.Put(IS_UNSYNCED, true); | 2530     existing.Put(IS_UNSYNCED, true); | 
| 2524     EXPECT_TRUE(existing.Get(ID).ServerKnows()); | 2531     EXPECT_TRUE(existing.Get(ID).ServerKnows()); | 
| 2525 | 2532 | 
| 2526     newfolder.Put(IS_DEL, true); | 2533     newfolder.Put(IS_DEL, true); | 
| 2527     existing.Put(IS_DEL, true); | 2534     existing.Put(IS_DEL, true); | 
| 2528   } | 2535   } | 
| 2529   syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); | 2536   SyncShareNudge(); | 
| 2530   EXPECT_EQ(0, status().num_server_conflicts()); | 2537   EXPECT_EQ(0, status().num_server_conflicts()); | 
| 2531 } | 2538 } | 
| 2532 | 2539 | 
| 2533 TEST_F(SyncerTest, DeletingEntryWithLocalEdits) { | 2540 TEST_F(SyncerTest, DeletingEntryWithLocalEdits) { | 
| 2534   int64 newfolder_metahandle; | 2541   int64 newfolder_metahandle; | 
| 2535 | 2542 | 
| 2536   mock_server_->AddUpdateDirectory(1, 0, "bob", 1, 10, | 2543   mock_server_->AddUpdateDirectory(1, 0, "bob", 1, 10, | 
| 2537                                    foreign_cache_guid(), "-1"); | 2544                                    foreign_cache_guid(), "-1"); | 
| 2538   SyncShareNudge(); | 2545   SyncShareNudge(); | 
| 2539   { | 2546   { | 
| 2540     WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 2547     WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 
| 2541     MutableEntry newfolder( | 2548     MutableEntry newfolder( | 
| 2542         &trans, CREATE, BOOKMARKS, ids_.FromNumber(1), "local"); | 2549         &trans, CREATE, BOOKMARKS, ids_.FromNumber(1), "local"); | 
| 2543     ASSERT_TRUE(newfolder.good()); | 2550     ASSERT_TRUE(newfolder.good()); | 
| 2544     newfolder.Put(IS_UNSYNCED, true); | 2551     newfolder.Put(IS_UNSYNCED, true); | 
| 2545     newfolder.Put(IS_DIR, true); | 2552     newfolder.Put(IS_DIR, true); | 
| 2546     newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 2553     newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 
| 2547     newfolder_metahandle = newfolder.Get(META_HANDLE); | 2554     newfolder_metahandle = newfolder.Get(META_HANDLE); | 
| 2548   } | 2555   } | 
| 2549   mock_server_->AddUpdateDirectory(1, 0, "bob", 2, 20, | 2556   mock_server_->AddUpdateDirectory(1, 0, "bob", 2, 20, | 
| 2550                                    foreign_cache_guid(), "-1"); | 2557                                    foreign_cache_guid(), "-1"); | 
| 2551   mock_server_->SetLastUpdateDeleted(); | 2558   mock_server_->SetLastUpdateDeleted(); | 
| 2552   syncer_->SyncShare(session_.get(), SYNCER_BEGIN, APPLY_UPDATES); | 2559   SyncShareConfigure(); | 
| 2553   { | 2560   { | 
| 2554     syncable::ReadTransaction trans(FROM_HERE, directory()); | 2561     syncable::ReadTransaction trans(FROM_HERE, directory()); | 
| 2555     Entry entry(&trans, syncable::GET_BY_HANDLE, newfolder_metahandle); | 2562     Entry entry(&trans, syncable::GET_BY_HANDLE, newfolder_metahandle); | 
| 2556     ASSERT_TRUE(entry.good()); | 2563     ASSERT_TRUE(entry.good()); | 
| 2557   } | 2564   } | 
| 2558 } | 2565 } | 
| 2559 | 2566 | 
| 2560 TEST_F(SyncerTest, FolderSwapUpdate) { | 2567 TEST_F(SyncerTest, FolderSwapUpdate) { | 
| 2561   mock_server_->AddUpdateDirectory(7801, 0, "bob", 1, 10, | 2568   mock_server_->AddUpdateDirectory(7801, 0, "bob", 1, 10, | 
| 2562                                    foreign_cache_guid(), "-7801"); | 2569                                    foreign_cache_guid(), "-7801"); | 
| (...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3197   const int depth = 400; | 3204   const int depth = 400; | 
| 3198   syncable::Id folder_id = ids_.FromNumber(1); | 3205   syncable::Id folder_id = ids_.FromNumber(1); | 
| 3199 | 3206 | 
| 3200   // First we an item in a folder in the root. However the folder won't come | 3207   // First we an item in a folder in the root. However the folder won't come | 
| 3201   // till much later. | 3208   // till much later. | 
| 3202   syncable::Id stuck_entry_id = TestIdFactory::FromNumber(99999); | 3209   syncable::Id stuck_entry_id = TestIdFactory::FromNumber(99999); | 
| 3203   mock_server_->AddUpdateDirectory(stuck_entry_id, | 3210   mock_server_->AddUpdateDirectory(stuck_entry_id, | 
| 3204       folder_id, "stuck", 1, 1, | 3211       folder_id, "stuck", 1, 1, | 
| 3205       foreign_cache_guid(), "-99999"); | 3212       foreign_cache_guid(), "-99999"); | 
| 3206   mock_server_->SetChangesRemaining(depth - 1); | 3213   mock_server_->SetChangesRemaining(depth - 1); | 
| 3207   syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); | 3214   SyncShareNudge(); | 
| 3208 | 3215 | 
| 3209   // Buffer up a very long series of downloads. | 3216   // Buffer up a very long series of downloads. | 
| 3210   // We should never be stuck (conflict resolution shouldn't | 3217   // We should never be stuck (conflict resolution shouldn't | 
| 3211   // kick in so long as we're making forward progress). | 3218   // kick in so long as we're making forward progress). | 
| 3212   for (int i = 0; i < depth; i++) { | 3219   for (int i = 0; i < depth; i++) { | 
| 3213     mock_server_->NextUpdateBatch(); | 3220     mock_server_->NextUpdateBatch(); | 
| 3214     mock_server_->SetNewTimestamp(i + 1); | 3221     mock_server_->SetNewTimestamp(i + 1); | 
| 3215     mock_server_->SetChangesRemaining(depth - i); | 3222     mock_server_->SetChangesRemaining(depth - i); | 
| 3216   } | 3223   } | 
| 3217 | 3224 | 
| (...skipping 1574 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4792     EXPECT_EQ("xyz", final_monitor_records["xyz"].extension_id); | 4799     EXPECT_EQ("xyz", final_monitor_records["xyz"].extension_id); | 
| 4793     EXPECT_EQ(2049U, final_monitor_records["ABC"].bookmark_write_count); | 4800     EXPECT_EQ(2049U, final_monitor_records["ABC"].bookmark_write_count); | 
| 4794     EXPECT_EQ(4U,    final_monitor_records["xyz"].bookmark_write_count); | 4801     EXPECT_EQ(4U,    final_monitor_records["xyz"].bookmark_write_count); | 
| 4795   } else { | 4802   } else { | 
| 4796     EXPECT_TRUE(final_monitor_records.empty()) | 4803     EXPECT_TRUE(final_monitor_records.empty()) | 
| 4797         << "Should not restore records after successful bookmark commit."; | 4804         << "Should not restore records after successful bookmark commit."; | 
| 4798   } | 4805   } | 
| 4799 } | 4806 } | 
| 4800 | 4807 | 
| 4801 }  // namespace syncer | 4808 }  // namespace syncer | 
| OLD | NEW | 
|---|