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