device_settings_service_unittest.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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 3// found in the LICENSE file. 4 5#include "chrome/browser/chromeos/settings/device_settings_service.h" 6 7#include "base/basictypes.h" 8#include "base/bind.h" 9#include "base/bind_helpers.h" 10#include "base/compiler_specific.h" 11#include "base/time/time.h" 12#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" 13#include "chrome/browser/chromeos/settings/device_settings_test_helper.h" 14#include "components/policy/core/common/cloud/cloud_policy_constants.h" 15#include "policy/proto/device_management_backend.pb.h" 16#include "testing/gmock/include/gmock/gmock.h" 17#include "testing/gtest/include/gtest/gtest.h" 18 19namespace em = enterprise_management; 20 21using ::testing::Mock; 22 23namespace chromeos { 24 25namespace { 26 27class MockDeviceSettingsObserver : public DeviceSettingsService::Observer { 28 public: 29 virtual ~MockDeviceSettingsObserver() {} 30 31 MOCK_METHOD0(OwnershipStatusChanged, void()); 32 MOCK_METHOD0(DeviceSettingsUpdated, void()); 33}; 34 35} // namespace 36 37class DeviceSettingsServiceTest : public DeviceSettingsTestBase { 38 public: 39 void SetOperationCompleted() { 40 operation_completed_ = true; 41 } 42 43 void SetOwnershipStatus( 44 DeviceSettingsService::OwnershipStatus ownership_status) { 45 ownership_status_ = ownership_status; 46 } 47 48 void OnIsOwner(bool is_owner) { 49 is_owner_ = is_owner; 50 is_owner_set_ = true; 51 } 52 53 protected: 54 DeviceSettingsServiceTest() 55 : operation_completed_(false), 56 is_owner_(true), 57 is_owner_set_(false), 58 ownership_status_(DeviceSettingsService::OWNERSHIP_UNKNOWN) {} 59 60 virtual void SetUp() OVERRIDE { 61 device_policy_.payload().mutable_device_policy_refresh_rate()-> 62 set_device_policy_refresh_rate(120); 63 DeviceSettingsTestBase::SetUp(); 64 } 65 66 void CheckPolicy() { 67 ASSERT_TRUE(device_settings_service_.policy_data()); 68 EXPECT_EQ(device_policy_.policy_data().SerializeAsString(), 69 device_settings_service_.policy_data()->SerializeAsString()); 70 ASSERT_TRUE(device_settings_service_.device_settings()); 71 EXPECT_EQ(device_policy_.payload().SerializeAsString(), 72 device_settings_service_.device_settings()->SerializeAsString()); 73 } 74 75 bool operation_completed_; 76 bool is_owner_; 77 bool is_owner_set_; 78 DeviceSettingsService::OwnershipStatus ownership_status_; 79 80 private: 81 DISALLOW_COPY_AND_ASSIGN(DeviceSettingsServiceTest); 82}; 83 84TEST_F(DeviceSettingsServiceTest, LoadNoKey) { 85 owner_key_util_->Clear(); 86 ReloadDeviceSettings(); 87 88 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE, 89 device_settings_service_.status()); 90 EXPECT_FALSE(device_settings_service_.policy_data()); 91 EXPECT_FALSE(device_settings_service_.device_settings()); 92} 93 94TEST_F(DeviceSettingsServiceTest, LoadNoPolicy) { 95 device_settings_test_helper_.set_policy_blob(std::string()); 96 ReloadDeviceSettings(); 97 98 EXPECT_EQ(DeviceSettingsService::STORE_NO_POLICY, 99 device_settings_service_.status()); 100 EXPECT_FALSE(device_settings_service_.policy_data()); 101 EXPECT_FALSE(device_settings_service_.device_settings()); 102} 103 104TEST_F(DeviceSettingsServiceTest, LoadValidationError) { 105 device_policy_.policy().set_policy_data_signature("bad"); 106 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); 107 owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); 108 ReloadDeviceSettings(); 109 110 EXPECT_EQ(DeviceSettingsService::STORE_VALIDATION_ERROR, 111 device_settings_service_.status()); 112 EXPECT_FALSE(device_settings_service_.policy_data()); 113 EXPECT_FALSE(device_settings_service_.device_settings()); 114} 115 116TEST_F(DeviceSettingsServiceTest, LoadValidationErrorFutureTimestamp) { 117 base::Time timestamp(base::Time::NowFromSystemTime() + 118 base::TimeDelta::FromDays(5000)); 119 device_policy_.policy_data().set_timestamp( 120 (timestamp - base::Time::UnixEpoch()).InMilliseconds()); 121 device_policy_.Build(); 122 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); 123 owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); 124 ReloadDeviceSettings(); 125 126 // Loading a cached device policy with a timestamp in the future should work, 127 // since this may be due to a broken clock on the client device. 128 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 129 device_settings_service_.status()); 130 CheckPolicy(); 131} 132 133TEST_F(DeviceSettingsServiceTest, LoadSuccess) { 134 ReloadDeviceSettings(); 135 136 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 137 device_settings_service_.status()); 138 CheckPolicy(); 139} 140 141TEST_F(DeviceSettingsServiceTest, SignAndStoreNoKey) { 142 ReloadDeviceSettings(); 143 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 144 device_settings_service_.status()); 145 146 scoped_ptr<em::ChromeDeviceSettingsProto> new_device_settings( 147 new em::ChromeDeviceSettingsProto(device_policy_.payload())); 148 new_device_settings->mutable_device_policy_refresh_rate()-> 149 set_device_policy_refresh_rate(300); 150 device_settings_service_.SignAndStore( 151 new_device_settings.Pass(), 152 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted, 153 base::Unretained(this))); 154 FlushDeviceSettings(); 155 EXPECT_TRUE(operation_completed_); 156 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE, 157 device_settings_service_.status()); 158 CheckPolicy(); 159} 160 161TEST_F(DeviceSettingsServiceTest, SignAndStoreFailure) { 162 ReloadDeviceSettings(); 163 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 164 device_settings_service_.status()); 165 166 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); 167 device_settings_service_.SetUsername(device_policy_.policy_data().username()); 168 FlushDeviceSettings(); 169 170 scoped_ptr<em::ChromeDeviceSettingsProto> new_device_settings( 171 new em::ChromeDeviceSettingsProto(device_policy_.payload())); 172 new_device_settings->mutable_device_policy_refresh_rate()-> 173 set_device_policy_refresh_rate(300); 174 device_settings_test_helper_.set_store_result(false); 175 device_settings_service_.SignAndStore( 176 new_device_settings.Pass(), 177 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted, 178 base::Unretained(this))); 179 FlushDeviceSettings(); 180 EXPECT_TRUE(operation_completed_); 181 EXPECT_EQ(DeviceSettingsService::STORE_OPERATION_FAILED, 182 device_settings_service_.status()); 183 CheckPolicy(); 184} 185 186TEST_F(DeviceSettingsServiceTest, SignAndStoreSuccess) { 187 const base::Time before(base::Time::Now()); 188 ReloadDeviceSettings(); 189 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 190 device_settings_service_.status()); 191 192 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); 193 device_settings_service_.SetUsername(device_policy_.policy_data().username()); 194 FlushDeviceSettings(); 195 196 device_policy_.payload().mutable_device_policy_refresh_rate()-> 197 set_device_policy_refresh_rate(300); 198 device_policy_.Build(); 199 device_settings_service_.SignAndStore( 200 scoped_ptr<em::ChromeDeviceSettingsProto>( 201 new em::ChromeDeviceSettingsProto(device_policy_.payload())), 202 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted, 203 base::Unretained(this))); 204 FlushDeviceSettings(); 205 const base::Time after(base::Time::Now()); 206 207 EXPECT_TRUE(operation_completed_); 208 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 209 device_settings_service_.status()); 210 ASSERT_TRUE(device_settings_service_.device_settings()); 211 EXPECT_EQ(device_policy_.payload().SerializeAsString(), 212 device_settings_service_.device_settings()->SerializeAsString()); 213 214 // Check that the loaded policy_data contains the expected values. 215 const em::PolicyData* policy_data = device_settings_service_.policy_data(); 216 EXPECT_EQ(policy::dm_protocol::kChromeDevicePolicyType, 217 policy_data->policy_type()); 218 EXPECT_LE((before - base::Time::UnixEpoch()).InMilliseconds(), 219 policy_data->timestamp()); 220 EXPECT_GE((after - base::Time::UnixEpoch()).InMilliseconds(), 221 policy_data->timestamp()); 222 EXPECT_EQ(device_settings_service_.GetUsername(), 223 policy_data->username()); 224} 225 226TEST_F(DeviceSettingsServiceTest, SetManagementSettingsSuccess) { 227 ReloadDeviceSettings(); 228 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 229 device_settings_service_.status()); 230 231 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); 232 device_settings_service_.SetUsername(device_policy_.policy_data().username()); 233 FlushDeviceSettings(); 234 235 device_settings_service_.SetManagementSettings( 236 em::PolicyData::CONSUMER_MANAGED, 237 "fake_request_token", 238 "fake_device_id", 239 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted, 240 base::Unretained(this))); 241 FlushDeviceSettings(); 242 243 EXPECT_TRUE(operation_completed_); 244 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 245 device_settings_service_.status()); 246 ASSERT_TRUE(device_settings_service_.device_settings()); 247 248 // Check that the loaded policy_data contains the expected values. 249 const em::PolicyData* policy_data = device_settings_service_.policy_data(); 250 EXPECT_EQ(policy::dm_protocol::kChromeDevicePolicyType, 251 policy_data->policy_type()); 252 EXPECT_EQ(device_settings_service_.GetUsername(), 253 policy_data->username()); 254 EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED, policy_data->management_mode()); 255 EXPECT_EQ("fake_request_token", policy_data->request_token()); 256 EXPECT_EQ("fake_device_id", policy_data->device_id()); 257} 258 259TEST_F(DeviceSettingsServiceTest, StoreFailure) { 260 owner_key_util_->Clear(); 261 device_settings_test_helper_.set_policy_blob(std::string()); 262 ReloadDeviceSettings(); 263 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE, 264 device_settings_service_.status()); 265 266 device_settings_test_helper_.set_store_result(false); 267 device_settings_service_.Store( 268 device_policy_.GetCopy(), 269 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted, 270 base::Unretained(this))); 271 FlushDeviceSettings(); 272 EXPECT_TRUE(operation_completed_); 273 EXPECT_EQ(DeviceSettingsService::STORE_OPERATION_FAILED, 274 device_settings_service_.status()); 275} 276 277TEST_F(DeviceSettingsServiceTest, StoreSuccess) { 278 owner_key_util_->Clear(); 279 device_settings_test_helper_.set_policy_blob(std::string()); 280 ReloadDeviceSettings(); 281 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE, 282 device_settings_service_.status()); 283 284 owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); 285 device_settings_service_.Store( 286 device_policy_.GetCopy(), 287 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted, 288 base::Unretained(this))); 289 FlushDeviceSettings(); 290 EXPECT_TRUE(operation_completed_); 291 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 292 device_settings_service_.status()); 293 CheckPolicy(); 294} 295 296TEST_F(DeviceSettingsServiceTest, StoreRotation) { 297 ReloadDeviceSettings(); 298 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 299 device_settings_service_.status()); 300 301 device_policy_.payload().mutable_device_policy_refresh_rate()-> 302 set_device_policy_refresh_rate(300); 303 device_policy_.SetDefaultNewSigningKey(); 304 device_policy_.Build(); 305 device_settings_service_.Store(device_policy_.GetCopy(), base::Closure()); 306 FlushDeviceSettings(); 307 owner_key_util_->SetPublicKeyFromPrivateKey( 308 *device_policy_.GetNewSigningKey()); 309 device_settings_service_.OwnerKeySet(true); 310 FlushDeviceSettings(); 311 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, 312 device_settings_service_.status()); 313 CheckPolicy(); 314 315 // Check the new key has been loaded. 316 std::vector<uint8> key; 317 ASSERT_TRUE(device_policy_.GetNewSigningKey()->ExportPublicKey(&key)); 318 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); 319} 320 321TEST_F(DeviceSettingsServiceTest, OwnershipStatus) { 322 owner_key_util_->Clear(); 323 324 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); 325 EXPECT_FALSE(device_settings_service_.GetOwnerKey().get()); 326 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN, 327 device_settings_service_.GetOwnershipStatus()); 328 329 device_settings_service_.GetOwnershipStatusAsync( 330 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus, 331 base::Unretained(this))); 332 FlushDeviceSettings(); 333 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); 334 ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); 335 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->public_key()); 336 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); 337 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE, 338 device_settings_service_.GetOwnershipStatus()); 339 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE, ownership_status_); 340 341 owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); 342 ReloadDeviceSettings(); 343 device_settings_service_.GetOwnershipStatusAsync( 344 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus, 345 base::Unretained(this))); 346 FlushDeviceSettings(); 347 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); 348 ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); 349 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); 350 std::vector<uint8> key; 351 ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); 352 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); 353 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); 354 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, 355 device_settings_service_.GetOwnershipStatus()); 356 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_); 357 358 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); 359 device_settings_service_.SetUsername(device_policy_.policy_data().username()); 360 device_settings_service_.GetOwnershipStatusAsync( 361 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus, 362 base::Unretained(this))); 363 FlushDeviceSettings(); 364 EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey()); 365 ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); 366 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); 367 ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); 368 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); 369 EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key()); 370 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, 371 device_settings_service_.GetOwnershipStatus()); 372 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_); 373} 374 375TEST_F(DeviceSettingsServiceTest, OnTPMTokenReadyForNonOwner) { 376 owner_key_util_->Clear(); 377 378 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); 379 EXPECT_FALSE(device_settings_service_.GetOwnerKey().get()); 380 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN, 381 device_settings_service_.GetOwnershipStatus()); 382 383 device_settings_service_.IsCurrentUserOwnerAsync( 384 base::Bind(&DeviceSettingsServiceTest::OnIsOwner, 385 base::Unretained(this))); 386 387 owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); 388 ReloadDeviceSettings(); 389 390 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); 391 ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); 392 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); 393 std::vector<uint8> key; 394 ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); 395 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); 396 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); 397 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, 398 device_settings_service_.GetOwnershipStatus()); 399 EXPECT_FALSE(is_owner_set_); 400 401 device_settings_service_.OnTPMTokenReady(); 402 FlushDeviceSettings(); 403 404 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); 405 ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); 406 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); 407 ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); 408 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); 409 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); 410 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, 411 device_settings_service_.GetOwnershipStatus()); 412 EXPECT_TRUE(is_owner_set_); 413 EXPECT_FALSE(is_owner_); 414} 415 416TEST_F(DeviceSettingsServiceTest, OnTPMTokenReadyForOwner) { 417 owner_key_util_->Clear(); 418 419 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); 420 EXPECT_FALSE(device_settings_service_.GetOwnerKey().get()); 421 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN, 422 device_settings_service_.GetOwnershipStatus()); 423 424 device_settings_service_.IsCurrentUserOwnerAsync( 425 base::Bind(&DeviceSettingsServiceTest::OnIsOwner, 426 base::Unretained(this))); 427 428 owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); 429 ReloadDeviceSettings(); 430 431 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); 432 ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); 433 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); 434 std::vector<uint8> key; 435 ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); 436 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); 437 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); 438 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, 439 device_settings_service_.GetOwnershipStatus()); 440 EXPECT_FALSE(is_owner_set_); 441 442 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); 443 device_settings_service_.SetUsername(device_policy_.policy_data().username()); 444 device_settings_service_.OnTPMTokenReady(); 445 FlushDeviceSettings(); 446 447 EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey()); 448 ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); 449 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); 450 ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); 451 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); 452 EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key()); 453 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, 454 device_settings_service_.GetOwnershipStatus()); 455 EXPECT_TRUE(is_owner_set_); 456 EXPECT_TRUE(is_owner_); 457} 458 459TEST_F(DeviceSettingsServiceTest, IsCurrentUserOwnerAsyncWithLoadedCerts) { 460 owner_key_util_->Clear(); 461 462 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); 463 EXPECT_FALSE(device_settings_service_.GetOwnerKey().get()); 464 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN, 465 device_settings_service_.GetOwnershipStatus()); 466 467 owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); 468 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); 469 device_settings_service_.SetUsername(device_policy_.policy_data().username()); 470 ReloadDeviceSettings(); 471 472 device_settings_service_.OnTPMTokenReady(); 473 FlushDeviceSettings(); 474 475 EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey()); 476 ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); 477 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); 478 std::vector<uint8> key; 479 ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); 480 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); 481 EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key()); 482 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, 483 device_settings_service_.GetOwnershipStatus()); 484 EXPECT_FALSE(is_owner_set_); 485 486 device_settings_service_.IsCurrentUserOwnerAsync( 487 base::Bind(&DeviceSettingsServiceTest::OnIsOwner, 488 base::Unretained(this))); 489 // The callback should be called immediately. 490 base::MessageLoop::current()->RunUntilIdle(); 491 492 EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey()); 493 ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); 494 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); 495 ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); 496 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); 497 EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key()); 498 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, 499 device_settings_service_.GetOwnershipStatus()); 500 EXPECT_TRUE(is_owner_set_); 501 EXPECT_TRUE(is_owner_); 502} 503 504TEST_F(DeviceSettingsServiceTest, Observer) { 505 owner_key_util_->Clear(); 506 MockDeviceSettingsObserver observer_; 507 device_settings_service_.AddObserver(&observer_); 508 509 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1); 510 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1); 511 ReloadDeviceSettings(); 512 Mock::VerifyAndClearExpectations(&observer_); 513 514 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1); 515 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1); 516 owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); 517 ReloadDeviceSettings(); 518 Mock::VerifyAndClearExpectations(&observer_); 519 520 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0); 521 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1); 522 device_settings_service_.Store(device_policy_.GetCopy(), base::Closure()); 523 FlushDeviceSettings(); 524 Mock::VerifyAndClearExpectations(&observer_); 525 526 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0); 527 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1); 528 device_settings_service_.PropertyChangeComplete(true); 529 FlushDeviceSettings(); 530 Mock::VerifyAndClearExpectations(&observer_); 531 532 device_settings_service_.RemoveObserver(&observer_); 533} 534 535} // namespace chromeos 536