configuration_policy_handler_chromeos_unittest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/pref_value_map.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/external_data_fetcher.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/policy_error_map.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/policy_map.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/ash/chrome_launcher_prefs.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "policy/policy_constants.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test cases for the screen magnifier type policy setting.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScreenMagnifierPolicyHandlerTest : public testing::Test {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyMap policy_;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefValueMap prefs_;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScreenMagnifierPolicyHandler handler_;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ScreenMagnifierPolicyHandlerTest, Default) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  handler_.ApplyPolicySettings(policy_, &prefs_);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(prefs_.GetValue(prefs::kScreenMagnifierEnabled, NULL));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(prefs_.GetValue(prefs::kScreenMagnifierType, NULL));
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ScreenMagnifierPolicyHandlerTest, Disabled) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_.Set(key::kScreenMagnifierType,
38a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)              POLICY_LEVEL_MANDATORY,
39a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)              POLICY_SCOPE_USER,
40a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)              base::Value::CreateIntegerValue(0),
41a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)              NULL);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  handler_.ApplyPolicySettings(policy_, &prefs_);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const base::Value* enabled = NULL;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs_.GetValue(prefs::kScreenMagnifierEnabled, &enabled));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(enabled);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base::FundamentalValue(false).Equals(enabled));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Value* type = NULL;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs_.GetValue(prefs::kScreenMagnifierType, &type));
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(type);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base::FundamentalValue(0).Equals(type));
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ScreenMagnifierPolicyHandlerTest, Enabled) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_.Set(key::kScreenMagnifierType,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              POLICY_LEVEL_MANDATORY,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              POLICY_SCOPE_USER,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              base::Value::CreateIntegerValue(1),
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              NULL);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  handler_.ApplyPolicySettings(policy_, &prefs_);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Value* enabled = NULL;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs_.GetValue(prefs::kScreenMagnifierEnabled, &enabled));
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(enabled);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base::FundamentalValue(true).Equals(enabled));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Value* type = NULL;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs_.GetValue(prefs::kScreenMagnifierType, &type));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(type);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base::FundamentalValue(1).Equals(type));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kLoginScreenPowerManagementPolicy[] =
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{"
76    "  \"AC\": {"
77    "    \"Delays\": {"
78    "      \"ScreenDim\": 5000,"
79    "      \"ScreenOff\": 7000,"
80    "      \"Idle\": 9000"
81    "    },"
82    "    \"IdleAction\": \"DoNothing\""
83    "  },"
84    "  \"Battery\": {"
85    "    \"Delays\": {"
86    "      \"ScreenDim\": 1000,"
87    "      \"ScreenOff\": 3000,"
88    "      \"Idle\": 4000"
89    "    },"
90    "    \"IdleAction\": \"DoNothing\""
91    "  },"
92    "  \"LidCloseAction\": \"DoNothing\","
93    "  \"UserActivityScreenDimDelayScale\": 300"
94    "}";
95
96}  // namespace
97
98TEST(NetworkConfigurationPolicyHandlerTest, Empty) {
99  PolicyMap policy_map;
100  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
101      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
102  PolicyErrorMap errors;
103  EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors));
104  EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
105}
106
107TEST(NetworkConfigurationPolicyHandlerTest, ValidONC) {
108  const std::string kTestONC(
109      "{"
110      "  \"NetworkConfigurations\": [{"
111      "    \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
112      "    \"Type\": \"WiFi\","
113      "    \"Name\": \"some name\","
114      "    \"WiFi\": {"
115      "      \"Security\": \"WEP-PSK\","
116      "      \"SSID\": \"ssid\","
117      "      \"Passphrase\": \"pass\","
118      "    }"
119      "  }]"
120      "}");
121
122  PolicyMap policy_map;
123  policy_map.Set(key::kOpenNetworkConfiguration,
124                 POLICY_LEVEL_MANDATORY,
125                 POLICY_SCOPE_USER,
126                 Value::CreateStringValue(kTestONC),
127                 NULL);
128  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
129      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
130  PolicyErrorMap errors;
131  EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors));
132  EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
133}
134
135TEST(NetworkConfigurationPolicyHandlerTest, WrongType) {
136  PolicyMap policy_map;
137  policy_map.Set(key::kOpenNetworkConfiguration,
138                 POLICY_LEVEL_MANDATORY,
139                 POLICY_SCOPE_USER,
140                 Value::CreateBooleanValue(false),
141                 NULL);
142  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
143      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
144  PolicyErrorMap errors;
145  EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors));
146  EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
147}
148
149TEST(NetworkConfigurationPolicyHandlerTest, JSONParseError) {
150  const std::string kTestONC("I'm not proper JSON!");
151  PolicyMap policy_map;
152  policy_map.Set(key::kOpenNetworkConfiguration,
153                 POLICY_LEVEL_MANDATORY,
154                 POLICY_SCOPE_USER,
155                 Value::CreateStringValue(kTestONC),
156                 NULL);
157  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
158      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
159  PolicyErrorMap errors;
160  EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors));
161  EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
162}
163
164TEST(NetworkConfigurationPolicyHandlerTest, Sanitization) {
165  const std::string kTestONC(
166      "{"
167      "  \"NetworkConfigurations\": [{"
168      "    \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
169      "    \"Type\": \"WiFi\","
170      "    \"Name\": \"some name\","
171      "    \"WiFi\": {"
172      "      \"Security\": \"WEP-PSK\","
173      "      \"SSID\": \"ssid\","
174      "      \"Passphrase\": \"pass\","
175      "    }"
176      "  }]"
177      "}");
178
179  PolicyMap policy_map;
180  policy_map.Set(key::kOpenNetworkConfiguration,
181                 POLICY_LEVEL_MANDATORY,
182                 POLICY_SCOPE_USER,
183                 Value::CreateStringValue(kTestONC),
184                 NULL);
185  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
186      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
187  PolicyErrorMap errors;
188  handler->PrepareForDisplaying(&policy_map);
189  const Value* sanitized = policy_map.GetValue(key::kOpenNetworkConfiguration);
190  ASSERT_TRUE(sanitized);
191  std::string sanitized_onc;
192  EXPECT_TRUE(sanitized->GetAsString(&sanitized_onc));
193  EXPECT_FALSE(sanitized_onc.empty());
194  EXPECT_EQ(std::string::npos, sanitized_onc.find("pass"));
195}
196
197TEST(PinnedLauncherAppsPolicyHandler, PrefTranslation) {
198  base::ListValue list;
199  PolicyMap policy_map;
200  PrefValueMap prefs;
201  base::ListValue expected_pinned_apps;
202  base::Value* value = NULL;
203  PinnedLauncherAppsPolicyHandler handler;
204
205  policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY,
206                 POLICY_SCOPE_USER, list.DeepCopy(), NULL);
207  handler.ApplyPolicySettings(policy_map, &prefs);
208  EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value));
209  EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value));
210
211  base::StringValue entry1("abcdefghijklmnopabcdefghijklmnop");
212  base::DictionaryValue* entry1_dict = new base::DictionaryValue();
213  entry1_dict->Set(ash::kPinnedAppsPrefAppIDPath, entry1.DeepCopy());
214  expected_pinned_apps.Append(entry1_dict);
215  list.Append(entry1.DeepCopy());
216  policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY,
217                 POLICY_SCOPE_USER, list.DeepCopy(), NULL);
218  prefs.Clear();
219  handler.ApplyPolicySettings(policy_map, &prefs);
220  EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value));
221  EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value));
222}
223
224TEST(LoginScreenPowerManagementPolicyHandlerTest, Empty) {
225  PolicyMap policy_map;
226  LoginScreenPowerManagementPolicyHandler handler;
227  PolicyErrorMap errors;
228  EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
229  EXPECT_TRUE(errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
230}
231
232TEST(LoginScreenPowerManagementPolicyHandlerTest, ValidPolicy) {
233  PolicyMap policy_map;
234  policy_map.Set(key::kDeviceLoginScreenPowerManagement,
235                 POLICY_LEVEL_MANDATORY,
236                 POLICY_SCOPE_USER,
237                 Value::CreateStringValue(kLoginScreenPowerManagementPolicy),
238                 NULL);
239  LoginScreenPowerManagementPolicyHandler handler;
240  PolicyErrorMap errors;
241  EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
242  EXPECT_TRUE(errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
243}
244
245TEST(LoginScreenPowerManagementPolicyHandlerTest, WrongType) {
246  PolicyMap policy_map;
247  policy_map.Set(key::kDeviceLoginScreenPowerManagement,
248                 POLICY_LEVEL_MANDATORY,
249                 POLICY_SCOPE_USER,
250                 Value::CreateBooleanValue(false),
251                 NULL);
252  LoginScreenPowerManagementPolicyHandler handler;
253  PolicyErrorMap errors;
254  EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
255  EXPECT_FALSE(
256      errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
257}
258
259TEST(LoginScreenPowerManagementPolicyHandlerTest, JSONParseError) {
260  const std::string policy("I'm not proper JSON!");
261  PolicyMap policy_map;
262  policy_map.Set(key::kDeviceLoginScreenPowerManagement,
263                 POLICY_LEVEL_MANDATORY,
264                 POLICY_SCOPE_USER,
265                 Value::CreateStringValue(policy),
266                 NULL);
267  LoginScreenPowerManagementPolicyHandler handler;
268  PolicyErrorMap errors;
269  EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
270  EXPECT_FALSE(
271      errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
272}
273
274}  // namespace policy
275