wifi_unittest.cc revision b66c646facf31a901629c1bc7da15b9c7d7d88c0
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" 4010ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart#include "shill/mock_profile.h" 415c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include "shill/mock_rtnl_handler.h" 42a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include "shill/mock_store.h" 43b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal#include "shill/mock_supplicant_bss_proxy.h" 443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_interface_proxy.h" 453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_process_proxy.h" 465c05b2920be742d518829972127172481722058dmukesh agrawal#include "shill/mock_time.h" 477ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal#include "shill/mock_wifi_service.h" 48dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include "shill/nice_mock_control.h" 49853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/property_store_unittest.h" 503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/proxy_factory.h" 513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/wifi_endpoint.h" 523239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal#include "shill/wifi_service.h" 53ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart#include "shill/wpa_supplicant.h" 54853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 55ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 56853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::map; 57a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing std::set; 58853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::string; 59853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::vector; 60853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::_; 613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::AnyNumber; 623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::DefaultValue; 63a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::DoAll; 643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::InSequence; 65b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalusing ::testing::Invoke; 667ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalusing ::testing::Mock; 67dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawalusing ::testing::NiceMock; 68853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Return; 69ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morainusing ::testing::SaveArg; 70a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::SetArgumentPointee; 71a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrEq; 72a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrictMock; 73853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Test; 743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::Throw; 758ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalusing ::testing::Values; 76853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 77853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masonenamespace shill { 78853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalclass WiFiPropertyTest : public PropertyStoreTest { 80853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone public: 813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiPropertyTest() 823426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le : device_(new WiFi(control_interface(), 833426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le NULL, NULL, NULL, "wifi", "", 0)) { 84853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone } 853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual ~WiFiPropertyTest() {} 86853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 87853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone protected: 888abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFiRefPtr device_; 89853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone}; 90853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Contains) { 92de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_TRUE(device_->store().Contains(flimflam::kNameProperty)); 93de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_FALSE(device_->store().Contains("")); 94853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 95853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 966bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawalTEST_F(WiFiPropertyTest, SetProperty) { 97a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 98a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 996bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 100de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal device_->mutable_store(), 101a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanSignalThresholdProperty, 102a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kInt32V, 103a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 104a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 105a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 106a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1076bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty(device_->mutable_store(), 1086bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanIntervalProperty, 1096bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kUint16V, 1106bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 111a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 112853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone // Ensure that an attempt to write a R/O property returns InvalidArgs error. 113a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 114a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1156bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty(device_->mutable_store(), 1166bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanningProperty, 1176bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kBoolV, 1186bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 1199d779936d8f8c2d74b30883e2a2622c4207fe797Chris Masone EXPECT_EQ(invalid_args(), error.name()); 120a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 121853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1224d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1234d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1246bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1254d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1264d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1274d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant( 1284d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal wpa_supplicant::kNetworkBgscanMethodSimple), 1294d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1304d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1314d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1324d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1334d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1346bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty( 1354d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1364d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1374d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant("not a real scan method"), 1384d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1394d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1404d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 1414d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1428abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawalTEST_F(WiFiPropertyTest, ClearDerivedProperty) { 1438abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_NE(wpa_supplicant::kNetworkBgscanMethodLearn, 1448abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFi::kDefaultBgscanMethod); 1458abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(WiFi::kDefaultBgscanMethod, device_->bgscan_method_); 1468abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1478abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal ::DBus::Error error; 1486bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1498abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), 1508abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal flimflam::kBgscanMethodProperty, 1518abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal DBusAdaptor::StringToVariant( 1528abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal wpa_supplicant::kNetworkBgscanMethodLearn), 1538abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal &error)); 1548abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(wpa_supplicant::kNetworkBgscanMethodLearn, device_->bgscan_method_); 1558abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1568abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_TRUE(DBusAdaptor::ClearProperty( 1578abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), flimflam::kBgscanMethodProperty, &error)); 1588abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(WiFi::kDefaultBgscanMethod, device_->bgscan_method_); 1598abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal} 1608abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1618ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiMainTest : public ::testing::TestWithParam<string> { 1623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 1633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiMainTest() 1643426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le : manager_(&control_interface_, NULL, &metrics_, &glib_), 165c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal device_info_(&control_interface_, &dispatcher_, &metrics_, &manager_), 166626719f89881a949d8b5a8fa808beb924496489fChris Masone wifi_(new WiFi(&control_interface_, 1673239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal &dispatcher_, 1683426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 169626719f89881a949d8b5a8fa808beb924496489fChris Masone &manager_, 170626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceName, 171626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceAddress, 172626719f89881a949d8b5a8fa808beb924496489fChris Masone 0)), 173dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_process_proxy_(new NiceMock<MockSupplicantProcessProxy>()), 174dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_interface_proxy_( 175dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal new NiceMock<MockSupplicantInterfaceProxy>(wifi_)), 176b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal supplicant_bss_proxy_( 177b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal new NiceMock<MockSupplicantBSSProxy>()), 178f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal dhcp_config_(new MockDHCPConfig(&control_interface_, 179f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal &dispatcher_, 180f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal &dhcp_provider_, 181f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal kDeviceName, 182d32f484b91ab583ccc9a14b2a6b5182fda6958f0Paul Stewart kHostName, 183f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal &glib_)), 184ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain proxy_factory_(this), 1853e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_manager_(new MockPowerManager(&proxy_factory_)) { 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()); 2199a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->SelectService(NULL); 220b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal if (supplicant_bss_proxy_.get()) { 221b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()); 222b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 223ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = NULL; 2243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // must Stop WiFi instance, to clear its list of services. 2253195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // otherwise, the WiFi instance will not be deleted. (because 2263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // services reference a WiFi instance, creating a cycle.) 2279a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->Stop(NULL, ResultCallback()); 2285c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(NULL); 229f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 230f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 2313195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 2327ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal typedef scoped_refptr<MockWiFiService> MockWiFiServiceRefPtr; 2337ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 2343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal class TestProxyFactory : public ProxyFactory { 2353195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 236b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal explicit TestProxyFactory(WiFiMainTest *test); 2373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantProcessProxyInterface *CreateSupplicantProcessProxy( 2391830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_path*/, const char */*dbus_addr*/) { 240dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_process_proxy_.release(); 2413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantInterfaceProxyInterface *CreateSupplicantInterfaceProxy( 2441830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const WiFiRefPtr &/*wifi*/, 2451830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const DBus::Path &/*object_path*/, 2461830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_addr*/) { 247dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_interface_proxy_.release(); 2483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 250b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MOCK_METHOD3(CreateSupplicantBSSProxy, 251b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *( 252b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint *wifi_endpoint, 253b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &object_path, 254b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char *dbus_addr)); 255b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 256ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain virtual PowerManagerProxyInterface *CreatePowerManagerProxy( 257ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain PowerManagerProxyDelegate */*delegate*/) { 258ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain return new MockPowerManagerProxy(); 259ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain } 260ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 2613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 262b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *CreateSupplicantBSSProxyInternal( 263b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint */*wifi_endpoint*/, 264b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &/*object_path*/, 265b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char */*dbus_addr*/) { 266b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return test_->supplicant_bss_proxy_.release(); 267b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 268b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 269dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal WiFiMainTest *test_; 2703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal }; 2713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 272b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void CancelScanTimer() { 273b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->scan_timer_callback_.Cancel(); 274b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 2751590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr CreateServiceForEndpoint(const WiFiEndpoint &endpoint) { 2761590839e44a0e922d4763003a35dbd493509b705mukesh agrawal bool hidden_ssid = false; 2771590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->CreateServiceForEndpoint(endpoint, hidden_ssid); 2781590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 279b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void FireScanTimer() { 280b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->ScanTimerHandler(); 281b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 2821590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetCurrentService() { 2831590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->current_service_; 2841590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 2853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFi::EndpointMap &GetEndpointMap() { 286165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->endpoint_by_rpcid_; 2873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2881590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetPendingService() { 2891590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->pending_service_; 2901590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 291b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal const base::CancelableClosure &GetScanTimer() { 292b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal return wifi_->scan_timer_callback_; 293b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 294165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal const vector<WiFiServiceRefPtr> &GetServices() { 295165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->services_; 2963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // note: the tests need the proxies referenced by WiFi (not the 2983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // proxies instantiated by WiFiMainTest), to ensure that WiFi 2993195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // sets up its proxies correctly. 3003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantProcessProxyInterface *GetSupplicantProcessProxy() { 3013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_process_proxy_.get(); 3023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3038a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal MockSupplicantInterfaceProxy *GetSupplicantInterfaceProxy() { 3048a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal return dynamic_cast<MockSupplicantInterfaceProxy *>( 3058a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal wifi_->supplicant_interface_proxy_.get()); 3063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3077ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal const string &GetSupplicantState() { 3087ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return wifi_->supplicant_state_; 3097ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 3107ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void InitiateConnect(WiFiServiceRefPtr service) { 3116e277774580c52073c919c4cbebedae27861d845mukesh agrawal map<string, ::DBus::Variant> params; 3126e277774580c52073c919c4cbebedae27861d845mukesh agrawal wifi_->ConnectTo(service, params); 3133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3140ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal void InitiateDisconnect(WiFiServiceRefPtr service) { 3150ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal wifi_->DisconnectFrom(service); 3160ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal } 3171590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr MakeEndpoint(const string &ssid, const string &bssid) { 318e1d90e9f688406d47a1453eeac51b7faaebf9908mukesh agrawal return WiFiEndpoint::MakeOpenEndpoint( 319e1d90e9f688406d47a1453eeac51b7faaebf9908mukesh agrawal &proxy_factory_, NULL, ssid, bssid, 0, 0); 3201590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 3217ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal MockWiFiServiceRefPtr MakeMockService() { 3227ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal vector<uint8_t> ssid(1, 'a'); 3237ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return new MockWiFiService( 3247ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &control_interface_, 3257ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &dispatcher_, 3263426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 3277ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &manager_, 3287ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_, 3297ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ssid, 3307ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal flimflam::kModeManaged, 3317ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal flimflam::kSecurityNone, 3327ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal false); 3337ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 334261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal void RemoveBSS(const ::DBus::Path &bss_path); 3353195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportBSS(const ::DBus::Path &bss_path, 3363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 3373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 3383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 339e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 3403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode); 34166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart void ClearCachedCredentials() { 34266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart wifi_->ClearCachedCredentials(); 34366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart } 344c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal void ReportIPConfigComplete() { 34579d74c9bdb654be48765c1e7aa416126ffd2ae5eDarin Petkov wifi_->OnIPConfigUpdated(dhcp_config_, true); 346c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal } 347f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal void ReportLinkUp() { 348f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi_->LinkEvent(IFF_LOWER_UP, IFF_LOWER_UP); 349f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 3503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportScanDone() { 351dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal wifi_->ScanDoneTask(); 3523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3531590839e44a0e922d4763003a35dbd493509b705mukesh agrawal void ReportCurrentBSSChanged(const string &new_bss) { 3541590839e44a0e922d4763003a35dbd493509b705mukesh agrawal wifi_->CurrentBSSChanged(new_bss); 3551590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 3567ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void ReportStateChanged(const string &new_state) { 3577ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_->StateChanged(new_state); 3587ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 359b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void SetScanInterval(uint16_t interval_seconds) { 360b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetScanInterval(interval_seconds, NULL); 361b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 3623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StartWiFi() { 363ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*power_manager_, AddStateChangeCallback(wifi_->UniqueName(), _)) 364ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain .WillOnce(SaveArg<1>(&power_state_callback_)); 365b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetEnabled(true); // Start(NULL, ResultCallback()); 3663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StopWiFi() { 368910011207d66e14bf753d2783e131e7558126430Gary Morain EXPECT_CALL(*power_manager_, 369910011207d66e14bf753d2783e131e7558126430Gary Morain RemoveStateChangeCallback(wifi_->UniqueName())); 370b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetEnabled(false); // Stop(NULL, ResultCallback()); 3713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 372ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain void GetOpenService(const char *service_type, 3737a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *ssid, 3747a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *mode, 375ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 376ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart GetServiceInner(service_type, ssid, mode, NULL, NULL, false, result); 3777a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal } 3787a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal void GetService(const char *service_type, 3797a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *ssid, 3807a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *mode, 3817a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *security, 3827a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal const char *passphrase, 383ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 384ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart GetServiceInner(service_type, ssid, mode, security, passphrase, false, 385ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart result); 386ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 387ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart WiFiServiceRefPtr GetServiceInner(const char *service_type, 388ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *ssid, 389ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *mode, 390ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *security, 391ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *passphrase, 392a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart bool allow_hidden, 393ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 3947a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal map<string, ::DBus::Variant> args; 3957a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // in general, we want to avoid D-Bus specific code for any RPCs 3967a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // that come in via adaptors. we make an exception here, because 3977a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // calls to GetWifiService are rerouted from the Manager object to 3987a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // the Wifi class. 3997a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (service_type != NULL) 4007a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kTypeProperty].writer().append_string(service_type); 4017a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (ssid != NULL) 4027a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kSSIDProperty].writer().append_string(ssid); 4037a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (mode != NULL) 4047a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kModeProperty].writer().append_string(mode); 4057a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (security != NULL) 4067a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kSecurityProperty].writer().append_string(security); 4077a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (passphrase != NULL) 4087a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kPassphraseProperty].writer().append_string(passphrase); 409a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart if (!allow_hidden) 410a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart args[flimflam::kWifiHiddenSsid].writer().append_bool(false); 4117a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 412ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error e; 413ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart KeyValueStore args_kv; 4147a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal DBusAdaptor::ArgsToKeyValueStore(args, &args_kv, &e); 415ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return wifi_->GetService(args_kv, result); 4167a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal } 417cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart 418cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart WiFiServiceRefPtr GetServiceWithKeyValues(const KeyValueStore &args, 419cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart Error *result) { 420cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart return wifi_->GetService(args, result); 421cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart } 422cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart 423a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr FindService(const vector<uint8_t> &ssid, 424a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string &mode, 425a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string &security) { 426a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart return wifi_->FindService(ssid, mode, security); 427a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 428a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart bool LoadHiddenServices(StoreInterface *storage) { 429a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart return wifi_->LoadHiddenServices(storage); 430a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 431a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart void SetupHiddenStorage(MockStore *storage, const string &ssid, string *id) { 432a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string hex_ssid = base::HexEncode(ssid.data(), ssid.size()); 433a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart *id = StringToLowerASCII(base::StringPrintf("%s_%s_%s_%s_%s", 434a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kTypeWifi, 435a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart kDeviceAddress, 436a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart hex_ssid.c_str(), 437a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, 438a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityNone)); 439a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const char *groups[] = { id->c_str() }; 440a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetGroupsWithKey(flimflam::kWifiHiddenSsid)) 441a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(Return(set<string>(groups, groups + 1))); 442a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetBool(StrEq(*id), flimflam::kWifiHiddenSsid, _)) 443a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(DoAll(SetArgumentPointee<2>(true), Return(true))); 444a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetString(StrEq(*id), flimflam::kSSIDProperty, _)) 445a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(DoAll(SetArgumentPointee<2>(hex_ssid), Return(true))); 446a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 44710ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 44810ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart NiceMockControl *control_interface() { 44910ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart return &control_interface_; 45010ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart } 45110ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 4523239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal MockManager *manager() { 4533239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return &manager_; 4543239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 455d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 456d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDeviceInfo *device_info() { 457d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &device_info_; 458d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 459d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 460d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDHCPProvider *dhcp_provider() { 461d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &dhcp_provider_; 462d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 463d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 4643e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood const PowerManager::PowerStateCallback &power_state_callback() const { 465ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain return power_state_callback_; 466ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain } 467ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 4683239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal const WiFiConstRefPtr wifi() const { 4693239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return wifi_; 4703239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 4713239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal 472b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal TestProxyFactory *proxy_factory() { 473b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return &proxy_factory_; 474b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 475b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 4763239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal EventDispatcher dispatcher_; 4775c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal NiceMock<MockRTNLHandler> rtnl_handler_; 4785c05b2920be742d518829972127172481722058dmukesh agrawal MockTime time_; 4793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 481dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal NiceMockControl control_interface_; 4823426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le MockMetrics metrics_; 483f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockGLib glib_; 4842ae797d040b7261a5619c750e07037566bcb542bChris Masone MockManager manager_; 485c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal MockDeviceInfo device_info_; 4863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiRefPtr wifi_; 4873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 4883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // protected fields interspersed between private fields, due to 4893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // initialization order 4903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 4913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kDeviceName[]; 492626719f89881a949d8b5a8fa808beb924496489fChris Masone static const char kDeviceAddress[]; 493d32f484b91ab583ccc9a14b2a6b5182fda6958f0Paul Stewart static const char kHostName[]; 4943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeAdHoc[]; 4953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeInfrastructure[]; 4963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 497dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantProcessProxy> supplicant_process_proxy_; 498dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantInterfaceProxy> supplicant_interface_proxy_; 499b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal scoped_ptr<MockSupplicantBSSProxy> supplicant_bss_proxy_; 500f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockDHCPProvider dhcp_provider_; 501f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal scoped_refptr<MockDHCPConfig> dhcp_config_; 5023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 5043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal TestProxyFactory proxy_factory_; 505ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain MockPowerManager *power_manager_; 5063e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood PowerManager::PowerStateCallback power_state_callback_; 5073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal}; 5083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kDeviceName[] = "wlan0"; 510a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartconst char WiFiMainTest::kDeviceAddress[] = "000102030405"; 511d32f484b91ab583ccc9a14b2a6b5182fda6958f0Paul Stewartconst char WiFiMainTest::kHostName[] = "hostname"; 5123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kNetworkModeAdHoc[] = "ad-hoc"; 5133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalconst char WiFiMainTest::kNetworkModeInfrastructure[] = "infrastructure"; 5143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 515261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalvoid WiFiMainTest::RemoveBSS(const ::DBus::Path &bss_path) { 516b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSRemovedTask(bss_path); 517261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 518261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 5193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalvoid WiFiMainTest::ReportBSS(const ::DBus::Path &bss_path, 5203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 5213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 5223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 523e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 5243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode) { 5253195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal map<string, ::DBus::Variant> bss_properties; 5263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5273195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 5283195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["SSID"].writer()); 5293195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << vector<uint8_t>(ssid.begin(), ssid.end()); 5303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5313195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 5323195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal string bssid_nosep; 5333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal vector<uint8_t> bssid_bytes; 5343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal RemoveChars(bssid, ":", &bssid_nosep); 5353195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal base::HexStringToBytes(bssid_nosep, &bssid_bytes); 5363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["BSSID"].writer()); 5383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << bssid_bytes; 5393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 540e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertySignal].writer(). 541e41a72d0737488d561a4158019409d5785dad61bThieu Le append_int16(signal_strength); 542e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertyFrequency].writer(). 543e41a72d0737488d561a4158019409d5785dad61bThieu Le append_uint16(frequency); 544e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertyMode].writer().append_string(mode); 545b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSAddedTask(bss_path, bss_properties); 5463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 548b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalWiFiMainTest::TestProxyFactory::TestProxyFactory(WiFiMainTest *test) 549b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal : test_(test) { 550b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*this, CreateSupplicantBSSProxy(_, _, _)).Times(AnyNumber()); 551b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ON_CALL(*this, CreateSupplicantBSSProxy(_, _, _)) 552b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal .WillByDefault( 553b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Invoke(this, (&TestProxyFactory::CreateSupplicantBSSProxyInternal))); 554b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 555b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 5563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ProxiesSetUpDuringStart) { 5573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 5583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantInterfaceProxy() == NULL); 5593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 5623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantInterfaceProxy() == NULL); 5633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, CleanStart) { 5663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 5673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 5683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 5693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 5703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 5713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceUnknown", 5723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 5733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 574b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 5753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5763239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 577b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 5783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Restart) { 5813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)) 5823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 5833195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 5843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 5853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceExists", 5863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test thew fi.w1.wpa_supplicant1.InterfaceExists"))); 5873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)); 5883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 5893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5903239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 5913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, StartClearsState) { 5943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, RemoveAllNetworks()); 5953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, FlushBSS(_)); 5963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 599ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary MorainTEST_F(WiFiMainTest, PowerChangeToResumeStartsScanWhenIdle) { 600ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 601ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 602ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 603ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Mock::VerifyAndClearExpectations(&supplicant_interface_proxy_); 6045c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 6053e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood ASSERT_FALSE(power_state_callback().is_null()); 606ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 607ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 6083e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kOn); 609ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 610ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 611ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 612ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary MorainTEST_F(WiFiMainTest, PowerChangeToSuspendDoesNotStartScan) { 613ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 614ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 615ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 616ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Mock::VerifyAndClearExpectations(&supplicant_interface_proxy_); 6173e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood ASSERT_FALSE(power_state_callback().is_null()); 618ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 619ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 6203e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kStandby); 621ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 6223e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kMem); 623ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 6243e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kDisk); 625ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 626ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 627ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 628ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary MorainTEST_F(WiFiMainTest, PowerChangeDoesNotStartScanWhenNotIdle) { 629ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 630ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 631ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 632ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 633ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 634ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Error error; 635ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain service->AddEndpoint(ap); 636ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain service->AutoConnect(); 637ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_FALSE(wifi()->IsIdle()); 638ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 639ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Mock::VerifyAndClearExpectations(&supplicant_interface_proxy_); 6403e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood ASSERT_FALSE(power_state_callback().is_null()); 641ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_FALSE(wifi()->IsIdle()); 642ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 6433e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kOn); 644ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 645ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 646ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 6473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResults) { 648d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 6493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 650e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 6513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 652e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 6533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 654e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 6553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 656e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss3", "ssid3", "00:00:00:00:00:03", 3, 0, kNetworkModeInfrastructure); 657e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency = 2412; 658e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss4", "ssid4", "00:00:00:00:00:04", 4, frequency, 659e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeAdHoc); 660e41a72d0737488d561a4158019409d5785dad61bThieu Le 661e41a72d0737488d561a4158019409d5785dad61bThieu Le const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 662e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(5, endpoints_by_rpcid.size()); 663e41a72d0737488d561a4158019409d5785dad61bThieu Le 664e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFi::EndpointMap::const_iterator i; 665e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFiEndpointRefPtr endpoint; 666e41a72d0737488d561a4158019409d5785dad61bThieu Le for (i = endpoints_by_rpcid.begin(); 667e41a72d0737488d561a4158019409d5785dad61bThieu Le i != endpoints_by_rpcid.end(); 668e41a72d0737488d561a4158019409d5785dad61bThieu Le ++i) { 669e41a72d0737488d561a4158019409d5785dad61bThieu Le if (i->second->bssid_string() == "00:00:00:00:00:04") 670e41a72d0737488d561a4158019409d5785dad61bThieu Le break; 671e41a72d0737488d561a4158019409d5785dad61bThieu Le } 672e41a72d0737488d561a4158019409d5785dad61bThieu Le ASSERT_TRUE(i != endpoints_by_rpcid.end()); 673e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(4, i->second->signal_strength()); 674e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency, i->second->frequency()); 675e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ("adhoc", i->second->network_mode()); 6763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 6773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 6783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResultsWithUpdates) { 679d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 680d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 681d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 6823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 683e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 6843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 685e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 6863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 687e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 6883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 689e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 3, 0, kNetworkModeInfrastructure); 690e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 4, 0, kNetworkModeAdHoc); 691165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 692165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 693165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(3, endpoints_by_rpcid.size()); 694165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 695165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFi::EndpointMap::const_iterator i; 696165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFiEndpointRefPtr endpoint; 697165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal for (i = endpoints_by_rpcid.begin(); 698165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal i != endpoints_by_rpcid.end(); 699165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ++i) { 700165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal if (i->second->bssid_string() == "00:00:00:00:00:00") 701165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal break; 702165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal } 703165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ASSERT_TRUE(i != endpoints_by_rpcid.end()); 704165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(4, i->second->signal_strength()); 7053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanCompleted) { 7083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 709261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 710261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(3); 711e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 7123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 713e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 7143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 715e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 7163195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 717165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(3, GetServices().size()); 718b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 719e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with SSIDs that start with NULL should be filtered. 720e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss3", string(1, 0), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 721e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(3, GetEndpointMap().size()); 722b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal EXPECT_EQ(3, GetServices().size()); 723b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 724e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with empty SSIDs should be filtered. 725e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss3", string(), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 726e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(3, GetEndpointMap().size()); 727e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(3, GetServices().size()); 728165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 729165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 730165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingTogether) { 731165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 732261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 733261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal InSequence s; 734261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)); 735d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)); 736261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)); 737e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 738e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 739165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 740165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(1, GetServices().size()); 741165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 742165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 743165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingDifferentSSID) { 744165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 745261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 746261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(2); 747e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid1", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 748e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid2", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 749165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 750165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(2, GetServices().size()); 751165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 752165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 753165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingDifferentMode) { 754165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 755261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 756261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(2); 757e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 758e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid", "00:00:00:00:00:01", 0, 0, 759e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 760165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 761165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(2, GetServices().size()); 7623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 764261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonExistentBSSRemoved) { 765261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal // Removal of non-existent BSS should not cause a crash. 766261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 767261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 768261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(0, GetServices().size()); 769261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 770261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 771e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawalTEST_F(WiFiMainTest, BSSWithEmptySSIDRemoved) { 772e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // Removal of BSS with an empty SSID should not cause a crash. 773e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss", string(), "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 774e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal StartWiFi(); 775e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal RemoveBSS("bss"); 776e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(0, GetServices().size()); 777e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal} 778e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal 779e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawalTEST_F(WiFiMainTest, BSSWithNullSSIDRemoved) { 780e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // Removal of BSS with a NULL SSID should not cause a crash. 781e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss", string(1, 0), "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 782e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal StartWiFi(); 783e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal RemoveBSS("bss"); 784e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(0, GetServices().size()); 785e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal} 786e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal 787261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemoved) { 788d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 789261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 790e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 791261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportScanDone(); 792261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 793261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 794261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 7958a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 796261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 7978a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(GetServices().empty()); 7988a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 7998a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8008a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemovedWhileConnected) { 801d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 8028a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 803e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 8048a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportScanDone(); 8058a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportCurrentBSSChanged("bss0"); 8068a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8078a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 8088a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 8098a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal RemoveBSS("bss0"); 8108a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(GetServices().empty()); 8118a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 8128a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8138a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemovedWhileConnectedToHidden) { 814d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 815d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 8168a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 8178a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8188a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal Error e; 8198a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service = 8208a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal GetServiceInner(flimflam::kTypeWifi, "ssid", flimflam::kModeManaged, 8218a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal NULL, NULL, true, &e); 8228a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(1, GetServices().size()); 8238a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 824e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss", "ssid", "00:00:00:00:00:01", 0, 0, 825e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 8268a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportScanDone(); 8278a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportCurrentBSSChanged("bss"); 828261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 8298a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8308a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 8318a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal RemoveBSS("bss"); 8328a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(1, GetServices().size()); 8338a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal // Verify expectations now, because WiFi may call UpdateService when 8348a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal // WiFi is Stop()-ed (during TearDown()). 8358a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal Mock::VerifyAndClearExpectations(manager()); 836d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), DeregisterService(_)).Times(AnyNumber()); 837261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 838261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 839261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonSolitaryBSSRemoved) { 840d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)); 841d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)); 842d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)); 843261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 844e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 845e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 846261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportScanDone(); 847261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 848261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 849261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 850261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)); 851261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 852261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 853261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 854261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 855261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 8563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Connect) { 857d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 858dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 859dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal *supplicant_interface_proxy_; 860dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal 8613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 862e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 8633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 8643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 8663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal InSequence s; 8673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Path fake_path("/fake/path"); 868165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFiService *service(GetServices().begin()->get()); 8693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 870dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(_)) 8713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillOnce(Return(fake_path)); 872dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, SelectNetwork(fake_path)); 8733239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal InitiateConnect(service); 874f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal EXPECT_EQ(static_cast<Service *>(service), 875f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi()->selected_service_.get()); 8763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 8773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 8783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8790ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingService) { 880d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 8810ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 8820ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 8830ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8840ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 885e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 8860ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 8870ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service); 8880ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8890ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_FALSE(GetPendingService() == NULL); 8900ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()); 8910ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 8920ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8930ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetPendingService() == NULL); 8940ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 8950ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 8960ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingServiceWithCurrent) { 897d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 898d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 899d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 900d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9010ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9020ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9030ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9040ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 905e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 906e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid1", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 9070ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service0(GetServices()[0].get()); 9080ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service1(GetServices()[1].get()); 9090ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9100ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service0); 9110ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 9120ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9130ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service1); 9140ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9150ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 9160ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 9170ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()); 9180ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service1); 9190ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9200ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| will be unchanged until supplicant signals 9210ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // that CurrentBSS has changed. 9220ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 9230ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |pending_service_| is updated immediately. 9240ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetPendingService() == NULL); 9250ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9260ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9270ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentService) { 928d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 929d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 930d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 931d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9320ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9330ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9340ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9350ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 936e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 9370ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 9380ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service); 9390ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 9400ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9410ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9420ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 9430ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()); 9440ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 9450ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9460ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| should not change until supplicant reports 9470ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // a BSS change. 9480ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 9490ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9500ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9510ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceWithPending) { 952d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 953d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 954d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 955d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9560ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9570ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9580ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9590ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 960e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 961e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid1", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 9620ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service0(GetServices()[0].get()); 9630ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service1(GetServices()[1].get()); 9640ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9650ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service0); 9660ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 9670ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9680ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service1); 9690ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9700ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 9710ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 9720ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()) 9730ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .Times(0); 9740ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service0); 9750ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9760ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 9770ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 9780ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9790ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9800ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectInvalidService) { 981d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 9820ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9830ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9840ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9850ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 986e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 9870ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 9880ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()) 9890ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .Times(0); 9900ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 9910ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9920ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9930ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceFailure) { 994d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 995d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 996d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 997d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9980ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9990ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 10000ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10010ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 1002e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 10030ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10040ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 10050ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal DBus::Path fake_path("/fake/path"); 10060ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(_)) 10070ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .WillOnce(Return(fake_path)); 10080ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service); 10090ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 10100ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 10110ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10120ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 10130ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()) 10140ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .WillRepeatedly(Throw( 10150ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal DBus::Error( 10160ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "fi.w1.wpa_supplicant1.NotConnected", 10170ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "test threw fi.w1.wpa_supplicant1.NotConnected"))); 10180ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, RemoveNetwork(fake_path)); 10190ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 10200ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10210ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetCurrentService() == NULL); 10220ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 10230ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10245c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawalTEST_F(WiFiMainTest, Stop) { 1025d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1026c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1027e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1028c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportScanDone(); 10295c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 1030c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 1031c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StopWiFi(); 1032b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 10335c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal} 10345c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 10357a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpen) { 10367a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1037a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, &e); 10387a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 10397a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10407a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10417a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenNoSSID) { 10427a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1043a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, NULL, flimflam::kModeManaged, &e); 10447a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidArguments, e.type()); 10457a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("must specify SSID", e.message()); 10467a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10477a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10487a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenLongSSID) { 10497a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 10507a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal GetOpenService( 1051a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kTypeWifi, "123456789012345678901234567890123", 1052a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, &e); 10537a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidNetworkName, e.type()); 10547a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("SSID is too long", e.message()); 10557a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10567a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10577a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenShortSSID) { 10587a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1059a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "", flimflam::kModeManaged, &e); 10607a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidNetworkName, e.type()); 10617a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("SSID is too short", e.message()); 10627a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10637a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10647a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenBadMode) { 10657a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1066a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", "ad-hoc", &e); 10677a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kNotSupported, e.type()); 10687a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("service mode is unsupported", e.message()); 10697a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10707a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10717a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenNoMode) { 10727a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1073a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", NULL, &e); 10747a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 10757a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10767a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10777a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceRSN) { 10787a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1079a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1080a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn, "secure password", &e); 10817a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 10827a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10837a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10847a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceRSNNoPassword) { 1085b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // When configuring hidden networks, Chrome expects to be able to 1086b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // GetService w/o a password, and supply the password with 1087b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // SetProperty afterwards. 10887a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1089a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1090a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn, NULL, &e); 1091b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal EXPECT_TRUE(e.IsSuccess()); 10927a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10937a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10947a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceBadSecurity) { 10957a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1096a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, "rot-13", 1097a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, &e); 10987a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kNotSupported, e.type()); 10997a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("security mode is unsupported", e.message()); 11007a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11017a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11027a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEPNoPassword) { 1103b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // When configuring hidden networks, Chrome expects to be able to 1104b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // GetService w/o a password, and supply the password with 1105b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // SetProperty afterwards. 11067a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1107a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1108a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, NULL, &e); 1109b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11107a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11117a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11127a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEPEmptyPassword) { 11137a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1114a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1115a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "", &e); 11167a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11177a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11187a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11197a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40ASCII) { 11207a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1121a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1122a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "abcde", &e); 11237a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11247a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11257a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11267a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104ASCII) { 11277a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1128a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1129a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "abcdefghijklm", &e); 11307a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11317a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11327a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11337a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40ASCIIWithKeyIndex) { 11347a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1135a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1136a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:abcdefghijklm", &e); 11377a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11387a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11397a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11407a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40Hex) { 11417a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1142a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1143a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405", &e); 11447a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11457a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11467a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11477a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexBadPassphrase) { 11487a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1149a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1150a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "O102030405", &e); 11517a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11527a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11537a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11547a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexBadPassphrase) { 11557a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1156a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1157a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "1:O102030405", &e); 11587a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11597a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11607a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11617a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexAndBaseBadPassphrase) { 11627a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1163a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1164a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "1:0xO102030405", &e); 11657a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11667a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11677a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11687a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithBaseBadPassphrase) { 11697a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1170a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1171a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0xO102030405", &e); 11727a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11737a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11747a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11757a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104Hex) { 11767a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1177a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1178a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405060708090a0b0c0d", &e); 11797a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11807a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11817a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11827a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexUppercase) { 11837a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1184a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1185a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405060708090A0B0C0D", &e); 11867a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11877a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11887a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11897a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndex) { 11907a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1191a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1192a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:0102030405060708090a0b0c0d", &e); 11937a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11947a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11957a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11967a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndexAndBase) { 11977a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1198a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1199a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:0x0102030405060708090a0b0c0d", &e); 12007a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 12017a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 12027a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 12038ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiGetServiceSuccessTest : public WiFiMainTest {}; 12048ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiGetServiceFailureTest : public WiFiMainTest {}; 12058ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12068ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalTEST_P(WiFiGetServiceSuccessTest, Passphrase) { 12078ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Error e; 1208a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1209a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa, GetParam().c_str(), &e); 12108ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 12118ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal} 12128ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12138ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalTEST_P(WiFiGetServiceFailureTest, Passphrase) { 12148ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Error e; 1215a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1216a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa, GetParam().c_str(), &e); 12178ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 12188ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal} 12198ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12208ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalINSTANTIATE_TEST_CASE_P( 12218ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceSuccessTestInstance, 12228ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceSuccessTest, 12238ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Values( 12248ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMinLen, 'Z'), 12258ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMaxLen, 'Z'), 12268ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal // subtle: invalid length for hex key, but valid as ascii passphrase 12278ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen-1, '1'), 12288ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen, '1'))); 12298ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12308ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalINSTANTIATE_TEST_CASE_P( 12318ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceFailureTestInstance, 12328ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceFailureTest, 12338ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Values( 12348ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMinLen-1, 'Z'), 12358ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMaxLen+1, 'Z'), 12368ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen+1, '1'))); 12378ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12386ab23a9d4526686406d50081853639540b22213aPaul StewartTEST_F(WiFiMainTest, FindServiceWEP) { 12396ab23a9d4526686406d50081853639540b22213aPaul Stewart const string ssid("an_ssid"); 12406ab23a9d4526686406d50081853639540b22213aPaul Stewart { 12416ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 1242a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, ssid.c_str(), flimflam::kModeManaged, 12436ab23a9d4526686406d50081853639540b22213aPaul Stewart flimflam::kSecurityWep, "abcde", &e); 12446ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 12456ab23a9d4526686406d50081853639540b22213aPaul Stewart } 12466ab23a9d4526686406d50081853639540b22213aPaul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 12476ab23a9d4526686406d50081853639540b22213aPaul Stewart 1248a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(FindService(ssid_bytes, flimflam::kModeManaged, 1249a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep).get()); 1250a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(FindService(ssid_bytes, flimflam::kModeManaged, 1251a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa).get()); 12526ab23a9d4526686406d50081853639540b22213aPaul Stewart} 12536ab23a9d4526686406d50081853639540b22213aPaul Stewart 12546ab23a9d4526686406d50081853639540b22213aPaul StewartTEST_F(WiFiMainTest, FindServiceWPA) { 12556ab23a9d4526686406d50081853639540b22213aPaul Stewart const string ssid("an_ssid"); 12566ab23a9d4526686406d50081853639540b22213aPaul Stewart { 12576ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 1258a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, ssid.c_str(), flimflam::kModeManaged, 12596ab23a9d4526686406d50081853639540b22213aPaul Stewart flimflam::kSecurityRsn, "abcdefgh", &e); 12606ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 12616ab23a9d4526686406d50081853639540b22213aPaul Stewart } 12626ab23a9d4526686406d50081853639540b22213aPaul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 1263a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr wpa_service(FindService(ssid_bytes, flimflam::kModeManaged, 1264a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa)); 12656ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(wpa_service.get()); 1266a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr rsn_service(FindService(ssid_bytes, flimflam::kModeManaged, 1267a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn)); 12686ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(rsn_service.get()); 12696ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), rsn_service.get()); 1270a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr psk_service(FindService(ssid_bytes, flimflam::kModeManaged, 1271a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityPsk)); 12726ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), psk_service.get()); 12736ab23a9d4526686406d50081853639540b22213aPaul Stewart // Indirectly test FindService by doing a GetService on something that 12746ab23a9d4526686406d50081853639540b22213aPaul Stewart // already exists. 12756ab23a9d4526686406d50081853639540b22213aPaul Stewart { 12766ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 12776ab23a9d4526686406d50081853639540b22213aPaul Stewart WiFiServiceRefPtr wpa_service2( 1278a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, ssid.c_str(), 1279a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, flimflam::kSecurityWpa, 1280a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart "abcdefgh", false, &e)); 12816ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 12826ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), wpa_service2.get()); 12836ab23a9d4526686406d50081853639540b22213aPaul Stewart } 12846ab23a9d4526686406d50081853639540b22213aPaul Stewart} 12856ab23a9d4526686406d50081853639540b22213aPaul Stewart 1286cb59fed9326dc91c93b817dcd9eaca363d8313fePaul StewartTEST_F(WiFiMainTest, GetServiceWithGUID) { 1287cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart // Perform a GetService that also configures properties in the base Service 1288cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart // class using Service::Configure(). 1289cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart KeyValueStore args; 1290cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart args.SetString(flimflam::kTypeProperty, flimflam::kTypeWifi); 1291cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart args.SetString(flimflam::kSSIDProperty, "ssid"); 1292cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart args.SetString(flimflam::kSecurityProperty, flimflam::kSecurityNone); 1293cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart const string kGUID = "aguid"; // Stored as a registered Service property. 1294cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart args.SetString(flimflam::kGuidProperty, kGUID); 1295cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart Error e; 1296cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart WiFiServiceRefPtr service = GetServiceWithKeyValues(args, &e); 1297cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart EXPECT_TRUE(e.IsSuccess()); 1298cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart EXPECT_EQ(kGUID, service->guid()); 1299cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart} 1300cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart 1301ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartMATCHER_P(HasHiddenSSID, ssid, "") { 1302a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart map<string, DBus::Variant>::const_iterator it = 1303ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart arg.find(wpa_supplicant::kPropertyScanSSIDs); 1304ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart if (it == arg.end()) { 1305ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return false; 1306ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 1307ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1308ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const DBus::Variant &ssids_variant = it->second; 1309ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_TRUE(DBusAdaptor::IsByteArrays(ssids_variant.signature())); 1310ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const ByteArrays &ssids = it->second.operator ByteArrays(); 1311ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // A valid Scan containing a single hidden SSID should contain 1312ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // two SSID entries: one containing the SSID we are looking for, 1313ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // and an empty entry, signifying that we also want to do a 1314ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // broadcast probe request for all non-hidden APs as well. 1315ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return ssids.size() == 2 && 1316ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart string(ssids[0].begin(), ssids[0].end()) == ssid && 1317ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart ssids[1].empty(); 1318ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1319ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1320ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartTEST_F(WiFiMainTest, ScanHidden) { 1321ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 1322ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 1323ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart .Times(AnyNumber()) 1324ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart .WillRepeatedly(Throw( 1325ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart DBus::Error( 1326ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart "fi.w1.wpa_supplicant1.InterfaceUnknown", 1327ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 132810ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart scoped_refptr<MockProfile> profile( 132910ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart new NiceMock<MockProfile>(control_interface(), manager(), "")); 1330a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 133110ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart // Create a hidden service with an associated profile. 1332a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1333a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 1334a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid0", flimflam::kModeManaged, 1335a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, true, &e); 1336a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 1337a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(service->hidden_ssid()); 133810ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart service->set_profile(profile); 1339a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 1340a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 134110ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart // Create a hidden service without an associated profile. 1342a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1343a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 1344a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid1", flimflam::kModeManaged, 1345a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, true, &e); 1346a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 1347a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(service->hidden_ssid()); 1348a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 1349a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 135010ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart // Create a non-hidden service with an associated profile. 1351a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1352a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 1353a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid2", flimflam::kModeManaged, 1354a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, false, &e); 1355a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 1356a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(service->hidden_ssid()); 135710ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart service->set_profile(profile); 1358a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 1359a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*supplicant_interface_proxy_, Scan(HasHiddenSSID("ssid0"))); 1360ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart StartWiFi(); 1361ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart dispatcher_.DispatchPendingEvents(); 1362ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1363ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 13647ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, InitialSupplicantState) { 13657ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(WiFi::kInterfaceStateUnknown, GetSupplicantState()); 13667ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13677ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13687ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeNoService) { 13697ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // State change should succeed even if there is no pending Service. 13707ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateScanning); 13717ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateScanning, GetSupplicantState()); 13727ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13737ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13747ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeWithService) { 13757ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Forward transition should trigger a Service state change. 13767ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 13777ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 13787ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(); 13797ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 13807ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 13817ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAssociated); 13827ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 13837ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 13847ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 1385d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 13867ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13877ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13887ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeBackwardsWithService) { 13897ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Some backwards transitions should not trigger a Service state change. 13907ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Supplicant state should still be updated, however. 1391d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1392d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 13937ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 13947ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 13957ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(); 1396d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(Service::kStateConfiguring)); 13977ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 13987ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 13997ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAuthenticating); 14007ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateAuthenticating, 14017ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal GetSupplicantState()); 14027ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 14037ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 14047ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 1405d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 14067ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 14077ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 1408a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithNoGroups) { 1409a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1410a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetGroupsWithKey(flimflam::kWifiHiddenSsid)) 1411a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(set<string>())); 1412a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1413a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1414a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1415a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithMissingHidden) { 1416a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1417a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1418a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1419a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Missing "Hidden" property. 1420a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetBool(StrEq(id), flimflam::kWifiHiddenSsid, _)) 1421a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(false)); 1422a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1423a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1424a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1425a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithFalseHidden) { 1426a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1427a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1428a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1429a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // "Hidden" property set to "false". 1430a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetBool(StrEq(id), flimflam::kWifiHiddenSsid, _)) 1431a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(DoAll(SetArgumentPointee<2>(true), Return(false))); 1432a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1433a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1434a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1435a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithMissingSSID) { 1436a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1437a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1438a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1439a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Missing "SSID" property. 1440a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetString(StrEq(id), flimflam::kSSIDProperty, _)) 1441a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(false)); 1442a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1443a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1444a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1445a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1446a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithFoundService) { 1447a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1448a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1449a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1450a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1451a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", NULL, &e); 1452a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart ASSERT_TRUE(e.IsSuccess()); 1453a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1454a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1455a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1456a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesSuccess) { 1457d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1458a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1459a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string ssid("an_ssid"); 1460a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1461a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, ssid, &id); 1462a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(LoadHiddenServices(&storage)); 1463a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 1464a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(FindService(ssid_bytes, flimflam::kModeManaged, 1465a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityNone).get()); 1466a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1467a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 14681590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToDisconnected) { 1469d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1470d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1471d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 1472d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 14731590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 14741590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 14751590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14761590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handle used in this test ("an_ap") is not 14771590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // intended to reflect the format used by supplicant. It's just 14781590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // convenient for testing. 14791590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14801590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 1481e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 14821590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 14831590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service); 14841590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service, GetPendingService().get()); 14851590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14861590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("an_ap"); 14871590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 14881590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 14891590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service, GetCurrentService().get()); 14901590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 14911590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14921590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1493568b5c6b093d5605a40216711d3291376394dd0fmukesh agrawal EXPECT_EQ(Service::kStateIdle, service->state()); 1494568b5c6b093d5605a40216711d3291376394dd0fmukesh agrawal EXPECT_TRUE(service->IsFailed()); 14951590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetCurrentService().get()); 14961590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 14971590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 14981590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14991590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToConnectedNewService) { 1500d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1501d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1502d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 1503d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 15041590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap1 = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 15051590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap2 = MakeEndpoint("another_ssid", "01:02:03:04:05:06"); 15061590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service1 = CreateServiceForEndpoint(*ap1); 15071590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service2 = CreateServiceForEndpoint(*ap2); 15081590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15091590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handles used in this test ("ap1", "ap2") are 15101590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // not intended to reflect the format used by supplicant. They're 15111590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // just convenient for testing. 15121590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15131590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 1514e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap1", ap1->ssid_string(), ap1->bssid_string(), 0, 0, 15151590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 1516e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap2", ap2->ssid_string(), ap2->bssid_string(), 0, 0, 15171590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 15181590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service1); 15191590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("ap1"); 15201590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 15211590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service1.get(), GetCurrentService().get()); 15221590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1523c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Note that we deliberately omit intermediate supplicant states 1524c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // (e.g. kInterfaceStateAssociating), on the theory that they are 1525c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // unreliable. Specifically, they may be quashed if the association 1526c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // completes before supplicant flushes its changed properties. 15271590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("ap2"); 15281590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 15291590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service2.get(), GetCurrentService().get()); 15301590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateIdle, service1->state()); 15311590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service2->state()); 15321590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 15331590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15341590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeDisconnectedToConnected) { 1535d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1536d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1537d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1538d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 15391590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 15401590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 15411590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15421590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handle used in this test ("an_ap") is not 15431590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // intended to reflect the format used by supplicant. It's just 15441590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // convenient for testing. 15451590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15461590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 1547e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 15481590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 15491590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service); 15501590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("an_ap"); 15511590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 15521590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service.get(), GetCurrentService().get()); 15531590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 15541590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 15551590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1556e41a72d0737488d561a4158019409d5785dad61bThieu LeTEST_F(WiFiMainTest, CurrentBSSChangedUpdateServiceEndpoint) { 1557b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1558b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1559b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1560b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1561e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency1 = 2412; 1562e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency2 = 2442; 1563e41a72d0737488d561a4158019409d5785dad61bThieu Le StartWiFi(); 1564e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid1", "00:00:00:00:00:01", 1, frequency1, 1565e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 1566e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss2", "ssid1", "00:00:00:00:00:02", 1, frequency2, 1567e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 1568e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(1, GetServices().size()); 1569e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFiService *service(GetServices()[0].get()); 1570e41a72d0737488d561a4158019409d5785dad61bThieu Le InitiateConnect(service); 1571e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportCurrentBSSChanged("bss1"); 1572e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency1, service->frequency_); 1573e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportCurrentBSSChanged("bss2"); 1574e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency2, service->frequency_); 1575e41a72d0737488d561a4158019409d5785dad61bThieu Le} 1576e41a72d0737488d561a4158019409d5785dad61bThieu Le 15774eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawalTEST_F(WiFiMainTest, ConfiguredServiceRegistration) { 15784eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal Error e; 15794eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 15804eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal .Times(0); 15814eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal EXPECT_CALL(*manager(), HasService(_)) 15824eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal .WillOnce(Return(false)); 15834eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal GetOpenService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, &e); 15844eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)); 1585e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap0", "an_ssid", "00:00:00:00:00:00", 0, 0, 15864eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal kNetworkModeInfrastructure); 15874eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal} 15884eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal 15898a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, NewConnectPreemptsPending) { 1590d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1591d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 15928a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiEndpointRefPtr ap1 = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 15938a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiEndpointRefPtr ap2 = MakeEndpoint("another_ssid", "01:02:03:04:05:06"); 15948a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service1 = CreateServiceForEndpoint(*ap1); 15958a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service2 = CreateServiceForEndpoint(*ap2); 15968a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15978a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 1598e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap1", ap1->ssid_string(), ap1->bssid_string(), 0, 0, 15998a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal kNetworkModeInfrastructure); 1600e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap2", ap2->ssid_string(), ap2->bssid_string(), 0, 0, 16018a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal kNetworkModeInfrastructure); 16028a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal InitiateConnect(service1); 16038a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(service1.get(), GetPendingService().get()); 16048a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 16058a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 16068a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(_)); 16078a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal InitiateConnect(service2); 16088a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(service2.get(), GetPendingService().get()); 16098a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 16108a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 16118a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, IsIdle) { 16128a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 16138a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(wifi()->IsIdle()); 16148a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 16158a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 16168a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 16178a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal Error error; 16188a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal service->AddEndpoint(ap); 16198a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal service->AutoConnect(); 16208a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_FALSE(wifi()->IsIdle()); 16218a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 16228a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 16234d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawalMATCHER(WiFiAddedArgs, "") { 16244d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal return ContainsKey(arg, wpa_supplicant::kNetworkPropertyScanSSID) && 16254d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ContainsKey(arg, wpa_supplicant::kNetworkPropertyBgscan); 16264d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 16274d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 16284d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawalTEST_F(WiFiMainTest, AddNetworkArgs) { 1629d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 16304d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 16314d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal *supplicant_interface_proxy_; 16324d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 16334d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal StartWiFi(); 1634e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 16354d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal WiFiService *service(GetServices().begin()->get()); 16364d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(WiFiAddedArgs())); 16374d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal InitiateConnect(service); 16384d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 16394d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1640c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, StateAndIPIgnoreLinkEvent) { 1641c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1642c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(); 1643c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal InitiateConnect(service); 1644c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*service.get(), SetState(_)).Times(0); 1645c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 1646c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportLinkUp(); 1647c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1648c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Verify expectations now, because WiFi may cause |service| state 1649c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // changes during TearDown(). 1650c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal Mock::VerifyAndClearExpectations(service); 1651d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 1652c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1653c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1654c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, SupplicantCompleted) { 1655d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1656d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1657d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1658c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1659c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1660c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1661c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1662e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1663c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal kNetworkModeInfrastructure); 1664c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal InitiateConnect(service); 1665c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1666c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()); 1667c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportCurrentBSSChanged("ap"); 1668c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1669c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 1670c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1671c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1672c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, SupplicantCompletedAlreadyConnected) { 1673d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()); 1674d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1675d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*device_info(), FlushAddresses(_)).Times(AnyNumber()); 1676d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), device_info()).Times(AnyNumber()); 1677d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _)).Times(AnyNumber()); 1678d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1679ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*manager(), IsPortalDetectionEnabled(_)).Times(AnyNumber()); 1680c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1681c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1682c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1683c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1684e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1685c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal kNetworkModeInfrastructure); 1686c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal InitiateConnect(service); 1687c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportCurrentBSSChanged("ap"); 1688c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1689c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportIPConfigComplete(); 1690c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal Mock::VerifyAndClearExpectations(service); 1691c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1692c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 1693c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1694c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1695c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 169666c8600f8410ed205701921d58d9e2c00000047cPaul StewartTEST_F(WiFiMainTest, ClearCachedCredentials) { 169766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart MockSupplicantInterfaceProxy &supplicant_interface_proxy = 169866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart *supplicant_interface_proxy_; 169966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 170066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart StartWiFi(); 170166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 170266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart // Ensure call to the proxy is deferred. 170366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 170466c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(0); 170566c8600f8410ed205701921d58d9e2c00000047cPaul Stewart ClearCachedCredentials(); 170666c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 170766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart Mock::VerifyAndClearExpectations(&supplicant_interface_proxy); 170866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 170966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 171066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(1); 171166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart dispatcher_.DispatchPendingEvents(); 171266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 171366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart Mock::VerifyAndClearExpectations(&supplicant_interface_proxy); 171466c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 171566c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 171666c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(0); 171766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart ClearCachedCredentials(); 171866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart ClearCachedCredentials(); 171966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 172066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart Mock::VerifyAndClearExpectations(&supplicant_interface_proxy); 172166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 172266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart // Ensure multiple calls to ClearCachedCredentials() results in only 172366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart // one call to the proxy. 172466c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 172566c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(1); 172666c8600f8410ed205701921d58d9e2c00000047cPaul Stewart dispatcher_.DispatchPendingEvents(); 172766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart} 172866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 1729b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSAddedCreatesBSSProxy) { 1730b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1731b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): Consider using a factory for WiFiEndpoints, so that 1732b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // we can test the interaction between WiFi and WiFiEndpoint. (Right 1733b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // now, we're testing across multiple layers.) 1734b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 1735b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy_factory(), CreateSupplicantBSSProxy(_, _, _)); 1736b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 1737b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1738b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1739b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1740b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSRemovedDestroysBSSProxy) { 1741b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): As for BSSAddedCreatesBSSProxy, consider using a 1742b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // factory for WiFiEndpoints. 1743b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1744b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1745b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Get the pointer before we transfer ownership. 1746b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MockSupplicantBSSProxy *proxy = supplicant_bss_proxy_.get(); 1747b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy, Die()); 1748b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 1749b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1750b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal RemoveBSS("bss0"); 1751b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Check this now, to make sure RemoveBSS killed the proxy (rather 1752b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // than TearDown). 1753b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Mock::VerifyAndClearExpectations(proxy); 1754b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1755b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 17565c05b2920be742d518829972127172481722058dmukesh agrawalTEST_F(WiFiMainTest, FlushBSSOnResume) { 17575c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval resume_time = {1, 0}; 17585c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval scan_done_time = {6, 0}; 17595c05b2920be742d518829972127172481722058dmukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 17605c05b2920be742d518829972127172481722058dmukesh agrawal *supplicant_interface_proxy_; 17615c05b2920be742d518829972127172481722058dmukesh agrawal 17625c05b2920be742d518829972127172481722058dmukesh agrawal StartWiFi(); 17635c05b2920be742d518829972127172481722058dmukesh agrawal 17645c05b2920be742d518829972127172481722058dmukesh agrawal EXPECT_CALL(time_, GetTimeMonotonic(_)) 17655c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(resume_time), Return(0))) 17665c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(scan_done_time), Return(0))); 17675c05b2920be742d518829972127172481722058dmukesh agrawal EXPECT_CALL(supplicant_interface_proxy, 17685c05b2920be742d518829972127172481722058dmukesh agrawal FlushBSS(WiFi::kMaxBSSResumeAgeSeconds + 5)); 17693e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kOn); 17705c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 17715c05b2920be742d518829972127172481722058dmukesh agrawal} 17725c05b2920be742d518829972127172481722058dmukesh agrawal 1773b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerIdle) { 1774b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1775b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1776b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1777b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1778b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1779b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1780b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1781b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1782b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1783b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1784b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1785b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1786b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerScanning) { 1787b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1788b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1789b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1790b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1791b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1792b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // Should not call Scan, since we're already scanning. 1793b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // (Scanning is triggered by StartWiFi.) 1794b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1795b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1796b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1797b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1798b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1799b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1800b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerConnecting) { 1801b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1802b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1803b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1804b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1805b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiService *service(GetServices().begin()->get()); 1806b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal InitiateConnect(service); 1807b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1808b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1809b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1810b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1811b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1812b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1813b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1814b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1815b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1816b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerReconfigured) { 1817b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1818b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1819b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1820b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1821b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal SetScanInterval(1); 1822b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1823b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1824b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1825b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerResetOnScanDone) { 1826b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1827b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1828b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1829b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1830b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1831b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1832b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1833b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1834b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerStopOnZeroInterval) { 1835b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1836b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1837b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1838b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal SetScanInterval(0); 1839b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1840b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1841b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1842b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanOnDisconnectWithHidden) { 1843b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal Error e; 1844b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal scoped_refptr<MockProfile> profile( 1845b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal new NiceMock<MockProfile>(control_interface(), manager(), "")); 1846b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiServiceRefPtr hidden_service = 1847b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal GetServiceInner(flimflam::kTypeWifi, "hidden_ssid", 1848b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal flimflam::kModeManaged, NULL, NULL, true, &e); 1849b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal hidden_service->set_profile(profile); 1850b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1851b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1852b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1853b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1854b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1855b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal kNetworkModeInfrastructure); 1856b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal InitiateConnect(service); 1857b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged("an_ap"); 1858b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1859b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1860b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1861b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), 1862b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal Scan(HasHiddenSSID("hidden_ssid"))); 1863b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1864b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1865b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1866b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1867b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, NoScanOnDisconnectWithoutHidden) { 1868b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1869b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1870b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1871b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1872b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal kNetworkModeInfrastructure); 1873b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal InitiateConnect(service); 1874b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged("an_ap"); 1875b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1876b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1877b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1878b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1879b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1880b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1881b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1882b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1883853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} // namespace shill 1884