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

Side by Side Diff: chrome/browser/chromeos/attestation/platform_verification_flow_unittest.cc

Issue 29943003: Remove CanChallengePlatform() and CheckPlatformState(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove 0.1 usage. Created 7 years, 2 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <string> 5 #include <string>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/prefs/pref_registry_simple.h" 9 #include "base/prefs/pref_registry_simple.h"
10 #include "base/prefs/testing_pref_service.h" 10 #include "base/prefs/testing_pref_service.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "chrome/browser/chromeos/attestation/attestation_signed_data.pb.h" 12 #include "chrome/browser/chromeos/attestation/attestation_signed_data.pb.h"
13 #include "chrome/browser/chromeos/attestation/platform_verification_flow.h" 13 #include "chrome/browser/chromeos/attestation/platform_verification_flow.h"
14 #include "chrome/browser/chromeos/login/mock_user_manager.h" 14 #include "chrome/browser/chromeos/login/mock_user_manager.h"
15 #include "chrome/browser/chromeos/settings/cros_settings.h" 15 #include "chrome/browser/chromeos/settings/cros_settings.h"
16 #include "chrome/browser/chromeos/settings/device_settings_service.h" 16 #include "chrome/browser/chromeos/settings/device_settings_service.h"
17 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" 17 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
18 #include "chrome/common/pref_names.h" 18 #include "chrome/common/pref_names.h"
19 #include "chromeos/attestation/mock_attestation_flow.h" 19 #include "chromeos/attestation/mock_attestation_flow.h"
20 #include "chromeos/cryptohome/mock_async_method_caller.h" 20 #include "chromeos/cryptohome/mock_async_method_caller.h"
21 #include "chromeos/dbus/fake_cryptohome_client.h" 21 #include "chromeos/dbus/fake_cryptohome_client.h"
22 #include "chromeos/settings/cros_settings_names.h" 22 #include "chromeos/settings/cros_settings_names.h"
23 #include "chromeos/system/mock_statistics_provider.h"
24 #include "content/public/test/test_browser_thread.h" 23 #include "content/public/test/test_browser_thread.h"
25 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
26 25
27 using testing::_; 26 using testing::_;
28 using testing::DoAll; 27 using testing::DoAll;
29 using testing::Invoke; 28 using testing::Invoke;
30 using testing::Return; 29 using testing::Return;
31 using testing::SetArgumentPointee; 30 using testing::SetArgumentPointee;
32 using testing::StrictMock; 31 using testing::StrictMock;
33 using testing::WithArgs; 32 using testing::WithArgs;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 116
118 } // namespace 117 } // namespace
119 118
120 class PlatformVerificationFlowTest : public ::testing::Test { 119 class PlatformVerificationFlowTest : public ::testing::Test {
121 public: 120 public:
122 PlatformVerificationFlowTest() 121 PlatformVerificationFlowTest()
123 : message_loop_(base::MessageLoop::TYPE_UI), 122 : message_loop_(base::MessageLoop::TYPE_UI),
124 ui_thread_(content::BrowserThread::UI, &message_loop_), 123 ui_thread_(content::BrowserThread::UI, &message_loop_),
125 certificate_success_(true), 124 certificate_success_(true),
126 sign_challenge_success_(true), 125 sign_challenge_success_(true),
127 result_(PlatformVerificationFlow::INTERNAL_ERROR), 126 result_(PlatformVerificationFlow::INTERNAL_ERROR) {}
128 check_state_result_(false) {}
129 127
130 void SetUp() { 128 void SetUp() {
131 // Configure a user for the mock user manager. 129 // Configure a user for the mock user manager.
132 mock_user_manager_.SetActiveUser(kTestEmail); 130 mock_user_manager_.SetActiveUser(kTestEmail);
133 131
134 // Configure the statistics provider to report verified mode.
135 EXPECT_CALL(mock_statistics_provider_,
136 GetMachineStatistic(system::kDevSwitchBootMode, _))
137 .WillRepeatedly(DoAll(SetArgumentPointee<1>(std::string("0")),
138 Return(true)));
139
140 // Create a verifier for tests to call. 132 // Create a verifier for tests to call.
141 verifier_.reset(new PlatformVerificationFlow(&mock_attestation_flow_, 133 verifier_.reset(new PlatformVerificationFlow(&mock_attestation_flow_,
142 &mock_async_caller_, 134 &mock_async_caller_,
143 &fake_cryptohome_client_, 135 &fake_cryptohome_client_,
144 &mock_user_manager_, 136 &mock_user_manager_,
145 &mock_statistics_provider_,
146 &fake_delegate_)); 137 &fake_delegate_));
147 138
148 // Create callbacks for tests to use with verifier_. 139 // Create callbacks for tests to use with verifier_.
149 callback_ = base::Bind(&PlatformVerificationFlowTest::FakeChallengeCallback, 140 callback_ = base::Bind(&PlatformVerificationFlowTest::FakeChallengeCallback,
150 base::Unretained(this)); 141 base::Unretained(this));
151 check_state_callback_ = base::Bind(
152 &PlatformVerificationFlowTest::FakeCheckStateCallback,
153 base::Unretained(this));
154 142
155 // Configure the test pref service. 143 // Configure the test pref service.
156 pref_service_.registry()->RegisterBooleanPref(prefs::kEnableDRM, true); 144 pref_service_.registry()->RegisterBooleanPref(prefs::kEnableDRM, true);
157 pref_service_.registry()->RegisterBooleanPref(prefs::kRAConsentFirstTime, 145 pref_service_.registry()->RegisterBooleanPref(prefs::kRAConsentFirstTime,
158 true); 146 true);
159 pref_service_.registry()->RegisterBooleanPref(prefs::kRAConsentAlways, 147 pref_service_.registry()->RegisterBooleanPref(prefs::kRAConsentAlways,
160 false); 148 false);
161 pref_service_.registry()->RegisterDictionaryPref(prefs::kRAConsentDomains); 149 pref_service_.registry()->RegisterDictionaryPref(prefs::kRAConsentDomains);
162 verifier_->set_testing_prefs(&pref_service_); 150 verifier_->set_testing_prefs(&pref_service_);
163 151
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 void FakeChallengeCallback(PlatformVerificationFlow::Result result, 211 void FakeChallengeCallback(PlatformVerificationFlow::Result result,
224 const std::string& salt, 212 const std::string& salt,
225 const std::string& signature, 213 const std::string& signature,
226 const std::string& certificate) { 214 const std::string& certificate) {
227 result_ = result; 215 result_ = result;
228 challenge_salt_ = salt; 216 challenge_salt_ = salt;
229 challenge_signature_ = signature; 217 challenge_signature_ = signature;
230 certificate_ = certificate; 218 certificate_ = certificate;
231 } 219 }
232 220
233 void FakeCheckStateCallback(bool result) {
234 check_state_result_ = result;
235 }
236
237 std::string CreateFakeResponseProto() { 221 std::string CreateFakeResponseProto() {
238 SignedData pb; 222 SignedData pb;
239 pb.set_data(kTestSignedData); 223 pb.set_data(kTestSignedData);
240 pb.set_signature(kTestSignature); 224 pb.set_signature(kTestSignature);
241 std::string serial; 225 std::string serial;
242 CHECK(pb.SerializeToString(&serial)); 226 CHECK(pb.SerializeToString(&serial));
243 return serial; 227 return serial;
244 } 228 }
245 229
246 protected: 230 protected:
247 base::MessageLoop message_loop_; 231 base::MessageLoop message_loop_;
248 content::TestBrowserThread ui_thread_; 232 content::TestBrowserThread ui_thread_;
249 StrictMock<MockAttestationFlow> mock_attestation_flow_; 233 StrictMock<MockAttestationFlow> mock_attestation_flow_;
250 cryptohome::MockAsyncMethodCaller mock_async_caller_; 234 cryptohome::MockAsyncMethodCaller mock_async_caller_;
251 CustomFakeCryptohomeClient fake_cryptohome_client_; 235 CustomFakeCryptohomeClient fake_cryptohome_client_;
252 MockUserManager mock_user_manager_; 236 MockUserManager mock_user_manager_;
253 system::MockStatisticsProvider mock_statistics_provider_;
254 FakeDelegate fake_delegate_; 237 FakeDelegate fake_delegate_;
255 TestingPrefServiceSimple pref_service_; 238 TestingPrefServiceSimple pref_service_;
256 CrosSettingsProvider* device_settings_provider_; 239 CrosSettingsProvider* device_settings_provider_;
257 StubCrosSettingsProvider stub_settings_provider_; 240 StubCrosSettingsProvider stub_settings_provider_;
258 ScopedTestDeviceSettingsService test_device_settings_service_; 241 ScopedTestDeviceSettingsService test_device_settings_service_;
259 ScopedTestCrosSettings test_cros_settings_; 242 ScopedTestCrosSettings test_cros_settings_;
260 scoped_ptr<PlatformVerificationFlow> verifier_; 243 scoped_ptr<PlatformVerificationFlow> verifier_;
261 244
262 // Controls result of FakeGetCertificate. 245 // Controls result of FakeGetCertificate.
263 bool certificate_success_; 246 bool certificate_success_;
264 247
265 // Controls result of FakeSignChallenge. 248 // Controls result of FakeSignChallenge.
266 bool sign_challenge_success_; 249 bool sign_challenge_success_;
267 250
268 // Callback functions and data. 251 // Callback functions and data.
269 PlatformVerificationFlow::ChallengeCallback callback_; 252 PlatformVerificationFlow::ChallengeCallback callback_;
270 PlatformVerificationFlow::Result result_; 253 PlatformVerificationFlow::Result result_;
271 std::string challenge_salt_; 254 std::string challenge_salt_;
272 std::string challenge_signature_; 255 std::string challenge_signature_;
273 std::string certificate_; 256 std::string certificate_;
274 base::Callback<void(bool result)> check_state_callback_;
275 bool check_state_result_;
276 }; 257 };
277 258
278 TEST_F(PlatformVerificationFlowTest, SuccessNoConsent) { 259 TEST_F(PlatformVerificationFlowTest, SuccessNoConsent) {
279 // Make sure the call will fail if consent is requested. 260 // Make sure the call will fail if consent is requested.
280 fake_delegate_.set_response(PlatformVerificationFlow::CONSENT_RESPONSE_DENY); 261 fake_delegate_.set_response(PlatformVerificationFlow::CONSENT_RESPONSE_DENY);
281 ExpectAttestationFlow(); 262 ExpectAttestationFlow();
282 verifier_->ChallengePlatformKey(NULL, kTestID, kTestChallenge, callback_); 263 verifier_->ChallengePlatformKey(NULL, kTestID, kTestChallenge, callback_);
283 base::RunLoop().RunUntilIdle(); 264 base::RunLoop().RunUntilIdle();
284 EXPECT_EQ(PlatformVerificationFlow::SUCCESS, result_); 265 EXPECT_EQ(PlatformVerificationFlow::SUCCESS, result_);
285 EXPECT_EQ(kTestSignedData, challenge_salt_); 266 EXPECT_EQ(kTestSignedData, challenge_salt_);
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 370
390 TEST_F(PlatformVerificationFlowTest, ConsentNoResponse) { 371 TEST_F(PlatformVerificationFlowTest, ConsentNoResponse) {
391 fake_delegate_.set_response(PlatformVerificationFlow::CONSENT_RESPONSE_NONE); 372 fake_delegate_.set_response(PlatformVerificationFlow::CONSENT_RESPONSE_NONE);
392 pref_service_.SetUserPref(prefs::kRAConsentAlways, 373 pref_service_.SetUserPref(prefs::kRAConsentAlways,
393 new base::FundamentalValue(true)); 374 new base::FundamentalValue(true));
394 verifier_->ChallengePlatformKey(NULL, kTestID, kTestChallenge, callback_); 375 verifier_->ChallengePlatformKey(NULL, kTestID, kTestChallenge, callback_);
395 base::RunLoop().RunUntilIdle(); 376 base::RunLoop().RunUntilIdle();
396 EXPECT_EQ(PlatformVerificationFlow::USER_REJECTED, result_); 377 EXPECT_EQ(PlatformVerificationFlow::USER_REJECTED, result_);
397 } 378 }
398 379
399 TEST_F(PlatformVerificationFlowTest, FastCheck) {
400 verifier_->CheckPlatformState(check_state_callback_);
401 base::RunLoop().RunUntilIdle();
402 EXPECT_TRUE(check_state_result_);
403 }
404
405 TEST_F(PlatformVerificationFlowTest, FastCheckNoStat) {
406 // Configure the stats provider to fail.
407 EXPECT_CALL(mock_statistics_provider_,
408 GetMachineStatistic(system::kDevSwitchBootMode, _))
409 .WillRepeatedly(Return(false));
410
411 verifier_->CheckPlatformState(check_state_callback_);
412 base::RunLoop().RunUntilIdle();
413 EXPECT_FALSE(check_state_result_);
414 }
415
416 TEST_F(PlatformVerificationFlowTest, FastCheckStatDevMode) {
417 // Configure the stats provider to fail.
418 EXPECT_CALL(mock_statistics_provider_,
419 GetMachineStatistic(system::kDevSwitchBootMode, _))
420 .WillRepeatedly(DoAll(SetArgumentPointee<1>(std::string("1")),
421 Return(true)));
422
423 verifier_->CheckPlatformState(check_state_callback_);
424 base::RunLoop().RunUntilIdle();
425 EXPECT_FALSE(check_state_result_);
426 }
427
428 TEST_F(PlatformVerificationFlowTest, FastCheckStatInvalidMode) {
429 // Configure the stats provider to fail.
430 EXPECT_CALL(mock_statistics_provider_,
431 GetMachineStatistic(system::kDevSwitchBootMode, _))
432 .WillRepeatedly(DoAll(SetArgumentPointee<1>(std::string("INVALID")),
433 Return(true)));
434
435 verifier_->CheckPlatformState(check_state_callback_);
436 base::RunLoop().RunUntilIdle();
437 EXPECT_FALSE(check_state_result_);
438 }
439
440 TEST_F(PlatformVerificationFlowTest, FastCheckNoAttestation) {
441 fake_cryptohome_client_.set_attestation_prepared(false);
442 verifier_->CheckPlatformState(check_state_callback_);
443 base::RunLoop().RunUntilIdle();
444 EXPECT_FALSE(check_state_result_);
445 }
446
447 TEST_F(PlatformVerificationFlowTest, FastCheckDBusFailure) {
448 fake_cryptohome_client_.set_call_status(DBUS_METHOD_CALL_FAILURE);
449 verifier_->CheckPlatformState(check_state_callback_);
450 base::RunLoop().RunUntilIdle();
451 EXPECT_FALSE(check_state_result_);
452 }
453
454 } // namespace attestation 380 } // namespace attestation
455 } // namespace chromeos 381 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698