| Index: chrome/browser/sync/engine/syncer_thread2_unittest.cc
|
| diff --git a/chrome/browser/sync/engine/syncer_thread2_unittest.cc b/chrome/browser/sync/engine/syncer_thread2_unittest.cc
|
| index 70d2f736c98a3ca5ed9919b02c39030375315a79..89b7781a8382c327e7490ffca2d3550f849fd1eb 100644
|
| --- a/chrome/browser/sync/engine/syncer_thread2_unittest.cc
|
| +++ b/chrome/browser/sync/engine/syncer_thread2_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #include "chrome/browser/sync/engine/syncer.h"
|
| #include "chrome/browser/sync/engine/syncer_thread2.h"
|
| #include "chrome/browser/sync/sessions/test_util.h"
|
| +#include "chrome/test/sync/engine/mock_connection_manager.h"
|
| #include "chrome/test/sync/engine/test_directory_setter_upper.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| @@ -59,18 +60,19 @@ class SyncerThread2Test : public testing::Test {
|
| syncer_ = new MockSyncer();
|
| delay_ = NULL;
|
| registrar_.reset(MockModelSafeWorkerRegistrar::PassiveBookmarks());
|
| - context_ = new SyncSessionContext(NULL, syncdb_.manager(),
|
| + connection_.reset(new MockConnectionManager(syncdb_.manager(), "Test"));
|
| + connection_->SetServerReachable();
|
| + context_ = new SyncSessionContext(connection_.get(), syncdb_.manager(),
|
| registrar_.get(), std::vector<SyncEngineEventListener*>());
|
| context_->set_notifications_enabled(true);
|
| context_->set_account_name("Test");
|
| syncer_thread_.reset(new SyncerThread(context_, syncer_));
|
| - // TODO(tim): Once the SCM is hooked up, remove this.
|
| - syncer_thread_->server_connection_ok_ = true;
|
| }
|
|
|
| SyncerThread* syncer_thread() { return syncer_thread_.get(); }
|
| MockSyncer* syncer() { return syncer_; }
|
| MockDelayProvider* delay() { return delay_; }
|
| + MockConnectionManager* connection() { return connection_.get(); }
|
| TimeDelta zero() { return TimeDelta::FromSeconds(0); }
|
| TimeDelta timeout() {
|
| return TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms());
|
| @@ -96,7 +98,7 @@ class SyncerThread2Test : public testing::Test {
|
|
|
| bool GetBackoffAndResetTest(base::WaitableEvent* done) {
|
| syncable::ModelTypeBitSet nudge_types;
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, nudge_types);
|
| done->TimedWait(timeout());
|
| TearDown();
|
| @@ -146,8 +148,11 @@ class SyncerThread2Test : public testing::Test {
|
| return true;
|
| }
|
|
|
| + SyncSessionContext* context() { return context_; }
|
| +
|
| private:
|
| scoped_ptr<SyncerThread> syncer_thread_;
|
| + scoped_ptr<MockConnectionManager> connection_;
|
| SyncSessionContext* context_;
|
| MockSyncer* syncer_;
|
| MockDelayProvider* delay_;
|
| @@ -179,7 +184,7 @@ ACTION_P(SignalEvent, event) {
|
|
|
| // Test nudge scheduling.
|
| TEST_F(SyncerThread2Test, Nudge) {
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| base::WaitableEvent done(false, false);
|
| SyncShareRecords records;
|
| syncable::ModelTypeBitSet model_types;
|
| @@ -217,7 +222,7 @@ TEST_F(SyncerThread2Test, Nudge) {
|
|
|
| // Test that nudges are coalesced.
|
| TEST_F(SyncerThread2Test, NudgeCoalescing) {
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| base::WaitableEvent done(false, false);
|
| SyncShareRecords r;
|
| EXPECT_CALL(*syncer(), SyncShare(_,_,_))
|
| @@ -257,7 +262,7 @@ TEST_F(SyncerThread2Test, NudgeCoalescing) {
|
|
|
| // Test nudge scheduling.
|
| TEST_F(SyncerThread2Test, NudgeWithPayloads) {
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| base::WaitableEvent done(false, false);
|
| SyncShareRecords records;
|
| syncable::ModelTypePayloadMap model_types_with_payloads;
|
| @@ -295,7 +300,7 @@ TEST_F(SyncerThread2Test, NudgeWithPayloads) {
|
|
|
| // Test that nudges are coalesced.
|
| TEST_F(SyncerThread2Test, NudgeWithPayloadsCoalescing) {
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| base::WaitableEvent done(false, false);
|
| SyncShareRecords r;
|
| EXPECT_CALL(*syncer(), SyncShare(_,_,_))
|
| @@ -349,7 +354,7 @@ TEST_F(SyncerThread2Test, Polling) {
|
| WithArg<0>(RecordSyncShare(&records, kMinNumSamples, &done))));
|
|
|
| TimeTicks optimal_start = TimeTicks::Now() + poll_interval;
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| done.TimedWait(timeout());
|
| syncer_thread()->Stop();
|
|
|
| @@ -368,7 +373,7 @@ TEST_F(SyncerThread2Test, PollNotificationsDisabled) {
|
| WithArg<0>(RecordSyncShare(&records, kMinNumSamples, &done))));
|
|
|
| TimeTicks optimal_start = TimeTicks::Now() + poll_interval;
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| done.TimedWait(timeout());
|
| syncer_thread()->Stop();
|
|
|
| @@ -389,7 +394,7 @@ TEST_F(SyncerThread2Test, PollIntervalUpdate) {
|
| WithArg<0>(RecordSyncShare(&records, kMinNumSamples, &done))));
|
|
|
| TimeTicks optimal_start = TimeTicks::Now() + poll1 + poll2;
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| done.TimedWait(timeout());
|
| syncer_thread()->Stop();
|
|
|
| @@ -398,7 +403,7 @@ TEST_F(SyncerThread2Test, PollIntervalUpdate) {
|
|
|
| // Test that a sync session is run through to completion.
|
| TEST_F(SyncerThread2Test, HasMoreToSync) {
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| base::WaitableEvent done(false, false);
|
| EXPECT_CALL(*syncer(), SyncShare(_,_,_))
|
| .WillOnce(Invoke(sessions::test_util::SimulateHasMoreToSync))
|
| @@ -421,11 +426,11 @@ TEST_F(SyncerThread2Test, ThrottlingDoesThrottle) {
|
| EXPECT_CALL(*syncer(), SyncShare(_,_,_))
|
| .WillOnce(WithArg<0>(sessions::test_util::SimulateThrottled(throttle)));
|
|
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, types);
|
| FlushLastTask(&done);
|
|
|
| - syncer_thread()->Start(SyncerThread::CONFIGURATION_MODE);
|
| + syncer_thread()->Start(SyncerThread::CONFIGURATION_MODE, NULL);
|
| syncer_thread()->ScheduleConfig(types);
|
| FlushLastTask(&done);
|
| }
|
| @@ -447,7 +452,7 @@ TEST_F(SyncerThread2Test, ThrottlingExpires) {
|
| WithArg<0>(RecordSyncShare(&records, kMinNumSamples, &done))));
|
|
|
| TimeTicks optimal_start = TimeTicks::Now() + poll + throttle1;
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| done.TimedWait(timeout());
|
| syncer_thread()->Stop();
|
|
|
| @@ -464,7 +469,7 @@ TEST_F(SyncerThread2Test, ConfigurationMode) {
|
| EXPECT_CALL(*syncer(), SyncShare(_,_,_))
|
| .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess),
|
| WithArg<0>(RecordSyncShare(&records, 1U, dummy))));
|
| - syncer_thread()->Start(SyncerThread::CONFIGURATION_MODE);
|
| + syncer_thread()->Start(SyncerThread::CONFIGURATION_MODE, NULL);
|
| syncable::ModelTypeBitSet nudge_types;
|
| nudge_types[syncable::AUTOFILL] = true;
|
| syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, nudge_types);
|
| @@ -540,7 +545,7 @@ TEST_F(SyncerThread2Test, BackoffDropsJobs) {
|
| EXPECT_CALL(*delay(), GetDelay(_))
|
| .WillRepeatedly(Return(TimeDelta::FromDays(1)));
|
|
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| ASSERT_TRUE(done.TimedWait(timeout()));
|
| done.Reset();
|
|
|
| @@ -570,11 +575,11 @@ TEST_F(SyncerThread2Test, BackoffDropsJobs) {
|
| EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(0);
|
| EXPECT_CALL(*delay(), GetDelay(_)).Times(0);
|
|
|
| - syncer_thread()->Start(SyncerThread::CONFIGURATION_MODE);
|
| + syncer_thread()->Start(SyncerThread::CONFIGURATION_MODE, NULL);
|
| syncer_thread()->ScheduleConfig(types);
|
| FlushLastTask(&done);
|
|
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, types);
|
| syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, types);
|
| FlushLastTask(&done);
|
| @@ -606,7 +611,7 @@ TEST_F(SyncerThread2Test, BackoffElevation) {
|
| .RetiresOnSaturation();
|
| EXPECT_CALL(*delay(), GetDelay(Eq(fourth))).WillOnce(Return(fifth));
|
|
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| ASSERT_TRUE(done.TimedWait(timeout()));
|
|
|
| EXPECT_GE(r.times[2] - r.times[1], second);
|
| @@ -634,7 +639,7 @@ TEST_F(SyncerThread2Test, BackoffRelief) {
|
|
|
| // Optimal start for the post-backoff poll party.
|
| TimeTicks optimal_start = TimeTicks::Now() + poll + backoff;
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| done.TimedWait(timeout());
|
| syncer_thread()->Stop();
|
|
|
| @@ -673,7 +678,7 @@ TEST_F(SyncerThread2Test, SyncerSteps) {
|
| base::WaitableEvent done(false, false);
|
| EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END))
|
| .Times(1);
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, ModelTypeBitSet());
|
| FlushLastTask(&done);
|
| syncer_thread()->Stop();
|
| @@ -682,7 +687,7 @@ TEST_F(SyncerThread2Test, SyncerSteps) {
|
| // ClearUserData.
|
| EXPECT_CALL(*syncer(), SyncShare(_, CLEAR_PRIVATE_DATA, SYNCER_END))
|
| .Times(1);
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| syncer_thread()->ScheduleClearUserData();
|
| FlushLastTask(&done);
|
| syncer_thread()->Stop();
|
| @@ -690,7 +695,7 @@ TEST_F(SyncerThread2Test, SyncerSteps) {
|
|
|
| // Configuration.
|
| EXPECT_CALL(*syncer(), SyncShare(_, DOWNLOAD_UPDATES, APPLY_UPDATES));
|
| - syncer_thread()->Start(SyncerThread::CONFIGURATION_MODE);
|
| + syncer_thread()->Start(SyncerThread::CONFIGURATION_MODE, NULL);
|
| syncer_thread()->ScheduleConfig(ModelTypeBitSet());
|
| FlushLastTask(&done);
|
| syncer_thread()->Stop();
|
| @@ -702,7 +707,7 @@ TEST_F(SyncerThread2Test, SyncerSteps) {
|
| .WillRepeatedly(SignalEvent(&done));
|
| const TimeDelta poll(TimeDelta::FromMilliseconds(10));
|
| syncer_thread()->OnReceivedLongPollIntervalUpdate(poll);
|
| - syncer_thread()->Start(SyncerThread::NORMAL_MODE);
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| done.TimedWait(timeout());
|
| syncer_thread()->Stop();
|
| Mock::VerifyAndClearExpectations(syncer());
|
| @@ -716,10 +721,34 @@ TEST_F(SyncerThread2Test, DISABLED_NoConfigDuringNormal) {
|
|
|
| // Test that starting the syncer thread without a valid connection doesn't
|
| // break things when a connection is detected.
|
| -// Test config tasks don't run during normal mode.
|
| -// TODO(tim): Implement this test and then the functionality!
|
| -TEST_F(SyncerThread2Test, DISABLED_StartWhenNotConnected) {
|
| +TEST_F(SyncerThread2Test, StartWhenNotConnected) {
|
| + base::WaitableEvent done(false, false);
|
| + connection()->SetServerNotReachable();
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| + syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, ModelTypeBitSet());
|
| + FlushLastTask(&done);
|
| +
|
| + connection()->SetServerReachable();
|
| + EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(1);
|
| + syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, ModelTypeBitSet());
|
| + FlushLastTask(&done);
|
| +}
|
| +
|
| +TEST_F(SyncerThread2Test, SetsPreviousRoutingInfo) {
|
| + base::WaitableEvent done(false, false);
|
| + ModelSafeRoutingInfo info;
|
| + EXPECT_TRUE(info == context()->previous_session_routing_info());
|
| + ModelSafeRoutingInfo expected;
|
| + context()->registrar()->GetModelSafeRoutingInfo(&expected);
|
| + ASSERT_FALSE(expected.empty());
|
| + EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(1);
|
| +
|
| + syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
|
| + syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, ModelTypeBitSet());
|
| + FlushLastTask(&done);
|
| + syncer_thread()->Stop();
|
|
|
| + EXPECT_TRUE(expected == context()->previous_session_routing_info());
|
| }
|
|
|
| } // namespace s3
|
|
|