wifi_unittest.cc revision 5c05b2920be742d518829972127172481722058d
18a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal// Copyright (c) 2012 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" 33c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal#include "shill/mock_device_info.h" 34f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include "shill/mock_dhcp_config.h" 35f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include "shill/mock_dhcp_provider.h" 362ae797d040b7261a5619c750e07037566bcb542bChris Masone#include "shill/mock_manager.h" 373426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le#include "shill/mock_metrics.h" 38ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain#include "shill/mock_power_manager.h" 39ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain#include "shill/mock_power_manager_proxy.h" 405c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include "shill/mock_rtnl_handler.h" 41a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include "shill/mock_store.h" 42b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal#include "shill/mock_supplicant_bss_proxy.h" 433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_interface_proxy.h" 443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_process_proxy.h" 455c05b2920be742d518829972127172481722058dmukesh agrawal#include "shill/mock_time.h" 467ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal#include "shill/mock_wifi_service.h" 47dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include "shill/nice_mock_control.h" 48853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/property_store_unittest.h" 493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/proxy_factory.h" 503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/wifi_endpoint.h" 513239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal#include "shill/wifi_service.h" 52ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart#include "shill/wpa_supplicant.h" 53853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 54ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 55853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::map; 56a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing std::set; 57853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::string; 58853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::vector; 59853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::_; 603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::AnyNumber; 613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::DefaultValue; 62a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::DoAll; 633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::InSequence; 64b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalusing ::testing::Invoke; 657ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalusing ::testing::Mock; 66dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawalusing ::testing::NiceMock; 67853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Return; 68ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morainusing ::testing::SaveArg; 69a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::SetArgumentPointee; 70a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrEq; 71a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrictMock; 72853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Test; 733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::Throw; 748ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalusing ::testing::Values; 75853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 76853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masonenamespace shill { 77853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalclass WiFiPropertyTest : public PropertyStoreTest { 79853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone public: 803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiPropertyTest() 813426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le : device_(new WiFi(control_interface(), 823426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le NULL, NULL, NULL, "wifi", "", 0)) { 83853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone } 843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual ~WiFiPropertyTest() {} 85853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 86853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone protected: 878abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFiRefPtr device_; 88853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone}; 89853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Contains) { 91de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_TRUE(device_->store().Contains(flimflam::kNameProperty)); 92de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_FALSE(device_->store().Contains("")); 93853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 94853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 956bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawalTEST_F(WiFiPropertyTest, SetProperty) { 96a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 97a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 986bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 99de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal device_->mutable_store(), 100a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanSignalThresholdProperty, 101a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kInt32V, 102a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 103a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 104a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 105a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1066bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty(device_->mutable_store(), 1076bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanIntervalProperty, 1086bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kUint16V, 1096bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 110a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 111853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone // Ensure that an attempt to write a R/O property returns InvalidArgs error. 112a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 113a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1146bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty(device_->mutable_store(), 1156bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanningProperty, 1166bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kBoolV, 1176bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 1189d779936d8f8c2d74b30883e2a2622c4207fe797Chris Masone EXPECT_EQ(invalid_args(), error.name()); 119a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 120853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1214d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1224d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1236bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1244d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1254d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1264d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant( 1274d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal wpa_supplicant::kNetworkBgscanMethodSimple), 1284d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1294d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1304d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1314d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1324d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1336bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty( 1344d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1354d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1364d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant("not a real scan method"), 1374d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1384d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1394d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 1404d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1418abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawalTEST_F(WiFiPropertyTest, ClearDerivedProperty) { 1428abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_NE(wpa_supplicant::kNetworkBgscanMethodLearn, 1438abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFi::kDefaultBgscanMethod); 1448abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(WiFi::kDefaultBgscanMethod, device_->bgscan_method_); 1458abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1468abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal ::DBus::Error error; 1476bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1488abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), 1498abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal flimflam::kBgscanMethodProperty, 1508abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal DBusAdaptor::StringToVariant( 1518abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal wpa_supplicant::kNetworkBgscanMethodLearn), 1528abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal &error)); 1538abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(wpa_supplicant::kNetworkBgscanMethodLearn, device_->bgscan_method_); 1548abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1558abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_TRUE(DBusAdaptor::ClearProperty( 1568abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), flimflam::kBgscanMethodProperty, &error)); 1578abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(WiFi::kDefaultBgscanMethod, device_->bgscan_method_); 1588abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal} 1598abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1608ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiMainTest : public ::testing::TestWithParam<string> { 1613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 1623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiMainTest() 1633426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le : manager_(&control_interface_, NULL, &metrics_, &glib_), 164c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal device_info_(&control_interface_, &dispatcher_, &metrics_, &manager_), 165626719f89881a949d8b5a8fa808beb924496489fChris Masone wifi_(new WiFi(&control_interface_, 1663239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal &dispatcher_, 1673426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 168626719f89881a949d8b5a8fa808beb924496489fChris Masone &manager_, 169626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceName, 170626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceAddress, 171626719f89881a949d8b5a8fa808beb924496489fChris Masone 0)), 172dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_process_proxy_(new NiceMock<MockSupplicantProcessProxy>()), 173dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_interface_proxy_( 174dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal new NiceMock<MockSupplicantInterfaceProxy>(wifi_)), 175b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal supplicant_bss_proxy_( 176b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal new NiceMock<MockSupplicantBSSProxy>()), 177f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal dhcp_config_(new MockDHCPConfig(&control_interface_, 178f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal &dispatcher_, 179f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal &dhcp_provider_, 180f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal kDeviceName, 181d32f484b91ab583ccc9a14b2a6b5182fda6958f0Paul Stewart kHostName, 182f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal &glib_)), 183ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain proxy_factory_(this), 184ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain power_manager_(new MockPowerManager(&proxy_factory_)), 185ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain power_state_callback_(NULL) { 1863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ::testing::DefaultValue< ::DBus::Path>::Set("/default/path"); 1874eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal // Except for WiFiServices created via WiFi::GetService, we expect 1884eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal // that any WiFiService has been registered with the Manager. So 1894eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal // default Manager.HasService to true, to make the common case 1904eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal // easy. 1914eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal ON_CALL(manager_, HasService(_)). 1924eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal WillByDefault(Return(true)); 193c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 194c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ON_CALL(dhcp_provider_, CreateConfig(_, _)). 195c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(dhcp_config_)); 196c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ON_CALL(*dhcp_config_.get(), RequestIP()). 197c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(true)); 198ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 199ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain // |manager_| takes ownership of |power_manager_|. 200ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain manager_.set_power_manager(power_manager_); 2015c05b2920be742d518829972127172481722058dmukesh agrawal 2025c05b2920be742d518829972127172481722058dmukesh agrawal wifi_->time_ = &time_; 2033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2045c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2055c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void SetUp() { 206ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = &proxy_factory_; 2075c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal static_cast<Device *>(wifi_)->rtnl_handler_ = &rtnl_handler_; 2085c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(&dhcp_provider_); 209c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ON_CALL(manager_, device_info()). 210c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(&device_info_)); 211b9c00597eb1f6d2560f7e88cb0d1f627228840d4Chris Masone EXPECT_CALL(manager_, DeregisterService(_)).Times(AnyNumber()); 212b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 2135c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal } 2145c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2155c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void TearDown() { 216d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 217910011207d66e14bf753d2783e131e7558126430Gary Morain EXPECT_CALL(*power_manager_, RemoveStateChangeCallback(wifi_->UniqueName())) 218910011207d66e14bf753d2783e131e7558126430Gary Morain .Times(AnyNumber()); 219b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal if (supplicant_bss_proxy_.get()) { 220b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()); 221b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 222ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = NULL; 2233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // must Stop WiFi instance, to clear its list of services. 2243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // otherwise, the WiFi instance will not be deleted. (because 2253195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // services reference a WiFi instance, creating a cycle.) 2263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->Stop(); 2275c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(NULL); 228f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 229f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 2303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 2317ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal typedef scoped_refptr<MockWiFiService> MockWiFiServiceRefPtr; 2327ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 2333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal class TestProxyFactory : public ProxyFactory { 2343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 235b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal explicit TestProxyFactory(WiFiMainTest *test); 2363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantProcessProxyInterface *CreateSupplicantProcessProxy( 2381830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_path*/, const char */*dbus_addr*/) { 239dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_process_proxy_.release(); 2403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantInterfaceProxyInterface *CreateSupplicantInterfaceProxy( 2431830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const WiFiRefPtr &/*wifi*/, 2441830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const DBus::Path &/*object_path*/, 2451830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_addr*/) { 246dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_interface_proxy_.release(); 2473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 249b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MOCK_METHOD3(CreateSupplicantBSSProxy, 250b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *( 251b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint *wifi_endpoint, 252b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &object_path, 253b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char *dbus_addr)); 254b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 255ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain virtual PowerManagerProxyInterface *CreatePowerManagerProxy( 256ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain PowerManagerProxyDelegate */*delegate*/) { 257ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain return new MockPowerManagerProxy(); 258ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain } 259ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 2603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 261b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *CreateSupplicantBSSProxyInternal( 262b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint */*wifi_endpoint*/, 263b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &/*object_path*/, 264b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char */*dbus_addr*/) { 265b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return test_->supplicant_bss_proxy_.release(); 266b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 267b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 268dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal WiFiMainTest *test_; 2693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal }; 2703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2711590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr CreateServiceForEndpoint(const WiFiEndpoint &endpoint) { 2721590839e44a0e922d4763003a35dbd493509b705mukesh agrawal bool hidden_ssid = false; 2731590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->CreateServiceForEndpoint(endpoint, hidden_ssid); 2741590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 2751590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetCurrentService() { 2761590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->current_service_; 2771590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 2783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFi::EndpointMap &GetEndpointMap() { 279165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->endpoint_by_rpcid_; 2803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2811590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetPendingService() { 2821590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->pending_service_; 2831590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 284165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal const vector<WiFiServiceRefPtr> &GetServices() { 285165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->services_; 2863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // note: the tests need the proxies referenced by WiFi (not the 2883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // proxies instantiated by WiFiMainTest), to ensure that WiFi 2893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // sets up its proxies correctly. 2903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantProcessProxyInterface *GetSupplicantProcessProxy() { 2913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_process_proxy_.get(); 2923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2938a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal MockSupplicantInterfaceProxy *GetSupplicantInterfaceProxy() { 2948a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal return dynamic_cast<MockSupplicantInterfaceProxy *>( 2958a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal wifi_->supplicant_interface_proxy_.get()); 2963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2977ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal const string &GetSupplicantState() { 2987ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return wifi_->supplicant_state_; 2997ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 3007ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void InitiateConnect(WiFiServiceRefPtr service) { 3016e277774580c52073c919c4cbebedae27861d845mukesh agrawal map<string, ::DBus::Variant> params; 3026e277774580c52073c919c4cbebedae27861d845mukesh agrawal wifi_->ConnectTo(service, params); 3033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3040ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal void InitiateDisconnect(WiFiServiceRefPtr service) { 3050ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal wifi_->DisconnectFrom(service); 3060ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal } 3071590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr MakeEndpoint(const string &ssid, const string &bssid) { 308e1d90e9f688406d47a1453eeac51b7faaebf9908mukesh agrawal return WiFiEndpoint::MakeOpenEndpoint( 309e1d90e9f688406d47a1453eeac51b7faaebf9908mukesh agrawal &proxy_factory_, NULL, ssid, bssid, 0, 0); 3101590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 3117ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal MockWiFiServiceRefPtr MakeMockService() { 3127ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal vector<uint8_t> ssid(1, 'a'); 3137ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return new MockWiFiService( 3147ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &control_interface_, 3157ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &dispatcher_, 3163426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 3177ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &manager_, 3187ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_, 3197ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ssid, 3207ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal flimflam::kModeManaged, 3217ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal flimflam::kSecurityNone, 3227ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal false); 3237ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 324261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal void RemoveBSS(const ::DBus::Path &bss_path); 3253195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportBSS(const ::DBus::Path &bss_path, 3263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 3273195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 3283195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 329e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 3303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode); 33166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart void ClearCachedCredentials() { 33266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart wifi_->ClearCachedCredentials(); 33366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart } 334c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal void ReportIPConfigComplete() { 33579d74c9bdb654be48765c1e7aa416126ffd2ae5eDarin Petkov wifi_->OnIPConfigUpdated(dhcp_config_, true); 336c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal } 337f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal void ReportLinkUp() { 338f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi_->LinkEvent(IFF_LOWER_UP, IFF_LOWER_UP); 339f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 3403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportScanDone() { 341dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal wifi_->ScanDoneTask(); 3423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3431590839e44a0e922d4763003a35dbd493509b705mukesh agrawal void ReportCurrentBSSChanged(const string &new_bss) { 3441590839e44a0e922d4763003a35dbd493509b705mukesh agrawal wifi_->CurrentBSSChanged(new_bss); 3451590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 3467ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void ReportStateChanged(const string &new_state) { 3477ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_->StateChanged(new_state); 3487ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 3493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StartWiFi() { 350ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*power_manager_, AddStateChangeCallback(wifi_->UniqueName(), _)) 351ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain .WillOnce(SaveArg<1>(&power_state_callback_)); 3523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->Start(); 3533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StopWiFi() { 355910011207d66e14bf753d2783e131e7558126430Gary Morain EXPECT_CALL(*power_manager_, 356910011207d66e14bf753d2783e131e7558126430Gary Morain RemoveStateChangeCallback(wifi_->UniqueName())); 3573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal wifi_->Stop(); 3583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 359ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 360ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain void GetOpenService(const char *service_type, 3617a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *ssid, 3627a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *mode, 363ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 364ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart GetServiceInner(service_type, ssid, mode, NULL, NULL, false, result); 3657a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal } 3667a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal void GetService(const char *service_type, 3677a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *ssid, 3687a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *mode, 3697a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *security, 3707a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *passphrase, 371ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 372ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart GetServiceInner(service_type, ssid, mode, security, passphrase, false, 373ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart result); 374ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 375ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart WiFiServiceRefPtr GetServiceInner(const char *service_type, 376ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *ssid, 377ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *mode, 378ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *security, 379ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *passphrase, 380a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart bool allow_hidden, 381ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 3827a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal map<string, ::DBus::Variant> args; 3837a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // in general, we want to avoid D-Bus specific code for any RPCs 3847a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // that come in via adaptors. we make an exception here, because 3857a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // calls to GetWifiService are rerouted from the Manager object to 3867a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // the Wifi class. 3877a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (service_type != NULL) 3887a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kTypeProperty].writer().append_string(service_type); 3897a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (ssid != NULL) 3907a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kSSIDProperty].writer().append_string(ssid); 3917a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (mode != NULL) 3927a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kModeProperty].writer().append_string(mode); 3937a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (security != NULL) 3947a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kSecurityProperty].writer().append_string(security); 3957a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (passphrase != NULL) 3967a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kPassphraseProperty].writer().append_string(passphrase); 397a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart if (!allow_hidden) 398a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart args[flimflam::kWifiHiddenSsid].writer().append_bool(false); 3997a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 400ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error e; 401ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart KeyValueStore args_kv; 4027a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal DBusAdaptor::ArgsToKeyValueStore(args, &args_kv, &e); 403ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return wifi_->GetService(args_kv, result); 4047a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal } 405a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr FindService(const vector<uint8_t> &ssid, 406a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string &mode, 407a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string &security) { 408a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart return wifi_->FindService(ssid, mode, security); 409a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 410a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart bool LoadHiddenServices(StoreInterface *storage) { 411a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart return wifi_->LoadHiddenServices(storage); 412a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 413a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart void SetupHiddenStorage(MockStore *storage, const string &ssid, string *id) { 414a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string hex_ssid = base::HexEncode(ssid.data(), ssid.size()); 415a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart *id = StringToLowerASCII(base::StringPrintf("%s_%s_%s_%s_%s", 416a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kTypeWifi, 417a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart kDeviceAddress, 418a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart hex_ssid.c_str(), 419a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, 420a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityNone)); 421a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const char *groups[] = { id->c_str() }; 422a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetGroupsWithKey(flimflam::kWifiHiddenSsid)) 423a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(Return(set<string>(groups, groups + 1))); 424a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetBool(StrEq(*id), flimflam::kWifiHiddenSsid, _)) 425a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(DoAll(SetArgumentPointee<2>(true), Return(true))); 426a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetString(StrEq(*id), flimflam::kSSIDProperty, _)) 427a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(DoAll(SetArgumentPointee<2>(hex_ssid), Return(true))); 428a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 4293239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal MockManager *manager() { 4303239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return &manager_; 4313239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 432d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 433d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDeviceInfo *device_info() { 434d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &device_info_; 435d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 436d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 437d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDHCPProvider *dhcp_provider() { 438d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &dhcp_provider_; 439d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 440d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 441ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain PowerManager::PowerStateCallback *power_state_callback() const { 442ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain return power_state_callback_; 443ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain } 444ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 4453239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal const WiFiConstRefPtr wifi() const { 4463239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return wifi_; 4473239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 4483239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal 449b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal TestProxyFactory *proxy_factory() { 450b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return &proxy_factory_; 451b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 452b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 4533239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal EventDispatcher dispatcher_; 4545c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal NiceMock<MockRTNLHandler> rtnl_handler_; 4555c05b2920be742d518829972127172481722058dmukesh agrawal MockTime time_; 4563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 458dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal NiceMockControl control_interface_; 4593426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le MockMetrics metrics_; 460f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockGLib glib_; 4612ae797d040b7261a5619c750e07037566bcb542bChris Masone MockManager manager_; 462c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal MockDeviceInfo device_info_; 4633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiRefPtr wifi_; 4643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // protected fields interspersed between private fields, due to 4663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // initialization order 4673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 4683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kDeviceName[]; 469626719f89881a949d8b5a8fa808beb924496489fChris Masone static const char kDeviceAddress[]; 470d32f484b91ab583ccc9a14b2a6b5182fda6958f0Paul Stewart static const char kHostName[]; 4713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeAdHoc[]; 4723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeInfrastructure[]; 4733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 474dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantProcessProxy> supplicant_process_proxy_; 475dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantInterfaceProxy> supplicant_interface_proxy_; 476b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal scoped_ptr<MockSupplicantBSSProxy> supplicant_bss_proxy_; 477f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockDHCPProvider dhcp_provider_; 478f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal scoped_refptr<MockDHCPConfig> dhcp_config_; 4793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 4813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal TestProxyFactory proxy_factory_; 482ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain MockPowerManager *power_manager_; 483ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain PowerManager::PowerStateCallback *power_state_callback_; 4843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal}; 4853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kDeviceName[] = "wlan0"; 487a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartconst char WiFiMainTest::kDeviceAddress[] = "000102030405"; 488d32f484b91ab583ccc9a14b2a6b5182fda6958f0Paul Stewartconst char WiFiMainTest::kHostName[] = "hostname"; 4893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kNetworkModeAdHoc[] = "ad-hoc"; 4903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kNetworkModeInfrastructure[] = "infrastructure"; 4913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 492261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalvoid WiFiMainTest::RemoveBSS(const ::DBus::Path &bss_path) { 493b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSRemovedTask(bss_path); 494261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 495261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 4963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalvoid WiFiMainTest::ReportBSS(const ::DBus::Path &bss_path, 4973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 4983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 4993195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 500e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 5013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode) { 5023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal map<string, ::DBus::Variant> bss_properties; 5033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 5053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["SSID"].writer()); 5063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << vector<uint8_t>(ssid.begin(), ssid.end()); 5073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 5093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal string bssid_nosep; 5103195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal vector<uint8_t> bssid_bytes; 5113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal RemoveChars(bssid, ":", &bssid_nosep); 5123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal base::HexStringToBytes(bssid_nosep, &bssid_bytes); 5133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["BSSID"].writer()); 5153195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << bssid_bytes; 5163195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 517e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertySignal].writer(). 518e41a72d0737488d561a4158019409d5785dad61bThieu Le append_int16(signal_strength); 519e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertyFrequency].writer(). 520e41a72d0737488d561a4158019409d5785dad61bThieu Le append_uint16(frequency); 521e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertyMode].writer().append_string(mode); 522b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSAddedTask(bss_path, bss_properties); 5233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 525b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalWiFiMainTest::TestProxyFactory::TestProxyFactory(WiFiMainTest *test) 526b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal : test_(test) { 527b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*this, CreateSupplicantBSSProxy(_, _, _)).Times(AnyNumber()); 528b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ON_CALL(*this, CreateSupplicantBSSProxy(_, _, _)) 529b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal .WillByDefault( 530b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Invoke(this, (&TestProxyFactory::CreateSupplicantBSSProxyInternal))); 531b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 532b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 5333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ProxiesSetUpDuringStart) { 5343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 5353195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantInterfaceProxy() == NULL); 5363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 5393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantInterfaceProxy() == NULL); 5403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, CleanStart) { 5433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 5443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 5453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 5463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 5473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 5483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceUnknown", 5493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 5503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 5513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5523239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 5533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Restart) { 5563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)) 5573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 5583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 5593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 5603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceExists", 5613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test thew fi.w1.wpa_supplicant1.InterfaceExists"))); 5623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)); 5633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 5643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5653239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 5663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, StartClearsState) { 5693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, RemoveAllNetworks()); 5703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, FlushBSS(_)); 5713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 574ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary MorainTEST_F(WiFiMainTest, PowerChangeToResumeStartsScanWhenIdle) { 575ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 576ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 577ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 578ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Mock::VerifyAndClearExpectations(&supplicant_interface_proxy_); 5795c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 580ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(power_state_callback() != NULL); 581ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 582ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 583ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain power_state_callback()->Run(PowerManagerProxyDelegate::kOn); 584ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 585ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 586ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 587ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary MorainTEST_F(WiFiMainTest, PowerChangeToSuspendDoesNotStartScan) { 588ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 589ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 590ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 591ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Mock::VerifyAndClearExpectations(&supplicant_interface_proxy_); 592ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(power_state_callback() != NULL); 593ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 594ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 595ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain power_state_callback()->Run(PowerManagerProxyDelegate::kStandby); 596ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 597ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain power_state_callback()->Run(PowerManagerProxyDelegate::kMem); 598ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 599ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain power_state_callback()->Run(PowerManagerProxyDelegate::kDisk); 600ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 601ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 602ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 603ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary MorainTEST_F(WiFiMainTest, PowerChangeDoesNotStartScanWhenNotIdle) { 604ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 605ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 606ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 607ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 608ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 609ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Error error; 610ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain service->AddEndpoint(ap); 611ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain service->AutoConnect(); 612ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_FALSE(wifi()->IsIdle()); 613ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 614ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Mock::VerifyAndClearExpectations(&supplicant_interface_proxy_); 615ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(power_state_callback() != NULL); 616ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_FALSE(wifi()->IsIdle()); 617ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 618ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain power_state_callback()->Run(PowerManagerProxyDelegate::kOn); 619ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 620ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 621ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 6223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResults) { 623d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 6243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 625e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 6263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 627e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 6283195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 629e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 6303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 631e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss3", "ssid3", "00:00:00:00:00:03", 3, 0, kNetworkModeInfrastructure); 632e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency = 2412; 633e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss4", "ssid4", "00:00:00:00:00:04", 4, frequency, 634e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeAdHoc); 635e41a72d0737488d561a4158019409d5785dad61bThieu Le 636e41a72d0737488d561a4158019409d5785dad61bThieu Le const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 637e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(5, endpoints_by_rpcid.size()); 638e41a72d0737488d561a4158019409d5785dad61bThieu Le 639e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFi::EndpointMap::const_iterator i; 640e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFiEndpointRefPtr endpoint; 641e41a72d0737488d561a4158019409d5785dad61bThieu Le for (i = endpoints_by_rpcid.begin(); 642e41a72d0737488d561a4158019409d5785dad61bThieu Le i != endpoints_by_rpcid.end(); 643e41a72d0737488d561a4158019409d5785dad61bThieu Le ++i) { 644e41a72d0737488d561a4158019409d5785dad61bThieu Le if (i->second->bssid_string() == "00:00:00:00:00:04") 645e41a72d0737488d561a4158019409d5785dad61bThieu Le break; 646e41a72d0737488d561a4158019409d5785dad61bThieu Le } 647e41a72d0737488d561a4158019409d5785dad61bThieu Le ASSERT_TRUE(i != endpoints_by_rpcid.end()); 648e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(4, i->second->signal_strength()); 649e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency, i->second->frequency()); 650e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ("adhoc", i->second->network_mode()); 6513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 6523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 6533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResultsWithUpdates) { 654d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 655d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 656d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 6573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 658e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 6593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 660e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 6613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 662e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 6633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 664e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 3, 0, kNetworkModeInfrastructure); 665e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 4, 0, kNetworkModeAdHoc); 666165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 667165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 668165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(3, endpoints_by_rpcid.size()); 669165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 670165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFi::EndpointMap::const_iterator i; 671165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFiEndpointRefPtr endpoint; 672165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal for (i = endpoints_by_rpcid.begin(); 673165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal i != endpoints_by_rpcid.end(); 674165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ++i) { 675165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal if (i->second->bssid_string() == "00:00:00:00:00:00") 676165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal break; 677165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal } 678165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ASSERT_TRUE(i != endpoints_by_rpcid.end()); 679165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(4, i->second->signal_strength()); 6803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 6813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 6823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanCompleted) { 6833195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 684261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 685261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(3); 686e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 6873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 688e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 6893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 690e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 6913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 692165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(3, GetServices().size()); 693b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 694e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with SSIDs that start with NULL should be filtered. 695e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss3", string(1, 0), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 696e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(3, GetEndpointMap().size()); 697b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal EXPECT_EQ(3, GetServices().size()); 698b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 699e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with empty SSIDs should be filtered. 700e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss3", string(), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 701e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(3, GetEndpointMap().size()); 702e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(3, GetServices().size()); 703165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 704165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 705165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingTogether) { 706165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 707261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 708261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal InSequence s; 709261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)); 710d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)); 711261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)); 712e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 713e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 714165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 715165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(1, GetServices().size()); 716165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 717165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 718165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingDifferentSSID) { 719165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 720261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 721261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(2); 722e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid1", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 723e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid2", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 724165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 725165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(2, GetServices().size()); 726165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 727165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 728165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingDifferentMode) { 729165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 730261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 731261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(2); 732e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 733e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid", "00:00:00:00:00:01", 0, 0, 734e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 735165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 736165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(2, GetServices().size()); 7373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 739261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonExistentBSSRemoved) { 740261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal // Removal of non-existent BSS should not cause a crash. 741261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 742261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 743261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(0, GetServices().size()); 744261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 745261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 746e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawalTEST_F(WiFiMainTest, BSSWithEmptySSIDRemoved) { 747e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // Removal of BSS with an empty SSID should not cause a crash. 748e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss", string(), "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 749e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal StartWiFi(); 750e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal RemoveBSS("bss"); 751e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(0, GetServices().size()); 752e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal} 753e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal 754e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawalTEST_F(WiFiMainTest, BSSWithNullSSIDRemoved) { 755e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // Removal of BSS with a NULL SSID should not cause a crash. 756e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss", string(1, 0), "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 757e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal StartWiFi(); 758e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal RemoveBSS("bss"); 759e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(0, GetServices().size()); 760e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal} 761e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal 762261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemoved) { 763d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 764261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 765e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 766261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportScanDone(); 767261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 768261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 769261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 7708a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 771261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 7728a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(GetServices().empty()); 7738a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 7748a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 7758a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemovedWhileConnected) { 776d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 7778a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 778e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 7798a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportScanDone(); 7808a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportCurrentBSSChanged("bss0"); 7818a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 7828a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 7838a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 7848a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal RemoveBSS("bss0"); 7858a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(GetServices().empty()); 7868a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 7878a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 7888a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemovedWhileConnectedToHidden) { 789d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 790d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 7918a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 7928a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 7938a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal Error e; 7948a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service = 7958a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal GetServiceInner(flimflam::kTypeWifi, "ssid", flimflam::kModeManaged, 7968a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal NULL, NULL, true, &e); 7978a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(1, GetServices().size()); 7988a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 799e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss", "ssid", "00:00:00:00:00:01", 0, 0, 800e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 8018a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportScanDone(); 8028a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportCurrentBSSChanged("bss"); 803261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 8048a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8058a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 8068a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal RemoveBSS("bss"); 8078a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(1, GetServices().size()); 8088a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal // Verify expectations now, because WiFi may call UpdateService when 8098a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal // WiFi is Stop()-ed (during TearDown()). 8108a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal Mock::VerifyAndClearExpectations(manager()); 811d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), DeregisterService(_)).Times(AnyNumber()); 812261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 813261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 814261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonSolitaryBSSRemoved) { 815d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)); 816d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)); 817d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)); 818261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 819e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 820e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 821261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportScanDone(); 822261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 823261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 824261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 825261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)); 826261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 827261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 828261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 829261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 830261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 8313195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Connect) { 832d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 833dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 834dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal *supplicant_interface_proxy_; 835dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal 8363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 837e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 8383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 8393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 8413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal InSequence s; 8423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Path fake_path("/fake/path"); 843165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFiService *service(GetServices().begin()->get()); 8443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 845dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(_)) 8463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillOnce(Return(fake_path)); 847dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, SelectNetwork(fake_path)); 8483239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal InitiateConnect(service); 849f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal EXPECT_EQ(static_cast<Service *>(service), 850f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi()->selected_service_.get()); 8513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 8523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 8533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8540ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingService) { 855d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 8560ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 8570ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 8580ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8590ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 860e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 8610ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 8620ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service); 8630ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8640ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_FALSE(GetPendingService() == NULL); 8650ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()); 8660ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 8670ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8680ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetPendingService() == NULL); 8690ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 8700ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8710ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingServiceWithCurrent) { 872d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 873d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 874d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 875d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 8760ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 8770ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 8780ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8790ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 880e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 881e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid1", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 8820ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service0(GetServices()[0].get()); 8830ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service1(GetServices()[1].get()); 8840ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8850ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service0); 8860ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 8870ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 8880ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service1); 8890ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8900ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 8910ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 8920ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()); 8930ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service1); 8940ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8950ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| will be unchanged until supplicant signals 8960ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // that CurrentBSS has changed. 8970ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 8980ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |pending_service_| is updated immediately. 8990ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetPendingService() == NULL); 9000ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9010ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9020ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentService) { 903d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 904d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 905d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 906d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9070ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9080ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9090ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9100ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 911e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 9120ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 9130ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service); 9140ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 9150ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9160ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9170ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 9180ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()); 9190ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 9200ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9210ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| should not change until supplicant reports 9220ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // a BSS change. 9230ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 9240ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9250ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9260ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceWithPending) { 927d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 928d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 929d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 930d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9310ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9320ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9330ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9340ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 935e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 936e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid1", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 9370ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service0(GetServices()[0].get()); 9380ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service1(GetServices()[1].get()); 9390ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9400ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service0); 9410ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 9420ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9430ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service1); 9440ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9450ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 9460ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 9470ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()) 9480ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .Times(0); 9490ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service0); 9500ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9510ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 9520ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 9530ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9540ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9550ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectInvalidService) { 956d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 9570ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9580ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9590ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9600ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 961e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 9620ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 9630ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()) 9640ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .Times(0); 9650ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 9660ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9670ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9680ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceFailure) { 969d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 970d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 971d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 972d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9730ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9740ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9750ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9760ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 977e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 9780ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9790ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 9800ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal DBus::Path fake_path("/fake/path"); 9810ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(_)) 9820ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .WillOnce(Return(fake_path)); 9830ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service); 9840ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 9850ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9860ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9870ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 9880ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()) 9890ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .WillRepeatedly(Throw( 9900ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal DBus::Error( 9910ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "fi.w1.wpa_supplicant1.NotConnected", 9920ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "test threw fi.w1.wpa_supplicant1.NotConnected"))); 9930ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, RemoveNetwork(fake_path)); 9940ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 9950ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9960ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetCurrentService() == NULL); 9970ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9980ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9995c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawalTEST_F(WiFiMainTest, Stop) { 1000d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1001c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1002e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1003c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportScanDone(); 10045c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 1005c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 1006c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StopWiFi(); 10075c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal} 10085c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 10097a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpen) { 10107a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1011a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, &e); 10127a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 10137a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10147a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10157a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenNoSSID) { 10167a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1017a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, NULL, flimflam::kModeManaged, &e); 10187a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidArguments, e.type()); 10197a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("must specify SSID", e.message()); 10207a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10217a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10227a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenLongSSID) { 10237a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 10247a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal GetOpenService( 1025a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kTypeWifi, "123456789012345678901234567890123", 1026a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, &e); 10277a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidNetworkName, e.type()); 10287a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("SSID is too long", e.message()); 10297a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10307a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10317a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenShortSSID) { 10327a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1033a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "", flimflam::kModeManaged, &e); 10347a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidNetworkName, e.type()); 10357a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("SSID is too short", e.message()); 10367a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10377a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10387a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenBadMode) { 10397a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1040a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", "ad-hoc", &e); 10417a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kNotSupported, e.type()); 10427a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("service mode is unsupported", e.message()); 10437a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10447a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10457a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenNoMode) { 10467a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1047a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", NULL, &e); 10487a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 10497a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10507a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10517a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceRSN) { 10527a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1053a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1054a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn, "secure password", &e); 10557a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 10567a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10577a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10587a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceRSNNoPassword) { 10597a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1060a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1061a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn, NULL, &e); 10627a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidArguments, e.type()); 10637a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("must specify passphrase", e.message()); 10647a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10657a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10667a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceBadSecurity) { 10677a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1068a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, "rot-13", 1069a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, &e); 10707a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kNotSupported, e.type()); 10717a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("security mode is unsupported", e.message()); 10727a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10737a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10747a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEPNoPassword) { 10757a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1076a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1077a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, NULL, &e); 10787a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidArguments, e.type()); 10797a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("must specify passphrase", e.message()); 10807a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10817a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10827a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEPEmptyPassword) { 10837a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1084a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1085a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "", &e); 10867a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 10877a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10887a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10897a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40ASCII) { 10907a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1091a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1092a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "abcde", &e); 10937a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 10947a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10957a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10967a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104ASCII) { 10977a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1098a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1099a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "abcdefghijklm", &e); 11007a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11017a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11027a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11037a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40ASCIIWithKeyIndex) { 11047a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1105a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1106a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:abcdefghijklm", &e); 11077a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11087a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11097a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11107a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40Hex) { 11117a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1112a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1113a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405", &e); 11147a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11157a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11167a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11177a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexBadPassphrase) { 11187a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1119a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1120a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "O102030405", &e); 11217a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11227a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11237a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11247a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexBadPassphrase) { 11257a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1126a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1127a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "1:O102030405", &e); 11287a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11297a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11307a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11317a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexAndBaseBadPassphrase) { 11327a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1133a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1134a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "1:0xO102030405", &e); 11357a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11367a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11377a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11387a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithBaseBadPassphrase) { 11397a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1140a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1141a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0xO102030405", &e); 11427a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11437a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11447a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11457a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104Hex) { 11467a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1147a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1148a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405060708090a0b0c0d", &e); 11497a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11507a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11517a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11527a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexUppercase) { 11537a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1154a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1155a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405060708090A0B0C0D", &e); 11567a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11577a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11587a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11597a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndex) { 11607a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1161a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1162a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:0102030405060708090a0b0c0d", &e); 11637a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11647a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11657a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11667a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndexAndBase) { 11677a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1168a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1169a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:0x0102030405060708090a0b0c0d", &e); 11707a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11717a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11727a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11738ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiGetServiceSuccessTest : public WiFiMainTest {}; 11748ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiGetServiceFailureTest : public WiFiMainTest {}; 11758ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 11768ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalTEST_P(WiFiGetServiceSuccessTest, Passphrase) { 11778ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Error e; 1178a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1179a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa, GetParam().c_str(), &e); 11808ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11818ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal} 11828ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 11838ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalTEST_P(WiFiGetServiceFailureTest, Passphrase) { 11848ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Error e; 1185a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1186a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa, GetParam().c_str(), &e); 11878ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11888ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal} 11898ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 11908ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalINSTANTIATE_TEST_CASE_P( 11918ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceSuccessTestInstance, 11928ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceSuccessTest, 11938ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Values( 11948ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMinLen, 'Z'), 11958ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMaxLen, 'Z'), 11968ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal // subtle: invalid length for hex key, but valid as ascii passphrase 11978ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen-1, '1'), 11988ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen, '1'))); 11998ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12008ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalINSTANTIATE_TEST_CASE_P( 12018ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceFailureTestInstance, 12028ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceFailureTest, 12038ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Values( 12048ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMinLen-1, 'Z'), 12058ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMaxLen+1, 'Z'), 12068ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen+1, '1'))); 12078ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12086ab23a9d4526686406d50081853639540b22213aPaul StewartTEST_F(WiFiMainTest, FindServiceWEP) { 12096ab23a9d4526686406d50081853639540b22213aPaul Stewart const string ssid("an_ssid"); 12106ab23a9d4526686406d50081853639540b22213aPaul Stewart { 12116ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 1212a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, ssid.c_str(), flimflam::kModeManaged, 12136ab23a9d4526686406d50081853639540b22213aPaul Stewart flimflam::kSecurityWep, "abcde", &e); 12146ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 12156ab23a9d4526686406d50081853639540b22213aPaul Stewart } 12166ab23a9d4526686406d50081853639540b22213aPaul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 12176ab23a9d4526686406d50081853639540b22213aPaul Stewart 1218a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(FindService(ssid_bytes, flimflam::kModeManaged, 1219a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep).get()); 1220a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(FindService(ssid_bytes, flimflam::kModeManaged, 1221a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa).get()); 12226ab23a9d4526686406d50081853639540b22213aPaul Stewart} 12236ab23a9d4526686406d50081853639540b22213aPaul Stewart 12246ab23a9d4526686406d50081853639540b22213aPaul StewartTEST_F(WiFiMainTest, FindServiceWPA) { 12256ab23a9d4526686406d50081853639540b22213aPaul Stewart const string ssid("an_ssid"); 12266ab23a9d4526686406d50081853639540b22213aPaul Stewart { 12276ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 1228a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, ssid.c_str(), flimflam::kModeManaged, 12296ab23a9d4526686406d50081853639540b22213aPaul Stewart flimflam::kSecurityRsn, "abcdefgh", &e); 12306ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 12316ab23a9d4526686406d50081853639540b22213aPaul Stewart } 12326ab23a9d4526686406d50081853639540b22213aPaul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 1233a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr wpa_service(FindService(ssid_bytes, flimflam::kModeManaged, 1234a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa)); 12356ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(wpa_service.get()); 1236a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr rsn_service(FindService(ssid_bytes, flimflam::kModeManaged, 1237a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn)); 12386ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(rsn_service.get()); 12396ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), rsn_service.get()); 1240a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr psk_service(FindService(ssid_bytes, flimflam::kModeManaged, 1241a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityPsk)); 12426ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), psk_service.get()); 12436ab23a9d4526686406d50081853639540b22213aPaul Stewart // Indirectly test FindService by doing a GetService on something that 12446ab23a9d4526686406d50081853639540b22213aPaul Stewart // already exists. 12456ab23a9d4526686406d50081853639540b22213aPaul Stewart { 12466ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 12476ab23a9d4526686406d50081853639540b22213aPaul Stewart WiFiServiceRefPtr wpa_service2( 1248a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, ssid.c_str(), 1249a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, flimflam::kSecurityWpa, 1250a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart "abcdefgh", false, &e)); 12516ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 12526ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), wpa_service2.get()); 12536ab23a9d4526686406d50081853639540b22213aPaul Stewart } 12546ab23a9d4526686406d50081853639540b22213aPaul Stewart} 12556ab23a9d4526686406d50081853639540b22213aPaul Stewart 1256ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartMATCHER_P(HasHiddenSSID, ssid, "") { 1257a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart map<string, DBus::Variant>::const_iterator it = 1258ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart arg.find(wpa_supplicant::kPropertyScanSSIDs); 1259ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart if (it == arg.end()) { 1260ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return false; 1261ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 1262ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1263ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const DBus::Variant &ssids_variant = it->second; 1264ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_TRUE(DBusAdaptor::IsByteArrays(ssids_variant.signature())); 1265ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const ByteArrays &ssids = it->second.operator ByteArrays(); 1266ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // A valid Scan containing a single hidden SSID should contain 1267ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // two SSID entries: one containing the SSID we are looking for, 1268ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // and an empty entry, signifying that we also want to do a 1269ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // broadcast probe request for all non-hidden APs as well. 1270ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return ssids.size() == 2 && 1271ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart string(ssids[0].begin(), ssids[0].end()) == ssid && 1272ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart ssids[1].empty(); 1273ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1274ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1275ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartTEST_F(WiFiMainTest, ScanHidden) { 1276ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 1277ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 1278ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart .Times(AnyNumber()) 1279ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart .WillRepeatedly(Throw( 1280ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart DBus::Error( 1281ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart "fi.w1.wpa_supplicant1.InterfaceUnknown", 1282ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 1283a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 1284a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Create a hidden, favorite service. 1285a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1286a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 1287a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid0", flimflam::kModeManaged, 1288a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, true, &e); 1289a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 1290a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(service->hidden_ssid()); 129100917ceafbc28599391bfcdd5837faf6d63fec32mukesh agrawal service->MakeFavorite(); 1292a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 1293a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 1294a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Create a hidden, non-favorite service. 1295a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1296a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 1297a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid1", flimflam::kModeManaged, 1298a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, true, &e); 1299a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 1300a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(service->hidden_ssid()); 1301a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 1302a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 1303a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Create a non-hidden, favorite service. 1304a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1305a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 1306a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid2", flimflam::kModeManaged, 1307a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, false, &e); 1308a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 1309a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(service->hidden_ssid()); 131000917ceafbc28599391bfcdd5837faf6d63fec32mukesh agrawal service->MakeFavorite(); 1311a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 1312a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*supplicant_interface_proxy_, Scan(HasHiddenSSID("ssid0"))); 1313ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart StartWiFi(); 1314ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart dispatcher_.DispatchPendingEvents(); 1315ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1316ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 13177ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, InitialSupplicantState) { 13187ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(WiFi::kInterfaceStateUnknown, GetSupplicantState()); 13197ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13207ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13217ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeNoService) { 13227ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // State change should succeed even if there is no pending Service. 13237ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateScanning); 13247ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateScanning, GetSupplicantState()); 13257ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13267ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13277ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeWithService) { 13287ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Forward transition should trigger a Service state change. 13297ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 13307ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 13317ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(); 13327ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 13337ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 13347ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAssociated); 13357ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 13367ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 13377ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 1338d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 13397ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13407ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13417ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeBackwardsWithService) { 13427ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Some backwards transitions should not trigger a Service state change. 13437ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Supplicant state should still be updated, however. 1344d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1345d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 13467ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 13477ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 13487ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(); 1349d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(Service::kStateConfiguring)); 13507ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 13517ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 13527ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAuthenticating); 13537ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateAuthenticating, 13547ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal GetSupplicantState()); 13557ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 13567ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 13577ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 1358d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 13597ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13607ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 1361a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithNoGroups) { 1362a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1363a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetGroupsWithKey(flimflam::kWifiHiddenSsid)) 1364a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(set<string>())); 1365a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1366a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1367a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1368a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithMissingHidden) { 1369a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1370a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1371a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1372a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Missing "Hidden" property. 1373a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetBool(StrEq(id), flimflam::kWifiHiddenSsid, _)) 1374a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(false)); 1375a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1376a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1377a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1378a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithFalseHidden) { 1379a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1380a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1381a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1382a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // "Hidden" property set to "false". 1383a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetBool(StrEq(id), flimflam::kWifiHiddenSsid, _)) 1384a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(DoAll(SetArgumentPointee<2>(true), Return(false))); 1385a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1386a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1387a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1388a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithMissingSSID) { 1389a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1390a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1391a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1392a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Missing "SSID" property. 1393a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetString(StrEq(id), flimflam::kSSIDProperty, _)) 1394a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(false)); 1395a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1396a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1397a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1398a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1399a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithFoundService) { 1400a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1401a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1402a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1403a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1404a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", NULL, &e); 1405a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart ASSERT_TRUE(e.IsSuccess()); 1406a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1407a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1408a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1409a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesSuccess) { 1410d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1411a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1412a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string ssid("an_ssid"); 1413a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1414a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, ssid, &id); 1415a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(LoadHiddenServices(&storage)); 1416a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 1417a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(FindService(ssid_bytes, flimflam::kModeManaged, 1418a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityNone).get()); 1419a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1420a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 14211590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToDisconnected) { 1422d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1423d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1424d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 1425d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 14261590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 14271590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 14281590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14291590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handle used in this test ("an_ap") is not 14301590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // intended to reflect the format used by supplicant. It's just 14311590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // convenient for testing. 14321590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14331590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 1434e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 14351590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 14361590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service); 14371590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service, GetPendingService().get()); 14381590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14391590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("an_ap"); 14401590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 14411590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 14421590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service, GetCurrentService().get()); 14431590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 14441590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14451590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 14468a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(Service::kStateFailure, service->state()); 14471590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetCurrentService().get()); 14481590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 14491590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 14501590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14511590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToConnectedNewService) { 1452d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1453d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1454d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 1455d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 14561590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap1 = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 14571590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap2 = MakeEndpoint("another_ssid", "01:02:03:04:05:06"); 14581590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service1 = CreateServiceForEndpoint(*ap1); 14591590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service2 = CreateServiceForEndpoint(*ap2); 14601590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14611590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handles used in this test ("ap1", "ap2") are 14621590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // not intended to reflect the format used by supplicant. They're 14631590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // just convenient for testing. 14641590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14651590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 1466e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap1", ap1->ssid_string(), ap1->bssid_string(), 0, 0, 14671590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 1468e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap2", ap2->ssid_string(), ap2->bssid_string(), 0, 0, 14691590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 14701590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service1); 14711590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("ap1"); 14721590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 14731590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service1.get(), GetCurrentService().get()); 14741590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1475c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Note that we deliberately omit intermediate supplicant states 1476c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // (e.g. kInterfaceStateAssociating), on the theory that they are 1477c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // unreliable. Specifically, they may be quashed if the association 1478c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // completes before supplicant flushes its changed properties. 14791590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("ap2"); 14801590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 14811590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service2.get(), GetCurrentService().get()); 14821590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateIdle, service1->state()); 14831590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service2->state()); 14841590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 14851590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14861590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeDisconnectedToConnected) { 1487d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1488d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1489d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1490d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 14911590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 14921590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 14931590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14941590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handle used in this test ("an_ap") is not 14951590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // intended to reflect the format used by supplicant. It's just 14961590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // convenient for testing. 14971590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14981590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 1499e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 15001590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 15011590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service); 15021590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("an_ap"); 15031590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 15041590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service.get(), GetCurrentService().get()); 15051590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 15061590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 15071590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1508e41a72d0737488d561a4158019409d5785dad61bThieu LeTEST_F(WiFiMainTest, CurrentBSSChangedUpdateServiceEndpoint) { 1509b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1510b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1511b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1512b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1513e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency1 = 2412; 1514e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency2 = 2442; 1515e41a72d0737488d561a4158019409d5785dad61bThieu Le StartWiFi(); 1516e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid1", "00:00:00:00:00:01", 1, frequency1, 1517e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 1518e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss2", "ssid1", "00:00:00:00:00:02", 1, frequency2, 1519e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 1520e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(1, GetServices().size()); 1521e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFiService *service(GetServices()[0].get()); 1522e41a72d0737488d561a4158019409d5785dad61bThieu Le InitiateConnect(service); 1523e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportCurrentBSSChanged("bss1"); 1524e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency1, service->frequency_); 1525e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportCurrentBSSChanged("bss2"); 1526e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency2, service->frequency_); 1527e41a72d0737488d561a4158019409d5785dad61bThieu Le} 1528e41a72d0737488d561a4158019409d5785dad61bThieu Le 15294eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawalTEST_F(WiFiMainTest, ConfiguredServiceRegistration) { 15304eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal Error e; 15314eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 15324eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal .Times(0); 15334eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal EXPECT_CALL(*manager(), HasService(_)) 15344eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal .WillOnce(Return(false)); 15354eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal GetOpenService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, &e); 15364eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)); 1537e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap0", "an_ssid", "00:00:00:00:00:00", 0, 0, 15384eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal kNetworkModeInfrastructure); 15394eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal} 15404eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal 15418a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, NewConnectPreemptsPending) { 1542d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1543d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 15448a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiEndpointRefPtr ap1 = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 15458a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiEndpointRefPtr ap2 = MakeEndpoint("another_ssid", "01:02:03:04:05:06"); 15468a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service1 = CreateServiceForEndpoint(*ap1); 15478a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service2 = CreateServiceForEndpoint(*ap2); 15488a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15498a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 1550e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap1", ap1->ssid_string(), ap1->bssid_string(), 0, 0, 15518a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal kNetworkModeInfrastructure); 1552e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap2", ap2->ssid_string(), ap2->bssid_string(), 0, 0, 15538a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal kNetworkModeInfrastructure); 15548a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal InitiateConnect(service1); 15558a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(service1.get(), GetPendingService().get()); 15568a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15578a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 15588a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(_)); 15598a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal InitiateConnect(service2); 15608a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(service2.get(), GetPendingService().get()); 15618a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 15628a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15638a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, IsIdle) { 15648a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 15658a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(wifi()->IsIdle()); 15668a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15678a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 15688a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 15698a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal Error error; 15708a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal service->AddEndpoint(ap); 15718a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal service->AutoConnect(); 15728a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_FALSE(wifi()->IsIdle()); 15738a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 15748a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15754d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawalMATCHER(WiFiAddedArgs, "") { 15764d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal return ContainsKey(arg, wpa_supplicant::kNetworkPropertyScanSSID) && 15774d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ContainsKey(arg, wpa_supplicant::kNetworkPropertyBgscan); 15784d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 15794d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 15804d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawalTEST_F(WiFiMainTest, AddNetworkArgs) { 1581d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 15824d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 15834d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal *supplicant_interface_proxy_; 15844d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 15854d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal StartWiFi(); 1586e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 15874d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal WiFiService *service(GetServices().begin()->get()); 15884d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(WiFiAddedArgs())); 15894d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal InitiateConnect(service); 15904d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 15914d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1592c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, StateAndIPIgnoreLinkEvent) { 1593c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1594c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(); 1595c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal InitiateConnect(service); 1596c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*service.get(), SetState(_)).Times(0); 1597c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 1598c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportLinkUp(); 1599c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1600c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Verify expectations now, because WiFi may cause |service| state 1601c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // changes during TearDown(). 1602c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal Mock::VerifyAndClearExpectations(service); 1603d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 1604c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1605c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1606c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, SupplicantCompleted) { 1607d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1608d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1609d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1610c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1611c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1612c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1613c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1614e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1615c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal kNetworkModeInfrastructure); 1616c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal InitiateConnect(service); 1617c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1618c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()); 1619c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportCurrentBSSChanged("ap"); 1620c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1621c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 1622c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1623c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1624c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, SupplicantCompletedAlreadyConnected) { 1625d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()); 1626d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1627d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*device_info(), FlushAddresses(_)).Times(AnyNumber()); 1628d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), device_info()).Times(AnyNumber()); 1629d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1630d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1631ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*manager(), IsPortalDetectionEnabled(_)).Times(AnyNumber()); 1632c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1633c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1634c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1635c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1636e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1637c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal kNetworkModeInfrastructure); 1638c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal InitiateConnect(service); 1639c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportCurrentBSSChanged("ap"); 1640c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1641c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportIPConfigComplete(); 1642c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal Mock::VerifyAndClearExpectations(service); 1643c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1644c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 1645c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1646c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1647c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 164866c8600f8410ed205701921d58d9e2c00000047cPaul StewartTEST_F(WiFiMainTest, ClearCachedCredentials) { 164966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart MockSupplicantInterfaceProxy &supplicant_interface_proxy = 165066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart *supplicant_interface_proxy_; 165166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 165266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart StartWiFi(); 165366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 165466c8600f8410ed205701921d58d9e2c00000047cPaul Stewart // Ensure call to the proxy is deferred. 165566c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 165666c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(0); 165766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart ClearCachedCredentials(); 165866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 165966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart Mock::VerifyAndClearExpectations(&supplicant_interface_proxy); 166066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 166166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 166266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(1); 166366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart dispatcher_.DispatchPendingEvents(); 166466c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 166566c8600f8410ed205701921d58d9e2c00000047cPaul Stewart Mock::VerifyAndClearExpectations(&supplicant_interface_proxy); 166666c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 166766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 166866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(0); 166966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart ClearCachedCredentials(); 167066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart ClearCachedCredentials(); 167166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 167266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart Mock::VerifyAndClearExpectations(&supplicant_interface_proxy); 167366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 167466c8600f8410ed205701921d58d9e2c00000047cPaul Stewart // Ensure multiple calls to ClearCachedCredentials() results in only 167566c8600f8410ed205701921d58d9e2c00000047cPaul Stewart // one call to the proxy. 167666c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 167766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(1); 167866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart dispatcher_.DispatchPendingEvents(); 167966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart} 168066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 1681b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSAddedCreatesBSSProxy) { 1682b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1683b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): Consider using a factory for WiFiEndpoints, so that 1684b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // we can test the interaction between WiFi and WiFiEndpoint. (Right 1685b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // now, we're testing across multiple layers.) 1686b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 1687b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy_factory(), CreateSupplicantBSSProxy(_, _, _)); 1688b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 1689b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1690b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1691b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1692b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSRemovedDestroysBSSProxy) { 1693b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): As for BSSAddedCreatesBSSProxy, consider using a 1694b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // factory for WiFiEndpoints. 1695b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1696b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1697b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Get the pointer before we transfer ownership. 1698b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MockSupplicantBSSProxy *proxy = supplicant_bss_proxy_.get(); 1699b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy, Die()); 1700b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 1701b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1702b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal RemoveBSS("bss0"); 1703b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Check this now, to make sure RemoveBSS killed the proxy (rather 1704b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // than TearDown). 1705b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Mock::VerifyAndClearExpectations(proxy); 1706b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1707b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 17085c05b2920be742d518829972127172481722058dmukesh agrawalTEST_F(WiFiMainTest, FlushBSSOnResume) { 17095c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval resume_time = {1, 0}; 17105c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval scan_done_time = {6, 0}; 17115c05b2920be742d518829972127172481722058dmukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 17125c05b2920be742d518829972127172481722058dmukesh agrawal *supplicant_interface_proxy_; 17135c05b2920be742d518829972127172481722058dmukesh agrawal 17145c05b2920be742d518829972127172481722058dmukesh agrawal StartWiFi(); 17155c05b2920be742d518829972127172481722058dmukesh agrawal 17165c05b2920be742d518829972127172481722058dmukesh agrawal EXPECT_CALL(time_, GetTimeMonotonic(_)) 17175c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(resume_time), Return(0))) 17185c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(scan_done_time), Return(0))); 17195c05b2920be742d518829972127172481722058dmukesh agrawal EXPECT_CALL(supplicant_interface_proxy, 17205c05b2920be742d518829972127172481722058dmukesh agrawal FlushBSS(WiFi::kMaxBSSResumeAgeSeconds + 5)); 17215c05b2920be742d518829972127172481722058dmukesh agrawal power_state_callback()->Run(PowerManagerProxyDelegate::kOn); 17225c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 17235c05b2920be742d518829972127172481722058dmukesh agrawal} 17245c05b2920be742d518829972127172481722058dmukesh agrawal 1725853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} // namespace shill 1726