| Index: chrome/browser/chromeos/cros/network_library_unittest.cc
|
| diff --git a/chrome/browser/chromeos/cros/network_library_unittest.cc b/chrome/browser/chromeos/cros/network_library_unittest.cc
|
| deleted file mode 100644
|
| index 41ff24cadabd43e873abd6e2774ede649957504d..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/cros/network_library_unittest.cc
|
| +++ /dev/null
|
| @@ -1,454 +0,0 @@
|
| -// Copyright (c) 2012 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 <pk11pub.h>
|
| -
|
| -#include <map>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/at_exit.h"
|
| -#include "base/callback.h"
|
| -#include "base/files/scoped_temp_dir.h"
|
| -#include "base/json/json_reader.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/path_service.h"
|
| -#include "chrome/browser/chromeos/cros/network_library.h"
|
| -#include "chrome/browser/chromeos/cros/network_library_impl_stub.h"
|
| -#include "chrome/browser/chromeos/enrollment_dialog_view.h"
|
| -#include "chrome/browser/chromeos/login/mock_user_manager.h"
|
| -#include "chrome/browser/chromeos/login/user_manager.h"
|
| -#include "chrome/browser/google_apis/test_util.h"
|
| -#include "chrome/common/chrome_paths.h"
|
| -#include "chromeos/network/onc/onc_certificate_importer_impl.h"
|
| -#include "chromeos/network/onc/onc_constants.h"
|
| -#include "chromeos/network/onc/onc_test_utils.h"
|
| -#include "chromeos/network/onc/onc_utils.h"
|
| -#include "crypto/nss_util.h"
|
| -#include "net/base/crypto_module.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::AnyNumber;
|
| -using ::testing::Return;
|
| -
|
| -namespace chromeos {
|
| -
|
| -namespace {
|
| -
|
| -// Have to do a stub here because MOCK can't handle closure arguments.
|
| -class StubEnrollmentDelegate : public EnrollmentDelegate {
|
| - public:
|
| - explicit StubEnrollmentDelegate()
|
| - : did_enroll(false),
|
| - correct_args(false) {}
|
| -
|
| - virtual bool Enroll(const std::vector<std::string>& uri_list,
|
| - const base::Closure& closure) OVERRIDE {
|
| - std::vector<std::string> expected_uri_list;
|
| - expected_uri_list.push_back("http://youtu.be/dQw4w9WgXcQ");
|
| - expected_uri_list.push_back("chrome-extension://abc/keygen-cert.html");
|
| - if (uri_list == expected_uri_list)
|
| - correct_args = true;
|
| -
|
| - did_enroll = true;
|
| - closure.Run();
|
| - return true;
|
| - }
|
| -
|
| - bool did_enroll;
|
| - bool correct_args;
|
| -};
|
| -
|
| -void WifiNetworkConnectCallback(NetworkLibrary* cros, WifiNetwork* wifi) {
|
| - cros->ConnectToWifiNetwork(wifi, false);
|
| -}
|
| -
|
| -void VirtualNetworkConnectCallback(NetworkLibrary* cros, VirtualNetwork* vpn) {
|
| - cros->ConnectToVirtualNetwork(vpn);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -TEST(NetworkLibraryTest, DecodeNonAsciiSSID) {
|
| - // Sets network name.
|
| - {
|
| - std::string wifi_setname = "SSID TEST";
|
| - std::string wifi_setname_result = "SSID TEST";
|
| - WifiNetwork* wifi = new WifiNetwork("fw");
|
| - wifi->SetName(wifi_setname);
|
| - EXPECT_EQ(wifi->name(), wifi_setname_result);
|
| - delete wifi;
|
| - }
|
| -
|
| - // Truncates invalid UTF-8
|
| - {
|
| - std::string wifi_setname2 = "SSID TEST \x01\xff!";
|
| - std::string wifi_setname2_result = "SSID TEST \xEF\xBF\xBD\xEF\xBF\xBD!";
|
| - WifiNetwork* wifi = new WifiNetwork("fw");
|
| - wifi->SetName(wifi_setname2);
|
| - EXPECT_EQ(wifi->name(), wifi_setname2_result);
|
| - delete wifi;
|
| - }
|
| -
|
| - // UTF8 SSID
|
| - {
|
| - std::string wifi_utf8 = "UTF-8 \u3042\u3044\u3046";
|
| - std::string wifi_utf8_result = "UTF-8 \xE3\x81\x82\xE3\x81\x84\xE3\x81\x86";
|
| - WifiNetwork* wifi = new WifiNetwork("fw");
|
| - WifiNetwork::TestApi test_wifi(wifi);
|
| - test_wifi.SetSsid(wifi_utf8);
|
| - EXPECT_EQ(wifi->name(), wifi_utf8_result);
|
| - delete wifi;
|
| - }
|
| -
|
| - // latin1 SSID -> UTF8 SSID
|
| - {
|
| - std::string wifi_latin1 = "latin-1 \xc0\xcb\xcc\xd6\xfb";
|
| - std::string wifi_latin1_result = "latin-1 \u00c0\u00cb\u00cc\u00d6\u00fb";
|
| - WifiNetwork* wifi = new WifiNetwork("fw");
|
| - WifiNetwork::TestApi test_wifi(wifi);
|
| - test_wifi.SetSsid(wifi_latin1);
|
| - EXPECT_EQ(wifi->name(), wifi_latin1_result);
|
| - delete wifi;
|
| - }
|
| -
|
| - // Hex SSID
|
| - {
|
| - std::string wifi_hex = "5468697320697320484558205353494421";
|
| - std::string wifi_hex_result = "This is HEX SSID!";
|
| - WifiNetwork* wifi = new WifiNetwork("fw");
|
| - WifiNetwork::TestApi test_wifi(wifi);
|
| - test_wifi.SetHexSsid(wifi_hex);
|
| - EXPECT_EQ(wifi->name(), wifi_hex_result);
|
| - delete wifi;
|
| - }
|
| -}
|
| -
|
| -// Create a stub libcros for testing NetworkLibrary functionality through
|
| -// NetworkLibraryStubImpl.
|
| -// NOTE: It would be of little value to test stub functions that simply return
|
| -// predefined values, e.g. ethernet_available(). However, many other functions
|
| -// such as connected_network() return values which are set indirectly and thus
|
| -// we can test the logic of those setters.
|
| -
|
| -class NetworkLibraryStubTest : public ::testing::Test {
|
| - public:
|
| - NetworkLibraryStubTest() : cros_(NULL) {}
|
| -
|
| - protected:
|
| - virtual void SetUp() {
|
| - cros_ = static_cast<NetworkLibraryImplStub*>(NetworkLibrary::Get());
|
| - ASSERT_TRUE(cros_) << "GetNetworkLibrary() Failed!";
|
| - }
|
| -
|
| - virtual void TearDown() {
|
| - cros_ = NULL;
|
| - }
|
| -
|
| - // Load the ONC from |onc_file| using NetworkLibrary::LoadOncNetworks. Check
|
| - // that return value matches |expect_successful_import| and the configuration
|
| - // that would be sent to Shill matches |shill_json|.
|
| - void LoadOncAndVerifyNetworks(std::string onc_file,
|
| - std::string shill_json,
|
| - onc::ONCSource source,
|
| - bool expect_successful_import) {
|
| - MockUserManager* mock_user_manager =
|
| - new ::testing::StrictMock<MockUserManager>;
|
| - // Takes ownership of |mock_user_manager|.
|
| - ScopedUserManagerEnabler user_manager_enabler(mock_user_manager);
|
| - mock_user_manager->SetActiveUser("madmax@my.domain.com");
|
| - EXPECT_CALL(*mock_user_manager, IsUserLoggedIn())
|
| - .Times(AnyNumber())
|
| - .WillRepeatedly(Return(true));
|
| - EXPECT_CALL(*mock_user_manager, Shutdown());
|
| -
|
| - scoped_ptr<base::DictionaryValue> onc_blob =
|
| - onc::test_utils::ReadTestDictionary(onc_file);
|
| - base::ListValue* onc_network_configs;
|
| - onc_blob->GetListWithoutPathExpansion(
|
| - onc::toplevel_config::kNetworkConfigurations,
|
| - &onc_network_configs);
|
| - ASSERT_TRUE(onc_network_configs);
|
| -
|
| - scoped_ptr<base::Value> expected_value =
|
| - google_apis::test_util::LoadJSONFile(shill_json);
|
| - base::DictionaryValue* expected_configs;
|
| - expected_value->GetAsDictionary(&expected_configs);
|
| -
|
| - cros_->LoadOncNetworks(*onc_network_configs, source);
|
| -
|
| - const std::map<std::string, base::DictionaryValue*>& configs =
|
| - cros_->GetConfigurations();
|
| -
|
| - EXPECT_EQ(expected_configs->size(), configs.size());
|
| -
|
| - for (base::DictionaryValue::Iterator it(*expected_configs); !it.IsAtEnd();
|
| - it.Advance()) {
|
| - const base::DictionaryValue* expected_config;
|
| - it.value().GetAsDictionary(&expected_config);
|
| -
|
| - std::map<std::string, base::DictionaryValue*>::const_iterator entry =
|
| - configs.find(it.key());
|
| - EXPECT_NE(entry, configs.end());
|
| - base::DictionaryValue* actual_config = entry->second;
|
| - EXPECT_TRUE(onc::test_utils::Equals(expected_config, actual_config));
|
| - }
|
| - }
|
| -
|
| - ScopedStubNetworkLibraryEnabler cros_stub_;
|
| - NetworkLibraryImplStub* cros_;
|
| -
|
| - protected:
|
| - scoped_refptr<net::CryptoModule> slot_;
|
| - crypto::ScopedTestNSSDB test_nssdb_;
|
| -};
|
| -
|
| -// Default stub state:
|
| -// vpn1: disconnected, L2TP/IPsec + PSK
|
| -// vpn2: disconnected, L2TP/IPsec + user cert
|
| -// vpn3: disconnected, OpenVpn
|
| -// eth1: connected (active network)
|
| -// wifi1: connected
|
| -// wifi2: disconnected
|
| -// wifi3: disconnected, WEP
|
| -// wifi4: disconnected, 8021x
|
| -// wifi5: disconnected
|
| -// wifi6: disconnected
|
| -// cellular1: connected, activated, not roaming
|
| -// cellular2: disconnected, activated, roaming
|
| -
|
| -TEST_F(NetworkLibraryStubTest, NetworkLibraryAccessors) {
|
| - // Set up state.
|
| - // Set wifi2->connecting for these tests.
|
| - WifiNetwork* wifi2 = cros_->FindWifiNetworkByPath("wifi2");
|
| - ASSERT_NE(static_cast<const Network*>(NULL), wifi2);
|
| - Network::TestApi test_wifi2(wifi2);
|
| - test_wifi2.SetConnecting();
|
| - // Set cellular1->connecting for these tests.
|
| - CellularNetwork* cellular1 = cros_->FindCellularNetworkByPath("cellular1");
|
| - ASSERT_NE(static_cast<const Network*>(NULL), cellular1);
|
| - Network::TestApi test_cellular1(cellular1);
|
| - test_cellular1.SetConnecting();
|
| -
|
| - // Ethernet
|
| - ASSERT_NE(static_cast<const EthernetNetwork*>(NULL),
|
| - cros_->ethernet_network());
|
| - EXPECT_EQ("eth1", cros_->ethernet_network()->service_path());
|
| - EXPECT_NE(static_cast<const Network*>(NULL),
|
| - cros_->FindNetworkByPath("eth1"));
|
| - EXPECT_TRUE(cros_->ethernet_connected());
|
| - EXPECT_FALSE(cros_->ethernet_connecting());
|
| -
|
| - // Wifi
|
| - ASSERT_NE(static_cast<const WifiNetwork*>(NULL), cros_->wifi_network());
|
| - EXPECT_EQ("wifi1", cros_->wifi_network()->service_path());
|
| - EXPECT_NE(static_cast<const WifiNetwork*>(NULL),
|
| - cros_->FindWifiNetworkByPath("wifi1"));
|
| - EXPECT_TRUE(cros_->wifi_connected());
|
| - EXPECT_FALSE(cros_->wifi_connecting()); // Only true for active wifi.
|
| - EXPECT_GE(cros_->wifi_networks().size(), 1U);
|
| -
|
| - // Cellular
|
| - ASSERT_NE(static_cast<const CellularNetwork*>(NULL),
|
| - cros_->cellular_network());
|
| - EXPECT_EQ("cellular1", cros_->cellular_network()->service_path());
|
| - EXPECT_NE(static_cast<const CellularNetwork*>(NULL),
|
| - cros_->FindCellularNetworkByPath("cellular1"));
|
| - EXPECT_FALSE(cros_->cellular_connected());
|
| - EXPECT_TRUE(cros_->cellular_connecting());
|
| - EXPECT_GE(cros_->cellular_networks().size(), 1U);
|
| -
|
| - // VPN
|
| - ASSERT_EQ(static_cast<const VirtualNetwork*>(NULL), cros_->virtual_network());
|
| - EXPECT_GE(cros_->virtual_networks().size(), 1U);
|
| -
|
| - // Active network and global state
|
| - EXPECT_TRUE(cros_->Connected());
|
| - ASSERT_NE(static_cast<const Network*>(NULL), cros_->active_network());
|
| - EXPECT_EQ("eth1", cros_->active_network()->service_path());
|
| - ASSERT_NE(static_cast<const Network*>(NULL), cros_->connected_network());
|
| - EXPECT_EQ("eth1", cros_->connected_network()->service_path());
|
| - // The "wifi1" is connected, so we do not return "wifi2" for the connecting
|
| - // network. There is no conencted cellular network, so "cellular1" is
|
| - // returned by connecting_network().
|
| - EXPECT_TRUE(cros_->Connecting());
|
| - ASSERT_NE(static_cast<const Network*>(NULL), cros_->connecting_network());
|
| - EXPECT_EQ("cellular1", cros_->connecting_network()->service_path());
|
| -}
|
| -
|
| -TEST_F(NetworkLibraryStubTest, NetworkConnectWifi) {
|
| - WifiNetwork* wifi1 = cros_->FindWifiNetworkByPath("wifi1");
|
| - ASSERT_NE(static_cast<const WifiNetwork*>(NULL), wifi1);
|
| - EXPECT_TRUE(wifi1->connected());
|
| - cros_->DisconnectFromNetwork(wifi1);
|
| - EXPECT_FALSE(wifi1->connected());
|
| - EXPECT_TRUE(cros_->CanConnectToNetwork(wifi1));
|
| - cros_->ConnectToWifiNetwork(wifi1);
|
| - EXPECT_TRUE(wifi1->connected());
|
| -}
|
| -
|
| -TEST_F(NetworkLibraryStubTest, NetworkConnectWifiWithCertPattern) {
|
| - scoped_ptr<base::DictionaryValue> onc_root =
|
| - onc::test_utils::ReadTestDictionary("certificate-client.onc");
|
| - base::ListValue* certificates;
|
| - onc_root->GetListWithoutPathExpansion(onc::toplevel_config::kCertificates,
|
| - &certificates);
|
| -
|
| - onc::CertificateImporterImpl importer;
|
| - ASSERT_TRUE(importer.ImportCertificates(
|
| - *certificates, onc::ONC_SOURCE_USER_IMPORT, NULL));
|
| -
|
| - WifiNetwork* wifi = cros_->FindWifiNetworkByPath("wifi_cert_pattern");
|
| -
|
| - StubEnrollmentDelegate* enrollment_delegate = new StubEnrollmentDelegate();
|
| - wifi->SetEnrollmentDelegate(enrollment_delegate);
|
| - EXPECT_FALSE(enrollment_delegate->did_enroll);
|
| - EXPECT_FALSE(enrollment_delegate->correct_args);
|
| -
|
| - ASSERT_NE(static_cast<const WifiNetwork*>(NULL), wifi);
|
| - EXPECT_FALSE(wifi->connected());
|
| - EXPECT_TRUE(cros_->CanConnectToNetwork(wifi));
|
| - EXPECT_FALSE(wifi->connected());
|
| - wifi->AttemptConnection(
|
| - base::Bind(&WifiNetworkConnectCallback, cros_, wifi));
|
| - EXPECT_TRUE(wifi->connected());
|
| - EXPECT_TRUE(enrollment_delegate->did_enroll);
|
| - EXPECT_TRUE(enrollment_delegate->correct_args);
|
| -}
|
| -
|
| -TEST_F(NetworkLibraryStubTest, NetworkConnectVPNWithCertPattern) {
|
| - scoped_ptr<base::DictionaryValue> onc_root =
|
| - onc::test_utils::ReadTestDictionary("certificate-client.onc");
|
| - base::ListValue* certificates;
|
| - onc_root->GetListWithoutPathExpansion(onc::toplevel_config::kCertificates,
|
| - &certificates);
|
| -
|
| - onc::CertificateImporterImpl importer;
|
| - ASSERT_TRUE(importer.ImportCertificates(
|
| - *certificates, onc::ONC_SOURCE_USER_IMPORT, NULL));
|
| -
|
| - VirtualNetwork* vpn = cros_->FindVirtualNetworkByPath("vpn_cert_pattern");
|
| -
|
| - StubEnrollmentDelegate* enrollment_delegate = new StubEnrollmentDelegate();
|
| - vpn->SetEnrollmentDelegate(enrollment_delegate);
|
| - EXPECT_FALSE(enrollment_delegate->did_enroll);
|
| - EXPECT_FALSE(enrollment_delegate->correct_args);
|
| -
|
| - ASSERT_NE(static_cast<const VirtualNetwork*>(NULL), vpn);
|
| - EXPECT_FALSE(vpn->connected());
|
| - EXPECT_TRUE(cros_->CanConnectToNetwork(vpn));
|
| - EXPECT_FALSE(vpn->connected());
|
| - vpn->AttemptConnection(
|
| - base::Bind(&VirtualNetworkConnectCallback, cros_, vpn));
|
| - EXPECT_TRUE(vpn->connected());
|
| - EXPECT_TRUE(enrollment_delegate->did_enroll);
|
| - EXPECT_TRUE(enrollment_delegate->correct_args);
|
| -}
|
| -
|
| -TEST_F(NetworkLibraryStubTest, NetworkConnectVPN) {
|
| - VirtualNetwork* vpn1 = cros_->FindVirtualNetworkByPath("vpn1");
|
| - EXPECT_NE(static_cast<const VirtualNetwork*>(NULL), vpn1);
|
| - EXPECT_FALSE(vpn1->connected());
|
| - EXPECT_TRUE(cros_->CanConnectToNetwork(vpn1));
|
| - cros_->ConnectToVirtualNetwork(vpn1);
|
| - EXPECT_TRUE(vpn1->connected());
|
| - ASSERT_NE(static_cast<const VirtualNetwork*>(NULL), cros_->virtual_network());
|
| - EXPECT_EQ("vpn1", cros_->virtual_network()->service_path());
|
| -}
|
| -
|
| -namespace {
|
| -
|
| -struct ImportParams {
|
| - // |onc_file|: Filename of source ONC, relative to
|
| - // chromeos/test/data/network.
|
| - // |shill_file|: Filename of expected Shill config, relative to
|
| - // chrome/test/data).
|
| - // |onc_source|: The source of the ONC.
|
| - // |expect_import_result|: The expected return value of LoadOncNetworks.
|
| - ImportParams(const std::string& onc_file,
|
| - const std::string& shill_file,
|
| - onc::ONCSource onc_source,
|
| - bool expect_import_result = true)
|
| - : onc_file(onc_file),
|
| - shill_file(shill_file),
|
| - onc_source(onc_source),
|
| - expect_import_result(expect_import_result) {
|
| - }
|
| -
|
| - std::string onc_file, shill_file;
|
| - onc::ONCSource onc_source;
|
| - bool expect_import_result;
|
| -};
|
| -
|
| -::std::ostream& operator<<(::std::ostream& os, const ImportParams& params) {
|
| - return os << "(" << params.onc_file << ", " << params.shill_file << ", "
|
| - << onc::GetSourceAsString(params.onc_source) << ", "
|
| - << (params.expect_import_result ? "valid" : "invalid") << ")";
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class LoadOncNetworksTest
|
| - : public NetworkLibraryStubTest,
|
| - public ::testing::WithParamInterface<ImportParams> {
|
| -};
|
| -
|
| -TEST_P(LoadOncNetworksTest, VerifyNetworksAndCertificates) {
|
| - LoadOncAndVerifyNetworks(GetParam().onc_file,
|
| - GetParam().shill_file,
|
| - GetParam().onc_source,
|
| - GetParam().expect_import_result);
|
| -}
|
| -
|
| -INSTANTIATE_TEST_CASE_P(
|
| - LoadOncNetworksTest,
|
| - LoadOncNetworksTest,
|
| - ::testing::Values(
|
| - ImportParams("managed_toplevel1_with_cert_pems.onc",
|
| - "chromeos/net/shill_for_managed_toplevel1.json",
|
| - onc::ONC_SOURCE_USER_POLICY),
|
| - ImportParams("managed_toplevel2_with_cert_pems.onc",
|
| - "chromeos/net/shill_for_managed_toplevel2.json",
|
| - onc::ONC_SOURCE_USER_POLICY),
|
| - ImportParams("managed_toplevel_l2tpipsec.onc",
|
| - "chromeos/net/shill_for_managed_toplevel_l2tpipsec.json",
|
| - onc::ONC_SOURCE_USER_POLICY),
|
| - ImportParams("managed_toplevel_wifi_peap.onc",
|
| - "chromeos/net/shill_for_managed_toplevel_wifi_peap.json",
|
| - onc::ONC_SOURCE_DEVICE_POLICY),
|
| - ImportParams("toplevel_wifi_open.onc",
|
| - "chromeos/net/shill_for_toplevel_wifi_open.json",
|
| - onc::ONC_SOURCE_DEVICE_POLICY),
|
| - ImportParams("toplevel_wifi_wep_proxy.onc",
|
| - "chromeos/net/shill_for_toplevel_wifi_wep_proxy.json",
|
| - onc::ONC_SOURCE_USER_POLICY),
|
| - ImportParams("toplevel_wifi_wpa_psk.onc",
|
| - "chromeos/net/shill_for_toplevel_wifi_wpa_psk.json",
|
| - onc::ONC_SOURCE_USER_POLICY),
|
| - ImportParams("toplevel_wifi_leap.onc",
|
| - "chromeos/net/shill_for_toplevel_wifi_leap.json",
|
| - onc::ONC_SOURCE_USER_POLICY),
|
| - ImportParams(
|
| - "toplevel_wifi_eap_clientcert_with_cert_pems.onc",
|
| - "chromeos/net/shill_for_toplevel_wifi_eap_clientcert.json",
|
| - onc::ONC_SOURCE_USER_POLICY),
|
| - ImportParams("toplevel_openvpn_clientcert_with_cert_pems.onc",
|
| - "chromeos/net/shill_for_toplevel_openvpn_clientcert.json",
|
| - onc::ONC_SOURCE_USER_POLICY),
|
| - ImportParams("toplevel_wifi_remove.onc",
|
| - "chromeos/net/shill_for_toplevel_wifi_remove.json",
|
| - onc::ONC_SOURCE_USER_POLICY)));
|
| -
|
| -// TODO(stevenjb): Test remembered networks.
|
| -
|
| -// TODO(stevenjb): Test network profiles.
|
| -
|
| -// TODO(stevenjb): Test network devices.
|
| -
|
| -// TODO(stevenjb): Test data plans.
|
| -
|
| -// TODO(stevenjb): Test monitor network / device.
|
| -
|
| -} // namespace chromeos
|
|
|