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

Unified Diff: chrome/browser/sync/engine/syncer_thread2_unittest.cc

Issue 6690020: sync: hook up ServerConnectionManager <> SyncerThread2 and tie up more loose ends (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/debug
Patch Set: fix Created 9 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/sync/engine/syncer_thread2.cc ('k') | chrome/browser/sync/engine/syncer_thread_adapter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..ac03cfbf9cf4dac965a8e421e33d7382c42d56fe 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();
@@ -130,6 +132,10 @@ class SyncerThread2Test : public testing::Test {
event->Signal();
}
+ static void QuitMessageLoop() {
+ MessageLoop::current()->Quit();
+ }
+
// Compare a ModelTypeBitSet to a ModelTypePayloadMap, ignoring
// payload values.
bool CompareModelTypeBitSetToModelTypePayloadMap(
@@ -146,8 +152,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 +188,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 +226,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 +266,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 +304,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 +358,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 +377,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 +398,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 +407,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 +430,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 +456,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 +473,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 +549,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 +579,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 +615,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 +643,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 +682,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,15 +691,14 @@ 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();
Mock::VerifyAndClearExpectations(syncer());
-
// 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 +710,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 +724,42 @@ 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);
+ MessageLoop cur;
+ connection()->SetServerNotReachable();
+ syncer_thread()->Start(SyncerThread::NORMAL_MODE, NULL);
+ syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, ModelTypeBitSet());
+ FlushLastTask(&done);
+ connection()->SetServerReachable();
+ cur.PostTask(FROM_HERE, NewRunnableFunction(
+ &SyncerThread2Test::QuitMessageLoop));
+ cur.Run();
+
+ // By now, the server connection event should have been posted to the
+ // SyncerThread.
+ FlushLastTask(&done);
+ EXPECT_CALL(*syncer(), SyncShare(_,_,_)).WillOnce(SignalEvent(&done));
+ syncer_thread()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, ModelTypeBitSet());
+ done.TimedWait(timeout());
+}
+
+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
@@ -727,4 +767,3 @@ TEST_F(SyncerThread2Test, DISABLED_StartWhenNotConnected) {
// SyncerThread won't outlive the test!
DISABLE_RUNNABLE_METHOD_REFCOUNT(browser_sync::s3::SyncerThread2Test);
-
« no previous file with comments | « chrome/browser/sync/engine/syncer_thread2.cc ('k') | chrome/browser/sync/engine/syncer_thread_adapter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698