1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
|
// Copyright 2015 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 "components/sync_wifi/wifi_config_delegate_chromeos.h"
#include <stddef.h>
#include <memory>
#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/values.h"
#include "chromeos/network/managed_network_configuration_handler.h"
#include "chromeos/network/network_handler_callbacks.h"
#include "components/sync_wifi/wifi_credential.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace sync_wifi {
namespace {
const char kSsid[] = "fake-ssid";
const char kSsidNonUtf8[] = "\xc0";
const char kUserHash[] = "fake-user-hash";
}
using chromeos::network_handler::DictionaryResultCallback;
using chromeos::network_handler::ErrorCallback;
using chromeos::network_handler::ServiceResultCallback;
class FakeManagedNetworkConfigurationHandler
: public chromeos::ManagedNetworkConfigurationHandler {
public:
FakeManagedNetworkConfigurationHandler()
: create_configuration_called_(false) {}
// ManagedNetworkConfigurationHandler implementation.
void AddObserver(chromeos::NetworkPolicyObserver* observer) override {
NOTIMPLEMENTED();
}
void RemoveObserver(chromeos::NetworkPolicyObserver* observer) override {
NOTIMPLEMENTED();
}
void GetProperties(const std::string& userhash,
const std::string& service_path,
const DictionaryResultCallback& callback,
const ErrorCallback& error_callback) override {
NOTIMPLEMENTED();
}
void GetManagedProperties(const std::string& userhash,
const std::string& service_path,
const DictionaryResultCallback& callback,
const ErrorCallback& error_callback) override {
NOTIMPLEMENTED();
}
void SetProperties(const std::string& service_path,
const base::DictionaryValue& user_settings,
const base::Closure& callback,
const ErrorCallback& error_callback) override {
NOTIMPLEMENTED();
}
void CreateConfiguration(const std::string& userhash,
const base::DictionaryValue& properties,
const ServiceResultCallback& callback,
const ErrorCallback& error_callback) const override {
EXPECT_FALSE(create_configuration_called_);
create_configuration_called_ = true;
create_configuration_success_callback_ = callback;
create_configuration_error_callback_ = error_callback;
}
void RemoveConfiguration(const std::string& service_path,
const base::Closure& callback,
const ErrorCallback& error_callback) const override {
NOTIMPLEMENTED();
}
void SetPolicy(::onc::ONCSource onc_source,
const std::string& userhash,
const base::ListValue& network_configs_onc,
const base::DictionaryValue& global_network_config) override {
NOTIMPLEMENTED();
}
bool IsAnyPolicyApplicationRunning() const override {
NOTIMPLEMENTED();
return false;
}
const base::DictionaryValue* FindPolicyByGUID(
const std::string userhash,
const std::string& guid,
::onc::ONCSource* onc_source) const override {
NOTIMPLEMENTED();
return nullptr;
}
const GuidToPolicyMap* GetNetworkConfigsFromPolicy(
const std::string& userhash) const override {
NOTIMPLEMENTED();
return nullptr;
}
const base::DictionaryValue* GetGlobalConfigFromPolicy(
const std::string& userhash) const override {
NOTIMPLEMENTED();
return nullptr;
}
const base::DictionaryValue* FindPolicyByGuidAndProfile(
const std::string& guid,
const std::string& profile_path) const override {
NOTIMPLEMENTED();
return nullptr;
}
bool create_configuration_called() const {
return create_configuration_called_;
}
const ServiceResultCallback& create_configuration_success_callback() const {
return create_configuration_success_callback_;
}
const ErrorCallback& create_configuration_error_callback() const {
return create_configuration_error_callback_;
}
private:
// Whether or not CreateConfiguration has been called on this fake.
mutable bool create_configuration_called_;
// The last |callback| passed to CreateConfiguration.
mutable ServiceResultCallback create_configuration_success_callback_;
// The last |error_callback| passed to CreateConfiguration.
mutable ErrorCallback create_configuration_error_callback_;
};
class WifiConfigDelegateChromeOsTest : public testing::Test {
protected:
WifiConfigDelegateChromeOsTest()
: fake_managed_network_configuration_handler_(
new FakeManagedNetworkConfigurationHandler()) {
config_delegate_.reset(new WifiConfigDelegateChromeOs(
kUserHash, fake_managed_network_configuration_handler_.get()));
}
// Wrapper for WifiConfigDelegateChromeOs::AddToLocalNetworks.
void AddToLocalNetworks(const WifiCredential& network_credential) {
config_delegate_->AddToLocalNetworks(network_credential);
}
// Returns a new WifiCredential constructed from the given parameters.
WifiCredential MakeCredential(const std::string& ssid,
WifiSecurityClass security_class,
const std::string& passphrase) {
std::unique_ptr<WifiCredential> credential = WifiCredential::Create(
WifiCredential::MakeSsidBytesForTest(ssid), security_class, passphrase);
CHECK(credential);
return *credential;
}
// Runs the last |callback| passed to CreateConfiguration, unless
// that |callback| is null.
void RunCreateConfigurationSuccessCallback() {
const char new_service_path[] = "/service/0";
const ServiceResultCallback callback =
fake_managed_network_configuration_handler_
->create_configuration_success_callback();
if (!callback.is_null())
callback.Run(new_service_path, nullptr);
}
// Returns whether or not CreateConfiguration has been called
// on |fake_managed_network_configuration_handler_|.
size_t create_configuration_called() const {
return fake_managed_network_configuration_handler_
->create_configuration_called();
}
// Returns the last |error_callback| passed to the CreateConfiguration
// method of |fake_managed_network_configuration_handler_|.
const ErrorCallback& create_configuration_error_callback() const {
return fake_managed_network_configuration_handler_
->create_configuration_error_callback();
}
private:
std::unique_ptr<WifiConfigDelegateChromeOs> config_delegate_;
std::unique_ptr<FakeManagedNetworkConfigurationHandler>
fake_managed_network_configuration_handler_;
DISALLOW_COPY_AND_ASSIGN(WifiConfigDelegateChromeOsTest);
};
TEST_F(WifiConfigDelegateChromeOsTest, AddToLocalNetworksOpen) {
AddToLocalNetworks(MakeCredential(kSsid, SECURITY_CLASS_NONE, ""));
ASSERT_TRUE(create_configuration_called());
RunCreateConfigurationSuccessCallback();
}
TEST_F(WifiConfigDelegateChromeOsTest, AddToLocalNetworksWep) {
AddToLocalNetworks(MakeCredential(kSsid, SECURITY_CLASS_WEP, "abcde"));
ASSERT_TRUE(create_configuration_called());
RunCreateConfigurationSuccessCallback();
}
TEST_F(WifiConfigDelegateChromeOsTest, AddToLocalNetworksPsk) {
AddToLocalNetworks(
MakeCredential(kSsid, SECURITY_CLASS_PSK, "fake-psk-passphrase"));
ASSERT_TRUE(create_configuration_called());
RunCreateConfigurationSuccessCallback();
}
TEST_F(WifiConfigDelegateChromeOsTest, AddToLocalNetworksNonUtf8) {
AddToLocalNetworks(MakeCredential(kSsidNonUtf8, SECURITY_CLASS_PSK, ""));
// TODO(quiche): Change to EXPECT_TRUE, once we support non-UTF-8 SSIDs.
EXPECT_FALSE(create_configuration_called());
}
TEST_F(WifiConfigDelegateChromeOsTest,
AddToLocalNetworksCreateConfigurationFailure) {
AddToLocalNetworks(MakeCredential(kSsid, SECURITY_CLASS_NONE, ""));
EXPECT_TRUE(create_configuration_called());
if (!create_configuration_error_callback().is_null()) {
create_configuration_error_callback().Run(
"Config.CreateConfiguration Failed",
base::MakeUnique<base::DictionaryValue>());
}
}
} // namespace sync_wifi
|