| // 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 RemoveConfigurationFromCurrentProfile( |
| 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, |
| ::onc::ONCSource* onc_source) 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 |