wifi_unittest.cc revision 261daca461a38a700db80b1fee0fb1f50941aaf9
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 7f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include <netinet/ether.h> 8f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include <linux/if.h> 95c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include <sys/socket.h> 105c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include <linux/netlink.h> // Needs typedefs from sys/socket.h. 11f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 12853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <map> 13a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include <set> 14853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <string> 15853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <vector> 16853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 177ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal#include <base/memory/ref_counted.h> 18dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include <base/memory/scoped_ptr.h> 19a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include <base/stringprintf.h> 203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_number_conversions.h> 213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_util.h> 22853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <chromeos/dbus/service_constants.h> 231830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal#include <dbus-c++/dbus.h> 247156c923c9a9d2240ea9c62045337ac8c8f89e57Chris Masone#include <gmock/gmock.h> 252ae797d040b7261a5619c750e07037566bcb542bChris Masone#include <gtest/gtest.h> 26853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 27853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/dbus_adaptor.h" 2826b327e559583d5a84b7e1605c29a4dcbc87d2a9Paul Stewart#include "shill/event_dispatcher.h" 298ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal#include "shill/ieee80211.h" 307a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal#include "shill/key_value_store.h" 31853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/manager.h" 32853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/mock_device.h" 33f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include "shill/mock_dhcp_config.h" 34f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include "shill/mock_dhcp_provider.h" 352ae797d040b7261a5619c750e07037566bcb542bChris Masone#include "shill/mock_manager.h" 365c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include "shill/mock_rtnl_handler.h" 37a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include "shill/mock_store.h" 383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_interface_proxy.h" 393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_process_proxy.h" 407ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal#include "shill/mock_wifi_service.h" 41dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include "shill/nice_mock_control.h" 42853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/property_store_unittest.h" 433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/proxy_factory.h" 443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/wifi_endpoint.h" 453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/wifi.h" 463239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal#include "shill/wifi_service.h" 47ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart#include "shill/wpa_supplicant.h" 48853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 49853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::map; 50a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing std::set; 51853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::string; 52853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::vector; 53853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::_; 543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::AnyNumber; 553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::DefaultValue; 56a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::DoAll; 573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::InSequence; 587ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalusing ::testing::Mock; 59dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawalusing ::testing::NiceMock; 60853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Return; 61a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::SetArgumentPointee; 62a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrEq; 63a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrictMock; 64853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Test; 653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::Throw; 668ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalusing ::testing::Values; 67853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 68853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masonenamespace shill { 69853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalclass WiFiPropertyTest : public PropertyStoreTest { 71853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone public: 723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiPropertyTest() 732176a88f197d802924d2a83d368e3efab7a6be4bChris Masone : device_(new WiFi(control_interface(), NULL, NULL, "wifi", "", 0)) { 74853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone } 753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual ~WiFiPropertyTest() {} 76853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 77853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone protected: 78853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone DeviceRefPtr device_; 79853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone}; 80853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Contains) { 82de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_TRUE(device_->store().Contains(flimflam::kNameProperty)); 83de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_FALSE(device_->store().Contains("")); 84853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 85853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Dispatch) { 87a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 88a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 89de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_TRUE(DBusAdaptor::DispatchOnType(device_->mutable_store(), 90a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanMethodProperty, 91a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kStringV, 92a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 93a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 94a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 95a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 96a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone EXPECT_TRUE(DBusAdaptor::DispatchOnType( 97de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal device_->mutable_store(), 98a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanSignalThresholdProperty, 99a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kInt32V, 100a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 101a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 102a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 103a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 104de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_TRUE(DBusAdaptor::DispatchOnType(device_->mutable_store(), 105a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kScanIntervalProperty, 106a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kUint16V, 107a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 108a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 109853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone // Ensure that an attempt to write a R/O property returns InvalidArgs error. 110a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 111a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 112de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_FALSE(DBusAdaptor::DispatchOnType(device_->mutable_store(), 113a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kScanningProperty, 114a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kBoolV, 115a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 1169d779936d8f8c2d74b30883e2a2622c4207fe797Chris Masone EXPECT_EQ(invalid_args(), error.name()); 117a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 118853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 119853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1208ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiMainTest : public ::testing::TestWithParam<string> { 1213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 1223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiMainTest() 123b9c00597eb1f6d2560f7e88cb0d1f627228840d4Chris Masone : manager_(&control_interface_, NULL, &glib_), 124626719f89881a949d8b5a8fa808beb924496489fChris Masone wifi_(new WiFi(&control_interface_, 1253239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal &dispatcher_, 126626719f89881a949d8b5a8fa808beb924496489fChris Masone &manager_, 127626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceName, 128626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceAddress, 129626719f89881a949d8b5a8fa808beb924496489fChris Masone 0)), 130dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_process_proxy_(new NiceMock<MockSupplicantProcessProxy>()), 131dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_interface_proxy_( 132dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal new NiceMock<MockSupplicantInterfaceProxy>(wifi_)), 133f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal dhcp_config_(new MockDHCPConfig(&control_interface_, 134f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal &dispatcher_, 135f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal &dhcp_provider_, 136f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal kDeviceName, 137f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal &glib_)), 138dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal proxy_factory_(this) { 1393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ::testing::DefaultValue< ::DBus::Path>::Set("/default/path"); 1403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1415c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 1425c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void SetUp() { 143ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = &proxy_factory_; 1445c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal static_cast<Device *>(wifi_)->rtnl_handler_ = &rtnl_handler_; 1455c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(&dhcp_provider_); 146b9c00597eb1f6d2560f7e88cb0d1f627228840d4Chris Masone EXPECT_CALL(manager_, DeregisterService(_)).Times(AnyNumber()); 1475c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal } 1485c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 1495c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void TearDown() { 150ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = NULL; 1513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // must Stop WiFi instance, to clear its list of services. 1523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // otherwise, the WiFi instance will not be deleted. (because 1533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // services reference a WiFi instance, creating a cycle.) 1543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->Stop(); 1555c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(NULL); 156f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 157f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 1583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 1597ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal typedef scoped_refptr<MockWiFiService> MockWiFiServiceRefPtr; 1607ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 1613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal class TestProxyFactory : public ProxyFactory { 1623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 1637355ce1937c504d836a303ac809bd436272212b3Paul Stewart explicit TestProxyFactory(WiFiMainTest *test) : test_(test) {} 1643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantProcessProxyInterface *CreateSupplicantProcessProxy( 1661830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_path*/, const char */*dbus_addr*/) { 167dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_process_proxy_.release(); 1683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantInterfaceProxyInterface *CreateSupplicantInterfaceProxy( 1711830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const WiFiRefPtr &/*wifi*/, 1721830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const DBus::Path &/*object_path*/, 1731830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_addr*/) { 174dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_interface_proxy_.release(); 1753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 178dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal WiFiMainTest *test_; 1793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal }; 1803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1811590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr CreateServiceForEndpoint(const WiFiEndpoint &endpoint) { 1821590839e44a0e922d4763003a35dbd493509b705mukesh agrawal bool hidden_ssid = false; 1831590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->CreateServiceForEndpoint(endpoint, hidden_ssid); 1841590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 1851590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetCurrentService() { 1861590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->current_service_; 1871590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 1883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFi::EndpointMap &GetEndpointMap() { 189165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->endpoint_by_rpcid_; 1903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1911590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetPendingService() { 1921590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->pending_service_; 1931590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 194165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal const vector<WiFiServiceRefPtr> &GetServices() { 195165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->services_; 1963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 1973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // note: the tests need the proxies referenced by WiFi (not the 1983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // proxies instantiated by WiFiMainTest), to ensure that WiFi 1993195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // sets up its proxies correctly. 2003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantProcessProxyInterface *GetSupplicantProcessProxy() { 2013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_process_proxy_.get(); 2023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantInterfaceProxyInterface *GetSupplicantInterfaceProxy() { 2043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_interface_proxy_.get(); 2053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2067ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal const string &GetSupplicantState() { 2077ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return wifi_->supplicant_state_; 2087ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 2097ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void InitiateConnect(WiFiServiceRefPtr service) { 2106e277774580c52073c919c4cbebedae27861d845mukesh agrawal map<string, ::DBus::Variant> params; 2116e277774580c52073c919c4cbebedae27861d845mukesh agrawal wifi_->ConnectTo(service, params); 2123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 213f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal bool IsLinkUp() { 214f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal return wifi_->link_up_; 215f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 2161590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr MakeEndpoint(const string &ssid, const string &bssid) { 2171590839e44a0e922d4763003a35dbd493509b705mukesh agrawal map <string, ::DBus::Variant> args; 2181590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ::DBus::MessageIter writer; 2191590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 2201590839e44a0e922d4763003a35dbd493509b705mukesh agrawal writer = args[wpa_supplicant::kBSSPropertySSID].writer(); 2211590839e44a0e922d4763003a35dbd493509b705mukesh agrawal writer << vector<uint8_t>(ssid.begin(), ssid.end()); 2221590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 2231590839e44a0e922d4763003a35dbd493509b705mukesh agrawal string bssid_nosep; 2241590839e44a0e922d4763003a35dbd493509b705mukesh agrawal RemoveChars(bssid, ":", &bssid_nosep); 2251590839e44a0e922d4763003a35dbd493509b705mukesh agrawal vector<uint8_t> bssid_bytes; 2261590839e44a0e922d4763003a35dbd493509b705mukesh agrawal base::HexStringToBytes(bssid_nosep, &bssid_bytes); 2271590839e44a0e922d4763003a35dbd493509b705mukesh agrawal writer = args[wpa_supplicant::kBSSPropertyBSSID].writer(); 2281590839e44a0e922d4763003a35dbd493509b705mukesh agrawal writer << bssid_bytes; 2291590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 2301590839e44a0e922d4763003a35dbd493509b705mukesh agrawal args[wpa_supplicant::kBSSPropertySignal].writer().append_int16(0); 2311590839e44a0e922d4763003a35dbd493509b705mukesh agrawal args[wpa_supplicant::kBSSPropertyMode].writer().append_string( 2321590839e44a0e922d4763003a35dbd493509b705mukesh agrawal wpa_supplicant::kNetworkModeInfrastructure); 2331590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // We indicate this is an open BSS by leaving out all security properties. 2341590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 2351590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return new WiFiEndpoint(args); 2361590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 2377ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal MockWiFiServiceRefPtr MakeMockService() { 2387ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal vector<uint8_t> ssid(1, 'a'); 2397ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return new MockWiFiService( 2407ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &control_interface_, 2417ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &dispatcher_, 2427ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &manager_, 2437ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_, 2447ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ssid, 2457ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal flimflam::kModeManaged, 2467ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal flimflam::kSecurityNone, 2477ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal false); 2487ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 249261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal void RemoveBSS(const ::DBus::Path &bss_path); 2503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportBSS(const ::DBus::Path &bss_path, 2513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 2523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 2533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 2543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode); 255f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal void ReportLinkUp() { 256f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi_->LinkEvent(IFF_LOWER_UP, IFF_LOWER_UP); 257f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 2583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportScanDone() { 259dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal wifi_->ScanDoneTask(); 2603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2611590839e44a0e922d4763003a35dbd493509b705mukesh agrawal void ReportCurrentBSSChanged(const string &new_bss) { 2621590839e44a0e922d4763003a35dbd493509b705mukesh agrawal wifi_->CurrentBSSChanged(new_bss); 2631590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 2647ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void ReportStateChanged(const string &new_state) { 2657ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_->StateChanged(new_state); 2667ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 2673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StartWiFi() { 2683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->Start(); 2693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StopWiFi() { 2713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->Stop(); 2723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 273a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart void GetOpenService(const char *service_type, 2747a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *ssid, 2757a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *mode, 276ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 277ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart GetServiceInner(service_type, ssid, mode, NULL, NULL, false, result); 2787a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal } 2797a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal void GetService(const char *service_type, 2807a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *ssid, 2817a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *mode, 2827a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *security, 2837a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *passphrase, 284ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 285ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart GetServiceInner(service_type, ssid, mode, security, passphrase, false, 286ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart result); 287ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 288ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart WiFiServiceRefPtr GetServiceInner(const char *service_type, 289ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *ssid, 290ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *mode, 291ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *security, 292ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *passphrase, 293a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart bool allow_hidden, 294ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 2957a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal map<string, ::DBus::Variant> args; 2967a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // in general, we want to avoid D-Bus specific code for any RPCs 2977a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // that come in via adaptors. we make an exception here, because 2987a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // calls to GetWifiService are rerouted from the Manager object to 2997a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // the Wifi class. 3007a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (service_type != NULL) 3017a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kTypeProperty].writer().append_string(service_type); 3027a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (ssid != NULL) 3037a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kSSIDProperty].writer().append_string(ssid); 3047a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (mode != NULL) 3057a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kModeProperty].writer().append_string(mode); 3067a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (security != NULL) 3077a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kSecurityProperty].writer().append_string(security); 3087a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (passphrase != NULL) 3097a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kPassphraseProperty].writer().append_string(passphrase); 310a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart if (!allow_hidden) 311a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart args[flimflam::kWifiHiddenSsid].writer().append_bool(false); 3127a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 313ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error e; 314ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart KeyValueStore args_kv; 3157a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal DBusAdaptor::ArgsToKeyValueStore(args, &args_kv, &e); 316ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return wifi_->GetService(args_kv, result); 3177a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal } 318a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr FindService(const vector<uint8_t> &ssid, 319a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string &mode, 320a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string &security) { 321a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart return wifi_->FindService(ssid, mode, security); 322a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 323a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart bool LoadHiddenServices(StoreInterface *storage) { 324a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart return wifi_->LoadHiddenServices(storage); 325a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 326a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart void SetupHiddenStorage(MockStore *storage, const string &ssid, string *id) { 327a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string hex_ssid = base::HexEncode(ssid.data(), ssid.size()); 328a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart *id = StringToLowerASCII(base::StringPrintf("%s_%s_%s_%s_%s", 329a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kTypeWifi, 330a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart kDeviceAddress, 331a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart hex_ssid.c_str(), 332a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, 333a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityNone)); 334a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const char *groups[] = { id->c_str() }; 335a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetGroupsWithKey(flimflam::kWifiHiddenSsid)) 336a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(Return(set<string>(groups, groups + 1))); 337a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetBool(StrEq(*id), flimflam::kWifiHiddenSsid, _)) 338a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(DoAll(SetArgumentPointee<2>(true), Return(true))); 339a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetString(StrEq(*id), flimflam::kSSIDProperty, _)) 340a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(DoAll(SetArgumentPointee<2>(hex_ssid), Return(true))); 341a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 3423239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal MockManager *manager() { 3433239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return &manager_; 3443239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 3453239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal const WiFiConstRefPtr wifi() const { 3463239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return wifi_; 3473239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 3483239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal 3493239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal EventDispatcher dispatcher_; 3505c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal NiceMock<MockRTNLHandler> rtnl_handler_; 3513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 353dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal NiceMockControl control_interface_; 354f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockGLib glib_; 3552ae797d040b7261a5619c750e07037566bcb542bChris Masone MockManager manager_; 3563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiRefPtr wifi_; 3573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // protected fields interspersed between private fields, due to 3593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // initialization order 3603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 3613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kDeviceName[]; 362626719f89881a949d8b5a8fa808beb924496489fChris Masone static const char kDeviceAddress[]; 3633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeAdHoc[]; 3643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeInfrastructure[]; 3653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 366dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantProcessProxy> supplicant_process_proxy_; 367dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantInterfaceProxy> supplicant_interface_proxy_; 368f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockDHCPProvider dhcp_provider_; 369f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal scoped_refptr<MockDHCPConfig> dhcp_config_; 3703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 3723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal TestProxyFactory proxy_factory_; 3733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal}; 3743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kDeviceName[] = "wlan0"; 376a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartconst char WiFiMainTest::kDeviceAddress[] = "000102030405"; 3773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kNetworkModeAdHoc[] = "ad-hoc"; 3783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kNetworkModeInfrastructure[] = "infrastructure"; 3793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 380261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalvoid WiFiMainTest::RemoveBSS(const ::DBus::Path &bss_path) { 381261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal wifi_->BSSRemoved(bss_path); 382261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 383261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 3843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalvoid WiFiMainTest::ReportBSS(const ::DBus::Path &bss_path, 3853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 3863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 3873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 3883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode) { 3893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal map<string, ::DBus::Variant> bss_properties; 3903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 3923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["SSID"].writer()); 3933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << vector<uint8_t>(ssid.begin(), ssid.end()); 3943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 3963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal string bssid_nosep; 3973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal vector<uint8_t> bssid_bytes; 3983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal RemoveChars(bssid, ":", &bssid_nosep); 3993195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal base::HexStringToBytes(bssid_nosep, &bssid_bytes); 4003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["BSSID"].writer()); 4023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << bssid_bytes; 4033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 4043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal bss_properties["Signal"].writer().append_int16(signal_strength); 4053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal bss_properties["Mode"].writer().append_string(mode); 4063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->BSSAdded(bss_path, bss_properties); 4073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 4083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ProxiesSetUpDuringStart) { 4103195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 4113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantInterfaceProxy() == NULL); 4123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 4143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 4153195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantInterfaceProxy() == NULL); 4163195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 4173195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4183195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, CleanStart) { 4193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 4203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 4213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 4223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 4233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 4243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceUnknown", 4253195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 4263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 4273195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 4283239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 4293195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 4303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4313195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Restart) { 4323195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)) 4333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 4343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 4353195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 4363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceExists", 4373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test thew fi.w1.wpa_supplicant1.InterfaceExists"))); 4383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)); 4393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 4403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 4413239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 4423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 4433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, StartClearsState) { 4453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, RemoveAllNetworks()); 4463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, FlushBSS(_)); 4473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 4483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 4493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResults) { 4513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 4523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 4533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 4543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss1", "ssid1", "00:00:00:00:00:01", 1, kNetworkModeInfrastructure); 4553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 4563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss2", "ssid2", "00:00:00:00:00:02", 2, kNetworkModeInfrastructure); 4573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 4583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss3", "ssid3", "00:00:00:00:00:03", 3, kNetworkModeInfrastructure); 4593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss4", "ssid4", "00:00:00:00:00:04", 4, kNetworkModeAdHoc); 4603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_EQ(5, GetEndpointMap().size()); 4613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 4623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResultsWithUpdates) { 4643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 4653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 4663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 4673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss1", "ssid1", "00:00:00:00:00:01", 1, kNetworkModeInfrastructure); 4683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 4693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss2", "ssid2", "00:00:00:00:00:02", 2, kNetworkModeInfrastructure); 4703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 4713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss1", "ssid1", "00:00:00:00:00:01", 3, kNetworkModeInfrastructure); 4723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 4, kNetworkModeAdHoc); 473165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 474165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 475165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(3, endpoints_by_rpcid.size()); 476165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 477165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFi::EndpointMap::const_iterator i; 478165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFiEndpointRefPtr endpoint; 479165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal for (i = endpoints_by_rpcid.begin(); 480165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal i != endpoints_by_rpcid.end(); 481165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ++i) { 482165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal if (i->second->bssid_string() == "00:00:00:00:00:00") 483165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal break; 484165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal } 485165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ASSERT_TRUE(i != endpoints_by_rpcid.end()); 486165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(4, i->second->signal_strength()); 4873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 4883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanCompleted) { 4903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 491261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 492261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(3); 4933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 4943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 4953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss1", "ssid1", "00:00:00:00:00:01", 1, kNetworkModeInfrastructure); 4963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 4973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "bss2", "ssid2", "00:00:00:00:00:02", 2, kNetworkModeInfrastructure); 4983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 499165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(3, GetServices().size()); 500165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 501165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 502165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingTogether) { 503165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 504261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 505261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal InSequence s; 506261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)); 507261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)); 508165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 509165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportBSS("bss1", "ssid", "00:00:00:00:00:01", 0, kNetworkModeAdHoc); 510165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 511165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(1, GetServices().size()); 512165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 513165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 514165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingDifferentSSID) { 515165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 516261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 517261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(2); 518165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportBSS("bss0", "ssid1", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 519165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportBSS("bss1", "ssid2", "00:00:00:00:00:01", 0, kNetworkModeAdHoc); 520165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 521165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(2, GetServices().size()); 522165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 523165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 524165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingDifferentMode) { 525165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 526261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 527261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(2); 528165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 529165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportBSS("bss1", "ssid", "00:00:00:00:00:01", 0, kNetworkModeInfrastructure); 530165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 531165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(2, GetServices().size()); 5323195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 534261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonExistentBSSRemoved) { 535261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal // Removal of non-existent BSS should not cause a crash. 536261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 537261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 538261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(0, GetServices().size()); 539261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 540261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 541261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemoved) { 542261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 543261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 544261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportScanDone(); 545261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 546261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 547261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 548261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)); 549261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 550261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_FALSE(GetServices().front()->IsVisible()); 551261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 552261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 553261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 554261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonSolitaryBSSRemoved) { 555261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 556261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 557261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportBSS("bss1", "ssid", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 558261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportScanDone(); 559261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 560261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 561261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 562261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)); 563261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 564261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 565261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 566261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 567261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 5683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Connect) { 569dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 570dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal *supplicant_interface_proxy_; 571dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal 5723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 5743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 5753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 5773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal InSequence s; 5783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Path fake_path("/fake/path"); 579165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFiService *service(GetServices().begin()->get()); 5803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 581dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(_)) 5823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillOnce(Return(fake_path)); 583dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, SelectNetwork(fake_path)); 5843239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal InitiateConnect(service); 585f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal EXPECT_EQ(static_cast<Service *>(service), 586f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi()->selected_service_.get()); 5873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 590f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawalTEST_F(WiFiMainTest, LinkEvent) { 591f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal EXPECT_FALSE(IsLinkUp()); 592f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal EXPECT_CALL(dhcp_provider_, CreateConfig(_)). 593f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal WillOnce(Return(dhcp_config_)); 594f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal ReportLinkUp(); 595f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal} 596f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 5975c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawalTEST_F(WiFiMainTest, Stop) { 5985c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal { 5995c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal InSequence s; 6005c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 6015c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal StartWiFi(); 6025c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, kNetworkModeAdHoc); 6035c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal ReportScanDone(); 6045c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal EXPECT_CALL(dhcp_provider_, CreateConfig(_)). 6055c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal WillOnce(Return(dhcp_config_)); 6065c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal ReportLinkUp(); 6075c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal } 6085c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 6095c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal { 6105c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 6115c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal StopWiFi(); 6125c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal } 6135c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal} 6145c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 6157a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpen) { 6167a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 617a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, &e); 6187a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 6197a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6207a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6217a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenNoType) { 6227a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 6236ab23a9d4526686406d50081853639540b22213aPaul Stewart GetOpenService(NULL, "an_ssid", flimflam::kModeManaged, &e); 6247a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidArguments, e.type()); 6257a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("must specify service type", e.message()); 6267a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6277a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6287a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenNoSSID) { 6297a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 630a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, NULL, flimflam::kModeManaged, &e); 6317a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidArguments, e.type()); 6327a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("must specify SSID", e.message()); 6337a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6347a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6357a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenLongSSID) { 6367a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 6377a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal GetOpenService( 638a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kTypeWifi, "123456789012345678901234567890123", 639a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, &e); 6407a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidNetworkName, e.type()); 6417a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("SSID is too long", e.message()); 6427a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6437a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6447a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenShortSSID) { 6457a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 646a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "", flimflam::kModeManaged, &e); 6477a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidNetworkName, e.type()); 6487a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("SSID is too short", e.message()); 6497a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6507a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6517a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenBadMode) { 6527a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 653a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", "ad-hoc", &e); 6547a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kNotSupported, e.type()); 6557a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("service mode is unsupported", e.message()); 6567a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6577a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6587a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenNoMode) { 6597a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 660a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", NULL, &e); 6617a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 6627a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6637a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6647a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceRSN) { 6657a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 666a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 667a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn, "secure password", &e); 6687a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 6697a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6707a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6717a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceRSNNoPassword) { 6727a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 673a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 674a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn, NULL, &e); 6757a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidArguments, e.type()); 6767a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("must specify passphrase", e.message()); 6777a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6787a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6797a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceBadSecurity) { 6807a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 681a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, "rot-13", 682a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, &e); 6837a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kNotSupported, e.type()); 6847a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("security mode is unsupported", e.message()); 6857a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6867a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6877a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEPNoPassword) { 6887a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 689a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 690a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, NULL, &e); 6917a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidArguments, e.type()); 6927a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("must specify passphrase", e.message()); 6937a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 6947a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 6957a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEPEmptyPassword) { 6967a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 697a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 698a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "", &e); 6997a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 7007a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7017a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7027a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40ASCII) { 7037a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 704a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 705a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "abcde", &e); 7067a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 7077a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7087a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7097a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104ASCII) { 7107a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 711a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 712a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "abcdefghijklm", &e); 7137a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 7147a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7157a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7167a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40ASCIIWithKeyIndex) { 7177a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 718a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 719a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:abcdefghijklm", &e); 7207a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 7217a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7227a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7237a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40Hex) { 7247a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 725a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 726a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405", &e); 7277a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 7287a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7297a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7307a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexBadPassphrase) { 7317a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 732a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 733a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "O102030405", &e); 7347a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 7357a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7367a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7377a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexBadPassphrase) { 7387a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 739a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 740a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "1:O102030405", &e); 7417a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 7427a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7437a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7447a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexAndBaseBadPassphrase) { 7457a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 746a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 747a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "1:0xO102030405", &e); 7487a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 7497a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7507a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7517a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithBaseBadPassphrase) { 7527a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 753a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 754a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0xO102030405", &e); 7557a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 7567a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7577a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7587a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104Hex) { 7597a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 760a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 761a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405060708090a0b0c0d", &e); 7627a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 7637a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7647a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7657a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexUppercase) { 7667a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 767a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 768a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405060708090A0B0C0D", &e); 7697a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 7707a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7717a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7727a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndex) { 7737a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 774a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 775a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:0102030405060708090a0b0c0d", &e); 7767a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 7777a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7787a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7797a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndexAndBase) { 7807a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 781a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 782a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:0x0102030405060708090a0b0c0d", &e); 7837a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 7847a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 7857a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 7868ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiGetServiceSuccessTest : public WiFiMainTest {}; 7878ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiGetServiceFailureTest : public WiFiMainTest {}; 7888ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 7898ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalTEST_P(WiFiGetServiceSuccessTest, Passphrase) { 7908ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Error e; 791a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 792a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa, GetParam().c_str(), &e); 7938ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 7948ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal} 7958ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 7968ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalTEST_P(WiFiGetServiceFailureTest, Passphrase) { 7978ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Error e; 798a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 799a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa, GetParam().c_str(), &e); 8008ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 8018ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal} 8028ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 8038ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalINSTANTIATE_TEST_CASE_P( 8048ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceSuccessTestInstance, 8058ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceSuccessTest, 8068ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Values( 8078ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMinLen, 'Z'), 8088ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMaxLen, 'Z'), 8098ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal // subtle: invalid length for hex key, but valid as ascii passphrase 8108ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen-1, '1'), 8118ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen, '1'))); 8128ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 8138ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalINSTANTIATE_TEST_CASE_P( 8148ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceFailureTestInstance, 8158ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceFailureTest, 8168ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Values( 8178ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMinLen-1, 'Z'), 8188ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMaxLen+1, 'Z'), 8198ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen+1, '1'))); 8208ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 8216ab23a9d4526686406d50081853639540b22213aPaul StewartTEST_F(WiFiMainTest, FindServiceWEP) { 8226ab23a9d4526686406d50081853639540b22213aPaul Stewart const string ssid("an_ssid"); 8236ab23a9d4526686406d50081853639540b22213aPaul Stewart { 8246ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 825a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, ssid.c_str(), flimflam::kModeManaged, 8266ab23a9d4526686406d50081853639540b22213aPaul Stewart flimflam::kSecurityWep, "abcde", &e); 8276ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 8286ab23a9d4526686406d50081853639540b22213aPaul Stewart } 8296ab23a9d4526686406d50081853639540b22213aPaul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 8306ab23a9d4526686406d50081853639540b22213aPaul Stewart 831a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(FindService(ssid_bytes, flimflam::kModeManaged, 832a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep).get()); 833a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(FindService(ssid_bytes, flimflam::kModeManaged, 834a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa).get()); 8356ab23a9d4526686406d50081853639540b22213aPaul Stewart} 8366ab23a9d4526686406d50081853639540b22213aPaul Stewart 8376ab23a9d4526686406d50081853639540b22213aPaul StewartTEST_F(WiFiMainTest, FindServiceWPA) { 8386ab23a9d4526686406d50081853639540b22213aPaul Stewart const string ssid("an_ssid"); 8396ab23a9d4526686406d50081853639540b22213aPaul Stewart { 8406ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 841a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, ssid.c_str(), flimflam::kModeManaged, 8426ab23a9d4526686406d50081853639540b22213aPaul Stewart flimflam::kSecurityRsn, "abcdefgh", &e); 8436ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 8446ab23a9d4526686406d50081853639540b22213aPaul Stewart } 8456ab23a9d4526686406d50081853639540b22213aPaul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 846a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr wpa_service(FindService(ssid_bytes, flimflam::kModeManaged, 847a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa)); 8486ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(wpa_service.get()); 849a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr rsn_service(FindService(ssid_bytes, flimflam::kModeManaged, 850a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn)); 8516ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(rsn_service.get()); 8526ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), rsn_service.get()); 853a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr psk_service(FindService(ssid_bytes, flimflam::kModeManaged, 854a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityPsk)); 8556ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), psk_service.get()); 8566ab23a9d4526686406d50081853639540b22213aPaul Stewart // Indirectly test FindService by doing a GetService on something that 8576ab23a9d4526686406d50081853639540b22213aPaul Stewart // already exists. 8586ab23a9d4526686406d50081853639540b22213aPaul Stewart { 8596ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 8606ab23a9d4526686406d50081853639540b22213aPaul Stewart WiFiServiceRefPtr wpa_service2( 861a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, ssid.c_str(), 862a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, flimflam::kSecurityWpa, 863a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart "abcdefgh", false, &e)); 8646ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 8656ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), wpa_service2.get()); 8666ab23a9d4526686406d50081853639540b22213aPaul Stewart } 8676ab23a9d4526686406d50081853639540b22213aPaul Stewart} 8686ab23a9d4526686406d50081853639540b22213aPaul Stewart 869ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartMATCHER_P(HasHiddenSSID, ssid, "") { 870a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart map<string, DBus::Variant>::const_iterator it = 871ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart arg.find(wpa_supplicant::kPropertyScanSSIDs); 872ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart if (it == arg.end()) { 873ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return false; 874ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 875ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 876ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const DBus::Variant &ssids_variant = it->second; 877ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_TRUE(DBusAdaptor::IsByteArrays(ssids_variant.signature())); 878ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const ByteArrays &ssids = it->second.operator ByteArrays(); 879ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // A valid Scan containing a single hidden SSID should contain 880ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // two SSID entries: one containing the SSID we are looking for, 881ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // and an empty entry, signifying that we also want to do a 882ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // broadcast probe request for all non-hidden APs as well. 883ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return ssids.size() == 2 && 884ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart string(ssids[0].begin(), ssids[0].end()) == ssid && 885ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart ssids[1].empty(); 886ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 887ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 888ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartTEST_F(WiFiMainTest, ScanHidden) { 889ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 890ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 891ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart .Times(AnyNumber()) 892ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart .WillRepeatedly(Throw( 893ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart DBus::Error( 894ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart "fi.w1.wpa_supplicant1.InterfaceUnknown", 895ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 896a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 897a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Create a hidden, favorite service. 898a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 899a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 900a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid0", flimflam::kModeManaged, 901a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, true, &e); 902a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 903a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(service->hidden_ssid()); 90400917ceafbc28599391bfcdd5837faf6d63fec32mukesh agrawal service->MakeFavorite(); 905a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 906a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 907a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Create a hidden, non-favorite service. 908a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 909a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 910a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid1", flimflam::kModeManaged, 911a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, true, &e); 912a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 913a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(service->hidden_ssid()); 914a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 915a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 916a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Create a non-hidden, favorite service. 917a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 918a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 919a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid2", flimflam::kModeManaged, 920a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, false, &e); 921a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 922a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(service->hidden_ssid()); 92300917ceafbc28599391bfcdd5837faf6d63fec32mukesh agrawal service->MakeFavorite(); 924a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 925a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*supplicant_interface_proxy_, Scan(HasHiddenSSID("ssid0"))); 926ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart StartWiFi(); 927ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart dispatcher_.DispatchPendingEvents(); 928ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 929ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 9307ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, InitialSupplicantState) { 9317ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(WiFi::kInterfaceStateUnknown, GetSupplicantState()); 9327ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 9337ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 9347ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeNoService) { 9357ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // State change should succeed even if there is no pending Service. 9367ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateScanning); 9377ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateScanning, GetSupplicantState()); 9387ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 9397ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 9407ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeWithService) { 9417ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Forward transition should trigger a Service state change. 9427ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 9437ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 9447ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(); 9457ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 9467ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 9477ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAssociated); 9487ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 9497ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 9507ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 9517ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 9527ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 9537ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeBackwardsWithService) { 9547ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Some backwards transitions should not trigger a Service state change. 9557ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Supplicant state should still be updated, however. 9567ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 9577ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 9587ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(); 9597ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 9607ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9617ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_CALL(*service.get(), SetState(_)).Times(0); 9627ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAuthenticating); 9637ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateAuthenticating, 9647ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal GetSupplicantState()); 9657ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 9667ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 9677ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 9687ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 9697ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 970a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithNoGroups) { 971a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 972a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetGroupsWithKey(flimflam::kWifiHiddenSsid)) 973a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(set<string>())); 974a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 975a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 976a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 977a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithMissingHidden) { 978a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 979a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 980a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 981a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Missing "Hidden" property. 982a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetBool(StrEq(id), flimflam::kWifiHiddenSsid, _)) 983a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(false)); 984a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 985a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 986a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 987a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithFalseHidden) { 988a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 989a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 990a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 991a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // "Hidden" property set to "false". 992a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetBool(StrEq(id), flimflam::kWifiHiddenSsid, _)) 993a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(DoAll(SetArgumentPointee<2>(true), Return(false))); 994a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 995a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 996a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 997a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithMissingSSID) { 998a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 999a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1000a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1001a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Missing "SSID" property. 1002a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetString(StrEq(id), flimflam::kSSIDProperty, _)) 1003a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(false)); 1004a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1005a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1006a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1007a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1008a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithFoundService) { 1009a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1010a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1011a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1012a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1013a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", NULL, &e); 1014a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart ASSERT_TRUE(e.IsSuccess()); 1015a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1016a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1017a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1018a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesSuccess) { 1019a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1020a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string ssid("an_ssid"); 1021a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1022a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, ssid, &id); 1023a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(LoadHiddenServices(&storage)); 1024a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 1025a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(FindService(ssid_bytes, flimflam::kModeManaged, 1026a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityNone).get()); 1027a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1028a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 10291590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToDisconnected) { 10301590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 10311590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 10321590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10331590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handle used in this test ("an_ap") is not 10341590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // intended to reflect the format used by supplicant. It's just 10351590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // convenient for testing. 10361590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10371590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 10381590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 10391590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 10401590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service); 10411590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service, GetPendingService().get()); 10421590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10431590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("an_ap"); 10441590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 10451590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 10461590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service, GetCurrentService().get()); 10471590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 10481590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10491590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 10501590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateIdle, service->state()); 10511590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetCurrentService().get()); 10521590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 10531590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 10541590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10551590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToConnectedNewService) { 10561590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap1 = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 10571590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap2 = MakeEndpoint("another_ssid", "01:02:03:04:05:06"); 10581590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service1 = CreateServiceForEndpoint(*ap1); 10591590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service2 = CreateServiceForEndpoint(*ap2); 10601590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10611590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handles used in this test ("ap1", "ap2") are 10621590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // not intended to reflect the format used by supplicant. They're 10631590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // just convenient for testing. 10641590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10651590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 10661590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportBSS("ap1", ap1->ssid_string(), ap1->bssid_string(), 0, 10671590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 10681590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportBSS("ap2", ap2->ssid_string(), ap2->bssid_string(), 0, 10691590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 10701590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service1); 10711590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("ap1"); 10721590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 10731590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service1.get(), GetCurrentService().get()); 10741590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10751590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("ap2"); 10761590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 10771590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service2.get(), GetCurrentService().get()); 10781590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateIdle, service1->state()); 10791590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service2->state()); 10801590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 10811590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10821590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeDisconnectedToConnected) { 10831590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 10841590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 10851590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10861590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handle used in this test ("an_ap") is not 10871590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // intended to reflect the format used by supplicant. It's just 10881590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // convenient for testing. 10891590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 10901590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 10911590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 10921590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 10931590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service); 10941590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("an_ap"); 10951590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 10961590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service.get(), GetCurrentService().get()); 10971590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 10981590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 10991590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1100853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} // namespace shill 1101