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

Unified Diff: sync/internal_api/syncapi_unittest.cc

Issue 10483015: [Sync] Refactor sync configuration logic. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: SetBool -> CallbackCounter Created 8 years, 6 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
Index: sync/internal_api/syncapi_unittest.cc
diff --git a/sync/internal_api/syncapi_unittest.cc b/sync/internal_api/syncapi_unittest.cc
index e8fa2bd7f26eb9d7acdc206f91a4ee764e260524..545661db1233dcbd880a213a7479eff5191f2870 100644
--- a/sync/internal_api/syncapi_unittest.cc
+++ b/sync/internal_api/syncapi_unittest.cc
@@ -24,6 +24,7 @@
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "sync/engine/nigori_util.h"
+#include "sync/engine/sync_scheduler.h"
#include "sync/internal_api/change_record.h"
#include "sync/internal_api/http_post_provider_factory.h"
#include "sync/internal_api/http_post_provider_interface.h"
@@ -54,6 +55,7 @@
#include "sync/sessions/sync_session.h"
#include "sync/syncable/syncable.h"
#include "sync/syncable/syncable_id.h"
+#include "sync/test/callback_counter.h"
#include "sync/test/fake_encryptor.h"
#include "sync/test/fake_extensions_activity_monitor.h"
#include "sync/util/cryptographer.h"
@@ -64,6 +66,7 @@
#include "testing/gtest/include/gtest/gtest.h"
using base::ExpectDictStringValue;
+using browser_sync::CallbackCounter;
using browser_sync::Cryptographer;
using browser_sync::FakeEncryptor;
using browser_sync::FakeExtensionsActivityMonitor;
@@ -720,6 +723,35 @@ class SyncNotifierMock : public sync_notifier::SyncNotifier {
MOCK_METHOD1(SendNotification, void(syncable::ModelTypeSet));
};
+class TestSyncManager : public SyncManager {
+ public:
+ TestSyncManager()
+ : SyncManager("Test sync manager"),
+ result_(true) {}
+
+ browser_sync::ConfigureParams get_config_params() const { return params_; }
+ void set_config_result(bool result) { result_ = result; }
+
+ protected:
+ // SyncManager implementation.
+ virtual bool DoConfigureSyncer(
+ const browser_sync::ConfigureParams& params) OVERRIDE {
+ params_ = params;
+ if (params.ready_task.is_null()) {
+ ADD_FAILURE();
+ return result_;
+ }
+
+ if (result_)
+ params.ready_task.Run();
+ return result_;
+ }
+
+ private:
+ browser_sync::ConfigureParams params_;
+ bool result_;
+};
+
} // namespace
class SyncManagerTest : public testing::Test,
@@ -738,7 +770,6 @@ class SyncManagerTest : public testing::Test,
SyncManagerTest()
: sync_notifier_mock_(NULL),
- sync_manager_("Test sync manager"),
sync_notifier_observer_(NULL),
update_enabled_types_call_count_(0) {}
@@ -939,7 +970,7 @@ class SyncManagerTest : public testing::Test,
protected:
FakeEncryptor encryptor_;
TestUnrecoverableErrorHandler handler_;
- SyncManager sync_manager_;
+ TestSyncManager sync_manager_;
WeakHandle<JsBackend> js_backend_;
StrictMock<SyncManagerObserverMock> observer_;
sync_notifier::SyncNotifierObserver* sync_notifier_observer_;
@@ -2507,4 +2538,58 @@ TEST_F(SyncManagerTest, SetPreviouslyEncryptedSpecifics) {
}
}
+// Test that the configuration params are properly sent to DoConfigureSyncer.
+TEST_F(SyncManagerTest, BasicConfiguration) {
+ ConfigureReason reason = CONFIGURE_REASON_RECONFIGURATION;
+ syncable::ModelTypeSet types_to_config(syncable::BOOKMARKS,
+ syncable::PREFERENCES);
+ browser_sync::ModelSafeRoutingInfo new_routing_info;
+ GetModelSafeRoutingInfo(&new_routing_info);
+ sync_manager_.set_config_result(true);
+
+ CallbackCounter ready_task_counter, retry_task_counter;
+ sync_manager_.ConfigureSyncer(
+ reason,
+ types_to_config,
+ new_routing_info,
+ base::Bind(&CallbackCounter::Callback,
+ base::Unretained(&ready_task_counter)),
+ base::Bind(&CallbackCounter::Callback,
+ base::Unretained(&retry_task_counter)));
+ EXPECT_EQ(1, ready_task_counter.times_called());
+ EXPECT_EQ(0, retry_task_counter.times_called());
+ browser_sync::ConfigureParams params = sync_manager_.get_config_params();
+ EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::RECONFIGURATION,
+ params.source);
+ EXPECT_TRUE(types_to_config.Equals(params.types_to_config));
+ EXPECT_EQ(new_routing_info, params.routing_info);
+}
+
+// Test that the retry callback is invoked on configuration failure.
+TEST_F(SyncManagerTest, ConfigurationRetry) {
+ ConfigureReason reason = CONFIGURE_REASON_RECONFIGURATION;
+ syncable::ModelTypeSet types_to_config(syncable::BOOKMARKS,
+ syncable::PREFERENCES);
+ browser_sync::ModelSafeRoutingInfo new_routing_info;
+ GetModelSafeRoutingInfo(&new_routing_info);
+ sync_manager_.set_config_result(false);
+
+ CallbackCounter ready_task_counter, retry_task_counter;
+ sync_manager_.ConfigureSyncer(
+ reason,
+ types_to_config,
+ new_routing_info,
+ base::Bind(&CallbackCounter::Callback,
+ base::Unretained(&ready_task_counter)),
+ base::Bind(&CallbackCounter::Callback,
+ base::Unretained(&retry_task_counter)));
+ EXPECT_EQ(0, ready_task_counter.times_called());
+ EXPECT_EQ(1, retry_task_counter.times_called());
+ browser_sync::ConfigureParams params = sync_manager_.get_config_params();
+ EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::RECONFIGURATION,
+ params.source);
+ EXPECT_TRUE(types_to_config.Equals(params.types_to_config));
+ EXPECT_EQ(new_routing_info, params.routing_info);
+}
+
} // namespace browser_sync

Powered by Google App Engine
This is Rietveld 408576698