1 // Copyright 2013 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.
6 #include "base/bind_helpers.h"
7 #include "base/callback.h"
8 #include "base/files/file_path.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/run_loop.h"
11 #include "base/values.h"
12 #include "chrome/browser/chromeos/policy/device_network_configuration_updater.h"
13 #include "chrome/browser/chromeos/policy/user_network_configuration_updater.h"
14 #include "chrome/browser/chromeos/settings/cros_settings.h"
15 #include "chrome/browser/chromeos/settings/device_settings_service.h"
16 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
17 #include "chrome/test/base/testing_profile.h"
18 #include "chromeos/network/fake_network_device_handler.h"
19 #include "chromeos/network/mock_managed_network_configuration_handler.h"
20 #include "chromeos/network/onc/onc_certificate_importer.h"
21 #include "chromeos/network/onc/onc_test_utils.h"
22 #include "chromeos/network/onc/onc_utils.h"
23 #include "components/onc/onc_constants.h"
24 #include "components/policy/core/common/external_data_fetcher.h"
25 #include "components/policy/core/common/mock_configuration_policy_provider.h"
26 #include "components/policy/core/common/policy_map.h"
27 #include "components/policy/core/common/policy_service_impl.h"
28 #include "components/user_manager/user.h"
29 #include "components/user_manager/user_type.h"
30 #include "content/public/test/test_browser_thread_bundle.h"
31 #include "content/public/test/test_utils.h"
32 #include "net/base/test_data_directory.h"
33 #include "net/cert/x509_certificate.h"
34 #include "net/test/cert_test_util.h"
35 #include "policy/policy_constants.h"
36 #include "testing/gmock/include/gmock/gmock.h"
37 #include "testing/gtest/include/gtest/gtest.h"
39 using testing::AnyNumber
;
40 using testing::AtLeast
;
43 using testing::Return
;
44 using testing::StrictMock
;
51 const char kFakeUserEmail
[] = "fake email";
52 const char kFakeUsernameHash
[] = "fake hash";
54 class FakeUser
: public user_manager::User
{
56 FakeUser() : User(kFakeUserEmail
) {
57 set_display_email(kFakeUserEmail
);
58 set_username_hash(kFakeUsernameHash
);
60 ~FakeUser() override
{}
63 user_manager::UserType
GetType() const override
{
64 return user_manager::USER_TYPE_REGULAR
;
68 DISALLOW_COPY_AND_ASSIGN(FakeUser
);
71 class FakeWebTrustedCertsObserver
72 : public UserNetworkConfigurationUpdater::WebTrustedCertsObserver
{
74 FakeWebTrustedCertsObserver() {}
76 void OnTrustAnchorsChanged(
77 const net::CertificateList
& trust_anchors
) override
{
78 trust_anchors_
= trust_anchors
;
80 net::CertificateList trust_anchors_
;
83 DISALLOW_COPY_AND_ASSIGN(FakeWebTrustedCertsObserver
);
86 class FakeNetworkDeviceHandler
: public chromeos::FakeNetworkDeviceHandler
{
88 FakeNetworkDeviceHandler() : allow_roaming_(false) {}
90 void SetCellularAllowRoaming(bool allow_roaming
) override
{
91 allow_roaming_
= allow_roaming
;
97 DISALLOW_COPY_AND_ASSIGN(FakeNetworkDeviceHandler
);
100 class FakeCertificateImporter
: public chromeos::onc::CertificateImporter
{
102 FakeCertificateImporter()
103 : expected_onc_source_(::onc::ONC_SOURCE_UNKNOWN
), call_count_(0) {}
104 ~FakeCertificateImporter() override
{}
106 void SetTrustedCertificatesResult(
107 net::CertificateList onc_trusted_certificates
) {
108 onc_trusted_certificates_
= onc_trusted_certificates
;
111 void SetExpectedONCCertificates(const base::ListValue
& certificates
) {
112 expected_onc_certificates_
.reset(certificates
.DeepCopy());
115 void SetExpectedONCSource(::onc::ONCSource source
) {
116 expected_onc_source_
= source
;
119 unsigned int GetAndResetImportCount() {
120 unsigned int count
= call_count_
;
125 void ImportCertificates(const base::ListValue
& certificates
,
126 ::onc::ONCSource source
,
127 const DoneCallback
& done_callback
) override
{
128 if (expected_onc_source_
!= ::onc::ONC_SOURCE_UNKNOWN
)
129 EXPECT_EQ(expected_onc_source_
, source
);
130 if (expected_onc_certificates_
) {
131 EXPECT_TRUE(chromeos::onc::test_utils::Equals(
132 expected_onc_certificates_
.get(), &certificates
));
135 done_callback
.Run(true, onc_trusted_certificates_
);
139 ::onc::ONCSource expected_onc_source_
;
140 scoped_ptr
<base::ListValue
> expected_onc_certificates_
;
141 net::CertificateList onc_trusted_certificates_
;
142 unsigned int call_count_
;
144 DISALLOW_COPY_AND_ASSIGN(FakeCertificateImporter
);
147 const char kFakeONC
[] =
148 "{ \"NetworkConfigurations\": ["
149 " { \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5040}\","
150 " \"Type\": \"WiFi\","
151 " \"Name\": \"My WiFi Network\","
153 " \"HexSSID\": \"737369642D6E6F6E65\"," // "ssid-none"
154 " \"Security\": \"None\" }"
157 " \"GlobalNetworkConfiguration\": {"
158 " \"AllowOnlyPolicyNetworksToAutoconnect\": true,"
160 " \"Certificates\": ["
161 " { \"GUID\": \"{f998f760-272b-6939-4c2beffe428697ac}\","
162 " \"PKCS12\": \"abc\","
163 " \"Type\": \"Client\" }"
165 " \"Type\": \"UnencryptedConfiguration\""
168 std::string
ValueToString(const base::Value
& value
) {
169 std::stringstream str
;
174 void AppendAll(const base::ListValue
& from
, base::ListValue
* to
) {
175 for (base::ListValue::const_iterator it
= from
.begin(); it
!= from
.end();
177 to
->Append((*it
)->DeepCopy());
181 // Matcher to match base::Value.
184 std::string(negation
? "isn't" : "is") + " equal to " +
185 ValueToString(*value
)) {
186 return value
->Equals(&arg
);
189 MATCHER(IsEmpty
, std::string(negation
? "isn't" : "is") + " empty.") {
193 ACTION_P(SetCertificateList
, list
) {
201 class NetworkConfigurationUpdaterTest
: public testing::Test
{
203 NetworkConfigurationUpdaterTest() : certificate_importer_(NULL
) {}
205 virtual void SetUp() override
{
206 EXPECT_CALL(provider_
, IsInitializationComplete(_
))
207 .WillRepeatedly(Return(false));
209 PolicyServiceImpl::Providers providers
;
210 providers
.push_back(&provider_
);
211 policy_service_
.reset(new PolicyServiceImpl(providers
));
213 scoped_ptr
<base::DictionaryValue
> fake_toplevel_onc
=
214 chromeos::onc::ReadDictionaryFromJson(kFakeONC
);
216 base::ListValue
* network_configs
= NULL
;
217 fake_toplevel_onc
->GetListWithoutPathExpansion(
218 onc::toplevel_config::kNetworkConfigurations
, &network_configs
);
219 AppendAll(*network_configs
, &fake_network_configs_
);
221 base::DictionaryValue
* global_config
= NULL
;
222 fake_toplevel_onc
->GetDictionaryWithoutPathExpansion(
223 onc::toplevel_config::kGlobalNetworkConfiguration
, &global_config
);
224 fake_global_network_config_
.MergeDictionary(global_config
);
226 base::ListValue
* certs
= NULL
;
227 fake_toplevel_onc
->GetListWithoutPathExpansion(
228 onc::toplevel_config::kCertificates
, &certs
);
229 AppendAll(*certs
, &fake_certificates_
);
231 certificate_importer_
= new FakeCertificateImporter
;
232 certificate_importer_owned_
.reset(certificate_importer_
);
235 virtual void TearDown() override
{
236 network_configuration_updater_
.reset();
237 provider_
.Shutdown();
238 base::RunLoop().RunUntilIdle();
241 void MarkPolicyProviderInitialized() {
242 Mock::VerifyAndClearExpectations(&provider_
);
243 EXPECT_CALL(provider_
, IsInitializationComplete(_
))
244 .WillRepeatedly(Return(true));
245 provider_
.SetAutoRefresh();
246 provider_
.RefreshPolicies();
247 base::RunLoop().RunUntilIdle();
250 void UpdateProviderPolicy(const PolicyMap
& policy
) {
251 provider_
.UpdateChromePolicy(policy
);
252 base::RunLoop().RunUntilIdle();
255 UserNetworkConfigurationUpdater
*
256 CreateNetworkConfigurationUpdaterForUserPolicy(
257 bool allow_trusted_certs_from_policy
,
258 bool set_cert_importer
) {
259 UserNetworkConfigurationUpdater
* updater
=
260 UserNetworkConfigurationUpdater::CreateForUserPolicy(
262 allow_trusted_certs_from_policy
,
264 policy_service_
.get(),
265 &network_config_handler_
).release();
266 if (set_cert_importer
) {
267 EXPECT_TRUE(certificate_importer_owned_
);
268 updater
->SetCertificateImporterForTest(
269 certificate_importer_owned_
.Pass());
271 network_configuration_updater_
.reset(updater
);
275 void CreateNetworkConfigurationUpdaterForDevicePolicy() {
276 network_configuration_updater_
=
277 DeviceNetworkConfigurationUpdater::CreateForDevicePolicy(
278 policy_service_
.get(),
279 &network_config_handler_
,
280 &network_device_handler_
,
281 chromeos::CrosSettings::Get());
284 base::ListValue fake_network_configs_
;
285 base::DictionaryValue fake_global_network_config_
;
286 base::ListValue fake_certificates_
;
287 StrictMock
<chromeos::MockManagedNetworkConfigurationHandler
>
288 network_config_handler_
;
289 FakeNetworkDeviceHandler network_device_handler_
;
291 // Not used directly. Required for CrosSettings.
292 chromeos::ScopedTestDeviceSettingsService scoped_device_settings_service_
;
293 chromeos::ScopedTestCrosSettings scoped_cros_settings_
;
295 // Ownership of certificate_importer_owned_ is passed to the
296 // NetworkConfigurationUpdater. When that happens, |certificate_importer_|
297 // continues to point to that instance but |certificate_importer_owned_| is
299 FakeCertificateImporter
* certificate_importer_
;
300 scoped_ptr
<chromeos::onc::CertificateImporter
> certificate_importer_owned_
;
302 StrictMock
<MockConfigurationPolicyProvider
> provider_
;
303 scoped_ptr
<PolicyServiceImpl
> policy_service_
;
306 TestingProfile profile_
;
308 scoped_ptr
<NetworkConfigurationUpdater
> network_configuration_updater_
;
309 content::TestBrowserThreadBundle thread_bundle_
;
312 TEST_F(NetworkConfigurationUpdaterTest
, CellularAllowRoaming
) {
313 // Ignore network config updates.
314 EXPECT_CALL(network_config_handler_
, SetPolicy(_
, _
, _
, _
)).Times(AtLeast(1));
316 // Setup the DataRoaming device setting.
317 chromeos::CrosSettings
* cros_settings
= chromeos::CrosSettings::Get();
318 chromeos::CrosSettingsProvider
* device_settings_provider
=
319 cros_settings
->GetProvider(chromeos::kSignedDataRoamingEnabled
);
320 cros_settings
->RemoveSettingsProvider(device_settings_provider
);
321 delete device_settings_provider
;
322 chromeos::StubCrosSettingsProvider
* stub_settings_provider
=
323 new chromeos::StubCrosSettingsProvider
;
324 cros_settings
->AddSettingsProvider(stub_settings_provider
);
326 chromeos::CrosSettings::Get()->Set(chromeos::kSignedDataRoamingEnabled
,
327 base::FundamentalValue(false));
328 EXPECT_FALSE(network_device_handler_
.allow_roaming_
);
330 CreateNetworkConfigurationUpdaterForDevicePolicy();
331 MarkPolicyProviderInitialized();
332 chromeos::CrosSettings::Get()->Set(chromeos::kSignedDataRoamingEnabled
,
333 base::FundamentalValue(true));
334 EXPECT_TRUE(network_device_handler_
.allow_roaming_
);
336 chromeos::CrosSettings::Get()->Set(chromeos::kSignedDataRoamingEnabled
,
337 base::FundamentalValue(false));
338 EXPECT_FALSE(network_device_handler_
.allow_roaming_
);
341 TEST_F(NetworkConfigurationUpdaterTest
, PolicyIsValidatedAndRepaired
) {
342 scoped_ptr
<base::DictionaryValue
> onc_repaired
=
343 chromeos::onc::test_utils::ReadTestDictionary(
344 "repaired_toplevel_partially_invalid.onc");
346 base::ListValue
* network_configs_repaired
= NULL
;
347 onc_repaired
->GetListWithoutPathExpansion(
348 onc::toplevel_config::kNetworkConfigurations
, &network_configs_repaired
);
349 ASSERT_TRUE(network_configs_repaired
);
351 base::DictionaryValue
* global_config_repaired
= NULL
;
352 onc_repaired
->GetDictionaryWithoutPathExpansion(
353 onc::toplevel_config::kGlobalNetworkConfiguration
,
354 &global_config_repaired
);
355 ASSERT_TRUE(global_config_repaired
);
357 std::string onc_policy
=
358 chromeos::onc::test_utils::ReadTestData("toplevel_partially_invalid.onc");
360 policy
.Set(key::kOpenNetworkConfiguration
,
361 POLICY_LEVEL_MANDATORY
,
363 new base::StringValue(onc_policy
),
365 UpdateProviderPolicy(policy
);
367 EXPECT_CALL(network_config_handler_
,
368 SetPolicy(onc::ONC_SOURCE_USER_POLICY
,
370 IsEqualTo(network_configs_repaired
),
371 IsEqualTo(global_config_repaired
)));
372 certificate_importer_
->SetExpectedONCSource(onc::ONC_SOURCE_USER_POLICY
);
374 CreateNetworkConfigurationUpdaterForUserPolicy(
375 false /* do not allow trusted certs from policy */,
376 true /* set certificate importer */);
377 MarkPolicyProviderInitialized();
378 EXPECT_EQ(1u, certificate_importer_
->GetAndResetImportCount());
381 TEST_F(NetworkConfigurationUpdaterTest
,
382 DoNotAllowTrustedCertificatesFromPolicy
) {
383 net::CertificateList cert_list
;
385 net::CreateCertificateListFromFile(net::GetTestCertsDirectory(),
387 net::X509Certificate::FORMAT_AUTO
);
388 ASSERT_EQ(1u, cert_list
.size());
390 EXPECT_CALL(network_config_handler_
,
391 SetPolicy(onc::ONC_SOURCE_USER_POLICY
, _
, _
, _
));
392 certificate_importer_
->SetTrustedCertificatesResult(cert_list
);
394 UserNetworkConfigurationUpdater
* updater
=
395 CreateNetworkConfigurationUpdaterForUserPolicy(
396 false /* do not allow trusted certs from policy */,
397 true /* set certificate importer */);
398 MarkPolicyProviderInitialized();
400 // Certificates with the "Web" trust flag set should not be forwarded to
402 FakeWebTrustedCertsObserver observer
;
403 updater
->AddTrustedCertsObserver(&observer
);
405 base::RunLoop().RunUntilIdle();
407 net::CertificateList trust_anchors
;
408 updater
->GetWebTrustedCertificates(&trust_anchors
);
409 EXPECT_TRUE(trust_anchors
.empty());
411 EXPECT_TRUE(observer
.trust_anchors_
.empty());
412 updater
->RemoveTrustedCertsObserver(&observer
);
415 TEST_F(NetworkConfigurationUpdaterTest
,
416 AllowTrustedCertificatesFromPolicyInitially
) {
417 // Ignore network configuration changes.
418 EXPECT_CALL(network_config_handler_
, SetPolicy(_
, _
, _
, _
))
421 net::CertificateList cert_list
;
423 net::CreateCertificateListFromFile(net::GetTestCertsDirectory(),
425 net::X509Certificate::FORMAT_AUTO
);
426 ASSERT_EQ(1u, cert_list
.size());
428 certificate_importer_
->SetExpectedONCSource(onc::ONC_SOURCE_USER_POLICY
);
429 certificate_importer_
->SetTrustedCertificatesResult(cert_list
);
431 UserNetworkConfigurationUpdater
* updater
=
432 CreateNetworkConfigurationUpdaterForUserPolicy(
433 true /* allow trusted certs from policy */,
434 true /* set certificate importer */);
435 MarkPolicyProviderInitialized();
437 base::RunLoop().RunUntilIdle();
439 // Certificates with the "Web" trust flag set will be returned.
440 net::CertificateList trust_anchors
;
441 updater
->GetWebTrustedCertificates(&trust_anchors
);
442 EXPECT_EQ(1u, trust_anchors
.size());
445 TEST_F(NetworkConfigurationUpdaterTest
,
446 AllowTrustedCertificatesFromPolicyOnUpdate
) {
447 // Ignore network configuration changes.
448 EXPECT_CALL(network_config_handler_
, SetPolicy(_
, _
, _
, _
))
451 // Start with an empty certificate list.
452 UserNetworkConfigurationUpdater
* updater
=
453 CreateNetworkConfigurationUpdaterForUserPolicy(
454 true /* allow trusted certs from policy */,
455 true /* set certificate importer */);
456 MarkPolicyProviderInitialized();
458 FakeWebTrustedCertsObserver observer
;
459 updater
->AddTrustedCertsObserver(&observer
);
461 base::RunLoop().RunUntilIdle();
463 // Verify that the returned certificate list is empty.
465 net::CertificateList trust_anchors
;
466 updater
->GetWebTrustedCertificates(&trust_anchors
);
467 EXPECT_TRUE(trust_anchors
.empty());
469 EXPECT_TRUE(observer
.trust_anchors_
.empty());
471 // Now use a non-empty certificate list to test the observer notification.
472 net::CertificateList cert_list
;
474 net::CreateCertificateListFromFile(net::GetTestCertsDirectory(),
476 net::X509Certificate::FORMAT_AUTO
);
477 ASSERT_EQ(1u, cert_list
.size());
478 certificate_importer_
->SetTrustedCertificatesResult(cert_list
);
480 // Change to any non-empty policy, so that updates are triggered. The actual
481 // content of the policy is irrelevant.
483 policy
.Set(key::kOpenNetworkConfiguration
,
484 POLICY_LEVEL_MANDATORY
,
486 new base::StringValue(kFakeONC
),
488 UpdateProviderPolicy(policy
);
489 base::RunLoop().RunUntilIdle();
491 // Certificates with the "Web" trust flag set will be returned and forwarded
494 net::CertificateList trust_anchors
;
495 updater
->GetWebTrustedCertificates(&trust_anchors
);
496 EXPECT_EQ(1u, trust_anchors
.size());
498 EXPECT_EQ(1u, observer
.trust_anchors_
.size());
500 updater
->RemoveTrustedCertsObserver(&observer
);
503 TEST_F(NetworkConfigurationUpdaterTest
,
504 DontImportCertificateBeforeCertificateImporterSet
) {
506 policy
.Set(key::kOpenNetworkConfiguration
, POLICY_LEVEL_MANDATORY
,
507 POLICY_SCOPE_USER
, new base::StringValue(kFakeONC
), NULL
);
508 UpdateProviderPolicy(policy
);
510 EXPECT_CALL(network_config_handler_
,
511 SetPolicy(onc::ONC_SOURCE_USER_POLICY
,
513 IsEqualTo(&fake_network_configs_
),
514 IsEqualTo(&fake_global_network_config_
)));
516 UserNetworkConfigurationUpdater
* updater
=
517 CreateNetworkConfigurationUpdaterForUserPolicy(
518 true /* allow trusted certs from policy */,
519 false /* do not set certificate importer */);
520 MarkPolicyProviderInitialized();
522 Mock::VerifyAndClearExpectations(&network_config_handler_
);
523 EXPECT_EQ(0u, certificate_importer_
->GetAndResetImportCount());
525 certificate_importer_
->SetExpectedONCCertificates(fake_certificates_
);
526 certificate_importer_
->SetExpectedONCSource(onc::ONC_SOURCE_USER_POLICY
);
528 ASSERT_TRUE(certificate_importer_owned_
);
529 updater
->SetCertificateImporterForTest(certificate_importer_owned_
.Pass());
530 EXPECT_EQ(1u, certificate_importer_
->GetAndResetImportCount());
533 class NetworkConfigurationUpdaterTestWithParam
534 : public NetworkConfigurationUpdaterTest
,
535 public testing::WithParamInterface
<const char*> {
537 // Returns the currently tested ONC source.
538 onc::ONCSource
CurrentONCSource() {
539 if (GetParam() == key::kOpenNetworkConfiguration
)
540 return onc::ONC_SOURCE_USER_POLICY
;
541 DCHECK(GetParam() == key::kDeviceOpenNetworkConfiguration
);
542 return onc::ONC_SOURCE_DEVICE_POLICY
;
545 // Returns the expected username hash to push policies to
546 // ManagedNetworkConfigurationHandler.
547 std::string
ExpectedUsernameHash() {
548 if (GetParam() == key::kOpenNetworkConfiguration
)
549 return kFakeUsernameHash
;
550 return std::string();
553 size_t ExpectedImportCertificatesCallCount() {
554 if (GetParam() == key::kOpenNetworkConfiguration
)
559 void CreateNetworkConfigurationUpdater() {
560 if (GetParam() == key::kOpenNetworkConfiguration
) {
561 CreateNetworkConfigurationUpdaterForUserPolicy(
562 false /* do not allow trusted certs from policy */,
563 true /* set certificate importer */);
565 CreateNetworkConfigurationUpdaterForDevicePolicy();
570 TEST_P(NetworkConfigurationUpdaterTestWithParam
, InitialUpdates
) {
572 policy
.Set(GetParam(), POLICY_LEVEL_MANDATORY
, POLICY_SCOPE_USER
,
573 new base::StringValue(kFakeONC
), NULL
);
574 UpdateProviderPolicy(policy
);
576 EXPECT_CALL(network_config_handler_
,
577 SetPolicy(CurrentONCSource(),
578 ExpectedUsernameHash(),
579 IsEqualTo(&fake_network_configs_
),
580 IsEqualTo(&fake_global_network_config_
)));
581 certificate_importer_
->SetExpectedONCCertificates(fake_certificates_
);
582 certificate_importer_
->SetExpectedONCSource(CurrentONCSource());
584 CreateNetworkConfigurationUpdater();
585 MarkPolicyProviderInitialized();
586 EXPECT_EQ(ExpectedImportCertificatesCallCount(),
587 certificate_importer_
->GetAndResetImportCount());
590 TEST_P(NetworkConfigurationUpdaterTestWithParam
,
591 PolicyNotSetBeforePolicyProviderInitialized
) {
593 policy
.Set(GetParam(), POLICY_LEVEL_MANDATORY
, POLICY_SCOPE_USER
,
594 new base::StringValue(kFakeONC
), NULL
);
595 UpdateProviderPolicy(policy
);
597 CreateNetworkConfigurationUpdater();
599 Mock::VerifyAndClearExpectations(&network_config_handler_
);
600 EXPECT_EQ(0u, certificate_importer_
->GetAndResetImportCount());
602 EXPECT_CALL(network_config_handler_
,
603 SetPolicy(CurrentONCSource(),
604 ExpectedUsernameHash(),
605 IsEqualTo(&fake_network_configs_
),
606 IsEqualTo(&fake_global_network_config_
)));
607 certificate_importer_
->SetExpectedONCSource(CurrentONCSource());
608 certificate_importer_
->SetExpectedONCCertificates(fake_certificates_
);
610 MarkPolicyProviderInitialized();
611 EXPECT_EQ(ExpectedImportCertificatesCallCount(),
612 certificate_importer_
->GetAndResetImportCount());
615 TEST_P(NetworkConfigurationUpdaterTestWithParam
,
616 PolicyAppliedImmediatelyIfProvidersInitialized
) {
617 MarkPolicyProviderInitialized();
620 policy
.Set(GetParam(), POLICY_LEVEL_MANDATORY
, POLICY_SCOPE_USER
,
621 new base::StringValue(kFakeONC
), NULL
);
622 UpdateProviderPolicy(policy
);
624 EXPECT_CALL(network_config_handler_
,
625 SetPolicy(CurrentONCSource(),
626 ExpectedUsernameHash(),
627 IsEqualTo(&fake_network_configs_
),
628 IsEqualTo(&fake_global_network_config_
)));
629 certificate_importer_
->SetExpectedONCSource(CurrentONCSource());
630 certificate_importer_
->SetExpectedONCCertificates(fake_certificates_
);
632 CreateNetworkConfigurationUpdater();
634 EXPECT_EQ(ExpectedImportCertificatesCallCount(),
635 certificate_importer_
->GetAndResetImportCount());
638 TEST_P(NetworkConfigurationUpdaterTestWithParam
, PolicyChange
) {
639 // Ignore the initial updates.
640 EXPECT_CALL(network_config_handler_
, SetPolicy(_
, _
, _
, _
)).Times(AtLeast(1));
642 CreateNetworkConfigurationUpdater();
643 MarkPolicyProviderInitialized();
645 Mock::VerifyAndClearExpectations(&network_config_handler_
);
646 EXPECT_LE(ExpectedImportCertificatesCallCount(),
647 certificate_importer_
->GetAndResetImportCount());
649 // The Updater should update if policy changes.
650 EXPECT_CALL(network_config_handler_
,
651 SetPolicy(CurrentONCSource(),
653 IsEqualTo(&fake_network_configs_
),
654 IsEqualTo(&fake_global_network_config_
)));
655 certificate_importer_
->SetExpectedONCSource(CurrentONCSource());
656 certificate_importer_
->SetExpectedONCCertificates(fake_certificates_
);
659 policy
.Set(GetParam(), POLICY_LEVEL_MANDATORY
, POLICY_SCOPE_USER
,
660 new base::StringValue(kFakeONC
), NULL
);
661 UpdateProviderPolicy(policy
);
662 Mock::VerifyAndClearExpectations(&network_config_handler_
);
663 EXPECT_EQ(ExpectedImportCertificatesCallCount(),
664 certificate_importer_
->GetAndResetImportCount());
666 // Another update is expected if the policy goes away.
667 EXPECT_CALL(network_config_handler_
,
668 SetPolicy(CurrentONCSource(), _
, IsEmpty(), IsEmpty()));
669 certificate_importer_
->SetExpectedONCCertificates(base::ListValue());
671 policy
.Erase(GetParam());
672 UpdateProviderPolicy(policy
);
673 EXPECT_EQ(ExpectedImportCertificatesCallCount(),
674 certificate_importer_
->GetAndResetImportCount());
677 INSTANTIATE_TEST_CASE_P(NetworkConfigurationUpdaterTestWithParamInstance
,
678 NetworkConfigurationUpdaterTestWithParam
,
679 testing::Values(key::kDeviceOpenNetworkConfiguration
,
680 key::kOpenNetworkConfiguration
));
682 } // namespace policy