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

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: rebase Created 9 years, 6 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
34 // Non-const accessors for underlying PolicyMaps.
35 PolicyMap* raw_mandatory_policy() {
36 return &mandatory_policy_;
37 }
38
39 PolicyMap* raw_recommended_policy() {
40 return &recommended_policy_;
41 }
42
43 void SetUnmanaged() {
44 is_unmanaged_ = true;
45 }
46
47 void set_initialized(bool initialized) {
48 initialization_complete_ = initialized;
49 }
50
51 private:
52 DISALLOW_COPY_AND_ASSIGN(MockCloudPolicyCache);
53 };
54
55 class CloudPolicyProviderTest : public testing::Test {
56 protected:
57 void CreateCloudPolicyProvider(CloudPolicyCacheBase::PolicyLevel level) {
58 cloud_policy_provider_.reset(new CloudPolicyProviderImpl(
59 ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), level));
60 }
61
62 // Appends the caches to a provider and then provides the policies to
63 // |store_|.
64 void RunCachesThroughProvider(MockCloudPolicyCache caches[], int n,
65 CloudPolicyCacheBase::PolicyLevel level) {
66 store_.reset(new MockConfigurationPolicyStore);
67 CloudPolicyProviderImpl provider(
68 policy::ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(),
69 level);
70 for (int i = 0; i < n; i++) {
71 provider.AppendCache(&caches[i]);
72 }
73 EXPECT_CALL(*store_.get(), Apply(_, _)).Times(AnyNumber());
74 provider.Provide(store_.get());
75 }
76
77 // Checks a string policy in |store_|.
78 void ExpectStringPolicy(const std::string& expected,
Mattias Nissler (ping if slow) 2011/06/24 09:16:46 Again, can't we just check the policy map instead
gfeher 2011/06/24 15:32:44 We can, then I would have to extract the private m
Mattias Nissler (ping if slow) 2011/06/24 17:27:17 Actually you are right in not doing it, I had mixe
79 ConfigurationPolicyType type) {
80 const Value* value = store_->Get(type);
81 std::string string_value;
82 EXPECT_TRUE(value != NULL);
83 EXPECT_TRUE(value->GetAsString(&string_value));
84 EXPECT_EQ(expected, string_value);
85 }
86
87 // Checks a boolean policy in |store_|.
88 void ExpectBoolPolicy(bool expected, ConfigurationPolicyType type) {
89 const Value* value = store_->Get(type);
90 bool bool_value;
91 EXPECT_TRUE(value != NULL);
92 EXPECT_TRUE(value->GetAsBoolean(&bool_value));
93 EXPECT_EQ(expected, bool_value);
94 }
95
96 void ExpectNoPolicy(ConfigurationPolicyType type) {
97 EXPECT_TRUE(NULL == store_->Get(type));
98 }
99
100 void CombineTwoPolicyMaps(const PolicyMap& base,
101 const PolicyMap& overlay,
102 PolicyMap* out_map) {
103 DCHECK(cloud_policy_provider_.get());
104 cloud_policy_provider_->CombineTwoPolicyMaps(base, overlay, out_map);
105 }
106
107 static int simple_list_length();
108
109 ConfigurationPolicyType simple_list_policy_type(int id) {
110 DCHECK(id < simple_list_length());
111 DCHECK(!is_proxy_policy(simple_policies[id]));
112 return simple_policies[id];
113 }
114
115 int proxy_policy_count() {
116 return CloudPolicyProviderImpl::proxy_policy_count();
117 }
118
119 bool is_proxy_policy(ConfigurationPolicyType policy) {
120 return CloudPolicyProviderImpl::is_proxy_policy(policy);
121 }
122
123 ConfigurationPolicyType get_proxy_policy(int i) {
124 DCHECK(i < proxy_policy_count());
125 return CloudPolicyProviderImpl::proxy_policies[i];
126 }
127
128 private:
129 // Some tests need a list of policies that doesn't contain any proxy
130 // policies. Note: these policies will be handled as if they had the
131 // type of Value::TYPE_INTEGER.
132 static const ConfigurationPolicyType simple_policies[];
133
134 scoped_ptr<CloudPolicyProviderImpl> cloud_policy_provider_;
135 scoped_ptr<MockConfigurationPolicyStore> store_;
136 };
137
138 // static
139 const ConfigurationPolicyType
140 CloudPolicyProviderTest::simple_policies[] = {
141 kPolicyHomepageLocation,
142 kPolicyHomepageIsNewTabPage,
143 kPolicyRestoreOnStartup,
144 kPolicyRestoreOnStartupURLs,
145 kPolicyDefaultSearchProviderEnabled,
146 kPolicyDefaultSearchProviderName,
147 kPolicyDefaultSearchProviderKeyword,
148 kPolicyDefaultSearchProviderSearchURL,
149 kPolicyDefaultSearchProviderSuggestURL,
150 kPolicyDefaultSearchProviderInstantURL,
151 kPolicyDefaultSearchProviderIconURL,
152 kPolicyDefaultSearchProviderEncodings,
153 };
154
155 // static
156 int CloudPolicyProviderTest::simple_list_length() {
157 return arraysize(simple_policies);
158 }
159
160 TEST_F(CloudPolicyProviderTest, ProxyPolicies) {
161 EXPECT_EQ(5, proxy_policy_count()) <<
162 "Please update CloudPolicyProviderTest with the new proxy policies.";
Mattias Nissler (ping if slow) 2011/06/24 09:16:46 Meh! What is this test good for? Just remove.
gfeher 2011/06/24 15:32:44 Done.
163 }
164
165 // Proxy setting distributed over multiple caches.
166 TEST_F(CloudPolicyProviderTest,
167 ProxySettingDistributedOverMultipleCaches) {
168 // There are proxy_policy_count()+1 = 6 caches and they are mixed together by
169 // one instance of CloudPolicyProvider. The first cache has some policies but
170 // no proxy-related ones. The following caches have each one proxy-policy set.
171 const int n = 6;
172 MockCloudPolicyCache caches[n];
173
174 // Prepare |cache[0]| to serve some non-proxy policies.
175 caches[0].raw_mandatory_policy()->Set(kPolicyShowHomeButton,
176 Value::CreateBooleanValue(true));
177 caches[0].raw_mandatory_policy()->Set(kPolicyIncognitoEnabled,
178 Value::CreateBooleanValue(true));
179 caches[0].raw_mandatory_policy()->Set(kPolicyTranslateEnabled,
180 Value::CreateBooleanValue(true));
181 caches[0].set_initialized(true);
182
183 // Prepare the other caches to serve one proxy-policy each.
184 caches[1].raw_mandatory_policy()->Set(kPolicyProxyMode,
185 Value::CreateStringValue("cache 1"));
186 caches[1].set_initialized(true);
187 caches[2].raw_mandatory_policy()->Set(kPolicyProxyServerMode,
188 Value::CreateIntegerValue(2));
189 caches[2].set_initialized(true);
190 caches[3].raw_mandatory_policy()->Set(kPolicyProxyServer,
191 Value::CreateStringValue("cache 3"));
192 caches[3].set_initialized(true);
193 caches[4].raw_mandatory_policy()->Set(kPolicyProxyPacUrl,
194 Value::CreateStringValue("cache 4"));
195 caches[4].set_initialized(true);
196 caches[5].raw_mandatory_policy()->Set(kPolicyProxyMode,
197 Value::CreateStringValue("cache 5"));
198 caches[5].set_initialized(true);
199
200 RunCachesThroughProvider(
201 caches, n, CloudPolicyCacheBase::POLICY_LEVEL_MANDATORY);
202
203 // Verify expectations.
204 ExpectStringPolicy("cache 1", kPolicyProxyMode);
205 ExpectNoPolicy(kPolicyProxyServerMode);
206 ExpectNoPolicy(kPolicyProxyServer);
207 ExpectNoPolicy(kPolicyProxyPacUrl);
208 ExpectBoolPolicy(true, kPolicyShowHomeButton);
209 ExpectBoolPolicy(true, kPolicyIncognitoEnabled);
210 ExpectBoolPolicy(true, kPolicyTranslateEnabled);
211 }
212
213 // Combining two PolicyMaps.
214 TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsSame) {
215 PolicyMap A, B, C;
216 CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_RECOMMENDED);
217 for (int i = 0; i < simple_list_length(); ++i) {
Mattias Nissler (ping if slow) 2011/06/24 09:16:46 Still using loops? Can't we just get rid of the lo
gfeher 2011/06/24 15:32:44 Done.
218 A.Set(simple_list_policy_type(i), Value::CreateIntegerValue(i));
219 B.Set(simple_list_policy_type(i), Value::CreateIntegerValue(-1 * i));
220 }
221 CombineTwoPolicyMaps(A, B, &C);
222 EXPECT_TRUE(A.Equals(C));
223 }
224
225 TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsEmpty) {
226 PolicyMap A, B, C;
227 CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_RECOMMENDED);
228 CombineTwoPolicyMaps(A, B, &C);
229 EXPECT_TRUE(C.empty());
230 }
231
232 TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsPartial) {
233 PolicyMap A, B, C;
234 CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_RECOMMENDED);
235
236 for (int i = 0; i < simple_list_length(); ++i) {
Mattias Nissler (ping if slow) 2011/06/24 09:16:46 Still using loops?
gfeher 2011/06/24 15:32:44 Done.
237 B.Set(simple_list_policy_type(i), Value::CreateIntegerValue(-i));
238 if (i % 2 == 0)
239 A.Set(simple_list_policy_type(i), Value::CreateIntegerValue(i));
240 }
241
242 CombineTwoPolicyMaps(A, B, &C);
243
244 for (int i = 0; i < simple_list_length(); ++i) {
245 if (const Value* value = C.Get(simple_list_policy_type(i))) {
246 int int_value;
247 EXPECT_TRUE(value->GetAsInteger(&int_value));
248 if (i % 2 == 1) {
249 EXPECT_EQ(int_value, -1 * i);
250 } else {
251 EXPECT_EQ(int_value, i);
252 }
253 }
254 }
255 }
256
257 TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsProxies) {
258 const int a_value = 1;
259 const int b_value = -1;
260 PolicyMap A, B, C;
261 CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_RECOMMENDED);
262
263 A.Set(policy::kPolicyProxyMode, Value::CreateIntegerValue(a_value));
264
265 B.Set(policy::kPolicyProxyServerMode, Value::CreateIntegerValue(b_value));
266 B.Set(policy::kPolicyProxyServer, Value::CreateIntegerValue(b_value));
267 B.Set(policy::kPolicyProxyPacUrl, Value::CreateIntegerValue(b_value));
268 B.Set(policy::kPolicyProxyBypassList, Value::CreateIntegerValue(b_value));
269
270 CombineTwoPolicyMaps(A, B, &C);
271
272 EXPECT_TRUE(A.Equals(C));
273 EXPECT_FALSE(B.Equals(C));
274 }
275
276 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698