// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/policy/network_configuration_updater.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/chromeos/cros/mock_network_library.h" #include "chrome/browser/policy/mock_configuration_policy_provider.h" #include "chrome/browser/policy/policy_map.h" #include "chrome/browser/policy/policy_service_impl.h" #include "policy/policy_constants.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" using testing::Mock; using testing::Return; using testing::_; namespace policy { static const char kFakeONC[] = "{ \"GUID\": \"1234\" }"; class NetworkConfigurationUpdaterTest : public testing::TestWithParam { protected: virtual void SetUp() OVERRIDE { EXPECT_CALL(network_library_, LoadOncNetworks(_, "", _, _, _)) .WillRepeatedly(Return(true)); EXPECT_CALL(provider_, IsInitializationComplete()) .WillRepeatedly(Return(true)); PolicyServiceImpl::Providers providers; providers.push_back(&provider_); policy_service_.reset(new PolicyServiceImpl(providers)); } // Maps configuration policy name to corresponding ONC source. static chromeos::NetworkUIData::ONCSource NameToONCSource( const std::string& name) { if (name == key::kDeviceOpenNetworkConfiguration) return chromeos::NetworkUIData::ONC_SOURCE_DEVICE_POLICY; if (name == key::kOpenNetworkConfiguration) return chromeos::NetworkUIData::ONC_SOURCE_USER_POLICY; return chromeos::NetworkUIData::ONC_SOURCE_NONE; } chromeos::MockNetworkLibrary network_library_; MockConfigurationPolicyProvider provider_; scoped_ptr policy_service_; }; TEST_P(NetworkConfigurationUpdaterTest, InitialUpdate) { PolicyMap policy; policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, Value::CreateStringValue(kFakeONC)); provider_.UpdateChromePolicy(policy); EXPECT_CALL(network_library_, LoadOncNetworks(kFakeONC, "", NameToONCSource(GetParam()), false, _)) .WillOnce(Return(true)); NetworkConfigurationUpdater updater(policy_service_.get(), &network_library_); Mock::VerifyAndClearExpectations(&network_library_); } TEST_P(NetworkConfigurationUpdaterTest, AllowWebTrust) { NetworkConfigurationUpdater updater(policy_service_.get(), &network_library_); updater.set_allow_web_trust(true); EXPECT_CALL(network_library_, LoadOncNetworks(kFakeONC, "", NameToONCSource(GetParam()), true, _)) .WillOnce(Return(true)); PolicyMap policy; policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, Value::CreateStringValue(kFakeONC)); provider_.UpdateChromePolicy(policy); Mock::VerifyAndClearExpectations(&network_library_); } TEST_P(NetworkConfigurationUpdaterTest, PolicyChange) { NetworkConfigurationUpdater updater(policy_service_.get(), &network_library_); // We should update if policy changes. EXPECT_CALL(network_library_, LoadOncNetworks(kFakeONC, "", NameToONCSource(GetParam()), false, _)) .WillOnce(Return(true)); PolicyMap policy; policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, Value::CreateStringValue(kFakeONC)); provider_.UpdateChromePolicy(policy); Mock::VerifyAndClearExpectations(&network_library_); // No update if the set the same value again. EXPECT_CALL(network_library_, LoadOncNetworks(kFakeONC, "", NameToONCSource(GetParam()), false, _)) .Times(0); provider_.UpdateChromePolicy(policy); Mock::VerifyAndClearExpectations(&network_library_); // Another update is expected if the policy goes away. EXPECT_CALL(network_library_, LoadOncNetworks(NetworkConfigurationUpdater::kEmptyConfiguration, "", NameToONCSource(GetParam()), false, _)) .WillOnce(Return(true)); policy.Erase(GetParam()); provider_.UpdateChromePolicy(policy); Mock::VerifyAndClearExpectations(&network_library_); } INSTANTIATE_TEST_CASE_P( NetworkConfigurationUpdaterTestInstance, NetworkConfigurationUpdaterTest, testing::Values(key::kDeviceOpenNetworkConfiguration, key::kOpenNetworkConfiguration)); } // namespace policy