OLD | NEW |
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 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/lock.h" | 9 #include "base/lock.h" |
10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 public: | 59 public: |
60 SyncerThreadWithSyncerTest() | 60 SyncerThreadWithSyncerTest() |
61 : max_wait_time_(TimeDelta::FromSeconds(10)), | 61 : max_wait_time_(TimeDelta::FromSeconds(10)), |
62 sync_cycle_ended_event_(false, false) {} | 62 sync_cycle_ended_event_(false, false) {} |
63 virtual void SetUp() { | 63 virtual void SetUp() { |
64 metadb_.SetUp(); | 64 metadb_.SetUp(); |
65 connection_.reset(new MockConnectionManager(metadb_.manager(), | 65 connection_.reset(new MockConnectionManager(metadb_.manager(), |
66 metadb_.name())); | 66 metadb_.name())); |
67 worker_ = new ModelSafeWorker(); | 67 worker_ = new ModelSafeWorker(); |
68 SyncSessionContext* context = new SyncSessionContext(connection_.get(), | 68 SyncSessionContext* context = new SyncSessionContext(connection_.get(), |
69 NULL, metadb_.manager(), this); | 69 metadb_.manager(), this); |
70 syncer_thread_ = new SyncerThread(context); | 70 syncer_thread_ = new SyncerThread(context); |
71 syncer_event_hookup_.reset( | 71 syncer_event_hookup_.reset( |
72 syncer_thread_->relay_channel()->AddObserver(this)); | 72 syncer_thread_->relay_channel()->AddObserver(this)); |
73 syncer_thread_->SetConnected(true); | 73 syncer_thread_->SetConnected(true); |
74 syncable::ModelTypeBitSet expected_types; | 74 syncable::ModelTypeBitSet expected_types; |
75 expected_types[syncable::BOOKMARKS] = true; | 75 expected_types[syncable::BOOKMARKS] = true; |
76 connection_->ExpectGetUpdatesRequestTypes(expected_types); | 76 connection_->ExpectGetUpdatesRequestTypes(expected_types); |
77 } | 77 } |
78 virtual void TearDown() { | 78 virtual void TearDown() { |
79 syncer_event_hookup_.reset(); | 79 syncer_event_hookup_.reset(); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 sync_occured_.Reset(); | 210 sync_occured_.Reset(); |
211 } | 211 } |
212 private: | 212 private: |
213 std::vector<TimeTicks> times_sync_occured_; | 213 std::vector<TimeTicks> times_sync_occured_; |
214 base::WaitableEvent sync_occured_; | 214 base::WaitableEvent sync_occured_; |
215 bool allow_multiple_interceptions_; | 215 bool allow_multiple_interceptions_; |
216 DISALLOW_COPY_AND_ASSIGN(SyncShareIntercept); | 216 DISALLOW_COPY_AND_ASSIGN(SyncShareIntercept); |
217 }; | 217 }; |
218 | 218 |
219 TEST_F(SyncerThreadTest, Construction) { | 219 TEST_F(SyncerThreadTest, Construction) { |
220 SyncSessionContext* context = new SyncSessionContext(NULL, NULL, NULL, NULL); | 220 SyncSessionContext* context = new SyncSessionContext(NULL, NULL, NULL); |
221 scoped_refptr<SyncerThread> syncer_thread(new SyncerThread(context)); | 221 scoped_refptr<SyncerThread> syncer_thread(new SyncerThread(context)); |
222 } | 222 } |
223 | 223 |
224 TEST_F(SyncerThreadTest, StartStop) { | 224 TEST_F(SyncerThreadTest, StartStop) { |
225 SyncSessionContext* context = new SyncSessionContext(NULL, NULL, NULL, NULL); | 225 SyncSessionContext* context = new SyncSessionContext(NULL, NULL, NULL); |
226 scoped_refptr<SyncerThread> syncer_thread(new SyncerThread(context)); | 226 scoped_refptr<SyncerThread> syncer_thread(new SyncerThread(context)); |
227 EXPECT_TRUE(syncer_thread->Start()); | 227 EXPECT_TRUE(syncer_thread->Start()); |
228 EXPECT_TRUE(syncer_thread->Stop(2000)); | 228 EXPECT_TRUE(syncer_thread->Stop(2000)); |
229 | 229 |
230 // Do it again for good measure. I caught some bugs by adding this so | 230 // Do it again for good measure. I caught some bugs by adding this so |
231 // I would recommend keeping it. | 231 // I would recommend keeping it. |
232 EXPECT_TRUE(syncer_thread->Start()); | 232 EXPECT_TRUE(syncer_thread->Start()); |
233 EXPECT_TRUE(syncer_thread->Stop(2000)); | 233 EXPECT_TRUE(syncer_thread->Stop(2000)); |
234 } | 234 } |
235 | 235 |
236 TEST(SyncerThread, GetRecommendedDelay) { | 236 TEST(SyncerThread, GetRecommendedDelay) { |
237 EXPECT_LE(0, SyncerThread::GetRecommendedDelaySeconds(0)); | 237 EXPECT_LE(0, SyncerThread::GetRecommendedDelaySeconds(0)); |
238 EXPECT_LE(1, SyncerThread::GetRecommendedDelaySeconds(1)); | 238 EXPECT_LE(1, SyncerThread::GetRecommendedDelaySeconds(1)); |
239 EXPECT_LE(50, SyncerThread::GetRecommendedDelaySeconds(50)); | 239 EXPECT_LE(50, SyncerThread::GetRecommendedDelaySeconds(50)); |
240 EXPECT_LE(10, SyncerThread::GetRecommendedDelaySeconds(10)); | 240 EXPECT_LE(10, SyncerThread::GetRecommendedDelaySeconds(10)); |
241 EXPECT_EQ(SyncerThread::kMaxBackoffSeconds, | 241 EXPECT_EQ(SyncerThread::kMaxBackoffSeconds, |
242 SyncerThread::GetRecommendedDelaySeconds( | 242 SyncerThread::GetRecommendedDelaySeconds( |
243 SyncerThread::kMaxBackoffSeconds)); | 243 SyncerThread::kMaxBackoffSeconds)); |
244 EXPECT_EQ(SyncerThread::kMaxBackoffSeconds, | 244 EXPECT_EQ(SyncerThread::kMaxBackoffSeconds, |
245 SyncerThread::GetRecommendedDelaySeconds( | 245 SyncerThread::GetRecommendedDelaySeconds( |
246 SyncerThread::kMaxBackoffSeconds+1)); | 246 SyncerThread::kMaxBackoffSeconds+1)); |
247 } | 247 } |
248 | 248 |
249 TEST_F(SyncerThreadTest, CalculateSyncWaitTime) { | 249 TEST_F(SyncerThreadTest, CalculateSyncWaitTime) { |
250 SyncSessionContext* context = new SyncSessionContext(NULL, NULL, NULL, NULL); | 250 SyncSessionContext* context = new SyncSessionContext(NULL, NULL, NULL); |
251 scoped_refptr<SyncerThread> syncer_thread(new SyncerThread(context)); | 251 scoped_refptr<SyncerThread> syncer_thread(new SyncerThread(context)); |
252 syncer_thread->DisableIdleDetection(); | 252 syncer_thread->DisableIdleDetection(); |
253 | 253 |
254 // Syncer_polling_interval_ is less than max poll interval. | 254 // Syncer_polling_interval_ is less than max poll interval. |
255 TimeDelta syncer_polling_interval = TimeDelta::FromSeconds(1); | 255 TimeDelta syncer_polling_interval = TimeDelta::FromSeconds(1); |
256 | 256 |
257 syncer_thread->SetSyncerPollingInterval(syncer_polling_interval); | 257 syncer_thread->SetSyncerPollingInterval(syncer_polling_interval); |
258 | 258 |
259 // user_idle_ms is less than 10 * (syncer_polling_interval*1000). | 259 // user_idle_ms is less than 10 * (syncer_polling_interval*1000). |
260 ASSERT_EQ(syncer_polling_interval.InMilliseconds(), | 260 ASSERT_EQ(syncer_polling_interval.InMilliseconds(), |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 syncer_thread->CalculateSyncWaitTime(last_poll_time, | 300 syncer_thread->CalculateSyncWaitTime(last_poll_time, |
301 over_sync_max_interval)); | 301 over_sync_max_interval)); |
302 ASSERT_TRUE(last_poll_time * 3 >= | 302 ASSERT_TRUE(last_poll_time * 3 >= |
303 syncer_thread->CalculateSyncWaitTime(last_poll_time, | 303 syncer_thread->CalculateSyncWaitTime(last_poll_time, |
304 over_sync_max_interval)); | 304 over_sync_max_interval)); |
305 } | 305 } |
306 | 306 |
307 TEST_F(SyncerThreadTest, CalculatePollingWaitTime) { | 307 TEST_F(SyncerThreadTest, CalculatePollingWaitTime) { |
308 // Set up the environment. | 308 // Set up the environment. |
309 int user_idle_milliseconds_param = 0; | 309 int user_idle_milliseconds_param = 0; |
310 SyncSessionContext* context = new SyncSessionContext(NULL, NULL, NULL, NULL); | 310 SyncSessionContext* context = new SyncSessionContext(NULL, NULL, NULL); |
311 scoped_refptr<SyncerThread> syncer_thread(new SyncerThread(context)); | 311 scoped_refptr<SyncerThread> syncer_thread(new SyncerThread(context)); |
312 syncer_thread->DisableIdleDetection(); | 312 syncer_thread->DisableIdleDetection(); |
313 // Hold the lock to appease asserts in code. | 313 // Hold the lock to appease asserts in code. |
314 AutoLock lock(syncer_thread->lock_); | 314 AutoLock lock(syncer_thread->lock_); |
315 | 315 |
316 // Notifications disabled should result in a polling interval of | 316 // Notifications disabled should result in a polling interval of |
317 // kDefaultShortPollInterval. | 317 // kDefaultShortPollInterval. |
318 { | 318 { |
319 context->set_notifications_enabled(false); | 319 context->set_notifications_enabled(false); |
320 bool continue_sync_cycle_param = false; | 320 bool continue_sync_cycle_param = false; |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
632 } | 632 } |
633 | 633 |
634 TEST_F(SyncerThreadWithSyncerTest, Polling) { | 634 TEST_F(SyncerThreadWithSyncerTest, Polling) { |
635 SyncShareIntercept interceptor; | 635 SyncShareIntercept interceptor; |
636 connection()->SetMidCommitObserver(&interceptor); | 636 connection()->SetMidCommitObserver(&interceptor); |
637 | 637 |
638 const TimeDelta poll_interval = TimeDelta::FromSeconds(1); | 638 const TimeDelta poll_interval = TimeDelta::FromSeconds(1); |
639 syncer_thread()->SetSyncerShortPollInterval(poll_interval); | 639 syncer_thread()->SetSyncerShortPollInterval(poll_interval); |
640 EXPECT_TRUE(syncer_thread()->Start()); | 640 EXPECT_TRUE(syncer_thread()->Start()); |
641 | 641 |
642 // Calling Open() should cause the SyncerThread to create a Syncer. | |
643 metadb()->Open(); | 642 metadb()->Open(); |
| 643 syncer_thread()->CreateSyncer(metadb()->name()); |
644 | 644 |
645 TimeDelta two_polls = poll_interval + poll_interval; | 645 TimeDelta two_polls = poll_interval + poll_interval; |
646 // We could theoretically return immediately from the wait if the interceptor | 646 // We could theoretically return immediately from the wait if the interceptor |
647 // was already signaled for a SyncShare (the first one comes quick). | 647 // was already signaled for a SyncShare (the first one comes quick). |
648 interceptor.WaitForSyncShare(1, two_polls); | 648 interceptor.WaitForSyncShare(1, two_polls); |
649 EXPECT_FALSE(interceptor.times_sync_occured().empty()); | 649 EXPECT_FALSE(interceptor.times_sync_occured().empty()); |
650 | 650 |
651 // Wait for at least 2 more SyncShare operations. | 651 // Wait for at least 2 more SyncShare operations. |
652 interceptor.WaitForSyncShare(2, two_polls); | 652 interceptor.WaitForSyncShare(2, two_polls); |
653 EXPECT_TRUE(syncer_thread()->Stop(2000)); | 653 EXPECT_TRUE(syncer_thread()->Stop(2000)); |
(...skipping 12 matching lines...) Expand all Loading... |
666 } | 666 } |
667 } | 667 } |
668 | 668 |
669 TEST_F(SyncerThreadWithSyncerTest, Nudge) { | 669 TEST_F(SyncerThreadWithSyncerTest, Nudge) { |
670 SyncShareIntercept interceptor; | 670 SyncShareIntercept interceptor; |
671 connection()->SetMidCommitObserver(&interceptor); | 671 connection()->SetMidCommitObserver(&interceptor); |
672 // We don't want a poll to happen during this test (except the first one). | 672 // We don't want a poll to happen during this test (except the first one). |
673 PreventThreadFromPolling(); | 673 PreventThreadFromPolling(); |
674 EXPECT_TRUE(syncer_thread()->Start()); | 674 EXPECT_TRUE(syncer_thread()->Start()); |
675 metadb()->Open(); | 675 metadb()->Open(); |
| 676 syncer_thread()->CreateSyncer(metadb()->name()); |
676 const TimeDelta poll_interval = TimeDelta::FromMinutes(5); | 677 const TimeDelta poll_interval = TimeDelta::FromMinutes(5); |
677 interceptor.WaitForSyncShare(1, poll_interval + poll_interval); | 678 interceptor.WaitForSyncShare(1, poll_interval + poll_interval); |
678 | 679 |
679 EXPECT_EQ(static_cast<unsigned int>(1), | 680 EXPECT_EQ(static_cast<unsigned int>(1), |
680 interceptor.times_sync_occured().size()); | 681 interceptor.times_sync_occured().size()); |
681 // The SyncerThread should be waiting for the poll now. Nudge it to sync | 682 // The SyncerThread should be waiting for the poll now. Nudge it to sync |
682 // immediately (5ms). | 683 // immediately (5ms). |
683 syncer_thread()->NudgeSyncer(5, SyncerThread::kUnknown); | 684 syncer_thread()->NudgeSyncer(5, SyncerThread::kUnknown); |
684 interceptor.WaitForSyncShare(1, TimeDelta::FromSeconds(1)); | 685 interceptor.WaitForSyncShare(1, TimeDelta::FromSeconds(1)); |
685 EXPECT_EQ(static_cast<unsigned int>(2), | 686 EXPECT_EQ(static_cast<unsigned int>(2), |
686 interceptor.times_sync_occured().size()); | 687 interceptor.times_sync_occured().size()); |
687 | 688 |
688 // SyncerThread should be waiting again. Signal it to stop. | 689 // SyncerThread should be waiting again. Signal it to stop. |
689 EXPECT_TRUE(syncer_thread()->Stop(2000)); | 690 EXPECT_TRUE(syncer_thread()->Stop(2000)); |
690 } | 691 } |
691 | 692 |
692 TEST_F(SyncerThreadWithSyncerTest, Throttling) { | 693 TEST_F(SyncerThreadWithSyncerTest, Throttling) { |
693 SyncShareIntercept interceptor; | 694 SyncShareIntercept interceptor; |
694 connection()->SetMidCommitObserver(&interceptor); | 695 connection()->SetMidCommitObserver(&interceptor); |
695 const TimeDelta poll_interval = TimeDelta::FromMilliseconds(10); | 696 const TimeDelta poll_interval = TimeDelta::FromMilliseconds(10); |
696 syncer_thread()->SetSyncerShortPollInterval(poll_interval); | 697 syncer_thread()->SetSyncerShortPollInterval(poll_interval); |
697 | 698 |
698 EXPECT_TRUE(syncer_thread()->Start()); | 699 EXPECT_TRUE(syncer_thread()->Start()); |
699 metadb()->Open(); | 700 metadb()->Open(); |
| 701 syncer_thread()->CreateSyncer(metadb()->name()); |
700 | 702 |
701 // Wait for some healthy syncing. | 703 // Wait for some healthy syncing. |
702 interceptor.WaitForSyncShare(4, poll_interval + poll_interval); | 704 interceptor.WaitForSyncShare(4, poll_interval + poll_interval); |
703 | 705 |
704 // Tell the server to throttle a single request, which should be all it takes | 706 // Tell the server to throttle a single request, which should be all it takes |
705 // to silence our syncer (for 2 hours, so we shouldn't hit that in this test). | 707 // to silence our syncer (for 2 hours, so we shouldn't hit that in this test). |
706 // This will atomically visit the interceptor so it can switch to throttled | 708 // This will atomically visit the interceptor so it can switch to throttled |
707 // mode and fail on multiple requests. | 709 // mode and fail on multiple requests. |
708 connection()->ThrottleNextRequest(&interceptor); | 710 connection()->ThrottleNextRequest(&interceptor); |
709 | 711 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
743 | 745 |
744 EXPECT_CALL(listener, HandleChannelEvent( | 746 EXPECT_CALL(listener, HandleChannelEvent( |
745 Field(&SyncerEvent::what_happened, | 747 Field(&SyncerEvent::what_happened, |
746 SyncerEvent::STOP_SYNCING_PERMANENTLY))); | 748 SyncerEvent::STOP_SYNCING_PERMANENTLY))); |
747 EXPECT_CALL(listener, HandleChannelEvent( | 749 EXPECT_CALL(listener, HandleChannelEvent( |
748 Field(&SyncerEvent::what_happened, SyncerEvent::SYNCER_THREAD_EXITING))). | 750 Field(&SyncerEvent::what_happened, SyncerEvent::SYNCER_THREAD_EXITING))). |
749 WillOnce(SignalEvent(&syncer_thread_exiting_event)); | 751 WillOnce(SignalEvent(&syncer_thread_exiting_event)); |
750 | 752 |
751 EXPECT_TRUE(syncer_thread()->Start()); | 753 EXPECT_TRUE(syncer_thread()->Start()); |
752 metadb()->Open(); | 754 metadb()->Open(); |
| 755 syncer_thread()->CreateSyncer(metadb()->name()); |
753 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); | 756 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); |
754 | 757 |
755 connection()->set_store_birthday("NotYourLuckyDay"); | 758 connection()->set_store_birthday("NotYourLuckyDay"); |
756 ASSERT_TRUE(syncer_thread_exiting_event.TimedWait(max_wait_time_)); | 759 ASSERT_TRUE(syncer_thread_exiting_event.TimedWait(max_wait_time_)); |
757 EXPECT_TRUE(syncer_thread()->Stop(0)); | 760 EXPECT_TRUE(syncer_thread()->Stop(0)); |
758 } | 761 } |
759 | 762 |
760 TEST_F(SyncerThreadWithSyncerTest, AuthInvalid) { | 763 TEST_F(SyncerThreadWithSyncerTest, AuthInvalid) { |
761 SyncShareIntercept interceptor; | 764 SyncShareIntercept interceptor; |
762 connection()->SetMidCommitObserver(&interceptor); | 765 connection()->SetMidCommitObserver(&interceptor); |
763 const TimeDelta poll_interval = TimeDelta::FromMilliseconds(1); | 766 const TimeDelta poll_interval = TimeDelta::FromMilliseconds(1); |
764 | 767 |
765 syncer_thread()->SetSyncerShortPollInterval(poll_interval); | 768 syncer_thread()->SetSyncerShortPollInterval(poll_interval); |
766 EXPECT_TRUE(syncer_thread()->Start()); | 769 EXPECT_TRUE(syncer_thread()->Start()); |
767 metadb()->Open(); | 770 metadb()->Open(); |
| 771 syncer_thread()->CreateSyncer(metadb()->name()); |
768 | 772 |
769 // Wait for some healthy syncing. | 773 // Wait for some healthy syncing. |
770 interceptor.WaitForSyncShare(2, TimeDelta::FromSeconds(10)); | 774 interceptor.WaitForSyncShare(2, TimeDelta::FromSeconds(10)); |
771 EXPECT_GE(interceptor.times_sync_occured().size(), 2U); | 775 EXPECT_GE(interceptor.times_sync_occured().size(), 2U); |
772 | 776 |
773 // Atomically start returning auth invalid and set the interceptor to fail | 777 // Atomically start returning auth invalid and set the interceptor to fail |
774 // on any sync. | 778 // on any sync. |
775 connection()->FailWithAuthInvalid(&interceptor); | 779 connection()->FailWithAuthInvalid(&interceptor); |
776 WaitForDisconnect(); | 780 WaitForDisconnect(); |
777 | 781 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
819 Times(AnyNumber()); | 823 Times(AnyNumber()); |
820 | 824 |
821 // Wait for the initial sync to complete. | 825 // Wait for the initial sync to complete. |
822 EXPECT_CALL(listener, HandleChannelEvent( | 826 EXPECT_CALL(listener, HandleChannelEvent( |
823 Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))). | 827 Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))). |
824 WillOnce(SignalEvent(&sync_cycle_ended_event)); | 828 WillOnce(SignalEvent(&sync_cycle_ended_event)); |
825 EXPECT_CALL(listener, HandleChannelEvent( | 829 EXPECT_CALL(listener, HandleChannelEvent( |
826 Field(&SyncerEvent::what_happened, SyncerEvent::SYNCER_THREAD_EXITING))); | 830 Field(&SyncerEvent::what_happened, SyncerEvent::SYNCER_THREAD_EXITING))); |
827 ASSERT_TRUE(syncer_thread()->Start()); | 831 ASSERT_TRUE(syncer_thread()->Start()); |
828 metadb()->Open(); | 832 metadb()->Open(); |
| 833 syncer_thread()->CreateSyncer(metadb()->name()); |
829 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); | 834 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); |
830 | 835 |
831 // Request a pause. | 836 // Request a pause. |
832 ASSERT_TRUE(Pause(&listener)); | 837 ASSERT_TRUE(Pause(&listener)); |
833 | 838 |
834 // Resuming the pause. | 839 // Resuming the pause. |
835 ASSERT_TRUE(Resume(&listener)); | 840 ASSERT_TRUE(Resume(&listener)); |
836 | 841 |
837 // Not paused, should fail. | 842 // Not paused, should fail. |
838 EXPECT_FALSE(syncer_thread()->RequestResume()); | 843 EXPECT_FALSE(syncer_thread()->RequestResume()); |
(...skipping 23 matching lines...) Expand all Loading... |
862 PreventThreadFromPolling(); | 867 PreventThreadFromPolling(); |
863 | 868 |
864 EXPECT_CALL(listener, HandleChannelEvent( | 869 EXPECT_CALL(listener, HandleChannelEvent( |
865 Field(&SyncerEvent::what_happened, SyncerEvent::STATUS_CHANGED))). | 870 Field(&SyncerEvent::what_happened, SyncerEvent::STATUS_CHANGED))). |
866 Times(AnyNumber()); | 871 Times(AnyNumber()); |
867 EXPECT_CALL(listener, HandleChannelEvent( | 872 EXPECT_CALL(listener, HandleChannelEvent( |
868 Field(&SyncerEvent::what_happened, SyncerEvent::SYNCER_THREAD_EXITING))); | 873 Field(&SyncerEvent::what_happened, SyncerEvent::SYNCER_THREAD_EXITING))); |
869 | 874 |
870 connection()->SetServerNotReachable(); | 875 connection()->SetServerNotReachable(); |
871 metadb()->Open(); | 876 metadb()->Open(); |
| 877 syncer_thread()->CreateSyncer(metadb()->name()); |
872 | 878 |
873 // Syncer thread will always go through once cycle at the start, | 879 // Syncer thread will always go through once cycle at the start, |
874 // then it will wait for a connection. | 880 // then it will wait for a connection. |
875 EXPECT_CALL(listener, HandleChannelEvent( | 881 EXPECT_CALL(listener, HandleChannelEvent( |
876 Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))). | 882 Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))). |
877 WillOnce(SignalEvent(&sync_cycle_ended_event)); | 883 WillOnce(SignalEvent(&sync_cycle_ended_event)); |
878 EXPECT_CALL(listener, HandleChannelEvent( | 884 EXPECT_CALL(listener, HandleChannelEvent( |
879 Field(&SyncerEvent::what_happened, SyncerEvent::WAITING_FOR_CONNECTION))). | 885 Field(&SyncerEvent::what_happened, SyncerEvent::WAITING_FOR_CONNECTION))). |
880 WillOnce(SignalEvent(&event)); | 886 WillOnce(SignalEvent(&event)); |
881 ASSERT_TRUE(syncer_thread()->Start()); | 887 ASSERT_TRUE(syncer_thread()->Start()); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
916 | 922 |
917 // Put the thread into a "waiting for connection" state. | 923 // Put the thread into a "waiting for connection" state. |
918 connection()->SetServerNotReachable(); | 924 connection()->SetServerNotReachable(); |
919 EXPECT_CALL(listener, HandleChannelEvent( | 925 EXPECT_CALL(listener, HandleChannelEvent( |
920 Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))). | 926 Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))). |
921 WillOnce(SignalEvent(&sync_cycle_ended_event)); | 927 WillOnce(SignalEvent(&sync_cycle_ended_event)); |
922 EXPECT_CALL(listener, HandleChannelEvent( | 928 EXPECT_CALL(listener, HandleChannelEvent( |
923 Field(&SyncerEvent::what_happened, SyncerEvent::WAITING_FOR_CONNECTION))). | 929 Field(&SyncerEvent::what_happened, SyncerEvent::WAITING_FOR_CONNECTION))). |
924 WillOnce(SignalEvent(&event)); | 930 WillOnce(SignalEvent(&event)); |
925 metadb()->Open(); | 931 metadb()->Open(); |
| 932 syncer_thread()->CreateSyncer(metadb()->name()); |
| 933 |
926 ASSERT_TRUE(syncer_thread()->Start()); | 934 ASSERT_TRUE(syncer_thread()->Start()); |
927 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); | 935 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); |
928 ASSERT_TRUE(event.TimedWait(max_wait_time_)); | 936 ASSERT_TRUE(event.TimedWait(max_wait_time_)); |
929 | 937 |
930 // Pause and resume the thread while waiting for a connection. | 938 // Pause and resume the thread while waiting for a connection. |
931 ASSERT_TRUE(Pause(&listener)); | 939 ASSERT_TRUE(Pause(&listener)); |
932 ASSERT_TRUE(Resume(&listener)); | 940 ASSERT_TRUE(Resume(&listener)); |
933 | 941 |
934 // Make a connection and let the syncer cycle. | 942 // Make a connection and let the syncer cycle. |
935 EXPECT_CALL(listener, HandleChannelEvent( | 943 EXPECT_CALL(listener, HandleChannelEvent( |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
987 Field(&SyncerEvent::what_happened, SyncerEvent::STATUS_CHANGED))). | 995 Field(&SyncerEvent::what_happened, SyncerEvent::STATUS_CHANGED))). |
988 Times(AnyNumber()); | 996 Times(AnyNumber()); |
989 | 997 |
990 // Pause and resume the syncer while not running | 998 // Pause and resume the syncer while not running |
991 ASSERT_TRUE(Pause(&listener)); | 999 ASSERT_TRUE(Pause(&listener)); |
992 ASSERT_TRUE(Resume(&listener)); | 1000 ASSERT_TRUE(Resume(&listener)); |
993 | 1001 |
994 // Pause the thread then start the syncer. | 1002 // Pause the thread then start the syncer. |
995 ASSERT_TRUE(Pause(&listener)); | 1003 ASSERT_TRUE(Pause(&listener)); |
996 metadb()->Open(); | 1004 metadb()->Open(); |
| 1005 syncer_thread()->CreateSyncer(metadb()->name()); |
997 ASSERT_TRUE(syncer_thread()->Start()); | 1006 ASSERT_TRUE(syncer_thread()->Start()); |
998 | 1007 |
999 // Resume and let the syncer cycle. | 1008 // Resume and let the syncer cycle. |
1000 EXPECT_CALL(listener, HandleChannelEvent( | 1009 EXPECT_CALL(listener, HandleChannelEvent( |
1001 Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))). | 1010 Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))). |
1002 WillOnce(SignalEvent(&sync_cycle_ended_event)); | 1011 WillOnce(SignalEvent(&sync_cycle_ended_event)); |
1003 EXPECT_CALL(listener, HandleChannelEvent( | 1012 EXPECT_CALL(listener, HandleChannelEvent( |
1004 Field(&SyncerEvent::what_happened, SyncerEvent::SYNCER_THREAD_EXITING))); | 1013 Field(&SyncerEvent::what_happened, SyncerEvent::SYNCER_THREAD_EXITING))); |
1005 | 1014 |
1006 ASSERT_TRUE(Resume(&listener)); | 1015 ASSERT_TRUE(Resume(&listener)); |
1007 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); | 1016 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); |
1008 EXPECT_TRUE(syncer_thread()->Stop(2000)); | 1017 EXPECT_TRUE(syncer_thread()->Stop(2000)); |
1009 } | 1018 } |
1010 | 1019 |
1011 } // namespace browser_sync | 1020 } // namespace browser_sync |
OLD | NEW |