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) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind_helpers.h" 7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/callback.h" 8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/files/file_path.h" 9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/run_loop.h" 11424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/values.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/policy/device_network_configuration_updater.h" 13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/chromeos/policy/user_network_configuration_updater.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/network/fake_network_device_handler.h" 19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/network/mock_managed_network_configuration_handler.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/network/onc/onc_certificate_importer.h" 21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/network/onc/onc_test_utils.h" 22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/network/onc/onc_utils.h" 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h" 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h" 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/mock_configuration_policy_provider.h" 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_service_impl.h" 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h" 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/user_manager/user_type.h" 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/public/test/test_utils.h" 32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/base/test_data_directory.h" 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/cert/x509_certificate.h" 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/test/cert_test_util.h" 35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "policy/policy_constants.h" 36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::AnyNumber; 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::AtLeast; 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::Mock; 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::Ne; 43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::Return; 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::StrictMock; 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)using testing::_; 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace policy { 48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace { 50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)const char kFakeUserEmail[] = "fake email"; 52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)const char kFakeUsernameHash[] = "fake hash"; 53424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class FakeUser : public user_manager::User { 55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public: 56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) FakeUser() : User(kFakeUserEmail) { 57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) set_display_email(kFakeUserEmail); 58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) set_username_hash(kFakeUsernameHash); 59424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual ~FakeUser() {} 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // User overrides 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual user_manager::UserType GetType() const OVERRIDE { 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return user_manager::USER_TYPE_REGULAR; 65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private: 68424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeUser); 69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class FakeWebTrustedCertsObserver 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : public UserNetworkConfigurationUpdater::WebTrustedCertsObserver { 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeWebTrustedCertsObserver() {} 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnTrustAnchorsChanged( 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const net::CertificateList& trust_anchors) OVERRIDE { 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) trust_anchors_ = trust_anchors; 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::CertificateList trust_anchors_; 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(FakeWebTrustedCertsObserver); 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FakeNetworkDeviceHandler : public chromeos::FakeNetworkDeviceHandler { 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FakeNetworkDeviceHandler() : allow_roaming_(false) {} 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetCellularAllowRoaming(bool allow_roaming) OVERRIDE { 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) allow_roaming_ = allow_roaming; 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool allow_roaming_; 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(FakeNetworkDeviceHandler); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FakeCertificateImporter : public chromeos::onc::CertificateImporter { 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeCertificateImporter() 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : expected_onc_source_(::onc::ONC_SOURCE_UNKNOWN), call_count_(0) {} 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~FakeCertificateImporter() {} 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetTrustedCertificatesResult( 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::CertificateList onc_trusted_certificates) { 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci onc_trusted_certificates_ = onc_trusted_certificates; 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetExpectedONCCertificates(const base::ListValue& certificates) { 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_onc_certificates_.reset(certificates.DeepCopy()); 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetExpectedONCSource(::onc::ONCSource source) { 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_onc_source_ = source; 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned int GetAndResetImportCount() { 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned int count = call_count_; 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci call_count_ = 0; 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return count; 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void ImportCertificates(const base::ListValue& certificates, 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ::onc::ONCSource source, 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const DoneCallback& done_callback) OVERRIDE { 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (expected_onc_source_ != ::onc::ONC_SOURCE_UNKNOWN) 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected_onc_source_, source); 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (expected_onc_certificates_) { 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(chromeos::onc::test_utils::Equals( 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_onc_certificates_.get(), &certificates)); 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++call_count_; 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci done_callback.Run(true, onc_trusted_certificates_); 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ::onc::ONCSource expected_onc_source_; 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<base::ListValue> expected_onc_certificates_; 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::CertificateList onc_trusted_certificates_; 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned int call_count_; 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(FakeCertificateImporter); 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 147424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)const char kFakeONC[] = 148424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "{ \"NetworkConfigurations\": [" 149424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " { \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5040}\"," 150424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Type\": \"WiFi\"," 151424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Name\": \"My WiFi Network\"," 152424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"WiFi\": {" 153424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"SSID\": \"ssid-none\"," 154424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Security\": \"None\" }" 155424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " }" 156424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " ]," 1578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) " \"GlobalNetworkConfiguration\": {" 1588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) " \"AllowOnlyPolicyNetworksToAutoconnect\": true," 1598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) " }," 160424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Certificates\": [" 161424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " { \"GUID\": \"{f998f760-272b-6939-4c2beffe428697ac}\"," 162424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"PKCS12\": \"abc\"," 163424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Type\": \"Client\" }" 164424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " ]," 165424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) " \"Type\": \"UnencryptedConfiguration\"" 166424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "}"; 167424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)std::string ValueToString(const base::Value& value) { 169424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::stringstream str; 1708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) str << value; 171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return str.str(); 172424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 173424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void AppendAll(const base::ListValue& from, base::ListValue* to) { 1758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (base::ListValue::const_iterator it = from.begin(); it != from.end(); 1768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ++it) { 1778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) to->Append((*it)->DeepCopy()); 1788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 1808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 181424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Matcher to match base::Value. 182424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)MATCHER_P(IsEqualTo, 183424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) value, 184424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string(negation ? "isn't" : "is") + " equal to " + 1858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ValueToString(*value)) { 186424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return value->Equals(&arg); 187424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 188424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)MATCHER(IsEmpty, std::string(negation ? "isn't" : "is") + " empty.") { 1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return arg.empty(); 1918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 1928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 193424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)ACTION_P(SetCertificateList, list) { 194424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (arg2) 195424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) *arg2 = list; 196424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return true; 197424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 198424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 199424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace 200424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 201424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class NetworkConfigurationUpdaterTest : public testing::Test { 202424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) protected: 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NetworkConfigurationUpdaterTest() : certificate_importer_(NULL) {} 204424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 205424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void SetUp() OVERRIDE { 206424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(provider_, IsInitializationComplete(_)) 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .WillRepeatedly(Return(false)); 208424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) provider_.Init(); 209424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PolicyServiceImpl::Providers providers; 210424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) providers.push_back(&provider_); 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy_service_.reset(new PolicyServiceImpl(providers)); 212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 213424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<base::DictionaryValue> fake_toplevel_onc = 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::ReadDictionaryFromJson(kFakeONC); 215424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 216424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ListValue* network_configs = NULL; 2178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) fake_toplevel_onc->GetListWithoutPathExpansion( 2188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc::toplevel_config::kNetworkConfigurations, &network_configs); 2198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) AppendAll(*network_configs, &fake_network_configs_); 2208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::DictionaryValue* global_config = NULL; 2228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) fake_toplevel_onc->GetDictionaryWithoutPathExpansion( 2238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc::toplevel_config::kGlobalNetworkConfiguration, &global_config); 2248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) fake_global_network_config_.MergeDictionary(global_config); 225424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 226424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ListValue* certs = NULL; 2278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) fake_toplevel_onc->GetListWithoutPathExpansion( 2288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc::toplevel_config::kCertificates, &certs); 2298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) AppendAll(*certs, &fake_certificates_); 230424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_ = new FakeCertificateImporter; 232424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) certificate_importer_owned_.reset(certificate_importer_); 233424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 234424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 235424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void TearDown() OVERRIDE { 236424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_configuration_updater_.reset(); 237424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) provider_.Shutdown(); 238424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 239424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 240424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void MarkPolicyProviderInitialized() { 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock::VerifyAndClearExpectations(&provider_); 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(provider_, IsInitializationComplete(_)) 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .WillRepeatedly(Return(true)); 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) provider_.SetAutoRefresh(); 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) provider_.RefreshPolicies(); 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 250424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void UpdateProviderPolicy(const PolicyMap& policy) { 251424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) provider_.UpdateChromePolicy(policy); 252424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 253424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 254424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 255424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater* 256424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool allow_trusted_certs_from_policy, 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool set_cert_importer) { 259424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater* updater = 260424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater::CreateForUserPolicy( 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &profile_, 262424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) allow_trusted_certs_from_policy, 263424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) fake_user_, 264424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy_service_.get(), 265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) &network_config_handler_).release(); 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (set_cert_importer) { 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(certificate_importer_owned_); 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) updater->SetCertificateImporterForTest( 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) certificate_importer_owned_.Pass()); 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 271424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_configuration_updater_.reset(updater); 272424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return updater; 273424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 274424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 275424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void CreateNetworkConfigurationUpdaterForDevicePolicy() { 276424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_configuration_updater_ = 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DeviceNetworkConfigurationUpdater::CreateForDevicePolicy( 278424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy_service_.get(), 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &network_config_handler_, 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &network_device_handler_, 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::CrosSettings::Get()); 282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 283424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::ListValue fake_network_configs_; 2858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::DictionaryValue fake_global_network_config_; 2868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::ListValue fake_certificates_; 287424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) StrictMock<chromeos::MockManagedNetworkConfigurationHandler> 288424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) network_config_handler_; 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FakeNetworkDeviceHandler network_device_handler_; 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Not used directly. Required for CrosSettings. 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::ScopedTestDeviceSettingsService scoped_device_settings_service_; 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::ScopedTestCrosSettings scoped_cros_settings_; 294424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 295424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Ownership of certificate_importer_owned_ is passed to the 296424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // NetworkConfigurationUpdater. When that happens, |certificate_importer_| 297424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // continues to point to that instance but |certificate_importer_owned_| is 298424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // released. 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeCertificateImporter* certificate_importer_; 3004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<chromeos::onc::CertificateImporter> certificate_importer_owned_; 301424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 302424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) StrictMock<MockConfigurationPolicyProvider> provider_; 303424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<PolicyServiceImpl> policy_service_; 304424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) FakeUser fake_user_; 305424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestingProfile profile_; 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 308424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<NetworkConfigurationUpdater> network_configuration_updater_; 309424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 310424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 311424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetworkConfigurationUpdaterTest, CellularAllowRoaming) { 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Ignore network config updates. 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(network_config_handler_, SetPolicy(_, _, _, _)).Times(AtLeast(1)); 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Setup the DataRoaming device setting. 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get(); 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::CrosSettingsProvider* device_settings_provider = 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cros_settings->GetProvider(chromeos::kSignedDataRoamingEnabled); 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cros_settings->RemoveSettingsProvider(device_settings_provider); 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) delete device_settings_provider; 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::StubCrosSettingsProvider* stub_settings_provider = 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new chromeos::StubCrosSettingsProvider; 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cros_settings->AddSettingsProvider(stub_settings_provider); 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::CrosSettings::Get()->Set(chromeos::kSignedDataRoamingEnabled, 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FundamentalValue(false)); 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(network_device_handler_.allow_roaming_); 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateNetworkConfigurationUpdaterForDevicePolicy(); 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::CrosSettings::Get()->Set(chromeos::kSignedDataRoamingEnabled, 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FundamentalValue(true)); 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(network_device_handler_.allow_roaming_); 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::CrosSettings::Get()->Set(chromeos::kSignedDataRoamingEnabled, 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FundamentalValue(false)); 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(network_device_handler_.allow_roaming_); 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 341424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(NetworkConfigurationUpdaterTest, PolicyIsValidatedAndRepaired) { 342424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<base::DictionaryValue> onc_repaired = 3434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::test_utils::ReadTestDictionary( 344424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "repaired_toplevel_partially_invalid.onc"); 345424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 346424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ListValue* network_configs_repaired = NULL; 347424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) onc_repaired->GetListWithoutPathExpansion( 348424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) onc::toplevel_config::kNetworkConfigurations, &network_configs_repaired); 349424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(network_configs_repaired); 350424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::DictionaryValue* global_config_repaired = NULL; 3528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc_repaired->GetDictionaryWithoutPathExpansion( 3538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc::toplevel_config::kGlobalNetworkConfiguration, 3548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) &global_config_repaired); 3558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(global_config_repaired); 3568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string onc_policy = 358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chromeos::onc::test_utils::ReadTestData("toplevel_partially_invalid.onc"); 359424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PolicyMap policy; 360424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy.Set(key::kOpenNetworkConfiguration, 361424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 362424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) POLICY_SCOPE_USER, 363424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new base::StringValue(onc_policy), 364424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NULL); 365424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UpdateProviderPolicy(policy); 366424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(network_config_handler_, 3688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetPolicy(onc::ONC_SOURCE_USER_POLICY, 3698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) _, 3708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(network_configs_repaired), 3718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(global_config_repaired))); 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCSource(onc::ONC_SOURCE_USER_POLICY); 373424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 374424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false /* do not allow trusted certs from policy */, 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* set certificate importer */); 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1u, certificate_importer_->GetAndResetImportCount()); 379424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 380424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 381424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(NetworkConfigurationUpdaterTest, 382424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DoNotAllowTrustedCertificatesFromPolicy) { 383424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::CertificateList cert_list; 384424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) cert_list = 385424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), 386424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "ok_cert.pem", 387424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::X509Certificate::FORMAT_AUTO); 388424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ(1u, cert_list.size()); 389424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 390424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(network_config_handler_, 3918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetPolicy(onc::ONC_SOURCE_USER_POLICY, _, _, _)); 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetTrustedCertificatesResult(cert_list); 393424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 394424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater* updater = 395424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false /* do not allow trusted certs from policy */, 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* set certificate importer */); 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 399424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Certificates with the "Web" trust flag set should not be forwarded to 401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // observers. 402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeWebTrustedCertsObserver observer; 403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) updater->AddTrustedCertsObserver(&observer); 404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 405424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 406424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::CertificateList trust_anchors; 408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) updater->GetWebTrustedCertificates(&trust_anchors); 409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(trust_anchors.empty()); 410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(observer.trust_anchors_.empty()); 412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) updater->RemoveTrustedCertsObserver(&observer); 413424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 414424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(NetworkConfigurationUpdaterTest, 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AllowTrustedCertificatesFromPolicyInitially) { 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ignore network configuration changes. 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(network_config_handler_, SetPolicy(_, _, _, _)) 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) .Times(AnyNumber()); 420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 421424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::CertificateList cert_list; 422424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) cert_list = 423424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), 424424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "ok_cert.pem", 425424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::X509Certificate::FORMAT_AUTO); 426424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ(1u, cert_list.size()); 427424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCSource(onc::ONC_SOURCE_USER_POLICY); 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetTrustedCertificatesResult(cert_list); 430424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 431424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UserNetworkConfigurationUpdater* updater = 432424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 4335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* allow trusted certs from policy */, 4345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* set certificate importer */); 4355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 436424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 437424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 438424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Certificates with the "Web" trust flag set will be returned. 440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::CertificateList trust_anchors; 441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) updater->GetWebTrustedCertificates(&trust_anchors); 442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1u, trust_anchors.size()); 443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(NetworkConfigurationUpdaterTest, 446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AllowTrustedCertificatesFromPolicyOnUpdate) { 447f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ignore network configuration changes. 448f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(network_config_handler_, SetPolicy(_, _, _, _)) 449f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) .Times(AnyNumber()); 450f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 451f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Start with an empty certificate list. 452f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserNetworkConfigurationUpdater* updater = 453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* allow trusted certs from policy */, 4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* set certificate importer */); 4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeWebTrustedCertsObserver observer; 459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) updater->AddTrustedCertsObserver(&observer); 460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Verify that the returned certificate list is empty. 464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::CertificateList trust_anchors; 466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) updater->GetWebTrustedCertificates(&trust_anchors); 467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(trust_anchors.empty()); 468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(observer.trust_anchors_.empty()); 470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Now use a non-empty certificate list to test the observer notification. 472f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::CertificateList cert_list; 473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cert_list = 474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), 475f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ok_cert.pem", 476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::X509Certificate::FORMAT_AUTO); 477f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(1u, cert_list.size()); 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetTrustedCertificatesResult(cert_list); 479f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 480f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Change to any non-empty policy, so that updates are triggered. The actual 481f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // content of the policy is irrelevant. 482f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PolicyMap policy; 483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) policy.Set(key::kOpenNetworkConfiguration, 484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) POLICY_SCOPE_USER, 486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new base::StringValue(kFakeONC), 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NULL); 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UpdateProviderPolicy(policy); 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Certificates with the "Web" trust flag set will be returned and forwarded 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // to observers. 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::CertificateList trust_anchors; 495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) updater->GetWebTrustedCertificates(&trust_anchors); 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1u, trust_anchors.size()); 497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1u, observer.trust_anchors_.size()); 499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) updater->RemoveTrustedCertsObserver(&observer); 501424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 502424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetworkConfigurationUpdaterTest, 5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DontImportCertificateBeforeCertificateImporterSet) { 5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PolicyMap policy; 5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy.Set(key::kOpenNetworkConfiguration, POLICY_LEVEL_MANDATORY, 5075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) POLICY_SCOPE_USER, new base::StringValue(kFakeONC), NULL); 5085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UpdateProviderPolicy(policy); 5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(network_config_handler_, 5115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetPolicy(onc::ONC_SOURCE_USER_POLICY, 5125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kFakeUsernameHash, 5135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IsEqualTo(&fake_network_configs_), 5145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IsEqualTo(&fake_global_network_config_))); 5155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UserNetworkConfigurationUpdater* updater = 5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 5185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* allow trusted certs from policy */, 5195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false /* do not set certificate importer */); 5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock::VerifyAndClearExpectations(&network_config_handler_); 5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0u, certificate_importer_->GetAndResetImportCount()); 5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCCertificates(fake_certificates_); 5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCSource(onc::ONC_SOURCE_USER_POLICY); 5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(certificate_importer_owned_); 5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) updater->SetCertificateImporterForTest(certificate_importer_owned_.Pass()); 5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1u, certificate_importer_->GetAndResetImportCount()); 5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 533424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class NetworkConfigurationUpdaterTestWithParam 534424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) : public NetworkConfigurationUpdaterTest, 535424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public testing::WithParamInterface<const char*> { 536424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) protected: 537424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Returns the currently tested ONC source. 538424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) onc::ONCSource CurrentONCSource() { 539424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (GetParam() == key::kOpenNetworkConfiguration) 540424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return onc::ONC_SOURCE_USER_POLICY; 541424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(GetParam() == key::kDeviceOpenNetworkConfiguration); 542424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return onc::ONC_SOURCE_DEVICE_POLICY; 543424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 544424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 545424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Returns the expected username hash to push policies to 546424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // ManagedNetworkConfigurationHandler. 547424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string ExpectedUsernameHash() { 548424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (GetParam() == key::kOpenNetworkConfiguration) 549424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return kFakeUsernameHash; 550424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return std::string(); 551424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 552424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t ExpectedImportCertificatesCallCount() { 5545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (GetParam() == key::kOpenNetworkConfiguration) 5555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return 1u; 5565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return 0u; 5575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 559424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void CreateNetworkConfigurationUpdater() { 560424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (GetParam() == key::kOpenNetworkConfiguration) { 561424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForUserPolicy( 5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false /* do not allow trusted certs from policy */, 5635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* set certificate importer */); 564424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } else { 565424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdaterForDevicePolicy(); 566424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 567424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 568424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 569424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 570424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_P(NetworkConfigurationUpdaterTestWithParam, InitialUpdates) { 571424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PolicyMap policy; 572424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 573424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new base::StringValue(kFakeONC), NULL); 574424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UpdateProviderPolicy(policy); 575424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 576424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(network_config_handler_, 577424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SetPolicy(CurrentONCSource(), 578424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ExpectedUsernameHash(), 5798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_network_configs_), 5808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_global_network_config_))); 5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCCertificates(fake_certificates_); 5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCSource(CurrentONCSource()); 583424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 584424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdater(); 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ExpectedImportCertificatesCallCount(), 5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->GetAndResetImportCount()); 588424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 589424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_P(NetworkConfigurationUpdaterTestWithParam, 5915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PolicyNotSetBeforePolicyProviderInitialized) { 5925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PolicyMap policy; 5935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 5945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new base::StringValue(kFakeONC), NULL); 5955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UpdateProviderPolicy(policy); 5965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateNetworkConfigurationUpdater(); 5985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock::VerifyAndClearExpectations(&network_config_handler_); 6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0u, certificate_importer_->GetAndResetImportCount()); 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(network_config_handler_, 6035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetPolicy(CurrentONCSource(), 6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExpectedUsernameHash(), 6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IsEqualTo(&fake_network_configs_), 6065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IsEqualTo(&fake_global_network_config_))); 6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCSource(CurrentONCSource()); 6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCCertificates(fake_certificates_); 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ExpectedImportCertificatesCallCount(), 6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->GetAndResetImportCount()); 6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_P(NetworkConfigurationUpdaterTestWithParam, 6165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PolicyAppliedImmediatelyIfProvidersInitialized) { 6175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 6185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PolicyMap policy; 6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new base::StringValue(kFakeONC), NULL); 6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UpdateProviderPolicy(policy); 6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(network_config_handler_, 6255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetPolicy(CurrentONCSource(), 6265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExpectedUsernameHash(), 6275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IsEqualTo(&fake_network_configs_), 6285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IsEqualTo(&fake_global_network_config_))); 6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCSource(CurrentONCSource()); 6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCCertificates(fake_certificates_); 6315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateNetworkConfigurationUpdater(); 6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ExpectedImportCertificatesCallCount(), 6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->GetAndResetImportCount()); 6365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 637424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 638424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_P(NetworkConfigurationUpdaterTestWithParam, PolicyChange) { 639424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Ignore the initial updates. 6408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(network_config_handler_, SetPolicy(_, _, _, _)).Times(AtLeast(1)); 6415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 642424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateNetworkConfigurationUpdater(); 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MarkPolicyProviderInitialized(); 6445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 645424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Mock::VerifyAndClearExpectations(&network_config_handler_); 6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_LE(ExpectedImportCertificatesCallCount(), 6471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->GetAndResetImportCount()); 648424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 649424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // The Updater should update if policy changes. 6508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(network_config_handler_, 6518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetPolicy(CurrentONCSource(), 6528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) _, 6538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_network_configs_), 6548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IsEqualTo(&fake_global_network_config_))); 6551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCSource(CurrentONCSource()); 6561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCCertificates(fake_certificates_); 657424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 658424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PolicyMap policy; 659424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 660424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new base::StringValue(kFakeONC), NULL); 661424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UpdateProviderPolicy(policy); 662424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Mock::VerifyAndClearExpectations(&network_config_handler_); 6631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ExpectedImportCertificatesCallCount(), 6641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->GetAndResetImportCount()); 665424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 666424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Another update is expected if the policy goes away. 6678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_CALL(network_config_handler_, 6688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetPolicy(CurrentONCSource(), _, IsEmpty(), IsEmpty())); 6691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->SetExpectedONCCertificates(base::ListValue()); 670424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 671424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) policy.Erase(GetParam()); 672424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) UpdateProviderPolicy(policy); 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ExpectedImportCertificatesCallCount(), 6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci certificate_importer_->GetAndResetImportCount()); 675424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 676424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 677424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(NetworkConfigurationUpdaterTestWithParamInstance, 678424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NetworkConfigurationUpdaterTestWithParam, 679424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) testing::Values(key::kDeviceOpenNetworkConfiguration, 680424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) key::kOpenNetworkConfiguration)); 681424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 682424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace policy 683