| OLD | NEW |
| (Empty) |
| 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 "base/callback.h" | |
| 6 #include "base/memory/scoped_ptr.h" | |
| 7 #include "base/prefs/pref_value_map.h" | |
| 8 #include "components/policy/core/browser/configuration_policy_handler.h" | |
| 9 #include "components/policy/core/browser/policy_error_map.h" | |
| 10 #include "components/policy/core/common/policy_map.h" | |
| 11 #include "testing/gtest/include/gtest/gtest.h" | |
| 12 | |
| 13 // Note: this file should move to components/policy/core/browser, but the | |
| 14 // components_unittests runner does not load the ResourceBundle as | |
| 15 // ChromeTestSuite::Initialize does, which leads to failures using | |
| 16 // PolicyErrorMap. | |
| 17 | |
| 18 namespace policy { | |
| 19 | |
| 20 namespace { | |
| 21 | |
| 22 StringToIntEnumListPolicyHandler::MappingEntry kTestTypeMap[] = { | |
| 23 { "one", 1 }, | |
| 24 { "two", 2 }, | |
| 25 }; | |
| 26 | |
| 27 const char kTestPolicy[] = "unit_test.test_policy"; | |
| 28 const char kTestPref[] = "unit_test.test_pref"; | |
| 29 | |
| 30 } // namespace | |
| 31 | |
| 32 TEST(StringToIntEnumListPolicyHandlerTest, CheckPolicySettings) { | |
| 33 base::ListValue list; | |
| 34 PolicyMap policy_map; | |
| 35 PolicyErrorMap errors; | |
| 36 StringToIntEnumListPolicyHandler handler( | |
| 37 kTestPolicy, | |
| 38 kTestPref, | |
| 39 kTestTypeMap, | |
| 40 kTestTypeMap + arraysize(kTestTypeMap)); | |
| 41 | |
| 42 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 43 POLICY_SCOPE_USER, list.DeepCopy(), NULL); | |
| 44 errors.Clear(); | |
| 45 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 46 EXPECT_TRUE(errors.empty()); | |
| 47 | |
| 48 list.AppendString("one"); | |
| 49 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 50 POLICY_SCOPE_USER, list.DeepCopy(), NULL); | |
| 51 errors.Clear(); | |
| 52 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 53 EXPECT_TRUE(errors.empty()); | |
| 54 | |
| 55 list.AppendString("invalid"); | |
| 56 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 57 POLICY_SCOPE_USER, list.DeepCopy(), NULL); | |
| 58 errors.Clear(); | |
| 59 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 60 EXPECT_FALSE(errors.empty()); | |
| 61 EXPECT_FALSE(errors.GetErrors(kTestPolicy).empty()); | |
| 62 | |
| 63 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 64 POLICY_SCOPE_USER, | |
| 65 base::Value::CreateStringValue("no list"), NULL); | |
| 66 errors.Clear(); | |
| 67 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 68 EXPECT_FALSE(errors.empty()); | |
| 69 EXPECT_FALSE(errors.GetErrors(kTestPolicy).empty()); | |
| 70 } | |
| 71 | |
| 72 TEST(StringToIntEnumListPolicyHandlerTest, ApplyPolicySettings) { | |
| 73 base::ListValue list; | |
| 74 base::ListValue expected; | |
| 75 PolicyMap policy_map; | |
| 76 PrefValueMap prefs; | |
| 77 base::Value* value; | |
| 78 StringToIntEnumListPolicyHandler handler( | |
| 79 kTestPolicy, | |
| 80 kTestPref, | |
| 81 kTestTypeMap, | |
| 82 kTestTypeMap + arraysize(kTestTypeMap)); | |
| 83 | |
| 84 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 85 POLICY_SCOPE_USER, list.DeepCopy(), NULL); | |
| 86 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 87 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 88 EXPECT_TRUE(base::Value::Equals(&expected, value)); | |
| 89 | |
| 90 list.AppendString("two"); | |
| 91 expected.AppendInteger(2); | |
| 92 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 93 POLICY_SCOPE_USER, list.DeepCopy(), NULL); | |
| 94 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 95 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 96 EXPECT_TRUE(base::Value::Equals(&expected, value)); | |
| 97 | |
| 98 list.AppendString("invalid"); | |
| 99 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 100 POLICY_SCOPE_USER, list.DeepCopy(), NULL); | |
| 101 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 102 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 103 EXPECT_TRUE(base::Value::Equals(&expected, value)); | |
| 104 } | |
| 105 | |
| 106 TEST(IntRangePolicyHandler, CheckPolicySettingsClamp) { | |
| 107 PolicyMap policy_map; | |
| 108 PolicyErrorMap errors; | |
| 109 | |
| 110 // This tests needs to modify an int policy. The exact policy used and its | |
| 111 // semantics outside the test are irrelevant. | |
| 112 IntRangePolicyHandler handler(kTestPolicy, kTestPref, 0, 10, true); | |
| 113 | |
| 114 // Check that values lying in the accepted range are not rejected. | |
| 115 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 116 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(0), NULL); | |
| 117 errors.Clear(); | |
| 118 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 119 EXPECT_TRUE(errors.empty()); | |
| 120 | |
| 121 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 122 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(5), NULL); | |
| 123 errors.Clear(); | |
| 124 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 125 EXPECT_TRUE(errors.empty()); | |
| 126 | |
| 127 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 128 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(10), NULL); | |
| 129 errors.Clear(); | |
| 130 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 131 EXPECT_TRUE(errors.empty()); | |
| 132 | |
| 133 // Check that values lying outside the accepted range are not rejected | |
| 134 // (because clamping is enabled) but do yield a warning message. | |
| 135 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 136 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(-5), NULL); | |
| 137 errors.Clear(); | |
| 138 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 139 EXPECT_FALSE(errors.empty()); | |
| 140 | |
| 141 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 142 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(15), NULL); | |
| 143 errors.Clear(); | |
| 144 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 145 EXPECT_FALSE(errors.empty()); | |
| 146 | |
| 147 // Check that an entirely invalid value is rejected and yields an error | |
| 148 // message. | |
| 149 policy_map.Set(kTestPolicy, | |
| 150 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
| 151 base::Value::CreateStringValue("invalid"), NULL); | |
| 152 errors.Clear(); | |
| 153 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 154 EXPECT_FALSE(errors.empty()); | |
| 155 } | |
| 156 | |
| 157 TEST(IntRangePolicyHandler, CheckPolicySettingsDontClamp) { | |
| 158 PolicyMap policy_map; | |
| 159 PolicyErrorMap errors; | |
| 160 | |
| 161 // This tests needs to modify an int policy. The exact policy used and its | |
| 162 // semantics outside the test are irrelevant. | |
| 163 IntRangePolicyHandler handler(kTestPolicy, kTestPref, 0, 10, false); | |
| 164 | |
| 165 // Check that values lying in the accepted range are not rejected. | |
| 166 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 167 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(0), NULL); | |
| 168 errors.Clear(); | |
| 169 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 170 EXPECT_TRUE(errors.empty()); | |
| 171 | |
| 172 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 173 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(5), NULL); | |
| 174 errors.Clear(); | |
| 175 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 176 EXPECT_TRUE(errors.empty()); | |
| 177 | |
| 178 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 179 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(10), NULL); | |
| 180 errors.Clear(); | |
| 181 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 182 EXPECT_TRUE(errors.empty()); | |
| 183 | |
| 184 // Check that values lying outside the accepted range are rejected and yield | |
| 185 // an error message. | |
| 186 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 187 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(-5), NULL); | |
| 188 errors.Clear(); | |
| 189 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 190 EXPECT_FALSE(errors.empty()); | |
| 191 | |
| 192 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 193 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(15), NULL); | |
| 194 errors.Clear(); | |
| 195 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 196 EXPECT_FALSE(errors.empty()); | |
| 197 | |
| 198 // Check that an entirely invalid value is rejected and yields an error | |
| 199 // message. | |
| 200 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
| 201 base::Value::CreateStringValue("invalid"), NULL); | |
| 202 errors.Clear(); | |
| 203 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 204 EXPECT_FALSE(errors.empty()); | |
| 205 } | |
| 206 | |
| 207 TEST(IntRangePolicyHandler, ApplyPolicySettingsClamp) { | |
| 208 PolicyMap policy_map; | |
| 209 PrefValueMap prefs; | |
| 210 scoped_ptr<base::Value> expected; | |
| 211 const base::Value* value; | |
| 212 | |
| 213 // This tests needs to modify an int policy. The exact policy used and its | |
| 214 // semantics outside the test are irrelevant. | |
| 215 IntRangePolicyHandler handler(kTestPolicy, kTestPref, 0, 10, true); | |
| 216 | |
| 217 // Check that values lying in the accepted range are written to the pref. | |
| 218 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 219 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(0), NULL); | |
| 220 prefs.Clear(); | |
| 221 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 222 expected.reset(base::Value::CreateIntegerValue(0)); | |
| 223 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 224 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 225 | |
| 226 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 227 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(5), NULL); | |
| 228 prefs.Clear(); | |
| 229 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 230 expected.reset(base::Value::CreateIntegerValue(5)); | |
| 231 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 232 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 233 | |
| 234 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 235 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(10), NULL); | |
| 236 prefs.Clear(); | |
| 237 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 238 expected.reset(base::Value::CreateIntegerValue(10)); | |
| 239 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 240 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 241 | |
| 242 // Check that values lying outside the accepted range are clamped and written | |
| 243 // to the pref. | |
| 244 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 245 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(-5), NULL); | |
| 246 prefs.Clear(); | |
| 247 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 248 expected.reset(base::Value::CreateIntegerValue(0)); | |
| 249 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 250 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 251 | |
| 252 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 253 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(15), NULL); | |
| 254 prefs.Clear(); | |
| 255 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 256 expected.reset(base::Value::CreateIntegerValue(10)); | |
| 257 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 258 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 259 } | |
| 260 | |
| 261 TEST(IntRangePolicyHandler, ApplyPolicySettingsDontClamp) { | |
| 262 PolicyMap policy_map; | |
| 263 PrefValueMap prefs; | |
| 264 scoped_ptr<base::Value> expected; | |
| 265 const base::Value* value; | |
| 266 | |
| 267 // This tests needs to modify an int policy. The exact policy used and its | |
| 268 // semantics outside the test are irrelevant. | |
| 269 IntRangePolicyHandler handler(kTestPolicy, kTestPref, 0, 10, true); | |
| 270 | |
| 271 // Check that values lying in the accepted range are written to the pref. | |
| 272 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 273 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(0), NULL); | |
| 274 prefs.Clear(); | |
| 275 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 276 expected.reset(base::Value::CreateIntegerValue(0)); | |
| 277 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 278 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 279 | |
| 280 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 281 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(5), NULL); | |
| 282 prefs.Clear(); | |
| 283 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 284 expected.reset(base::Value::CreateIntegerValue(5)); | |
| 285 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 286 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 287 | |
| 288 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 289 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(10), NULL); | |
| 290 prefs.Clear(); | |
| 291 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 292 expected.reset(base::Value::CreateIntegerValue(10)); | |
| 293 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 294 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 295 } | |
| 296 | |
| 297 TEST(IntPercentageToDoublePolicyHandler, CheckPolicySettingsClamp) { | |
| 298 PolicyMap policy_map; | |
| 299 PolicyErrorMap errors; | |
| 300 | |
| 301 // This tests needs to modify an int policy. The exact policy used and its | |
| 302 // semantics outside the test are irrelevant. | |
| 303 IntPercentageToDoublePolicyHandler handler( | |
| 304 kTestPolicy, kTestPref, 0, 10, true); | |
| 305 | |
| 306 // Check that values lying in the accepted range are not rejected. | |
| 307 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 308 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(0), NULL); | |
| 309 errors.Clear(); | |
| 310 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 311 EXPECT_TRUE(errors.empty()); | |
| 312 | |
| 313 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 314 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(5), NULL); | |
| 315 errors.Clear(); | |
| 316 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 317 EXPECT_TRUE(errors.empty()); | |
| 318 | |
| 319 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 320 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(10), NULL); | |
| 321 errors.Clear(); | |
| 322 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 323 EXPECT_TRUE(errors.empty()); | |
| 324 | |
| 325 // Check that values lying outside the accepted range are not rejected | |
| 326 // (because clamping is enabled) but do yield a warning message. | |
| 327 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 328 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(-5), NULL); | |
| 329 errors.Clear(); | |
| 330 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 331 EXPECT_FALSE(errors.empty()); | |
| 332 | |
| 333 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 334 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(15), NULL); | |
| 335 errors.Clear(); | |
| 336 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 337 EXPECT_FALSE(errors.empty()); | |
| 338 | |
| 339 // Check that an entirely invalid value is rejected and yields an error | |
| 340 // message. | |
| 341 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
| 342 base::Value::CreateStringValue("invalid"), NULL); | |
| 343 errors.Clear(); | |
| 344 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 345 EXPECT_FALSE(errors.empty()); | |
| 346 } | |
| 347 | |
| 348 TEST(IntPercentageToDoublePolicyHandler, CheckPolicySettingsDontClamp) { | |
| 349 PolicyMap policy_map; | |
| 350 PolicyErrorMap errors; | |
| 351 | |
| 352 // This tests needs to modify an int policy. The exact policy used and its | |
| 353 // semantics outside the test are irrelevant. | |
| 354 IntPercentageToDoublePolicyHandler handler( | |
| 355 kTestPolicy, kTestPref, 0, 10, false); | |
| 356 | |
| 357 // Check that values lying in the accepted range are not rejected. | |
| 358 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 359 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(0), NULL); | |
| 360 errors.Clear(); | |
| 361 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 362 EXPECT_TRUE(errors.empty()); | |
| 363 | |
| 364 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 365 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(5), NULL); | |
| 366 errors.Clear(); | |
| 367 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 368 EXPECT_TRUE(errors.empty()); | |
| 369 | |
| 370 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 371 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(10), NULL); | |
| 372 errors.Clear(); | |
| 373 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 374 EXPECT_TRUE(errors.empty()); | |
| 375 | |
| 376 // Check that values lying outside the accepted range are rejected and yield | |
| 377 // an error message. | |
| 378 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 379 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(-5), NULL); | |
| 380 errors.Clear(); | |
| 381 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 382 EXPECT_FALSE(errors.empty()); | |
| 383 | |
| 384 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 385 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(15), NULL); | |
| 386 errors.Clear(); | |
| 387 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 388 EXPECT_FALSE(errors.empty()); | |
| 389 | |
| 390 // Check that an entirely invalid value is rejected and yields an error | |
| 391 // message. | |
| 392 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
| 393 base::Value::CreateStringValue("invalid"), NULL); | |
| 394 errors.Clear(); | |
| 395 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); | |
| 396 EXPECT_FALSE(errors.empty()); | |
| 397 } | |
| 398 | |
| 399 TEST(IntPercentageToDoublePolicyHandler, ApplyPolicySettingsClamp) { | |
| 400 PolicyMap policy_map; | |
| 401 PrefValueMap prefs; | |
| 402 scoped_ptr<base::Value> expected; | |
| 403 const base::Value* value; | |
| 404 | |
| 405 // This tests needs to modify an int policy. The exact policy used and its | |
| 406 // semantics outside the test are irrelevant. | |
| 407 IntPercentageToDoublePolicyHandler handler( | |
| 408 kTestPolicy, kTestPref, 0, 10, true); | |
| 409 | |
| 410 // Check that values lying in the accepted range are written to the pref. | |
| 411 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 412 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(0), NULL); | |
| 413 prefs.Clear(); | |
| 414 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 415 expected.reset(base::Value::CreateDoubleValue(0.0)); | |
| 416 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 417 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 418 | |
| 419 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 420 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(5), NULL); | |
| 421 prefs.Clear(); | |
| 422 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 423 expected.reset(base::Value::CreateDoubleValue(0.05)); | |
| 424 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 425 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 426 | |
| 427 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 428 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(10), NULL); | |
| 429 prefs.Clear(); | |
| 430 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 431 expected.reset(base::Value::CreateDoubleValue(0.1)); | |
| 432 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 433 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 434 | |
| 435 // Check that values lying outside the accepted range are clamped and written | |
| 436 // to the pref. | |
| 437 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 438 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(-5), NULL); | |
| 439 prefs.Clear(); | |
| 440 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 441 expected.reset(base::Value::CreateDoubleValue(0.0)); | |
| 442 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 443 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 444 | |
| 445 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 446 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(15), NULL); | |
| 447 prefs.Clear(); | |
| 448 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 449 expected.reset(base::Value::CreateDoubleValue(0.1)); | |
| 450 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 451 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 452 } | |
| 453 | |
| 454 TEST(IntPercentageToDoublePolicyHandler, ApplyPolicySettingsDontClamp) { | |
| 455 PolicyMap policy_map; | |
| 456 PrefValueMap prefs; | |
| 457 scoped_ptr<base::Value> expected; | |
| 458 const base::Value* value; | |
| 459 | |
| 460 // This tests needs to modify an int policy. The exact policy used and its | |
| 461 // semantics outside the test are irrelevant. | |
| 462 IntPercentageToDoublePolicyHandler handler( | |
| 463 kTestPolicy, kTestPref, 0, 10, true); | |
| 464 | |
| 465 // Check that values lying in the accepted range are written to the pref. | |
| 466 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 467 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(0), NULL); | |
| 468 prefs.Clear(); | |
| 469 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 470 expected.reset(base::Value::CreateDoubleValue(0.0)); | |
| 471 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 472 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 473 | |
| 474 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 475 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(5), NULL); | |
| 476 prefs.Clear(); | |
| 477 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 478 expected.reset(base::Value::CreateDoubleValue(0.05)); | |
| 479 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 480 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 481 | |
| 482 policy_map.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, | |
| 483 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(10), NULL); | |
| 484 prefs.Clear(); | |
| 485 handler.ApplyPolicySettings(policy_map, &prefs); | |
| 486 expected.reset(base::Value::CreateDoubleValue(0.1)); | |
| 487 EXPECT_TRUE(prefs.GetValue(kTestPref, &value)); | |
| 488 EXPECT_TRUE(base::Value::Equals(expected.get(), value)); | |
| 489 } | |
| 490 | |
| 491 } // namespace policy | |
| OLD | NEW |