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

Side by Side Diff: chrome/browser/sync/engine/syncer_thread_unittest.cc

Issue 6270006: Revert 72685 - [SYNC] Refactor SyncSourceInfo and add support in chrome inval... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 11 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 <list> 5 #include <list>
6 #include <map> 6 #include <map>
7 7
8 #include "base/scoped_ptr.h" 8 #include "base/scoped_ptr.h"
9 #include "base/synchronization/lock.h" 9 #include "base/synchronization/lock.h"
10 #include "base/time.h" 10 #include "base/time.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 if (!syncer_thread()->RequestResume()) 162 if (!syncer_thread()->RequestResume())
163 return false; 163 return false;
164 return event.TimedWait(max_wait_time_); 164 return event.TimedWait(max_wait_time_);
165 } 165 }
166 166
167 void PreventThreadFromPolling() { 167 void PreventThreadFromPolling() {
168 const TimeDelta poll_interval = TimeDelta::FromMinutes(5); 168 const TimeDelta poll_interval = TimeDelta::FromMinutes(5);
169 syncer_thread()->SetSyncerShortPollInterval(poll_interval); 169 syncer_thread()->SetSyncerShortPollInterval(poll_interval);
170 } 170 }
171 171
172 // Compare a provided SyncSouceInfo::TypePayloadMap to the pending nudge info
173 // stored in the SyncerThread vault.
174 bool CompareNudgeTypesToVault(const sessions::TypePayloadMap& lhs) {
175 const sessions::TypePayloadMap& vault_nudge_types =
176 syncer_thread()->vault_.pending_nudge_types_;
177 return lhs == vault_nudge_types;
178 }
179
180 // Compare a provided ModelTypeBitset to the pending nudge info stored in the
181 // SyncerThread vault. Nudge info in vault must not have any non-empty
182 // payloads.
183 bool CompareNudgeTypesBitSetToVault(const syncable::ModelTypeBitSet& lhs) {
184 sessions::TypePayloadMap model_types_with_payloads =
185 sessions::ModelTypeBitSetToTypePayloadMap(lhs, std::string());
186 return CompareNudgeTypesToVault(model_types_with_payloads);
187 }
188
189
190 private: 172 private:
191 173
192 virtual void OnSyncEngineEvent(const SyncEngineEvent& event) { 174 virtual void OnSyncEngineEvent(const SyncEngineEvent& event) {
193 if (event.what_happened == SyncEngineEvent::SYNC_CYCLE_ENDED) 175 if (event.what_happened == SyncEngineEvent::SYNC_CYCLE_ENDED)
194 sync_cycle_ended_event_.Signal(); 176 sync_cycle_ended_event_.Signal();
195 } 177 }
196 178
197 protected: 179 protected:
198 TimeDelta max_wait_time_; 180 TimeDelta max_wait_time_;
199 SyncSessionContext* context_; 181 SyncSessionContext* context_;
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 false); 461 false);
480 462
481 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds, 463 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds,
482 interval.poll_delta.InSeconds()); 464 interval.poll_delta.InSeconds());
483 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 465 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
484 ASSERT_FALSE(interval.had_nudge_during_backoff); 466 ASSERT_FALSE(interval.had_nudge_during_backoff);
485 ASSERT_FALSE(continue_sync_cycle_param); 467 ASSERT_FALSE(continue_sync_cycle_param);
486 } 468 }
487 469
488 { 470 {
471
489 // Now try with unsynced local items. 472 // Now try with unsynced local items.
490 context->set_last_snapshot(SessionSnapshotForTest(0, 1)); 473 context->set_last_snapshot(SessionSnapshotForTest(0, 1));
491 bool continue_sync_cycle_param = false; 474 bool continue_sync_cycle_param = false;
492 475
493 WaitInterval interval = syncer_thread->CalculatePollingWaitTime( 476 WaitInterval interval = syncer_thread->CalculatePollingWaitTime(
494 0, 477 0,
495 &user_idle_milliseconds_param, 478 &user_idle_milliseconds_param,
496 &continue_sync_cycle_param, 479 &continue_sync_cycle_param,
497 false); 480 false);
498 481
(...skipping 23 matching lines...) Expand all
522 505
523 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds, 506 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds,
524 interval.poll_delta.InSeconds()); 507 interval.poll_delta.InSeconds());
525 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 508 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
526 ASSERT_FALSE(interval.had_nudge_during_backoff); 509 ASSERT_FALSE(interval.had_nudge_during_backoff);
527 ASSERT_FALSE(continue_sync_cycle_param); 510 ASSERT_FALSE(continue_sync_cycle_param);
528 } 511 }
529 512
530 // Regression for exponential backoff reset when the syncer is nudged. 513 // Regression for exponential backoff reset when the syncer is nudged.
531 { 514 {
515
532 context->set_last_snapshot(SessionSnapshotForTest(0, 1)); 516 context->set_last_snapshot(SessionSnapshotForTest(0, 1));
533 bool continue_sync_cycle_param = false; 517 bool continue_sync_cycle_param = false;
534 518
535 // Expect move from default polling interval to exponential backoff due to 519 // Expect move from default polling interval to exponential backoff due to
536 // unsynced_count != 0. 520 // unsynced_count != 0.
537 WaitInterval interval = syncer_thread->CalculatePollingWaitTime( 521 WaitInterval interval = syncer_thread->CalculatePollingWaitTime(
538 3600, 522 3600,
539 &user_idle_milliseconds_param, 523 &user_idle_milliseconds_param,
540 &continue_sync_cycle_param, 524 &continue_sync_cycle_param,
541 false); 525 false);
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 // The SyncerThread should be waiting for the poll now. Nudge it to sync 725 // The SyncerThread should be waiting for the poll now. Nudge it to sync
742 // immediately (5ms). 726 // immediately (5ms).
743 syncable::ModelTypeBitSet model_types; 727 syncable::ModelTypeBitSet model_types;
744 model_types[syncable::BOOKMARKS] = true; 728 model_types[syncable::BOOKMARKS] = true;
745 729
746 // Paused so we can verify the nudge types safely. 730 // Paused so we can verify the nudge types safely.
747 syncer_thread()->RequestPause(); 731 syncer_thread()->RequestPause();
748 syncer_thread()->NudgeSyncerWithDataTypes(5, 732 syncer_thread()->NudgeSyncerWithDataTypes(5,
749 SyncerThread::kUnknown, 733 SyncerThread::kUnknown,
750 model_types); 734 model_types);
751 EXPECT_TRUE(CompareNudgeTypesBitSetToVault(model_types)); 735 EXPECT_EQ(model_types, syncer_thread()->vault_.pending_nudge_types_);
752 syncer_thread()->RequestResume(); 736 syncer_thread()->RequestResume();
753 737
754 interceptor.WaitForSyncShare(1, TimeDelta::FromSeconds(1)); 738 interceptor.WaitForSyncShare(1, TimeDelta::FromSeconds(1));
755 EXPECT_EQ(static_cast<unsigned int>(2), 739 EXPECT_EQ(static_cast<unsigned int>(2),
756 interceptor.times_sync_occured().size()); 740 interceptor.times_sync_occured().size());
757 741
758 // SyncerThread should be waiting again. Signal it to stop. 742 // SyncerThread should be waiting again. Signal it to stop.
759 EXPECT_TRUE(syncer_thread()->Stop(2000)); 743 EXPECT_TRUE(syncer_thread()->Stop(2000));
760 EXPECT_TRUE(syncer_thread()->vault_.pending_nudge_types_.empty()); 744 EXPECT_TRUE(syncer_thread()->vault_.pending_nudge_types_.none());
761 } 745 }
762 746
763 TEST_F(SyncerThreadWithSyncerTest, NudgeWithDataTypesCoalesced) { 747 TEST_F(SyncerThreadWithSyncerTest, NudgeWithDataTypesCoalesced) {
764 SyncShareIntercept interceptor; 748 SyncShareIntercept interceptor;
765 connection()->SetMidCommitObserver(&interceptor); 749 connection()->SetMidCommitObserver(&interceptor);
766 // We don't want a poll to happen during this test (except the first one). 750 // We don't want a poll to happen during this test (except the first one).
767 PreventThreadFromPolling(); 751 PreventThreadFromPolling();
768 EXPECT_TRUE(syncer_thread()->Start()); 752 EXPECT_TRUE(syncer_thread()->Start());
769 metadb()->Open(); 753 metadb()->Open();
770 syncer_thread()->CreateSyncer(metadb()->name()); 754 syncer_thread()->CreateSyncer(metadb()->name());
771 const TimeDelta poll_interval = TimeDelta::FromMinutes(5); 755 const TimeDelta poll_interval = TimeDelta::FromMinutes(5);
772 interceptor.WaitForSyncShare(1, poll_interval + poll_interval); 756 interceptor.WaitForSyncShare(1, poll_interval + poll_interval);
773 EXPECT_EQ(static_cast<unsigned int>(1), 757 EXPECT_EQ(static_cast<unsigned int>(1),
774 interceptor.times_sync_occured().size()); 758 interceptor.times_sync_occured().size());
775 759
776 // The SyncerThread should be waiting for the poll now. Nudge it to sync 760 // The SyncerThread should be waiting for the poll now. Nudge it to sync
777 // immediately (5ms). 761 // immediately (5ms).
778 syncable::ModelTypeBitSet model_types; 762 syncable::ModelTypeBitSet model_types;
779 model_types[syncable::BOOKMARKS] = true; 763 model_types[syncable::BOOKMARKS] = true;
780 764
781 // Paused so we can verify the nudge types safely. 765 // Paused so we can verify the nudge types safely.
782 syncer_thread()->RequestPause(); 766 syncer_thread()->RequestPause();
783 syncer_thread()->NudgeSyncerWithDataTypes(100, 767 syncer_thread()->NudgeSyncerWithDataTypes(100,
784 SyncerThread::kUnknown, 768 SyncerThread::kUnknown,
785 model_types); 769 model_types);
786 EXPECT_TRUE(CompareNudgeTypesBitSetToVault(model_types)); 770 EXPECT_EQ(model_types, syncer_thread()->vault_.pending_nudge_types_);
787 771
788 model_types[syncable::BOOKMARKS] = false; 772 model_types[syncable::BOOKMARKS] = false;
789 model_types[syncable::AUTOFILL] = true; 773 model_types[syncable::AUTOFILL] = true;
790 syncer_thread()->NudgeSyncerWithDataTypes(0, 774 syncer_thread()->NudgeSyncerWithDataTypes(0,
791 SyncerThread::kUnknown, 775 SyncerThread::kUnknown,
792 model_types); 776 model_types);
793 777
794 // Reset BOOKMARKS for expectations. 778 // Reset BOOKMARKS for expectations.
795 model_types[syncable::BOOKMARKS] = true; 779 model_types[syncable::BOOKMARKS] = true;
796 EXPECT_TRUE(CompareNudgeTypesBitSetToVault(model_types)); 780 EXPECT_EQ(model_types, syncer_thread()->vault_.pending_nudge_types_);
797 781
798 syncer_thread()->RequestResume(); 782 syncer_thread()->RequestResume();
799 783
800 interceptor.WaitForSyncShare(1, TimeDelta::FromSeconds(1)); 784 interceptor.WaitForSyncShare(1, TimeDelta::FromSeconds(1));
801 EXPECT_EQ(static_cast<unsigned int>(2), 785 EXPECT_EQ(static_cast<unsigned int>(2),
802 interceptor.times_sync_occured().size()); 786 interceptor.times_sync_occured().size());
803 787
804 // SyncerThread should be waiting again. Signal it to stop. 788 // SyncerThread should be waiting again. Signal it to stop.
805 EXPECT_TRUE(syncer_thread()->Stop(2000)); 789 EXPECT_TRUE(syncer_thread()->Stop(2000));
806 EXPECT_TRUE(syncer_thread()->vault_.pending_nudge_types_.empty()); 790 EXPECT_TRUE(syncer_thread()->vault_.pending_nudge_types_.none());
807 }
808
809 TEST_F(SyncerThreadWithSyncerTest, NudgeWithPayloads) {
810 SyncShareIntercept interceptor;
811 connection()->SetMidCommitObserver(&interceptor);
812 // We don't want a poll to happen during this test (except the first one).
813 PreventThreadFromPolling();
814 EXPECT_TRUE(syncer_thread()->Start());
815 metadb()->Open();
816 syncer_thread()->CreateSyncer(metadb()->name());
817 const TimeDelta poll_interval = TimeDelta::FromMinutes(5);
818 interceptor.WaitForSyncShare(1, poll_interval + poll_interval);
819 EXPECT_EQ(static_cast<unsigned int>(1),
820 interceptor.times_sync_occured().size());
821
822 // The SyncerThread should be waiting for the poll now. Nudge it to sync
823 // immediately (5ms).
824 sessions::TypePayloadMap nudge_types;
825 nudge_types[syncable::BOOKMARKS] = "test";
826
827 // Paused so we can verify the nudge types safely.
828 syncer_thread()->RequestPause();
829 syncer_thread()->NudgeSyncerWithPayloads(5,
830 SyncerThread::kUnknown,
831 nudge_types);
832 EXPECT_TRUE(CompareNudgeTypesToVault(nudge_types));
833 syncer_thread()->RequestResume();
834
835 interceptor.WaitForSyncShare(1, TimeDelta::FromSeconds(1));
836 EXPECT_EQ(static_cast<unsigned int>(2),
837 interceptor.times_sync_occured().size());
838
839 // SyncerThread should be waiting again. Signal it to stop.
840 EXPECT_TRUE(syncer_thread()->Stop(2000));
841 EXPECT_TRUE(syncer_thread()->vault_.pending_nudge_types_.empty());
842 }
843
844 TEST_F(SyncerThreadWithSyncerTest, NudgeWithPayloadsCoalesced) {
845 SyncShareIntercept interceptor;
846 connection()->SetMidCommitObserver(&interceptor);
847 // We don't want a poll to happen during this test (except the first one).
848 PreventThreadFromPolling();
849 EXPECT_TRUE(syncer_thread()->Start());
850 metadb()->Open();
851 syncer_thread()->CreateSyncer(metadb()->name());
852 const TimeDelta poll_interval = TimeDelta::FromMinutes(5);
853 interceptor.WaitForSyncShare(1, poll_interval + poll_interval);
854 EXPECT_EQ(static_cast<unsigned int>(1),
855 interceptor.times_sync_occured().size());
856
857 // The SyncerThread should be waiting for the poll now. Nudge it to sync
858 // immediately (5ms).
859 sessions::TypePayloadMap nudge_types;
860 nudge_types[syncable::BOOKMARKS] = "books";
861
862 // Paused so we can verify the nudge types safely.
863 syncer_thread()->RequestPause();
864 syncer_thread()->NudgeSyncerWithPayloads(100,
865 SyncerThread::kUnknown,
866 nudge_types);
867 EXPECT_TRUE(CompareNudgeTypesToVault(nudge_types));
868
869 nudge_types.erase(syncable::BOOKMARKS);
870 nudge_types[syncable::AUTOFILL] = "auto";
871 syncer_thread()->NudgeSyncerWithPayloads(0,
872 SyncerThread::kUnknown,
873 nudge_types);
874
875 // Reset BOOKMARKS for expectations.
876 nudge_types[syncable::BOOKMARKS] = "books";
877 EXPECT_TRUE(CompareNudgeTypesToVault(nudge_types));
878
879 syncer_thread()->RequestResume();
880
881 interceptor.WaitForSyncShare(1, TimeDelta::FromSeconds(1));
882 EXPECT_EQ(static_cast<unsigned int>(2),
883 interceptor.times_sync_occured().size());
884
885 // SyncerThread should be waiting again. Signal it to stop.
886 EXPECT_TRUE(syncer_thread()->Stop(2000));
887 EXPECT_TRUE(syncer_thread()->vault_.pending_nudge_types_.empty());
888 } 791 }
889 792
890 TEST_F(SyncerThreadWithSyncerTest, Throttling) { 793 TEST_F(SyncerThreadWithSyncerTest, Throttling) {
891 SyncShareIntercept interceptor; 794 SyncShareIntercept interceptor;
892 connection()->SetMidCommitObserver(&interceptor); 795 connection()->SetMidCommitObserver(&interceptor);
893 const TimeDelta poll_interval = TimeDelta::FromMilliseconds(10); 796 const TimeDelta poll_interval = TimeDelta::FromMilliseconds(10);
894 syncer_thread()->SetSyncerShortPollInterval(poll_interval); 797 syncer_thread()->SetSyncerShortPollInterval(poll_interval);
895 798
896 EXPECT_TRUE(syncer_thread()->Start()); 799 EXPECT_TRUE(syncer_thread()->Start());
897 metadb()->Open(); 800 metadb()->Open();
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 EXPECT_CALL(listener, OnSyncEngineEvent( 1126 EXPECT_CALL(listener, OnSyncEngineEvent(
1224 Field(&SyncEngineEvent::what_happened, 1127 Field(&SyncEngineEvent::what_happened,
1225 SyncEngineEvent::SYNCER_THREAD_EXITING))); 1128 SyncEngineEvent::SYNCER_THREAD_EXITING)));
1226 1129
1227 ASSERT_TRUE(Resume(&listener)); 1130 ASSERT_TRUE(Resume(&listener));
1228 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); 1131 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_));
1229 EXPECT_TRUE(syncer_thread()->Stop(2000)); 1132 EXPECT_TRUE(syncer_thread()->Stop(2000));
1230 } 1133 }
1231 1134
1232 } // namespace browser_sync 1135 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/syncer_thread.cc ('k') | chrome/browser/sync/engine/syncer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698