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

Side by Side Diff: chrome/browser/chromeos/settings/device_settings_service_unittest.cc

Issue 10828032: Add DeviceSettingsService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase, move to chrome/browser/chromeos/settings. Created 8 years, 4 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
(Empty)
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/memory/ref_counted.h"
12 #include "base/message_loop.h"
13 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
14 #include "chrome/browser/chromeos/settings/mock_owner_key_util.h"
15 #include "chrome/browser/policy/policy_builder.h"
16 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h"
17 #include "chrome/browser/policy/proto/device_management_backend.pb.h"
18 #include "content/public/test/test_browser_thread.h"
19 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21
22 namespace em = enterprise_management;
23
24 using ::testing::Mock;
25
26 namespace chromeos {
27
28 namespace {
29
30 class MockDeviceSettingsObserver : public DeviceSettingsService::Observer {
31 public:
32 virtual ~MockDeviceSettingsObserver() {}
33
34 MOCK_METHOD0(OwnershipStatusChanged, void());
35 MOCK_METHOD0(DeviceSettingsUpdated, void());
36 };
37
38 } // namespace
39
40 class DeviceSettingsServiceTest : public testing::Test {
41 public:
42 void SetOperationCompleted() {
43 operation_completed_ = true;
44 }
45
46 void SetOwnershipStatus(
47 DeviceSettingsService::OwnershipStatus ownership_status,
48 bool is_owner) {
49 is_owner_ = is_owner;
50 ownership_status_ = ownership_status;
51 }
52
53 protected:
54 DeviceSettingsServiceTest()
55 : owner_key_util_(new chromeos::MockOwnerKeyUtil()),
56 message_loop_(MessageLoop::TYPE_UI),
57 ui_thread_(content::BrowserThread::UI, &message_loop_),
58 file_thread_(content::BrowserThread::FILE, &message_loop_),
59 operation_completed_(false),
60 is_owner_(true),
61 ownership_status_(DeviceSettingsService::OWNERSHIP_UNKNOWN) {}
62
63 virtual void SetUp() OVERRIDE {
64 policy_.payload().mutable_device_policy_refresh_rate()->
65 set_device_policy_refresh_rate(120);
66 policy_.Build();
67 device_settings_test_helper_.set_policy_blob(policy_.GetBlob());
68
69 device_settings_service_.Initialize(&device_settings_test_helper_,
70 owner_key_util_);
71 }
72
73 virtual void TearDown() OVERRIDE {
74 device_settings_test_helper_.Flush();
75 device_settings_service_.Shutdown();
76 }
77
78 void CheckPolicy() {
79 ASSERT_TRUE(device_settings_service_.policy_data());
80 EXPECT_EQ(policy_.policy_data().SerializeAsString(),
81 device_settings_service_.policy_data()->SerializeAsString());
82 ASSERT_TRUE(device_settings_service_.device_settings());
83 EXPECT_EQ(policy_.payload().SerializeAsString(),
84 device_settings_service_.device_settings()->SerializeAsString());
85 }
86
87 policy::DevicePolicyBuilder policy_;
88 scoped_refptr<MockOwnerKeyUtil> owner_key_util_;
89
90 DeviceSettingsTestHelper device_settings_test_helper_;
91 DeviceSettingsService device_settings_service_;
92
93 MessageLoop message_loop_;
94 content::TestBrowserThread ui_thread_;
95 content::TestBrowserThread file_thread_;
96
97 bool operation_completed_;
98 bool is_owner_;
99 DeviceSettingsService::OwnershipStatus ownership_status_;
100
101 private:
102 DISALLOW_COPY_AND_ASSIGN(DeviceSettingsServiceTest);
103 };
104
105 TEST_F(DeviceSettingsServiceTest, LoadNoKey) {
106 device_settings_service_.Load();
107 device_settings_test_helper_.Flush();
108
109 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
110 device_settings_service_.status());
111 EXPECT_FALSE(device_settings_service_.policy_data());
112 EXPECT_FALSE(device_settings_service_.device_settings());
113 }
114
115 TEST_F(DeviceSettingsServiceTest, LoadNoPolicy) {
116 device_settings_test_helper_.set_policy_blob(std::string());
117 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
118 device_settings_service_.Load();
119 device_settings_test_helper_.Flush();
120
121 EXPECT_EQ(DeviceSettingsService::STORE_NO_POLICY,
122 device_settings_service_.status());
123 EXPECT_FALSE(device_settings_service_.policy_data());
124 EXPECT_FALSE(device_settings_service_.device_settings());
125 }
126
127 TEST_F(DeviceSettingsServiceTest, LoadValidationError) {
128 policy_.policy().set_policy_data_signature("bad");
129 device_settings_test_helper_.set_policy_blob(policy_.GetBlob());
130 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
131 device_settings_service_.Load();
132 device_settings_test_helper_.Flush();
133
134 EXPECT_EQ(DeviceSettingsService::STORE_VALIDATION_ERROR,
135 device_settings_service_.status());
136 EXPECT_FALSE(device_settings_service_.policy_data());
137 EXPECT_FALSE(device_settings_service_.device_settings());
138 }
139
140 TEST_F(DeviceSettingsServiceTest, LoadSuccess) {
141 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
142 device_settings_service_.Load();
143 device_settings_test_helper_.Flush();
144
145 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
146 device_settings_service_.status());
147 CheckPolicy();
148 }
149
150 TEST_F(DeviceSettingsServiceTest, SignAndStoreNoKey) {
151 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
152 device_settings_service_.Load();
153 device_settings_test_helper_.Flush();
154 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
155 device_settings_service_.status());
156
157 scoped_ptr<em::ChromeDeviceSettingsProto> new_device_settings(
158 new em::ChromeDeviceSettingsProto(policy_.payload()));
159 new_device_settings->mutable_device_policy_refresh_rate()->
160 set_device_policy_refresh_rate(300);
161 device_settings_service_.SignAndStore(
162 new_device_settings.Pass(),
163 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
164 base::Unretained(this)));
165 device_settings_test_helper_.Flush();
166 EXPECT_TRUE(operation_completed_);
167 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
168 device_settings_service_.status());
169 CheckPolicy();
170 }
171
172 TEST_F(DeviceSettingsServiceTest, SignAndStoreFailure) {
173 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
174 device_settings_service_.Load();
175 device_settings_test_helper_.Flush();
176 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
177 device_settings_service_.status());
178
179 owner_key_util_->SetPrivateKey(policy_.signing_key());
180 device_settings_service_.SetUsername(policy_.policy_data().username());
181 device_settings_test_helper_.Flush();
182
183 scoped_ptr<em::ChromeDeviceSettingsProto> new_device_settings(
184 new em::ChromeDeviceSettingsProto(policy_.payload()));
185 new_device_settings->mutable_device_policy_refresh_rate()->
186 set_device_policy_refresh_rate(300);
187 device_settings_test_helper_.set_store_result(false);
188 device_settings_service_.SignAndStore(
189 new_device_settings.Pass(),
190 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
191 base::Unretained(this)));
192 device_settings_test_helper_.Flush();
193 EXPECT_TRUE(operation_completed_);
194 EXPECT_EQ(DeviceSettingsService::STORE_OPERATION_FAILED,
195 device_settings_service_.status());
196 CheckPolicy();
197 }
198
199 TEST_F(DeviceSettingsServiceTest, SignAndStoreSuccess) {
200 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
201 device_settings_service_.Load();
202 device_settings_test_helper_.Flush();
203 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
204 device_settings_service_.status());
205
206 owner_key_util_->SetPrivateKey(policy_.signing_key());
207 device_settings_service_.SetUsername(policy_.policy_data().username());
208 device_settings_test_helper_.Flush();
209
210 policy_.payload().mutable_device_policy_refresh_rate()->
211 set_device_policy_refresh_rate(300);
212 policy_.Build();
213 scoped_ptr<em::ChromeDeviceSettingsProto> new_device_settings(
214 new em::ChromeDeviceSettingsProto(policy_.payload()));
215 device_settings_service_.SignAndStore(
216 new_device_settings.Pass(),
217 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
218 base::Unretained(this)));
219 device_settings_test_helper_.Flush();
220 EXPECT_TRUE(operation_completed_);
221 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
222 device_settings_service_.status());
223 ASSERT_TRUE(device_settings_service_.device_settings());
224 EXPECT_EQ(policy_.payload().SerializeAsString(),
225 device_settings_service_.device_settings()->SerializeAsString());
226 }
227
228 TEST_F(DeviceSettingsServiceTest, StoreFailure) {
229 device_settings_test_helper_.set_policy_blob(std::string());
230 device_settings_service_.Load();
231 device_settings_test_helper_.Flush();
232 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
233 device_settings_service_.status());
234
235 device_settings_test_helper_.set_store_result(false);
236 device_settings_service_.Store(
237 policy_.GetBlob(),
238 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
239 base::Unretained(this)));
240 device_settings_test_helper_.Flush();
241 EXPECT_TRUE(operation_completed_);
242 EXPECT_EQ(DeviceSettingsService::STORE_OPERATION_FAILED,
243 device_settings_service_.status());
244 }
245
246 TEST_F(DeviceSettingsServiceTest, StoreSuccess) {
247 device_settings_test_helper_.set_policy_blob(std::string());
248 device_settings_service_.Load();
249 device_settings_test_helper_.Flush();
250 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
251 device_settings_service_.status());
252
253 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
254 device_settings_service_.Store(
255 policy_.GetBlob(),
256 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
257 base::Unretained(this)));
258 device_settings_test_helper_.Flush();
259 EXPECT_TRUE(operation_completed_);
260 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
261 device_settings_service_.status());
262 CheckPolicy();
263 }
264
265 TEST_F(DeviceSettingsServiceTest, StoreRotation) {
266 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
267 device_settings_service_.Load();
268 device_settings_test_helper_.Flush();
269 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
270 device_settings_service_.status());
271
272 policy_.payload().mutable_device_policy_refresh_rate()->
273 set_device_policy_refresh_rate(300);
274 policy_.set_new_signing_key(policy::PolicyBuilder::CreateTestNewSigningKey());
275 policy_.Build();
276 device_settings_service_.Store(policy_.GetBlob(), base::Closure());
277 device_settings_test_helper_.FlushStore();
278 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.new_signing_key());
279 device_settings_service_.OwnerKeySet(true);
280 device_settings_test_helper_.Flush();
281 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
282 device_settings_service_.status());
283 CheckPolicy();
284
285 // Check the new key has been loaded.
286 std::vector<uint8> key;
287 ASSERT_TRUE(policy_.new_signing_key()->ExportPublicKey(&key));
288 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
289 }
290
291 TEST_F(DeviceSettingsServiceTest, OwnershipStatus) {
292 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
293 EXPECT_FALSE(device_settings_service_.GetOwnerKey());
294 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
295 device_settings_service_.GetOwnershipStatus(false));
296
297 device_settings_service_.GetOwnershipStatusAsync(
298 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
299 base::Unretained(this)));
300 device_settings_test_helper_.Flush();
301 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
302 ASSERT_TRUE(device_settings_service_.GetOwnerKey());
303 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->public_key());
304 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
305 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE,
306 device_settings_service_.GetOwnershipStatus(false));
307 EXPECT_FALSE(is_owner_);
308 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE, ownership_status_);
309
310 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
311 device_settings_service_.Load();
312 device_settings_test_helper_.Flush();
313 device_settings_service_.GetOwnershipStatusAsync(
314 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
315 base::Unretained(this)));
316 device_settings_test_helper_.Flush();
317 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
318 ASSERT_TRUE(device_settings_service_.GetOwnerKey());
319 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
320 std::vector<uint8> key;
321 ASSERT_TRUE(policy_.signing_key()->ExportPublicKey(&key));
322 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
323 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
324 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
325 device_settings_service_.GetOwnershipStatus(false));
326 EXPECT_FALSE(is_owner_);
327 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_);
328
329 owner_key_util_->SetPrivateKey(policy_.signing_key());
330 device_settings_service_.SetUsername(policy_.policy_data().username());
331 device_settings_service_.GetOwnershipStatusAsync(
332 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
333 base::Unretained(this)));
334 device_settings_test_helper_.Flush();
335 EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
336 ASSERT_TRUE(device_settings_service_.GetOwnerKey());
337 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
338 ASSERT_TRUE(policy_.signing_key()->ExportPublicKey(&key));
339 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
340 EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key());
341 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
342 device_settings_service_.GetOwnershipStatus(false));
343 EXPECT_TRUE(is_owner_);
344 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_);
345 }
346
347 TEST_F(DeviceSettingsServiceTest, Observer) {
348 MockDeviceSettingsObserver observer_;
349 device_settings_service_.AddObserver(&observer_);
350
351 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
352 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
353 device_settings_service_.Load();
354 device_settings_test_helper_.Flush();
355 Mock::VerifyAndClearExpectations(&observer_);
356
357 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
358 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
359 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
360 device_settings_service_.OwnerKeySet(true);
361 device_settings_test_helper_.Flush();
362 Mock::VerifyAndClearExpectations(&observer_);
363
364 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
365 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
366 device_settings_service_.Store(policy_.GetBlob(), base::Closure());
367 device_settings_test_helper_.Flush();
368 Mock::VerifyAndClearExpectations(&observer_);
369
370 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
371 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
372 device_settings_service_.PropertyChangeComplete(true);
373 device_settings_test_helper_.Flush();
374 Mock::VerifyAndClearExpectations(&observer_);
375
376 device_settings_service_.RemoveObserver(&observer_);
377 }
378
379 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698