OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "chrome/browser/chrome_notification_types.h" | 9 #include "chrome/browser/chrome_notification_types.h" |
10 #include "chrome/browser/signin/fake_signin_manager.h" | 10 #include "chrome/browser/signin/fake_signin_manager.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 } | 51 } |
52 | 52 |
53 ACTION_P2(InvokeOnConfigureDone, pss, result) { | 53 ACTION_P2(InvokeOnConfigureDone, pss, result) { |
54 ProfileSyncService* service = | 54 ProfileSyncService* service = |
55 static_cast<ProfileSyncService*>(pss); | 55 static_cast<ProfileSyncService*>(pss); |
56 DataTypeManager::ConfigureResult configure_result = | 56 DataTypeManager::ConfigureResult configure_result = |
57 static_cast<DataTypeManager::ConfigureResult>(result); | 57 static_cast<DataTypeManager::ConfigureResult>(result); |
58 service->OnConfigureDone(configure_result); | 58 service->OnConfigureDone(configure_result); |
59 } | 59 } |
60 | 60 |
61 class FakeTokenService : public TokenService { | |
62 public: | |
63 FakeTokenService() {} | |
64 virtual ~FakeTokenService() {} | |
65 | |
66 virtual void LoadTokensFromDB() OVERRIDE { | |
67 set_tokens_loaded(true); | |
68 content::NotificationService::current()->Notify( | |
69 chrome::NOTIFICATION_TOKEN_LOADING_FINISHED, | |
70 content::Source<TokenService>(this), | |
71 content::NotificationService::NoDetails()); | |
72 } | |
73 | |
74 static BrowserContextKeyedService* BuildFakeTokenService( | |
75 content::BrowserContext* profile) { | |
76 return new FakeTokenService(); | |
77 } | |
78 }; | |
79 | |
80 class ProfileSyncServiceStartupTest : public testing::Test { | 61 class ProfileSyncServiceStartupTest : public testing::Test { |
81 public: | 62 public: |
82 ProfileSyncServiceStartupTest() | 63 ProfileSyncServiceStartupTest() |
83 : thread_bundle_(content::TestBrowserThreadBundle::REAL_DB_THREAD | | 64 : thread_bundle_(content::TestBrowserThreadBundle::REAL_DB_THREAD | |
84 content::TestBrowserThreadBundle::REAL_FILE_THREAD | | 65 content::TestBrowserThreadBundle::REAL_FILE_THREAD | |
85 content::TestBrowserThreadBundle::REAL_IO_THREAD), | 66 content::TestBrowserThreadBundle::REAL_IO_THREAD), |
86 sync_(NULL) {} | 67 sync_(NULL) {} |
87 | 68 |
88 virtual ~ProfileSyncServiceStartupTest() { | 69 virtual ~ProfileSyncServiceStartupTest() { |
89 } | 70 } |
90 | 71 |
91 virtual void SetUp() { | 72 virtual void SetUp() { |
92 profile_ = CreateProfile(); | 73 profile_ = CreateProfile(); |
93 } | 74 } |
94 | 75 |
95 virtual scoped_ptr<TestingProfile> CreateProfile() { | 76 virtual scoped_ptr<TestingProfile> CreateProfile() { |
96 TestingProfile::Builder builder; | 77 TestingProfile::Builder builder; |
97 #if defined(OS_CHROMEOS) | 78 #if defined(OS_CHROMEOS) |
98 builder.AddTestingFactory(SigninManagerFactory::GetInstance(), | 79 builder.AddTestingFactory(SigninManagerFactory::GetInstance(), |
99 FakeSigninManagerBase::Build); | 80 FakeSigninManagerBase::Build); |
100 #else | 81 #else |
101 builder.AddTestingFactory(SigninManagerFactory::GetInstance(), | 82 builder.AddTestingFactory(SigninManagerFactory::GetInstance(), |
102 FakeSigninManager::Build); | 83 FakeSigninManager::Build); |
103 #endif | 84 #endif |
104 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), | 85 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), |
105 FakeOAuth2TokenService::BuildTokenService); | 86 FakeOAuth2TokenService::BuildTokenService); |
106 builder.AddTestingFactory(ProfileSyncServiceFactory::GetInstance(), | 87 builder.AddTestingFactory(ProfileSyncServiceFactory::GetInstance(), |
107 ProfileSyncServiceStartupTest::BuildService); | 88 BuildService); |
108 builder.AddTestingFactory(TokenServiceFactory::GetInstance(), | |
109 FakeTokenService::BuildFakeTokenService); | |
110 return builder.Build(); | 89 return builder.Build(); |
111 } | 90 } |
112 | 91 |
113 virtual void TearDown() { | 92 virtual void TearDown() { |
114 sync_->RemoveObserver(&observer_); | 93 sync_->RemoveObserver(&observer_); |
115 profile_.reset(); | 94 profile_.reset(); |
116 } | 95 } |
117 | 96 |
118 static BrowserContextKeyedService* BuildService( | 97 static BrowserContextKeyedService* BuildService( |
119 content::BrowserContext* browser_context) { | 98 content::BrowserContext* browser_context) { |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 sync_->SetSetupInProgress(false); | 222 sync_->SetSetupInProgress(false); |
244 EXPECT_TRUE(sync_->ShouldPushChanges()); | 223 EXPECT_TRUE(sync_->ShouldPushChanges()); |
245 } | 224 } |
246 | 225 |
247 // TODO(pavely): Reenable test once android is switched to oauth2. | 226 // TODO(pavely): Reenable test once android is switched to oauth2. |
248 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) { | 227 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) { |
249 // We've never completed startup. | 228 // We've never completed startup. |
250 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 229 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
251 SigninManagerFactory::GetForProfile( | 230 SigninManagerFactory::GetForProfile( |
252 profile_.get())->Initialize(profile_.get(), NULL); | 231 profile_.get())->Initialize(profile_.get(), NULL); |
253 TokenService* token_service = static_cast<TokenService*>( | |
254 TokenServiceFactory::GetForProfile(profile_.get())); | |
255 CreateSyncService(); | 232 CreateSyncService(); |
256 | 233 |
257 // Should not actually start, rather just clean things up and wait | 234 // Should not actually start, rather just clean things up and wait |
258 // to be enabled. | 235 // to be enabled. |
259 EXPECT_CALL(*components_factory_mock(), | 236 EXPECT_CALL(*components_factory_mock(), |
260 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); | 237 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); |
261 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 238 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
262 sync_->Initialize(); | 239 sync_->Initialize(); |
263 | 240 |
264 // Preferences should be back to defaults. | 241 // Preferences should be back to defaults. |
265 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); | 242 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); |
266 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); | 243 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); |
267 | 244 |
268 // Then start things up. | 245 // Then start things up. |
269 sync_->SetSetupInProgress(true); | 246 sync_->SetSetupInProgress(true); |
270 | 247 |
271 // Simulate successful signin as test_user. | 248 // Simulate successful signin as test_user. |
272 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 249 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
273 "test_user@gmail.com"); | 250 "test_user@gmail.com"); |
274 sync_->signin()->SetAuthenticatedUsername("test_user@gmail.com"); | 251 sync_->signin()->SetAuthenticatedUsername("test_user@gmail.com"); |
275 GoogleServiceSigninSuccessDetails details("test_user@gmail.com", ""); | 252 GoogleServiceSigninSuccessDetails details("test_user@gmail.com", ""); |
276 content::NotificationService::current()->Notify( | 253 content::NotificationService::current()->Notify( |
277 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 254 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
278 content::Source<Profile>(profile_.get()), | 255 content::Source<Profile>(profile_.get()), |
279 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 256 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
280 // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens. | 257 ProfileOAuth2TokenService* token_service = |
281 token_service->LoadTokensFromDB(); | 258 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get()); |
| 259 token_service->LoadCredentials(); |
282 | 260 |
283 sync_->SetSetupInProgress(false); | 261 sync_->SetSetupInProgress(false); |
284 // ProfileSyncService should try to start by requesting access token. | 262 // ProfileSyncService should try to start by requesting access token. |
285 // This request should fail as login token was not issued to TokenService. | 263 // This request should fail as login token was not issued. |
286 EXPECT_FALSE(sync_->ShouldPushChanges()); | 264 EXPECT_FALSE(sync_->ShouldPushChanges()); |
287 EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, | 265 EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, |
288 sync_->GetAuthError().state()); | 266 sync_->GetAuthError().state()); |
289 } | 267 } |
290 | 268 |
291 // TODO(pavely): Reenable test once android is switched to oauth2. | 269 // TODO(pavely): Reenable test once android is switched to oauth2. |
292 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartInvalidCredentials) { | 270 TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartInvalidCredentials) { |
293 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 271 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
294 "test_user@gmail.com"); | 272 "test_user@gmail.com"); |
295 SigninManagerFactory::GetForProfile( | 273 SigninManagerFactory::GetForProfile( |
296 profile_.get())->Initialize(profile_.get(), NULL); | 274 profile_.get())->Initialize(profile_.get(), NULL); |
297 CreateSyncService(); | 275 CreateSyncService(); |
298 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); | 276 SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost(); |
299 | 277 |
300 // Tell the backend to stall while downloading control types (simulating an | 278 // Tell the backend to stall while downloading control types (simulating an |
301 // auth error). | 279 // auth error). |
302 mock_sbh->set_fail_initial_download(true); | 280 mock_sbh->set_fail_initial_download(true); |
303 | 281 |
304 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 282 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
305 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); | 283 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); |
306 // Issue login token so that ProfileSyncServer tries to initialize backend. | |
307 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | |
308 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); | |
309 | 284 |
310 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 285 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
311 sync_->Initialize(); | 286 sync_->Initialize(); |
312 EXPECT_FALSE(sync_->sync_initialized()); | 287 EXPECT_FALSE(sync_->sync_initialized()); |
313 Mock::VerifyAndClearExpectations(data_type_manager); | 288 Mock::VerifyAndClearExpectations(data_type_manager); |
314 | 289 |
315 // Update the credentials, unstalling the backend. | 290 // Update the credentials, unstalling the backend. |
316 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 291 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
317 EXPECT_CALL(*data_type_manager, state()). | 292 EXPECT_CALL(*data_type_manager, state()). |
318 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 293 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
319 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 294 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
320 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 295 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
321 sync_->SetSetupInProgress(true); | 296 sync_->SetSetupInProgress(true); |
322 | 297 |
323 // Simulate successful signin. | 298 // Simulate successful signin. |
324 GoogleServiceSigninSuccessDetails details("test_user@gmail.com", | 299 GoogleServiceSigninSuccessDetails details("test_user@gmail.com", |
325 std::string()); | 300 std::string()); |
326 content::NotificationService::current()->Notify( | 301 content::NotificationService::current()->Notify( |
327 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 302 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
328 content::Source<Profile>(profile_.get()), | 303 content::Source<Profile>(profile_.get()), |
329 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 304 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
330 | 305 |
331 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | |
332 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); | |
333 sync_->SetSetupInProgress(false); | 306 sync_->SetSetupInProgress(false); |
334 | 307 |
335 // Verify we successfully finish startup and configuration. | 308 // Verify we successfully finish startup and configuration. |
336 EXPECT_TRUE(sync_->ShouldPushChanges()); | 309 EXPECT_TRUE(sync_->ShouldPushChanges()); |
337 } | 310 } |
338 | 311 |
339 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { | 312 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { |
340 EXPECT_CALL(*components_factory_mock(), | 313 EXPECT_CALL(*components_factory_mock(), |
341 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); | 314 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); |
342 EXPECT_CALL(*components_factory_mock(), | 315 EXPECT_CALL(*components_factory_mock(), |
343 CreateSyncBackendHost(_, _, _)).Times(0); | 316 CreateSyncBackendHost(_, _, _)).Times(0); |
344 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 317 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
345 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 318 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
346 TokenService* token_service = static_cast<TokenService*>( | 319 ProfileOAuth2TokenService* token_service = |
347 TokenServiceFactory::GetForProfile(profile_.get())); | 320 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get()); |
348 | 321 |
349 sync_->Initialize(); | 322 sync_->Initialize(); |
350 // Sync should not start because there are no tokens yet. | 323 // Sync should not start because there are no tokens yet. |
351 EXPECT_FALSE(sync_->ShouldPushChanges()); | 324 EXPECT_FALSE(sync_->ShouldPushChanges()); |
352 token_service->LoadTokensFromDB(); | 325 token_service->LoadCredentials(); |
353 sync_->SetSetupInProgress(false); | 326 sync_->SetSetupInProgress(false); |
354 | 327 |
355 // Sync should not start because there are still no tokens. | 328 // Sync should not start because there are still no tokens. |
356 EXPECT_FALSE(sync_->ShouldPushChanges()); | 329 EXPECT_FALSE(sync_->ShouldPushChanges()); |
357 } | 330 } |
358 | 331 |
359 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { | 332 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { |
360 SetUpSyncBackendHost(); | 333 SetUpSyncBackendHost(); |
361 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 334 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
362 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 335 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 435 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
463 profile_.get(), NULL); | 436 profile_.get(), NULL); |
464 CreateSyncService(); | 437 CreateSyncService(); |
465 | 438 |
466 // Disable sync through policy. | 439 // Disable sync through policy. |
467 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); | 440 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); |
468 EXPECT_CALL(*components_factory_mock(), | 441 EXPECT_CALL(*components_factory_mock(), |
469 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); | 442 CreateDataTypeManager(_, _, _, _, _, _)).Times(0); |
470 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 443 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
471 | 444 |
472 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | |
473 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); | |
474 sync_->Initialize(); | 445 sync_->Initialize(); |
475 } | 446 } |
476 | 447 |
477 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { | 448 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { |
478 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 449 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
479 "test_user@gmail.com"); | 450 "test_user@gmail.com"); |
480 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 451 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
481 profile_.get(), NULL); | 452 profile_.get(), NULL); |
482 CreateSyncService(); | 453 CreateSyncService(); |
483 sync_->SetSyncSetupCompleted(); | 454 sync_->SetSyncSetupCompleted(); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 524 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
554 | 525 |
555 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 526 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
556 IssueTestTokens(); | 527 IssueTestTokens(); |
557 | 528 |
558 sync_->SetSetupInProgress(true); | 529 sync_->SetSetupInProgress(true); |
559 sync_->Initialize(); | 530 sync_->Initialize(); |
560 sync_->SetSetupInProgress(false); | 531 sync_->SetSetupInProgress(false); |
561 EXPECT_FALSE(sync_->sync_initialized()); | 532 EXPECT_FALSE(sync_->sync_initialized()); |
562 } | 533 } |
OLD | NEW |