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 // We've never completed startup. |
231 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 240 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
232 SigninManagerFactory::GetForProfile( | 241 SigninManagerFactory::GetForProfile( |
233 profile_.get())->Initialize(profile_.get(), NULL); | 242 profile_.get())->Initialize(profile_.get(), NULL); |
234 TokenService* token_service = static_cast<TokenService*>( | 243 TokenService* token_service = static_cast<TokenService*>( |
235 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 244 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
236 profile_.get(), BuildFakeTokenService)); | 245 profile_.get(), BuildFakeTokenService)); |
237 CreateSyncService(); | 246 CreateSyncService(); |
238 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | |
239 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); | |
240 | 247 |
241 // Should not actually start, rather just clean things up and wait | 248 // Should not actually start, rather just clean things up and wait |
242 // to be enabled. | 249 // to be enabled. |
250 EXPECT_CALL(*sync_->components_factory_mock(), | |
251 CreateDataTypeManager(_, _, _, _, _)).Times(0); | |
243 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 252 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
244 sync_->Initialize(); | 253 sync_->Initialize(); |
245 EXPECT_FALSE(sync_->GetBackendForTest()); | 254 EXPECT_FALSE(sync_->GetBackendForTest()); |
246 | 255 |
247 // Preferences should be back to defaults. | 256 // Preferences should be back to defaults. |
248 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); | 257 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); |
249 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); | 258 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); |
250 Mock::VerifyAndClearExpectations(data_type_manager); | |
251 | 259 |
252 // Then start things up. | 260 // 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); | 261 sync_->SetSetupInProgress(true); |
261 | 262 |
262 // Simulate successful signin as test_user. | 263 // Simulate successful signin as test_user. |
263 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 264 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
264 "test_user"); | 265 "test_user"); |
265 sync_->signin()->SetAuthenticatedUsername("test_user"); | 266 sync_->signin()->SetAuthenticatedUsername("test_user"); |
266 GoogleServiceSigninSuccessDetails details("test_user", ""); | 267 GoogleServiceSigninSuccessDetails details("test_user", ""); |
267 content::NotificationService::current()->Notify( | 268 content::NotificationService::current()->Notify( |
268 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 269 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
269 content::Source<Profile>(profile_.get()), | 270 content::Source<Profile>(profile_.get()), |
270 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 271 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
271 // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens. | 272 // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens. |
272 token_service->LoadTokensFromDB(); | 273 token_service->LoadTokensFromDB(); |
273 | 274 |
274 sync_->SetSetupInProgress(false); | 275 sync_->SetSetupInProgress(false); |
275 // Backend should initialize using a bogus GAIA token for credentials. | 276 // ProfileSyncService should try to start by requesting access token. |
276 EXPECT_TRUE(sync_->ShouldPushChanges()); | 277 // This request should fail as login token was not issued to TokenService. |
278 EXPECT_FALSE(sync_->ShouldPushChanges()); | |
279 EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP, | |
280 sync_->GetAuthError().state()); | |
277 } | 281 } |
278 | 282 |
279 TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) { | 283 TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) { |
280 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, | 284 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
281 "test_user"); | 285 "test_user"); |
282 SigninManagerFactory::GetForProfile( | 286 SigninManagerFactory::GetForProfile( |
283 profile_.get())->Initialize(profile_.get(), NULL); | 287 profile_.get())->Initialize(profile_.get(), NULL); |
284 CreateSyncService(); | 288 CreateSyncService(); |
285 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 289 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
286 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); | 290 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); |
287 TokenService* token_service = static_cast<TokenService*>( | 291 // Issue login token so that ProfileSyncServer tries to initialize backend. |
288 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 292 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
289 profile_.get(), BuildFakeTokenService)); | 293 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
290 token_service->LoadTokensFromDB(); | |
291 | 294 |
292 // Tell the backend to stall while downloading control types (simulating an | 295 // Tell the backend to stall while downloading control types (simulating an |
293 // auth error). | 296 // auth error). |
294 sync_->fail_initial_download(); | 297 sync_->fail_initial_download(); |
295 | 298 |
296 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 299 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
297 sync_->Initialize(); | 300 sync_->Initialize(); |
298 EXPECT_TRUE(sync_->GetBackendForTest()); | 301 EXPECT_TRUE(sync_->GetBackendForTest()); |
299 EXPECT_FALSE(sync_->sync_initialized()); | 302 EXPECT_FALSE(sync_->sync_initialized()); |
300 EXPECT_FALSE(sync_->ShouldPushChanges()); | |
301 Mock::VerifyAndClearExpectations(data_type_manager); | 303 Mock::VerifyAndClearExpectations(data_type_manager); |
302 | 304 |
303 // Update the credentials, unstalling the backend. | 305 // Update the credentials, unstalling the backend. |
304 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 306 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
305 EXPECT_CALL(*data_type_manager, state()). | 307 EXPECT_CALL(*data_type_manager, state()). |
306 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 308 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
307 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 309 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
308 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 310 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
309 sync_->SetSetupInProgress(true); | 311 sync_->SetSetupInProgress(true); |
310 | 312 |
311 // Simulate successful signin. | 313 // Simulate successful signin. |
312 GoogleServiceSigninSuccessDetails details("test_user", std::string()); | 314 GoogleServiceSigninSuccessDetails details("test_user", std::string()); |
313 content::NotificationService::current()->Notify( | 315 content::NotificationService::current()->Notify( |
314 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 316 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
315 content::Source<Profile>(profile_.get()), | 317 content::Source<Profile>(profile_.get()), |
316 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); | 318 content::Details<const GoogleServiceSigninSuccessDetails>(&details)); |
317 | 319 |
318 token_service->IssueAuthTokenForTest( | 320 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
319 GaiaConstants::kSyncService, "sync_token"); | 321 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
320 sync_->SetSetupInProgress(false); | 322 sync_->SetSetupInProgress(false); |
321 base::MessageLoop::current()->Run(); | |
322 | 323 |
323 // Verify we successfully finish startup and configuration. | 324 // Verify we successfully finish startup and configuration. |
324 EXPECT_TRUE(sync_->ShouldPushChanges()); | 325 EXPECT_TRUE(sync_->ShouldPushChanges()); |
325 } | 326 } |
326 | 327 |
327 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { | 328 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { |
328 EXPECT_CALL(*sync_->components_factory_mock(), | 329 EXPECT_CALL(*sync_->components_factory_mock(), |
329 CreateDataTypeManager(_, _, _, _, _)).Times(0); | 330 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
330 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 331 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
331 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 332 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
(...skipping 16 matching lines...) Expand all Loading... | |
348 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { | 349 TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) { |
349 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 350 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
350 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 351 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
351 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 352 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
352 EXPECT_CALL(*data_type_manager, state()). | 353 EXPECT_CALL(*data_type_manager, state()). |
353 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 354 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
354 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 355 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
355 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 356 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
356 | 357 |
357 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 358 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
358 GaiaConstants::kSyncService, "sync_token"); | 359 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
359 sync_->Initialize(); | 360 sync_->Initialize(); |
360 EXPECT_TRUE(sync_->ShouldPushChanges()); | 361 EXPECT_TRUE(sync_->ShouldPushChanges()); |
361 } | 362 } |
362 | 363 |
363 TEST_F(ProfileSyncServiceStartupTest, StartNormal) { | 364 TEST_F(ProfileSyncServiceStartupTest, StartNormal) { |
364 // Pre load the tokens | 365 // Pre load the tokens |
365 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 366 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
366 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 367 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
367 profile_.get(), NULL); | 368 profile_.get(), NULL); |
368 CreateSyncService(); | 369 CreateSyncService(); |
369 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 370 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
370 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 371 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
371 EXPECT_CALL(*data_type_manager, state()). | 372 EXPECT_CALL(*data_type_manager, state()). |
372 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 373 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
373 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 374 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
374 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 375 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
375 | 376 |
376 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 377 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
377 GaiaConstants::kSyncService, "sync_token"); | 378 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
378 | 379 |
379 sync_->Initialize(); | 380 sync_->Initialize(); |
380 } | 381 } |
381 | 382 |
382 // Test that we can recover from a case where a bug in the code resulted in | 383 // 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 | 384 // OnUserChoseDatatypes not being properly called and datatype preferences |
384 // therefore being left unset. | 385 // therefore being left unset. |
385 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { | 386 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { |
386 // Clear the datatype preference fields (simulating bug 154940). | 387 // Clear the datatype preference fields (simulating bug 154940). |
387 profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced); | 388 profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced); |
(...skipping 10 matching lines...) Expand all Loading... | |
398 profile_.get(), NULL); | 399 profile_.get(), NULL); |
399 CreateSyncService(); | 400 CreateSyncService(); |
400 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 401 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
401 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 402 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
402 EXPECT_CALL(*data_type_manager, state()). | 403 EXPECT_CALL(*data_type_manager, state()). |
403 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 404 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
404 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 405 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
405 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 406 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
406 | 407 |
407 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 408 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
408 GaiaConstants::kSyncService, "sync_token"); | 409 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
409 sync_->Initialize(); | 410 sync_->Initialize(); |
410 | 411 |
411 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( | 412 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( |
412 prefs::kSyncKeepEverythingSynced)); | 413 prefs::kSyncKeepEverythingSynced)); |
413 } | 414 } |
414 | 415 |
415 // Verify that the recovery of datatype preferences doesn't overwrite a valid | 416 // Verify that the recovery of datatype preferences doesn't overwrite a valid |
416 // case where only bookmarks are enabled. | 417 // case where only bookmarks are enabled. |
417 TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) { | 418 TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) { |
418 // Explicitly set Keep Everything Synced to false and have only bookmarks | 419 // Explicitly set Keep Everything Synced to false and have only bookmarks |
419 // enabled. | 420 // enabled. |
420 profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false); | 421 profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false); |
421 | 422 |
422 // Pre load the tokens | 423 // Pre load the tokens |
423 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 424 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
424 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 425 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
425 profile_.get(), NULL); | 426 profile_.get(), NULL); |
426 CreateSyncService(); | 427 CreateSyncService(); |
427 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 428 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
428 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 429 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
429 EXPECT_CALL(*data_type_manager, state()). | 430 EXPECT_CALL(*data_type_manager, state()). |
430 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); | 431 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); |
431 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 432 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
432 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 433 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
433 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 434 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
434 GaiaConstants::kSyncService, "sync_token"); | 435 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
435 sync_->Initialize(); | 436 sync_->Initialize(); |
436 | 437 |
437 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( | 438 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( |
438 prefs::kSyncKeepEverythingSynced)); | 439 prefs::kSyncKeepEverythingSynced)); |
439 } | 440 } |
440 | 441 |
441 TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) { | 442 TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) { |
442 // Service should not be started by Initialize() since it's managed. | 443 // Service should not be started by Initialize() since it's managed. |
443 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 444 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
444 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 445 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
445 profile_.get(), NULL); | 446 profile_.get(), NULL); |
446 CreateSyncService(); | 447 CreateSyncService(); |
447 | 448 |
448 // Disable sync through policy. | 449 // Disable sync through policy. |
449 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); | 450 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); |
450 EXPECT_CALL(*sync_->components_factory_mock(), | 451 EXPECT_CALL(*sync_->components_factory_mock(), |
451 CreateDataTypeManager(_, _, _, _, _)).Times(0); | 452 CreateDataTypeManager(_, _, _, _, _)).Times(0); |
452 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 453 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
453 | 454 |
454 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 455 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
455 GaiaConstants::kSyncService, "sync_token"); | 456 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
456 sync_->Initialize(); | 457 sync_->Initialize(); |
457 } | 458 } |
458 | 459 |
459 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { | 460 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { |
460 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 461 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
461 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 462 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
462 profile_.get(), NULL); | 463 profile_.get(), NULL); |
463 CreateSyncService(); | 464 CreateSyncService(); |
464 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); | 465 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); |
465 EXPECT_CALL(*data_type_manager, Configure(_, _)); | 466 EXPECT_CALL(*data_type_manager, Configure(_, _)); |
466 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 467 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
467 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 468 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
468 GaiaConstants::kSyncService, "sync_token"); | 469 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
469 sync_->Initialize(); | 470 sync_->Initialize(); |
470 | 471 |
471 // The service should stop when switching to managed mode. | 472 // The service should stop when switching to managed mode. |
472 Mock::VerifyAndClearExpectations(data_type_manager); | 473 Mock::VerifyAndClearExpectations(data_type_manager); |
473 EXPECT_CALL(*data_type_manager, state()). | 474 EXPECT_CALL(*data_type_manager, state()). |
474 WillOnce(Return(DataTypeManager::CONFIGURED)); | 475 WillOnce(Return(DataTypeManager::CONFIGURED)); |
475 EXPECT_CALL(*data_type_manager, Stop()).Times(1); | 476 EXPECT_CALL(*data_type_manager, Stop()).Times(1); |
476 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 477 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
477 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); | 478 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); |
478 | 479 |
(...skipping 23 matching lines...) Expand all Loading... | |
502 errors, | 503 errors, |
503 syncer::ModelTypeSet()); | 504 syncer::ModelTypeSet()); |
504 EXPECT_CALL(*data_type_manager, Configure(_, _)). | 505 EXPECT_CALL(*data_type_manager, Configure(_, _)). |
505 WillRepeatedly( | 506 WillRepeatedly( |
506 DoAll(InvokeOnConfigureStart(sync_), | 507 DoAll(InvokeOnConfigureStart(sync_), |
507 InvokeOnConfigureDone(sync_, result))); | 508 InvokeOnConfigureDone(sync_, result))); |
508 EXPECT_CALL(*data_type_manager, state()). | 509 EXPECT_CALL(*data_type_manager, state()). |
509 WillOnce(Return(DataTypeManager::STOPPED)); | 510 WillOnce(Return(DataTypeManager::STOPPED)); |
510 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 511 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
511 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 512 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
512 GaiaConstants::kSyncService, "sync_token"); | 513 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
513 sync_->Initialize(); | 514 sync_->Initialize(); |
514 EXPECT_TRUE(sync_->HasUnrecoverableError()); | 515 EXPECT_TRUE(sync_->HasUnrecoverableError()); |
515 } | 516 } |
516 | 517 |
517 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { | 518 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { |
518 // Pre load the tokens | 519 // Pre load the tokens |
519 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); | 520 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); |
520 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( | 521 SigninManagerFactory::GetForProfile(profile_.get())->Initialize( |
521 profile_.get(), NULL); | 522 profile_.get(), NULL); |
522 CreateSyncService(); | 523 CreateSyncService(); |
523 | 524 |
524 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); | 525 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); |
525 | 526 |
526 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); | 527 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); |
527 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( | 528 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( |
528 GaiaConstants::kSyncService, "sync_token"); | 529 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); |
529 sync_->fail_initial_download(); | 530 sync_->fail_initial_download(); |
530 | 531 |
532 sync_->SetSetupInProgress(true); | |
Andrew T Wilson (Slow)
2013/06/04 14:37:32
Why is this necessary now?
pavely
2013/06/04 20:11:13
I think this test was initially broken. With SyncH
| |
531 sync_->Initialize(); | 533 sync_->Initialize(); |
534 sync_->SetSetupInProgress(false); | |
532 EXPECT_FALSE(sync_->sync_initialized()); | 535 EXPECT_FALSE(sync_->sync_initialized()); |
533 EXPECT_FALSE(sync_->GetBackendForTest()); | 536 EXPECT_TRUE(sync_->GetBackendForTest()); |
534 } | 537 } |
OLD | NEW |