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/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
10 #include "chrome/browser/signin/fake_signin_manager.h" | 10 #include "chrome/browser/signin/fake_signin_manager.h" |
| 11 #include "chrome/browser/signin/oauth2_token_service.h" |
| 12 #include "chrome/browser/signin/profile_oauth2_token_service.h" |
| 13 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
11 #include "chrome/browser/signin/signin_manager.h" | 14 #include "chrome/browser/signin/signin_manager.h" |
12 #include "chrome/browser/signin/signin_manager_factory.h" | 15 #include "chrome/browser/signin/signin_manager_factory.h" |
13 #include "chrome/browser/signin/token_service.h" | 16 #include "chrome/browser/signin/token_service.h" |
14 #include "chrome/browser/signin/token_service_factory.h" | 17 #include "chrome/browser/signin/token_service_factory.h" |
15 #include "chrome/browser/sync/glue/data_type_manager.h" | 18 #include "chrome/browser/sync/glue/data_type_manager.h" |
16 #include "chrome/browser/sync/glue/data_type_manager_mock.h" | 19 #include "chrome/browser/sync/glue/data_type_manager_mock.h" |
17 #include "chrome/browser/sync/profile_sync_components_factory_mock.h" | 20 #include "chrome/browser/sync/profile_sync_components_factory_mock.h" |
18 #include "chrome/browser/sync/profile_sync_service_factory.h" | 21 #include "chrome/browser/sync/profile_sync_service_factory.h" |
19 #include "chrome/browser/sync/profile_sync_test_util.h" | 22 #include "chrome/browser/sync/profile_sync_test_util.h" |
20 #include "chrome/browser/sync/sync_prefs.h" | 23 #include "chrome/browser/sync/sync_prefs.h" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 file_thread_.Start(); | 85 file_thread_.Start(); |
83 io_thread_.StartIOThread(); | 86 io_thread_.StartIOThread(); |
84 profile_->CreateRequestContext(); | 87 profile_->CreateRequestContext(); |
85 #if defined(OS_CHROMEOS) | 88 #if defined(OS_CHROMEOS) |
86 SigninManagerFactory::GetInstance()->SetTestingFactory( | 89 SigninManagerFactory::GetInstance()->SetTestingFactory( |
87 profile_.get(), FakeSigninManagerBase::Build); | 90 profile_.get(), FakeSigninManagerBase::Build); |
88 #else | 91 #else |
89 SigninManagerFactory::GetInstance()->SetTestingFactory( | 92 SigninManagerFactory::GetInstance()->SetTestingFactory( |
90 profile_.get(), FakeSigninManager::Build); | 93 profile_.get(), FakeSigninManager::Build); |
91 #endif | 94 #endif |
| 95 // ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( |
| 96 // profile_.get(), FakeOAuth2TokenService::BuildTokenService); |
92 } | 97 } |
93 | 98 |
94 virtual void TearDown() { | 99 virtual void TearDown() { |
95 sync_->RemoveObserver(&observer_); | 100 sync_->RemoveObserver(&observer_); |
96 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory( | 101 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory( |
97 profile_.get(), NULL); | 102 profile_.get(), NULL); |
| 103 ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( |
| 104 profile_.get(), NULL); |
98 profile_.reset(); | 105 profile_.reset(); |
99 | 106 |
100 // Pump messages posted by the sync core thread (which may end up | 107 // Pump messages posted by the sync core thread (which may end up |
101 // posting on the IO thread). | 108 // posting on the IO thread). |
102 ui_loop_.RunUntilIdle(); | 109 ui_loop_.RunUntilIdle(); |
103 io_thread_.Stop(); | 110 io_thread_.Stop(); |
104 file_thread_.Stop(); | 111 file_thread_.Stop(); |
105 ui_loop_.RunUntilIdle(); | 112 ui_loop_.RunUntilIdle(); |
106 } | 113 } |
107 | 114 |
108 static BrowserContextKeyedService* BuildService( | 115 static BrowserContextKeyedService* BuildService( |
109 content::BrowserContext* profile) { | 116 content::BrowserContext* profile) { |
110 return new TestProfileSyncService( | 117 return new TestProfileSyncService( |
111 new ProfileSyncComponentsFactoryMock(), | 118 new ProfileSyncComponentsFactoryMock(), |
112 static_cast<Profile*>(profile), | 119 static_cast<Profile*>(profile), |
113 SigninManagerFactory::GetForProfile(static_cast<Profile*>(profile)), | 120 SigninManagerFactory::GetForProfile(static_cast<Profile*>(profile)), |
114 ProfileSyncService::MANUAL_START, | 121 ProfileSyncService::MANUAL_START, |
115 true); | 122 true); |
116 } | 123 } |
117 | 124 |
118 void CreateSyncService() { | 125 void CreateSyncService() { |
| 126 ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( |
| 127 profile_.get(), FakeOAuth2TokenService::BuildTokenService); |
119 sync_ = static_cast<TestProfileSyncService*>( | 128 sync_ = static_cast<TestProfileSyncService*>( |
120 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 129 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
121 profile_.get(), BuildService)); | 130 profile_.get(), BuildService)); |
122 sync_->AddObserver(&observer_); | 131 sync_->AddObserver(&observer_); |
123 sync_->set_synchronous_sync_configuration(); | 132 sync_->set_synchronous_sync_configuration(); |
124 } | 133 } |
125 | 134 |
126 protected: | 135 protected: |
127 DataTypeManagerMock* SetUpDataTypeManager() { | 136 DataTypeManagerMock* SetUpDataTypeManager() { |
128 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); | 137 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); |
(...skipping 10 matching lines...) Expand all Loading... |
139 content::TestBrowserThread io_thread_; | 148 content::TestBrowserThread io_thread_; |
140 scoped_ptr<TestingProfile> profile_; | 149 scoped_ptr<TestingProfile> profile_; |
141 TestProfileSyncService* sync_; | 150 TestProfileSyncService* sync_; |
142 ProfileSyncServiceObserverMock observer_; | 151 ProfileSyncServiceObserverMock observer_; |
143 }; | 152 }; |
144 | 153 |
145 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { | 154 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { |
146 public: | 155 public: |
147 virtual void SetUp() { | 156 virtual void SetUp() { |
148 ProfileSyncServiceStartupTest::SetUp(); | 157 ProfileSyncServiceStartupTest::SetUp(); |
| 158 ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( |
| 159 profile_.get(), FakeOAuth2TokenService::BuildTokenService); |
149 sync_ = static_cast<TestProfileSyncService*>( | 160 sync_ = static_cast<TestProfileSyncService*>( |
150 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 161 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
151 profile_.get(), BuildCrosService)); | 162 profile_.get(), BuildCrosService)); |
152 sync_->AddObserver(&observer_); | 163 sync_->AddObserver(&observer_); |
153 sync_->set_synchronous_sync_configuration(); | 164 sync_->set_synchronous_sync_configuration(); |
154 } | 165 } |
155 | 166 |
156 static BrowserContextKeyedService* BuildCrosService( | 167 static BrowserContextKeyedService* BuildCrosService( |
157 content::BrowserContext* context) { | 168 content::BrowserContext* context) { |
158 Profile* profile = static_cast<Profile*>(context); | 169 Profile* profile = static_cast<Profile*>(context); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 "test_user"); | 221 "test_user"); |
211 sync_->signin()->SetAuthenticatedUsername("test_user"); | 222 sync_->signin()->SetAuthenticatedUsername("test_user"); |
212 GoogleServiceSigninSuccessDetails details("test_user", ""); | 223 GoogleServiceSigninSuccessDetails details("test_user", ""); |
213 content::NotificationService::current()->Notify( | 224 content::NotificationService::current()->Notify( |
214 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 225 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
215 content::Source<Profile>(profile_.get()), | 226 content::Source<Profile>(profile_.get()), |
216 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 227 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
217 | 228 |
218 // Create some tokens in the token service. | 229 // Create some tokens in the token service. |
219 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 230 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
220 GaiaConstants::kSyncService, "sync_token"); | |
221 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | |
222 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); | 231 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
223 | 232 |
224 // Simulate the UI telling sync it has finished setting up. | 233 // Simulate the UI telling sync it has finished setting up. |
225 sync_->SetSetupInProgress(false); | 234 sync_->SetSetupInProgress(false); |
226 EXPECT_TRUE(sync_->ShouldPushChanges()); | 235 EXPECT_TRUE(sync_->ShouldPushChanges()); |
227 } | 236 } |
228 | 237 |
229 TEST_F(ProfileSyncServiceStartupTest, StartNoCredentials) { | 238 TEST_F(ProfileSyncServiceStartupTest, StartNoCredentials) { |
230 // We've never completed startup. | 239 EXPECT_CALL(*sync_->components_factory_mock(), |
| 240 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
| 241 |
| 242 // We've never completed startup. |
231 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 243 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
232 SigninManagerFactory::GetForProfile( | 244 SigninManagerFactory::GetForProfile( |
233 profile_.get())->Initialize(profile_.get(), NULL); | 245 profile_.get())->Initialize(profile_.get(), NULL); |
234 TokenService* token_service = static_cast<TokenService*>( | 246 TokenService* token_service = static_cast<TokenService*>( |
235 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 247 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
236 profile_.get(), BuildFakeTokenService)); | 248 profile_.get(), BuildFakeTokenService)); |
237 CreateSyncService(); | 249 CreateSyncService(); |
238 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | |
239 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); | |
240 | 250 |
241 // Should not actually start, rather just clean things up and wait | 251 // Should not actually start, rather just clean things up and wait |
242 // to be enabled. | 252 // to be enabled. |
243 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 253 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
244 sync_->Initialize(); | 254 sync_->Initialize(); |
245 EXPECT_FALSE(sync_->GetBackendForTest()); | 255 EXPECT_FALSE(sync_->GetBackendForTest()); |
246 | 256 |
247 // Preferences should be back to defaults. | 257 // Preferences should be back to defaults. |
248 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); | 258 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); |
249 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); | 259 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); |
250 Mock::VerifyAndClearExpectations(data_type_manager); | |
251 | 260 |
252 // Then start things up. | 261 // Then start things up. |
253 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1); | |
254 EXPECT_CALL(*data_type_manager, state()). | |
255 WillOnce(Return(DataTypeManager::CONFIGURED)). | |
256 WillOnce(Return(DataTypeManager::CONFIGURED)); | |
257 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | |
258 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | |
259 | |
260 sync_->SetSetupInProgress(true); | 262 sync_->SetSetupInProgress(true); |
261 | 263 |
262 // Simulate successful signin as test_user. | 264 // Simulate successful signin as test_user. |
263 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 265 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
264 "test_user"); | 266 "test_user"); |
265 sync_->signin()->SetAuthenticatedUsername("test_user"); | 267 sync_->signin()->SetAuthenticatedUsername("test_user"); |
266 GoogleServiceSigninSuccessDetails details("test_user", ""); | 268 GoogleServiceSigninSuccessDetails details("test_user", ""); |
267 content::NotificationService::current()->Notify( | 269 content::NotificationService::current()->Notify( |
268 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 270 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
269 content::Source<Profile>(profile_.get()), | 271 content::Source<Profile>(profile_.get()), |
270 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 272 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
271 // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens. | 273 // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens. |
272 token_service->LoadTokensFromDB(); | 274 token_service->LoadTokensFromDB(); |
273 | 275 |
274 sync_->SetSetupInProgress(false); | 276 sync_->SetSetupInProgress(false); |
275 // Backend should initialize using a bogus GAIA token for credentials. | 277 // ProfileSyncService should try to start by requesting access token. |
276 EXPECT_TRUE(sync_->ShouldPushChanges()); | 278 // This request should fail as login token was not issued to TokenService. |
| 279 EXPECT_FALSE(sync_->ShouldPushChanges()); |
| 280 EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, |
| 281 sync_->GetAuthError().state()); |
277 } | 282 } |
278 | 283 |
279 TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) { | 284 TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) { |
280 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 285 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
281 "test_user"); | 286 "test_user"); |
282 SigninManagerFactory::GetForProfile( | 287 SigninManagerFactory::GetForProfile( |
283 profile_.get())->Initialize(profile_.get(), NULL); | 288 profile_.get())->Initialize(profile_.get(), NULL); |
284 CreateSyncService(); | 289 CreateSyncService(); |
285 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 290 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
286 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); | 291 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); |
287 TokenService* token_service = static_cast<TokenService*>( | 292 // Issue login token so that ProfileSyncServer tries to initialize backend. |
288 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 293 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
289 profile_.get(), BuildFakeTokenService)); | 294 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
290 token_service->LoadTokensFromDB(); | |
291 | 295 |
292 // Tell the backend to stall while downloading control types (simulating an | 296 // Tell the backend to stall while downloading control types (simulating an |
293 // auth error). | 297 // auth error). |
294 sync_->fail_initial_download(); | 298 sync_->fail_initial_download(); |
295 | 299 |
296 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 300 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
297 sync_->Initialize(); | 301 sync_->Initialize(); |
298 EXPECT_TRUE(sync_->GetBackendForTest()); | 302 EXPECT_TRUE(sync_->GetBackendForTest()); |
299 EXPECT_FALSE(sync_->sync_initialized()); | 303 EXPECT_FALSE(sync_->sync_initialized()); |
300 EXPECT_FALSE(sync_->ShouldPushChanges()); | |
301 Mock::VerifyAndClearExpectations(data_type_manager); | 304 Mock::VerifyAndClearExpectations(data_type_manager); |
302 | 305 |
303 // Update the credentials, unstalling the backend. | 306 // Update the credentials, unstalling the backend. |
304 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 307 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
305 EXPECT_CALL(*data_type_manager, state()). | 308 EXPECT_CALL(*data_type_manager, state()). |
306 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 309 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
307 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 310 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
308 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 311 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
309 sync_->SetSetupInProgress(true); | 312 sync_->SetSetupInProgress(true); |
310 | 313 |
311 // Simulate successful signin. | 314 // Simulate successful signin. |
312 GoogleServiceSigninSuccessDetails details("test_user", std::string()); | 315 GoogleServiceSigninSuccessDetails details("test_user", std::string()); |
313 content::NotificationService::current()->Notify( | 316 content::NotificationService::current()->Notify( |
314 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 317 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
315 content::Source<Profile>(profile_.get()), | 318 content::Source<Profile>(profile_.get()), |
316 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 319 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
317 | 320 |
318 token_service->IssueAuthTokenForTest( | 321 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
319 GaiaConstants::kSyncService, "sync_token"); | 322 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
320 sync_->SetSetupInProgress(false); | 323 sync_->SetSetupInProgress(false); |
321 base::MessageLoop::current()->Run(); | |
322 | 324 |
323 // Verify we successfully finish startup and configuration. | 325 // Verify we successfully finish startup and configuration. |
324 EXPECT_TRUE(sync_->ShouldPushChanges()); | 326 EXPECT_TRUE(sync_->ShouldPushChanges()); |
325 } | 327 } |
326 | 328 |
327 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { | 329 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { |
328 EXPECT_CALL(*sync_->components_factory_mock(), | 330 EXPECT_CALL(*sync_->components_factory_mock(), |
329 CreateDataTypeManager(_, _, _, _, _)).Times(0); | 331 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
330 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 332 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
331 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 333 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
(...skipping 16 matching lines...) Expand all Loading... |
348 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { | 350 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { |
349 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 351 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
350 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 352 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
351 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 353 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
352 EXPECT_CALL(*data_type_manager, state()). | 354 EXPECT_CALL(*data_type_manager, state()). |
353 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 355 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
354 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 356 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
355 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 357 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
356 | 358 |
357 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 359 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
358 GaiaConstants::kSyncService, "sync_token"); | 360 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
359 sync_->Initialize(); | 361 sync_->Initialize(); |
360 EXPECT_TRUE(sync_->ShouldPushChanges()); | 362 EXPECT_TRUE(sync_->ShouldPushChanges()); |
361 } | 363 } |
362 | 364 |
363 TEST_F(ProfileSyncServiceStartupTest, StartNormal) { | 365 TEST_F(ProfileSyncServiceStartupTest, StartNormal) { |
364 // Pre load the tokens | 366 // Pre load the tokens |
365 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 367 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
366 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 368 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
367 profile_.get(), NULL); | 369 profile_.get(), NULL); |
368 CreateSyncService(); | 370 CreateSyncService(); |
369 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 371 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
370 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 372 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
371 EXPECT_CALL(*data_type_manager, state()). | 373 EXPECT_CALL(*data_type_manager, state()). |
372 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 374 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
373 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 375 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
374 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 376 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
375 | 377 |
376 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 378 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
377 GaiaConstants::kSyncService, "sync_token"); | 379 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
378 | 380 |
379 sync_->Initialize(); | 381 sync_->Initialize(); |
380 } | 382 } |
381 | 383 |
382 // Test that we can recover from a case where a bug in the code resulted in | 384 // Test that we can recover from a case where a bug in the code resulted in |
383 // OnUserChoseDatatypes not being properly called and datatype preferences | 385 // OnUserChoseDatatypes not being properly called and datatype preferences |
384 // therefore being left unset. | 386 // therefore being left unset. |
385 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { | 387 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { |
386 // Clear the datatype preference fields (simulating bug 154940). | 388 // Clear the datatype preference fields (simulating bug 154940). |
387 profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced); | 389 profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced); |
(...skipping 10 matching lines...) Expand all Loading... |
398 profile_.get(), NULL); | 400 profile_.get(), NULL); |
399 CreateSyncService(); | 401 CreateSyncService(); |
400 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 402 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
401 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 403 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
402 EXPECT_CALL(*data_type_manager, state()). | 404 EXPECT_CALL(*data_type_manager, state()). |
403 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 405 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
404 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 406 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
405 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 407 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
406 | 408 |
407 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 409 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
408 GaiaConstants::kSyncService, "sync_token"); | 410 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
409 sync_->Initialize(); | 411 sync_->Initialize(); |
410 | 412 |
411 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( | 413 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( |
412 prefs::kSyncKeepEverythingSynced)); | 414 prefs::kSyncKeepEverythingSynced)); |
413 } | 415 } |
414 | 416 |
415 // Verify that the recovery of datatype preferences doesn't overwrite a valid | 417 // Verify that the recovery of datatype preferences doesn't overwrite a valid |
416 // case where only bookmarks are enabled. | 418 // case where only bookmarks are enabled. |
417 TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) { | 419 TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) { |
418 // Explicitly set Keep Everything Synced to false and have only bookmarks | 420 // Explicitly set Keep Everything Synced to false and have only bookmarks |
419 // enabled. | 421 // enabled. |
420 profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false); | 422 profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false); |
421 | 423 |
422 // Pre load the tokens | 424 // Pre load the tokens |
423 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 425 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
424 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 426 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
425 profile_.get(), NULL); | 427 profile_.get(), NULL); |
426 CreateSyncService(); | 428 CreateSyncService(); |
427 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 429 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
428 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 430 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
429 EXPECT_CALL(*data_type_manager, state()). | 431 EXPECT_CALL(*data_type_manager, state()). |
430 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 432 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
431 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 433 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
432 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 434 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
433 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 435 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
434 GaiaConstants::kSyncService, "sync_token"); | 436 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
435 sync_->Initialize(); | 437 sync_->Initialize(); |
436 | 438 |
437 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( | 439 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( |
438 prefs::kSyncKeepEverythingSynced)); | 440 prefs::kSyncKeepEverythingSynced)); |
439 } | 441 } |
440 | 442 |
441 TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) { | 443 TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) { |
442 // Service should not be started by Initialize() since it's managed. | 444 // Service should not be started by Initialize() since it's managed. |
443 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 445 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
444 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 446 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
445 profile_.get(), NULL); | 447 profile_.get(), NULL); |
446 CreateSyncService(); | 448 CreateSyncService(); |
447 | 449 |
448 // Disable sync through policy. | 450 // Disable sync through policy. |
449 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); | 451 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); |
450 EXPECT_CALL(*sync_->components_factory_mock(), | 452 EXPECT_CALL(*sync_->components_factory_mock(), |
451 CreateDataTypeManager(_, _, _, _, _)).Times(0); | 453 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
452 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 454 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
453 | 455 |
454 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 456 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
455 GaiaConstants::kSyncService, "sync_token"); | 457 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
456 sync_->Initialize(); | 458 sync_->Initialize(); |
457 } | 459 } |
458 | 460 |
459 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { | 461 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { |
460 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 462 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
461 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 463 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
462 profile_.get(), NULL); | 464 profile_.get(), NULL); |
463 CreateSyncService(); | 465 CreateSyncService(); |
464 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 466 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
465 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 467 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
466 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 468 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
467 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 469 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
468 GaiaConstants::kSyncService, "sync_token"); | 470 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
469 sync_->Initialize(); | 471 sync_->Initialize(); |
470 | 472 |
471 // The service should stop when switching to managed mode. | 473 // The service should stop when switching to managed mode. |
472 Mock::VerifyAndClearExpectations(data_type_manager); | 474 Mock::VerifyAndClearExpectations(data_type_manager); |
473 EXPECT_CALL(*data_type_manager, state()). | 475 EXPECT_CALL(*data_type_manager, state()). |
474 WillOnce(Return(DataTypeManager::CONFIGURED)); | 476 WillOnce(Return(DataTypeManager::CONFIGURED)); |
475 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 477 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
476 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 478 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
477 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); | 479 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); |
478 | 480 |
(...skipping 23 matching lines...) Expand all Loading... |
502 errors, | 504 errors, |
503 syncer::ModelTypeSet()); | 505 syncer::ModelTypeSet()); |
504 EXPECT_CALL(*data_type_manager, Configure(_, _)). | 506 EXPECT_CALL(*data_type_manager, Configure(_, _)). |
505 WillRepeatedly( | 507 WillRepeatedly( |
506 DoAll(InvokeOnConfigureStart(sync_), | 508 DoAll(InvokeOnConfigureStart(sync_), |
507 InvokeOnConfigureDone(sync_, result))); | 509 InvokeOnConfigureDone(sync_, result))); |
508 EXPECT_CALL(*data_type_manager, state()). | 510 EXPECT_CALL(*data_type_manager, state()). |
509 WillOnce(Return(DataTypeManager::STOPPED)); | 511 WillOnce(Return(DataTypeManager::STOPPED)); |
510 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 512 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
511 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 513 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
512 GaiaConstants::kSyncService, "sync_token"); | 514 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
513 sync_->Initialize(); | 515 sync_->Initialize(); |
514 EXPECT_TRUE(sync_->HasUnrecoverableError()); | 516 EXPECT_TRUE(sync_->HasUnrecoverableError()); |
515 } | 517 } |
516 | 518 |
517 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { | 519 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { |
518 // Pre load the tokens | 520 // Pre load the tokens |
519 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 521 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
520 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 522 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
521 profile_.get(), NULL); | 523 profile_.get(), NULL); |
522 CreateSyncService(); | 524 CreateSyncService(); |
523 | 525 |
524 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 526 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
525 | 527 |
526 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 528 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
527 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 529 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
528 GaiaConstants::kSyncService, "sync_token"); | 530 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
529 sync_->fail_initial_download(); | 531 sync_->fail_initial_download(); |
530 | 532 |
| 533 sync_->SetSetupInProgress(true); |
531 sync_->Initialize(); | 534 sync_->Initialize(); |
| 535 sync_->SetSetupInProgress(false); |
532 EXPECT_FALSE(sync_->sync_initialized()); | 536 EXPECT_FALSE(sync_->sync_initialized()); |
533 EXPECT_FALSE(sync_->GetBackendForTest()); | 537 EXPECT_TRUE(sync_->GetBackendForTest()); |
534 } | 538 } |
OLD | NEW |