| Index: chrome/browser/policy/config_dir_policy_provider_unittest.cc
|
| diff --git a/chrome/browser/policy/config_dir_policy_provider_unittest.cc b/chrome/browser/policy/config_dir_policy_provider_unittest.cc
|
| index bb71813f7fccef093eb8112d75a0c34fd4b11db7..4a43a55ba03077bf5046309749faea9546bc154e 100644
|
| --- a/chrome/browser/policy/config_dir_policy_provider_unittest.cc
|
| +++ b/chrome/browser/policy/config_dir_policy_provider_unittest.cc
|
| @@ -2,58 +2,136 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include <algorithm>
|
| -
|
| +#include "base/compiler_specific.h"
|
| #include "base/file_util.h"
|
| #include "base/json/json_value_serializer.h"
|
| -#include "base/path_service.h"
|
| #include "base/scoped_temp_dir.h"
|
| #include "base/string_number_conversions.h"
|
| +#include "base/values.h"
|
| #include "chrome/browser/policy/config_dir_policy_provider.h"
|
| -#include "chrome/browser/policy/configuration_policy_pref_store.h"
|
| -#include "chrome/browser/policy/policy_map.h"
|
| -#include "content/test/test_browser_thread.h"
|
| -#include "policy/policy_constants.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using content::BrowserThread;
|
| +#include "chrome/browser/policy/configuration_policy_provider_test.h"
|
|
|
| namespace policy {
|
|
|
| -template<typename BASE>
|
| -class ConfigDirPolicyProviderTestBase : public BASE {
|
| - protected:
|
| - ConfigDirPolicyProviderTestBase() {}
|
| +namespace {
|
|
|
| - virtual void SetUp() {
|
| - ASSERT_TRUE(test_dir_.CreateUniqueTempDir());
|
| - }
|
| +class TestHarness : public PolicyProviderTestHarness {
|
| + public:
|
| + TestHarness();
|
| + virtual ~TestHarness();
|
|
|
| - // JSON-encode a dictionary and write it to a file.
|
| - void WriteConfigFile(const DictionaryValue& dict,
|
| - const std::string& file_name) {
|
| - std::string data;
|
| - JSONStringValueSerializer serializer(&data);
|
| - serializer.Serialize(dict);
|
| - const FilePath file_path(test_dir().AppendASCII(file_name));
|
| - ASSERT_TRUE(file_util::WriteFile(file_path, data.c_str(), data.size()));
|
| - }
|
| + virtual void SetUp() OVERRIDE;
|
| +
|
| + virtual AsynchronousPolicyProvider* CreateProvider(
|
| + const PolicyDefinitionList* policy_definition_list) OVERRIDE;
|
| +
|
| + virtual void InstallEmptyPolicy() OVERRIDE;
|
| + virtual void InstallStringPolicy(const std::string& policy_name,
|
| + const std::string& policy_value) OVERRIDE;
|
| + virtual void InstallIntegerPolicy(const std::string& policy_name,
|
| + int policy_value) OVERRIDE;
|
| + virtual void InstallBooleanPolicy(const std::string& policy_name,
|
| + bool policy_value) OVERRIDE;
|
| + virtual void InstallStringListPolicy(const std::string& policy_name,
|
| + const ListValue* policy_value) OVERRIDE;
|
|
|
| const FilePath& test_dir() { return test_dir_.path(); }
|
|
|
| + // JSON-encode a dictionary and write it to a file.
|
| + void WriteConfigFile(const base::DictionaryValue& dict,
|
| + const std::string& file_name);
|
| +
|
| + static PolicyProviderTestHarness* Create();
|
| +
|
| private:
|
| ScopedTempDir test_dir_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestHarness);
|
| };
|
|
|
| -class ConfigDirPolicyLoaderTest
|
| - : public ConfigDirPolicyProviderTestBase<testing::Test> {
|
| +TestHarness::TestHarness() {}
|
| +
|
| +TestHarness::~TestHarness() {}
|
| +
|
| +void TestHarness::SetUp() {
|
| + ASSERT_TRUE(test_dir_.CreateUniqueTempDir());
|
| +}
|
| +
|
| +AsynchronousPolicyProvider* TestHarness::CreateProvider(
|
| + const PolicyDefinitionList* policy_definition_list) {
|
| + return new ConfigDirPolicyProvider(policy_definition_list, test_dir());
|
| +}
|
| +
|
| +void TestHarness::InstallEmptyPolicy() {
|
| + DictionaryValue dict;
|
| + WriteConfigFile(dict, "policy");
|
| +}
|
| +
|
| +void TestHarness::InstallStringPolicy(const std::string& policy_name,
|
| + const std::string& policy_value) {
|
| + DictionaryValue dict;
|
| + dict.SetString(policy_name, policy_value);
|
| + WriteConfigFile(dict, "policy");
|
| +}
|
| +
|
| +void TestHarness::InstallIntegerPolicy(const std::string& policy_name,
|
| + int policy_value) {
|
| + DictionaryValue dict;
|
| + dict.SetInteger(policy_name, policy_value);
|
| + WriteConfigFile(dict, "policy");
|
| +}
|
| +
|
| +void TestHarness::InstallBooleanPolicy(const std::string& policy_name,
|
| + bool policy_value) {
|
| + DictionaryValue dict;
|
| + dict.SetBoolean(policy_name, policy_value);
|
| + WriteConfigFile(dict, "policy");
|
| +}
|
| +
|
| +void TestHarness::InstallStringListPolicy(const std::string& policy_name,
|
| + const ListValue* policy_value) {
|
| + DictionaryValue dict;
|
| + dict.Set(policy_name, policy_value->DeepCopy());
|
| + WriteConfigFile(dict, "policy");
|
| +}
|
| +
|
| +void TestHarness::WriteConfigFile(const base::DictionaryValue& dict,
|
| + const std::string& file_name) {
|
| + std::string data;
|
| + JSONStringValueSerializer serializer(&data);
|
| + serializer.Serialize(dict);
|
| + const FilePath file_path(test_dir().AppendASCII(file_name));
|
| + ASSERT_TRUE(file_util::WriteFile(file_path, data.c_str(), data.size()));
|
| +}
|
| +
|
| +// static
|
| +PolicyProviderTestHarness* TestHarness::Create() {
|
| + return new TestHarness();
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// Instantiate abstract test case for basic policy reading tests.
|
| +INSTANTIATE_TEST_CASE_P(
|
| + ConfigDirPolicyProviderTest,
|
| + ConfigurationPolicyProviderTest,
|
| + testing::Values(TestHarness::Create));
|
| +
|
| +// Some tests that exercise special functionality in ConfigDirPolicyLoader.
|
| +class ConfigDirPolicyLoaderTest : public testing::Test {
|
| + protected:
|
| + void SetUp() {
|
| + harness_.SetUp();
|
| + }
|
| +
|
| + TestHarness harness_;
|
| };
|
|
|
| // The preferences dictionary is expected to be empty when there are no files to
|
| // load.
|
| TEST_F(ConfigDirPolicyLoaderTest, ReadPrefsEmpty) {
|
| - ConfigDirPolicyProviderDelegate loader(test_dir());
|
| - scoped_ptr<DictionaryValue> policy(loader.Load());
|
| + ConfigDirPolicyProviderDelegate loader(harness_.test_dir());
|
| + scoped_ptr<base::DictionaryValue> policy(loader.Load());
|
| EXPECT_TRUE(policy.get());
|
| EXPECT_TRUE(policy->empty());
|
| }
|
| @@ -61,330 +139,34 @@ TEST_F(ConfigDirPolicyLoaderTest, ReadPrefsEmpty) {
|
| // Reading from a non-existent directory should result in an empty preferences
|
| // dictionary.
|
| TEST_F(ConfigDirPolicyLoaderTest, ReadPrefsNonExistentDirectory) {
|
| - FilePath non_existent_dir(test_dir().Append(FILE_PATH_LITERAL("not_there")));
|
| + FilePath non_existent_dir(
|
| + harness_.test_dir().Append(FILE_PATH_LITERAL("not_there")));
|
| ConfigDirPolicyProviderDelegate loader(non_existent_dir);
|
| - scoped_ptr<DictionaryValue> policy(loader.Load());
|
| + scoped_ptr<base::DictionaryValue> policy(loader.Load());
|
| EXPECT_TRUE(policy.get());
|
| EXPECT_TRUE(policy->empty());
|
| }
|
|
|
| -// Test reading back a single preference value.
|
| -TEST_F(ConfigDirPolicyLoaderTest, ReadPrefsSinglePref) {
|
| - DictionaryValue test_dict;
|
| - test_dict.SetString("HomepageLocation", "http://www.google.com");
|
| - WriteConfigFile(test_dict, "config_file");
|
| -
|
| - ConfigDirPolicyProviderDelegate loader(test_dir());
|
| - scoped_ptr<DictionaryValue> policy(loader.Load());
|
| - EXPECT_TRUE(policy.get());
|
| - EXPECT_TRUE(policy->Equals(&test_dict));
|
| -}
|
| -
|
| // Test merging values from different files.
|
| TEST_F(ConfigDirPolicyLoaderTest, ReadPrefsMergePrefs) {
|
| // Write a bunch of data files in order to increase the chance to detect the
|
| // provider not respecting lexicographic ordering when reading them. Since the
|
| // filesystem may return files in arbitrary order, there is no way to be sure,
|
| // but this is better than nothing.
|
| - DictionaryValue test_dict_bar;
|
| + base::DictionaryValue test_dict_bar;
|
| test_dict_bar.SetString("HomepageLocation", "http://bar.com");
|
| for (unsigned int i = 1; i <= 4; ++i)
|
| - WriteConfigFile(test_dict_bar, base::IntToString(i));
|
| - DictionaryValue test_dict_foo;
|
| + harness_.WriteConfigFile(test_dict_bar, base::IntToString(i));
|
| + base::DictionaryValue test_dict_foo;
|
| test_dict_foo.SetString("HomepageLocation", "http://foo.com");
|
| - WriteConfigFile(test_dict_foo, "9");
|
| + harness_.WriteConfigFile(test_dict_foo, "9");
|
| for (unsigned int i = 5; i <= 8; ++i)
|
| - WriteConfigFile(test_dict_bar, base::IntToString(i));
|
| + harness_.WriteConfigFile(test_dict_bar, base::IntToString(i));
|
|
|
| - ConfigDirPolicyProviderDelegate loader(test_dir());
|
| - scoped_ptr<DictionaryValue> policy(loader.Load());
|
| + ConfigDirPolicyProviderDelegate loader(harness_.test_dir());
|
| + scoped_ptr<base::DictionaryValue> policy(loader.Load());
|
| EXPECT_TRUE(policy.get());
|
| EXPECT_TRUE(policy->Equals(&test_dict_foo));
|
| }
|
|
|
| -// Holds policy type, corresponding policy key string and a valid value for use
|
| -// in parametrized value tests.
|
| -class ValueTestParams {
|
| - public:
|
| - // Assumes ownership of |test_value|.
|
| - ValueTestParams(ConfigurationPolicyType type,
|
| - const char* policy_key,
|
| - Value* test_value)
|
| - : type_(type),
|
| - policy_key_(policy_key),
|
| - test_value_(test_value) {}
|
| -
|
| - // testing::TestWithParam does copying, so provide copy constructor and
|
| - // assignment operator.
|
| - ValueTestParams(const ValueTestParams& other)
|
| - : type_(other.type_),
|
| - policy_key_(other.policy_key_),
|
| - test_value_(other.test_value_->DeepCopy()) {}
|
| -
|
| - const ValueTestParams& operator=(ValueTestParams other) {
|
| - swap(other);
|
| - return *this;
|
| - }
|
| -
|
| - void swap(ValueTestParams& other) {
|
| - std::swap(type_, other.type_);
|
| - std::swap(policy_key_, other.policy_key_);
|
| - test_value_.swap(other.test_value_);
|
| - }
|
| -
|
| - ConfigurationPolicyType type() const { return type_; }
|
| - const char* policy_key() const { return policy_key_; }
|
| - const Value* test_value() const { return test_value_.get(); }
|
| -
|
| - // Factory methods that create parameter objects for different value types.
|
| - static ValueTestParams ForStringPolicy(
|
| - ConfigurationPolicyType type,
|
| - const char* policy_key) {
|
| - return ValueTestParams(type, policy_key, Value::CreateStringValue("test"));
|
| - }
|
| - static ValueTestParams ForBooleanPolicy(
|
| - ConfigurationPolicyType type,
|
| - const char* policy_key) {
|
| - return ValueTestParams(type, policy_key, Value::CreateBooleanValue(true));
|
| - }
|
| - static ValueTestParams ForIntegerPolicy(
|
| - ConfigurationPolicyType type,
|
| - const char* policy_key) {
|
| - return ValueTestParams(type, policy_key, Value::CreateIntegerValue(42));
|
| - }
|
| - static ValueTestParams ForListPolicy(
|
| - ConfigurationPolicyType type,
|
| - const char* policy_key) {
|
| - ListValue* value = new ListValue();
|
| - value->Set(0U, Value::CreateStringValue("first"));
|
| - value->Set(1U, Value::CreateStringValue("second"));
|
| - return ValueTestParams(type, policy_key, value);
|
| - }
|
| -
|
| - private:
|
| - ConfigurationPolicyType type_;
|
| - const char* policy_key_;
|
| - scoped_ptr<Value> test_value_;
|
| -};
|
| -
|
| -// Tests whether the provider correctly reads a value from the file and forwards
|
| -// it to the store.
|
| -class ConfigDirPolicyProviderValueTest
|
| - : public ConfigDirPolicyProviderTestBase<
|
| - testing::TestWithParam<ValueTestParams> > {
|
| - protected:
|
| - ConfigDirPolicyProviderValueTest()
|
| - : ui_thread_(BrowserThread::UI, &loop_),
|
| - file_thread_(BrowserThread::FILE, &loop_) {}
|
| -
|
| - virtual void TearDown() {
|
| - loop_.RunAllPending();
|
| - }
|
| -
|
| - private:
|
| - MessageLoop loop_;
|
| - content::TestBrowserThread ui_thread_;
|
| - content::TestBrowserThread file_thread_;
|
| -};
|
| -
|
| -TEST_P(ConfigDirPolicyProviderValueTest, Default) {
|
| - ConfigDirPolicyProvider provider(GetChromePolicyDefinitionList(), test_dir());
|
| - PolicyMap policy_map;
|
| - EXPECT_TRUE(provider.Provide(&policy_map));
|
| - EXPECT_TRUE(policy_map.empty());
|
| -}
|
| -
|
| -TEST_P(ConfigDirPolicyProviderValueTest, TestValue) {
|
| - DictionaryValue dict;
|
| - dict.Set(GetParam().policy_key(), GetParam().test_value()->DeepCopy());
|
| - WriteConfigFile(dict, "policy");
|
| - ConfigDirPolicyProvider provider(GetChromePolicyDefinitionList(), test_dir());
|
| - PolicyMap policy_map;
|
| - EXPECT_TRUE(provider.Provide(&policy_map));
|
| - EXPECT_EQ(1U, policy_map.size());
|
| - const Value* value = policy_map.Get(GetParam().type());
|
| - ASSERT_TRUE(value);
|
| - EXPECT_TRUE(GetParam().test_value()->Equals(value));
|
| -}
|
| -
|
| -// Test parameters for all supported policies. testing::Values() has a limit of
|
| -// 50 parameters which is reached in this instantiation; new policies should go
|
| -// in a new instantiation.
|
| -INSTANTIATE_TEST_CASE_P(
|
| - ConfigDirPolicyProviderValueTestInstance,
|
| - ConfigDirPolicyProviderValueTest,
|
| - testing::Values(
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyHomepageLocation,
|
| - key::kHomepageLocation),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyHomepageIsNewTabPage,
|
| - key::kHomepageIsNewTabPage),
|
| - ValueTestParams::ForIntegerPolicy(
|
| - kPolicyRestoreOnStartup,
|
| - key::kRestoreOnStartup),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyRestoreOnStartupURLs,
|
| - key::kRestoreOnStartupURLs),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyDefaultSearchProviderEnabled,
|
| - key::kDefaultSearchProviderEnabled),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyDefaultSearchProviderName,
|
| - key::kDefaultSearchProviderName),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyDefaultSearchProviderKeyword,
|
| - key::kDefaultSearchProviderKeyword),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyDefaultSearchProviderSearchURL,
|
| - key::kDefaultSearchProviderSearchURL),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyDefaultSearchProviderSuggestURL,
|
| - key::kDefaultSearchProviderSuggestURL),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyDefaultSearchProviderInstantURL,
|
| - key::kDefaultSearchProviderInstantURL),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyDefaultSearchProviderIconURL,
|
| - key::kDefaultSearchProviderIconURL),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyDefaultSearchProviderEncodings,
|
| - key::kDefaultSearchProviderEncodings),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyProxyMode,
|
| - key::kProxyMode),
|
| - ValueTestParams::ForIntegerPolicy(
|
| - kPolicyProxyServerMode,
|
| - key::kProxyServerMode),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyProxyServer,
|
| - key::kProxyServer),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyProxyPacUrl,
|
| - key::kProxyPacUrl),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyProxyBypassList,
|
| - key::kProxyBypassList),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyAlternateErrorPagesEnabled,
|
| - key::kAlternateErrorPagesEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicySearchSuggestEnabled,
|
| - key::kSearchSuggestEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyDnsPrefetchingEnabled,
|
| - key::kDnsPrefetchingEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicySafeBrowsingEnabled,
|
| - key::kSafeBrowsingEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyMetricsReportingEnabled,
|
| - key::kMetricsReportingEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyPasswordManagerEnabled,
|
| - key::kPasswordManagerEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyPasswordManagerAllowShowPasswords,
|
| - key::kPasswordManagerAllowShowPasswords),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyDisabledPlugins,
|
| - key::kDisabledPlugins),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyDisabledPluginsExceptions,
|
| - key::kDisabledPluginsExceptions),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyEnabledPlugins,
|
| - key::kEnabledPlugins),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyAutoFillEnabled,
|
| - key::kAutoFillEnabled),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyApplicationLocaleValue,
|
| - key::kApplicationLocaleValue),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicySyncDisabled,
|
| - key::kSyncDisabled),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyExtensionInstallWhitelist,
|
| - key::kExtensionInstallWhitelist),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyExtensionInstallBlacklist,
|
| - key::kExtensionInstallBlacklist),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyShowHomeButton,
|
| - key::kShowHomeButton),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyPrintingEnabled,
|
| - key::kPrintingEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyInstantEnabled,
|
| - key::kInstantEnabled),
|
| - ValueTestParams::ForIntegerPolicy(
|
| - kPolicyIncognitoModeAvailability,
|
| - key::kIncognitoModeAvailability),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyDisablePluginFinder,
|
| - key::kDisablePluginFinder),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyClearSiteDataOnExit,
|
| - key::kClearSiteDataOnExit),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyDownloadDirectory,
|
| - key::kDownloadDirectory),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyDefaultBrowserSettingEnabled,
|
| - key::kDefaultBrowserSettingEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyCloudPrintProxyEnabled,
|
| - key::kCloudPrintProxyEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyTranslateEnabled,
|
| - key::kTranslateEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyAllowOutdatedPlugins,
|
| - key::kAllowOutdatedPlugins),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyAlwaysAuthorizePlugins,
|
| - key::kAlwaysAuthorizePlugins),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyBookmarkBarEnabled,
|
| - key::kBookmarkBarEnabled),
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyEditBookmarksEnabled,
|
| - key::kEditBookmarksEnabled),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyDisabledSchemes,
|
| - key::kDisabledSchemes),
|
| - ValueTestParams::ForStringPolicy(
|
| - kPolicyDiskCacheDir,
|
| - key::kDiskCacheDir),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyURLBlacklist,
|
| - key::kURLBlacklist),
|
| - ValueTestParams::ForListPolicy(
|
| - kPolicyURLWhitelist,
|
| - key::kURLWhitelist)));
|
| -
|
| -// Adds additional cases that can't be included in
|
| -// ConfigDirPolicyProviderValueTestInstance since testing::Values is limited
|
| -// to 50 entries.
|
| -INSTANTIATE_TEST_CASE_P(
|
| - ConfigDirPolicyProviderValueTestInstanceContinued,
|
| - ConfigDirPolicyProviderValueTest,
|
| - testing::Values(
|
| - ValueTestParams::ForBooleanPolicy(
|
| - kPolicyCloudPrintSubmitEnabled,
|
| - key::kCloudPrintSubmitEnabled)));
|
| -
|
| -// Test parameters for all policies that are supported on ChromeOS only.
|
| -#if defined(OS_CHROMEOS)
|
| -INSTANTIATE_TEST_CASE_P(
|
| - ConfigDirPolicyProviderValueTestChromeOSInstance,
|
| - ConfigDirPolicyProviderValueTest,
|
| - testing::Values(
|
| - ValueTestParams::ForIntegerPolicy(
|
| - kPolicyPolicyRefreshRate,
|
| - key::kPolicyRefreshRate)));
|
| -#endif
|
| -
|
| } // namespace policy
|
|
|