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

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

Issue 10828032: Add DeviceSettingsService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Oops. 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/login/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/login/device_settings_test_helper.h"
14 #include "chrome/browser/chromeos/login/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();
pastarmovj 2012/07/30 12:19:19 Please add the expectation as in the next test.
Mattias Nissler (ping if slow) 2012/07/31 13:02:15 Done.
154
155 scoped_ptr<em::ChromeDeviceSettingsProto> new_device_settings(
156 new em::ChromeDeviceSettingsProto(policy_.payload()));
157 new_device_settings->mutable_device_policy_refresh_rate()->
158 set_device_policy_refresh_rate(300);
159 device_settings_service_.SignAndStore(
160 new_device_settings.Pass(),
161 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
162 base::Unretained(this)));
163 device_settings_test_helper_.Flush();
164 EXPECT_TRUE(operation_completed_);
165 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
166 device_settings_service_.status());
167 CheckPolicy();
168 }
169
170 TEST_F(DeviceSettingsServiceTest, SignAndStoreFailure) {
171 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
172 device_settings_service_.Load();
173 device_settings_test_helper_.Flush();
174 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
175 device_settings_service_.status());
176
177 owner_key_util_->SetPrivateKey(policy_.signing_key());
178 device_settings_service_.SetUsername(policy_.policy_data().username());
179 device_settings_test_helper_.Flush();
180
181 scoped_ptr<em::ChromeDeviceSettingsProto> new_device_settings(
182 new em::ChromeDeviceSettingsProto(policy_.payload()));
183 new_device_settings->mutable_device_policy_refresh_rate()->
184 set_device_policy_refresh_rate(300);
185 device_settings_test_helper_.set_store_result(false);
186 device_settings_service_.SignAndStore(
187 new_device_settings.Pass(),
188 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
189 base::Unretained(this)));
190 device_settings_test_helper_.Flush();
191 EXPECT_TRUE(operation_completed_);
192 EXPECT_EQ(DeviceSettingsService::STORE_OPERATION_FAILED,
193 device_settings_service_.status());
194 CheckPolicy();
195 }
196
197 TEST_F(DeviceSettingsServiceTest, SignAndStoreSuccess) {
198 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
199 device_settings_service_.Load();
200 device_settings_test_helper_.Flush();
201 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
202 device_settings_service_.status());
203
204 owner_key_util_->SetPrivateKey(policy_.signing_key());
205 device_settings_service_.SetUsername(policy_.policy_data().username());
206 device_settings_test_helper_.Flush();
207
208 policy_.payload().mutable_device_policy_refresh_rate()->
209 set_device_policy_refresh_rate(300);
210 policy_.Build();
211 scoped_ptr<em::ChromeDeviceSettingsProto> new_device_settings(
212 new em::ChromeDeviceSettingsProto(policy_.payload()));
213 device_settings_service_.SignAndStore(
214 new_device_settings.Pass(),
215 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
216 base::Unretained(this)));
217 device_settings_test_helper_.Flush();
218 EXPECT_TRUE(operation_completed_);
219 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
220 device_settings_service_.status());
221 ASSERT_TRUE(device_settings_service_.device_settings());
222 EXPECT_EQ(policy_.payload().SerializeAsString(),
223 device_settings_service_.device_settings()->SerializeAsString());
224 }
225
226 TEST_F(DeviceSettingsServiceTest, StoreFailure) {
227 device_settings_test_helper_.set_policy_blob(std::string());
228 device_settings_service_.Load();
229 device_settings_test_helper_.Flush();
230 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
231 device_settings_service_.status());
232
233 device_settings_test_helper_.set_store_result(false);
234 device_settings_service_.Store(
235 policy_.GetBlob(),
236 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
237 base::Unretained(this)));
238 device_settings_test_helper_.Flush();
239 EXPECT_TRUE(operation_completed_);
240 EXPECT_EQ(DeviceSettingsService::STORE_OPERATION_FAILED,
241 device_settings_service_.status());
242 }
243
244 TEST_F(DeviceSettingsServiceTest, StoreSuccess) {
245 device_settings_test_helper_.set_policy_blob(std::string());
246 device_settings_service_.Load();
247 device_settings_test_helper_.Flush();
248 EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
249 device_settings_service_.status());
250
251 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
252 device_settings_service_.Store(
253 policy_.GetBlob(),
254 base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
255 base::Unretained(this)));
256 device_settings_test_helper_.Flush();
257 EXPECT_TRUE(operation_completed_);
258 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
259 device_settings_service_.status());
260 CheckPolicy();
261 }
262
263 TEST_F(DeviceSettingsServiceTest, StoreRotation) {
264 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
265 device_settings_service_.Load();
266 device_settings_test_helper_.Flush();
267 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
268 device_settings_service_.status());
269
270 policy_.payload().mutable_device_policy_refresh_rate()->
271 set_device_policy_refresh_rate(300);
272 policy_.set_new_signing_key(policy::PolicyBuilder::CreateTestNewSigningKey());
273 policy_.Build();
274 device_settings_service_.Store(policy_.GetBlob(), base::Closure());
275 device_settings_test_helper_.FlushStore();
276 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.new_signing_key());
277 device_settings_service_.OwnerKeySet(true);
278 device_settings_test_helper_.Flush();
279 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
280 device_settings_service_.status());
281 CheckPolicy();
282
283 // Check the new key has been loaded.
284 std::vector<uint8> key;
285 ASSERT_TRUE(policy_.new_signing_key()->ExportPublicKey(&key));
286 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
287 }
288
289 TEST_F(DeviceSettingsServiceTest, OwnershipStatus) {
290 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
291 EXPECT_FALSE(device_settings_service_.GetOwnerKey());
292 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN,
293 device_settings_service_.GetOwnershipStatus(false));
294
295 device_settings_service_.GetOwnershipStatusAsync(
296 base::Bind(&DeviceSettingsServiceTest::SetOwnershipStatus,
297 base::Unretained(this)));
298 device_settings_test_helper_.Flush();
299 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
300 ASSERT_TRUE(device_settings_service_.GetOwnerKey());
301 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->public_key());
302 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
303 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE,
304 device_settings_service_.GetOwnershipStatus(false));
305 EXPECT_FALSE(is_owner_);
306 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE, ownership_status_);
307
308 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
309 device_settings_service_.Load();
310 device_settings_test_helper_.Flush();
311 EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey());
312 ASSERT_TRUE(device_settings_service_.GetOwnerKey());
313 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
314 std::vector<uint8> key;
315 ASSERT_TRUE(policy_.signing_key()->ExportPublicKey(&key));
316 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
317 EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key());
pastarmovj 2012/07/30 12:19:19 You should verify if the "is current user owner" c
Mattias Nissler (ping if slow) 2012/07/31 13:02:15 Done.
318 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
319 device_settings_service_.GetOwnershipStatus(false));
320
321 owner_key_util_->SetPrivateKey(policy_.signing_key());
322 device_settings_service_.SetUsername(policy_.policy_data().username());
323 device_settings_test_helper_.Flush();
324 EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey());
325 ASSERT_TRUE(device_settings_service_.GetOwnerKey());
326 ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key());
327 ASSERT_TRUE(policy_.signing_key()->ExportPublicKey(&key));
328 EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key);
329 EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key());
330 EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN,
331 device_settings_service_.GetOwnershipStatus(false));
332 }
333
334 TEST_F(DeviceSettingsServiceTest, Observer) {
335 MockDeviceSettingsObserver observer_;
336 device_settings_service_.AddObserver(&observer_);
337
338 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
339 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
340 device_settings_service_.Load();
341 device_settings_test_helper_.Flush();
342 Mock::VerifyAndClearExpectations(&observer_);
343
344 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(1);
345 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
346 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.signing_key());
347 device_settings_service_.OwnerKeySet(true);
348 device_settings_test_helper_.Flush();
349 Mock::VerifyAndClearExpectations(&observer_);
350
351 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
352 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
353 device_settings_service_.Store(policy_.GetBlob(), base::Closure());
354 device_settings_test_helper_.Flush();
355 Mock::VerifyAndClearExpectations(&observer_);
356
357 EXPECT_CALL(observer_, OwnershipStatusChanged()).Times(0);
358 EXPECT_CALL(observer_, DeviceSettingsUpdated()).Times(1);
359 device_settings_service_.PropertyChangeComplete(true);
360 device_settings_test_helper_.Flush();
361 Mock::VerifyAndClearExpectations(&observer_);
362
363 device_settings_service_.RemoveObserver(&observer_);
364 }
365
366 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698