cros_settings_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
17ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Copyright (c) 2012 The Chromium Authors. All rights reserved.
27ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Use of this source code is governed by a BSD-style license that can be
37ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// found in the LICENSE file.
47ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
57ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <map>
67ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <string>
77ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
87ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "base/bind.h"
97ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "base/memory/scoped_ptr.h"
107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "base/memory/weak_ptr.h"
117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "base/message_loop.h"
127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "base/stl_util.h"
137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "base/values.h"
147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "chrome/browser/chromeos/settings/cros_settings.h"
157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "chrome/browser/chromeos/settings/cros_settings_names.h"
167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "chrome/browser/policy/cloud/cloud_policy_constants.h"
187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "chrome/browser/policy/proto/chromeos/chrome_device_policy.pb.h"
197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h"
207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "chrome/test/base/scoped_testing_local_state.h"
217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "chrome/test/base/testing_browser_process.h"
227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "content/public/test/test_browser_thread.h"
237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include "testing/gtest/include/gtest/gtest.h"
247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace em = enterprise_management;
267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace chromeos {
287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass CrosSettingsTest : public testing::Test {
307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman protected:
317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  CrosSettingsTest()
327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      : message_loop_(MessageLoop::TYPE_UI),
337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman        ui_thread_(content::BrowserThread::UI, &message_loop_),
347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman        local_state_(TestingBrowserProcess::GetGlobal()),
357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman        weak_factory_(this) {}
367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  virtual ~CrosSettingsTest() {}
387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  virtual void TearDown() OVERRIDE {
40b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad    ASSERT_TRUE(expected_props_.empty());
417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    STLDeleteValues(&expected_props_);
42e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer    expected_props_.clear();
43b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  }
44b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
45b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  void FetchPref(const std::string& pref) {
46b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    if (expected_props_.find(pref) == expected_props_.end())
487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      return;
497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    if (CrosSettingsProvider::TRUSTED ==
517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman            settings_.PrepareTrustedValues(
527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman                base::Bind(&CrosSettingsTest::FetchPref,
537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman                           weak_factory_.GetWeakPtr(), pref))) {
547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      scoped_ptr<base::Value> expected_value(
55b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad          expected_props_.find(pref)->second);
56b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad      const base::Value* pref_value = settings_.GetPref(pref);
57b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad      if (expected_value.get()) {
587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman        ASSERT_TRUE(pref_value);
5957f7dafcb769852a21870148e91535421c45d037Alexey Samsonov        ASSERT_TRUE(expected_value->Equals(pref_value));
609c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin      } else {
6157f7dafcb769852a21870148e91535421c45d037Alexey Samsonov        ASSERT_FALSE(pref_value);
629c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin      }
637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman      expected_props_.erase(pref);
647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    }
657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  }
667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  void SetPref(const std::string& pref_name, const base::Value* value) {
687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    settings_.Set(pref_name, *value);
707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  }
717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  void AddExpectation(const std::string& pref_name, base::Value* value) {
737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    base::Value*& entry = expected_props_[pref_name];
747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    delete entry;
757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    entry = value;
767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  }
777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  void PrepareEmptyPolicy(em::PolicyData* policy) {
797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    // Prepare some policy blob.
807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    em::PolicyFetchResponse response;
817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    em::ChromeDeviceSettingsProto pol;
827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    policy->set_policy_type(policy::dm_protocol::kChromeDevicePolicyType);
837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    policy->set_username("me@owner");
847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    policy->set_policy_value(pol.SerializeAsString());
857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    // Wipe the signed settings store.
867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    response.set_policy_data(policy->SerializeAsString());
877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman    response.set_policy_data_signature("false");
887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  }
897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  MessageLoop message_loop_;
917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  content::TestBrowserThread ui_thread_;
927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  ScopedTestingLocalState local_state_;
947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  ScopedDeviceSettingsTestHelper device_settings_test_helper_;
957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  CrosSettings settings_;
967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::WeakPtrFactory<CrosSettingsTest> weak_factory_;
987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
999c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin  std::map<std::string, base::Value*> expected_props_;
1009c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin};
1019c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin
1029c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey YasskinTEST_F(CrosSettingsTest, SetPref) {
1039c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin  // Change to something that is not the default.
1049c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin  AddExpectation(kAccountsPrefAllowGuest,
10557f7dafcb769852a21870148e91535421c45d037Alexey Samsonov                 base::Value::CreateBooleanValue(false));
1069c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin  SetPref(kAccountsPrefAllowGuest, expected_props_[kAccountsPrefAllowGuest]);
1079c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin  FetchPref(kAccountsPrefAllowGuest);
108354362524a72b3fa43a6c09380b7ae3b2380cbbaJuergen Ributzka  ASSERT_TRUE(expected_props_.empty());
1099c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin}
1109c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin
1119c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey YasskinTEST_F(CrosSettingsTest, GetPref) {
1129c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin  // We didn't change the default so look for it.
113955f9387516da03b51337b126bebb43567141173Benjamin Kramer  AddExpectation(kAccountsPrefAllowGuest,
1149c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin                 base::Value::CreateBooleanValue(true));
1159c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin  FetchPref(kAccountsPrefAllowGuest);
1169c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin}
1177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanTEST_F(CrosSettingsTest, SetWhitelist) {
1199c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin  // Setting the whitelist should also switch the value of
1209c0c3bf1ec2feb861f19867d4091350010b23de6Jeffrey Yasskin  // kAccountsPrefAllowNewUser to false.
1217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::ListValue whitelist;
12257f7dafcb769852a21870148e91535421c45d037Alexey Samsonov  whitelist.Append(new base::StringValue("me@owner"));
12357f7dafcb769852a21870148e91535421c45d037Alexey Samsonov  AddExpectation(kAccountsPrefAllowNewUser,
12457f7dafcb769852a21870148e91535421c45d037Alexey Samsonov                 base::Value::CreateBooleanValue(false));
12557f7dafcb769852a21870148e91535421c45d037Alexey Samsonov  AddExpectation(kAccountsPrefUsers, whitelist.DeepCopy());
12657f7dafcb769852a21870148e91535421c45d037Alexey Samsonov  SetPref(kAccountsPrefUsers, &whitelist);
12757f7dafcb769852a21870148e91535421c45d037Alexey Samsonov  FetchPref(kAccountsPrefAllowNewUser);
1287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefUsers);
129b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad}
130b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
131b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay FoadTEST_F(CrosSettingsTest, SetWhitelistWithListOps) {
1327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::ListValue* whitelist = new base::ListValue();
1337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::StringValue hacky_user("h@xxor");
134b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  whitelist->Append(hacky_user.DeepCopy());
1357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefAllowNewUser,
136190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer                 base::Value::CreateBooleanValue(false));
1377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefUsers, whitelist);
1387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  // Add some user to the whitelist.
1397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  settings_.AppendToList(kAccountsPrefUsers, &hacky_user);
140190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer  FetchPref(kAccountsPrefAllowNewUser);
1417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefUsers);
1427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}
143b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
144b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay FoadTEST_F(CrosSettingsTest, SetWhitelistWithListOps2) {
145b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  base::ListValue whitelist;
1467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::StringValue hacky_user("h@xxor");
1477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::StringValue lamy_user("l@mer");
1487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  whitelist.Append(hacky_user.DeepCopy());
1497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::ListValue* expected_list = whitelist.DeepCopy();
1507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  whitelist.Append(lamy_user.DeepCopy());
1517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefAllowNewUser,
1527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman                 base::Value::CreateBooleanValue(false));
1537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefUsers, whitelist.DeepCopy());
1547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  SetPref(kAccountsPrefUsers, &whitelist);
1557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefAllowNewUser);
1567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefUsers);
1577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  ASSERT_TRUE(expected_props_.empty());
15857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  // Now try to remove one element from that list.
1597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefUsers, expected_list);
1607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  settings_.RemoveFromList(kAccountsPrefUsers, &lamy_user);
1617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefAllowNewUser);
1627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefUsers);
1637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}
1647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanTEST_F(CrosSettingsTest, SetEmptyWhitelist) {
1667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  // Setting the whitelist empty should switch the value of
1677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  // kAccountsPrefAllowNewUser to true.
1687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::ListValue whitelist;
1697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefAllowNewUser,
1707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman                 base::Value::CreateBooleanValue(true));
1717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  SetPref(kAccountsPrefUsers, &whitelist);
1727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefAllowNewUser);
1737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefUsers);
1747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}
1757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
1767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanTEST_F(CrosSettingsTest, SetEmptyWhitelistAndNoNewUsers) {
1777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  // Setting the whitelist empty and disallowing new users should result in no
1787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  // new users allowed.
1797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::ListValue whitelist;
1807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::FundamentalValue disallow_new(false);
1817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefUsers, whitelist.DeepCopy());
1827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefAllowNewUser,
1837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman                 base::Value::CreateBooleanValue(false));
1847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  SetPref(kAccountsPrefUsers, &whitelist);
18557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  SetPref(kAccountsPrefAllowNewUser, &disallow_new);
18657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  FetchPref(kAccountsPrefAllowNewUser);
18757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  FetchPref(kAccountsPrefUsers);
188b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad}
1897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
190b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay FoadTEST_F(CrosSettingsTest, SetWhitelistAndNoNewUsers) {
1917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  // Setting the whitelist should allow us to set kAccountsPrefAllowNewUser to
19257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  // false (which is the implicit value too).
1937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::ListValue whitelist;
1947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  whitelist.Append(new base::StringValue("me@owner"));
19557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  AddExpectation(kAccountsPrefUsers, whitelist.DeepCopy());
19657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  AddExpectation(kAccountsPrefAllowNewUser,
1977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman                 base::Value::CreateBooleanValue(false));
1987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  SetPref(kAccountsPrefUsers, &whitelist);
19957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer  SetPref(kAccountsPrefAllowNewUser,
2007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman          expected_props_[kAccountsPrefAllowNewUser]);
2017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefAllowNewUser);
2027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefUsers);
2037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}
2047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanTEST_F(CrosSettingsTest, SetAllowNewUsers) {
2067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  // Setting kAccountsPrefAllowNewUser to true with no whitelist should be ok.
2077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefAllowNewUser,
2087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman                 base::Value::CreateBooleanValue(true));
2097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  SetPref(kAccountsPrefAllowNewUser,
2107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman          expected_props_[kAccountsPrefAllowNewUser]);
2117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefAllowNewUser);
2127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}
2137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanTEST_F(CrosSettingsTest, SetEphemeralUsersEnabled) {
2157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::FundamentalValue ephemeral_users_enabled(true);
2167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  AddExpectation(kAccountsPrefEphemeralUsersEnabled,
2177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman                 base::Value::CreateBooleanValue(true));
2187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  SetPref(kAccountsPrefEphemeralUsersEnabled, &ephemeral_users_enabled);
2197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  FetchPref(kAccountsPrefEphemeralUsersEnabled);
2207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}
2217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman
2227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanTEST_F(CrosSettingsTest, FindEmailInList) {
2237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  base::ListValue list;
2247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  list.Append(new base::StringValue("user@example.com"));
2257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  list.Append(new base::StringValue("nodomain"));
2267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  list.Append(new base::StringValue("with.dots@gmail.com"));
227b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  list.Append(new base::StringValue("Upper@example.com"));
228b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
229b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  CrosSettings* cs = &settings_;
230b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  cs->Set(kAccountsPrefUsers, list);
231b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
232b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "user@example.com"));
233b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  EXPECT_FALSE(cs->FindEmailInList(kAccountsPrefUsers, "us.er@example.com"));
2347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "USER@example.com"));
235b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  EXPECT_FALSE(cs->FindEmailInList(kAccountsPrefUsers, "user"));
236b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
2377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "nodomain"));
238b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "nodomain@gmail.com"));
2397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "no.domain@gmail.com"));
240b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "NO.DOMAIN"));
241b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
2427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "with.dots@gmail.com"));
2437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "withdots@gmail.com"));
2447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "WITH.DOTS@gmail.com"));
2457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "WITHDOTS"));
246b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
247b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "Upper@example.com"));
2487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_FALSE(cs->FindEmailInList(kAccountsPrefUsers, "U.pper@example.com"));
2497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_FALSE(cs->FindEmailInList(kAccountsPrefUsers, "Upper"));
2507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman  EXPECT_TRUE(cs->FindEmailInList(kAccountsPrefUsers, "upper@example.com"));
251b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad}
252b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad
2537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}  // namespace chromeos
2547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman