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