Index: chrome/browser/sync/profile_sync_service_unittest.cc |
diff --git a/chrome/browser/sync/profile_sync_service_unittest.cc b/chrome/browser/sync/profile_sync_service_unittest.cc |
index 1d589b34d3ebb2204de9a60f84ff43d4f1018e32..e5c3b94704fb8257f5b678bf3f1dc51de0e015e8 100644 |
--- a/chrome/browser/sync/profile_sync_service_unittest.cc |
+++ b/chrome/browser/sync/profile_sync_service_unittest.cc |
@@ -21,9 +21,11 @@ |
#include "chrome/test/base/testing_profile.h" |
#include "content/public/common/content_client.h" |
#include "content/public/test/test_browser_thread.h" |
+#include "google/cacheinvalidation/include/types.h" |
#include "sync/js/js_arg_list.h" |
#include "sync/js/js_event_details.h" |
#include "sync/js/js_test_util.h" |
+#include "sync/notifier/mock_sync_notifier_observer.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "webkit/glue/webkit_glue.h" |
@@ -40,6 +42,7 @@ using content::BrowserThread; |
using testing::_; |
using testing::AtLeast; |
using testing::AtMost; |
+using testing::Mock; |
using testing::Return; |
using testing::StrictMock; |
@@ -82,7 +85,7 @@ class ProfileSyncServiceTest : public testing::Test { |
void StartSyncService() { |
StartSyncServiceAndSetInitialSyncEnded( |
- true, true, false, true, true, syncer::STORAGE_IN_MEMORY); |
+ true, true, false, true, syncer::STORAGE_IN_MEMORY); |
} |
void StartSyncServiceAndSetInitialSyncEnded( |
@@ -90,7 +93,6 @@ class ProfileSyncServiceTest : public testing::Test { |
bool issue_auth_token, |
bool synchronous_sync_configuration, |
bool sync_setup_completed, |
- bool expect_create_dtm, |
syncer::StorageOption storage_option) { |
if (!service_.get()) { |
SigninManager* signin = |
@@ -113,14 +115,9 @@ class ProfileSyncServiceTest : public testing::Test { |
if (!sync_setup_completed) |
profile_->GetPrefs()->SetBoolean(prefs::kSyncHasSetupCompleted, false); |
- if (expect_create_dtm) { |
- // Register the bookmark data type. |
- EXPECT_CALL(*factory, CreateDataTypeManager(_, _)). |
- WillOnce(ReturnNewDataTypeManager()); |
- } else { |
- EXPECT_CALL(*factory, CreateDataTypeManager(_, _)). |
- Times(0); |
- } |
+ // Register the bookmark data type. |
+ ON_CALL(*factory, CreateDataTypeManager(_, _)). |
+ WillByDefault(ReturnNewDataTypeManager()); |
if (issue_auth_token) { |
IssueTestTokens(); |
@@ -252,7 +249,7 @@ TEST_F(ProfileSyncServiceTest, JsControllerHandlersBasic) { |
TEST_F(ProfileSyncServiceTest, |
JsControllerHandlersDelayedBackendInitialization) { |
- StartSyncServiceAndSetInitialSyncEnded(true, false, false, true, true, |
+ StartSyncServiceAndSetInitialSyncEnded(true, false, false, true, |
syncer::STORAGE_IN_MEMORY); |
StrictMock<syncer::MockJsEventHandler> event_handler; |
@@ -294,7 +291,7 @@ TEST_F(ProfileSyncServiceTest, JsControllerProcessJsMessageBasic) { |
TEST_F(ProfileSyncServiceTest, |
JsControllerProcessJsMessageBasicDelayedBackendInitialization) { |
- StartSyncServiceAndSetInitialSyncEnded(true, false, false, true, true, |
+ StartSyncServiceAndSetInitialSyncEnded(true, false, false, true, |
syncer::STORAGE_IN_MEMORY); |
StrictMock<syncer::MockJsReplyHandler> reply_handler; |
@@ -337,7 +334,7 @@ TEST_F(ProfileSyncServiceTest, TestStartupWithOldSyncData) { |
ASSERT_NE(-1, |
file_util::WriteFile(sync_file3, nonsense3, strlen(nonsense3))); |
- StartSyncServiceAndSetInitialSyncEnded(false, false, true, false, true, |
+ StartSyncServiceAndSetInitialSyncEnded(false, false, true, false, |
syncer::STORAGE_ON_DISK); |
EXPECT_FALSE(service_->HasSyncSetupCompleted()); |
EXPECT_FALSE(service_->sync_initialized()); |
@@ -365,12 +362,69 @@ TEST_F(ProfileSyncServiceTest, TestStartupWithOldSyncData) { |
// recreate it. This test is useful mainly when it is run under valgrind. Its |
// expectations are not very interesting. |
TEST_F(ProfileSyncServiceTest, FailToOpenDatabase) { |
- StartSyncServiceAndSetInitialSyncEnded(false, true, true, true, false, |
+ StartSyncServiceAndSetInitialSyncEnded(false, true, true, true, |
syncer::STORAGE_INVALID); |
// The backend is not ready. Ensure the PSS knows this. |
EXPECT_FALSE(service_->sync_initialized()); |
} |
+// Register for some IDs with the ProfileSyncService and trigger some |
+// invalidation messages. They should be received by the observer. |
+// Then unregister and trigger the invalidation messages again. Those |
+// shouldn't be received by the observer. |
+TEST_F(ProfileSyncServiceTest, UpdateRegisteredInvalidationIds) { |
+ StartSyncService(); |
+ |
+ syncer::ObjectIdSet ids; |
+ ids.insert(invalidation::ObjectId(1, "id1")); |
+ ids.insert(invalidation::ObjectId(2, "id2")); |
+ const syncer::ObjectIdPayloadMap& payloads = |
+ syncer::ObjectIdSetToPayloadMap(ids, "payload"); |
+ |
+ StrictMock<syncer::MockSyncNotifierObserver> observer; |
+ EXPECT_CALL(observer, OnNotificationsEnabled()); |
+ EXPECT_CALL(observer, OnNotificationsDisabled( |
+ syncer::TRANSIENT_NOTIFICATION_ERROR)); |
+ EXPECT_CALL(observer, OnIncomingNotification( |
+ payloads, syncer::REMOTE_NOTIFICATION)); |
+ |
+ service_->UpdateRegisteredInvalidationIds(&observer, ids); |
+ |
+ SyncBackendHostForProfileSyncTest* const backend = |
+ service_->GetBackendForTest(); |
+ |
+ backend->EmitOnNotificationsEnabled(); |
+ backend->EmitOnNotificationsDisabled(syncer::TRANSIENT_NOTIFICATION_ERROR); |
+ backend->EmitOnIncomingNotification(payloads, syncer::REMOTE_NOTIFICATION); |
msw
2012/08/03 05:14:21
nit: It seems odd to test emitting notifications a
|
+ |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ service_->UpdateRegisteredInvalidationIds(&observer, syncer::ObjectIdSet()); |
+ |
+ backend->EmitOnNotificationsEnabled(); |
+ backend->EmitOnNotificationsDisabled(syncer::TRANSIENT_NOTIFICATION_ERROR); |
+ backend->EmitOnIncomingNotification(payloads, syncer::REMOTE_NOTIFICATION); |
+} |
+ |
+// Register for some IDs with the ProfileSyncService, restart sync, |
+// and trigger some invalidation messages. They should still be |
+// received by the observer. |
+TEST_F(ProfileSyncServiceTest, UpdateRegisteredInvalidationIdsPersistence) { |
+ StartSyncService(); |
+ |
+ StrictMock<syncer::MockSyncNotifierObserver> observer; |
+ EXPECT_CALL(observer, OnNotificationsEnabled()); |
msw
2012/08/03 05:14:21
Perhaps I'm confused, but this test doesn't appear
|
+ |
+ syncer::ObjectIdSet ids; |
+ ids.insert(invalidation::ObjectId(3, "id3")); |
+ service_->UpdateRegisteredInvalidationIds(&observer, ids); |
+ |
+ service_->StopAndSuppress(); |
+ service_->UnsuppressAndStart(); |
+ |
+ service_->GetBackendForTest()->EmitOnNotificationsEnabled(); |
+} |
+ |
} // namespace |
} // namespace browser_sync |