1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/time.h" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/engine/mock_model_safe_workers.h" 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/engine/syncer_thread.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/sessions/sync_session_context.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/sessions/test_util.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/test/sync/engine/mock_connection_manager.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/test/sync/engine/test_directory_setter_upper.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "testing/gmock/include/gmock/gmock.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing base::TimeDelta; 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing base::TimeTicks; 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace browser_sync { 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing sessions::SyncSessionContext; 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing browser_sync::Syncer; 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass SyncerThread2WhiteboxTest : public testing::Test { 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetUp() { 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncdb_.SetUp(); 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Syncer* syncer = new Syncer(); 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen registrar_.reset(MockModelSafeWorkerRegistrar::PassiveBookmarks()); 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen context_ = new SyncSessionContext(connection_.get(), syncdb_.manager(), 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen registrar_.get(), std::vector<SyncEngineEventListener*>()); 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen context_->set_notifications_enabled(true); 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen context_->set_account_name("Test"); 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncer_thread_.reset(new SyncerThread(context_, syncer)); 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void TearDown() { 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncdb_.TearDown(); 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetMode(SyncerThread::Mode mode) { 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncer_thread_->mode_ = mode; 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetLastSyncedTime(base::TimeTicks ticks) { 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncer_thread_->last_sync_session_end_time_ = ticks; 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetServerConnection(bool connected) { 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncer_thread_->server_connection_ok_ = connected; 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ResetWaitInterval() { 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncer_thread_->wait_interval_.reset(); 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetWaitIntervalToThrottled() { 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncer_thread_->wait_interval_.reset(new SyncerThread::WaitInterval( 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::WaitInterval::THROTTLED, TimeDelta::FromSeconds(1))); 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetWaitIntervalToExponentialBackoff() { 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncer_thread_->wait_interval_.reset( 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new SyncerThread::WaitInterval( 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::WaitInterval::EXPONENTIAL_BACKOFF, 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TimeDelta::FromSeconds(1))); 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision DecideOnJob( 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const SyncerThread::SyncSessionJob& job) { 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return syncer_thread_->DecideOnJob(job); 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void InitializeSyncerOnNormalMode() { 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::NORMAL_MODE); 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ResetWaitInterval(); 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetServerConnection(true); 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetLastSyncedTime(base::TimeTicks::Now()); 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision CreateAndDecideJob( 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::SyncSessionJobPurpose purpose) { 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen struct SyncerThread::SyncSessionJob job; 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen job.purpose = purpose; 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen job.scheduled_start = TimeTicks::Now(); 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return DecideOnJob(job); 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected: 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<SyncerThread> syncer_thread_; 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<MockConnectionManager> connection_; 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncSessionContext* context_; 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen //MockDelayProvider* delay_; 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<MockModelSafeWorkerRegistrar> registrar_; 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockDirectorySetterUpper syncdb_; 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, SaveNudge) { 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Now set the mode to configure. 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::CONFIGURATION_MODE); 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CreateAndDecideJob(SyncerThread::SyncSessionJob::NUDGE); 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::SAVE); 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, ContinueNudge) { 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = CreateAndDecideJob( 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::NUDGE); 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::CONTINUE); 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, DropPoll) { 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::CONFIGURATION_MODE); 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = CreateAndDecideJob( 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::POLL); 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::DROP); 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, ContinuePoll) { 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = CreateAndDecideJob( 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::POLL); 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::CONTINUE); 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, ContinueConfiguration) { 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::CONFIGURATION_MODE); 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = CreateAndDecideJob( 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::CONFIGURATION); 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::CONTINUE); 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, SaveConfigurationWhileThrottled) { 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::CONFIGURATION_MODE); 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetWaitIntervalToThrottled(); 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = CreateAndDecideJob( 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::CONFIGURATION); 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::SAVE); 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, SaveNudgeWhileThrottled) { 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::CONFIGURATION_MODE); 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetWaitIntervalToThrottled(); 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = CreateAndDecideJob( 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::NUDGE); 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::SAVE); 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, ContinueClearUserDataUnderAllCircumstances) { 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::CONFIGURATION_MODE); 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetWaitIntervalToThrottled(); 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = CreateAndDecideJob( 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::CLEAR_USER_DATA); 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::CONTINUE); 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::NORMAL_MODE); 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetWaitIntervalToExponentialBackoff(); 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen decision = CreateAndDecideJob( 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::CLEAR_USER_DATA); 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::CONTINUE); 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, ContinueNudgeWhileExponentialBackOff) { 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::NORMAL_MODE); 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetWaitIntervalToExponentialBackoff(); 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = CreateAndDecideJob( 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::NUDGE); 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::CONTINUE); 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, DropNudgeWhileExponentialBackOff) { 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::NORMAL_MODE); 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetWaitIntervalToExponentialBackoff(); 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen syncer_thread_->wait_interval_->had_nudge = true; 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = CreateAndDecideJob( 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::SyncSessionJob::NUDGE); 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::DROP); 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SyncerThread2WhiteboxTest, ContinueCanaryJobConfig) { 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeSyncerOnNormalMode(); 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetMode(SyncerThread::CONFIGURATION_MODE); 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetWaitIntervalToExponentialBackoff(); 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen struct SyncerThread::SyncSessionJob job; 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen job.purpose = SyncerThread::SyncSessionJob::CONFIGURATION; 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen job.scheduled_start = TimeTicks::Now(); 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen job.is_canary_job = true; 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SyncerThread::JobProcessDecision decision = DecideOnJob(job); 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(decision, SyncerThread::CONTINUE); 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace browser_sync 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// SyncerThread won't outlive the test! 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenDISABLE_RUNNABLE_METHOD_REFCOUNT( 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser_sync::SyncerThread2WhiteboxTest); 232