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

Side by Side Diff: chrome/browser/chromeos/login/login_utils_browsertest.cc

Issue 11027070: Moved JsonPrefStore to use SequencedWorkerPool (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View 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 "chrome/browser/chromeos/login/login_utils.h" 5 #include "chrome/browser/chromeos/login/login_utils.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 test_api->SetCryptohomeLibrary(cryptohome_, true); 213 test_api->SetCryptohomeLibrary(cryptohome_, true);
214 214
215 EXPECT_CALL(*mock_dbus_thread_manager_.mock_cryptohome_client(), 215 EXPECT_CALL(*mock_dbus_thread_manager_.mock_cryptohome_client(),
216 IsMounted(_)); 216 IsMounted(_));
217 217
218 browser_process_->SetProfileManager( 218 browser_process_->SetProfileManager(
219 new ProfileManagerWithoutInit(scoped_temp_dir_.path())); 219 new ProfileManagerWithoutInit(scoped_temp_dir_.path()));
220 connector_ = browser_process_->browser_policy_connector(); 220 connector_ = browser_process_->browser_policy_connector();
221 connector_->Init(); 221 connector_->Init();
222 222
223 RunAllPending(); 223 RunUntilIdle();
224 } 224 }
225 225
226 virtual void TearDown() OVERRIDE { 226 virtual void TearDown() OVERRIDE {
227 cryptohome::AsyncMethodCaller::Shutdown(); 227 cryptohome::AsyncMethodCaller::Shutdown();
228 mock_async_method_caller_ = NULL; 228 mock_async_method_caller_ = NULL;
229 229
230 RunAllPending(); 230 RunUntilIdle();
231 { 231 {
232 // chrome_browser_net::Predictor usually skips its shutdown routines on 232 // chrome_browser_net::Predictor usually skips its shutdown routines on
233 // unit_tests, but does the full thing when 233 // unit_tests, but does the full thing when
234 // g_browser_process->profile_manager() is valid during initialization. 234 // g_browser_process->profile_manager() is valid during initialization.
235 // Run a task on a temporary BrowserThread::IO that allows skipping 235 // Run a task on a temporary BrowserThread::IO that allows skipping
236 // these routines. 236 // these routines.
237 // 237 //
238 // It is important to not have a fake message loop on the IO 238 // It is important to not have a fake message loop on the IO
239 // thread for the whole test, see comment on LoginUtilsTest 239 // thread for the whole test, see comment on LoginUtilsTest
240 // constructor for details. 240 // constructor for details.
241 io_thread_.DeprecatedSetMessageLoop(&loop_); 241 io_thread_.DeprecatedSetMessageLoop(&loop_);
242 loop_.PostTask(FROM_HERE, 242 loop_.PostTask(FROM_HERE,
243 base::Bind(&LoginUtilsTest::TearDownOnIO, 243 base::Bind(&LoginUtilsTest::TearDownOnIO,
244 base::Unretained(this))); 244 base::Unretained(this)));
245 RunAllPending(); 245 RunUntilIdle();
246 io_thread_.DeprecatedSetMessageLoop(NULL); 246 io_thread_.DeprecatedSetMessageLoop(NULL);
247 } 247 }
248 248
249 // These trigger some tasks that have to run while BrowserThread::UI 249 // These trigger some tasks that have to run while BrowserThread::UI
250 // exists. Delete all the profiles before deleting the connector. 250 // exists. Delete all the profiles before deleting the connector.
251 browser_process_->SetProfileManager(NULL); 251 browser_process_->SetProfileManager(NULL);
252 connector_ = NULL; 252 connector_ = NULL;
253 browser_process_->SetBrowserPolicyConnector(NULL); 253 browser_process_->SetBrowserPolicyConnector(NULL);
254 RunAllPending(); 254 RunUntilIdle();
255 } 255 }
256 256
257 void TearDownOnIO() { 257 void TearDownOnIO() {
258 std::vector<Profile*> profiles = 258 std::vector<Profile*> profiles =
259 browser_process_->profile_manager()->GetLoadedProfiles(); 259 browser_process_->profile_manager()->GetLoadedProfiles();
260 for (size_t i = 0; i < profiles.size(); ++i) { 260 for (size_t i = 0; i < profiles.size(); ++i) {
261 chrome_browser_net::Predictor* predictor = 261 chrome_browser_net::Predictor* predictor =
262 profiles[i]->GetNetworkPredictor(); 262 profiles[i]->GetNetworkPredictor();
263 if (predictor) { 263 if (predictor) {
264 predictor->EnablePredictorOnIOThread(false); 264 predictor->EnablePredictorOnIOThread(false);
265 predictor->Shutdown(); 265 predictor->Shutdown();
266 } 266 }
267 } 267 }
268 } 268 }
269 269
270 void RunAllPending() { 270 void RunUntilIdle() {
271 loop_.RunAllPending(); 271 loop_.RunUntilIdle();
272 BrowserThread::GetBlockingPool()->FlushForTesting(); 272 BrowserThread::GetBlockingPool()->FlushForTesting();
273 loop_.RunAllPending(); 273 loop_.RunUntilIdle();
274 } 274 }
275 275
276 virtual void OnProfilePrepared(Profile* profile) OVERRIDE { 276 virtual void OnProfilePrepared(Profile* profile) OVERRIDE {
277 EXPECT_FALSE(prepared_profile_); 277 EXPECT_FALSE(prepared_profile_);
278 prepared_profile_ = profile; 278 prepared_profile_ = profile;
279 } 279 }
280 280
281 virtual void OnLoginFailure(const LoginFailure& error) OVERRIDE { 281 virtual void OnLoginFailure(const LoginFailure& error) OVERRIDE {
282 FAIL() << "OnLoginFailure not expected"; 282 FAIL() << "OnLoginFailure not expected";
283 } 283 }
284 284
285 virtual void OnLoginSuccess(const std::string& username, 285 virtual void OnLoginSuccess(const std::string& username,
286 const std::string& password, 286 const std::string& password,
287 bool pending_requests, 287 bool pending_requests,
288 bool using_oauth) OVERRIDE { 288 bool using_oauth) OVERRIDE {
289 FAIL() << "OnLoginSuccess not expected"; 289 FAIL() << "OnLoginSuccess not expected";
290 } 290 }
291 291
292 void LockDevice(const std::string& username) { 292 void LockDevice(const std::string& username) {
293 EXPECT_CALL(*cryptohome_, InstallAttributesIsFirstInstall()) 293 EXPECT_CALL(*cryptohome_, InstallAttributesIsFirstInstall())
294 .WillOnce(Return(true)) 294 .WillOnce(Return(true))
295 .WillRepeatedly(Return(false)); 295 .WillRepeatedly(Return(false));
296 policy::CloudPolicyDataStore* device_data_store = 296 policy::CloudPolicyDataStore* device_data_store =
297 connector_->GetDeviceCloudPolicyDataStore(); 297 connector_->GetDeviceCloudPolicyDataStore();
298 device_data_store->set_device_mode(policy::DEVICE_MODE_ENTERPRISE); 298 device_data_store->set_device_mode(policy::DEVICE_MODE_ENTERPRISE);
299 device_data_store->set_device_id(kDeviceId); 299 device_data_store->set_device_id(kDeviceId);
300 EXPECT_EQ(policy::EnterpriseInstallAttributes::LOCK_SUCCESS, 300 EXPECT_EQ(policy::EnterpriseInstallAttributes::LOCK_SUCCESS,
301 connector_->LockDevice(username)); 301 connector_->LockDevice(username));
302 RunAllPending(); 302 RunUntilIdle();
303 } 303 }
304 304
305 void PrepareProfile(const std::string& username) { 305 void PrepareProfile(const std::string& username) {
306 ScopedDeviceSettingsTestHelper device_settings_test_helper; 306 ScopedDeviceSettingsTestHelper device_settings_test_helper;
307 MockSessionManagerClient* session_manager_client = 307 MockSessionManagerClient* session_manager_client =
308 mock_dbus_thread_manager_.mock_session_manager_client(); 308 mock_dbus_thread_manager_.mock_session_manager_client();
309 EXPECT_CALL(*session_manager_client, StartSession(_)); 309 EXPECT_CALL(*session_manager_client, StartSession(_));
310 EXPECT_CALL(*cryptohome_, GetSystemSalt()) 310 EXPECT_CALL(*cryptohome_, GetSystemSalt())
311 .WillRepeatedly(Return(std::string("stub_system_salt"))); 311 .WillRepeatedly(Return(std::string("stub_system_salt")));
312 EXPECT_CALL(*mock_async_method_caller_, AsyncMount(_, _, _, _)) 312 EXPECT_CALL(*mock_async_method_caller_, AsyncMount(_, _, _, _))
313 .WillRepeatedly(Return()); 313 .WillRepeatedly(Return());
314 314
315 scoped_refptr<Authenticator> authenticator = 315 scoped_refptr<Authenticator> authenticator =
316 LoginUtils::Get()->CreateAuthenticator(this); 316 LoginUtils::Get()->CreateAuthenticator(this);
317 authenticator->CompleteLogin(ProfileManager::GetDefaultProfile(), 317 authenticator->CompleteLogin(ProfileManager::GetDefaultProfile(),
318 username, 318 username,
319 "password"); 319 "password");
320 320
321 const bool kPendingRequests = false; 321 const bool kPendingRequests = false;
322 const bool kUsingOAuth = true; 322 const bool kUsingOAuth = true;
323 const bool kHasCookies = true; 323 const bool kHasCookies = true;
324 LoginUtils::Get()->PrepareProfile(username, std::string(), "password", 324 LoginUtils::Get()->PrepareProfile(username, std::string(), "password",
325 kPendingRequests, kUsingOAuth, 325 kPendingRequests, kUsingOAuth,
326 kHasCookies, this); 326 kHasCookies, this);
327 device_settings_test_helper.Flush(); 327 device_settings_test_helper.Flush();
328 RunAllPending(); 328 RunUntilIdle();
329 } 329 }
330 330
331 net::TestURLFetcher* PrepareOAuthFetcher(const std::string& expected_url) { 331 net::TestURLFetcher* PrepareOAuthFetcher(const std::string& expected_url) {
332 net::TestURLFetcher* fetcher = test_url_fetcher_factory_.GetFetcherByID(0); 332 net::TestURLFetcher* fetcher = test_url_fetcher_factory_.GetFetcherByID(0);
333 EXPECT_TRUE(fetcher); 333 EXPECT_TRUE(fetcher);
334 EXPECT_TRUE(fetcher->delegate()); 334 EXPECT_TRUE(fetcher->delegate());
335 EXPECT_TRUE(StartsWithASCII(fetcher->GetOriginalURL().spec(), 335 EXPECT_TRUE(StartsWithASCII(fetcher->GetOriginalURL().spec(),
336 expected_url, 336 expected_url,
337 true)); 337 true));
338 fetcher->set_url(fetcher->GetOriginalURL()); 338 fetcher->set_url(fetcher->GetOriginalURL());
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 470
471 // 2. Get the pending oauth1 access token fetcher. 471 // 2. Get the pending oauth1 access token fetcher.
472 net::TestURLFetcher* fetcher = 472 net::TestURLFetcher* fetcher =
473 PrepareOAuthFetcher(GaiaUrls::GetInstance()->get_oauth_token_url()); 473 PrepareOAuthFetcher(GaiaUrls::GetInstance()->get_oauth_token_url());
474 ASSERT_TRUE(fetcher); 474 ASSERT_TRUE(fetcher);
475 475
476 // 3. Issuing a RefreshPolicies() now blocks waiting for the oauth token. 476 // 3. Issuing a RefreshPolicies() now blocks waiting for the oauth token.
477 bool refresh_policies_completed = false; 477 bool refresh_policies_completed = false;
478 browser_process_->policy_service()->RefreshPolicies( 478 browser_process_->policy_service()->RefreshPolicies(
479 base::Bind(SetFlag, &refresh_policies_completed)); 479 base::Bind(SetFlag, &refresh_policies_completed));
480 RunAllPending(); 480 RunUntilIdle();
481 ASSERT_FALSE(refresh_policies_completed); 481 ASSERT_FALSE(refresh_policies_completed);
482 482
483 // 4. Now make the fetcher fail. RefreshPolicies() should unblock. 483 // 4. Now make the fetcher fail. RefreshPolicies() should unblock.
484 // The OAuth1TokenFetcher retries up to 5 times with a 3 second delay; 484 // The OAuth1TokenFetcher retries up to 5 times with a 3 second delay;
485 // just invoke the callback directly to avoid waiting for that. 485 // just invoke the callback directly to avoid waiting for that.
486 // The |mock_fetcher| is passed instead of the original because the original 486 // The |mock_fetcher| is passed instead of the original because the original
487 // is deleted by the GaiaOAuthFetcher after the first callback. 487 // is deleted by the GaiaOAuthFetcher after the first callback.
488 net::URLFetcherDelegate* delegate = fetcher->delegate(); 488 net::URLFetcherDelegate* delegate = fetcher->delegate();
489 ASSERT_TRUE(delegate); 489 ASSERT_TRUE(delegate);
490 net::TestURLFetcher mock_fetcher(fetcher->id(), 490 net::TestURLFetcher mock_fetcher(fetcher->id(),
491 fetcher->GetOriginalURL(), 491 fetcher->GetOriginalURL(),
492 delegate); 492 delegate);
493 mock_fetcher.set_status(net::URLRequestStatus()); 493 mock_fetcher.set_status(net::URLRequestStatus());
494 mock_fetcher.set_response_code(404); 494 mock_fetcher.set_response_code(404);
495 for (int i = 0; i < 6; ++i) { 495 for (int i = 0; i < 6; ++i) {
496 ASSERT_FALSE(refresh_policies_completed); 496 ASSERT_FALSE(refresh_policies_completed);
497 delegate->OnURLFetchComplete(&mock_fetcher); 497 delegate->OnURLFetchComplete(&mock_fetcher);
498 RunAllPending(); 498 RunUntilIdle();
499 } 499 }
500 EXPECT_TRUE(refresh_policies_completed); 500 EXPECT_TRUE(refresh_policies_completed);
501 } 501 }
502 502
503 TEST_P(LoginUtilsBlockingLoginTest, EnterpriseLoginBlocksForEnterpriseUser) { 503 TEST_P(LoginUtilsBlockingLoginTest, EnterpriseLoginBlocksForEnterpriseUser) {
504 UserManager* user_manager = UserManager::Get(); 504 UserManager* user_manager = UserManager::Get();
505 ASSERT_TRUE(!user_manager->IsUserLoggedIn()); 505 ASSERT_TRUE(!user_manager->IsUserLoggedIn());
506 EXPECT_FALSE(connector_->IsEnterpriseManaged()); 506 EXPECT_FALSE(connector_->IsEnterpriseManaged());
507 EXPECT_FALSE(prepared_profile_); 507 EXPECT_FALSE(prepared_profile_);
508 508
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 if (steps < 3) break; 548 if (steps < 3) break;
549 549
550 // Fake OAuth service token retrieval: 550 // Fake OAuth service token retrieval:
551 fetcher = PrepareOAuthFetcher(gaia_urls->oauth_wrap_bridge_url()); 551 fetcher = PrepareOAuthFetcher(gaia_urls->oauth_wrap_bridge_url());
552 ASSERT_TRUE(fetcher); 552 ASSERT_TRUE(fetcher);
553 fetcher->SetResponseString(kOAuthServiceTokenData); 553 fetcher->SetResponseString(kOAuthServiceTokenData);
554 fetcher->delegate()->OnURLFetchComplete(fetcher); 554 fetcher->delegate()->OnURLFetchComplete(fetcher);
555 555
556 // The cloud policy subsystem is now ready to fetch the dmtoken and the user 556 // The cloud policy subsystem is now ready to fetch the dmtoken and the user
557 // policy. 557 // policy.
558 RunAllPending(); 558 RunUntilIdle();
559 if (steps < 4) break; 559 if (steps < 4) break;
560 560
561 fetcher = PrepareDMRegisterFetcher(); 561 fetcher = PrepareDMRegisterFetcher();
562 ASSERT_TRUE(fetcher); 562 ASSERT_TRUE(fetcher);
563 fetcher->delegate()->OnURLFetchComplete(fetcher); 563 fetcher->delegate()->OnURLFetchComplete(fetcher);
564 // The policy fetch job has now been scheduled, run it: 564 // The policy fetch job has now been scheduled, run it:
565 RunAllPending(); 565 RunUntilIdle();
566 if (steps < 5) break; 566 if (steps < 5) break;
567 567
568 // Verify that there is no profile prepared just before the policy fetch. 568 // Verify that there is no profile prepared just before the policy fetch.
569 EXPECT_FALSE(prepared_profile_); 569 EXPECT_FALSE(prepared_profile_);
570 570
571 fetcher = PrepareDMPolicyFetcher(); 571 fetcher = PrepareDMPolicyFetcher();
572 ASSERT_TRUE(fetcher); 572 ASSERT_TRUE(fetcher);
573 fetcher->delegate()->OnURLFetchComplete(fetcher); 573 fetcher->delegate()->OnURLFetchComplete(fetcher);
574 } while (0); 574 } while (0);
575 575
(...skipping 15 matching lines...) Expand all
591 } 591 }
592 592
593 INSTANTIATE_TEST_CASE_P( 593 INSTANTIATE_TEST_CASE_P(
594 LoginUtilsBlockingLoginTestInstance, 594 LoginUtilsBlockingLoginTestInstance,
595 LoginUtilsBlockingLoginTest, 595 LoginUtilsBlockingLoginTest,
596 testing::Values(0, 1, 2, 3, 4, 5)); 596 testing::Values(0, 1, 2, 3, 4, 5));
597 597
598 } // namespace 598 } // namespace
599 599
600 } 600 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698