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

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. Created 8 years, 3 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 device_settings_service_.SignAndStore(
214 scoped_ptr<em::ChromeDeviceSettingsProto>(
215 new em::ChromeDeviceSettingsProto(policy_.payload())),
216 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
217 base::Unretained(this)));
218 device_settings_test_helper_.Flush();
219 EXPECT_TRUE(operation_completed_);
220 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
221 device_settings_service_.status());
222 ASSERT_TRUE(device_settings_service_.device_settings());
223 EXPECT_EQ(policy_.payload().SerializeAsString(),
224 device_settings_service_.device_settings()->SerializeAsString());
225 }
226
227 TEST_F(DeviceSettingsServiceTest, StoreFailure) {
228 device_settings_test_helper_.set_policy_blob(std::string());
229 device_settings_service_.Load();
230 device_settings_test_helper_.Flush();
231 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
232 device_settings_service_.status());
233
234 device_settings_test_helper_.set_store_result(false);
235 device_settings_service_.Store(
236 policy_.GetBlob(),
237 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
238 base::Unretained(this)));
239 device_settings_test_helper_.Flush();
240 EXPECT_TRUE(operation_completed_);
241 EXPECT_EQ(DeviceSettingsService::STORE_OPERATION_FAILED,
242 device_settings_service_.status());
243 }
244
245 TEST_F(DeviceSettingsServiceTest, StoreSuccess) {
246 device_settings_test_helper_.set_policy_blob(std::string());
247 device_settings_service_.Load();
248 device_settings_test_helper_.Flush();
249 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
250 device_settings_service_.status());
251
252 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
253 device_settings_service_.Store(
254 policy_.GetBlob(),
255 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
256 base::Unretained(this)));
257 device_settings_test_helper_.Flush();
258 EXPECT_TRUE(operation_completed_);
259 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
260 device_settings_service_.status());
261 CheckPolicy();
262 }
263
264 TEST_F(DeviceSettingsServiceTest, StoreRotation) {
265 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
266 device_settings_service_.Load();
267 device_settings_test_helper_.Flush();
268 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
269 device_settings_service_.status());
270
271 policy_.payload().mutable_device_policy_refresh_rate()->
272 set_device_policy_refresh_rate(300);
273 policy_.set_new_signing_key(policy::PolicyBuilder::CreateTestNewSigningKey());
274 policy_.Build();
275 device_settings_service_.Store(policy_.GetBlob(), base::Closure());
276 device_settings_test_helper_.FlushStore();
277 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.new_signing_key());
278 device_settings_service_.OwnerKeySet(true);
279 device_settings_test_helper_.Flush();
280 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
281 device_settings_service_.status());
282 CheckPolicy();
283
284 // Check the new key has been loaded.
285 std::vector<uint8> key;
286 ASSERT_TRUE(policy_.new_signing_key()->ExportPublicKey(&key));
287 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
288 }
289
290 TEST_F(DeviceSettingsServiceTest, OwnershipStatus) {
291 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
292 EXPECT_FALSE(device_settings_service_.GetOwnerKey());
293 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
294 device_settings_service_.GetOwnershipStatus());
295
296 device_settings_service_.GetOwnershipStatusAsync(
297 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
298 base::Unretained(this)));
299 device_settings_test_helper_.Flush();
300 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
301 ASSERT_TRUE(device_settings_service_.GetOwnerKey());
302 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->public_key());
303 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
304 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE,
305 device_settings_service_.GetOwnershipStatus());
306 EXPECT_FALSE(is_owner_);
307 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE, ownership_status_);
308
309 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
310 device_settings_service_.Load();
311 device_settings_test_helper_.Flush();
312 device_settings_service_.GetOwnershipStatusAsync(
313 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
314 base::Unretained(this)));
315 device_settings_test_helper_.Flush();
316 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
317 ASSERT_TRUE(device_settings_service_.GetOwnerKey());
318 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
319 std::vector<uint8> key;
320 ASSERT_TRUE(policy_.signing_key()->ExportPublicKey(&key));
321 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
322 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
323 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
324 device_settings_service_.GetOwnershipStatus());
325 EXPECT_FALSE(is_owner_);
326 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_);
327
328 owner_key_util_->SetPrivateKey(policy_.signing_key());
329 device_settings_service_.SetUsername(policy_.policy_data().username());
330 device_settings_service_.GetOwnershipStatusAsync(
331 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
332 base::Unretained(this)));
333 device_settings_test_helper_.Flush();
334 EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
335 ASSERT_TRUE(device_settings_service_.GetOwnerKey());
336 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
337 ASSERT_TRUE(policy_.signing_key()->ExportPublicKey(&key));
338 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
339 EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key());
340 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
341 device_settings_service_.GetOwnershipStatus());
342 EXPECT_TRUE(is_owner_);
343 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_);
344 }
345
346 TEST_F(DeviceSettingsServiceTest, Observer) {
347 MockDeviceSettingsObserver observer_;
348 device_settings_service_.AddObserver(&observer_);
349
350 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
351 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
352 device_settings_service_.Load();
353 device_settings_test_helper_.Flush();
354 Mock::VerifyAndClearExpectations(&observer_);
355
356 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
357 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
358 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
359 device_settings_service_.OwnerKeySet(true);
360 device_settings_test_helper_.Flush();
361 Mock::VerifyAndClearExpectations(&observer_);
362
363 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
364 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
365 device_settings_service_.Store(policy_.GetBlob(), base::Closure());
366 device_settings_test_helper_.Flush();
367 Mock::VerifyAndClearExpectations(&observer_);
368
369 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
370 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
371 device_settings_service_.PropertyChangeComplete(true);
372 device_settings_test_helper_.Flush();
373 Mock::VerifyAndClearExpectations(&observer_);
374
375 device_settings_service_.RemoveObserver(&observer_);
376 }
377
378 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698