| Index: chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc
|
| diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..dbc5e5ce2387608f3715906c79c6eb6e2b52c500
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc
|
| @@ -0,0 +1,141 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <queue>
|
| +#include <utility>
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/memory/linked_ptr.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/run_loop.h"
|
| +#include "base/test/scoped_path_override.h"
|
| +#include "base/values.h"
|
| +#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h"
|
| +#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h"
|
| +#include "chrome/browser/chromeos/settings/device_settings_provider.h"
|
| +#include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
|
| +#include "chrome/common/chrome_paths.h"
|
| +#include "chrome/test/base/scoped_testing_local_state.h"
|
| +#include "chrome/test/base/testing_browser_process.h"
|
| +#include "chrome/test/base/testing_profile.h"
|
| +#include "chromeos/settings/cros_settings_names.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace chromeos {
|
| +
|
| +namespace {
|
| +
|
| +void OnPrefChanged(const std::string& /* setting */) {
|
| +}
|
| +
|
| +class PrefsChecker : public OwnerSettingsServiceChromeOS::Observer {
|
| + public:
|
| + PrefsChecker(OwnerSettingsServiceChromeOS* service,
|
| + DeviceSettingsProvider* provider)
|
| + : service_(service), provider_(provider) {
|
| + CHECK(service_);
|
| + CHECK(provider_);
|
| + service_->AddObserver(this);
|
| + }
|
| +
|
| + virtual ~PrefsChecker() { service_->RemoveObserver(this); }
|
| +
|
| + // OwnerSettingsServiceChromeOS::Observer implementation:
|
| + virtual void OnSetCompleted(bool success) override {
|
| + CHECK(success);
|
| + CHECK(!set_requests_.empty());
|
| + SetRequest request = set_requests_.front();
|
| + set_requests_.pop();
|
| + const base::Value* value = provider_->Get(request.first);
|
| + CHECK(request.second->Equals(value))
|
| + << "Incorrect value for setting: " << request.first;
|
| + if (set_requests_.empty())
|
| + loop_.Quit();
|
| + }
|
| +
|
| + void Set(const std::string& setting, const base::Value& value) {
|
| + service_->Set(setting, value);
|
| + set_requests_.push(
|
| + SetRequest(setting, linked_ptr<base::Value>(value.DeepCopy())));
|
| + }
|
| +
|
| + void Wait() { loop_.Run(); }
|
| +
|
| + private:
|
| + OwnerSettingsServiceChromeOS* service_;
|
| + DeviceSettingsProvider* provider_;
|
| + base::RunLoop loop_;
|
| +
|
| + typedef std::pair<std::string, linked_ptr<base::Value>> SetRequest;
|
| + std::queue<SetRequest> set_requests_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PrefsChecker);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class OwnerSettingsServiceChromeOSTest : public DeviceSettingsTestBase {
|
| + public:
|
| + OwnerSettingsServiceChromeOSTest()
|
| + : local_state_(TestingBrowserProcess::GetGlobal()),
|
| + user_data_dir_override_(chrome::DIR_USER_DATA) {}
|
| +
|
| + virtual void SetUp() override {
|
| + DeviceSettingsTestBase::SetUp();
|
| + provider_.reset(new DeviceSettingsProvider(base::Bind(&OnPrefChanged),
|
| + &device_settings_service_));
|
| + owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
|
| + InitOwner(device_policy_.policy_data().username(), true);
|
| + FlushDeviceSettings();
|
| + }
|
| +
|
| + virtual void TearDown() override { DeviceSettingsTestBase::TearDown(); }
|
| +
|
| + void TestSingleSet(OwnerSettingsServiceChromeOS* service,
|
| + const std::string& setting,
|
| + const base::Value& in_value) {
|
| + PrefsChecker checker(service, provider_.get());
|
| + checker.Set(setting, in_value);
|
| + FlushDeviceSettings();
|
| + checker.Wait();
|
| + }
|
| +
|
| + ScopedTestingLocalState local_state_;
|
| + scoped_ptr<DeviceSettingsProvider> provider_;
|
| + base::ScopedPathOverride user_data_dir_override_;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOSTest);
|
| +};
|
| +
|
| +TEST_F(OwnerSettingsServiceChromeOSTest, SingleSetTest) {
|
| + OwnerSettingsServiceChromeOS* service =
|
| + OwnerSettingsServiceChromeOSFactory::GetForProfile(profile_.get());
|
| + ASSERT_TRUE(service);
|
| + ASSERT_TRUE(service->IsOwner());
|
| + TestSingleSet(service, kReleaseChannel, base::StringValue("dev-channel"));
|
| + TestSingleSet(service, kReleaseChannel, base::StringValue("beta-channel"));
|
| + TestSingleSet(service, kReleaseChannel, base::StringValue("stable-channel"));
|
| +}
|
| +
|
| +TEST_F(OwnerSettingsServiceChromeOSTest, MultipleSetTest) {
|
| + OwnerSettingsServiceChromeOS* service =
|
| + OwnerSettingsServiceChromeOSFactory::GetForProfile(profile_.get());
|
| + ASSERT_TRUE(service);
|
| + ASSERT_TRUE(service->IsOwner());
|
| + base::FundamentalValue allow_guest(false);
|
| + base::StringValue release_channel("stable-channel");
|
| + base::FundamentalValue show_user_names(true);
|
| +
|
| + PrefsChecker checker(service, provider_.get());
|
| +
|
| + checker.Set(kAccountsPrefAllowGuest, allow_guest);
|
| + checker.Set(kReleaseChannel, release_channel);
|
| + checker.Set(kAccountsPrefShowUserNamesOnSignIn, show_user_names);
|
| +
|
| + FlushDeviceSettings();
|
| + checker.Wait();
|
| +}
|
| +
|
| +} // namespace chromeos
|
|
|