configuration_policy_handler_chromeos_unittest.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
1// Copyright (c) 2012 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/chromeos/policy/configuration_policy_handler_chromeos.h"
6
7#include "base/callback.h"
8#include "base/memory/scoped_ptr.h"
9#include "base/prefs/pref_value_map.h"
10#include "base/values.h"
11#include "chrome/browser/ui/ash/chrome_launcher_prefs.h"
12#include "chrome/common/pref_names.h"
13#include "components/policy/core/browser/policy_error_map.h"
14#include "components/policy/core/common/external_data_fetcher.h"
15#include "components/policy/core/common/policy_map.h"
16#include "policy/policy_constants.h"
17#include "testing/gtest/include/gtest/gtest.h"
18
19namespace policy {
20
21namespace {
22
23// Test cases for the screen magnifier type policy setting.
24class ScreenMagnifierPolicyHandlerTest : public testing::Test {
25 protected:
26  PolicyMap policy_;
27  PrefValueMap prefs_;
28  ScreenMagnifierPolicyHandler handler_;
29};
30
31TEST_F(ScreenMagnifierPolicyHandlerTest, Default) {
32  handler_.ApplyPolicySettings(policy_, &prefs_);
33  EXPECT_FALSE(prefs_.GetValue(prefs::kScreenMagnifierEnabled, NULL));
34  EXPECT_FALSE(prefs_.GetValue(prefs::kScreenMagnifierType, NULL));
35}
36
37TEST_F(ScreenMagnifierPolicyHandlerTest, Disabled) {
38  policy_.Set(key::kScreenMagnifierType,
39              POLICY_LEVEL_MANDATORY,
40              POLICY_SCOPE_USER,
41              base::Value::CreateIntegerValue(0),
42              NULL);
43  handler_.ApplyPolicySettings(policy_, &prefs_);
44
45  const base::Value* enabled = NULL;
46  EXPECT_TRUE(prefs_.GetValue(prefs::kScreenMagnifierEnabled, &enabled));
47  ASSERT_TRUE(enabled);
48  EXPECT_TRUE(base::FundamentalValue(false).Equals(enabled));
49
50  const base::Value* type = NULL;
51  EXPECT_TRUE(prefs_.GetValue(prefs::kScreenMagnifierType, &type));
52  ASSERT_TRUE(type);
53  EXPECT_TRUE(base::FundamentalValue(0).Equals(type));
54}
55
56TEST_F(ScreenMagnifierPolicyHandlerTest, Enabled) {
57  policy_.Set(key::kScreenMagnifierType,
58              POLICY_LEVEL_MANDATORY,
59              POLICY_SCOPE_USER,
60              base::Value::CreateIntegerValue(1),
61              NULL);
62  handler_.ApplyPolicySettings(policy_, &prefs_);
63
64  const base::Value* enabled = NULL;
65  EXPECT_TRUE(prefs_.GetValue(prefs::kScreenMagnifierEnabled, &enabled));
66  ASSERT_TRUE(enabled);
67  EXPECT_TRUE(base::FundamentalValue(true).Equals(enabled));
68
69  const base::Value* type = NULL;
70  EXPECT_TRUE(prefs_.GetValue(prefs::kScreenMagnifierType, &type));
71  ASSERT_TRUE(type);
72  EXPECT_TRUE(base::FundamentalValue(1).Equals(type));
73}
74
75TEST(ExternalDataPolicyHandlerTest, Empty) {
76  PolicyErrorMap errors;
77  EXPECT_TRUE(ExternalDataPolicyHandler(key::kUserAvatarImage)
78                  .CheckPolicySettings(PolicyMap(), &errors));
79  EXPECT_TRUE(errors.GetErrors(key::kUserAvatarImage).empty());
80}
81
82TEST(ExternalDataPolicyHandlerTest, WrongType) {
83  PolicyMap policy_map;
84  policy_map.Set(key::kUserAvatarImage,
85                 POLICY_LEVEL_MANDATORY,
86                 POLICY_SCOPE_USER,
87                 new base::FundamentalValue(false),
88                 NULL);
89  PolicyErrorMap errors;
90  EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage)
91                   .CheckPolicySettings(policy_map, &errors));
92  EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty());
93}
94
95TEST(ExternalDataPolicyHandlerTest, MissingURL) {
96  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
97  dict->SetString("hash", "1234567890123456789012345678901234567890");
98  PolicyMap policy_map;
99  policy_map.Set(key::kUserAvatarImage,
100                 POLICY_LEVEL_MANDATORY,
101                 POLICY_SCOPE_USER,
102                 dict.release(),
103                 NULL);
104  PolicyErrorMap errors;
105  EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage)
106                   .CheckPolicySettings(policy_map, &errors));
107  EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty());
108}
109
110TEST(ExternalDataPolicyHandlerTest, InvalidURL) {
111  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
112  dict->SetString("url", "http://");
113  dict->SetString("hash", "1234567890123456789012345678901234567890");
114  PolicyMap policy_map;
115  policy_map.Set(key::kUserAvatarImage,
116                 POLICY_LEVEL_MANDATORY,
117                 POLICY_SCOPE_USER,
118                 dict.release(),
119                 NULL);
120  PolicyErrorMap errors;
121  EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage)
122                   .CheckPolicySettings(policy_map, &errors));
123  EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty());
124}
125
126TEST(ExternalDataPolicyHandlerTest, MissingHash) {
127  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
128  dict->SetString("url", "http://localhost/");
129  PolicyMap policy_map;
130  policy_map.Set(key::kUserAvatarImage,
131                 POLICY_LEVEL_MANDATORY,
132                 POLICY_SCOPE_USER,
133                 dict.release(),
134                 NULL);
135  PolicyErrorMap errors;
136  EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage)
137                   .CheckPolicySettings(policy_map, &errors));
138  EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty());
139}
140
141TEST(ExternalDataPolicyHandlerTest, InvalidHash) {
142  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
143  dict->SetString("url", "http://localhost/");
144  dict->SetString("hash", "1234");
145  PolicyMap policy_map;
146  policy_map.Set(key::kUserAvatarImage,
147                 POLICY_LEVEL_MANDATORY,
148                 POLICY_SCOPE_USER,
149                 dict.release(),
150                 NULL);
151  PolicyErrorMap errors;
152  EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage)
153                   .CheckPolicySettings(policy_map, &errors));
154  EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty());
155}
156
157TEST(ExternalDataPolicyHandlerTest, Valid) {
158  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
159  dict->SetString("url", "http://localhost/");
160  dict->SetString("hash", "1234567890123456789012345678901234567890");
161  PolicyMap policy_map;
162  policy_map.Set(key::kUserAvatarImage,
163                 POLICY_LEVEL_MANDATORY,
164                 POLICY_SCOPE_USER,
165                 dict.release(),
166                 NULL);
167  PolicyErrorMap errors;
168  EXPECT_TRUE(ExternalDataPolicyHandler(key::kUserAvatarImage)
169                  .CheckPolicySettings(policy_map, &errors));
170  EXPECT_TRUE(errors.GetErrors(key::kUserAvatarImage).empty());
171}
172
173const char kLoginScreenPowerManagementPolicy[] =
174    "{"
175    "  \"AC\": {"
176    "    \"Delays\": {"
177    "      \"ScreenDim\": 5000,"
178    "      \"ScreenOff\": 7000,"
179    "      \"Idle\": 9000"
180    "    },"
181    "    \"IdleAction\": \"DoNothing\""
182    "  },"
183    "  \"Battery\": {"
184    "    \"Delays\": {"
185    "      \"ScreenDim\": 1000,"
186    "      \"ScreenOff\": 3000,"
187    "      \"Idle\": 4000"
188    "    },"
189    "    \"IdleAction\": \"DoNothing\""
190    "  },"
191    "  \"LidCloseAction\": \"DoNothing\","
192    "  \"UserActivityScreenDimDelayScale\": 300"
193    "}";
194
195}  // namespace
196
197TEST(NetworkConfigurationPolicyHandlerTest, Empty) {
198  PolicyMap policy_map;
199  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
200      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
201  PolicyErrorMap errors;
202  EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors));
203  EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
204}
205
206TEST(NetworkConfigurationPolicyHandlerTest, ValidONC) {
207  const std::string kTestONC(
208      "{"
209      "  \"NetworkConfigurations\": [{"
210      "    \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
211      "    \"Type\": \"WiFi\","
212      "    \"Name\": \"some name\","
213      "    \"WiFi\": {"
214      "      \"Security\": \"WEP-PSK\","
215      "      \"SSID\": \"ssid\","
216      "      \"Passphrase\": \"pass\","
217      "    }"
218      "  }]"
219      "}");
220
221  PolicyMap policy_map;
222  policy_map.Set(key::kOpenNetworkConfiguration,
223                 POLICY_LEVEL_MANDATORY,
224                 POLICY_SCOPE_USER,
225                 Value::CreateStringValue(kTestONC),
226                 NULL);
227  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
228      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
229  PolicyErrorMap errors;
230  EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors));
231  EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
232}
233
234TEST(NetworkConfigurationPolicyHandlerTest, WrongType) {
235  PolicyMap policy_map;
236  policy_map.Set(key::kOpenNetworkConfiguration,
237                 POLICY_LEVEL_MANDATORY,
238                 POLICY_SCOPE_USER,
239                 Value::CreateBooleanValue(false),
240                 NULL);
241  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
242      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
243  PolicyErrorMap errors;
244  EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors));
245  EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
246}
247
248TEST(NetworkConfigurationPolicyHandlerTest, JSONParseError) {
249  const std::string kTestONC("I'm not proper JSON!");
250  PolicyMap policy_map;
251  policy_map.Set(key::kOpenNetworkConfiguration,
252                 POLICY_LEVEL_MANDATORY,
253                 POLICY_SCOPE_USER,
254                 Value::CreateStringValue(kTestONC),
255                 NULL);
256  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
257      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
258  PolicyErrorMap errors;
259  EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors));
260  EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
261}
262
263TEST(NetworkConfigurationPolicyHandlerTest, Sanitization) {
264  const std::string kTestONC(
265      "{"
266      "  \"NetworkConfigurations\": [{"
267      "    \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
268      "    \"Type\": \"WiFi\","
269      "    \"Name\": \"some name\","
270      "    \"WiFi\": {"
271      "      \"Security\": \"WEP-PSK\","
272      "      \"SSID\": \"ssid\","
273      "      \"Passphrase\": \"pass\","
274      "    }"
275      "  }]"
276      "}");
277
278  PolicyMap policy_map;
279  policy_map.Set(key::kOpenNetworkConfiguration,
280                 POLICY_LEVEL_MANDATORY,
281                 POLICY_SCOPE_USER,
282                 Value::CreateStringValue(kTestONC),
283                 NULL);
284  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
285      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
286  PolicyErrorMap errors;
287  handler->PrepareForDisplaying(&policy_map);
288  const Value* sanitized = policy_map.GetValue(key::kOpenNetworkConfiguration);
289  ASSERT_TRUE(sanitized);
290  std::string sanitized_onc;
291  EXPECT_TRUE(sanitized->GetAsString(&sanitized_onc));
292  EXPECT_FALSE(sanitized_onc.empty());
293  EXPECT_EQ(std::string::npos, sanitized_onc.find("pass"));
294}
295
296TEST(PinnedLauncherAppsPolicyHandler, PrefTranslation) {
297  base::ListValue list;
298  PolicyMap policy_map;
299  PrefValueMap prefs;
300  base::ListValue expected_pinned_apps;
301  base::Value* value = NULL;
302  PinnedLauncherAppsPolicyHandler handler;
303
304  policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY,
305                 POLICY_SCOPE_USER, list.DeepCopy(), NULL);
306  handler.ApplyPolicySettings(policy_map, &prefs);
307  EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value));
308  EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value));
309
310  base::StringValue entry1("abcdefghijklmnopabcdefghijklmnop");
311  base::DictionaryValue* entry1_dict = new base::DictionaryValue();
312  entry1_dict->Set(ash::kPinnedAppsPrefAppIDPath, entry1.DeepCopy());
313  expected_pinned_apps.Append(entry1_dict);
314  list.Append(entry1.DeepCopy());
315  policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY,
316                 POLICY_SCOPE_USER, list.DeepCopy(), NULL);
317  prefs.Clear();
318  handler.ApplyPolicySettings(policy_map, &prefs);
319  EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value));
320  EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value));
321}
322
323TEST(LoginScreenPowerManagementPolicyHandlerTest, Empty) {
324  PolicyMap policy_map;
325  LoginScreenPowerManagementPolicyHandler handler;
326  PolicyErrorMap errors;
327  EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
328  EXPECT_TRUE(errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
329}
330
331TEST(LoginScreenPowerManagementPolicyHandlerTest, ValidPolicy) {
332  PolicyMap policy_map;
333  policy_map.Set(key::kDeviceLoginScreenPowerManagement,
334                 POLICY_LEVEL_MANDATORY,
335                 POLICY_SCOPE_USER,
336                 Value::CreateStringValue(kLoginScreenPowerManagementPolicy),
337                 NULL);
338  LoginScreenPowerManagementPolicyHandler handler;
339  PolicyErrorMap errors;
340  EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
341  EXPECT_TRUE(errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
342}
343
344TEST(LoginScreenPowerManagementPolicyHandlerTest, WrongType) {
345  PolicyMap policy_map;
346  policy_map.Set(key::kDeviceLoginScreenPowerManagement,
347                 POLICY_LEVEL_MANDATORY,
348                 POLICY_SCOPE_USER,
349                 Value::CreateBooleanValue(false),
350                 NULL);
351  LoginScreenPowerManagementPolicyHandler handler;
352  PolicyErrorMap errors;
353  EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
354  EXPECT_FALSE(
355      errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
356}
357
358TEST(LoginScreenPowerManagementPolicyHandlerTest, JSONParseError) {
359  const std::string policy("I'm not proper JSON!");
360  PolicyMap policy_map;
361  policy_map.Set(key::kDeviceLoginScreenPowerManagement,
362                 POLICY_LEVEL_MANDATORY,
363                 POLICY_SCOPE_USER,
364                 Value::CreateStringValue(policy),
365                 NULL);
366  LoginScreenPowerManagementPolicyHandler handler;
367  PolicyErrorMap errors;
368  EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
369  EXPECT_FALSE(
370      errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
371}
372
373}  // namespace policy
374