Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Side by Side Diff: chrome/browser/policy/cloud_policy_provider_unittest.cc

Issue 7147015: Move user cloud policy to BrowserProcess (was 6979011) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix unit_test include breakage Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/policy/cloud_policy_provider.h"
6
7 #include "base/basictypes.h"
8 #include "base/values.h"
9 #include "chrome/browser/policy/cloud_policy_cache_base.h"
10 #include "chrome/browser/policy/cloud_policy_provider_impl.h"
11 #include "chrome/browser/policy/configuration_policy_pref_store.h"
12 #include "chrome/browser/policy/mock_configuration_policy_store.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14
15 using testing::AnyNumber;
16 using testing::_;
17
18 namespace policy {
19
20 class MockCloudPolicyCache : public CloudPolicyCacheBase {
21 public:
22 MockCloudPolicyCache() {}
23 virtual ~MockCloudPolicyCache() {}
24
25 // CloudPolicyCacheBase implementation.
26 void Load() {}
27 void SetPolicy(const em::PolicyFetchResponse& policy) {}
28 bool DecodePolicyData(const em::PolicyData& policy_data,
29 PolicyMap* mandatory,
30 PolicyMap* recommended) {
31 return true;
32 }
33 bool IsReady() {
34 return true;
35 }
36
37 // Non-const accessors for underlying PolicyMaps.
38 PolicyMap* raw_mandatory_policy() {
39 return &mandatory_policy_;
40 }
41
42 PolicyMap* raw_recommended_policy() {
43 return &recommended_policy_;
44 }
45
46 void SetUnmanaged() {
47 is_unmanaged_ = true;
48 }
49
50 void set_initialized(bool initialized) {
51 initialization_complete_ = initialized;
52 }
53
54 private:
55 DISALLOW_COPY_AND_ASSIGN(MockCloudPolicyCache);
56 };
57
58 class CloudPolicyProviderTest : public testing::Test {
59 protected:
60 void CreateCloudPolicyProvider(CloudPolicyCacheBase::PolicyLevel level) {
61 cloud_policy_provider_.reset(new CloudPolicyProviderImpl(
62 ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), level));
63 }
64
65 // Appends the caches to a provider and then provides the policies to
66 // |store_|.
67 void RunCachesThroughProvider(MockCloudPolicyCache caches[], int n,
68 CloudPolicyCacheBase::PolicyLevel level) {
69 store_.reset(new MockConfigurationPolicyStore);
70 CloudPolicyProviderImpl provider(
71 policy::ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(),
72 level);
73 for (int i = 0; i < n; i++) {
74 provider.AppendCache(&caches[i]);
75 }
76 EXPECT_CALL(*store_.get(), Apply(_, _)).Times(AnyNumber());
77 provider.Provide(store_.get());
78 }
79
80 // Checks a string policy in |store_|.
81 void ExpectStringPolicy(const std::string& expected,
82 ConfigurationPolicyType type) {
83 const Value* value = store_->Get(type);
84 std::string string_value;
85 ASSERT_TRUE(value != NULL);
86 EXPECT_TRUE(value->GetAsString(&string_value));
87 EXPECT_EQ(expected, string_value);
88 }
89
90 // Checks a boolean policy in |store_|.
91 void ExpectBoolPolicy(bool expected, ConfigurationPolicyType type) {
92 const Value* value = store_->Get(type);
93 bool bool_value;
94 ASSERT_TRUE(value != NULL);
95 EXPECT_TRUE(value->GetAsBoolean(&bool_value));
96 EXPECT_EQ(expected, bool_value);
97 }
98
99 void ExpectNoPolicy(ConfigurationPolicyType type) {
100 EXPECT_TRUE(NULL == store_->Get(type));
101 }
102
103 void CombineTwoPolicyMaps(const PolicyMap& base,
104 const PolicyMap& overlay,
105 PolicyMap* out_map) {
106 DCHECK(cloud_policy_provider_.get());
107 cloud_policy_provider_->CombineTwoPolicyMaps(base, overlay, out_map);
108 }
109
110 private:
111 // Some tests need a list of policies that doesn't contain any proxy
112 // policies. Note: these policies will be handled as if they had the
113 // type of Value::TYPE_INTEGER.
114 static const ConfigurationPolicyType simple_policies[];
115
116 scoped_ptr<CloudPolicyProviderImpl> cloud_policy_provider_;
117 scoped_ptr<MockConfigurationPolicyStore> store_;
118 };
119
120 // Proxy setting distributed over multiple caches.
121 TEST_F(CloudPolicyProviderTest,
122 ProxySettingDistributedOverMultipleCaches) {
123 // There are proxy_policy_count()+1 = 6 caches and they are mixed together by
124 // one instance of CloudPolicyProvider. The first cache has some policies but
125 // no proxy-related ones. The following caches have each one proxy-policy set.
126 const int n = 6;
127 MockCloudPolicyCache caches[n];
128
129 // Prepare |cache[0]| to serve some non-proxy policies.
130 caches[0].raw_mandatory_policy()->Set(kPolicyShowHomeButton,
131 Value::CreateBooleanValue(true));
132 caches[0].raw_mandatory_policy()->Set(kPolicyIncognitoEnabled,
133 Value::CreateBooleanValue(true));
134 caches[0].raw_mandatory_policy()->Set(kPolicyTranslateEnabled,
135 Value::CreateBooleanValue(true));
136 caches[0].set_initialized(true);
137
138 // Prepare the other caches to serve one proxy-policy each.
139 caches[1].raw_mandatory_policy()->Set(kPolicyProxyMode,
140 Value::CreateStringValue("cache 1"));
141 caches[1].set_initialized(true);
142 caches[2].raw_mandatory_policy()->Set(kPolicyProxyServerMode,
143 Value::CreateIntegerValue(2));
144 caches[2].set_initialized(true);
145 caches[3].raw_mandatory_policy()->Set(kPolicyProxyServer,
146 Value::CreateStringValue("cache 3"));
147 caches[3].set_initialized(true);
148 caches[4].raw_mandatory_policy()->Set(kPolicyProxyPacUrl,
149 Value::CreateStringValue("cache 4"));
150 caches[4].set_initialized(true);
151 caches[5].raw_mandatory_policy()->Set(kPolicyProxyMode,
152 Value::CreateStringValue("cache 5"));
153 caches[5].set_initialized(true);
154
155 RunCachesThroughProvider(
156 caches, n, CloudPolicyCacheBase::POLICY_LEVEL_MANDATORY);
157
158 // Verify expectations.
159 ExpectStringPolicy("cache 1", kPolicyProxyMode);
160 ExpectNoPolicy(kPolicyProxyServerMode);
161 ExpectNoPolicy(kPolicyProxyServer);
162 ExpectNoPolicy(kPolicyProxyPacUrl);
163 ExpectBoolPolicy(true, kPolicyShowHomeButton);
164 ExpectBoolPolicy(true, kPolicyIncognitoEnabled);
165 ExpectBoolPolicy(true, kPolicyTranslateEnabled);
166 }
167
168 // Combining two PolicyMaps.
169 TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsSame) {
170 PolicyMap A, B, C;
171 CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_RECOMMENDED);
172 A.Set(kPolicyHomepageLocation,
173 Value::CreateStringValue("http://www.chromium.org"));
174 B.Set(kPolicyHomepageLocation,
175 Value::CreateStringValue("http://www.google.com"));
176 A.Set(kPolicyApplicationLocaleValue, Value::CreateStringValue("hu"));
177 B.Set(kPolicyApplicationLocaleValue, Value::CreateStringValue("us"));
178 A.Set(kPolicyDevicePolicyRefreshRate, new FundamentalValue(100));
179 B.Set(kPolicyDevicePolicyRefreshRate, new FundamentalValue(200));
180 CombineTwoPolicyMaps(A, B, &C);
181 EXPECT_TRUE(A.Equals(C));
182 }
183
184 TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsEmpty) {
185 PolicyMap A, B, C;
186 CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_RECOMMENDED);
187 CombineTwoPolicyMaps(A, B, &C);
188 EXPECT_TRUE(C.empty());
189 }
190
191 TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsPartial) {
192 PolicyMap A, B, C;
193 CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_RECOMMENDED);
194
195 A.Set(kPolicyHomepageLocation,
196 Value::CreateStringValue("http://www.chromium.org"));
197 B.Set(kPolicyHomepageLocation,
198 Value::CreateStringValue("http://www.google.com"));
199 B.Set(kPolicyApplicationLocaleValue, Value::CreateStringValue("us"));
200 A.Set(kPolicyDevicePolicyRefreshRate, new FundamentalValue(100));
201 B.Set(kPolicyDevicePolicyRefreshRate, new FundamentalValue(200));
202 CombineTwoPolicyMaps(A, B, &C);
203
204 const Value* value;
205 std::string string_value;
206 int int_value;
207 value = C.Get(kPolicyHomepageLocation);
208 ASSERT_TRUE(NULL != value);
209 EXPECT_TRUE(value->GetAsString(&string_value));
210 EXPECT_EQ("http://www.chromium.org", string_value);
211 value = C.Get(kPolicyApplicationLocaleValue);
212 ASSERT_TRUE(NULL != value);
213 EXPECT_TRUE(value->GetAsString(&string_value));
214 EXPECT_EQ("us", string_value);
215 value = C.Get(kPolicyDevicePolicyRefreshRate);
216 ASSERT_TRUE(NULL != value);
217 EXPECT_TRUE(value->GetAsInteger(&int_value));
218 EXPECT_EQ(100, int_value);
219 }
220
221 TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsProxies) {
222 const int a_value = 1;
223 const int b_value = -1;
224 PolicyMap A, B, C;
225 CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_RECOMMENDED);
226
227 A.Set(policy::kPolicyProxyMode, Value::CreateIntegerValue(a_value));
228
229 B.Set(policy::kPolicyProxyServerMode, Value::CreateIntegerValue(b_value));
230 B.Set(policy::kPolicyProxyServer, Value::CreateIntegerValue(b_value));
231 B.Set(policy::kPolicyProxyPacUrl, Value::CreateIntegerValue(b_value));
232 B.Set(policy::kPolicyProxyBypassList, Value::CreateIntegerValue(b_value));
233
234 CombineTwoPolicyMaps(A, B, &C);
235
236 EXPECT_TRUE(A.Equals(C));
237 EXPECT_FALSE(B.Equals(C));
238 }
239
240 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/policy/cloud_policy_provider_impl.cc ('k') | chrome/browser/policy/cloud_policy_subsystem.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698