Home | History | Annotate | Download | only in policy
      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/prefs/pref_value_map.h"
      9 #include "chrome/browser/policy/external_data_fetcher.h"
     10 #include "chrome/browser/policy/policy_error_map.h"
     11 #include "chrome/browser/policy/policy_map.h"
     12 #include "chrome/browser/ui/ash/chrome_launcher_prefs.h"
     13 #include "chrome/common/pref_names.h"
     14 #include "policy/policy_constants.h"
     15 #include "testing/gtest/include/gtest/gtest.h"
     16 
     17 namespace policy {
     18 
     19 namespace {
     20 
     21 const char kLoginScreenPowerManagementPolicy[] =
     22     "{"
     23     "  \"AC\": {"
     24     "    \"Delays\": {"
     25     "      \"ScreenDim\": 5000,"
     26     "      \"ScreenOff\": 7000,"
     27     "      \"Idle\": 9000"
     28     "    },"
     29     "    \"IdleAction\": \"DoNothing\""
     30     "  },"
     31     "  \"Battery\": {"
     32     "    \"Delays\": {"
     33     "      \"ScreenDim\": 1000,"
     34     "      \"ScreenOff\": 3000,"
     35     "      \"Idle\": 4000"
     36     "    },"
     37     "    \"IdleAction\": \"DoNothing\""
     38     "  },"
     39     "  \"LidCloseAction\": \"DoNothing\","
     40     "  \"UserActivityScreenDimDelayScale\": 300"
     41     "}";
     42 
     43 }  // namespace
     44 
     45 TEST(NetworkConfigurationPolicyHandlerTest, Empty) {
     46   PolicyMap policy_map;
     47   scoped_ptr<NetworkConfigurationPolicyHandler> handler(
     48       NetworkConfigurationPolicyHandler::CreateForUserPolicy());
     49   PolicyErrorMap errors;
     50   EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors));
     51   EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
     52 }
     53 
     54 TEST(NetworkConfigurationPolicyHandlerTest, ValidONC) {
     55   const std::string kTestONC(
     56       "{"
     57       "  \"NetworkConfigurations\": [{"
     58       "    \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
     59       "    \"Type\": \"WiFi\","
     60       "    \"Name\": \"some name\","
     61       "    \"WiFi\": {"
     62       "      \"Security\": \"WEP-PSK\","
     63       "      \"SSID\": \"ssid\","
     64       "      \"Passphrase\": \"pass\","
     65       "    }"
     66       "  }]"
     67       "}");
     68 
     69   PolicyMap policy_map;
     70   policy_map.Set(key::kOpenNetworkConfiguration,
     71                  POLICY_LEVEL_MANDATORY,
     72                  POLICY_SCOPE_USER,
     73                  Value::CreateStringValue(kTestONC),
     74                  NULL);
     75   scoped_ptr<NetworkConfigurationPolicyHandler> handler(
     76       NetworkConfigurationPolicyHandler::CreateForUserPolicy());
     77   PolicyErrorMap errors;
     78   EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors));
     79   EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
     80 }
     81 
     82 TEST(NetworkConfigurationPolicyHandlerTest, WrongType) {
     83   PolicyMap policy_map;
     84   policy_map.Set(key::kOpenNetworkConfiguration,
     85                  POLICY_LEVEL_MANDATORY,
     86                  POLICY_SCOPE_USER,
     87                  Value::CreateBooleanValue(false),
     88                  NULL);
     89   scoped_ptr<NetworkConfigurationPolicyHandler> handler(
     90       NetworkConfigurationPolicyHandler::CreateForUserPolicy());
     91   PolicyErrorMap errors;
     92   EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors));
     93   EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
     94 }
     95 
     96 TEST(NetworkConfigurationPolicyHandlerTest, JSONParseError) {
     97   const std::string kTestONC("I'm not proper JSON!");
     98   PolicyMap policy_map;
     99   policy_map.Set(key::kOpenNetworkConfiguration,
    100                  POLICY_LEVEL_MANDATORY,
    101                  POLICY_SCOPE_USER,
    102                  Value::CreateStringValue(kTestONC),
    103                  NULL);
    104   scoped_ptr<NetworkConfigurationPolicyHandler> handler(
    105       NetworkConfigurationPolicyHandler::CreateForUserPolicy());
    106   PolicyErrorMap errors;
    107   EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors));
    108   EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
    109 }
    110 
    111 TEST(NetworkConfigurationPolicyHandlerTest, Sanitization) {
    112   const std::string kTestONC(
    113       "{"
    114       "  \"NetworkConfigurations\": [{"
    115       "    \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
    116       "    \"Type\": \"WiFi\","
    117       "    \"Name\": \"some name\","
    118       "    \"WiFi\": {"
    119       "      \"Security\": \"WEP-PSK\","
    120       "      \"SSID\": \"ssid\","
    121       "      \"Passphrase\": \"pass\","
    122       "    }"
    123       "  }]"
    124       "}");
    125 
    126   PolicyMap policy_map;
    127   policy_map.Set(key::kOpenNetworkConfiguration,
    128                  POLICY_LEVEL_MANDATORY,
    129                  POLICY_SCOPE_USER,
    130                  Value::CreateStringValue(kTestONC),
    131                  NULL);
    132   scoped_ptr<NetworkConfigurationPolicyHandler> handler(
    133       NetworkConfigurationPolicyHandler::CreateForUserPolicy());
    134   PolicyErrorMap errors;
    135   handler->PrepareForDisplaying(&policy_map);
    136   const Value* sanitized = policy_map.GetValue(key::kOpenNetworkConfiguration);
    137   ASSERT_TRUE(sanitized);
    138   std::string sanitized_onc;
    139   EXPECT_TRUE(sanitized->GetAsString(&sanitized_onc));
    140   EXPECT_FALSE(sanitized_onc.empty());
    141   EXPECT_EQ(std::string::npos, sanitized_onc.find("pass"));
    142 }
    143 
    144 TEST(PinnedLauncherAppsPolicyHandler, PrefTranslation) {
    145   base::ListValue list;
    146   PolicyMap policy_map;
    147   PrefValueMap prefs;
    148   base::ListValue expected_pinned_apps;
    149   base::Value* value = NULL;
    150   PinnedLauncherAppsPolicyHandler handler;
    151 
    152   policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY,
    153                  POLICY_SCOPE_USER, list.DeepCopy(), NULL);
    154   handler.ApplyPolicySettings(policy_map, &prefs);
    155   EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value));
    156   EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value));
    157 
    158   base::StringValue entry1("abcdefghijklmnopabcdefghijklmnop");
    159   base::DictionaryValue* entry1_dict = new base::DictionaryValue();
    160   entry1_dict->Set(ash::kPinnedAppsPrefAppIDPath, entry1.DeepCopy());
    161   expected_pinned_apps.Append(entry1_dict);
    162   list.Append(entry1.DeepCopy());
    163   policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY,
    164                  POLICY_SCOPE_USER, list.DeepCopy(), NULL);
    165   prefs.Clear();
    166   handler.ApplyPolicySettings(policy_map, &prefs);
    167   EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value));
    168   EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value));
    169 }
    170 
    171 TEST(LoginScreenPowerManagementPolicyHandlerTest, Empty) {
    172   PolicyMap policy_map;
    173   LoginScreenPowerManagementPolicyHandler handler;
    174   PolicyErrorMap errors;
    175   EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
    176   EXPECT_TRUE(errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
    177 }
    178 
    179 TEST(LoginScreenPowerManagementPolicyHandlerTest, ValidPolicy) {
    180   PolicyMap policy_map;
    181   policy_map.Set(key::kDeviceLoginScreenPowerManagement,
    182                  POLICY_LEVEL_MANDATORY,
    183                  POLICY_SCOPE_USER,
    184                  Value::CreateStringValue(kLoginScreenPowerManagementPolicy),
    185                  NULL);
    186   LoginScreenPowerManagementPolicyHandler handler;
    187   PolicyErrorMap errors;
    188   EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
    189   EXPECT_TRUE(errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
    190 }
    191 
    192 TEST(LoginScreenPowerManagementPolicyHandlerTest, WrongType) {
    193   PolicyMap policy_map;
    194   policy_map.Set(key::kDeviceLoginScreenPowerManagement,
    195                  POLICY_LEVEL_MANDATORY,
    196                  POLICY_SCOPE_USER,
    197                  Value::CreateBooleanValue(false),
    198                  NULL);
    199   LoginScreenPowerManagementPolicyHandler handler;
    200   PolicyErrorMap errors;
    201   EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
    202   EXPECT_FALSE(
    203       errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
    204 }
    205 
    206 TEST(LoginScreenPowerManagementPolicyHandlerTest, JSONParseError) {
    207   const std::string policy("I'm not proper JSON!");
    208   PolicyMap policy_map;
    209   policy_map.Set(key::kDeviceLoginScreenPowerManagement,
    210                  POLICY_LEVEL_MANDATORY,
    211                  POLICY_SCOPE_USER,
    212                  Value::CreateStringValue(policy),
    213                  NULL);
    214   LoginScreenPowerManagementPolicyHandler handler;
    215   PolicyErrorMap errors;
    216   EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
    217   EXPECT_FALSE(
    218       errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty());
    219 }
    220 
    221 }  // namespace policy
    222