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

Unified Diff: chrome/browser/sync/profile_sync_service_unittest.cc

Issue 67683005: Clean up TestProfileSyncService and related tests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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: 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 e7ccdc6138eee151aa750e493ca513cd202e6acb..3451c1a92e1c6e58924e9f713a71a06cfde9dab2 100644
--- a/chrome/browser/sync/profile_sync_service_unittest.cc
+++ b/chrome/browser/sync/profile_sync_service_unittest.cc
@@ -8,135 +8,38 @@
#include "base/run_loop.h"
#include "base/values.h"
#include "chrome/browser/invalidation/invalidation_service_factory.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
#include "chrome/browser/signin/signin_manager.h"
#include "chrome/browser/signin/signin_manager_factory.h"
#include "chrome/browser/signin/token_service.h"
#include "chrome/browser/signin/token_service_factory.h"
#include "chrome/browser/sync/fake_oauth2_token_service.h"
-#include "chrome/browser/sync/glue/bookmark_data_type_controller.h"
-#include "chrome/browser/sync/glue/data_type_controller.h"
+#include "chrome/browser/sync/glue/data_type_manager_impl.h"
#include "chrome/browser/sync/glue/sync_backend_host_mock.h"
#include "chrome/browser/sync/profile_sync_components_factory_mock.h"
-#include "chrome/browser/sync/test_profile_sync_service.h"
-#include "chrome/common/chrome_version_info.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/testing_pref_service_syncable.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/test/test_browser_thread_bundle.h"
-#include "content/public/test/test_utils.h"
-#include "google/cacheinvalidation/include/types.h"
#include "google_apis/gaia/gaia_constants.h"
-#include "sync/js/js_arg_list.h"
-#include "sync/js/js_event_details.h"
-#include "sync/js/js_test_util.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-// TODO(akalin): Add tests here that exercise the whole
-// ProfileSyncService/SyncBackendHost stack while mocking out as
-// little as possible.
-
namespace browser_sync {
namespace {
-using testing::_;
-using testing::AtLeast;
-using testing::AtMost;
-using testing::Mock;
-using testing::Return;
-using testing::StrictMock;
-
-void SignalDone(base::WaitableEvent* done) {
- done->Signal();
+ACTION(ReturnNewDataTypeManager) {
pavely 2013/12/02 19:00:55 I don't think you are using ReturnNewDataTypeManag
rlarocque 2013/12/02 21:08:59 It's used in ExpectDataTypeManagerCreation() on li
+ return new browser_sync::DataTypeManagerImpl(arg0,
+ arg1,
+ arg2,
+ arg3,
+ arg4,
+ arg5);
}
-class ProfileSyncServiceTest : public testing::Test {
- protected:
- ProfileSyncServiceTest()
- : thread_bundle_(content::TestBrowserThreadBundle::REAL_DB_THREAD |
- content::TestBrowserThreadBundle::REAL_FILE_THREAD |
- content::TestBrowserThreadBundle::REAL_IO_THREAD) {
- }
-
- virtual ~ProfileSyncServiceTest() {}
-
- virtual void SetUp() OVERRIDE {
- TestingProfile::Builder builder;
- builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(),
- FakeOAuth2TokenService::BuildTokenService);
- profile_ = builder.Build().Pass();
- invalidation::InvalidationServiceFactory::GetInstance()->
- SetBuildOnlyFakeInvalidatorsForTest(true);
- }
-
- virtual void TearDown() OVERRIDE {
- // Kill the service before the profile.
- if (service_)
- service_->Shutdown();
-
- service_.reset();
- profile_.reset();
-
- // Pump messages posted by the sync thread (which may end up
- // posting on the IO thread).
- base::RunLoop().RunUntilIdle();
- content::RunAllPendingInMessageLoop(content::BrowserThread::IO);
- base::RunLoop().RunUntilIdle();
- }
-
- void StartSyncServiceAndSetInitialSyncEnded() {
- if (service_)
- return;
-
- SigninManagerBase* signin =
- SigninManagerFactory::GetForProfile(profile_.get());
- signin->SetAuthenticatedUsername("test");
- ProfileOAuth2TokenService* oauth2_token_service =
- ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get());
- ProfileSyncComponentsFactoryMock* factory =
- new ProfileSyncComponentsFactoryMock();
- service_.reset(new TestProfileSyncService(
- factory,
- profile_.get(),
- signin,
- oauth2_token_service,
- ProfileSyncService::AUTO_START,
- true));
-
-
- // Register the bookmark data type.
- ON_CALL(*factory, CreateDataTypeManager(_, _, _, _, _, _)).
- WillByDefault(ReturnNewDataTypeManager());
-
- service_->Initialize();
- }
-
- void WaitForBackendInitDone() {
- for (int i = 0; i < 5; ++i) {
- base::WaitableEvent done(false, false);
- service_->GetBackendForTest()->GetSyncLoopForTesting()
- ->PostTask(FROM_HERE, base::Bind(&SignalDone, &done));
- done.Wait();
- base::RunLoop().RunUntilIdle();
- if (service_->sync_initialized()) {
- return;
- }
- }
- LOG(ERROR) << "Backend not initialized.";
- }
-
- void IssueTestTokens() {
- ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get())
- ->UpdateCredentials("test", "oauth2_login_token");
- }
-
- scoped_ptr<TestProfileSyncService> service_;
- scoped_ptr<TestingProfile> profile_;
-
- private:
- content::TestBrowserThreadBundle thread_bundle_;
-};
+using testing::_;
+using testing::StrictMock;
class TestProfileSyncServiceObserver : public ProfileSyncServiceObserver {
public:
@@ -180,13 +83,12 @@ ACTION(ReturnNewSyncBackendHostNoReturn) {
// MockSyncBackendHost.
//
// This is useful if we want to test the ProfileSyncService and don't care about
-// testing the SyncBackendHost. It's easier to use than the other tests, since
-// it doesn't involve any threads.
-class ProfileSyncServiceSimpleTest : public ::testing::Test {
+// testing the SyncBackendHost.
+class ProfileSyncServiceTest : public ::testing::Test {
rlarocque 2013/11/19 20:41:09 The diffs here may be a bit confusing. In a previ
protected:
- ProfileSyncServiceSimpleTest()
+ ProfileSyncServiceTest()
: thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {}
- virtual ~ProfileSyncServiceSimpleTest() {}
+ virtual ~ProfileSyncServiceTest() {}
virtual void SetUp() OVERRIDE {
TestingProfile::Builder builder;
@@ -276,7 +178,7 @@ class ProfileSyncServiceSimpleTest : public ::testing::Test {
};
// Verify that the server URLs are sane.
-TEST_F(ProfileSyncServiceSimpleTest, InitialState) {
+TEST_F(ProfileSyncServiceTest, InitialState) {
CreateService(ProfileSyncService::AUTO_START);
Initialize();
const std::string& url = service()->sync_service_url().spec();
@@ -285,7 +187,7 @@ TEST_F(ProfileSyncServiceSimpleTest, InitialState) {
}
// Verify a successful initialization.
-TEST_F(ProfileSyncServiceSimpleTest, SuccessfulInitialization) {
+TEST_F(ProfileSyncServiceTest, SuccessfulInitialization) {
profile()->GetTestingPrefService()->SetManagedPref(
prefs::kSyncManaged,
Value::CreateBooleanValue(false));
@@ -301,7 +203,7 @@ TEST_F(ProfileSyncServiceSimpleTest, SuccessfulInitialization) {
// Verify that the SetSetupInProgress function call updates state
// and notifies observers.
-TEST_F(ProfileSyncServiceSimpleTest, SetupInProgress) {
+TEST_F(ProfileSyncServiceTest, SetupInProgress) {
CreateService(ProfileSyncService::MANUAL_START);
Initialize();
@@ -317,7 +219,7 @@ TEST_F(ProfileSyncServiceSimpleTest, SetupInProgress) {
}
// Verify that disable by enterprise policy works.
-TEST_F(ProfileSyncServiceSimpleTest, DisabledByPolicyBeforeInit) {
+TEST_F(ProfileSyncServiceTest, DisabledByPolicyBeforeInit) {
profile()->GetTestingPrefService()->SetManagedPref(
prefs::kSyncManaged,
Value::CreateBooleanValue(true));
@@ -330,7 +232,7 @@ TEST_F(ProfileSyncServiceSimpleTest, DisabledByPolicyBeforeInit) {
// Verify that disable by enterprise policy works even after the backend has
// been initialized.
-TEST_F(ProfileSyncServiceSimpleTest, DisabledByPolicyAfterInit) {
+TEST_F(ProfileSyncServiceTest, DisabledByPolicyAfterInit) {
IssueTestTokens();
CreateService(ProfileSyncService::AUTO_START);
ExpectDataTypeManagerCreation();
@@ -350,7 +252,7 @@ TEST_F(ProfileSyncServiceSimpleTest, DisabledByPolicyAfterInit) {
// Exercies the ProfileSyncService's code paths related to getting shut down
// before the backend initialize call returns.
-TEST_F(ProfileSyncServiceSimpleTest, AbortedByShutdown) {
+TEST_F(ProfileSyncServiceTest, AbortedByShutdown) {
CreateService(ProfileSyncService::AUTO_START);
PrepareDelayedInitSyncBackendHost();
@@ -362,7 +264,7 @@ TEST_F(ProfileSyncServiceSimpleTest, AbortedByShutdown) {
}
// Test StopAndSuppress() before we've initialized the backend.
-TEST_F(ProfileSyncServiceSimpleTest, EarlyStopAndSuppress) {
+TEST_F(ProfileSyncServiceTest, EarlyStopAndSuppress) {
CreateService(ProfileSyncService::AUTO_START);
IssueTestTokens();
@@ -383,7 +285,7 @@ TEST_F(ProfileSyncServiceSimpleTest, EarlyStopAndSuppress) {
}
// Test StopAndSuppress() after we've initialized the backend.
-TEST_F(ProfileSyncServiceSimpleTest, DisableAndEnableSyncTemporarily) {
+TEST_F(ProfileSyncServiceTest, DisableAndEnableSyncTemporarily) {
CreateService(ProfileSyncService::AUTO_START);
IssueTestTokens();
ExpectDataTypeManagerCreation();
@@ -412,7 +314,7 @@ TEST_F(ProfileSyncServiceSimpleTest, DisableAndEnableSyncTemporarily) {
// things that deal with concepts like "signing out" and policy.
#if !defined (OS_CHROMEOS)
-TEST_F(ProfileSyncServiceSimpleTest, EnableSyncAndSignOut) {
+TEST_F(ProfileSyncServiceTest, EnableSyncAndSignOut) {
CreateService(ProfileSyncService::AUTO_START);
ExpectDataTypeManagerCreation();
ExpectSyncBackendHostCreation();
@@ -428,116 +330,29 @@ TEST_F(ProfileSyncServiceSimpleTest, EnableSyncAndSignOut) {
#endif // !defined(OS_CHROMEOS)
-TEST_F(ProfileSyncServiceTest, JsControllerHandlersBasic) {
- StartSyncServiceAndSetInitialSyncEnded();
- IssueTestTokens();
- EXPECT_TRUE(service_->sync_initialized());
- EXPECT_TRUE(service_->GetBackendForTest() != NULL);
-
- base::WeakPtr<syncer::JsController> js_controller =
- service_->GetJsController();
- StrictMock<syncer::MockJsEventHandler> event_handler;
- js_controller->AddJsEventHandler(&event_handler);
- js_controller->RemoveJsEventHandler(&event_handler);
-}
-
-TEST_F(ProfileSyncServiceTest,
- JsControllerHandlersDelayedBackendInitialization) {
- StartSyncServiceAndSetInitialSyncEnded();
-
- StrictMock<syncer::MockJsEventHandler> event_handler;
- EXPECT_CALL(event_handler, HandleJsEvent(_, _)).Times(AtLeast(1));
-
- EXPECT_EQ(NULL, service_->GetBackendForTest());
- EXPECT_FALSE(service_->sync_initialized());
-
- base::WeakPtr<syncer::JsController> js_controller =
- service_->GetJsController();
- js_controller->AddJsEventHandler(&event_handler);
- // Since we're doing synchronous initialization, backend should be
- // initialized by this call.
- IssueTestTokens();
- EXPECT_TRUE(service_->sync_initialized());
- js_controller->RemoveJsEventHandler(&event_handler);
-}
-
-TEST_F(ProfileSyncServiceTest, JsControllerProcessJsMessageBasic) {
- StartSyncServiceAndSetInitialSyncEnded();
- IssueTestTokens();
- WaitForBackendInitDone();
-
- StrictMock<syncer::MockJsReplyHandler> reply_handler;
-
- ListValue arg_list1;
- arg_list1.Append(Value::CreateStringValue("INVALIDATIONS_ENABLED"));
- syncer::JsArgList args1(&arg_list1);
- EXPECT_CALL(reply_handler,
- HandleJsReply("getNotificationState", HasArgs(args1)));
-
- {
- base::WeakPtr<syncer::JsController> js_controller =
- service_->GetJsController();
- js_controller->ProcessJsMessage("getNotificationState", args1,
- reply_handler.AsWeakHandle());
- }
-
- // This forces the sync thread to process the message and reply.
- base::WaitableEvent done(false, false);
- service_->GetBackendForTest()->GetSyncLoopForTesting()
- ->PostTask(FROM_HERE,
- base::Bind(&SignalDone, &done));
- done.Wait();
-
- // Call TearDown() to flush the message loops before the mock is destroyed.
- // TearDown() is idempotent, so it's not a problem that it gets called by the
- // test fixture again later.
- TearDown();
-}
-
-TEST_F(ProfileSyncServiceTest,
- JsControllerProcessJsMessageBasicDelayedBackendInitialization) {
- StartSyncServiceAndSetInitialSyncEnded();
-
- StrictMock<syncer::MockJsReplyHandler> reply_handler;
-
- ListValue arg_list1;
- arg_list1.Append(Value::CreateStringValue("INVALIDATIONS_ENABLED"));
- syncer::JsArgList args1(&arg_list1);
- EXPECT_CALL(reply_handler,
- HandleJsReply("getNotificationState", HasArgs(args1)));
-
- {
- base::WeakPtr<syncer::JsController> js_controller =
- service_->GetJsController();
- js_controller->ProcessJsMessage("getNotificationState",
- args1, reply_handler.AsWeakHandle());
- }
-
- IssueTestTokens();
- WaitForBackendInitDone();
-
- // This forces the sync thread to process the message and reply.
- base::WaitableEvent done(false, false);
- service_->GetBackendForTest()->GetSyncLoopForTesting()
- ->PostTask(FROM_HERE,
- base::Bind(&SignalDone, &done));
- done.Wait();
-}
-
TEST_F(ProfileSyncServiceTest, GetSyncTokenStatus) {
- StartSyncServiceAndSetInitialSyncEnded();
+ CreateService(ProfileSyncService::AUTO_START);
IssueTestTokens();
+ ExpectDataTypeManagerCreation();
+ ExpectSyncBackendHostCreation();
+ Initialize();
+
+ // Initial status.
ProfileSyncService::SyncTokenStatus token_status =
- service_->GetSyncTokenStatus();
+ service()->GetSyncTokenStatus();
EXPECT_EQ(syncer::CONNECTION_NOT_ATTEMPTED, token_status.connection_status);
EXPECT_TRUE(token_status.connection_status_update_time.is_null());
EXPECT_TRUE(token_status.token_request_time.is_null());
EXPECT_TRUE(token_status.token_receive_time.is_null());
- // Sync engine is given invalid token at initialization and will report
- // auth error when trying to connect.
- service_->OnConnectionStatusChange(syncer::CONNECTION_AUTH_ERROR);
- token_status = service_->GetSyncTokenStatus();
+ // Simulate an auth error.
+ service()->OnConnectionStatusChange(syncer::CONNECTION_AUTH_ERROR);
+
+ // The token request will take the form of a posted task. Run it.
+ base::RunLoop loop;
+ loop.RunUntilIdle();
+
+ token_status = service()->GetSyncTokenStatus();
EXPECT_EQ(syncer::CONNECTION_AUTH_ERROR, token_status.connection_status);
EXPECT_FALSE(token_status.connection_status_update_time.is_null());
EXPECT_FALSE(token_status.token_request_time.is_null());
@@ -547,8 +362,8 @@ TEST_F(ProfileSyncServiceTest, GetSyncTokenStatus) {
EXPECT_TRUE(token_status.next_token_request_time.is_null());
// Simulate successful connection.
- service_->OnConnectionStatusChange(syncer::CONNECTION_OK);
- token_status = service_->GetSyncTokenStatus();
+ service()->OnConnectionStatusChange(syncer::CONNECTION_OK);
+ token_status = service()->GetSyncTokenStatus();
EXPECT_EQ(syncer::CONNECTION_OK, token_status.connection_status);
}
« no previous file with comments | « chrome/browser/sync/profile_sync_service_typed_url_unittest.cc ('k') | chrome/browser/sync/test_profile_sync_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698