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

Side by Side Diff: chrome/browser/sync/profile_sync_service_startup_unittest.cc

Issue 14630003: signin: move SigninManagerBase::Signout to SigninManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: apocalypse Created 7 years, 7 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 profile_(new TestingProfile), 75 profile_(new TestingProfile),
76 sync_(NULL) {} 76 sync_(NULL) {}
77 77
78 virtual ~ProfileSyncServiceStartupTest() { 78 virtual ~ProfileSyncServiceStartupTest() {
79 } 79 }
80 80
81 virtual void SetUp() { 81 virtual void SetUp() {
82 file_thread_.Start(); 82 file_thread_.Start();
83 io_thread_.StartIOThread(); 83 io_thread_.StartIOThread();
84 profile_->CreateRequestContext(); 84 profile_->CreateRequestContext();
85 CreateSyncService(); 85 #if defined(OS_CHROMEOS)
86 sync_->AddObserver(&observer_); 86 SigninManagerFactory::GetInstance()->SetTestingFactory(
87 sync_->set_synchronous_sync_configuration(); 87 profile_.get(), FakeSigninManagerBase::Build);
88 #else
89 SigninManagerFactory::GetInstance()->SetTestingFactory(
90 profile_.get(), FakeSigninManager::Build);
91 #endif
88 } 92 }
89 93
90 virtual void TearDown() { 94 virtual void TearDown() {
91 sync_->RemoveObserver(&observer_); 95 sync_->RemoveObserver(&observer_);
92 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory( 96 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory(
93 profile_.get(), NULL); 97 profile_.get(), NULL);
94 profile_.reset(); 98 profile_.reset();
95 99
96 // Pump messages posted by the sync core thread (which may end up 100 // Pump messages posted by the sync core thread (which may end up
97 // posting on the IO thread). 101 // posting on the IO thread).
98 ui_loop_.RunUntilIdle(); 102 ui_loop_.RunUntilIdle();
99 io_thread_.Stop(); 103 io_thread_.Stop();
100 file_thread_.Stop(); 104 file_thread_.Stop();
101 ui_loop_.RunUntilIdle(); 105 ui_loop_.RunUntilIdle();
102 } 106 }
103 107
104 void Signin() {
105 sync_->signin()->SetAuthenticatedUsername("test_user");
106 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
107 "test_user");
108 GoogleServiceSigninSuccessDetails details("test_user", "");
109 content::NotificationService::current()->Notify(
110 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
111 content::Source<Profile>(profile_.get()),
112 content::Details<const GoogleServiceSigninSuccessDetails>(&details));
113 }
114
115 static ProfileKeyedService* BuildService(content::BrowserContext* profile) { 108 static ProfileKeyedService* BuildService(content::BrowserContext* profile) {
116 SigninManagerBase* signin = static_cast<SigninManagerBase*>(
117 SigninManagerFactory::GetInstance()->SetTestingFactoryAndUse(
118 profile, FakeSigninManagerBase::Build));
119 signin->SetAuthenticatedUsername("test_user");
120 return new TestProfileSyncService( 109 return new TestProfileSyncService(
121 new ProfileSyncComponentsFactoryMock(), 110 new ProfileSyncComponentsFactoryMock(),
122 static_cast<Profile*>(profile), 111 static_cast<Profile*>(profile),
123 signin, 112 SigninManagerFactory::GetForProfile(static_cast<Profile*>(profile)),
124 ProfileSyncService::MANUAL_START, 113 ProfileSyncService::MANUAL_START,
125 true); 114 true);
126 } 115 }
127 116
128 protected: 117 void CreateSyncService() {
129 // Overridden below by ProfileSyncServiceStartupCrosTest.
130 virtual void CreateSyncService() {
131 sync_ = static_cast<TestProfileSyncService*>( 118 sync_ = static_cast<TestProfileSyncService*>(
132 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( 119 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
133 profile_.get(), BuildService)); 120 profile_.get(), BuildService));
121 sync_->AddObserver(&observer_);
122 sync_->set_synchronous_sync_configuration();
134 } 123 }
135 124
125 protected:
136 DataTypeManagerMock* SetUpDataTypeManager() { 126 DataTypeManagerMock* SetUpDataTypeManager() {
137 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock(); 127 DataTypeManagerMock* data_type_manager = new DataTypeManagerMock();
138 EXPECT_CALL(*sync_->components_factory_mock(), 128 EXPECT_CALL(*sync_->components_factory_mock(),
139 CreateDataTypeManager(_, _, _, _, _)). 129 CreateDataTypeManager(_, _, _, _, _)).
140 WillOnce(Return(data_type_manager)); 130 WillOnce(Return(data_type_manager));
141 return data_type_manager; 131 return data_type_manager;
142 } 132 }
143 133
144 MessageLoop ui_loop_; 134 MessageLoop ui_loop_;
145 content::TestBrowserThread ui_thread_; 135 content::TestBrowserThread ui_thread_;
146 content::TestBrowserThread db_thread_; 136 content::TestBrowserThread db_thread_;
147 content::TestBrowserThread file_thread_; 137 content::TestBrowserThread file_thread_;
148 content::TestBrowserThread io_thread_; 138 content::TestBrowserThread io_thread_;
149 scoped_ptr<TestingProfile> profile_; 139 scoped_ptr<TestingProfile> profile_;
150 TestProfileSyncService* sync_; 140 TestProfileSyncService* sync_;
151 ProfileSyncServiceObserverMock observer_; 141 ProfileSyncServiceObserverMock observer_;
152 }; 142 };
153 143
154 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest { 144 class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest {
155 public: 145 public:
146 virtual void SetUp() {
147 ProfileSyncServiceStartupTest::SetUp();
148 sync_ = static_cast<TestProfileSyncService*>(
149 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
150 profile_.get(), BuildCrosService));
151 sync_->AddObserver(&observer_);
152 sync_->set_synchronous_sync_configuration();
153 }
154
156 static ProfileKeyedService* BuildCrosService( 155 static ProfileKeyedService* BuildCrosService(
157 content::BrowserContext* context) { 156 content::BrowserContext* context) {
158 Profile* profile = static_cast<Profile*>(context); 157 Profile* profile = static_cast<Profile*>(context);
159 SigninManagerBase* signin = 158 SigninManagerBase* signin =
160 SigninManagerFactory::GetForProfile(profile); 159 SigninManagerFactory::GetForProfile(profile);
161 signin->SetAuthenticatedUsername("test_user"); 160 profile->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
161 "test_user");
162 signin->Initialize(profile);
163 EXPECT_FALSE(signin->GetAuthenticatedUsername().empty());
162 return new TestProfileSyncService( 164 return new TestProfileSyncService(
163 new ProfileSyncComponentsFactoryMock(), 165 new ProfileSyncComponentsFactoryMock(),
164 profile, 166 profile,
165 signin, 167 signin,
166 ProfileSyncService::AUTO_START, 168 ProfileSyncService::AUTO_START,
167 true); 169 true);
168 } 170 }
169
170 protected:
171 virtual void CreateSyncService() OVERRIDE {
172 sync_ = static_cast<TestProfileSyncService*>(
173 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
174 profile_.get(), BuildCrosService));
175 }
176 }; 171 };
177 172
173 ProfileKeyedService* BuildFakeTokenService(content::BrowserContext* profile) {
174 return new FakeTokenService();
175 }
176
178 TEST_F(ProfileSyncServiceStartupTest, StartFirstTime) { 177 TEST_F(ProfileSyncServiceStartupTest, StartFirstTime) {
178 // We've never completed startup.
179 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted);
180 SigninManagerFactory::GetForProfile(
181 profile_.get())->Initialize(profile_.get());
182 CreateSyncService();
179 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 183 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
180 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); 184 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
181 185
182 // We've never completed startup.
183 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted);
184 // Make sure SigninManager doesn't think we're signed in (undoes the call to
185 // SetAuthenticatedUsername() in CreateSyncService()).
186 SigninManagerFactory::GetForProfile(profile_.get())->SignOut();
187
188 // Should not actually start, rather just clean things up and wait 186 // Should not actually start, rather just clean things up and wait
189 // to be enabled. 187 // to be enabled.
190 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 188 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
191 sync_->Initialize(); 189 sync_->Initialize();
192 190
193 // Preferences should be back to defaults. 191 // Preferences should be back to defaults.
194 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); 192 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime));
195 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); 193 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted));
196 Mock::VerifyAndClearExpectations(data_type_manager); 194 Mock::VerifyAndClearExpectations(data_type_manager);
197 195
198 // Then start things up. 196 // Then start things up.
199 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1); 197 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1);
200 EXPECT_CALL(*data_type_manager, state()). 198 EXPECT_CALL(*data_type_manager, state()).
201 WillOnce(Return(DataTypeManager::CONFIGURED)). 199 WillOnce(Return(DataTypeManager::CONFIGURED)).
202 WillOnce(Return(DataTypeManager::CONFIGURED)); 200 WillOnce(Return(DataTypeManager::CONFIGURED));
203 EXPECT_CALL(*data_type_manager, Stop()).Times(1); 201 EXPECT_CALL(*data_type_manager, Stop()).Times(1);
204 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 202 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
205 203
206 // Create some tokens in the token service; the service will startup when
207 // it is notified that tokens are available.
208 sync_->SetSetupInProgress(true); 204 sync_->SetSetupInProgress(true);
209 Signin(); 205
206 // Simulate successful signin as test_user.
207 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
208 "test_user");
209 sync_->signin()->SetAuthenticatedUsername("test_user");
210 GoogleServiceSigninSuccessDetails details("test_user", "");
211 content::NotificationService::current()->Notify(
212 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
213 content::Source<Profile>(profile_.get()),
214 content::Details<const GoogleServiceSigninSuccessDetails>(&details));
215
216 // Create some tokens in the token service.
210 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 217 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
211 GaiaConstants::kSyncService, "sync_token"); 218 GaiaConstants::kSyncService, "sync_token");
212 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 219 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
213 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token"); 220 GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth2_login_token");
221
222 // Simulate the UI telling sync it has finished setting up.
214 sync_->SetSetupInProgress(false); 223 sync_->SetSetupInProgress(false);
215 EXPECT_TRUE(sync_->ShouldPushChanges()); 224 EXPECT_TRUE(sync_->ShouldPushChanges());
216 } 225 }
217 226
218 ProfileKeyedService* BuildFakeTokenService(content::BrowserContext* profile) {
219 return new FakeTokenService();
220 }
221
222 TEST_F(ProfileSyncServiceStartupTest, StartNoCredentials) { 227 TEST_F(ProfileSyncServiceStartupTest, StartNoCredentials) {
223 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 228 // We've never completed startup.
224 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); 229 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted);
230 SigninManagerFactory::GetForProfile(
231 profile_.get())->Initialize(profile_.get());
225 TokenService* token_service = static_cast<TokenService*>( 232 TokenService* token_service = static_cast<TokenService*>(
226 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( 233 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse(
227 profile_.get(), BuildFakeTokenService)); 234 profile_.get(), BuildFakeTokenService));
228 235 CreateSyncService();
229 // We've never completed startup. 236 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
230 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); 237 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
231 // Make sure SigninManager doesn't think we're signed in (undoes the call to
232 // SetAuthenticatedUsername() in CreateSyncService()).
233 SigninManagerFactory::GetForProfile(profile_.get())->SignOut();
234 238
235 // Should not actually start, rather just clean things up and wait 239 // Should not actually start, rather just clean things up and wait
236 // to be enabled. 240 // to be enabled.
237 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 241 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
238 sync_->Initialize(); 242 sync_->Initialize();
239 EXPECT_FALSE(sync_->GetBackendForTest()); 243 EXPECT_FALSE(sync_->GetBackendForTest());
240 244
241 // Preferences should be back to defaults. 245 // Preferences should be back to defaults.
242 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime)); 246 EXPECT_EQ(0, profile_->GetPrefs()->GetInt64(prefs::kSyncLastSyncedTime));
243 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted)); 247 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(prefs::kSyncHasSetupCompleted));
244 Mock::VerifyAndClearExpectations(data_type_manager); 248 Mock::VerifyAndClearExpectations(data_type_manager);
245 249
246 // Then start things up. 250 // Then start things up.
247 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1); 251 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1);
248 EXPECT_CALL(*data_type_manager, state()). 252 EXPECT_CALL(*data_type_manager, state()).
249 WillOnce(Return(DataTypeManager::CONFIGURED)). 253 WillOnce(Return(DataTypeManager::CONFIGURED)).
250 WillOnce(Return(DataTypeManager::CONFIGURED)); 254 WillOnce(Return(DataTypeManager::CONFIGURED));
251 EXPECT_CALL(*data_type_manager, Stop()).Times(1); 255 EXPECT_CALL(*data_type_manager, Stop()).Times(1);
252 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 256 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
253 257
254 sync_->SetSetupInProgress(true); 258 sync_->SetSetupInProgress(true);
255 Signin(); 259
260 // Simulate successful signin as test_user.
261 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
262 "test_user");
263 sync_->signin()->SetAuthenticatedUsername("test_user");
264 GoogleServiceSigninSuccessDetails details("test_user", "");
265 content::NotificationService::current()->Notify(
266 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
267 content::Source<Profile>(profile_.get()),
268 content::Details<const GoogleServiceSigninSuccessDetails>(&details));
256 // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens. 269 // NOTE: Unlike StartFirstTime, this test does not issue any auth tokens.
257 token_service->LoadTokensFromDB(); 270 token_service->LoadTokensFromDB();
271
258 sync_->SetSetupInProgress(false); 272 sync_->SetSetupInProgress(false);
259 // Backend should initialize using a bogus GAIA token for credentials. 273 // Backend should initialize using a bogus GAIA token for credentials.
260 EXPECT_TRUE(sync_->ShouldPushChanges()); 274 EXPECT_TRUE(sync_->ShouldPushChanges());
261 } 275 }
262 276
263 TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) { 277 TEST_F(ProfileSyncServiceStartupTest, StartInvalidCredentials) {
278 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
279 "test_user");
280 SigninManagerFactory::GetForProfile(
281 profile_.get())->Initialize(profile_.get());
282 CreateSyncService();
264 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 283 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
265 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0); 284 EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
266 TokenService* token_service = static_cast<TokenService*>( 285 TokenService* token_service = static_cast<TokenService*>(
267 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( 286 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse(
268 profile_.get(), BuildFakeTokenService)); 287 profile_.get(), BuildFakeTokenService));
269 token_service->LoadTokensFromDB(); 288 token_service->LoadTokensFromDB();
270 289
271 // Tell the backend to stall while downloading control types (simulating an 290 // Tell the backend to stall while downloading control types (simulating an
272 // auth error). 291 // auth error).
273 sync_->fail_initial_download(); 292 sync_->fail_initial_download();
274 293
275 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 294 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
276 sync_->Initialize(); 295 sync_->Initialize();
277 EXPECT_TRUE(sync_->GetBackendForTest()); 296 EXPECT_TRUE(sync_->GetBackendForTest());
278 EXPECT_FALSE(sync_->sync_initialized()); 297 EXPECT_FALSE(sync_->sync_initialized());
279 EXPECT_FALSE(sync_->ShouldPushChanges()); 298 EXPECT_FALSE(sync_->ShouldPushChanges());
280 Mock::VerifyAndClearExpectations(data_type_manager); 299 Mock::VerifyAndClearExpectations(data_type_manager);
281 300
282 // Update the credentials, unstalling the backend. 301 // Update the credentials, unstalling the backend.
283 EXPECT_CALL(*data_type_manager, Configure(_, _)); 302 EXPECT_CALL(*data_type_manager, Configure(_, _));
284 EXPECT_CALL(*data_type_manager, state()). 303 EXPECT_CALL(*data_type_manager, state()).
285 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); 304 WillRepeatedly(Return(DataTypeManager::CONFIGURED));
286 EXPECT_CALL(*data_type_manager, Stop()).Times(1); 305 EXPECT_CALL(*data_type_manager, Stop()).Times(1);
287 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 306 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
288 sync_->SetSetupInProgress(true); 307 sync_->SetSetupInProgress(true);
289 Signin(); 308
309 // Simulate successful signin.
310 GoogleServiceSigninSuccessDetails details("test_user", std::string());
311 content::NotificationService::current()->Notify(
312 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL,
313 content::Source<Profile>(profile_.get()),
314 content::Details<const GoogleServiceSigninSuccessDetails>(&details));
315
290 token_service->IssueAuthTokenForTest( 316 token_service->IssueAuthTokenForTest(
291 GaiaConstants::kSyncService, "sync_token"); 317 GaiaConstants::kSyncService, "sync_token");
292 sync_->SetSetupInProgress(false); 318 sync_->SetSetupInProgress(false);
293 MessageLoop::current()->Run(); 319 MessageLoop::current()->Run();
294 320
295 // Verify we successfully finish startup and configuration. 321 // Verify we successfully finish startup and configuration.
296 EXPECT_TRUE(sync_->ShouldPushChanges()); 322 EXPECT_TRUE(sync_->ShouldPushChanges());
297 } 323 }
298 324
299 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) { 325 TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) {
(...skipping 26 matching lines...) Expand all
326 EXPECT_CALL(*data_type_manager, Stop()).Times(1); 352 EXPECT_CALL(*data_type_manager, Stop()).Times(1);
327 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 353 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
328 354
329 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 355 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
330 GaiaConstants::kSyncService, "sync_token"); 356 GaiaConstants::kSyncService, "sync_token");
331 sync_->Initialize(); 357 sync_->Initialize();
332 EXPECT_TRUE(sync_->ShouldPushChanges()); 358 EXPECT_TRUE(sync_->ShouldPushChanges());
333 } 359 }
334 360
335 TEST_F(ProfileSyncServiceStartupTest, StartNormal) { 361 TEST_F(ProfileSyncServiceStartupTest, StartNormal) {
362 // Pre load the tokens
363 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
364 SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
365 profile_.get());
366 CreateSyncService();
336 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 367 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
337 EXPECT_CALL(*data_type_manager, Configure(_, _)); 368 EXPECT_CALL(*data_type_manager, Configure(_, _));
338 EXPECT_CALL(*data_type_manager, state()). 369 EXPECT_CALL(*data_type_manager, state()).
339 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); 370 WillRepeatedly(Return(DataTypeManager::CONFIGURED));
340 EXPECT_CALL(*data_type_manager, Stop()).Times(1); 371 EXPECT_CALL(*data_type_manager, Stop()).Times(1);
341
342 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 372 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
343 373
344 // Pre load the tokens
345 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 374 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
346 GaiaConstants::kSyncService, "sync_token"); 375 GaiaConstants::kSyncService, "sync_token");
347 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user"); 376
348 sync_->Initialize(); 377 sync_->Initialize();
349 } 378 }
350 379
351 // Test that we can recover from a case where a bug in the code resulted in 380 // Test that we can recover from a case where a bug in the code resulted in
352 // OnUserChoseDatatypes not being properly called and datatype preferences 381 // OnUserChoseDatatypes not being properly called and datatype preferences
353 // therefore being left unset. 382 // therefore being left unset.
354 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) { 383 TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) {
355 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
356 EXPECT_CALL(*data_type_manager, Configure(_, _));
357 EXPECT_CALL(*data_type_manager, state()).
358 WillRepeatedly(Return(DataTypeManager::CONFIGURED));
359 EXPECT_CALL(*data_type_manager, Stop()).Times(1);
360
361 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
362
363 // Clear the datatype preference fields (simulating bug 154940). 384 // Clear the datatype preference fields (simulating bug 154940).
364 profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced); 385 profile_->GetPrefs()->ClearPref(prefs::kSyncKeepEverythingSynced);
365 syncer::ModelTypeSet user_types = syncer::UserTypes(); 386 syncer::ModelTypeSet user_types = syncer::UserTypes();
366 for (syncer::ModelTypeSet::Iterator iter = user_types.First(); 387 for (syncer::ModelTypeSet::Iterator iter = user_types.First();
367 iter.Good(); iter.Inc()) { 388 iter.Good(); iter.Inc()) {
368 profile_->GetPrefs()->ClearPref( 389 profile_->GetPrefs()->ClearPref(
369 browser_sync::SyncPrefs::GetPrefNameForDataType(iter.Get())); 390 browser_sync::SyncPrefs::GetPrefNameForDataType(iter.Get()));
370 } 391 }
371 392
372 // Pre load the tokens 393 // Pre load the tokens
394 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
395 SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
396 profile_.get());
397 CreateSyncService();
398 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
399 EXPECT_CALL(*data_type_manager, Configure(_, _));
400 EXPECT_CALL(*data_type_manager, state()).
401 WillRepeatedly(Return(DataTypeManager::CONFIGURED));
402 EXPECT_CALL(*data_type_manager, Stop()).Times(1);
403 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
404
373 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 405 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
374 GaiaConstants::kSyncService, "sync_token"); 406 GaiaConstants::kSyncService, "sync_token");
375 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
376 sync_->Initialize(); 407 sync_->Initialize();
377 408
378 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean( 409 EXPECT_TRUE(profile_->GetPrefs()->GetBoolean(
379 prefs::kSyncKeepEverythingSynced)); 410 prefs::kSyncKeepEverythingSynced));
380 } 411 }
381 412
382 // Verify that the recovery of datatype preferences doesn't overwrite a valid 413 // Verify that the recovery of datatype preferences doesn't overwrite a valid
383 // case where only bookmarks are enabled. 414 // case where only bookmarks are enabled.
384 TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) { 415 TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) {
416 // Explicitly set Keep Everything Synced to false and have only bookmarks
417 // enabled.
418 profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false);
419
420 // Pre load the tokens
421 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
422 SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
423 profile_.get());
424 CreateSyncService();
385 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 425 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
386 EXPECT_CALL(*data_type_manager, Configure(_, _)); 426 EXPECT_CALL(*data_type_manager, Configure(_, _));
387 EXPECT_CALL(*data_type_manager, state()). 427 EXPECT_CALL(*data_type_manager, state()).
388 WillRepeatedly(Return(DataTypeManager::CONFIGURED)); 428 WillRepeatedly(Return(DataTypeManager::CONFIGURED));
389 EXPECT_CALL(*data_type_manager, Stop()).Times(1); 429 EXPECT_CALL(*data_type_manager, Stop()).Times(1);
390
391 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 430 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
392
393 // Explicitly set Keep Everything Synced to false and have only bookmarks
394 // enabled.
395 profile_->GetPrefs()->SetBoolean(prefs::kSyncKeepEverythingSynced, false);
396
397 // Pre load the tokens
398 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 431 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
399 GaiaConstants::kSyncService, "sync_token"); 432 GaiaConstants::kSyncService, "sync_token");
400 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
401 sync_->Initialize(); 433 sync_->Initialize();
402 434
403 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean( 435 EXPECT_FALSE(profile_->GetPrefs()->GetBoolean(
404 prefs::kSyncKeepEverythingSynced)); 436 prefs::kSyncKeepEverythingSynced));
405 } 437 }
406 438
407 TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) { 439 TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) {
440 // Service should not be started by Initialize() since it's managed.
441 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
442 SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
443 profile_.get());
444 CreateSyncService();
445
408 // Disable sync through policy. 446 // Disable sync through policy.
409 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); 447 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true);
410
411 EXPECT_CALL(*sync_->components_factory_mock(), 448 EXPECT_CALL(*sync_->components_factory_mock(),
412 CreateDataTypeManager(_, _, _, _, _)).Times(0); 449 CreateDataTypeManager(_, _, _, _, _)).Times(0);
413 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 450 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
414 451
415 // Service should not be started by Initialize() since it's managed.
416 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 452 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
417 GaiaConstants::kSyncService, "sync_token"); 453 GaiaConstants::kSyncService, "sync_token");
418 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
419 sync_->Initialize(); 454 sync_->Initialize();
420 } 455 }
421 456
422 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) { 457 TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) {
458 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
459 SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
460 profile_.get());
461 CreateSyncService();
423 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 462 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
424 EXPECT_CALL(*data_type_manager, Configure(_, _)); 463 EXPECT_CALL(*data_type_manager, Configure(_, _));
425 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 464 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
426
427 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 465 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
428 GaiaConstants::kSyncService, "sync_token"); 466 GaiaConstants::kSyncService, "sync_token");
429 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
430 sync_->Initialize(); 467 sync_->Initialize();
431 468
432 // The service should stop when switching to managed mode. 469 // The service should stop when switching to managed mode.
433 Mock::VerifyAndClearExpectations(data_type_manager); 470 Mock::VerifyAndClearExpectations(data_type_manager);
434 EXPECT_CALL(*data_type_manager, state()). 471 EXPECT_CALL(*data_type_manager, state()).
435 WillOnce(Return(DataTypeManager::CONFIGURED)); 472 WillOnce(Return(DataTypeManager::CONFIGURED));
436 EXPECT_CALL(*data_type_manager, Stop()).Times(1); 473 EXPECT_CALL(*data_type_manager, Stop()).Times(1);
437 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 474 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
438 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true); 475 profile_->GetPrefs()->SetBoolean(prefs::kSyncManaged, true);
439 476
440 // When switching back to unmanaged, the state should change, but the service 477 // When switching back to unmanaged, the state should change, but the service
441 // should not start up automatically (kSyncSetupCompleted will be false). 478 // should not start up automatically (kSyncSetupCompleted will be false).
442 Mock::VerifyAndClearExpectations(data_type_manager); 479 Mock::VerifyAndClearExpectations(data_type_manager);
443 EXPECT_CALL(*sync_->components_factory_mock(), 480 EXPECT_CALL(*sync_->components_factory_mock(),
444 CreateDataTypeManager(_, _, _, _, _)).Times(0); 481 CreateDataTypeManager(_, _, _, _, _)).Times(0);
445 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 482 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
446 profile_->GetPrefs()->ClearPref(prefs::kSyncManaged); 483 profile_->GetPrefs()->ClearPref(prefs::kSyncManaged);
447 } 484 }
448 485
449 TEST_F(ProfileSyncServiceStartupTest, StartFailure) { 486 TEST_F(ProfileSyncServiceStartupTest, StartFailure) {
487 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
488 SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
489 profile_.get());
490 CreateSyncService();
450 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager(); 491 DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
451 DataTypeManager::ConfigureStatus status = DataTypeManager::ABORTED; 492 DataTypeManager::ConfigureStatus status = DataTypeManager::ABORTED;
452 syncer::SyncError error( 493 syncer::SyncError error(
453 FROM_HERE, "Association failed.", syncer::BOOKMARKS); 494 FROM_HERE, "Association failed.", syncer::BOOKMARKS);
454 std::list<syncer::SyncError> errors; 495 std::list<syncer::SyncError> errors;
455 errors.push_back(error); 496 errors.push_back(error);
456 DataTypeManager::ConfigureResult result( 497 DataTypeManager::ConfigureResult result(
457 status, 498 status,
458 syncer::ModelTypeSet(), 499 syncer::ModelTypeSet(),
459 errors, 500 errors,
460 syncer::ModelTypeSet()); 501 syncer::ModelTypeSet());
461 EXPECT_CALL(*data_type_manager, Configure(_, _)). 502 EXPECT_CALL(*data_type_manager, Configure(_, _)).
462 WillRepeatedly( 503 WillRepeatedly(
463 DoAll(InvokeOnConfigureStart(sync_), 504 DoAll(InvokeOnConfigureStart(sync_),
464 InvokeOnConfigureDone(sync_, result))); 505 InvokeOnConfigureDone(sync_, result)));
465 EXPECT_CALL(*data_type_manager, state()). 506 EXPECT_CALL(*data_type_manager, state()).
466 WillOnce(Return(DataTypeManager::STOPPED)); 507 WillOnce(Return(DataTypeManager::STOPPED));
467
468 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 508 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
469
470 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 509 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
471 GaiaConstants::kSyncService, "sync_token"); 510 GaiaConstants::kSyncService, "sync_token");
472 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
473 sync_->Initialize(); 511 sync_->Initialize();
474 EXPECT_TRUE(sync_->HasUnrecoverableError()); 512 EXPECT_TRUE(sync_->HasUnrecoverableError());
475 } 513 }
476 514
477 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) { 515 TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) {
516 // Pre load the tokens
517 profile_->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "test_user");
518 SigninManagerFactory::GetForProfile(profile_.get())->Initialize(
519 profile_.get());
520 CreateSyncService();
521
478 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted); 522 profile_->GetPrefs()->ClearPref(prefs::kSyncHasSetupCompleted);
479 523
480 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber()); 524 EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
481
482 // Preload the tokens.
483 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest( 525 TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
484 GaiaConstants::kSyncService, "sync_token"); 526 GaiaConstants::kSyncService, "sync_token");
485 sync_->fail_initial_download(); 527 sync_->fail_initial_download();
486 528
487 sync_->Initialize(); 529 sync_->Initialize();
488 EXPECT_FALSE(sync_->sync_initialized()); 530 EXPECT_FALSE(sync_->sync_initialized());
489 EXPECT_FALSE(sync_->GetBackendForTest()); 531 EXPECT_FALSE(sync_->GetBackendForTest());
490 } 532 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/profile_sync_service.cc ('k') | chrome/browser/sync/profile_sync_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698