| 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 "chrome/browser/chromeos/login/parallel_authenticator.h" | 5 #include "chrome/browser/chromeos/login/parallel_authenticator.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/command_line.h" |
| 9 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| 10 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
| 11 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 12 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 13 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
| 14 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
| 15 #include "chrome/browser/chromeos/login/mock_login_status_consumer.h" | 16 #include "chrome/browser/chromeos/login/mock_login_status_consumer.h" |
| 16 #include "chrome/browser/chromeos/login/mock_url_fetchers.h" | 17 #include "chrome/browser/chromeos/login/mock_url_fetchers.h" |
| 17 #include "chrome/browser/chromeos/login/mock_user_manager.h" | 18 #include "chrome/browser/chromeos/login/mock_user_manager.h" |
| 18 #include "chrome/browser/chromeos/login/test_attempt_state.h" | 19 #include "chrome/browser/chromeos/login/test_attempt_state.h" |
| 19 #include "chrome/browser/chromeos/login/user.h" | 20 #include "chrome/browser/chromeos/login/user.h" |
| 20 #include "chrome/browser/chromeos/login/user_manager.h" | 21 #include "chrome/browser/chromeos/login/user_manager.h" |
| 21 #include "chrome/browser/chromeos/settings/cros_settings.h" | 22 #include "chrome/browser/chromeos/settings/cros_settings.h" |
| 22 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" | 23 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" |
| 23 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" | 24 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" |
| 24 #include "chrome/test/base/testing_profile.h" | 25 #include "chrome/test/base/testing_profile.h" |
| 26 #include "chromeos/chromeos_switches.h" |
| 25 #include "chromeos/cryptohome/mock_async_method_caller.h" | 27 #include "chromeos/cryptohome/mock_async_method_caller.h" |
| 26 #include "chromeos/cryptohome/mock_cryptohome_library.h" | 28 #include "chromeos/cryptohome/mock_cryptohome_library.h" |
| 27 #include "chromeos/dbus/fake_cryptohome_client.h" | 29 #include "chromeos/dbus/fake_cryptohome_client.h" |
| 28 #include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" | 30 #include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" |
| 29 #include "content/public/test/test_browser_thread_bundle.h" | 31 #include "content/public/test/test_browser_thread_bundle.h" |
| 30 #include "google_apis/gaia/mock_url_fetcher_factory.h" | 32 #include "google_apis/gaia/mock_url_fetcher_factory.h" |
| 31 #include "net/base/net_errors.h" | 33 #include "net/base/net_errors.h" |
| 32 #include "net/url_request/url_request_status.h" | 34 #include "net/url_request/url_request_status.h" |
| 33 #include "testing/gmock/include/gmock/gmock.h" | 35 #include "testing/gmock/include/gmock/gmock.h" |
| 34 #include "testing/gtest/include/gtest/gtest.h" | 36 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 48 : OnlineAttempt(state, resolver) { | 50 : OnlineAttempt(state, resolver) { |
| 49 } | 51 } |
| 50 }; | 52 }; |
| 51 | 53 |
| 52 class ParallelAuthenticatorTest : public testing::Test { | 54 class ParallelAuthenticatorTest : public testing::Test { |
| 53 public: | 55 public: |
| 54 ParallelAuthenticatorTest() | 56 ParallelAuthenticatorTest() |
| 55 : username_("me@nowhere.org"), | 57 : username_("me@nowhere.org"), |
| 56 password_("fakepass"), | 58 password_("fakepass"), |
| 57 hash_ascii_("0a010000000000a0" + std::string(16, '0')), | 59 hash_ascii_("0a010000000000a0" + std::string(16, '0')), |
| 58 user_manager_enabler_(new MockUserManager) { | 60 user_manager_enabler_(new MockUserManager), |
| 61 mock_caller_(NULL) { |
| 59 } | 62 } |
| 60 | 63 |
| 61 virtual ~ParallelAuthenticatorTest() { | 64 virtual ~ParallelAuthenticatorTest() { |
| 62 DCHECK(!mock_caller_); | 65 DCHECK(!mock_caller_); |
| 63 } | 66 } |
| 64 | 67 |
| 65 virtual void SetUp() { | 68 virtual void SetUp() { |
| 69 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kLoginManager); |
| 70 |
| 66 mock_caller_ = new cryptohome::MockAsyncMethodCaller; | 71 mock_caller_ = new cryptohome::MockAsyncMethodCaller; |
| 67 cryptohome::AsyncMethodCaller::InitializeForTesting(mock_caller_); | 72 cryptohome::AsyncMethodCaller::InitializeForTesting(mock_caller_); |
| 68 | 73 |
| 69 mock_cryptohome_library_ .reset(new MockCryptohomeLibrary()); | 74 mock_cryptohome_library_ .reset(new MockCryptohomeLibrary()); |
| 70 CryptohomeLibrary::SetForTest(mock_cryptohome_library_.get()); | 75 CryptohomeLibrary::SetForTest(mock_cryptohome_library_.get()); |
| 71 | 76 |
| 72 auth_ = new ParallelAuthenticator(&consumer_); | 77 auth_ = new ParallelAuthenticator(&consumer_); |
| 73 state_.reset(new TestAttemptState(UserContext(username_, | 78 state_.reset(new TestAttemptState(UserContext(username_, |
| 74 password_, | 79 password_, |
| 75 std::string()), | 80 std::string()), |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 SetOwnerState(false, false); | 325 SetOwnerState(false, false); |
| 321 // Remove the real DeviceSettingsProvider and replace it with a stub. | 326 // Remove the real DeviceSettingsProvider and replace it with a stub. |
| 322 device_settings_provider = | 327 device_settings_provider = |
| 323 CrosSettings::Get()->GetProvider(chromeos::kReportDeviceVersionInfo); | 328 CrosSettings::Get()->GetProvider(chromeos::kReportDeviceVersionInfo); |
| 324 EXPECT_TRUE(device_settings_provider != NULL); | 329 EXPECT_TRUE(device_settings_provider != NULL); |
| 325 EXPECT_TRUE( | 330 EXPECT_TRUE( |
| 326 CrosSettings::Get()->RemoveSettingsProvider(device_settings_provider)); | 331 CrosSettings::Get()->RemoveSettingsProvider(device_settings_provider)); |
| 327 CrosSettings::Get()->AddSettingsProvider(&stub_settings_provider); | 332 CrosSettings::Get()->AddSettingsProvider(&stub_settings_provider); |
| 328 CrosSettings::Get()->SetBoolean(kPolicyMissingMitigationMode, true); | 333 CrosSettings::Get()->SetBoolean(kPolicyMissingMitigationMode, true); |
| 329 | 334 |
| 335 // Initialize login state for this test to verify the login state is changed |
| 336 // to SAFE_MODE. |
| 337 LoginState::Initialize(); |
| 338 |
| 330 EXPECT_EQ(ParallelAuthenticator::CONTINUE, | 339 EXPECT_EQ(ParallelAuthenticator::CONTINUE, |
| 331 SetAndResolveState(auth_.get(), state_.release())); | 340 SetAndResolveState(auth_.get(), state_.release())); |
| 332 // Let the owner verification run. | 341 EXPECT_TRUE(LoginState::Get()->IsInSafeMode()); |
| 342 |
| 343 // Simulate certificates load event. The exact certificates loaded are not |
| 344 // actually used by the DeviceSettingsService, so it is OK to pass an empty |
| 345 // list. |
| 346 DeviceSettingsService::Get()->OnCertificatesLoaded(net::CertificateList(), |
| 347 true); |
| 348 // Flush all the pending operations. The operations should induce an owner |
| 349 // verification. |
| 333 device_settings_test_helper_.Flush(); | 350 device_settings_test_helper_.Flush(); |
| 334 // and test that the mount has succeeded. | 351 // and test that the mount has succeeded. |
| 335 state_.reset(new TestAttemptState(UserContext(username_, | 352 state_.reset(new TestAttemptState(UserContext(username_, |
| 336 password_, | 353 password_, |
| 337 std::string()), | 354 std::string()), |
| 338 hash_ascii_, | 355 hash_ascii_, |
| 339 "", | 356 "", |
| 340 "", | 357 "", |
| 341 User::USER_TYPE_REGULAR, | 358 User::USER_TYPE_REGULAR, |
| 342 false)); | 359 false)); |
| 343 state_->PresetCryptohomeStatus(true, cryptohome::MOUNT_ERROR_NONE); | 360 state_->PresetCryptohomeStatus(true, cryptohome::MOUNT_ERROR_NONE); |
| 344 EXPECT_EQ(ParallelAuthenticator::OWNER_REQUIRED, | 361 EXPECT_EQ(ParallelAuthenticator::OWNER_REQUIRED, |
| 345 SetAndResolveState(auth_.get(), state_.release())); | 362 SetAndResolveState(auth_.get(), state_.release())); |
| 346 | 363 |
| 364 // Unset global objects used by this test. |
| 365 LoginState::Shutdown(); |
| 347 EXPECT_TRUE( | 366 EXPECT_TRUE( |
| 348 CrosSettings::Get()->RemoveSettingsProvider(&stub_settings_provider)); | 367 CrosSettings::Get()->RemoveSettingsProvider(&stub_settings_provider)); |
| 349 CrosSettings::Get()->AddSettingsProvider(device_settings_provider); | 368 CrosSettings::Get()->AddSettingsProvider(device_settings_provider); |
| 350 DBusThreadManager::Get()->Shutdown(); | 369 DBusThreadManager::Get()->Shutdown(); |
| 351 } | 370 } |
| 352 | 371 |
| 353 TEST_F(ParallelAuthenticatorTest, DriveFailedMount) { | 372 TEST_F(ParallelAuthenticatorTest, DriveFailedMount) { |
| 354 FailOnLoginSuccess(); | 373 FailOnLoginSuccess(); |
| 355 ExpectLoginFailure(LoginFailure(LoginFailure::COULD_NOT_MOUNT_CRYPTOHOME)); | 374 ExpectLoginFailure(LoginFailure(LoginFailure::COULD_NOT_MOUNT_CRYPTOHOME)); |
| 356 | 375 |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 633 .WillOnce(Return(std::string())) | 652 .WillOnce(Return(std::string())) |
| 634 .RetiresOnSaturation(); | 653 .RetiresOnSaturation(); |
| 635 | 654 |
| 636 auth_->AuthenticateToUnlock(UserContext(username_, | 655 auth_->AuthenticateToUnlock(UserContext(username_, |
| 637 std::string(), | 656 std::string(), |
| 638 std::string())); | 657 std::string())); |
| 639 base::MessageLoop::current()->Run(); | 658 base::MessageLoop::current()->Run(); |
| 640 } | 659 } |
| 641 | 660 |
| 642 } // namespace chromeos | 661 } // namespace chromeos |
| OLD | NEW |