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/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 test_api->SetCryptohomeLibrary(mock_cryptohome_library_, true); | 82 test_api->SetCryptohomeLibrary(mock_cryptohome_library_, true); |
83 | 83 |
84 mock_cert_library_ = new MockCertLibrary(); | 84 mock_cert_library_ = new MockCertLibrary(); |
85 EXPECT_CALL(*mock_cert_library_, LoadKeyStore()).Times(AnyNumber()); | 85 EXPECT_CALL(*mock_cert_library_, LoadKeyStore()).Times(AnyNumber()); |
86 test_api->SetCertLibrary(mock_cert_library_, true); | 86 test_api->SetCertLibrary(mock_cert_library_, true); |
87 | 87 |
88 io_thread_.Start(); | 88 io_thread_.Start(); |
89 | 89 |
90 auth_ = new ParallelAuthenticator(&consumer_); | 90 auth_ = new ParallelAuthenticator(&consumer_); |
91 auth_->set_using_oauth(false); | 91 auth_->set_using_oauth(false); |
92 state_.reset(new TestAttemptState(username_, | 92 state_.reset(new TestAttemptState(UserCredentials(username_, |
93 password_, | 93 password_, |
| 94 std::string()), |
94 hash_ascii_, | 95 hash_ascii_, |
95 "", | 96 "", |
96 "", | 97 "", |
97 User::USER_TYPE_REGULAR, | 98 User::USER_TYPE_REGULAR, |
98 false)); | 99 false)); |
99 } | 100 } |
100 | 101 |
101 // Tears down the test fixture. | 102 // Tears down the test fixture. |
102 virtual void TearDown() { | 103 virtual void TearDown() { |
103 // Prevent bogus gMock leak check from firing. | 104 // Prevent bogus gMock leak check from firing. |
(...skipping 24 matching lines...) Expand all Loading... |
128 // Allow test to fail and exit gracefully, even if | 129 // Allow test to fail and exit gracefully, even if |
129 // OnRetailModeLoginSuccess() wasn't supposed to happen. | 130 // OnRetailModeLoginSuccess() wasn't supposed to happen. |
130 void FailOnRetailModeLoginSuccess() { | 131 void FailOnRetailModeLoginSuccess() { |
131 ON_CALL(consumer_, OnRetailModeLoginSuccess()) | 132 ON_CALL(consumer_, OnRetailModeLoginSuccess()) |
132 .WillByDefault(Invoke(MockConsumer::OnRetailModeSuccessQuitAndFail)); | 133 .WillByDefault(Invoke(MockConsumer::OnRetailModeSuccessQuitAndFail)); |
133 } | 134 } |
134 | 135 |
135 // Allow test to fail and exit gracefully, even if OnLoginSuccess() | 136 // Allow test to fail and exit gracefully, even if OnLoginSuccess() |
136 // wasn't supposed to happen. | 137 // wasn't supposed to happen. |
137 void FailOnLoginSuccess() { | 138 void FailOnLoginSuccess() { |
138 ON_CALL(consumer_, OnLoginSuccess(_, _, _, _)) | 139 ON_CALL(consumer_, OnLoginSuccess(_, _, _)) |
139 .WillByDefault(Invoke(MockConsumer::OnSuccessQuitAndFail)); | 140 .WillByDefault(Invoke(MockConsumer::OnSuccessQuitAndFail)); |
140 } | 141 } |
141 | 142 |
142 // Allow test to fail and exit gracefully, even if | 143 // Allow test to fail and exit gracefully, even if |
143 // OnOffTheRecordLoginSuccess() wasn't supposed to happen. | 144 // OnOffTheRecordLoginSuccess() wasn't supposed to happen. |
144 void FailOnGuestLoginSuccess() { | 145 void FailOnGuestLoginSuccess() { |
145 ON_CALL(consumer_, OnOffTheRecordLoginSuccess()) | 146 ON_CALL(consumer_, OnOffTheRecordLoginSuccess()) |
146 .WillByDefault(Invoke(MockConsumer::OnGuestSuccessQuitAndFail)); | 147 .WillByDefault(Invoke(MockConsumer::OnGuestSuccessQuitAndFail)); |
147 } | 148 } |
148 | 149 |
149 void ExpectLoginFailure(const LoginFailure& failure) { | 150 void ExpectLoginFailure(const LoginFailure& failure) { |
150 EXPECT_CALL(consumer_, OnLoginFailure(failure)) | 151 EXPECT_CALL(consumer_, OnLoginFailure(failure)) |
151 .WillOnce(Invoke(MockConsumer::OnFailQuit)) | 152 .WillOnce(Invoke(MockConsumer::OnFailQuit)) |
152 .RetiresOnSaturation(); | 153 .RetiresOnSaturation(); |
153 } | 154 } |
154 | 155 |
155 void ExpectRetailModeLoginSuccess() { | 156 void ExpectRetailModeLoginSuccess() { |
156 EXPECT_CALL(consumer_, OnRetailModeLoginSuccess()) | 157 EXPECT_CALL(consumer_, OnRetailModeLoginSuccess()) |
157 .WillOnce(Invoke(MockConsumer::OnRetailModeSuccessQuit)) | 158 .WillOnce(Invoke(MockConsumer::OnRetailModeSuccessQuit)) |
158 .RetiresOnSaturation(); | 159 .RetiresOnSaturation(); |
159 } | 160 } |
160 | 161 |
161 void ExpectLoginSuccess(const std::string& username, | 162 void ExpectLoginSuccess(const std::string& username, |
162 const std::string& password, | 163 const std::string& password, |
163 bool pending) { | 164 bool pending) { |
164 EXPECT_CALL(consumer_, OnLoginSuccess(username, password, pending, | 165 EXPECT_CALL(consumer_, OnLoginSuccess(UserCredentials(username, |
| 166 password, |
| 167 std::string()), |
| 168 pending, |
165 false)) | 169 false)) |
166 .WillOnce(Invoke(MockConsumer::OnSuccessQuit)) | 170 .WillOnce(Invoke(MockConsumer::OnSuccessQuit)) |
167 .RetiresOnSaturation(); | 171 .RetiresOnSaturation(); |
168 } | 172 } |
169 | 173 |
170 void ExpectGuestLoginSuccess() { | 174 void ExpectGuestLoginSuccess() { |
171 EXPECT_CALL(consumer_, OnOffTheRecordLoginSuccess()) | 175 EXPECT_CALL(consumer_, OnOffTheRecordLoginSuccess()) |
172 .WillOnce(Invoke(MockConsumer::OnGuestSuccessQuit)) | 176 .WillOnce(Invoke(MockConsumer::OnGuestSuccessQuit)) |
173 .RetiresOnSaturation(); | 177 .RetiresOnSaturation(); |
174 } | 178 } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 ScopedMockUserManagerEnabler mock_user_manager_; | 226 ScopedMockUserManagerEnabler mock_user_manager_; |
223 | 227 |
224 cryptohome::MockAsyncMethodCaller* mock_caller_; | 228 cryptohome::MockAsyncMethodCaller* mock_caller_; |
225 | 229 |
226 MockConsumer consumer_; | 230 MockConsumer consumer_; |
227 scoped_refptr<ParallelAuthenticator> auth_; | 231 scoped_refptr<ParallelAuthenticator> auth_; |
228 scoped_ptr<TestAttemptState> state_; | 232 scoped_ptr<TestAttemptState> state_; |
229 }; | 233 }; |
230 | 234 |
231 TEST_F(ParallelAuthenticatorTest, OnLoginSuccess) { | 235 TEST_F(ParallelAuthenticatorTest, OnLoginSuccess) { |
232 EXPECT_CALL(consumer_, OnLoginSuccess(username_, password_, false, false)) | 236 EXPECT_CALL(consumer_, OnLoginSuccess(UserCredentials(username_, |
| 237 password_, |
| 238 std::string()), |
| 239 false, false)) |
233 .Times(1) | 240 .Times(1) |
234 .RetiresOnSaturation(); | 241 .RetiresOnSaturation(); |
235 | 242 |
236 SetAttemptState(auth_, state_.release()); | 243 SetAttemptState(auth_, state_.release()); |
237 auth_->OnLoginSuccess(false); | 244 auth_->OnLoginSuccess(false); |
238 } | 245 } |
239 | 246 |
240 TEST_F(ParallelAuthenticatorTest, OnPasswordChangeDetected) { | 247 TEST_F(ParallelAuthenticatorTest, OnPasswordChangeDetected) { |
241 EXPECT_CALL(consumer_, OnPasswordChangeDetected()) | 248 EXPECT_CALL(consumer_, OnPasswordChangeDetected()) |
242 .Times(1) | 249 .Times(1) |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 } | 304 } |
298 | 305 |
299 TEST_F(ParallelAuthenticatorTest, ResolveOwnerNeededMount) { | 306 TEST_F(ParallelAuthenticatorTest, ResolveOwnerNeededMount) { |
300 // Set up state as though a cryptohome mount attempt has occurred | 307 // Set up state as though a cryptohome mount attempt has occurred |
301 // and succeeded but we are in safe mode and the current user is not owner. | 308 // and succeeded but we are in safe mode and the current user is not owner. |
302 // This test will check that the "safe-mode" policy is not set and will let | 309 // This test will check that the "safe-mode" policy is not set and will let |
303 // the mount finish successfully. | 310 // the mount finish successfully. |
304 state_->PresetCryptohomeStatus(true, cryptohome::MOUNT_ERROR_NONE); | 311 state_->PresetCryptohomeStatus(true, cryptohome::MOUNT_ERROR_NONE); |
305 SetOwnerState(false, false); | 312 SetOwnerState(false, false); |
306 // and test that the mount has succeeded. | 313 // and test that the mount has succeeded. |
307 state_.reset(new TestAttemptState(username_, | 314 state_.reset(new TestAttemptState(UserCredentials(username_, |
308 password_, | 315 password_, |
| 316 std::string()), |
309 hash_ascii_, | 317 hash_ascii_, |
310 "", | 318 "", |
311 "", | 319 "", |
312 User::USER_TYPE_REGULAR, | 320 User::USER_TYPE_REGULAR, |
313 false)); | 321 false)); |
314 state_->PresetCryptohomeStatus(true, cryptohome::MOUNT_ERROR_NONE); | 322 state_->PresetCryptohomeStatus(true, cryptohome::MOUNT_ERROR_NONE); |
315 EXPECT_EQ(ParallelAuthenticator::OFFLINE_LOGIN, | 323 EXPECT_EQ(ParallelAuthenticator::OFFLINE_LOGIN, |
316 SetAndResolveState(auth_, state_.release())); | 324 SetAndResolveState(auth_, state_.release())); |
317 } | 325 } |
318 | 326 |
(...skipping 23 matching lines...) Expand all Loading... |
342 EXPECT_TRUE( | 350 EXPECT_TRUE( |
343 CrosSettings::Get()->RemoveSettingsProvider(device_settings_provider)); | 351 CrosSettings::Get()->RemoveSettingsProvider(device_settings_provider)); |
344 CrosSettings::Get()->AddSettingsProvider(&stub_settings_provider); | 352 CrosSettings::Get()->AddSettingsProvider(&stub_settings_provider); |
345 CrosSettings::Get()->SetBoolean(kPolicyMissingMitigationMode, true); | 353 CrosSettings::Get()->SetBoolean(kPolicyMissingMitigationMode, true); |
346 | 354 |
347 EXPECT_EQ(ParallelAuthenticator::CONTINUE, | 355 EXPECT_EQ(ParallelAuthenticator::CONTINUE, |
348 SetAndResolveState(auth_, state_.release())); | 356 SetAndResolveState(auth_, state_.release())); |
349 // Let the owner verification run. | 357 // Let the owner verification run. |
350 device_settings_test_helper_.Flush(); | 358 device_settings_test_helper_.Flush(); |
351 // and test that the mount has succeeded. | 359 // and test that the mount has succeeded. |
352 state_.reset(new TestAttemptState(username_, | 360 state_.reset(new TestAttemptState(UserCredentials(username_, |
353 password_, | 361 password_, |
| 362 std::string()), |
354 hash_ascii_, | 363 hash_ascii_, |
355 "", | 364 "", |
356 "", | 365 "", |
357 User::USER_TYPE_REGULAR, | 366 User::USER_TYPE_REGULAR, |
358 false)); | 367 false)); |
359 state_->PresetCryptohomeStatus(true, cryptohome::MOUNT_ERROR_NONE); | 368 state_->PresetCryptohomeStatus(true, cryptohome::MOUNT_ERROR_NONE); |
360 EXPECT_EQ(ParallelAuthenticator::OWNER_REQUIRED, | 369 EXPECT_EQ(ParallelAuthenticator::OWNER_REQUIRED, |
361 SetAndResolveState(auth_, state_.release())); | 370 SetAndResolveState(auth_, state_.release())); |
362 | 371 |
363 EXPECT_TRUE( | 372 EXPECT_TRUE( |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
660 | 669 |
661 RunResolve(auth_.get()); | 670 RunResolve(auth_.get()); |
662 | 671 |
663 // After the request below completes, OnLoginSuccess gets called again. | 672 // After the request below completes, OnLoginSuccess gets called again. |
664 ExpectLoginSuccess(username_, password_, false); | 673 ExpectLoginSuccess(username_, password_, false); |
665 | 674 |
666 MockURLFetcherFactory<SuccessFetcher> factory; | 675 MockURLFetcherFactory<SuccessFetcher> factory; |
667 TestingProfile profile; | 676 TestingProfile profile; |
668 | 677 |
669 auth_->RetryAuth(&profile, | 678 auth_->RetryAuth(&profile, |
670 username_, | 679 UserCredentials(username_, |
671 std::string(), | 680 std::string(), |
| 681 std::string()), |
672 std::string(), | 682 std::string(), |
673 std::string()); | 683 std::string()); |
674 message_loop_.Run(); | 684 message_loop_.Run(); |
675 message_loop_.RunUntilIdle(); | 685 message_loop_.RunUntilIdle(); |
676 } | 686 } |
677 | 687 |
678 TEST_F(ParallelAuthenticatorTest, DriveOfflineLoginGetCaptchad) { | 688 TEST_F(ParallelAuthenticatorTest, DriveOfflineLoginGetCaptchad) { |
679 ExpectLoginSuccess(username_, password_, true); | 689 ExpectLoginSuccess(username_, password_, true); |
680 FailOnLoginFailure(); | 690 FailOnLoginFailure(); |
681 EXPECT_CALL(*mock_cryptohome_library_, GetSystemSalt()) | 691 EXPECT_CALL(*mock_cryptohome_library_, GetSystemSalt()) |
(...skipping 21 matching lines...) Expand all Loading... |
703 GoogleServiceAuthError::FromClientLoginCaptchaChallenge( | 713 GoogleServiceAuthError::FromClientLoginCaptchaChallenge( |
704 CaptchaFetcher::GetCaptchaToken(), | 714 CaptchaFetcher::GetCaptchaToken(), |
705 GURL(CaptchaFetcher::GetCaptchaUrl()), | 715 GURL(CaptchaFetcher::GetCaptchaUrl()), |
706 GURL(CaptchaFetcher::GetUnlockUrl()))); | 716 GURL(CaptchaFetcher::GetUnlockUrl()))); |
707 ExpectLoginFailure(failure); | 717 ExpectLoginFailure(failure); |
708 | 718 |
709 MockURLFetcherFactory<CaptchaFetcher> factory; | 719 MockURLFetcherFactory<CaptchaFetcher> factory; |
710 TestingProfile profile; | 720 TestingProfile profile; |
711 | 721 |
712 auth_->RetryAuth(&profile, | 722 auth_->RetryAuth(&profile, |
713 username_, | 723 UserCredentials(username_, |
714 std::string(), | 724 std::string(), |
| 725 std::string()), |
715 std::string(), | 726 std::string(), |
716 std::string()); | 727 std::string()); |
717 message_loop_.Run(); | 728 message_loop_.Run(); |
718 message_loop_.RunUntilIdle(); | 729 message_loop_.RunUntilIdle(); |
719 } | 730 } |
720 | 731 |
721 TEST_F(ParallelAuthenticatorTest, DriveOnlineLogin) { | 732 TEST_F(ParallelAuthenticatorTest, DriveOnlineLogin) { |
722 ExpectLoginSuccess(username_, password_, false); | 733 ExpectLoginSuccess(username_, password_, false); |
723 FailOnLoginFailure(); | 734 FailOnLoginFailure(); |
724 | 735 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 // Set up mock cryptohome library to respond successfully to a cryptohome | 768 // Set up mock cryptohome library to respond successfully to a cryptohome |
758 // key-check attempt. | 769 // key-check attempt. |
759 mock_caller_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); | 770 mock_caller_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); |
760 EXPECT_CALL(*mock_caller_, AsyncCheckKey(username_, _, _)) | 771 EXPECT_CALL(*mock_caller_, AsyncCheckKey(username_, _, _)) |
761 .Times(1) | 772 .Times(1) |
762 .RetiresOnSaturation(); | 773 .RetiresOnSaturation(); |
763 EXPECT_CALL(*mock_cryptohome_library_, GetSystemSalt()) | 774 EXPECT_CALL(*mock_cryptohome_library_, GetSystemSalt()) |
764 .WillOnce(Return(std::string())) | 775 .WillOnce(Return(std::string())) |
765 .RetiresOnSaturation(); | 776 .RetiresOnSaturation(); |
766 | 777 |
767 auth_->AuthenticateToUnlock(username_, ""); | 778 auth_->AuthenticateToUnlock(UserCredentials(username_, |
| 779 std::string(), |
| 780 std::string())); |
768 message_loop_.Run(); | 781 message_loop_.Run(); |
769 } | 782 } |
770 | 783 |
771 } // namespace chromeos | 784 } // namespace chromeos |
OLD | NEW |