device_settings_service_unittest.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
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, SetManagementSettingsModeTransition) {
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  // The initial management mode should be NOT_MANAGED.
236  EXPECT_EQ(em::PolicyData::NOT_MANAGED,
237            device_settings_service_.policy_data()->management_mode());
238
239  // NOT_MANAGED -> CONSUMER_MANAGED: Okay.
240  device_settings_service_.SetManagementSettings(
241      em::PolicyData::CONSUMER_MANAGED,
242      "fake_request_token",
243      "fake_device_id",
244      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
245                 base::Unretained(this)));
246  FlushDeviceSettings();
247
248  EXPECT_TRUE(operation_completed_);
249  EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
250            device_settings_service_.status());
251  EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED,
252            device_settings_service_.policy_data()->management_mode());
253
254  // CONSUMER_MANAGED -> ENTERPRISE_MANAGED: Invalid.
255  device_settings_service_.SetManagementSettings(
256      em::PolicyData::ENTERPRISE_MANAGED,
257      "fake_request_token",
258      "fake_device_id",
259      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
260                 base::Unretained(this)));
261  FlushDeviceSettings();
262
263  EXPECT_TRUE(operation_completed_);
264  EXPECT_EQ(DeviceSettingsService::STORE_POLICY_ERROR,
265            device_settings_service_.status());
266  EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED,
267            device_settings_service_.policy_data()->management_mode());
268
269  // CONSUMER_MANAGED -> NOT_MANAGED: Okay.
270  device_settings_service_.SetManagementSettings(
271      em::PolicyData::NOT_MANAGED,
272      "fake_request_token",
273      "fake_device_id",
274      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
275                 base::Unretained(this)));
276  FlushDeviceSettings();
277
278  EXPECT_TRUE(operation_completed_);
279  EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
280            device_settings_service_.status());
281  EXPECT_EQ(em::PolicyData::NOT_MANAGED,
282            device_settings_service_.policy_data()->management_mode());
283
284  // NOT_MANAGED -> ENTERPRISE_MANAGED: Invalid.
285  device_settings_service_.SetManagementSettings(
286      em::PolicyData::ENTERPRISE_MANAGED,
287      "fake_request_token",
288      "fake_device_id",
289      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
290                 base::Unretained(this)));
291  FlushDeviceSettings();
292
293  EXPECT_TRUE(operation_completed_);
294  EXPECT_EQ(DeviceSettingsService::STORE_POLICY_ERROR,
295            device_settings_service_.status());
296  EXPECT_EQ(em::PolicyData::NOT_MANAGED,
297            device_settings_service_.policy_data()->management_mode());
298
299  // Inject a policy data with management mode set to ENTERPRISE_MANAGED.
300  device_policy_.policy_data().set_management_mode(
301      em::PolicyData::ENTERPRISE_MANAGED);
302  device_policy_.Build();
303  device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
304  ReloadDeviceSettings();
305  EXPECT_EQ(em::PolicyData::ENTERPRISE_MANAGED,
306            device_settings_service_.policy_data()->management_mode());
307
308  // ENTERPRISE_MANAGED -> NOT_MANAGED: Invalid.
309  device_settings_service_.SetManagementSettings(
310      em::PolicyData::NOT_MANAGED,
311      "fake_request_token",
312      "fake_device_id",
313      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
314                 base::Unretained(this)));
315  FlushDeviceSettings();
316
317  EXPECT_TRUE(operation_completed_);
318  EXPECT_EQ(DeviceSettingsService::STORE_POLICY_ERROR,
319            device_settings_service_.status());
320  EXPECT_EQ(em::PolicyData::ENTERPRISE_MANAGED,
321            device_settings_service_.policy_data()->management_mode());
322
323  // ENTERPRISE_MANAGED -> CONSUMER_MANAGED: Invalid.
324  device_settings_service_.SetManagementSettings(
325      em::PolicyData::CONSUMER_MANAGED,
326      "fake_request_token",
327      "fake_device_id",
328      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
329                 base::Unretained(this)));
330  FlushDeviceSettings();
331
332  EXPECT_TRUE(operation_completed_);
333  EXPECT_EQ(DeviceSettingsService::STORE_POLICY_ERROR,
334            device_settings_service_.status());
335  EXPECT_EQ(em::PolicyData::ENTERPRISE_MANAGED,
336            device_settings_service_.policy_data()->management_mode());
337
338}
339
340TEST_F(DeviceSettingsServiceTest, SetManagementSettingsSuccess) {
341  ReloadDeviceSettings();
342  EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
343            device_settings_service_.status());
344
345  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
346  device_settings_service_.SetUsername(device_policy_.policy_data().username());
347  FlushDeviceSettings();
348
349  device_settings_service_.SetManagementSettings(
350      em::PolicyData::CONSUMER_MANAGED,
351      "fake_request_token",
352      "fake_device_id",
353      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
354                 base::Unretained(this)));
355  FlushDeviceSettings();
356
357  EXPECT_TRUE(operation_completed_);
358  EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
359            device_settings_service_.status());
360  ASSERT_TRUE(device_settings_service_.device_settings());
361
362  // Check that the loaded policy_data contains the expected values.
363  const em::PolicyData* policy_data = device_settings_service_.policy_data();
364  EXPECT_EQ(policy::dm_protocol::kChromeDevicePolicyType,
365            policy_data->policy_type());
366  EXPECT_EQ(device_settings_service_.GetUsername(),
367            policy_data->username());
368  EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED, policy_data->management_mode());
369  EXPECT_EQ("fake_request_token", policy_data->request_token());
370  EXPECT_EQ("fake_device_id", policy_data->device_id());
371}
372
373TEST_F(DeviceSettingsServiceTest, StoreFailure) {
374  owner_key_util_->Clear();
375  device_settings_test_helper_.set_policy_blob(std::string());
376  ReloadDeviceSettings();
377  EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
378            device_settings_service_.status());
379
380  device_settings_test_helper_.set_store_result(false);
381  device_settings_service_.Store(
382      device_policy_.GetCopy(),
383      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
384                 base::Unretained(this)));
385  FlushDeviceSettings();
386  EXPECT_TRUE(operation_completed_);
387  EXPECT_EQ(DeviceSettingsService::STORE_OPERATION_FAILED,
388            device_settings_service_.status());
389}
390
391TEST_F(DeviceSettingsServiceTest, StoreSuccess) {
392  owner_key_util_->Clear();
393  device_settings_test_helper_.set_policy_blob(std::string());
394  ReloadDeviceSettings();
395  EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
396            device_settings_service_.status());
397
398  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
399  device_settings_service_.Store(
400      device_policy_.GetCopy(),
401      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
402                 base::Unretained(this)));
403  FlushDeviceSettings();
404  EXPECT_TRUE(operation_completed_);
405  EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
406            device_settings_service_.status());
407  CheckPolicy();
408}
409
410TEST_F(DeviceSettingsServiceTest, StoreRotation) {
411  ReloadDeviceSettings();
412  EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
413            device_settings_service_.status());
414
415  device_policy_.payload().mutable_device_policy_refresh_rate()->
416      set_device_policy_refresh_rate(300);
417  device_policy_.SetDefaultNewSigningKey();
418  device_policy_.Build();
419  device_settings_service_.Store(device_policy_.GetCopy(), base::Closure());
420  FlushDeviceSettings();
421  owner_key_util_->SetPublicKeyFromPrivateKey(
422      *device_policy_.GetNewSigningKey());
423  device_settings_service_.OwnerKeySet(true);
424  FlushDeviceSettings();
425  EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
426            device_settings_service_.status());
427  CheckPolicy();
428
429  // Check the new key has been loaded.
430  std::vector<uint8> key;
431  ASSERT_TRUE(device_policy_.GetNewSigningKey()->ExportPublicKey(&key));
432  EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
433}
434
435TEST_F(DeviceSettingsServiceTest, OwnershipStatus) {
436  owner_key_util_->Clear();
437
438  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
439  EXPECT_FALSE(device_settings_service_.GetOwnerKey().get());
440  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
441            device_settings_service_.GetOwnershipStatus());
442
443  device_settings_service_.GetOwnershipStatusAsync(
444      base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
445                 base::Unretained(this)));
446  FlushDeviceSettings();
447  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
448  ASSERT_TRUE(device_settings_service_.GetOwnerKey().get());
449  EXPECT_FALSE(device_settings_service_.GetOwnerKey()->public_key());
450  EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
451  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE,
452            device_settings_service_.GetOwnershipStatus());
453  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE, ownership_status_);
454
455  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
456  ReloadDeviceSettings();
457  device_settings_service_.GetOwnershipStatusAsync(
458      base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
459                 base::Unretained(this)));
460  FlushDeviceSettings();
461  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
462  ASSERT_TRUE(device_settings_service_.GetOwnerKey().get());
463  ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
464  std::vector<uint8> key;
465  ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key));
466  EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
467  EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
468  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
469            device_settings_service_.GetOwnershipStatus());
470  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_);
471
472  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
473  device_settings_service_.SetUsername(device_policy_.policy_data().username());
474  device_settings_service_.GetOwnershipStatusAsync(
475      base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
476                 base::Unretained(this)));
477  FlushDeviceSettings();
478  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
479  ASSERT_TRUE(device_settings_service_.GetOwnerKey().get());
480  ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
481  ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key));
482  EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
483  EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key());
484  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
485            device_settings_service_.GetOwnershipStatus());
486  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_);
487}
488
489TEST_F(DeviceSettingsServiceTest, OnTPMTokenReadyForNonOwner) {
490  owner_key_util_->Clear();
491
492  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
493  EXPECT_FALSE(device_settings_service_.GetOwnerKey().get());
494  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
495            device_settings_service_.GetOwnershipStatus());
496
497  device_settings_service_.IsCurrentUserOwnerAsync(
498      base::Bind(&DeviceSettingsServiceTest::OnIsOwner,
499                 base::Unretained(this)));
500
501  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
502  ReloadDeviceSettings();
503
504  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
505  ASSERT_TRUE(device_settings_service_.GetOwnerKey().get());
506  ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
507  std::vector<uint8> key;
508  ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key));
509  EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
510  EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
511  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
512            device_settings_service_.GetOwnershipStatus());
513  EXPECT_FALSE(is_owner_set_);
514
515  device_settings_service_.OnTPMTokenReady();
516  FlushDeviceSettings();
517
518  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
519  ASSERT_TRUE(device_settings_service_.GetOwnerKey().get());
520  ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
521  ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key));
522  EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
523  EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
524  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
525            device_settings_service_.GetOwnershipStatus());
526  EXPECT_TRUE(is_owner_set_);
527  EXPECT_FALSE(is_owner_);
528}
529
530TEST_F(DeviceSettingsServiceTest, OnTPMTokenReadyForOwner) {
531  owner_key_util_->Clear();
532
533  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
534  EXPECT_FALSE(device_settings_service_.GetOwnerKey().get());
535  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
536            device_settings_service_.GetOwnershipStatus());
537
538  device_settings_service_.IsCurrentUserOwnerAsync(
539      base::Bind(&DeviceSettingsServiceTest::OnIsOwner,
540                 base::Unretained(this)));
541
542  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
543  ReloadDeviceSettings();
544
545  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
546  ASSERT_TRUE(device_settings_service_.GetOwnerKey().get());
547  ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
548  std::vector<uint8> key;
549  ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key));
550  EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
551  EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
552  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
553            device_settings_service_.GetOwnershipStatus());
554  EXPECT_FALSE(is_owner_set_);
555
556  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
557  device_settings_service_.SetUsername(device_policy_.policy_data().username());
558  device_settings_service_.OnTPMTokenReady();
559  FlushDeviceSettings();
560
561  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
562  ASSERT_TRUE(device_settings_service_.GetOwnerKey().get());
563  ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
564  ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key));
565  EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
566  EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key());
567  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
568            device_settings_service_.GetOwnershipStatus());
569  EXPECT_TRUE(is_owner_set_);
570  EXPECT_TRUE(is_owner_);
571}
572
573TEST_F(DeviceSettingsServiceTest, IsCurrentUserOwnerAsyncWithLoadedCerts) {
574  owner_key_util_->Clear();
575
576  EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
577  EXPECT_FALSE(device_settings_service_.GetOwnerKey().get());
578  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
579            device_settings_service_.GetOwnershipStatus());
580
581  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
582  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
583  device_settings_service_.SetUsername(device_policy_.policy_data().username());
584  ReloadDeviceSettings();
585
586  device_settings_service_.OnTPMTokenReady();
587  FlushDeviceSettings();
588
589  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
590  ASSERT_TRUE(device_settings_service_.GetOwnerKey().get());
591  ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
592  std::vector<uint8> key;
593  ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key));
594  EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
595  EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key());
596  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
597            device_settings_service_.GetOwnershipStatus());
598  EXPECT_FALSE(is_owner_set_);
599
600  device_settings_service_.IsCurrentUserOwnerAsync(
601      base::Bind(&DeviceSettingsServiceTest::OnIsOwner,
602                 base::Unretained(this)));
603  // The callback should be called immediately.
604  base::MessageLoop::current()->RunUntilIdle();
605
606  EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
607  ASSERT_TRUE(device_settings_service_.GetOwnerKey().get());
608  ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
609  ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key));
610  EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
611  EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key());
612  EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
613            device_settings_service_.GetOwnershipStatus());
614  EXPECT_TRUE(is_owner_set_);
615  EXPECT_TRUE(is_owner_);
616}
617
618TEST_F(DeviceSettingsServiceTest, Observer) {
619  owner_key_util_->Clear();
620  MockDeviceSettingsObserver observer_;
621  device_settings_service_.AddObserver(&observer_);
622
623  EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
624  EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
625  ReloadDeviceSettings();
626  Mock::VerifyAndClearExpectations(&observer_);
627
628  EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
629  EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
630  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
631  ReloadDeviceSettings();
632  Mock::VerifyAndClearExpectations(&observer_);
633
634  EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
635  EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
636  device_settings_service_.Store(device_policy_.GetCopy(), base::Closure());
637  FlushDeviceSettings();
638  Mock::VerifyAndClearExpectations(&observer_);
639
640  EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
641  EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
642  device_settings_service_.PropertyChangeComplete(true);
643  FlushDeviceSettings();
644  Mock::VerifyAndClearExpectations(&observer_);
645
646  device_settings_service_.RemoveObserver(&observer_);
647}
648
649}  // namespace chromeos
650