configuration_policy_handler_chromeos_unittest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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
17namespace policy {
18
19TEST(NetworkConfigurationPolicyHandlerTest, Empty) {
20  PolicyMap policy_map;
21  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
22      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
23  PolicyErrorMap errors;
24  EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors));
25  EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
26}
27
28TEST(NetworkConfigurationPolicyHandlerTest, ValidONC) {
29  const std::string kTestONC(
30      "{"
31      "  \"NetworkConfigurations\": [{"
32      "    \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
33      "    \"Type\": \"WiFi\","
34      "    \"Name\": \"some name\","
35      "    \"WiFi\": {"
36      "      \"Security\": \"WEP-PSK\","
37      "      \"SSID\": \"ssid\","
38      "      \"Passphrase\": \"pass\","
39      "    }"
40      "  }]"
41      "}");
42
43  PolicyMap policy_map;
44  policy_map.Set(key::kOpenNetworkConfiguration,
45                 POLICY_LEVEL_MANDATORY,
46                 POLICY_SCOPE_USER,
47                 Value::CreateStringValue(kTestONC),
48                 NULL);
49  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
50      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
51  PolicyErrorMap errors;
52  EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors));
53  EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
54}
55
56TEST(NetworkConfigurationPolicyHandlerTest, WrongType) {
57  PolicyMap policy_map;
58  policy_map.Set(key::kOpenNetworkConfiguration,
59                 POLICY_LEVEL_MANDATORY,
60                 POLICY_SCOPE_USER,
61                 Value::CreateBooleanValue(false),
62                 NULL);
63  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
64      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
65  PolicyErrorMap errors;
66  EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors));
67  EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
68}
69
70TEST(NetworkConfigurationPolicyHandlerTest, JSONParseError) {
71  const std::string kTestONC("I'm not proper JSON!");
72  PolicyMap policy_map;
73  policy_map.Set(key::kOpenNetworkConfiguration,
74                 POLICY_LEVEL_MANDATORY,
75                 POLICY_SCOPE_USER,
76                 Value::CreateStringValue(kTestONC),
77                 NULL);
78  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
79      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
80  PolicyErrorMap errors;
81  EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors));
82  EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty());
83}
84
85TEST(NetworkConfigurationPolicyHandlerTest, Sanitization) {
86  const std::string kTestONC(
87      "{"
88      "  \"NetworkConfigurations\": [{"
89      "    \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
90      "    \"Type\": \"WiFi\","
91      "    \"Name\": \"some name\","
92      "    \"WiFi\": {"
93      "      \"Security\": \"WEP-PSK\","
94      "      \"SSID\": \"ssid\","
95      "      \"Passphrase\": \"pass\","
96      "    }"
97      "  }]"
98      "}");
99
100  PolicyMap policy_map;
101  policy_map.Set(key::kOpenNetworkConfiguration,
102                 POLICY_LEVEL_MANDATORY,
103                 POLICY_SCOPE_USER,
104                 Value::CreateStringValue(kTestONC),
105                 NULL);
106  scoped_ptr<NetworkConfigurationPolicyHandler> handler(
107      NetworkConfigurationPolicyHandler::CreateForUserPolicy());
108  PolicyErrorMap errors;
109  handler->PrepareForDisplaying(&policy_map);
110  const Value* sanitized = policy_map.GetValue(key::kOpenNetworkConfiguration);
111  ASSERT_TRUE(sanitized);
112  std::string sanitized_onc;
113  EXPECT_TRUE(sanitized->GetAsString(&sanitized_onc));
114  EXPECT_FALSE(sanitized_onc.empty());
115  EXPECT_EQ(std::string::npos, sanitized_onc.find("pass"));
116}
117
118TEST(PinnedLauncherAppsPolicyHandler, PrefTranslation) {
119  base::ListValue list;
120  PolicyMap policy_map;
121  PrefValueMap prefs;
122  base::ListValue expected_pinned_apps;
123  base::Value* value = NULL;
124  PinnedLauncherAppsPolicyHandler handler;
125
126  policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY,
127                 POLICY_SCOPE_USER, list.DeepCopy(), NULL);
128  handler.ApplyPolicySettings(policy_map, &prefs);
129  EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value));
130  EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value));
131
132  base::StringValue entry1("abcdefghijklmnopabcdefghijklmnop");
133  base::DictionaryValue* entry1_dict = new base::DictionaryValue();
134  entry1_dict->Set(ash::kPinnedAppsPrefAppIDPath, entry1.DeepCopy());
135  expected_pinned_apps.Append(entry1_dict);
136  list.Append(entry1.DeepCopy());
137  policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY,
138                 POLICY_SCOPE_USER, list.DeepCopy(), NULL);
139  prefs.Clear();
140  handler.ApplyPolicySettings(policy_map, &prefs);
141  EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value));
142  EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value));
143}
144
145}  // namespace policy
146