Index: chrome/browser/policy/user_policy_cache_unittest.cc |
diff --git a/chrome/browser/policy/user_policy_cache_unittest.cc b/chrome/browser/policy/user_policy_cache_unittest.cc |
deleted file mode 100644 |
index 1cb33b2382cfe1decbb14f015d6fbe8897d2a551..0000000000000000000000000000000000000000 |
--- a/chrome/browser/policy/user_policy_cache_unittest.cc |
+++ /dev/null |
@@ -1,466 +0,0 @@ |
-// 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/user_policy_cache.h" |
- |
-#include <limits> |
-#include <string> |
- |
-#include "base/file_util.h" |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/message_loop.h" |
-#include "base/values.h" |
-#include "chrome/browser/policy/proto/cloud_policy.pb.h" |
-#include "chrome/browser/policy/proto/device_management_backend.pb.h" |
-#include "chrome/browser/policy/proto/device_management_local.pb.h" |
-#include "chrome/browser/policy/proto/old_generic_format.pb.h" |
-#include "content/public/test/test_browser_thread.h" |
-#include "policy/policy_constants.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using content::BrowserThread; |
-using testing::_; |
- |
-namespace em = enterprise_management; |
- |
-namespace policy { |
- |
-// Decodes a CloudPolicySettings object into a PolicyMap. |
-// The implementation is generated code in policy/cloud_policy_generated.cc. |
-void DecodePolicy(const em::CloudPolicySettings& policy, PolicyMap* policies); |
- |
-// The implementations of these methods are in cloud_policy_generated.cc. |
-Value* DecodeIntegerValue(google::protobuf::int64 value); |
-ListValue* DecodeStringList(const em::StringList& string_list); |
- |
-class MockCloudPolicyCacheBaseObserver |
- : public CloudPolicyCacheBase::Observer { |
- public: |
- MockCloudPolicyCacheBaseObserver() {} |
- virtual ~MockCloudPolicyCacheBaseObserver() {} |
- MOCK_METHOD1(OnCacheUpdate, void(CloudPolicyCacheBase*)); |
-}; |
- |
-// Tests the device management policy cache. |
-class UserPolicyCacheTest : public testing::Test { |
- protected: |
- UserPolicyCacheTest() |
- : loop_(MessageLoop::TYPE_UI), |
- ui_thread_(BrowserThread::UI, &loop_), |
- file_thread_(BrowserThread::FILE, &loop_) {} |
- |
- void SetUp() { |
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
- } |
- |
- void TearDown() { |
- loop_.RunUntilIdle(); |
- } |
- |
- // Creates a (signed) PolicyFetchResponse setting the given |homepage| and |
- // featuring the given |timestamp| (as issued by the server). |
- // Mildly hacky special feature: pass an empty string as |homepage| to get |
- // a completely empty policy. |
- em::PolicyFetchResponse* CreateHomepagePolicy( |
- const std::string& homepage, |
- const base::Time& timestamp, |
- const em::PolicyOptions::PolicyMode policy_mode) { |
- em::PolicyData signed_response; |
- if (homepage != "") { |
- em::CloudPolicySettings settings; |
- em::StringPolicyProto* homepagelocation_proto = |
- settings.mutable_homepagelocation(); |
- homepagelocation_proto->set_value(homepage); |
- homepagelocation_proto->mutable_policy_options()->set_mode(policy_mode); |
- EXPECT_TRUE( |
- settings.SerializeToString(signed_response.mutable_policy_value())); |
- } |
- signed_response.set_timestamp( |
- (timestamp - base::Time::UnixEpoch()).InMilliseconds()); |
- std::string serialized_signed_response; |
- EXPECT_TRUE(signed_response.SerializeToString(&serialized_signed_response)); |
- |
- em::PolicyFetchResponse* response = new em::PolicyFetchResponse; |
- response->set_policy_data(serialized_signed_response); |
- // TODO(jkummerow): Set proper new_public_key and signature (when |
- // implementing support for signature verification). |
- response->set_policy_data_signature("TODO"); |
- response->set_new_public_key("TODO"); |
- return response; |
- } |
- |
- void WritePolicy(const em::PolicyFetchResponse& policy) { |
- std::string data; |
- em::CachedCloudPolicyResponse cached_policy; |
- cached_policy.mutable_cloud_policy()->CopyFrom(policy); |
- EXPECT_TRUE(cached_policy.SerializeToString(&data)); |
- int size = static_cast<int>(data.size()); |
- EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size)); |
- } |
- |
- // Takes ownership of |policy_response|. |
- bool SetPolicy(UserPolicyCache* cache, |
- em::PolicyFetchResponse* policy_response) { |
- EXPECT_CALL(observer_, OnCacheUpdate(_)).Times(1); |
- cache->AddObserver(&observer_); |
- |
- scoped_ptr<em::PolicyFetchResponse> policy(policy_response); |
- bool result = cache->SetPolicy(*policy); |
- cache->SetReady(); |
- testing::Mock::VerifyAndClearExpectations(&observer_); |
- |
- cache->RemoveObserver(&observer_); |
- return result; |
- } |
- |
- void SetReady(UserPolicyCache* cache) { |
- cache->SetReady(); |
- } |
- |
- FilePath test_file() { |
- return temp_dir_.path().AppendASCII("UserPolicyCacheTest"); |
- } |
- |
- MessageLoop loop_; |
- MockCloudPolicyCacheBaseObserver observer_; |
- |
- private: |
- base::ScopedTempDir temp_dir_; |
- content::TestBrowserThread ui_thread_; |
- content::TestBrowserThread file_thread_; |
-}; |
- |
-TEST_F(UserPolicyCacheTest, DecodePolicy) { |
- em::CloudPolicySettings settings; |
- settings.mutable_homepagelocation()->set_value("chromium.org"); |
- settings.mutable_javascriptenabled()->set_value(true); |
- settings.mutable_javascriptenabled()->mutable_policy_options()->set_mode( |
- em::PolicyOptions::MANDATORY); |
- settings.mutable_policyrefreshrate()->set_value(5); |
- settings.mutable_policyrefreshrate()->mutable_policy_options()->set_mode( |
- em::PolicyOptions::RECOMMENDED); |
- settings.mutable_showhomebutton()->set_value(true); |
- settings.mutable_showhomebutton()->mutable_policy_options()->set_mode( |
- em::PolicyOptions::UNSET); |
- em::StringList* disabled_schemes = |
- settings.mutable_disabledschemes()->mutable_value(); |
- disabled_schemes->add_entries("ftp"); |
- disabled_schemes->add_entries("mailto"); |
-#ifdef NDEBUG |
- // Setting an invalid PolicyMode enum value triggers a DCHECK in protobuf. |
- settings.mutable_homepageisnewtabpage()->set_value(true); |
- settings.mutable_homepageisnewtabpage()->mutable_policy_options()->set_mode( |
- static_cast<em::PolicyOptions::PolicyMode>(-1)); |
-#endif |
- |
- PolicyMap policy; |
- DecodePolicy(settings, &policy); |
- |
- PolicyMap expected; |
- expected.Set(key::kHomepageLocation, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("chromium.org")); |
- expected.Set(key::kJavascriptEnabled, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateBooleanValue(true)); |
- expected.Set(key::kPolicyRefreshRate, |
- POLICY_LEVEL_RECOMMENDED, |
- POLICY_SCOPE_USER, |
- Value::CreateIntegerValue(5)); |
- base::ListValue expected_schemes; |
- expected_schemes.AppendString("ftp"); |
- expected_schemes.AppendString("mailto"); |
- expected.Set(key::kDisabledSchemes, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- expected_schemes.DeepCopy()); |
- |
- EXPECT_TRUE(policy.Equals(expected)); |
-} |
- |
-TEST_F(UserPolicyCacheTest, DecodeIntegerValue) { |
- const int min = std::numeric_limits<int>::min(); |
- const int max = std::numeric_limits<int>::max(); |
- scoped_ptr<Value> value( |
- DecodeIntegerValue(static_cast<google::protobuf::int64>(42))); |
- ASSERT_TRUE(value.get()); |
- base::FundamentalValue expected_42(42); |
- EXPECT_TRUE(value->Equals(&expected_42)); |
- value.reset( |
- DecodeIntegerValue(static_cast<google::protobuf::int64>(min - 1LL))); |
- EXPECT_EQ(NULL, value.get()); |
- value.reset(DecodeIntegerValue(static_cast<google::protobuf::int64>(min))); |
- ASSERT_TRUE(value.get()); |
- base::FundamentalValue expected_min(min); |
- EXPECT_TRUE(value->Equals(&expected_min)); |
- value.reset( |
- DecodeIntegerValue(static_cast<google::protobuf::int64>(max + 1LL))); |
- EXPECT_EQ(NULL, value.get()); |
- value.reset(DecodeIntegerValue(static_cast<google::protobuf::int64>(max))); |
- ASSERT_TRUE(value.get()); |
- base::FundamentalValue expected_max(max); |
- EXPECT_TRUE(value->Equals(&expected_max)); |
-} |
- |
-TEST_F(UserPolicyCacheTest, DecodeStringList) { |
- em::StringList string_list; |
- string_list.add_entries("ponies"); |
- string_list.add_entries("more ponies"); |
- scoped_ptr<ListValue> decoded(DecodeStringList(string_list)); |
- ListValue expected; |
- expected.Append(Value::CreateStringValue("ponies")); |
- expected.Append(Value::CreateStringValue("more ponies")); |
- EXPECT_TRUE(decoded->Equals(&expected)); |
-} |
- |
-TEST_F(UserPolicyCacheTest, Empty) { |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- PolicyMap empty; |
- EXPECT_TRUE(empty.Equals(*cache.policy())); |
- EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
-} |
- |
-TEST_F(UserPolicyCacheTest, LoadNoFile) { |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- cache.Load(); |
- loop_.RunUntilIdle(); |
- PolicyMap empty; |
- EXPECT_TRUE(empty.Equals(*cache.policy())); |
- EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
-} |
- |
-TEST_F(UserPolicyCacheTest, RejectFuture) { |
- scoped_ptr<em::PolicyFetchResponse> policy_response( |
- CreateHomepagePolicy("", base::Time::NowFromSystemTime() + |
- base::TimeDelta::FromMinutes(5), |
- em::PolicyOptions::MANDATORY)); |
- WritePolicy(*policy_response); |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- cache.Load(); |
- loop_.RunUntilIdle(); |
- PolicyMap empty; |
- EXPECT_TRUE(empty.Equals(*cache.policy())); |
- EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
-} |
- |
-TEST_F(UserPolicyCacheTest, LoadWithFile) { |
- scoped_ptr<em::PolicyFetchResponse> policy_response( |
- CreateHomepagePolicy("", base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY)); |
- WritePolicy(*policy_response); |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- cache.Load(); |
- loop_.RunUntilIdle(); |
- PolicyMap empty; |
- EXPECT_TRUE(empty.Equals(*cache.policy())); |
- EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); |
- EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); |
-} |
- |
-TEST_F(UserPolicyCacheTest, LoadWithData) { |
- scoped_ptr<em::PolicyFetchResponse> policy( |
- CreateHomepagePolicy("http://www.example.com", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY)); |
- WritePolicy(*policy); |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- cache.Load(); |
- loop_.RunUntilIdle(); |
- PolicyMap expected; |
- expected.Set(key::kHomepageLocation, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("http://www.example.com")); |
- EXPECT_TRUE(expected.Equals(*cache.policy())); |
-} |
- |
-TEST_F(UserPolicyCacheTest, SetPolicy) { |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- em::PolicyFetchResponse* policy = |
- CreateHomepagePolicy("http://www.example.com", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY); |
- EXPECT_TRUE(SetPolicy(&cache, policy)); |
- em::PolicyFetchResponse* policy2 = |
- CreateHomepagePolicy("http://www.example.com", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY); |
- EXPECT_TRUE(SetPolicy(&cache, policy2)); |
- PolicyMap expected; |
- expected.Set(key::kHomepageLocation, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("http://www.example.com")); |
- EXPECT_TRUE(expected.Equals(*cache.policy())); |
- policy = CreateHomepagePolicy("http://www.example.com", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::RECOMMENDED); |
- EXPECT_TRUE(SetPolicy(&cache, policy)); |
- expected.Set(key::kHomepageLocation, |
- POLICY_LEVEL_RECOMMENDED, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("http://www.example.com")); |
- EXPECT_TRUE(expected.Equals(*cache.policy())); |
-} |
- |
-TEST_F(UserPolicyCacheTest, ResetPolicy) { |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- |
- em::PolicyFetchResponse* policy = |
- CreateHomepagePolicy("http://www.example.com", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY); |
- EXPECT_TRUE(SetPolicy(&cache, policy)); |
- PolicyMap expected; |
- expected.Set(key::kHomepageLocation, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("http://www.example.com")); |
- EXPECT_TRUE(expected.Equals(*cache.policy())); |
- |
- em::PolicyFetchResponse* empty_policy = |
- CreateHomepagePolicy("", base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY); |
- EXPECT_TRUE(SetPolicy(&cache, empty_policy)); |
- PolicyMap empty; |
- EXPECT_TRUE(empty.Equals(*cache.policy())); |
-} |
- |
-TEST_F(UserPolicyCacheTest, PersistPolicy) { |
- { |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- scoped_ptr<em::PolicyFetchResponse> policy( |
- CreateHomepagePolicy("http://www.example.com", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY)); |
- EXPECT_TRUE(cache.SetPolicy(*policy)); |
- } |
- |
- loop_.RunUntilIdle(); |
- |
- EXPECT_TRUE(file_util::PathExists(test_file())); |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- cache.Load(); |
- loop_.RunUntilIdle(); |
- PolicyMap expected; |
- expected.Set(key::kHomepageLocation, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("http://www.example.com")); |
- EXPECT_TRUE(expected.Equals(*cache.policy())); |
-} |
- |
-TEST_F(UserPolicyCacheTest, FreshPolicyOverride) { |
- scoped_ptr<em::PolicyFetchResponse> policy( |
- CreateHomepagePolicy("http://www.example.com", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY)); |
- WritePolicy(*policy); |
- |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- em::PolicyFetchResponse* updated_policy = |
- CreateHomepagePolicy("http://www.chromium.org", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY); |
- EXPECT_TRUE(SetPolicy(&cache, updated_policy)); |
- |
- cache.Load(); |
- loop_.RunUntilIdle(); |
- PolicyMap expected; |
- expected.Set(key::kHomepageLocation, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("http://www.chromium.org")); |
- EXPECT_TRUE(expected.Equals(*cache.policy())); |
-} |
- |
-TEST_F(UserPolicyCacheTest, SetReady) { |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- cache.AddObserver(&observer_); |
- scoped_ptr<em::PolicyFetchResponse> policy( |
- CreateHomepagePolicy("http://www.example.com", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::MANDATORY)); |
- EXPECT_CALL(observer_, OnCacheUpdate(_)).Times(0); |
- EXPECT_TRUE(cache.SetPolicy(*policy)); |
- testing::Mock::VerifyAndClearExpectations(&observer_); |
- |
- // Switching the cache to ready should send a notification. |
- EXPECT_CALL(observer_, OnCacheUpdate(_)).Times(1); |
- SetReady(&cache); |
- cache.RemoveObserver(&observer_); |
-} |
- |
-// Test case for the temporary support for GenericNamedValues in the |
-// CloudPolicySettings protobuf. Can be removed when this support is no longer |
-// required. |
-TEST_F(UserPolicyCacheTest, OldStylePolicy) { |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- em::PolicyFetchResponse* policy = new em::PolicyFetchResponse(); |
- em::PolicyData signed_response; |
- em::LegacyChromeSettingsProto settings; |
- em::GenericNamedValue* named_value = settings.add_named_value(); |
- named_value->set_name("HomepageLocation"); |
- em::GenericValue* value_container = named_value->mutable_value(); |
- value_container->set_value_type(em::GenericValue::VALUE_TYPE_STRING); |
- value_container->set_string_value("http://www.example.com"); |
- EXPECT_TRUE( |
- settings.SerializeToString(signed_response.mutable_policy_value())); |
- base::TimeDelta timestamp = |
- base::Time::NowFromSystemTime() - base::Time::UnixEpoch(); |
- signed_response.set_timestamp(timestamp.InMilliseconds()); |
- EXPECT_TRUE( |
- signed_response.SerializeToString(policy->mutable_policy_data())); |
- |
- EXPECT_TRUE(SetPolicy(&cache, policy)); |
- PolicyMap expected; |
- expected.Set(key::kHomepageLocation, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("http://www.example.com")); |
- EXPECT_TRUE(expected.Equals(*cache.policy())); |
- // If new-style policy comes in, it should override old-style policy. |
- policy = CreateHomepagePolicy("http://www.example.com", |
- base::Time::NowFromSystemTime(), |
- em::PolicyOptions::RECOMMENDED); |
- expected.Set(key::kHomepageLocation, |
- POLICY_LEVEL_RECOMMENDED, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("http://www.example.com")); |
- EXPECT_TRUE(SetPolicy(&cache, policy)); |
- EXPECT_TRUE(expected.Equals(*cache.policy())); |
-} |
- |
-TEST_F(UserPolicyCacheTest, CheckReadyNoWaiting) { |
- UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
- EXPECT_FALSE(cache.IsReady()); |
- cache.Load(); |
- loop_.RunUntilIdle(); |
- EXPECT_TRUE(cache.IsReady()); |
-} |
- |
-TEST_F(UserPolicyCacheTest, CheckReadyWaitForFetch) { |
- UserPolicyCache cache(test_file(), true /* wait_for_policy_fetch */); |
- EXPECT_FALSE(cache.IsReady()); |
- cache.Load(); |
- loop_.RunUntilIdle(); |
- EXPECT_FALSE(cache.IsReady()); |
- cache.SetFetchingDone(); |
- EXPECT_TRUE(cache.IsReady()); |
-} |
- |
-TEST_F(UserPolicyCacheTest, CheckReadyWaitForDisk) { |
- UserPolicyCache cache(test_file(), true /* wait_for_policy_fetch */); |
- EXPECT_FALSE(cache.IsReady()); |
- cache.SetFetchingDone(); |
- EXPECT_FALSE(cache.IsReady()); |
- cache.Load(); |
- loop_.RunUntilIdle(); |
- EXPECT_TRUE(cache.IsReady()); |
-} |
- |
-} // namespace policy |