| 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 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 using sessions::SyncSessionContext; | 109 using sessions::SyncSessionContext; |
| 110 using sessions::SyncSession; | 110 using sessions::SyncSession; |
| 111 | 111 |
| 112 class SyncerTest : public testing::Test, | 112 class SyncerTest : public testing::Test, |
| 113 public SyncSession::Delegate, | 113 public SyncSession::Delegate, |
| 114 public SyncEngineEventListener { | 114 public SyncEngineEventListener { |
| 115 protected: | 115 protected: |
| 116 SyncerTest() | 116 SyncerTest() |
| 117 : syncer_(NULL), | 117 : syncer_(NULL), |
| 118 saw_syncer_event_(false), | 118 saw_syncer_event_(false), |
| 119 last_client_invalidation_hint_buffer_size_(10), |
| 119 traffic_recorder_(0, 0) { | 120 traffic_recorder_(0, 0) { |
| 120 } | 121 } |
| 121 | 122 |
| 122 // SyncSession::Delegate implementation. | 123 // SyncSession::Delegate implementation. |
| 123 virtual void OnSilencedUntil(const base::TimeTicks& silenced_until) OVERRIDE { | 124 virtual void OnSilencedUntil(const base::TimeTicks& silenced_until) OVERRIDE { |
| 124 FAIL() << "Should not get silenced."; | 125 FAIL() << "Should not get silenced."; |
| 125 } | 126 } |
| 126 virtual bool IsSyncingCurrentlySilenced() OVERRIDE { | 127 virtual bool IsSyncingCurrentlySilenced() OVERRIDE { |
| 127 return false; | 128 return false; |
| 128 } | 129 } |
| 129 virtual void OnReceivedLongPollIntervalUpdate( | 130 virtual void OnReceivedLongPollIntervalUpdate( |
| 130 const base::TimeDelta& new_interval) OVERRIDE { | 131 const base::TimeDelta& new_interval) OVERRIDE { |
| 131 last_long_poll_interval_received_ = new_interval; | 132 last_long_poll_interval_received_ = new_interval; |
| 132 } | 133 } |
| 133 virtual void OnReceivedShortPollIntervalUpdate( | 134 virtual void OnReceivedShortPollIntervalUpdate( |
| 134 const base::TimeDelta& new_interval) OVERRIDE { | 135 const base::TimeDelta& new_interval) OVERRIDE { |
| 135 last_short_poll_interval_received_ = new_interval; | 136 last_short_poll_interval_received_ = new_interval; |
| 136 } | 137 } |
| 137 virtual void OnReceivedSessionsCommitDelay( | 138 virtual void OnReceivedSessionsCommitDelay( |
| 138 const base::TimeDelta& new_delay) OVERRIDE { | 139 const base::TimeDelta& new_delay) OVERRIDE { |
| 139 last_sessions_commit_delay_seconds_ = new_delay; | 140 last_sessions_commit_delay_seconds_ = new_delay; |
| 140 } | 141 } |
| 142 virtual void OnReceivedClientInvalidationHintBufferSize( |
| 143 int size) OVERRIDE { |
| 144 last_client_invalidation_hint_buffer_size_ = size; |
| 145 } |
| 141 virtual void OnShouldStopSyncingPermanently() OVERRIDE { | 146 virtual void OnShouldStopSyncingPermanently() OVERRIDE { |
| 142 } | 147 } |
| 143 virtual void OnSyncProtocolError( | 148 virtual void OnSyncProtocolError( |
| 144 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE { | 149 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE { |
| 145 } | 150 } |
| 146 | 151 |
| 147 void GetWorkers(std::vector<ModelSafeWorker*>* out) { | 152 void GetWorkers(std::vector<ModelSafeWorker*>* out) { |
| 148 out->push_back(worker_.get()); | 153 out->push_back(worker_.get()); |
| 149 } | 154 } |
| 150 | 155 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 164 case SyncEngineEvent::SYNC_CYCLE_BEGIN: // Fall through. | 169 case SyncEngineEvent::SYNC_CYCLE_BEGIN: // Fall through. |
| 165 case SyncEngineEvent::STATUS_CHANGED: | 170 case SyncEngineEvent::STATUS_CHANGED: |
| 166 case SyncEngineEvent::SYNC_CYCLE_ENDED: | 171 case SyncEngineEvent::SYNC_CYCLE_ENDED: |
| 167 return; | 172 return; |
| 168 default: | 173 default: |
| 169 CHECK(false) << "Handling unknown error type in unit tests!!"; | 174 CHECK(false) << "Handling unknown error type in unit tests!!"; |
| 170 } | 175 } |
| 171 saw_syncer_event_ = true; | 176 saw_syncer_event_ = true; |
| 172 } | 177 } |
| 173 | 178 |
| 174 SyncSession* MakeSession() { | 179 void SyncShareNudge() { |
| 175 ModelSafeRoutingInfo info; | 180 ModelSafeRoutingInfo info; |
| 176 GetModelSafeRoutingInfo(&info); | 181 GetModelSafeRoutingInfo(&info); |
| 177 ModelTypeInvalidationMap invalidation_map = | 182 ModelTypeInvalidationMap invalidation_map = |
| 178 ModelSafeRoutingInfoToInvalidationMap(info, std::string()); | 183 ModelSafeRoutingInfoToInvalidationMap(info, std::string()); |
| 179 sessions::SyncSourceInfo source_info(sync_pb::GetUpdatesCallerInfo::UNKNOWN, | 184 sessions::SyncSourceInfo source_info( |
| 180 invalidation_map); | 185 sync_pb::GetUpdatesCallerInfo::LOCAL, |
| 181 return new SyncSession(context_.get(), this, source_info); | 186 invalidation_map); |
| 182 } | 187 // Use our dummy nudge tracker. These tests won't notice that it hasn't |
| 188 // been tracking anything because the server is mocked out and ignores most |
| 189 // of the content of requests sent by the client. |
| 190 session_.reset( |
| 191 SyncSession::BuildForNudge(context_.get(), |
| 192 this, |
| 193 source_info, |
| 194 &nudge_tracker_)); |
| 183 | 195 |
| 184 void SyncShareNudge() { | |
| 185 session_.reset(MakeSession()); | |
| 186 EXPECT_TRUE(syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END)); | 196 EXPECT_TRUE(syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END)); |
| 187 } | 197 } |
| 188 | 198 |
| 189 void SyncShareConfigure() { | 199 void SyncShareConfigure() { |
| 190 session_.reset(MakeSession()); | 200 ModelSafeRoutingInfo info; |
| 201 GetModelSafeRoutingInfo(&info); |
| 202 ModelTypeInvalidationMap invalidation_map = |
| 203 ModelSafeRoutingInfoToInvalidationMap(info, std::string()); |
| 204 sessions::SyncSourceInfo source_info( |
| 205 sync_pb::GetUpdatesCallerInfo::RECONFIGURATION, |
| 206 invalidation_map); |
| 207 session_.reset(SyncSession::Build(context_.get(), |
| 208 this, |
| 209 source_info)); |
| 191 EXPECT_TRUE( | 210 EXPECT_TRUE( |
| 192 syncer_->SyncShare(session_.get(), DOWNLOAD_UPDATES, APPLY_UPDATES)); | 211 syncer_->SyncShare(session_.get(), DOWNLOAD_UPDATES, APPLY_UPDATES)); |
| 193 } | 212 } |
| 194 | 213 |
| 195 virtual void SetUp() { | 214 virtual void SetUp() { |
| 196 dir_maker_.SetUp(); | 215 dir_maker_.SetUp(); |
| 197 mock_server_.reset(new MockConnectionManager(directory())); | 216 mock_server_.reset(new MockConnectionManager(directory())); |
| 198 EnableDatatype(BOOKMARKS); | 217 EnableDatatype(BOOKMARKS); |
| 199 EnableDatatype(NIGORI); | 218 EnableDatatype(NIGORI); |
| 200 EnableDatatype(PREFERENCES); | 219 EnableDatatype(PREFERENCES); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 213 | 232 |
| 214 context_.reset( | 233 context_.reset( |
| 215 new SyncSessionContext( | 234 new SyncSessionContext( |
| 216 mock_server_.get(), directory(), workers, | 235 mock_server_.get(), directory(), workers, |
| 217 &extensions_activity_monitor_, throttled_data_type_tracker_.get(), | 236 &extensions_activity_monitor_, throttled_data_type_tracker_.get(), |
| 218 listeners, NULL, &traffic_recorder_, | 237 listeners, NULL, &traffic_recorder_, |
| 219 true, // enable keystore encryption | 238 true, // enable keystore encryption |
| 220 "fake_invalidator_client_id")); | 239 "fake_invalidator_client_id")); |
| 221 context_->set_routing_info(routing_info); | 240 context_->set_routing_info(routing_info); |
| 222 syncer_ = new Syncer(); | 241 syncer_ = new Syncer(); |
| 223 session_.reset(MakeSession()); | |
| 224 | 242 |
| 225 syncable::ReadTransaction trans(FROM_HERE, directory()); | 243 syncable::ReadTransaction trans(FROM_HERE, directory()); |
| 226 syncable::Directory::ChildHandles children; | 244 syncable::Directory::ChildHandles children; |
| 227 directory()->GetChildHandlesById(&trans, trans.root_id(), &children); | 245 directory()->GetChildHandlesById(&trans, trans.root_id(), &children); |
| 228 ASSERT_EQ(0u, children.size()); | 246 ASSERT_EQ(0u, children.size()); |
| 229 saw_syncer_event_ = false; | 247 saw_syncer_event_ = false; |
| 230 root_id_ = TestIdFactory::root(); | 248 root_id_ = TestIdFactory::root(); |
| 231 parent_id_ = ids_.MakeServer("parent id"); | 249 parent_id_ = ids_.MakeServer("parent id"); |
| 232 child_id_ = ids_.MakeServer("child id"); | 250 child_id_ = ids_.MakeServer("child id"); |
| 233 directory()->set_store_birthday(mock_server_->store_birthday()); | 251 directory()->set_store_birthday(mock_server_->store_birthday()); |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 scoped_ptr<MockConnectionManager> mock_server_; | 574 scoped_ptr<MockConnectionManager> mock_server_; |
| 557 | 575 |
| 558 Syncer* syncer_; | 576 Syncer* syncer_; |
| 559 | 577 |
| 560 scoped_ptr<SyncSession> session_; | 578 scoped_ptr<SyncSession> session_; |
| 561 scoped_ptr<SyncSessionContext> context_; | 579 scoped_ptr<SyncSessionContext> context_; |
| 562 bool saw_syncer_event_; | 580 bool saw_syncer_event_; |
| 563 base::TimeDelta last_short_poll_interval_received_; | 581 base::TimeDelta last_short_poll_interval_received_; |
| 564 base::TimeDelta last_long_poll_interval_received_; | 582 base::TimeDelta last_long_poll_interval_received_; |
| 565 base::TimeDelta last_sessions_commit_delay_seconds_; | 583 base::TimeDelta last_sessions_commit_delay_seconds_; |
| 584 int last_client_invalidation_hint_buffer_size_; |
| 566 scoped_refptr<ModelSafeWorker> worker_; | 585 scoped_refptr<ModelSafeWorker> worker_; |
| 567 | 586 |
| 568 ModelTypeSet enabled_datatypes_; | 587 ModelTypeSet enabled_datatypes_; |
| 569 TrafficRecorder traffic_recorder_; | 588 TrafficRecorder traffic_recorder_; |
| 589 sessions::NudgeTracker nudge_tracker_; |
| 570 | 590 |
| 571 DISALLOW_COPY_AND_ASSIGN(SyncerTest); | 591 DISALLOW_COPY_AND_ASSIGN(SyncerTest); |
| 572 }; | 592 }; |
| 573 | 593 |
| 574 TEST_F(SyncerTest, TestCallGatherUnsyncedEntries) { | 594 TEST_F(SyncerTest, TestCallGatherUnsyncedEntries) { |
| 575 { | 595 { |
| 576 Syncer::UnsyncedMetaHandles handles; | 596 Syncer::UnsyncedMetaHandles handles; |
| 577 { | 597 { |
| 578 syncable::ReadTransaction trans(FROM_HERE, directory()); | 598 syncable::ReadTransaction trans(FROM_HERE, directory()); |
| 579 GetUnsyncedEntries(&trans, &handles); | 599 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"); | 2255 MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); |
| 2236 ASSERT_TRUE(entry.good()); | 2256 ASSERT_TRUE(entry.good()); |
| 2237 entry.Put(syncable::IS_DIR, true); | 2257 entry.Put(syncable::IS_DIR, true); |
| 2238 entry.Put(syncable::IS_UNSYNCED, true); | 2258 entry.Put(syncable::IS_UNSYNCED, true); |
| 2239 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); | 2259 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); |
| 2240 } | 2260 } |
| 2241 | 2261 |
| 2242 mock_server_->SetMidCommitCallback( | 2262 mock_server_->SetMidCommitCallback( |
| 2243 base::Bind(&EntryCreatedInNewFolderTest::CreateFolderInBob, | 2263 base::Bind(&EntryCreatedInNewFolderTest::CreateFolderInBob, |
| 2244 base::Unretained(this))); | 2264 base::Unretained(this))); |
| 2245 syncer_->SyncShare(session_.get(), COMMIT, SYNCER_END); | 2265 SyncShareNudge(); |
| 2246 // We loop until no unsynced handles remain, so we will commit both ids. | 2266 // We loop until no unsynced handles remain, so we will commit both ids. |
| 2247 EXPECT_EQ(2u, mock_server_->committed_ids().size()); | 2267 EXPECT_EQ(2u, mock_server_->committed_ids().size()); |
| 2248 { | 2268 { |
| 2249 syncable::ReadTransaction trans(FROM_HERE, directory()); | 2269 syncable::ReadTransaction trans(FROM_HERE, directory()); |
| 2250 Entry parent_entry(&trans, syncable::GET_BY_ID, | 2270 Entry parent_entry(&trans, syncable::GET_BY_ID, |
| 2251 GetOnlyEntryWithName(&trans, TestIdFactory::root(), "bob")); | 2271 GetOnlyEntryWithName(&trans, TestIdFactory::root(), "bob")); |
| 2252 ASSERT_TRUE(parent_entry.good()); | 2272 ASSERT_TRUE(parent_entry.good()); |
| 2253 | 2273 |
| 2254 Id child_id = | 2274 Id child_id = |
| 2255 GetOnlyEntryWithName(&trans, parent_entry.Get(ID), "bob"); | 2275 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)); | 2493 entry.Put(ID, ids_.FromNumber(20)); |
| 2474 entry.Put(BASE_VERSION, 1); | 2494 entry.Put(BASE_VERSION, 1); |
| 2475 entry.Put(SERVER_VERSION, 1); | 2495 entry.Put(SERVER_VERSION, 1); |
| 2476 entry.Put(SERVER_PARENT_ID, ids_.FromNumber(9999)); // Bad parent. | 2496 entry.Put(SERVER_PARENT_ID, ids_.FromNumber(9999)); // Bad parent. |
| 2477 entry.Put(IS_UNSYNCED, true); | 2497 entry.Put(IS_UNSYNCED, true); |
| 2478 entry.Put(IS_UNAPPLIED_UPDATE, true); | 2498 entry.Put(IS_UNAPPLIED_UPDATE, true); |
| 2479 entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 2499 entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); |
| 2480 entry.Put(SERVER_SPECIFICS, DefaultBookmarkSpecifics()); | 2500 entry.Put(SERVER_SPECIFICS, DefaultBookmarkSpecifics()); |
| 2481 entry.Put(IS_DEL, false); | 2501 entry.Put(IS_DEL, false); |
| 2482 } | 2502 } |
| 2483 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); | 2503 SyncShareNudge(); |
| 2484 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); | |
| 2485 EXPECT_EQ(1, session_->status_controller().TotalNumConflictingItems()); | 2504 EXPECT_EQ(1, session_->status_controller().TotalNumConflictingItems()); |
| 2486 saw_syncer_event_ = false; | 2505 saw_syncer_event_ = false; |
| 2487 } | 2506 } |
| 2488 | 2507 |
| 2489 // Original problem synopsis: | 2508 // Original problem synopsis: |
| 2490 // Illegal parent | 2509 // Illegal parent |
| 2491 // Unexpected error during sync if we: | 2510 // Unexpected error during sync if we: |
| 2492 // make a new folder bob | 2511 // make a new folder bob |
| 2493 // wait for sync | 2512 // wait for sync |
| 2494 // make a new folder fred | 2513 // make a new folder fred |
| 2495 // move bob into fred | 2514 // move bob into fred |
| 2496 // remove bob | 2515 // remove bob |
| 2497 // remove fred | 2516 // remove fred |
| 2498 // if no syncing occured midway, bob will have an illegal parent | 2517 // if no syncing occured midway, bob will have an illegal parent |
| 2499 TEST_F(SyncerTest, DeletingEntryInFolder) { | 2518 TEST_F(SyncerTest, DeletingEntryInFolder) { |
| 2500 // This test is a little fake. | 2519 // This test is a little fake. |
| 2501 int64 existing_metahandle; | 2520 int64 existing_metahandle; |
| 2502 { | 2521 { |
| 2503 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 2522 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); |
| 2504 MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "existing"); | 2523 MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "existing"); |
| 2505 ASSERT_TRUE(entry.good()); | 2524 ASSERT_TRUE(entry.good()); |
| 2506 entry.Put(IS_DIR, true); | 2525 entry.Put(IS_DIR, true); |
| 2507 entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 2526 entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); |
| 2508 entry.Put(IS_UNSYNCED, true); | 2527 entry.Put(IS_UNSYNCED, true); |
| 2509 existing_metahandle = entry.Get(META_HANDLE); | 2528 existing_metahandle = entry.Get(META_HANDLE); |
| 2510 } | 2529 } |
| 2511 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); | 2530 SyncShareNudge(); |
| 2512 { | 2531 { |
| 2513 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 2532 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); |
| 2514 MutableEntry newfolder(&trans, CREATE, BOOKMARKS, trans.root_id(), "new"); | 2533 MutableEntry newfolder(&trans, CREATE, BOOKMARKS, trans.root_id(), "new"); |
| 2515 ASSERT_TRUE(newfolder.good()); | 2534 ASSERT_TRUE(newfolder.good()); |
| 2516 newfolder.Put(IS_DIR, true); | 2535 newfolder.Put(IS_DIR, true); |
| 2517 newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 2536 newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); |
| 2518 newfolder.Put(IS_UNSYNCED, true); | 2537 newfolder.Put(IS_UNSYNCED, true); |
| 2519 | 2538 |
| 2520 MutableEntry existing(&trans, GET_BY_HANDLE, existing_metahandle); | 2539 MutableEntry existing(&trans, GET_BY_HANDLE, existing_metahandle); |
| 2521 ASSERT_TRUE(existing.good()); | 2540 ASSERT_TRUE(existing.good()); |
| 2522 existing.Put(PARENT_ID, newfolder.Get(ID)); | 2541 existing.Put(PARENT_ID, newfolder.Get(ID)); |
| 2523 existing.Put(IS_UNSYNCED, true); | 2542 existing.Put(IS_UNSYNCED, true); |
| 2524 EXPECT_TRUE(existing.Get(ID).ServerKnows()); | 2543 EXPECT_TRUE(existing.Get(ID).ServerKnows()); |
| 2525 | 2544 |
| 2526 newfolder.Put(IS_DEL, true); | 2545 newfolder.Put(IS_DEL, true); |
| 2527 existing.Put(IS_DEL, true); | 2546 existing.Put(IS_DEL, true); |
| 2528 } | 2547 } |
| 2529 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); | 2548 SyncShareNudge(); |
| 2530 EXPECT_EQ(0, status().num_server_conflicts()); | 2549 EXPECT_EQ(0, status().num_server_conflicts()); |
| 2531 } | 2550 } |
| 2532 | 2551 |
| 2533 TEST_F(SyncerTest, DeletingEntryWithLocalEdits) { | 2552 TEST_F(SyncerTest, DeletingEntryWithLocalEdits) { |
| 2534 int64 newfolder_metahandle; | 2553 int64 newfolder_metahandle; |
| 2535 | 2554 |
| 2536 mock_server_->AddUpdateDirectory(1, 0, "bob", 1, 10, | 2555 mock_server_->AddUpdateDirectory(1, 0, "bob", 1, 10, |
| 2537 foreign_cache_guid(), "-1"); | 2556 foreign_cache_guid(), "-1"); |
| 2538 SyncShareNudge(); | 2557 SyncShareNudge(); |
| 2539 { | 2558 { |
| 2540 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 2559 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); |
| 2541 MutableEntry newfolder( | 2560 MutableEntry newfolder( |
| 2542 &trans, CREATE, BOOKMARKS, ids_.FromNumber(1), "local"); | 2561 &trans, CREATE, BOOKMARKS, ids_.FromNumber(1), "local"); |
| 2543 ASSERT_TRUE(newfolder.good()); | 2562 ASSERT_TRUE(newfolder.good()); |
| 2544 newfolder.Put(IS_UNSYNCED, true); | 2563 newfolder.Put(IS_UNSYNCED, true); |
| 2545 newfolder.Put(IS_DIR, true); | 2564 newfolder.Put(IS_DIR, true); |
| 2546 newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 2565 newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); |
| 2547 newfolder_metahandle = newfolder.Get(META_HANDLE); | 2566 newfolder_metahandle = newfolder.Get(META_HANDLE); |
| 2548 } | 2567 } |
| 2549 mock_server_->AddUpdateDirectory(1, 0, "bob", 2, 20, | 2568 mock_server_->AddUpdateDirectory(1, 0, "bob", 2, 20, |
| 2550 foreign_cache_guid(), "-1"); | 2569 foreign_cache_guid(), "-1"); |
| 2551 mock_server_->SetLastUpdateDeleted(); | 2570 mock_server_->SetLastUpdateDeleted(); |
| 2552 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, APPLY_UPDATES); | 2571 SyncShareConfigure(); |
| 2553 { | 2572 { |
| 2554 syncable::ReadTransaction trans(FROM_HERE, directory()); | 2573 syncable::ReadTransaction trans(FROM_HERE, directory()); |
| 2555 Entry entry(&trans, syncable::GET_BY_HANDLE, newfolder_metahandle); | 2574 Entry entry(&trans, syncable::GET_BY_HANDLE, newfolder_metahandle); |
| 2556 ASSERT_TRUE(entry.good()); | 2575 ASSERT_TRUE(entry.good()); |
| 2557 } | 2576 } |
| 2558 } | 2577 } |
| 2559 | 2578 |
| 2560 TEST_F(SyncerTest, FolderSwapUpdate) { | 2579 TEST_F(SyncerTest, FolderSwapUpdate) { |
| 2561 mock_server_->AddUpdateDirectory(7801, 0, "bob", 1, 10, | 2580 mock_server_->AddUpdateDirectory(7801, 0, "bob", 1, 10, |
| 2562 foreign_cache_guid(), "-7801"); | 2581 foreign_cache_guid(), "-7801"); |
| (...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3197 const int depth = 400; | 3216 const int depth = 400; |
| 3198 syncable::Id folder_id = ids_.FromNumber(1); | 3217 syncable::Id folder_id = ids_.FromNumber(1); |
| 3199 | 3218 |
| 3200 // First we an item in a folder in the root. However the folder won't come | 3219 // First we an item in a folder in the root. However the folder won't come |
| 3201 // till much later. | 3220 // till much later. |
| 3202 syncable::Id stuck_entry_id = TestIdFactory::FromNumber(99999); | 3221 syncable::Id stuck_entry_id = TestIdFactory::FromNumber(99999); |
| 3203 mock_server_->AddUpdateDirectory(stuck_entry_id, | 3222 mock_server_->AddUpdateDirectory(stuck_entry_id, |
| 3204 folder_id, "stuck", 1, 1, | 3223 folder_id, "stuck", 1, 1, |
| 3205 foreign_cache_guid(), "-99999"); | 3224 foreign_cache_guid(), "-99999"); |
| 3206 mock_server_->SetChangesRemaining(depth - 1); | 3225 mock_server_->SetChangesRemaining(depth - 1); |
| 3207 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); | 3226 SyncShareNudge(); |
| 3208 | 3227 |
| 3209 // Buffer up a very long series of downloads. | 3228 // Buffer up a very long series of downloads. |
| 3210 // We should never be stuck (conflict resolution shouldn't | 3229 // We should never be stuck (conflict resolution shouldn't |
| 3211 // kick in so long as we're making forward progress). | 3230 // kick in so long as we're making forward progress). |
| 3212 for (int i = 0; i < depth; i++) { | 3231 for (int i = 0; i < depth; i++) { |
| 3213 mock_server_->NextUpdateBatch(); | 3232 mock_server_->NextUpdateBatch(); |
| 3214 mock_server_->SetNewTimestamp(i + 1); | 3233 mock_server_->SetNewTimestamp(i + 1); |
| 3215 mock_server_->SetChangesRemaining(depth - i); | 3234 mock_server_->SetChangesRemaining(depth - i); |
| 3216 } | 3235 } |
| 3217 | 3236 |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3425 } | 3444 } |
| 3426 } | 3445 } |
| 3427 | 3446 |
| 3428 TEST_F(SyncerTest, TestClientCommandDuringUpdate) { | 3447 TEST_F(SyncerTest, TestClientCommandDuringUpdate) { |
| 3429 using sync_pb::ClientCommand; | 3448 using sync_pb::ClientCommand; |
| 3430 | 3449 |
| 3431 ClientCommand* command = new ClientCommand(); | 3450 ClientCommand* command = new ClientCommand(); |
| 3432 command->set_set_sync_poll_interval(8); | 3451 command->set_set_sync_poll_interval(8); |
| 3433 command->set_set_sync_long_poll_interval(800); | 3452 command->set_set_sync_long_poll_interval(800); |
| 3434 command->set_sessions_commit_delay_seconds(3141); | 3453 command->set_sessions_commit_delay_seconds(3141); |
| 3454 command->set_client_invalidation_hint_buffer_size(11); |
| 3435 mock_server_->AddUpdateDirectory(1, 0, "in_root", 1, 1, | 3455 mock_server_->AddUpdateDirectory(1, 0, "in_root", 1, 1, |
| 3436 foreign_cache_guid(), "-1"); | 3456 foreign_cache_guid(), "-1"); |
| 3437 mock_server_->SetGUClientCommand(command); | 3457 mock_server_->SetGUClientCommand(command); |
| 3438 SyncShareNudge(); | 3458 SyncShareNudge(); |
| 3439 | 3459 |
| 3440 EXPECT_TRUE(TimeDelta::FromSeconds(8) == | 3460 EXPECT_TRUE(TimeDelta::FromSeconds(8) == |
| 3441 last_short_poll_interval_received_); | 3461 last_short_poll_interval_received_); |
| 3442 EXPECT_TRUE(TimeDelta::FromSeconds(800) == | 3462 EXPECT_TRUE(TimeDelta::FromSeconds(800) == |
| 3443 last_long_poll_interval_received_); | 3463 last_long_poll_interval_received_); |
| 3444 EXPECT_TRUE(TimeDelta::FromSeconds(3141) == | 3464 EXPECT_TRUE(TimeDelta::FromSeconds(3141) == |
| 3445 last_sessions_commit_delay_seconds_); | 3465 last_sessions_commit_delay_seconds_); |
| 3466 EXPECT_EQ(11, last_client_invalidation_hint_buffer_size_); |
| 3446 | 3467 |
| 3447 command = new ClientCommand(); | 3468 command = new ClientCommand(); |
| 3448 command->set_set_sync_poll_interval(180); | 3469 command->set_set_sync_poll_interval(180); |
| 3449 command->set_set_sync_long_poll_interval(190); | 3470 command->set_set_sync_long_poll_interval(190); |
| 3450 command->set_sessions_commit_delay_seconds(2718); | 3471 command->set_sessions_commit_delay_seconds(2718); |
| 3472 command->set_client_invalidation_hint_buffer_size(9); |
| 3451 mock_server_->AddUpdateDirectory(1, 0, "in_root", 1, 1, | 3473 mock_server_->AddUpdateDirectory(1, 0, "in_root", 1, 1, |
| 3452 foreign_cache_guid(), "-1"); | 3474 foreign_cache_guid(), "-1"); |
| 3453 mock_server_->SetGUClientCommand(command); | 3475 mock_server_->SetGUClientCommand(command); |
| 3454 SyncShareNudge(); | 3476 SyncShareNudge(); |
| 3455 | 3477 |
| 3456 EXPECT_TRUE(TimeDelta::FromSeconds(180) == | 3478 EXPECT_TRUE(TimeDelta::FromSeconds(180) == |
| 3457 last_short_poll_interval_received_); | 3479 last_short_poll_interval_received_); |
| 3458 EXPECT_TRUE(TimeDelta::FromSeconds(190) == | 3480 EXPECT_TRUE(TimeDelta::FromSeconds(190) == |
| 3459 last_long_poll_interval_received_); | 3481 last_long_poll_interval_received_); |
| 3460 EXPECT_TRUE(TimeDelta::FromSeconds(2718) == | 3482 EXPECT_TRUE(TimeDelta::FromSeconds(2718) == |
| 3461 last_sessions_commit_delay_seconds_); | 3483 last_sessions_commit_delay_seconds_); |
| 3484 EXPECT_EQ(9, last_client_invalidation_hint_buffer_size_); |
| 3462 } | 3485 } |
| 3463 | 3486 |
| 3464 TEST_F(SyncerTest, TestClientCommandDuringCommit) { | 3487 TEST_F(SyncerTest, TestClientCommandDuringCommit) { |
| 3465 using sync_pb::ClientCommand; | 3488 using sync_pb::ClientCommand; |
| 3466 | 3489 |
| 3467 ClientCommand* command = new ClientCommand(); | 3490 ClientCommand* command = new ClientCommand(); |
| 3468 command->set_set_sync_poll_interval(8); | 3491 command->set_set_sync_poll_interval(8); |
| 3469 command->set_set_sync_long_poll_interval(800); | 3492 command->set_set_sync_long_poll_interval(800); |
| 3470 command->set_sessions_commit_delay_seconds(3141); | 3493 command->set_sessions_commit_delay_seconds(3141); |
| 3494 command->set_client_invalidation_hint_buffer_size(11); |
| 3471 CreateUnsyncedDirectory("X", "id_X"); | 3495 CreateUnsyncedDirectory("X", "id_X"); |
| 3472 mock_server_->SetCommitClientCommand(command); | 3496 mock_server_->SetCommitClientCommand(command); |
| 3473 SyncShareNudge(); | 3497 SyncShareNudge(); |
| 3474 | 3498 |
| 3475 EXPECT_TRUE(TimeDelta::FromSeconds(8) == | 3499 EXPECT_TRUE(TimeDelta::FromSeconds(8) == |
| 3476 last_short_poll_interval_received_); | 3500 last_short_poll_interval_received_); |
| 3477 EXPECT_TRUE(TimeDelta::FromSeconds(800) == | 3501 EXPECT_TRUE(TimeDelta::FromSeconds(800) == |
| 3478 last_long_poll_interval_received_); | 3502 last_long_poll_interval_received_); |
| 3479 EXPECT_TRUE(TimeDelta::FromSeconds(3141) == | 3503 EXPECT_TRUE(TimeDelta::FromSeconds(3141) == |
| 3480 last_sessions_commit_delay_seconds_); | 3504 last_sessions_commit_delay_seconds_); |
| 3505 EXPECT_EQ(11, last_client_invalidation_hint_buffer_size_); |
| 3481 | 3506 |
| 3482 command = new ClientCommand(); | 3507 command = new ClientCommand(); |
| 3483 command->set_set_sync_poll_interval(180); | 3508 command->set_set_sync_poll_interval(180); |
| 3484 command->set_set_sync_long_poll_interval(190); | 3509 command->set_set_sync_long_poll_interval(190); |
| 3485 command->set_sessions_commit_delay_seconds(2718); | 3510 command->set_sessions_commit_delay_seconds(2718); |
| 3511 command->set_client_invalidation_hint_buffer_size(9); |
| 3486 CreateUnsyncedDirectory("Y", "id_Y"); | 3512 CreateUnsyncedDirectory("Y", "id_Y"); |
| 3487 mock_server_->SetCommitClientCommand(command); | 3513 mock_server_->SetCommitClientCommand(command); |
| 3488 SyncShareNudge(); | 3514 SyncShareNudge(); |
| 3489 | 3515 |
| 3490 EXPECT_TRUE(TimeDelta::FromSeconds(180) == | 3516 EXPECT_TRUE(TimeDelta::FromSeconds(180) == |
| 3491 last_short_poll_interval_received_); | 3517 last_short_poll_interval_received_); |
| 3492 EXPECT_TRUE(TimeDelta::FromSeconds(190) == | 3518 EXPECT_TRUE(TimeDelta::FromSeconds(190) == |
| 3493 last_long_poll_interval_received_); | 3519 last_long_poll_interval_received_); |
| 3494 EXPECT_TRUE(TimeDelta::FromSeconds(2718) == | 3520 EXPECT_TRUE(TimeDelta::FromSeconds(2718) == |
| 3495 last_sessions_commit_delay_seconds_); | 3521 last_sessions_commit_delay_seconds_); |
| 3522 EXPECT_EQ(9, last_client_invalidation_hint_buffer_size_); |
| 3496 } | 3523 } |
| 3497 | 3524 |
| 3498 TEST_F(SyncerTest, EnsureWeSendUpOldParent) { | 3525 TEST_F(SyncerTest, EnsureWeSendUpOldParent) { |
| 3499 syncable::Id folder_one_id = ids_.FromNumber(1); | 3526 syncable::Id folder_one_id = ids_.FromNumber(1); |
| 3500 syncable::Id folder_two_id = ids_.FromNumber(2); | 3527 syncable::Id folder_two_id = ids_.FromNumber(2); |
| 3501 | 3528 |
| 3502 mock_server_->AddUpdateDirectory(folder_one_id, TestIdFactory::root(), | 3529 mock_server_->AddUpdateDirectory(folder_one_id, TestIdFactory::root(), |
| 3503 "folder_one", 1, 1, foreign_cache_guid(), "-1"); | 3530 "folder_one", 1, 1, foreign_cache_guid(), "-1"); |
| 3504 mock_server_->AddUpdateDirectory(folder_two_id, TestIdFactory::root(), | 3531 mock_server_->AddUpdateDirectory(folder_two_id, TestIdFactory::root(), |
| 3505 "folder_two", 1, 1, foreign_cache_guid(), "-2"); | 3532 "folder_two", 1, 1, foreign_cache_guid(), "-2"); |
| (...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4792 EXPECT_EQ("xyz", final_monitor_records["xyz"].extension_id); | 4819 EXPECT_EQ("xyz", final_monitor_records["xyz"].extension_id); |
| 4793 EXPECT_EQ(2049U, final_monitor_records["ABC"].bookmark_write_count); | 4820 EXPECT_EQ(2049U, final_monitor_records["ABC"].bookmark_write_count); |
| 4794 EXPECT_EQ(4U, final_monitor_records["xyz"].bookmark_write_count); | 4821 EXPECT_EQ(4U, final_monitor_records["xyz"].bookmark_write_count); |
| 4795 } else { | 4822 } else { |
| 4796 EXPECT_TRUE(final_monitor_records.empty()) | 4823 EXPECT_TRUE(final_monitor_records.empty()) |
| 4797 << "Should not restore records after successful bookmark commit."; | 4824 << "Should not restore records after successful bookmark commit."; |
| 4798 } | 4825 } |
| 4799 } | 4826 } |
| 4800 | 4827 |
| 4801 } // namespace syncer | 4828 } // namespace syncer |
| OLD | NEW |