network_configuration_updater_unittest.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// found in the LICENSE file. 4424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 6424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/callback.h" 7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/files/file_path.h" 8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/run_loop.h" 10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/values.h" 11424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/chromeos/login/user.h" 12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/chromeos/policy/policy_cert_verifier.h" 13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/chromeos/policy/user_network_configuration_updater.h" 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/policy/external_data_fetcher.h" 15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/policy/mock_configuration_policy_provider.h" 16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/policy/policy_map.h" 17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/policy/policy_service_impl.h" 18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/network/mock_managed_network_configuration_handler.h" 19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/network/onc/mock_certificate_importer.h" 20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/network/onc/onc_test_utils.h" 21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/network/onc/onc_utils.h" 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h" 23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/public/test/test_utils.h" 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/base/test_data_directory.h" 26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/cert/x509_certificate.h" 27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/test/cert_test_util.h" 28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "policy/policy_constants.h" 29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::AnyNumber; 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::AtLeast; 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::Mock; 35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::Ne; 36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::Return; 37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::StrictMock; 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::_; 39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace policy { 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace { 43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)const char kFakeUserEmail[] = "fake email"; 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)const char kFakeUsernameHash[] = "fake hash"; 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class FakeUser : public chromeos::User { 48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public: 49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) FakeUser() : User(kFakeUserEmail) { 50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) set_display_email(kFakeUserEmail); 51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) set_username_hash(kFakeUsernameHash); 52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 53424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual ~FakeUser() {} 54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // User overrides 56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual UserType GetType() const OVERRIDE { 57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return USER_TYPE_REGULAR; 58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 59424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private: 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeUser); 62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 63424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)const char kFakeONC[] = 65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "{ \"NetworkConfigurations\": [" 66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " { \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5040}\"," 67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Type\": \"WiFi\"," 68424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Name\": \"My WiFi Network\"," 69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"WiFi\": {" 70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"SSID\": \"ssid-none\"," 71424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Security\": \"None\" }" 72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " }" 73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " ]," 748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) " \"GlobalNetworkConfiguration\": {" 758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) " \"AllowOnlyPolicyNetworksToAutoconnect\": true," 768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) " }," 77424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Certificates\": [" 78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " { \"GUID\": \"{f998f760-272b-6939-4c2beffe428697ac}\"," 79424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"PKCS12\": \"abc\"," 80424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Type\": \"Client\" }" 81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " ]," 82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Type\": \"UnencryptedConfiguration\"" 83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "}"; 84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)std::string ValueToString(const base::Value& value) { 86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::stringstream str; 878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) str << value; 88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return str.str(); 89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 90424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void AppendAll(const base::ListValue& from, base::ListValue* to) { 928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (base::ListValue::const_iterator it = from.begin(); it != from.end(); 938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ++it) { 948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) to->Append((*it)->DeepCopy()); 958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 98424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Matcher to match base::Value. 99424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)MATCHER_P(IsEqualTo, 100424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) value, 101424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string(negation ? "isn't" : "is") + " equal to " + 1028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ValueToString(*value)) { 103424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return value->Equals(&arg); 104424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 105424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)MATCHER(IsEmpty, std::string(negation ? "isn't" : "is") + " empty.") { 1078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return arg.empty(); 1088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 1098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)ACTION_P(SetCertificateList, list) { 111424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (arg2) 112424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) *arg2 = list; 113424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return true; 114424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 115424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 116424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace 117424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 118424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class NetworkConfigurationUpdaterTest : public testing::Test { 119424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) protected: 120424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NetworkConfigurationUpdaterTest() { 121424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 122424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 123424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void SetUp() OVERRIDE { 124424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(provider_, IsInitializationComplete(_)) 125424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) .WillRepeatedly(Return(true)); 126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) provider_.Init(); 127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PolicyServiceImpl::Providers providers; 128424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) providers.push_back(&provider_); 129424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy_service_.reset(new PolicyServiceImpl(providers)); 130424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 131424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<base::DictionaryValue> fake_toplevel_onc = 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::ReadDictionaryFromJson(kFakeONC); 133424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 134424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ListValue* network_configs = NULL; 1358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) fake_toplevel_onc->GetListWithoutPathExpansion( 1368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc::toplevel_config::kNetworkConfigurations, &network_configs); 1378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) AppendAll(*network_configs, &fake_network_configs_); 1388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::DictionaryValue* global_config = NULL; 1408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) fake_toplevel_onc->GetDictionaryWithoutPathExpansion( 1418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc::toplevel_config::kGlobalNetworkConfiguration, &global_config); 1428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) fake_global_network_config_.MergeDictionary(global_config); 143424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 144424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ListValue* certs = NULL; 1458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) fake_toplevel_onc->GetListWithoutPathExpansion( 1468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc::toplevel_config::kCertificates, &certs); 1478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) AppendAll(*certs, &fake_certificates_); 148424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) certificate_importer_ = 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new StrictMock<chromeos::onc::MockCertificateImporter>(); 151424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) certificate_importer_owned_.reset(certificate_importer_); 152424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 153424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 154424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void TearDown() OVERRIDE { 155424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_configuration_updater_.reset(); 156424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) provider_.Shutdown(); 157424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 158424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 159424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 160424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void UpdateProviderPolicy(const PolicyMap& policy) { 161424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) provider_.UpdateChromePolicy(policy); 162424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 163424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 164424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 165424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater* 166424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 167424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool allow_trusted_certs_from_policy) { 168424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater* updater = 169424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater::CreateForUserPolicy( 170424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) allow_trusted_certs_from_policy, 171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) fake_user_, 172424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) certificate_importer_owned_.Pass(), 173424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy_service_.get(), 174424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) &network_config_handler_).release(); 175424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_configuration_updater_.reset(updater); 176424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return updater; 177424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 178424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 179424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void CreateNetworkConfigurationUpdaterForDevicePolicy() { 180424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_configuration_updater_ = 181424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NetworkConfigurationUpdater::CreateForDevicePolicy( 182424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) certificate_importer_owned_.Pass(), 183424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy_service_.get(), 184424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) &network_config_handler_); 185424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 186424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::ListValue fake_network_configs_; 1888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::DictionaryValue fake_global_network_config_; 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::ListValue fake_certificates_; 190424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) StrictMock<chromeos::MockManagedNetworkConfigurationHandler> 191424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_config_handler_; 192424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 193424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Ownership of certificate_importer_owned_ is passed to the 194424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // NetworkConfigurationUpdater. When that happens, |certificate_importer_| 195424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // continues to point to that instance but |certificate_importer_owned_| is 196424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // released. 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) StrictMock<chromeos::onc::MockCertificateImporter>* certificate_importer_; 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<chromeos::onc::CertificateImporter> certificate_importer_owned_; 199424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 200424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) StrictMock<MockConfigurationPolicyProvider> provider_; 201424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<PolicyServiceImpl> policy_service_; 202424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) FakeUser fake_user_; 203424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 204424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<NetworkConfigurationUpdater> network_configuration_updater_; 205424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 206424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 207424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 208424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(NetworkConfigurationUpdaterTest, PolicyIsValidatedAndRepaired) { 209424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string onc_policy = 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::test_utils::ReadTestData("toplevel_partially_invalid.onc"); 211424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<base::DictionaryValue> onc_repaired = 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::test_utils::ReadTestDictionary( 214424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "repaired_toplevel_partially_invalid.onc"); 215424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 216424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ListValue* network_configs_repaired = NULL; 217424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) onc_repaired->GetListWithoutPathExpansion( 218424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) onc::toplevel_config::kNetworkConfigurations, &network_configs_repaired); 219424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(network_configs_repaired); 220424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::DictionaryValue* global_config_repaired = NULL; 2228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc_repaired->GetDictionaryWithoutPathExpansion( 2238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc::toplevel_config::kGlobalNetworkConfiguration, 2248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) &global_config_repaired); 2258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(global_config_repaired); 2268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 227424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PolicyMap policy; 228424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy.Set(key::kOpenNetworkConfiguration, 229424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 230424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) POLICY_SCOPE_USER, 231424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new base::StringValue(onc_policy), 232424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NULL); 233424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UpdateProviderPolicy(policy); 234424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(network_config_handler_, 2368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetPolicy(onc::ONC_SOURCE_USER_POLICY, 2378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) _, 2388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(network_configs_repaired), 2398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(global_config_repaired))); 240424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(*certificate_importer_, 241424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ImportCertificates(_, onc::ONC_SOURCE_USER_POLICY, _)); 242424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 244424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false /* do not allow trusted certs from policy */ ); 245424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 246424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 247424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(NetworkConfigurationUpdaterTest, 248424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DoNotAllowTrustedCertificatesFromPolicy) { 249424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::CertificateList cert_list; 250424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) cert_list = 251424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), 252424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "ok_cert.pem", 253424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::X509Certificate::FORMAT_AUTO); 254424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ(1u, cert_list.size()); 255424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 256424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(network_config_handler_, 2578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetPolicy(onc::ONC_SOURCE_USER_POLICY, _, _, _)); 258424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(*certificate_importer_, ImportCertificates(_, _, _)) 259424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) .WillRepeatedly(SetCertificateList(cert_list)); 260424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 261424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater* updater = 262424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 263424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false /* do not allow trusted certs from policy */); 264424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Certificates with the "Web" trust flag set should not be forwarded to the 266424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // trust provider. 267424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy::PolicyCertVerifier cert_verifier(( 268424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::Closure() /* no policy cert trusted callback */)); 269424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) updater->SetPolicyCertVerifier(&cert_verifier); 270424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 271424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(cert_verifier.GetAdditionalTrustAnchors().empty()); 272424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 273424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // |cert_verifier| must outlive the updater. 274424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_configuration_updater_.reset(); 275424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 276424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 277424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(NetworkConfigurationUpdaterTest, AllowTrustedCertificatesFromPolicy) { 278424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::CertificateList cert_list; 279424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) cert_list = 280424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), 281424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "ok_cert.pem", 282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::X509Certificate::FORMAT_AUTO); 283424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ(1u, cert_list.size()); 284424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 285424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(network_config_handler_, 2868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetPolicy(onc::ONC_SOURCE_USER_POLICY, _, _, _)); 287424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(*certificate_importer_, 288424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ImportCertificates(_, onc::ONC_SOURCE_USER_POLICY, _)) 289424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) .WillRepeatedly(SetCertificateList(cert_list)); 290424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 291424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater* updater = 292424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 293424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) true /* allow trusted certs from policy */); 294424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 295424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Certificates with the "Web" trust flag set should be forwarded to the 296424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // trust provider. 297424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy::PolicyCertVerifier cert_verifier(( 298424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::Closure() /* no policy cert trusted callback */)); 299424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) updater->SetPolicyCertVerifier(&cert_verifier); 300424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 301424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(1u, cert_verifier.GetAdditionalTrustAnchors().size()); 302424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 303424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // |cert_verifier| must outlive the updater. 304424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_configuration_updater_.reset(); 305424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 306424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 307424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class NetworkConfigurationUpdaterTestWithParam 308424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) : public NetworkConfigurationUpdaterTest, 309424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public testing::WithParamInterface<const char*> { 310424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) protected: 311424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Returns the currently tested ONC source. 312424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) onc::ONCSource CurrentONCSource() { 313424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (GetParam() == key::kOpenNetworkConfiguration) 314424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return onc::ONC_SOURCE_USER_POLICY; 315424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(GetParam() == key::kDeviceOpenNetworkConfiguration); 316424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return onc::ONC_SOURCE_DEVICE_POLICY; 317424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 318424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 319424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Returns the expected username hash to push policies to 320424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // ManagedNetworkConfigurationHandler. 321424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string ExpectedUsernameHash() { 322424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (GetParam() == key::kOpenNetworkConfiguration) 323424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return kFakeUsernameHash; 324424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return std::string(); 325424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 326424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 327424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void CreateNetworkConfigurationUpdater() { 328424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (GetParam() == key::kOpenNetworkConfiguration) { 329424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 330424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false /* do not allow trusted certs from policy */); 331424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } else { 332424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForDevicePolicy(); 333424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 334424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 335424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 336424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 337424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_P(NetworkConfigurationUpdaterTestWithParam, InitialUpdates) { 338424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PolicyMap policy; 339424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 340424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new base::StringValue(kFakeONC), NULL); 341424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UpdateProviderPolicy(policy); 342424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 343424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(network_config_handler_, 344424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SetPolicy(CurrentONCSource(), 345424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ExpectedUsernameHash(), 3468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_network_configs_), 3478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_global_network_config_))); 348424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(*certificate_importer_, 349424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ImportCertificates( 3508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_certificates_), CurrentONCSource(), _)); 351424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 352424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdater(); 353424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 354424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 355424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 356424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_P(NetworkConfigurationUpdaterTestWithParam, PolicyChange) { 357424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Ignore the initial updates. 3588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(network_config_handler_, SetPolicy(_, _, _, _)).Times(AtLeast(1)); 359424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(*certificate_importer_, ImportCertificates(_, _, _)) 360424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) .Times(AtLeast(1)); 361424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdater(); 362424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Mock::VerifyAndClearExpectations(&network_config_handler_); 363424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Mock::VerifyAndClearExpectations(certificate_importer_); 364424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 365424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // The Updater should update if policy changes. 3668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(network_config_handler_, 3678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetPolicy(CurrentONCSource(), 3688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) _, 3698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_network_configs_), 3708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_global_network_config_))); 371424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(*certificate_importer_, 372424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ImportCertificates( 3738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_certificates_), CurrentONCSource(), _)); 374424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 375424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PolicyMap policy; 376424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 377424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new base::StringValue(kFakeONC), NULL); 378424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UpdateProviderPolicy(policy); 379424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Mock::VerifyAndClearExpectations(&network_config_handler_); 380424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Mock::VerifyAndClearExpectations(certificate_importer_); 381424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 382424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Another update is expected if the policy goes away. 3838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(network_config_handler_, 3848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetPolicy(CurrentONCSource(), _, IsEmpty(), IsEmpty())); 385424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(*certificate_importer_, 3868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ImportCertificates(IsEmpty(), CurrentONCSource(), _)); 387424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 388424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy.Erase(GetParam()); 389424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UpdateProviderPolicy(policy); 390424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 391424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 392424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(NetworkConfigurationUpdaterTestWithParamInstance, 393424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NetworkConfigurationUpdaterTestWithParam, 394424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) testing::Values(key::kDeviceOpenNetworkConfiguration, 395424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) key::kOpenNetworkConfiguration)); 396424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 397424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace policy 398