network_library_unittest.cc revision 558790d6acca3451cf3a6b497803a5f07d0bec58
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <pk11pub.h> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <map> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/at_exit.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/json/json_reader.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/cros/network_library.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/cros/network_library_impl_stub.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/mock_user_manager.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/google_apis/test_util.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 23558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chromeos/network/onc/onc_certificate_importer_impl.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_constants.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_test_utils.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_utils.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "crypto/nss_util.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/crypto_module.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using ::testing::AnyNumber; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Have to do a stub here because MOCK can't handle closure arguments. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StubEnrollmentDelegate : public EnrollmentDelegate { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit StubEnrollmentDelegate() 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : did_enroll(false), 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) correct_args(false) {} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Enroll(const std::vector<std::string>& uri_list, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& closure) OVERRIDE { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_uri_list; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_uri_list.push_back("http://youtu.be/dQw4w9WgXcQ"); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_uri_list.push_back("chrome-extension://abc/keygen-cert.html"); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (uri_list == expected_uri_list) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) correct_args = true; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) did_enroll = true; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) closure.Run(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_enroll; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool correct_args; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiNetworkConnectCallback(NetworkLibrary* cros, WifiNetwork* wifi) { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cros->ConnectToWifiNetwork(wifi, false); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void VirtualNetworkConnectCallback(NetworkLibrary* cros, VirtualNetwork* vpn) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros->ConnectToVirtualNetwork(vpn); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(NetworkLibraryTest, DecodeNonAsciiSSID) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets network name. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_setname = "SSID TEST"; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_setname_result = "SSID TEST"; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork* wifi = new WifiNetwork("fw"); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wifi->SetName(wifi_setname); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(wifi->name(), wifi_setname_result); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete wifi; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Truncates invalid UTF-8 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_setname2 = "SSID TEST \x01\xff!"; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_setname2_result = "SSID TEST \xEF\xBF\xBD\xEF\xBF\xBD!"; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork* wifi = new WifiNetwork("fw"); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wifi->SetName(wifi_setname2); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(wifi->name(), wifi_setname2_result); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete wifi; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UTF8 SSID 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_utf8 = "UTF-8 \u3042\u3044\u3046"; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_utf8_result = "UTF-8 \xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork* wifi = new WifiNetwork("fw"); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork::TestApi test_wifi(wifi); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_wifi.SetSsid(wifi_utf8); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(wifi->name(), wifi_utf8_result); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete wifi; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // latin1 SSID -> UTF8 SSID 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_latin1 = "latin-1 \xc0\xcb\xcc\xd6\xfb"; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_latin1_result = "latin-1 \u00c0\u00cb\u00cc\u00d6\u00fb"; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork* wifi = new WifiNetwork("fw"); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork::TestApi test_wifi(wifi); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_wifi.SetSsid(wifi_latin1); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(wifi->name(), wifi_latin1_result); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete wifi; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hex SSID 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_hex = "5468697320697320484558205353494421"; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string wifi_hex_result = "This is HEX SSID!"; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork* wifi = new WifiNetwork("fw"); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork::TestApi test_wifi(wifi); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_wifi.SetHexSsid(wifi_hex); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(wifi->name(), wifi_hex_result); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete wifi; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Create a stub libcros for testing NetworkLibrary functionality through 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NetworkLibraryStubImpl. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: It would be of little value to test stub functions that simply return 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// predefined values, e.g. ethernet_available(). However, many other functions 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// such as connected_network() return values which are set indirectly and thus 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// we can test the logic of those setters. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NetworkLibraryStubTest : public ::testing::Test { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkLibraryStubTest() : cros_(NULL) {} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cros_ = static_cast<NetworkLibraryImplStub*>(NetworkLibrary::Get()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(cros_) << "GetNetworkLibrary() Failed!"; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_ = NULL; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Load the ONC from |onc_file| using NetworkLibrary::LoadOncNetworks. Check 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that return value matches |expect_successful_import| and the configuration 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that would be sent to Shill matches |shill_json|. 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void LoadOncAndVerifyNetworks(std::string onc_file, 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string shill_json, 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONCSource source, 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool expect_successful_import) { 155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MockUserManager* mock_user_manager = 156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new ::testing::StrictMock<MockUserManager>; 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Takes ownership of |mock_user_manager|. 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedUserManagerEnabler user_manager_enabler(mock_user_manager); 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_user_manager->SetActiveUser("madmax@my.domain.com"); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_user_manager, IsUserLoggedIn()) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(AnyNumber()) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillRepeatedly(Return(true)); 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_CALL(*mock_user_manager, Shutdown()); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::DictionaryValue> onc_blob = 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onc::test_utils::ReadTestDictionary(onc_file); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ListValue* onc_network_configs; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onc_blob->GetListWithoutPathExpansion( 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onc::toplevel_config::kNetworkConfigurations, 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &onc_network_configs); 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(onc_network_configs); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> expected_value = 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) google_apis::test_util::LoadJSONFile(shill_json); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::DictionaryValue* expected_configs; 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_value->GetAsDictionary(&expected_configs); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cros_->LoadOncNetworks(*onc_network_configs, source); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::map<std::string, base::DictionaryValue*>& configs = 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cros_->GetConfigurations(); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_configs->size(), configs.size()); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (base::DictionaryValue::Iterator it(*expected_configs); !it.IsAtEnd(); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it.Advance()) { 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue* expected_config; 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it.value().GetAsDictionary(&expected_config); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<std::string, base::DictionaryValue*>::const_iterator entry = 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) configs.find(it.key()); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(entry, configs.end()); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::DictionaryValue* actual_config = entry->second; 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(onc::test_utils::Equals(expected_config, actual_config)); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedStubNetworkLibraryEnabler cros_stub_; 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkLibraryImplStub* cros_; 200a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::CryptoModule> slot_; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) crypto::ScopedTestNSSDB test_nssdb_; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Default stub state: 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// vpn1: disconnected, L2TP/IPsec + PSK 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// vpn2: disconnected, L2TP/IPsec + user cert 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// vpn3: disconnected, OpenVpn 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// eth1: connected (active network) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// wifi1: connected 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// wifi2: disconnected 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// wifi3: disconnected, WEP 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// wifi4: disconnected, 8021x 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// wifi5: disconnected 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// wifi6: disconnected 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cellular1: connected, activated, not roaming 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cellular2: disconnected, activated, roaming 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(NetworkLibraryStubTest, NetworkLibraryAccessors) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up state. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set wifi2->connecting for these tests. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork* wifi2 = cros_->FindWifiNetworkByPath("wifi2"); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const Network*>(NULL), wifi2); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Network::TestApi test_wifi2(wifi2); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_wifi2.SetConnecting(); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set cellular1->connecting for these tests. 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CellularNetwork* cellular1 = cros_->FindCellularNetworkByPath("cellular1"); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const Network*>(NULL), cellular1); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Network::TestApi test_cellular1(cellular1); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_cellular1.SetConnecting(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ethernet 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const EthernetNetwork*>(NULL), 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_->ethernet_network()); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("eth1", cros_->ethernet_network()->service_path()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(static_cast<const Network*>(NULL), 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_->FindNetworkByPath("eth1")); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cros_->ethernet_connected()); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cros_->ethernet_connecting()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wifi 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const WifiNetwork*>(NULL), cros_->wifi_network()); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("wifi1", cros_->wifi_network()->service_path()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(static_cast<const WifiNetwork*>(NULL), 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_->FindWifiNetworkByPath("wifi1")); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cros_->wifi_connected()); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cros_->wifi_connecting()); // Only true for active wifi. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(cros_->wifi_networks().size(), 1U); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cellular 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const CellularNetwork*>(NULL), 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_->cellular_network()); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("cellular1", cros_->cellular_network()->service_path()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(static_cast<const CellularNetwork*>(NULL), 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_->FindCellularNetworkByPath("cellular1")); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cros_->cellular_connected()); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cros_->cellular_connecting()); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(cros_->cellular_networks().size(), 1U); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // VPN 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<const VirtualNetwork*>(NULL), cros_->virtual_network()); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(cros_->virtual_networks().size(), 1U); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Active network and global state 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cros_->Connected()); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const Network*>(NULL), cros_->active_network()); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("eth1", cros_->active_network()->service_path()); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const Network*>(NULL), cros_->connected_network()); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("eth1", cros_->connected_network()->service_path()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The "wifi1" is connected, so we do not return "wifi2" for the connecting 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // network. There is no conencted cellular network, so "cellular1" is 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returned by connecting_network(). 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cros_->Connecting()); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const Network*>(NULL), cros_->connecting_network()); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("cellular1", cros_->connecting_network()->service_path()); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(NetworkLibraryStubTest, NetworkConnectWifi) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiNetwork* wifi1 = cros_->FindWifiNetworkByPath("wifi1"); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const WifiNetwork*>(NULL), wifi1); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(wifi1->connected()); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_->DisconnectFromNetwork(wifi1); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(wifi1->connected()); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cros_->CanConnectToNetwork(wifi1)); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_->ConnectToWifiNetwork(wifi1); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(wifi1->connected()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetworkLibraryStubTest, NetworkConnectWifiWithCertPattern) { 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> onc_root = 292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch onc::test_utils::ReadTestDictionary("certificate-client.onc"); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ListValue* certificates; 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc_root->GetListWithoutPathExpansion(onc::toplevel_config::kCertificates, 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &certificates); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 297558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch onc::CertificateImporterImpl importer; 298558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(importer.ImportCertificates( 299558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch *certificates, onc::ONC_SOURCE_USER_IMPORT, NULL)); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WifiNetwork* wifi = cros_->FindWifiNetworkByPath("wifi_cert_pattern"); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StubEnrollmentDelegate* enrollment_delegate = new StubEnrollmentDelegate(); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wifi->SetEnrollmentDelegate(enrollment_delegate); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(enrollment_delegate->did_enroll); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(enrollment_delegate->correct_args); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NE(static_cast<const WifiNetwork*>(NULL), wifi); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(wifi->connected()); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(cros_->CanConnectToNetwork(wifi)); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(wifi->connected()); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wifi->AttemptConnection( 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&WifiNetworkConnectCallback, cros_, wifi)); 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(wifi->connected()); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(enrollment_delegate->did_enroll); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(enrollment_delegate->correct_args); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetworkLibraryStubTest, NetworkConnectVPNWithCertPattern) { 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> onc_root = 321eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch onc::test_utils::ReadTestDictionary("certificate-client.onc"); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ListValue* certificates; 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc_root->GetListWithoutPathExpansion(onc::toplevel_config::kCertificates, 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &certificates); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 326558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch onc::CertificateImporterImpl importer; 327558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_TRUE(importer.ImportCertificates( 328558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch *certificates, onc::ONC_SOURCE_USER_IMPORT, NULL)); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VirtualNetwork* vpn = cros_->FindVirtualNetworkByPath("vpn_cert_pattern"); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StubEnrollmentDelegate* enrollment_delegate = new StubEnrollmentDelegate(); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) vpn->SetEnrollmentDelegate(enrollment_delegate); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(enrollment_delegate->did_enroll); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(enrollment_delegate->correct_args); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NE(static_cast<const VirtualNetwork*>(NULL), vpn); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(vpn->connected()); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(cros_->CanConnectToNetwork(vpn)); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(vpn->connected()); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) vpn->AttemptConnection( 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&VirtualNetworkConnectCallback, cros_, vpn)); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(vpn->connected()); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(enrollment_delegate->did_enroll); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(enrollment_delegate->correct_args); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(NetworkLibraryStubTest, NetworkConnectVPN) { 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VirtualNetwork* vpn1 = cros_->FindVirtualNetworkByPath("vpn1"); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(static_cast<const VirtualNetwork*>(NULL), vpn1); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(vpn1->connected()); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cros_->CanConnectToNetwork(vpn1)); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_->ConnectToVirtualNetwork(vpn1); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(vpn1->connected()); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(static_cast<const VirtualNetwork*>(NULL), cros_->virtual_network()); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("vpn1", cros_->virtual_network()->service_path()); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ImportParams { 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |onc_file|: Filename of source ONC, relative to 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // chromeos/test/data/network. 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |shill_file|: Filename of expected Shill config, relative to 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // chrome/test/data). 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |onc_source|: The source of the ONC. 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |expect_import_result|: The expected return value of LoadOncNetworks. 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImportParams(const std::string& onc_file, 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& shill_file, 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONCSource onc_source, 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool expect_import_result = true) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : onc_file(onc_file), 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) shill_file(shill_file), 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc_source(onc_source), 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expect_import_result(expect_import_result) { 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string onc_file, shill_file; 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONCSource onc_source; 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool expect_import_result; 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)::std::ostream& operator<<(::std::ostream& os, const ImportParams& params) { 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return os << "(" << params.onc_file << ", " << params.shill_file << ", " 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << onc::GetSourceAsString(params.onc_source) << ", " 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << (params.expect_import_result ? "valid" : "invalid") << ")"; 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LoadOncNetworksTest 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public NetworkLibraryStubTest, 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ::testing::WithParamInterface<ImportParams> { 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(LoadOncNetworksTest, VerifyNetworksAndCertificates) { 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadOncAndVerifyNetworks(GetParam().onc_file, 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetParam().shill_file, 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetParam().onc_source, 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetParam().expect_import_result); 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)INSTANTIATE_TEST_CASE_P( 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadOncNetworksTest, 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadOncNetworksTest, 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::testing::Values( 407eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ImportParams("managed_toplevel1_with_cert_pems.onc", 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_managed_toplevel1.json", 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_USER_POLICY), 410eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ImportParams("managed_toplevel2_with_cert_pems.onc", 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_managed_toplevel2.json", 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_USER_POLICY), 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImportParams("managed_toplevel_l2tpipsec.onc", 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_managed_toplevel_l2tpipsec.json", 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_USER_POLICY), 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImportParams("managed_toplevel_wifi_peap.onc", 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_managed_toplevel_wifi_peap.json", 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_DEVICE_POLICY), 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImportParams("toplevel_wifi_open.onc", 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_toplevel_wifi_open.json", 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_DEVICE_POLICY), 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImportParams("toplevel_wifi_wep_proxy.onc", 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_toplevel_wifi_wep_proxy.json", 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_USER_POLICY), 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImportParams("toplevel_wifi_wpa_psk.onc", 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_toplevel_wifi_wpa_psk.json", 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_USER_POLICY), 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImportParams("toplevel_wifi_leap.onc", 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_toplevel_wifi_leap.json", 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_USER_POLICY), 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImportParams( 432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "toplevel_wifi_eap_clientcert_with_cert_pems.onc", 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_toplevel_wifi_eap_clientcert.json", 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_USER_POLICY), 435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ImportParams("toplevel_openvpn_clientcert_with_cert_pems.onc", 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_toplevel_openvpn_clientcert.json", 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc::ONC_SOURCE_USER_POLICY), 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImportParams("toplevel_wifi_remove.onc", 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chromeos/net/shill_for_toplevel_wifi_remove.json", 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onc::ONC_SOURCE_USER_POLICY))); 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(stevenjb): Test remembered networks. 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(stevenjb): Test network profiles. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(stevenjb): Test network devices. 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(stevenjb): Test data plans. 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(stevenjb): Test monitor network / device. 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 453