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

Side by Side Diff: chrome/browser/policy/device_local_account_policy_service_unittest.cc

Issue 12189011: Split up chrome/browser/policy subdirectory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase, add chrome/browser/chromeos/policy/OWNERS Created 7 years, 9 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/policy/device_local_account_policy_service.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
11 #include "chrome/browser/policy/cloud_policy_client.h"
12 #include "chrome/browser/policy/cloud_policy_constants.h"
13 #include "chrome/browser/policy/cloud_policy_service.h"
14 #include "chrome/browser/policy/device_local_account_policy_provider.h"
15 #include "chrome/browser/policy/mock_configuration_policy_provider.h"
16 #include "chrome/browser/policy/mock_device_management_service.h"
17 #include "chrome/browser/policy/policy_builder.h"
18 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h"
19 #include "policy/policy_constants.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21
22 using testing::AnyNumber;
23 using testing::AtLeast;
24 using testing::Mock;
25 using testing::SaveArg;
26 using testing::_;
27
28 namespace em = enterprise_management;
29
30 namespace policy {
31
32 class MockDeviceLocalAccountPolicyServiceObserver
33 : public DeviceLocalAccountPolicyService::Observer {
34 public:
35 MOCK_METHOD1(OnPolicyUpdated, void(const std::string&));
36 MOCK_METHOD0(OnDeviceLocalAccountsChanged, void(void));
37 };
38
39 class DeviceLocalAccountPolicyServiceTest
40 : public chromeos::DeviceSettingsTestBase {
41 public:
42 DeviceLocalAccountPolicyServiceTest()
43 : service_(&device_settings_test_helper_, &device_settings_service_) {}
44
45 virtual void SetUp() OVERRIDE {
46 DeviceSettingsTestBase::SetUp();
47
48 // Values implicitly enforced for public accounts.
49 expected_policy_map_.Set(key::kShelfAutoHideBehavior,
50 POLICY_LEVEL_MANDATORY,
51 POLICY_SCOPE_USER,
52 Value::CreateStringValue("Never"));
53 expected_policy_map_.Set(key::kShowLogoutButtonInTray,
54 POLICY_LEVEL_MANDATORY,
55 POLICY_SCOPE_USER,
56 Value::CreateBooleanValue(true));
57 scoped_ptr<base::ListValue> allowed_extension_types(new base::ListValue());
58 allowed_extension_types->AppendString("hosted_app");
59 expected_policy_map_.Set(key::kExtensionAllowedTypes,
60 POLICY_LEVEL_MANDATORY,
61 POLICY_SCOPE_USER,
62 allowed_extension_types.release());
63
64 // Explicitly set value.
65 expected_policy_map_.Set(key::kDisableSpdy,
66 POLICY_LEVEL_MANDATORY,
67 POLICY_SCOPE_USER,
68 Value::CreateBooleanValue(true));
69
70 device_local_account_policy_.payload().mutable_disablespdy()->set_value(
71 true);
72 device_local_account_policy_.policy_data().set_policy_type(
73 dm_protocol::kChromePublicAccountPolicyType);
74 device_local_account_policy_.policy_data().set_settings_entity_id(
75 PolicyBuilder::kFakeUsername);
76 device_local_account_policy_.Build();
77
78 device_policy_.payload().mutable_device_local_accounts()->add_account()->
79 set_id(PolicyBuilder::kFakeUsername);
80 device_policy_.Build();
81
82 service_.AddObserver(&service_observer_);
83 }
84
85 virtual void TearDown() OVERRIDE {
86 service_.RemoveObserver(&service_observer_);
87
88 DeviceSettingsTestBase::TearDown();
89 }
90
91 void InstallDevicePolicy() {
92 EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged());
93 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
94 ReloadDeviceSettings();
95 Mock::VerifyAndClearExpectations(&service_observer_);
96 }
97
98 MOCK_METHOD1(OnRefreshDone, void(bool));
99
100 PolicyMap expected_policy_map_;
101 UserPolicyBuilder device_local_account_policy_;
102 MockDeviceLocalAccountPolicyServiceObserver service_observer_;
103 MockDeviceManagementService mock_device_management_service_;
104 DeviceLocalAccountPolicyService service_;
105
106 private:
107 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyServiceTest);
108 };
109
110 TEST_F(DeviceLocalAccountPolicyServiceTest, NoAccounts) {
111 EXPECT_FALSE(service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername));
112 }
113
114 TEST_F(DeviceLocalAccountPolicyServiceTest, GetBroker) {
115 InstallDevicePolicy();
116
117 DeviceLocalAccountPolicyBroker* broker =
118 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
119 ASSERT_TRUE(broker);
120 EXPECT_EQ(PolicyBuilder::kFakeUsername, broker->account_id());
121 ASSERT_TRUE(broker->core()->store());
122 EXPECT_EQ(CloudPolicyStore::STATUS_OK, broker->core()->store()->status());
123 EXPECT_FALSE(broker->core()->client());
124 EXPECT_TRUE(broker->core()->store()->policy_map().empty());
125 }
126
127 TEST_F(DeviceLocalAccountPolicyServiceTest, LoadNoPolicy) {
128 InstallDevicePolicy();
129
130 EXPECT_CALL(service_observer_, OnPolicyUpdated(PolicyBuilder::kFakeUsername));
131 DeviceLocalAccountPolicyBroker* broker =
132 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
133 ASSERT_TRUE(broker);
134 FlushDeviceSettings();
135 Mock::VerifyAndClearExpectations(&service_observer_);
136
137 ASSERT_TRUE(broker->core()->store());
138 EXPECT_EQ(CloudPolicyStore::STATUS_LOAD_ERROR,
139 broker->core()->store()->status());
140 EXPECT_TRUE(broker->core()->store()->policy_map().empty());
141 EXPECT_FALSE(service_.IsPolicyAvailableForAccount(
142 PolicyBuilder::kFakeUsername));
143 }
144
145 TEST_F(DeviceLocalAccountPolicyServiceTest, LoadValidationFailure) {
146 device_local_account_policy_.policy_data().set_policy_type(
147 dm_protocol::kChromeUserPolicyType);
148 device_local_account_policy_.Build();
149 device_settings_test_helper_.set_device_local_account_policy_blob(
150 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
151 InstallDevicePolicy();
152
153 EXPECT_CALL(service_observer_, OnPolicyUpdated(PolicyBuilder::kFakeUsername));
154 DeviceLocalAccountPolicyBroker* broker =
155 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
156 ASSERT_TRUE(broker);
157 FlushDeviceSettings();
158 Mock::VerifyAndClearExpectations(&service_observer_);
159
160 ASSERT_TRUE(broker->core()->store());
161 EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR,
162 broker->core()->store()->status());
163 EXPECT_TRUE(broker->core()->store()->policy_map().empty());
164 EXPECT_FALSE(service_.IsPolicyAvailableForAccount(
165 PolicyBuilder::kFakeUsername));
166 }
167
168 TEST_F(DeviceLocalAccountPolicyServiceTest, LoadPolicy) {
169 device_settings_test_helper_.set_device_local_account_policy_blob(
170 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
171 InstallDevicePolicy();
172
173 EXPECT_CALL(service_observer_, OnPolicyUpdated(PolicyBuilder::kFakeUsername));
174 DeviceLocalAccountPolicyBroker* broker =
175 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
176 ASSERT_TRUE(broker);
177 FlushDeviceSettings();
178 Mock::VerifyAndClearExpectations(&service_observer_);
179
180 ASSERT_TRUE(broker->core()->store());
181 EXPECT_EQ(CloudPolicyStore::STATUS_OK,
182 broker->core()->store()->status());
183 ASSERT_TRUE(broker->core()->store()->policy());
184 EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(),
185 broker->core()->store()->policy()->SerializeAsString());
186 EXPECT_TRUE(expected_policy_map_.Equals(
187 broker->core()->store()->policy_map()));
188 EXPECT_TRUE(service_.IsPolicyAvailableForAccount(
189 PolicyBuilder::kFakeUsername));
190 }
191
192 TEST_F(DeviceLocalAccountPolicyServiceTest, StoreValidationFailure) {
193 device_local_account_policy_.policy_data().set_policy_type(
194 dm_protocol::kChromeUserPolicyType);
195 device_local_account_policy_.Build();
196 InstallDevicePolicy();
197
198 EXPECT_CALL(service_observer_, OnPolicyUpdated(PolicyBuilder::kFakeUsername));
199 DeviceLocalAccountPolicyBroker* broker =
200 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
201 ASSERT_TRUE(broker);
202 ASSERT_TRUE(broker->core()->store());
203 broker->core()->store()->Store(device_local_account_policy_.policy());
204 FlushDeviceSettings();
205 Mock::VerifyAndClearExpectations(&service_observer_);
206
207 ASSERT_TRUE(broker->core()->store());
208 EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR,
209 broker->core()->store()->status());
210 EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_WRONG_POLICY_TYPE,
211 broker->core()->store()->validation_status());
212 EXPECT_FALSE(service_.IsPolicyAvailableForAccount(
213 PolicyBuilder::kFakeUsername));
214 }
215
216 TEST_F(DeviceLocalAccountPolicyServiceTest, StorePolicy) {
217 InstallDevicePolicy();
218
219 EXPECT_CALL(service_observer_, OnPolicyUpdated(PolicyBuilder::kFakeUsername));
220 DeviceLocalAccountPolicyBroker* broker =
221 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
222 ASSERT_TRUE(broker);
223 ASSERT_TRUE(broker->core()->store());
224 broker->core()->store()->Store(device_local_account_policy_.policy());
225 FlushDeviceSettings();
226 Mock::VerifyAndClearExpectations(&service_observer_);
227
228 EXPECT_EQ(device_local_account_policy_.GetBlob(),
229 device_settings_test_helper_.device_local_account_policy_blob(
230 PolicyBuilder::kFakeUsername));
231 EXPECT_TRUE(service_.IsPolicyAvailableForAccount(
232 PolicyBuilder::kFakeUsername));
233 }
234
235 TEST_F(DeviceLocalAccountPolicyServiceTest, DevicePolicyChange) {
236 device_settings_test_helper_.set_device_local_account_policy_blob(
237 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
238 InstallDevicePolicy();
239
240 EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged());
241 device_policy_.payload().mutable_device_local_accounts()->clear_account();
242 device_policy_.Build();
243 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
244 device_settings_service_.PropertyChangeComplete(true);
245 FlushDeviceSettings();
246 EXPECT_FALSE(service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername));
247 Mock::VerifyAndClearExpectations(&service_observer_);
248 }
249
250 TEST_F(DeviceLocalAccountPolicyServiceTest, DuplicateAccounts) {
251 InstallDevicePolicy();
252 DeviceLocalAccountPolicyBroker* broker =
253 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
254 ASSERT_TRUE(broker);
255
256 // Add a second entry with a duplicate account name to device policy.
257 device_policy_.payload().mutable_device_local_accounts()->add_account()->
258 set_id(PolicyBuilder::kFakeUsername);
259 device_policy_.Build();
260 device_settings_test_helper_.set_device_local_account_policy_blob(
261 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
262 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
263
264 EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged());
265 EXPECT_CALL(service_observer_, OnPolicyUpdated(PolicyBuilder::kFakeUsername));
266 device_settings_service_.PropertyChangeComplete(true);
267 FlushDeviceSettings();
268 Mock::VerifyAndClearExpectations(&service_observer_);
269
270 // Make sure the broker is accessible and policy got loaded.
271 broker = service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
272 ASSERT_TRUE(broker);
273 EXPECT_EQ(PolicyBuilder::kFakeUsername, broker->account_id());
274 EXPECT_TRUE(broker->core()->store()->policy());
275 }
276
277 TEST_F(DeviceLocalAccountPolicyServiceTest, FetchPolicy) {
278 device_settings_test_helper_.set_device_local_account_policy_blob(
279 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
280 InstallDevicePolicy();
281
282 DeviceLocalAccountPolicyBroker* broker =
283 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
284 ASSERT_TRUE(broker);
285
286 service_.Connect(&mock_device_management_service_);
287 EXPECT_TRUE(broker->core()->client());
288
289 em::DeviceManagementRequest request;
290 em::DeviceManagementResponse response;
291 response.mutable_policy_response()->add_response()->CopyFrom(
292 device_local_account_policy_.policy());
293 EXPECT_CALL(mock_device_management_service_,
294 CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH))
295 .WillOnce(mock_device_management_service_.SucceedJob(response));
296 EXPECT_CALL(mock_device_management_service_,
297 StartJob(dm_protocol::kValueRequestPolicy,
298 std::string(), std::string(),
299 device_policy_.policy_data().request_token(),
300 dm_protocol::kValueUserAffiliationManaged,
301 device_policy_.policy_data().device_id(),
302 _))
303 .WillOnce(SaveArg<6>(&request));
304 EXPECT_CALL(service_observer_, OnPolicyUpdated(PolicyBuilder::kFakeUsername));
305 broker->core()->client()->FetchPolicy();
306 FlushDeviceSettings();
307 Mock::VerifyAndClearExpectations(&service_observer_);
308 Mock::VerifyAndClearExpectations(&mock_device_management_service_);
309 EXPECT_TRUE(request.has_policy_request());
310 EXPECT_EQ(1, request.policy_request().request_size());
311 EXPECT_EQ(dm_protocol::kChromePublicAccountPolicyType,
312 request.policy_request().request(0).policy_type());
313 EXPECT_FALSE(request.policy_request().request(0).has_machine_id());
314 EXPECT_EQ(PolicyBuilder::kFakeUsername,
315 request.policy_request().request(0).settings_entity_id());
316
317 ASSERT_TRUE(broker->core()->store());
318 EXPECT_EQ(CloudPolicyStore::STATUS_OK,
319 broker->core()->store()->status());
320 ASSERT_TRUE(broker->core()->store()->policy());
321 EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(),
322 broker->core()->store()->policy()->SerializeAsString());
323 EXPECT_TRUE(expected_policy_map_.Equals(
324 broker->core()->store()->policy_map()));
325 EXPECT_TRUE(service_.IsPolicyAvailableForAccount(
326 PolicyBuilder::kFakeUsername));
327
328 EXPECT_CALL(service_observer_,
329 OnPolicyUpdated(PolicyBuilder::kFakeUsername)).Times(0);
330 service_.Disconnect();
331 EXPECT_FALSE(broker->core()->client());
332 Mock::VerifyAndClearExpectations(&service_observer_);
333 EXPECT_TRUE(service_.IsPolicyAvailableForAccount(
334 PolicyBuilder::kFakeUsername));
335 }
336
337 TEST_F(DeviceLocalAccountPolicyServiceTest, RefreshPolicy) {
338 device_settings_test_helper_.set_device_local_account_policy_blob(
339 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
340 InstallDevicePolicy();
341
342 DeviceLocalAccountPolicyBroker* broker =
343 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
344 ASSERT_TRUE(broker);
345
346 service_.Connect(&mock_device_management_service_);
347 ASSERT_TRUE(broker->core()->service());
348
349 em::DeviceManagementResponse response;
350 response.mutable_policy_response()->add_response()->CopyFrom(
351 device_local_account_policy_.policy());
352 EXPECT_CALL(mock_device_management_service_, CreateJob(_))
353 .WillOnce(mock_device_management_service_.SucceedJob(response));
354 EXPECT_CALL(mock_device_management_service_, StartJob(_, _, _, _, _, _, _));
355 EXPECT_CALL(*this, OnRefreshDone(true)).Times(1);
356 EXPECT_CALL(service_observer_, OnPolicyUpdated(PolicyBuilder::kFakeUsername));
357 broker->core()->service()->RefreshPolicy(
358 base::Bind(&DeviceLocalAccountPolicyServiceTest::OnRefreshDone,
359 base::Unretained(this)));
360 FlushDeviceSettings();
361 Mock::VerifyAndClearExpectations(&service_observer_);
362 Mock::VerifyAndClearExpectations(this);
363 Mock::VerifyAndClearExpectations(&mock_device_management_service_);
364
365 ASSERT_TRUE(broker->core()->store());
366 EXPECT_EQ(CloudPolicyStore::STATUS_OK,
367 broker->core()->store()->status());
368 EXPECT_TRUE(expected_policy_map_.Equals(
369 broker->core()->store()->policy_map()));
370 EXPECT_TRUE(service_.IsPolicyAvailableForAccount(
371 PolicyBuilder::kFakeUsername));
372 }
373
374 class DeviceLocalAccountPolicyProviderTest
375 : public DeviceLocalAccountPolicyServiceTest {
376 protected:
377 DeviceLocalAccountPolicyProviderTest()
378 : provider_(PolicyBuilder::kFakeUsername, &service_) {}
379
380 virtual void SetUp() OVERRIDE {
381 DeviceLocalAccountPolicyServiceTest::SetUp();
382 provider_.Init();
383 provider_.AddObserver(&provider_observer_);
384
385 EXPECT_CALL(service_observer_, OnPolicyUpdated(_)).Times(AnyNumber());
386 EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged())
387 .Times(AnyNumber());
388 }
389
390 virtual void TearDown() OVERRIDE {
391 provider_.RemoveObserver(&provider_observer_);
392 provider_.Shutdown();
393 DeviceLocalAccountPolicyServiceTest::TearDown();
394 }
395
396 DeviceLocalAccountPolicyProvider provider_;
397 MockConfigurationPolicyObserver provider_observer_;
398
399 private:
400 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyProviderTest);
401 };
402
403 TEST_F(DeviceLocalAccountPolicyProviderTest, Initialization) {
404 EXPECT_FALSE(provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME));
405
406 // Policy change should complete initialization.
407 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1));
408 device_settings_test_helper_.set_device_local_account_policy_blob(
409 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
410 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
411 ReloadDeviceSettings();
412 Mock::VerifyAndClearExpectations(&provider_observer_);
413
414 EXPECT_TRUE(provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME));
415
416 // The account disappearing should *not* flip the initialization flag back.
417 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_))
418 .Times(AnyNumber());
419 device_policy_.payload().mutable_device_local_accounts()->clear_account();
420 device_policy_.Build();
421 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
422 ReloadDeviceSettings();
423 Mock::VerifyAndClearExpectations(&provider_observer_);
424
425 EXPECT_TRUE(provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME));
426 }
427
428 TEST_F(DeviceLocalAccountPolicyProviderTest, Policy) {
429 // Policy should load successfully.
430 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1));
431 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
432 device_settings_test_helper_.set_device_local_account_policy_blob(
433 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
434 ReloadDeviceSettings();
435 Mock::VerifyAndClearExpectations(&provider_observer_);
436
437 PolicyBundle expected_policy_bundle;
438 expected_policy_bundle.Get(PolicyNamespace(
439 POLICY_DOMAIN_CHROME, std::string())).CopyFrom(expected_policy_map_);
440 EXPECT_TRUE(expected_policy_bundle.Equals(provider_.policies()));
441
442 // Policy change should be reported.
443 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1));
444 device_local_account_policy_.payload().mutable_disablespdy()->set_value(
445 false);
446 device_local_account_policy_.Build();
447 device_settings_test_helper_.set_device_local_account_policy_blob(
448 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
449 DeviceLocalAccountPolicyBroker* broker =
450 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
451 ASSERT_TRUE(broker);
452 broker->core()->store()->Load();
453 FlushDeviceSettings();
454 Mock::VerifyAndClearExpectations(&provider_observer_);
455
456 expected_policy_bundle.Get(
457 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
458 .Set(key::kDisableSpdy,
459 POLICY_LEVEL_MANDATORY,
460 POLICY_SCOPE_USER,
461 Value::CreateBooleanValue(false));
462 EXPECT_TRUE(expected_policy_bundle.Equals(provider_.policies()));
463
464 // Any values set for the |ShelfAutoHideBehavior|, |ShowLogoutButtonInTray|
465 // and |ExtensionAllowedTypes| policies should be overridden.
466 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1));
467 device_local_account_policy_.payload().mutable_shelfautohidebehavior()->
468 set_value("Always");
469 device_local_account_policy_.payload().mutable_showlogoutbuttonintray()->
470 set_value(false);
471 device_local_account_policy_.payload().mutable_extensionallowedtypes()->
472 mutable_value()->mutable_entries()->Clear();
473 device_local_account_policy_.Build();
474 device_settings_test_helper_.set_device_local_account_policy_blob(
475 PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob());
476 broker->core()->store()->Load();
477 FlushDeviceSettings();
478 Mock::VerifyAndClearExpectations(&provider_observer_);
479 EXPECT_TRUE(expected_policy_bundle.Equals(provider_.policies()));
480
481 // Account disappears, policy should stay in effect.
482 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_))
483 .Times(AnyNumber());
484 device_policy_.payload().mutable_device_local_accounts()->clear_account();
485 device_policy_.Build();
486 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
487 ReloadDeviceSettings();
488 Mock::VerifyAndClearExpectations(&provider_observer_);
489
490 EXPECT_TRUE(expected_policy_bundle.Equals(provider_.policies()));
491 }
492
493 TEST_F(DeviceLocalAccountPolicyProviderTest, RefreshPolicies) {
494 // If there's no device policy, the refresh completes immediately.
495 EXPECT_FALSE(service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername));
496 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1));
497 provider_.RefreshPolicies();
498 Mock::VerifyAndClearExpectations(&provider_observer_);
499
500 // Make device settings appear.
501 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_))
502 .Times(AnyNumber());
503 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
504 ReloadDeviceSettings();
505 Mock::VerifyAndClearExpectations(&provider_observer_);
506 EXPECT_TRUE(service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername));
507
508 // If there's no cloud connection, refreshes are still immediate.
509 DeviceLocalAccountPolicyBroker* broker =
510 service_.GetBrokerForAccount(PolicyBuilder::kFakeUsername);
511 ASSERT_TRUE(broker);
512 EXPECT_FALSE(broker->core()->client());
513 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1));
514 provider_.RefreshPolicies();
515 Mock::VerifyAndClearExpectations(&provider_observer_);
516
517 // Bring up the cloud connection. The refresh scheduler may fire refreshes at
518 // this point which are not relevant for the test.
519 EXPECT_CALL(mock_device_management_service_, CreateJob(_))
520 .WillRepeatedly(
521 mock_device_management_service_.FailJob(DM_STATUS_REQUEST_FAILED));
522 EXPECT_CALL(mock_device_management_service_, StartJob(_, _, _, _, _, _, _));
523 service_.Connect(&mock_device_management_service_);
524 FlushDeviceSettings();
525 Mock::VerifyAndClearExpectations(&mock_device_management_service_);
526
527 // No callbacks until the refresh completes.
528 EXPECT_CALL(provider_observer_, OnUpdatePolicy(_)).Times(0);
529 MockDeviceManagementJob* request_job;
530 EXPECT_CALL(mock_device_management_service_, CreateJob(_))
531 .WillOnce(mock_device_management_service_.CreateAsyncJob(&request_job));
532 EXPECT_CALL(mock_device_management_service_, StartJob(_, _, _, _, _, _, _));
533 provider_.RefreshPolicies();
534 ReloadDeviceSettings();
535 Mock::VerifyAndClearExpectations(&provider_observer_);
536 Mock::VerifyAndClearExpectations(&mock_device_management_service_);
537 EXPECT_TRUE(provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME));
538
539 // When the response comes in, it should propagate and fire the notification.
540 EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1));
541 ASSERT_TRUE(request_job);
542 em::DeviceManagementResponse response;
543 response.mutable_policy_response()->add_response()->CopyFrom(
544 device_local_account_policy_.policy());
545 request_job->SendResponse(DM_STATUS_SUCCESS, response);
546 FlushDeviceSettings();
547 Mock::VerifyAndClearExpectations(&provider_observer_);
548 }
549
550 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698