wifi_unittest.cc revision dc42bb32d20da8ddd2ace08f171f9adf3ec1c847
1853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone// Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 2853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone// Use of this source code is governed by a BSD-style license that can be 3853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone// found in the LICENSE file. 4853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 5853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/wifi.h" 6853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 7853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <map> 8853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <string> 9853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <vector> 10853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 11dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include <base/memory/scoped_ptr.h> 123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_number_conversions.h> 133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_util.h> 14853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <dbus-c++/dbus.h> 15853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <chromeos/dbus/service_constants.h> 16853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <gtest/gtest.h> 17853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <gmock/gmock.h> 18853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 19853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/dbus_adaptor.h" 20853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/manager.h" 21853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/mock_device.h" 223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_interface_proxy.h" 233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_process_proxy.h" 24dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include "shill/nice_mock_control.h" 25853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/property_store_unittest.h" 263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/proxy_factory.h" 273195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/wifi_endpoint.h" 283195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/wifi.h" 29853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 30853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::map; 31853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::string; 32853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::vector; 33853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::_; 343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::AnyNumber; 353195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::DefaultValue; 363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::InSequence; 37dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawalusing ::testing::NiceMock; 38853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Return; 39853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Test; 403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::Throw; 41853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 42853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masonenamespace shill { 43853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalclass WiFiPropertyTest : public PropertyStoreTest { 45853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone public: 463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiPropertyTest() 47853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone : device_(new WiFi(&control_interface_, NULL, NULL, "wifi", 0)) { 48853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone } 493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual ~WiFiPropertyTest() {} 50853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 51853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone protected: 52853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone DeviceRefPtr device_; 53853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone}; 54853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Contains) { 5627c4aa55b33d3a3836cf70c8f7094bce1c5ead8cChris Masone EXPECT_TRUE(device_->store()->Contains(flimflam::kNameProperty)); 5727c4aa55b33d3a3836cf70c8f7094bce1c5ead8cChris Masone EXPECT_FALSE(device_->store()->Contains("")); 58853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 59853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Dispatch) { 61a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 62a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 6327c4aa55b33d3a3836cf70c8f7094bce1c5ead8cChris Masone EXPECT_TRUE(DBusAdaptor::DispatchOnType(device_->store(), 64a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanMethodProperty, 65a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kStringV, 66a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 67a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 68a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 69a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 70a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone EXPECT_TRUE(DBusAdaptor::DispatchOnType( 7127c4aa55b33d3a3836cf70c8f7094bce1c5ead8cChris Masone device_->store(), 72a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanSignalThresholdProperty, 73a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kInt32V, 74a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 75a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 76a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 77a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 7827c4aa55b33d3a3836cf70c8f7094bce1c5ead8cChris Masone EXPECT_TRUE(DBusAdaptor::DispatchOnType(device_->store(), 79a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kScanIntervalProperty, 80a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kUint16V, 81a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 82a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 83853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone // Ensure that an attempt to write a R/O property returns InvalidArgs error. 84a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 85a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 8627c4aa55b33d3a3836cf70c8f7094bce1c5ead8cChris Masone EXPECT_FALSE(DBusAdaptor::DispatchOnType(device_->store(), 87a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kScanningProperty, 88a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kBoolV, 89a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 90a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone EXPECT_EQ(invalid_args_, error.name()); 91a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 92853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 93853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalclass WiFiMainTest : public Test { 953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiMainTest() 973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal : manager_(&control_interface_, NULL, NULL), 983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_(new WiFi(&control_interface_, NULL, &manager_, kDeviceName, 0)), 99dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_process_proxy_(new NiceMock<MockSupplicantProcessProxy>()), 100dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_interface_proxy_( 101dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal new NiceMock<MockSupplicantInterfaceProxy>(wifi_)), 102dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal proxy_factory_(this) { 1033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ProxyFactory::set_factory(&proxy_factory_); 1043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ::testing::DefaultValue< ::DBus::Path>::Set("/default/path"); 1053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual ~WiFiMainTest() { 1073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // must Stop WiFi instance, to clear its list of services. 1083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // otherwise, the WiFi instance will not be deleted. (because 1093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // services reference a WiFi instance, creating a cycle.) 1103195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->Stop(); 1113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 1143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal class TestProxyFactory : public ProxyFactory { 1153195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 116dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal TestProxyFactory(WiFiMainTest *test) : test_(test) {} 1173195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1183195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantProcessProxyInterface *CreateSupplicantProcessProxy( 1193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *dbus_path, const char *dbus_addr) { 120dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_process_proxy_.release(); 1213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantInterfaceProxyInterface *CreateSupplicantInterfaceProxy( 1243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFiRefPtr &wifi, 1253195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const DBus::Path &object_path, 1263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *dbus_addr) { 127dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_interface_proxy_.release(); 1283195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1293195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 131dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal WiFiMainTest *test_; 1323195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal }; 1333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFi::EndpointMap &GetEndpointMap() { 1353195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->endpoint_by_bssid_; 1363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFi::ServiceMap &GetServiceMap() { 1383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->service_by_private_id_; 1393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // note: the tests need the proxies referenced by WiFi (not the 1413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // proxies instantiated by WiFiMainTest), to ensure that WiFi 1423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // sets up its proxies correctly. 1433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantProcessProxyInterface *GetSupplicantProcessProxy() { 1443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_process_proxy_.get(); 1453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantInterfaceProxyInterface *GetSupplicantInterfaceProxy() { 1473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_interface_proxy_.get(); 1483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void InitiateConnect(const WiFiService &service) { 1503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->ConnectTo(service); 1513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportBSS(const ::DBus::Path &bss_path, 1533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 1543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 1553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 1563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode); 1573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportScanDone() { 158dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal wifi_->ScanDoneTask(); 1593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StartWiFi() { 1613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->Start(); 1623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StopWiFi() { 1643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->Stop(); 1653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 168dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal NiceMockControl control_interface_; 1693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal Manager manager_; 1703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiRefPtr wifi_; 1713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // protected fields interspersed between private fields, due to 1733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // initialization order 1743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 1753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kDeviceName[]; 1763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeAdHoc[]; 1773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeInfrastructure[]; 1783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 179dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantProcessProxy> supplicant_process_proxy_; 180dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantInterfaceProxy> supplicant_interface_proxy_; 1813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 1833195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal TestProxyFactory proxy_factory_; 1843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal}; 1863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kDeviceName[] = "wlan0"; 1883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kNetworkModeAdHoc[] = "ad-hoc"; 1893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kNetworkModeInfrastructure[] = "infrastructure"; 1903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalvoid WiFiMainTest::ReportBSS(const ::DBus::Path &bss_path, 1923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 1933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 1943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 1953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode) { 1963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal map<string, ::DBus::Variant> bss_properties; 1973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 1993195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["SSID"].writer()); 2003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << vector<uint8_t>(ssid.begin(), ssid.end()); 2013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 2033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal string bssid_nosep; 2043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal vector<uint8_t> bssid_bytes; 2053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal RemoveChars(bssid, ":", &bssid_nosep); 2063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal base::HexStringToBytes(bssid_nosep, &bssid_bytes); 2073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["BSSID"].writer()); 2093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << bssid_bytes; 2103195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal bss_properties["Signal"].writer().append_int16(signal_strength); 2123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal bss_properties["Mode"].writer().append_string(mode); 2133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->BSSAdded(bss_path, bss_properties); 2143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 2153195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2163195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ProxiesSetUpDuringStart) { 2173195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 2183195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantInterfaceProxy() == NULL); 2193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 2213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 2223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantInterfaceProxy() == NULL); 2233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 2243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2253195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, CleanStart) { 2263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 2273195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 2283195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 2293195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 2303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 2313195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceUnknown", 2323195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 2333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 2343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 2353195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 2363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Restart) { 2383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)) 2393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 2403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 2413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 2423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceExists", 2433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test thew fi.w1.wpa_supplicant1.InterfaceExists"))); 2443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)); 2453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 2463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 2473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 2483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, StartClearsState) { 2503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, RemoveAllNetworks()); 2513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, FlushBSS(_)); 2523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 2533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 2543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResults) { 2563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 2573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 2583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 2593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss1", "ssid1", "00:00:00:00:00:01", 1, kNetworkModeInfrastructure); 2603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 2613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss2", "ssid2", "00:00:00:00:00:02", 2, kNetworkModeInfrastructure); 2623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 2633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss3", "ssid3", "00:00:00:00:00:03", 3, kNetworkModeInfrastructure); 2643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss4", "ssid4", "00:00:00:00:00:04", 4, kNetworkModeAdHoc); 2653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_EQ(5, GetEndpointMap().size()); 2663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 2673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResultsWithUpdates) { 2693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 2703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 2713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 2723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss1", "ssid1", "00:00:00:00:00:01", 1, kNetworkModeInfrastructure); 2733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 2743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss2", "ssid2", "00:00:00:00:00:02", 2, kNetworkModeInfrastructure); 2753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 2763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss1", "ssid1", "00:00:00:00:00:01", 3, kNetworkModeInfrastructure); 2773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 4, kNetworkModeAdHoc); 2783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_EQ(3, GetEndpointMap().size()); 2793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ASSERT_TRUE(ContainsKey(GetEndpointMap(), "000000000000")); 2803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_EQ(4, GetEndpointMap().find("000000000000")->second-> 2813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal signal_strength()); 2823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 2833195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanCompleted) { 2853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 2863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 2873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 2883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss1", "ssid1", "00:00:00:00:00:01", 1, kNetworkModeInfrastructure); 2893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 2903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss2", "ssid2", "00:00:00:00:00:02", 2, kNetworkModeInfrastructure); 2913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 2923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_EQ(3, GetServiceMap().size()); 2933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 2943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Connect) { 296dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 297dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal *supplicant_interface_proxy_; 298dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal 2993195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 3003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 3013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 3023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 3043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal InSequence s; 3053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Path fake_path("/fake/path"); 3063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 307dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(_)) 3083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillOnce(Return(fake_path)); 309dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, SelectNetwork(fake_path)); 3103195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal InitiateConnect(*(GetServiceMap().begin()->second)); 3113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 3133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 314853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} // namespace shill 315