wifi_unittest.cc revision 7347bf2b466ae8058e47b29aaf0583390405d866
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 <linux/if.h> 85c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include <linux/netlink.h> // Needs typedefs from sys/socket.h. 95a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie#include <netinet/ether.h> 105a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie#include <sys/socket.h> 11f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 12853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <map> 13853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <string> 14853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <vector> 15853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1660ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov#include <base/file_util.h> 177ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal#include <base/memory/ref_counted.h> 18dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include <base/memory/scoped_ptr.h> 193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_number_conversions.h> 204a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov#include <base/string_split.h> 213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_util.h> 225a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie#include <base/stringprintf.h> 23853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <chromeos/dbus/service_constants.h> 241830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal#include <dbus-c++/dbus.h> 257156c923c9a9d2240ea9c62045337ac8c8f89e57Chris Masone#include <gmock/gmock.h> 262ae797d040b7261a5619c750e07037566bcb542bChris Masone#include <gtest/gtest.h> 27853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 28853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/dbus_adaptor.h" 2926b327e559583d5a84b7e1605c29a4dcbc87d2a9Paul Stewart#include "shill/event_dispatcher.h" 306d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah#include "shill/geolocation_info.h" 318ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal#include "shill/ieee80211.h" 327a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal#include "shill/key_value_store.h" 33b691efd71561246065eae3cdd73a96ca1b8a528dChristopher Wiley#include "shill/logging.h" 34853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/manager.h" 352b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov#include "shill/mock_dbus_manager.h" 36853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/mock_device.h" 37c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal#include "shill/mock_device_info.h" 38f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include "shill/mock_dhcp_config.h" 39f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include "shill/mock_dhcp_provider.h" 40e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart#include "shill/mock_event_dispatcher.h" 413c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart#include "shill/mock_link_monitor.h" 42cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal#include "shill/mock_log.h" 432ae797d040b7261a5619c750e07037566bcb542bChris Masone#include "shill/mock_manager.h" 443426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le#include "shill/mock_metrics.h" 45bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie#include "shill/mock_netlink_manager.h" 4610ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart#include "shill/mock_profile.h" 475c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include "shill/mock_rtnl_handler.h" 485a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie#include "shill/mock_scan_session.h" 49a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include "shill/mock_store.h" 50b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal#include "shill/mock_supplicant_bss_proxy.h" 51735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart#include "shill/mock_supplicant_eap_state_handler.h" 523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_interface_proxy.h" 53835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart#include "shill/mock_supplicant_network_proxy.h" 543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_process_proxy.h" 555c05b2920be742d518829972127172481722058dmukesh agrawal#include "shill/mock_time.h" 563c5040174273386868cc8dea8044d22c465885d8Paul Stewart#include "shill/mock_wifi_provider.h" 577ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal#include "shill/mock_wifi_service.h" 585a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie#include "shill/netlink_message_matchers.h" 59dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include "shill/nice_mock_control.h" 605a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie#include "shill/nl80211_message.h" 61853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/property_store_unittest.h" 623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/proxy_factory.h" 635a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie#include "shill/scan_session.h" 6485aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart#include "shill/technology.h" 653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/wifi_endpoint.h" 663239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal#include "shill/wifi_service.h" 67ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart#include "shill/wpa_supplicant.h" 68853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 69ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 700e1cdeae24dd678a5fe27c840802582c0ca45ec0Albert Chaulkusing base::FilePath; 71853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::map; 72853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::string; 73853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::vector; 74853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::_; 753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::AnyNumber; 763c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing ::testing::AtLeast; 773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::DefaultValue; 78a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::DoAll; 79cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalusing ::testing::EndsWith; 803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::InSequence; 81b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalusing ::testing::Invoke; 82549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewartusing ::testing::InvokeWithoutArgs; 835a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrieusing ::testing::MakeMatcher; 845a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrieusing ::testing::Matcher; 855a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrieusing ::testing::MatcherInterface; 865a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrieusing ::testing::MatchResultListener; 877ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalusing ::testing::Mock; 88dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawalusing ::testing::NiceMock; 89d4dc0836d64d957f233eaf6e4ab24093a97dd4cemukesh agrawalusing ::testing::NotNull; 90853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Return; 91ba99b598d3f399a41e57f49dccac5f988e653126Prathmesh Prabhuusing ::testing::ReturnRef; 92ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morainusing ::testing::SaveArg; 93a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::SetArgumentPointee; 94a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrEq; 95a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrictMock; 96853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Test; 973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::Throw; 988ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalusing ::testing::Values; 99853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 100853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masonenamespace shill { 101853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1025a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrienamespace { 1035a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 1045a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrieconst uint16_t kNl80211FamilyId = 0x13; 1055a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrieconst uint16_t kRandomScanFrequency1 = 5600; 1065a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrieconst uint16_t kRandomScanFrequency2 = 5560; 1075a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrieconst uint16_t kRandomScanFrequency3 = 2422; 1085a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 1095a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} // namespace 1105a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 1113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalclass WiFiPropertyTest : public PropertyStoreTest { 112853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone public: 1133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiPropertyTest() 1143426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le : device_(new WiFi(control_interface(), 1153c5040174273386868cc8dea8044d22c465885d8Paul Stewart NULL, NULL, manager(), "wifi", "", 0)) { 116853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone } 1173195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual ~WiFiPropertyTest() {} 118853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 119853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone protected: 1208abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFiRefPtr device_; 121853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone}; 122853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Contains) { 124de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_TRUE(device_->store().Contains(flimflam::kNameProperty)); 125de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_FALSE(device_->store().Contains("")); 126853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 127853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1286bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawalTEST_F(WiFiPropertyTest, SetProperty) { 129a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 130a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1316bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 132de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal device_->mutable_store(), 133a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanSignalThresholdProperty, 134a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kInt32V, 135a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 136a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 137a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 138a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1396bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty(device_->mutable_store(), 1406bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanIntervalProperty, 1416bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kUint16V, 1426bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 143a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 144853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone // Ensure that an attempt to write a R/O property returns InvalidArgs error. 145a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 146a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1476bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty(device_->mutable_store(), 1486bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanningProperty, 1496bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kBoolV, 1506bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 151bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal ASSERT_TRUE(error.is_set()); // name() may be invalid otherwise 1529d779936d8f8c2d74b30883e2a2622c4207fe797Chris Masone EXPECT_EQ(invalid_args(), error.name()); 153a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 154853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1554d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1564d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1576bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1584d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1594d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1604d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant( 1610654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkBgscanMethodSimple), 1624d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1634d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1644d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1654d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1664d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1676bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty( 1684d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1694d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1704d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant("not a real scan method"), 1714d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1724d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1734d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 1744d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1754a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovTEST_F(WiFiPropertyTest, BgscanMethodProperty) { 1760654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_NE(WPASupplicant::kNetworkBgscanMethodLearn, 1778abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFi::kDefaultBgscanMethod); 1784a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE(device_->bgscan_method_.empty()); 1794a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 1804a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov string method; 181e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart Error unused_error; 182e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart EXPECT_TRUE(device_->store().GetStringProperty( 183e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart flimflam::kBgscanMethodProperty, &method, &unused_error)); 1844a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(WiFi::kDefaultBgscanMethod, method); 1850654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kNetworkBgscanMethodSimple, method); 1868abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1878abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal ::DBus::Error error; 1886bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1898abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), 1908abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal flimflam::kBgscanMethodProperty, 1918abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal DBusAdaptor::StringToVariant( 1920654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkBgscanMethodLearn), 1938abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal &error)); 1940654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kNetworkBgscanMethodLearn, device_->bgscan_method_); 195e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart EXPECT_TRUE(device_->store().GetStringProperty( 196e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart flimflam::kBgscanMethodProperty, &method, &unused_error)); 1970654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kNetworkBgscanMethodLearn, method); 1988abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1998abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_TRUE(DBusAdaptor::ClearProperty( 2008abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), flimflam::kBgscanMethodProperty, &error)); 201e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart EXPECT_TRUE(device_->store().GetStringProperty( 202e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart flimflam::kBgscanMethodProperty, &method, &unused_error)); 2034a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(WiFi::kDefaultBgscanMethod, method); 2044a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE(device_->bgscan_method_.empty()); 2058abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal} 2068abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 2073c5040174273386868cc8dea8044d22c465885d8Paul StewartMATCHER_P(EndpointMatch, endpoint, "") { 2083c5040174273386868cc8dea8044d22c465885d8Paul Stewart return 2093c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg->ssid() == endpoint->ssid() && 2103c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg->network_mode() == endpoint->network_mode() && 2113c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg->security_mode() == endpoint->security_mode(); 2123c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 2133c5040174273386868cc8dea8044d22c465885d8Paul Stewart 2145a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 215e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartclass WiFiObjectTest : public ::testing::TestWithParam<string> { 2163195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 217bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie explicit WiFiObjectTest(EventDispatcher *dispatcher) 218e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart : event_dispatcher_(dispatcher), 2196c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le metrics_(NULL), 220e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart manager_(&control_interface_, NULL, &metrics_, &glib_), 221e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart device_info_(&control_interface_, dispatcher, &metrics_, &manager_), 222626719f89881a949d8b5a8fa808beb924496489fChris Masone wifi_(new WiFi(&control_interface_, 223e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart dispatcher, 2243426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 225626719f89881a949d8b5a8fa808beb924496489fChris Masone &manager_, 226626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceName, 227626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceAddress, 228626719f89881a949d8b5a8fa808beb924496489fChris Masone 0)), 2293c5040174273386868cc8dea8044d22c465885d8Paul Stewart bss_counter_(0), 230dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_process_proxy_(new NiceMock<MockSupplicantProcessProxy>()), 231b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal supplicant_bss_proxy_( 232b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal new NiceMock<MockSupplicantBSSProxy>()), 233f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal dhcp_config_(new MockDHCPConfig(&control_interface_, 234d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart kDeviceName)), 2352b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov dbus_manager_(new NiceMock<MockDBusManager>()), 236735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart eap_state_handler_(new NiceMock<MockSupplicantEAPStateHandler>()), 2373c5040174273386868cc8dea8044d22c465885d8Paul Stewart supplicant_interface_proxy_( 2389413bcc8c3576eeab8f232253264dce4347bbb0cPaul Stewart new NiceMock<MockSupplicantInterfaceProxy>()), 2392f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal proxy_factory_(this) { 2405a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie InstallMockScanSession(); 2413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ::testing::DefaultValue< ::DBus::Path>::Set("/default/path"); 242c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 243d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart ON_CALL(dhcp_provider_, CreateConfig(_, _, _, _)). 244c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(dhcp_config_)); 245c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ON_CALL(*dhcp_config_.get(), RequestIP()). 246c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(true)); 247835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart ON_CALL(proxy_factory_, CreateSupplicantNetworkProxy(_, _)). 248835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart WillByDefault(InvokeWithoutArgs( 249835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart this, &WiFiObjectTest::CreateSupplicantNetworkProxy)); 250318445d33275a29a5d5f50a507b138a28b106d1bWade Guthrie Nl80211Message::SetMessageType(kNl80211FamilyId); 251ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 252735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart // Transfers ownership. 253735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart manager_.dbus_manager_.reset(dbus_manager_); 254735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart wifi_->eap_state_handler_.reset(eap_state_handler_); 2552b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 2563c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->provider_ = &wifi_provider_; 2575c05b2920be742d518829972127172481722058dmukesh agrawal wifi_->time_ = &time_; 258bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie wifi_->netlink_manager_ = &netlink_manager_; 2595a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->progressive_scan_enabled_ = true; 2605a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 2615a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // The following is only useful when a real |ScanSession| is used; it is 2625a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // ignored by |MockScanSession|. 2635a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->all_scan_frequencies_.insert(kRandomScanFrequency1); 2645a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->all_scan_frequencies_.insert(kRandomScanFrequency2); 2655a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->all_scan_frequencies_.insert(kRandomScanFrequency3); 2663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2675c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2685c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void SetUp() { 2693ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal // EnableScopes... so that we can EXPECT_CALL for scoped log messages. 2703ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal ScopeLogger::GetInstance()->EnableScopesByName("wifi"); 271d34a47c06c38f2594c85b14b0f9cee2bf37c0e84Christopher Wiley ScopeLogger::GetInstance()->set_verbose_level(3); 272ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = &proxy_factory_; 2735c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal static_cast<Device *>(wifi_)->rtnl_handler_ = &rtnl_handler_; 2745c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(&dhcp_provider_); 2753c5040174273386868cc8dea8044d22c465885d8Paul Stewart ON_CALL(manager_, device_info()).WillByDefault(Return(&device_info_)); 2762b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(manager_, UpdateEnabledTechnologies()).Times(AnyNumber()); 277b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 2785c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal } 2795c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2805c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void TearDown() { 2813c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(_)) 2823c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(reinterpret_cast<WiFiService *>(NULL))); 2839a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->SelectService(NULL); 284b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal if (supplicant_bss_proxy_.get()) { 285b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()); 286b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 287ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = NULL; 2883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // must Stop WiFi instance, to clear its list of services. 2893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // otherwise, the WiFi instance will not be deleted. (because 2903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // services reference a WiFi instance, creating a cycle.) 2919a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->Stop(NULL, ResultCallback()); 2925c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(NULL); 2933ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal // Reset scope logging, to avoid interfering with other tests. 2943ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal ScopeLogger::GetInstance()->EnableScopesByName("-wifi"); 295d34a47c06c38f2594c85b14b0f9cee2bf37c0e84Christopher Wiley ScopeLogger::GetInstance()->set_verbose_level(0); 296f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 297f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 298549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart // Needs to be public since it is called via Invoke(). 299549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart void StopWiFi() { 300549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart wifi_->SetEnabled(false); // Stop(NULL, ResultCallback()); 301549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart } 302549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart 303c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley // Needs to be public since it is called via Invoke(). 304c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley void ThrowDBusError() { 305c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley throw DBus::Error("SomeDBusType", "A handy message"); 306c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley } 30717d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart void ResetPendingService() { 30817d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart SetPendingService(NULL); 30917d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart } 310c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley 3115a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie size_t GetScanFrequencyCount() const { 3125a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie return wifi_->all_scan_frequencies_.size(); 3135a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie } 3145a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 3155a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie void SetScanSize(int min, int max) { 3165a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->min_frequencies_to_scan_ = min; 3175a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->max_frequencies_to_scan_ = max; 3185a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie } 3195a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 3205a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // This clears WiFi::scan_session_, thereby allowing WiFi::Scan to create a 3215a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // real scan session. 3225a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie void ClearScanSession() { 3235a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->scan_session_.reset(); 3245a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie } 3255a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 3265a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie bool IsScanSessionNull() { 3275a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie return !wifi_->scan_session_; 3285a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie } 3295a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 3305a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie void InstallMockScanSession() { 3315a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie WiFiProvider::FrequencyCountList previous_frequencies; 3325a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie std::set<uint16_t> available_frequencies; 3335a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ScanSession::FractionList fractions; 3345a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ScanSession::OnScanFailed null_callback; 3355a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie scan_session_ = new MockScanSession(&netlink_manager_, 3365a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie event_dispatcher_, 3375a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie previous_frequencies, 3385a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie available_frequencies, 3395a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 0, 3405a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie fractions, 3415a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 0, 3425a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 0, 3435a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie null_callback); 3445a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->scan_session_.reset(scan_session_); 3455a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie } 3465a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 3475a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Or DisableProgressiveScan()... 3485a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie void EnableFullScan() { 3495a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->progressive_scan_enabled_ = false; 3505a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie } 3515a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 3527347bf2b466ae8058e47b29aaf0583390405d866Wade Guthrie void OnTriggerScanResponse(const Nl80211Message &message) { 3535a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->scan_session_->OnTriggerScanResponse(message); 3545a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie } 3555a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 3563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 3577ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal typedef scoped_refptr<MockWiFiService> MockWiFiServiceRefPtr; 3587ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 3593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal class TestProxyFactory : public ProxyFactory { 3603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 361e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart explicit TestProxyFactory(WiFiObjectTest *test); 3623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantProcessProxyInterface *CreateSupplicantProcessProxy( 3641830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_path*/, const char */*dbus_addr*/) { 365dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_process_proxy_.release(); 3663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantInterfaceProxyInterface *CreateSupplicantInterfaceProxy( 369196f50fdcc687512c123a34f54a21eea8215708fPaul Stewart SupplicantEventDelegateInterface */*delegate*/, 3701830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const DBus::Path &/*object_path*/, 3711830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_addr*/) { 372dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_interface_proxy_.release(); 3733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 375b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MOCK_METHOD3(CreateSupplicantBSSProxy, 376b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *( 377b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint *wifi_endpoint, 378b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &object_path, 379b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char *dbus_addr)); 380b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 381835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart MOCK_METHOD2(CreateSupplicantNetworkProxy, 382835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart SupplicantNetworkProxyInterface *( 383835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart const DBus::Path &object_path, 384835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart const char *dbus_addr)); 385835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 3863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 387b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *CreateSupplicantBSSProxyInternal( 388b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint */*wifi_endpoint*/, 389b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &/*object_path*/, 390b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char */*dbus_addr*/) { 391b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return test_->supplicant_bss_proxy_.release(); 392b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 393b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 394e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiObjectTest *test_; 3953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal }; 3963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3973c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Simulate the course of events when the last enpoint of a service is 3983c5040174273386868cc8dea8044d22c465885d8Paul Stewart // removed. 3993c5040174273386868cc8dea8044d22c465885d8Paul Stewart class EndpointRemovalHandler { 400bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie public: 401bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie EndpointRemovalHandler(WiFiRefPtr wifi, const WiFiServiceRefPtr &service) 402bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie : wifi_(wifi), service_(service) {} 403bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie virtual ~EndpointRemovalHandler() {} 404bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie 405bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie WiFiServiceRefPtr OnEndpointRemoved( 406bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie const WiFiEndpointConstRefPtr &endpoint) { 407bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie wifi_->DisassociateFromService(service_); 408bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie return service_; 409bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie } 4103c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4113c5040174273386868cc8dea8044d22c465885d8Paul Stewart private: 4123c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiRefPtr wifi_; 4133c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service_; 4143c5040174273386868cc8dea8044d22c465885d8Paul Stewart }; 4153c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4163c5040174273386868cc8dea8044d22c465885d8Paul Stewart EndpointRemovalHandler *MakeEndpointRemovalHandler( 417bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie const WiFiServiceRefPtr &service) { 4183c5040174273386868cc8dea8044d22c465885d8Paul Stewart return new EndpointRemovalHandler(wifi_, service); 4193c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 420b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void CancelScanTimer() { 421b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->scan_timer_callback_.Cancel(); 422b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 4233c5040174273386868cc8dea8044d22c465885d8Paul Stewart // This function creates a new endpoint with a mode set to |mode|. We 4243c5040174273386868cc8dea8044d22c465885d8Paul Stewart // synthesize new |path| and |bssid| values, since we don't really care 4253c5040174273386868cc8dea8044d22c465885d8Paul Stewart // what they are for unit tests. If "use_ssid" is true, we used the 4263c5040174273386868cc8dea8044d22c465885d8Paul Stewart // passed-in ssid, otherwise we create a synthesized value for it as well. 4273c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr MakeNewEndpoint(const char *mode, 4283c5040174273386868cc8dea8044d22c465885d8Paul Stewart bool use_ssid, 4293c5040174273386868cc8dea8044d22c465885d8Paul Stewart string *ssid, 4303c5040174273386868cc8dea8044d22c465885d8Paul Stewart string *path, 4313c5040174273386868cc8dea8044d22c465885d8Paul Stewart string *bssid) { 4323c5040174273386868cc8dea8044d22c465885d8Paul Stewart bss_counter_++; 4333c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (!use_ssid) { 4343c5040174273386868cc8dea8044d22c465885d8Paul Stewart *ssid = base::StringPrintf("ssid%d", bss_counter_); 4353c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4363c5040174273386868cc8dea8044d22c465885d8Paul Stewart *path = base::StringPrintf("/interface/bss%d", bss_counter_); 4373c5040174273386868cc8dea8044d22c465885d8Paul Stewart *bssid = base::StringPrintf("00:00:00:00:00:%02x", bss_counter_); 4383c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = MakeEndpointWithMode(*ssid, *bssid, mode); 4393c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(wifi_provider_, 4403c5040174273386868cc8dea8044d22c465885d8Paul Stewart OnEndpointAdded(EndpointMatch(endpoint))).Times(1); 4413c5040174273386868cc8dea8044d22c465885d8Paul Stewart return endpoint; 4423c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4433c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr MakeEndpoint(const string &ssid, const string &bssid) { 4443c5040174273386868cc8dea8044d22c465885d8Paul Stewart return MakeEndpointWithMode(ssid, bssid, kNetworkModeInfrastructure); 4453c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4463c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr MakeEndpointWithMode( 4473c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string &ssid, const string &bssid, const string &mode) { 4483c5040174273386868cc8dea8044d22c465885d8Paul Stewart return WiFiEndpoint::MakeOpenEndpoint( 4493c5040174273386868cc8dea8044d22c465885d8Paul Stewart &proxy_factory_, NULL, ssid, bssid, mode, 0, 0); 4503c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4513c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr MakeMockServiceWithSSID( 4523c5040174273386868cc8dea8044d22c465885d8Paul Stewart vector<uint8_t> ssid, const std::string &security) { 4533c5040174273386868cc8dea8044d22c465885d8Paul Stewart return new NiceMock<MockWiFiService>( 4543c5040174273386868cc8dea8044d22c465885d8Paul Stewart &control_interface_, 4553c5040174273386868cc8dea8044d22c465885d8Paul Stewart event_dispatcher_, 4563c5040174273386868cc8dea8044d22c465885d8Paul Stewart &metrics_, 4573c5040174273386868cc8dea8044d22c465885d8Paul Stewart &manager_, 4583c5040174273386868cc8dea8044d22c465885d8Paul Stewart &wifi_provider_, 4593c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssid, 4603c5040174273386868cc8dea8044d22c465885d8Paul Stewart flimflam::kModeManaged, 4613c5040174273386868cc8dea8044d22c465885d8Paul Stewart security, 4623c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 4633c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4643c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr MakeMockService(const std::string &security) { 4653c5040174273386868cc8dea8044d22c465885d8Paul Stewart return MakeMockServiceWithSSID(vector<uint8_t>(1, 'a'), security); 4663c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4673c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path MakeNewEndpointAndService(int16_t signal_strength, 4683c5040174273386868cc8dea8044d22c465885d8Paul Stewart uint16 frequency, 4693c5040174273386868cc8dea8044d22c465885d8Paul Stewart const char *mode, 4703c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr, 4713c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr *service_ptr) { 4723c5040174273386868cc8dea8044d22c465885d8Paul Stewart string ssid; 4733c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path path; 4743c5040174273386868cc8dea8044d22c465885d8Paul Stewart string bssid; 4753c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = 4763c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpoint(mode, false, &ssid, &path, &bssid); 4773c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 4783c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeMockServiceWithSSID(endpoint->ssid(), endpoint->security_mode()); 4793c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(wifi_provider_, FindServiceForEndpoint(EndpointMatch(endpoint))) 4803c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(service)); 4813c5040174273386868cc8dea8044d22c465885d8Paul Stewart ON_CALL(*service, GetEndpointCount()).WillByDefault(Return(1)); 4823c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS(path, ssid, bssid, signal_strength, frequency, mode); 4833c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (service_ptr) { 4843c5040174273386868cc8dea8044d22c465885d8Paul Stewart *service_ptr = service; 4853c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4863c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 4873c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 4883c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4893c5040174273386868cc8dea8044d22c465885d8Paul Stewart return path; 4903c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4913c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path AddEndpointToService( 4923c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service, 4933c5040174273386868cc8dea8044d22c465885d8Paul Stewart int16_t signal_strength, 4943c5040174273386868cc8dea8044d22c465885d8Paul Stewart uint16 frequency, 4953c5040174273386868cc8dea8044d22c465885d8Paul Stewart const char *mode, 4963c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr) { 4973c5040174273386868cc8dea8044d22c465885d8Paul Stewart string ssid(service->ssid().begin(), service->ssid().end()); 4983c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path path; 4993c5040174273386868cc8dea8044d22c465885d8Paul Stewart string bssid; 5003c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = 5013c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpoint(mode, true, &ssid, &path, &bssid); 5023c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(wifi_provider_, FindServiceForEndpoint(EndpointMatch(endpoint))) 5033c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(service)); 5043c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS(path, ssid, bssid, signal_strength, frequency, mode); 5053c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 5063c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 5073c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5083c5040174273386868cc8dea8044d22c465885d8Paul Stewart return path; 5093c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5103c5040174273386868cc8dea8044d22c465885d8Paul Stewart void InitiateConnect(WiFiServiceRefPtr service) { 5113c5040174273386868cc8dea8044d22c465885d8Paul Stewart map<string, ::DBus::Variant> params; 5123c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->ConnectTo(service, params); 5133c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5143c5040174273386868cc8dea8044d22c465885d8Paul Stewart void InitiateDisconnect(WiFiServiceRefPtr service) { 5153c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->DisconnectFrom(service); 5163c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5173c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr SetupConnectingService( 5183c5040174273386868cc8dea8044d22c465885d8Paul Stewart const DBus::Path &network_path, 5193c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr, 5203c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path *bss_path_ptr) { 5213c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (!network_path.empty()) { 5223c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(_)) 5233c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(network_path)); 5243c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), SelectNetwork(network_path)); 5253c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5263c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5273c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 5283c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 5293c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path(MakeNewEndpointAndService( 5303c5040174273386868cc8dea8044d22c465885d8Paul Stewart 0, 0, kNetworkModeAdHoc, &endpoint, &service)); 5313c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateAssociating)); 5323c5040174273386868cc8dea8044d22c465885d8Paul Stewart InitiateConnect(service); 5333c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 5343c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(GetPendingTimeout().IsCancelled()); 5353c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 5363c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 5373c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5383c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (bss_path_ptr) { 5393c5040174273386868cc8dea8044d22c465885d8Paul Stewart *bss_path_ptr = bss_path; 5403c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5413c5040174273386868cc8dea8044d22c465885d8Paul Stewart return service; 5423c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5433c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5443c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr SetupConnectedService( 5453c5040174273386868cc8dea8044d22c465885d8Paul Stewart const DBus::Path &network_path, 5463c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr, 5473c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path *bss_path_ptr) { 5483c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 5493c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path; 5503c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 5513c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(network_path, &endpoint, &bss_path); 5523c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 5533c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 5543c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5553c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (bss_path_ptr) { 5563c5040174273386868cc8dea8044d22c465885d8Paul Stewart *bss_path_ptr = bss_path; 5573c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 5583c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, NotifyCurrentEndpoint(EndpointMatch(endpoint))); 5593c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(bss_path); 5603c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetPendingTimeout().IsCancelled()); 5613c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 5623c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5633c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateConfiguring)); 5643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 5653c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 5660654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 5673c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 5683c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5693c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service, GetCurrentService()); 5703c5040174273386868cc8dea8044d22c465885d8Paul Stewart return service; 5711590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 572b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void FireScanTimer() { 573b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->ScanTimerHandler(); 574b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 5755a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie void TriggerFullScan() { 57668d4109ff0176f7e5a9b67b916478d638aac577aWade Guthrie wifi_->Scan(Device::kFullScan, NULL); 577c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley } 5781590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetCurrentService() { 5791590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->current_service_; 5801590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 581bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart void SetCurrentService(const WiFiServiceRefPtr &service) { 582bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart wifi_->current_service_ = service; 583bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart } 5843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFi::EndpointMap &GetEndpointMap() { 585165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->endpoint_by_rpcid_; 5863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5871590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetPendingService() { 5881590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->pending_service_; 5891590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 5902b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart const base::CancelableClosure &GetPendingTimeout() { 5912b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart return wifi_->pending_timeout_callback_; 5922b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart } 5931aff7307d462b0160e821607058fe13831d8ef63Paul Stewart const base::CancelableClosure &GetReconnectTimeoutCallback() { 594446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart return wifi_->reconnect_timeout_callback_; 595446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart } 5961aff7307d462b0160e821607058fe13831d8ef63Paul Stewart int GetReconnectTimeoutSeconds() { 5971aff7307d462b0160e821607058fe13831d8ef63Paul Stewart return WiFi::kReconnectTimeoutSeconds; 5981aff7307d462b0160e821607058fe13831d8ef63Paul Stewart } 599b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal const base::CancelableClosure &GetScanTimer() { 600b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal return wifi_->scan_timer_callback_; 601b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 6023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // note: the tests need the proxies referenced by WiFi (not the 603e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // proxies instantiated by WiFiObjectTest), to ensure that WiFi 6043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // sets up its proxies correctly. 6053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantProcessProxyInterface *GetSupplicantProcessProxy() { 6063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_process_proxy_.get(); 6073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 6083c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockSupplicantInterfaceProxy *GetSupplicantInterfaceProxyFromWiFi() { 6098a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal return dynamic_cast<MockSupplicantInterfaceProxy *>( 6108a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal wifi_->supplicant_interface_proxy_.get()); 6113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 6123c5040174273386868cc8dea8044d22c465885d8Paul Stewart // This function returns the supplicant interface proxy whether 6133c5040174273386868cc8dea8044d22c465885d8Paul Stewart // or not we have passed the instantiated object to the WiFi instance 6143c5040174273386868cc8dea8044d22c465885d8Paul Stewart // from WiFiObjectTest, so tests don't need to worry about when they 6153c5040174273386868cc8dea8044d22c465885d8Paul Stewart // set expectations relative to StartWiFi(). 6163c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockSupplicantInterfaceProxy *GetSupplicantInterfaceProxy() { 6173c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockSupplicantInterfaceProxy *proxy = GetSupplicantInterfaceProxyFromWiFi(); 6183c5040174273386868cc8dea8044d22c465885d8Paul Stewart return proxy ? proxy : supplicant_interface_proxy_.get(); 6193c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 620835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart MockSupplicantNetworkProxy *CreateSupplicantNetworkProxy() { 621835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart return new NiceMock<MockSupplicantNetworkProxy>(); 622835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart } 6237ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal const string &GetSupplicantState() { 6247ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return wifi_->supplicant_state_; 6257ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 626835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart void ClearCachedCredentials(const WiFiService *service) { 627835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart return wifi_->ClearCachedCredentials(service); 628835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart } 6290427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart void NotifyEndpointChanged(const WiFiEndpointConstRefPtr &endpoint) { 6300427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart wifi_->NotifyEndpointChanged(endpoint); 6310427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart } 632381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan bool RemoveNetwork(const ::DBus::Path &network) { 633381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan return wifi_->RemoveNetwork(network); 634381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan } 635261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal void RemoveBSS(const ::DBus::Path &bss_path); 6363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportBSS(const ::DBus::Path &bss_path, 6373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 6383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 6393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 640e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 6413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode); 642c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal void ReportIPConfigComplete() { 64379d74c9bdb654be48765c1e7aa416126ffd2ae5eDarin Petkov wifi_->OnIPConfigUpdated(dhcp_config_, true); 644c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal } 645f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal void ReportLinkUp() { 646f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi_->LinkEvent(IFF_LOWER_UP, IFF_LOWER_UP); 647f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 6483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportScanDone() { 6495a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Eliminate |scan_session| so |ScanDoneTask| doesn't launch another scan. 6505a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->scan_session_.reset(); 6515a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie wifi_->ScanDoneTask(); 6525a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Make a new |scan_session| so that future scanning is done with the mock. 6535a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie InstallMockScanSession(); 6545a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie } 6555a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie void ReportScanDoneKeepScanSession() { 656dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal wifi_->ScanDoneTask(); 6573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 6581590839e44a0e922d4763003a35dbd493509b705mukesh agrawal void ReportCurrentBSSChanged(const string &new_bss) { 6591590839e44a0e922d4763003a35dbd493509b705mukesh agrawal wifi_->CurrentBSSChanged(new_bss); 6601590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 6617ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void ReportStateChanged(const string &new_state) { 6627ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_->StateChanged(new_state); 6637ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 6645581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart void ReportWiFiDebugScopeChanged(bool enabled) { 6655581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart wifi_->OnWiFiDebugScopeChanged(enabled); 6665581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart } 667cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal void SetPendingService(const WiFiServiceRefPtr &service) { 668cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal wifi_->pending_service_ = service; 669cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal } 670bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal bool SetScanInterval(uint16_t interval_seconds, Error *error) { 671bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal return wifi_->SetScanInterval(interval_seconds, error); 672b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 673e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart uint16_t GetScanInterval() { 674e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart return wifi_->GetScanInterval(NULL); 675e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 6762b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void StartWiFi(bool supplicant_present) { 6772b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov wifi_->supplicant_present_ = supplicant_present; 678b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetEnabled(true); // Start(NULL, ResultCallback()); 6793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 6802b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void StartWiFi() { 6812b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov StartWiFi(true); 6822b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 6832f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal void OnAfterResume() { 6842f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal wifi_->OnAfterResume(); 6852f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal } 6862f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal void OnBeforeSuspend() { 6872f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal wifi_->OnBeforeSuspend(); 6882f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal } 6892b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void OnSupplicantAppear() { 6902b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov wifi_->OnSupplicantAppear(":1.7"); 6912b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(wifi_->supplicant_present_); 6922b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 6932b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void OnSupplicantVanish() { 6942b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov wifi_->OnSupplicantVanish(); 6952b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(wifi_->supplicant_present_); 6962b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 6972b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov bool GetSupplicantPresent() { 6982b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov return wifi_->supplicant_present_; 6992b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 7004a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov bool SetBgscanMethod(const string &method) { 7014a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ::DBus::Error error; 7024a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov return DBusAdaptor::SetProperty( 7034a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov wifi_->mutable_store(), 7044a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov flimflam::kBgscanMethodProperty, 7054a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov DBusAdaptor::StringToVariant(method), 7064a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov &error); 7074a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 7084a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 7094a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov void AppendBgscan(WiFiService *service, 7104a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov std::map<std::string, DBus::Variant> *service_params) { 7114a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov wifi_->AppendBgscan(service, service_params); 7124a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 7134a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 714bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart void ReportCertification(const map<string, ::DBus::Variant> &properties) { 715bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart wifi_->CertificationTask(properties); 716bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart } 71710ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 718db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart void ReportEAPEvent(const string &status, const string ¶meter) { 719db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart wifi_->EAPEventTask(status, parameter); 720db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart } 721db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 722e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart void RestartFastScanAttempts() { 723e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart wifi_->RestartFastScanAttempts(); 724e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 725e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 7261aff7307d462b0160e821607058fe13831d8ef63Paul Stewart void StartReconnectTimer() { 7271aff7307d462b0160e821607058fe13831d8ef63Paul Stewart wifi_->StartReconnectTimer(); 7281aff7307d462b0160e821607058fe13831d8ef63Paul Stewart } 7291aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 7301aff7307d462b0160e821607058fe13831d8ef63Paul Stewart void StopReconnectTimer() { 7311aff7307d462b0160e821607058fe13831d8ef63Paul Stewart wifi_->StopReconnectTimer(); 7321aff7307d462b0160e821607058fe13831d8ef63Paul Stewart } 7331aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 7343c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart void SetLinkMonitor(LinkMonitor *link_monitor) { 7353c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart wifi_->set_link_monitor(link_monitor); 7363c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart } 7373c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart 7381369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart bool SuspectCredentials(const WiFiService &service, 7391369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart Service::ConnectFailure *failure) { 7401369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart return wifi_->SuspectCredentials(service, failure); 7411369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart } 7421369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 7433c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart void OnLinkMonitorFailure() { 7443c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart wifi_->OnLinkMonitorFailure(); 7453c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart } 7463c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart 747bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal bool SetBgscanShortInterval(const uint16 &interval, Error *error) { 748bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal return wifi_->SetBgscanShortInterval(interval, error); 749bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal } 750bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal 751bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal bool SetBgscanSignalThreshold(const int32 &threshold, Error *error) { 752bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal return wifi_->SetBgscanSignalThreshold(threshold, error); 753bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal } 754bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal 75510ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart NiceMockControl *control_interface() { 75610ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart return &control_interface_; 75710ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart } 75810ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 75985aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart MockMetrics *metrics() { 76085aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart return &metrics_; 76185aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart } 76285aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart 7633239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal MockManager *manager() { 7643239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return &manager_; 7653239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 766d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 767d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDeviceInfo *device_info() { 768d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &device_info_; 769d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 770d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 771d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDHCPProvider *dhcp_provider() { 772d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &dhcp_provider_; 773d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 774d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 7753239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal const WiFiConstRefPtr wifi() const { 7763239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return wifi_; 7773239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 7783239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal 779b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal TestProxyFactory *proxy_factory() { 780b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return &proxy_factory_; 781b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 782b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 7833c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiProvider *wifi_provider() { 7843c5040174273386868cc8dea8044d22c465885d8Paul Stewart return &wifi_provider_; 7853c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 7863c5040174273386868cc8dea8044d22c465885d8Paul Stewart 787e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EventDispatcher *event_dispatcher_; 7885a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie MockScanSession *scan_session_; // Owned by |wifi_|. 7895c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal NiceMock<MockRTNLHandler> rtnl_handler_; 7905c05b2920be742d518829972127172481722058dmukesh agrawal MockTime time_; 7913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 793dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal NiceMockControl control_interface_; 7943426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le MockMetrics metrics_; 795f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockGLib glib_; 7962ae797d040b7261a5619c750e07037566bcb542bChris Masone MockManager manager_; 797c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal MockDeviceInfo device_info_; 7983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiRefPtr wifi_; 7993c5040174273386868cc8dea8044d22c465885d8Paul Stewart NiceMock<MockWiFiProvider> wifi_provider_; 8003c5040174273386868cc8dea8044d22c465885d8Paul Stewart int bss_counter_; 8013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // protected fields interspersed between private fields, due to 8033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // initialization order 8043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 8053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kDeviceName[]; 806626719f89881a949d8b5a8fa808beb924496489fChris Masone static const char kDeviceAddress[]; 8073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeAdHoc[]; 8083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeInfrastructure[]; 809446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart static const char kBSSName[]; 810446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart static const char kSSIDName[]; 8113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 812dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantProcessProxy> supplicant_process_proxy_; 813b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal scoped_ptr<MockSupplicantBSSProxy> supplicant_bss_proxy_; 814f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockDHCPProvider dhcp_provider_; 815f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal scoped_refptr<MockDHCPConfig> dhcp_config_; 816735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart 817735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart // These pointers track mock objects owned by the WiFi device instance 818735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart // and manager so we can perform expectations against them. 819735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart MockDBusManager *dbus_manager_; 820735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart MockSupplicantEAPStateHandler *eap_state_handler_; 821bb9fca2e550f92d694867f0bcf0efe9426dfc2bbWade Guthrie MockNetlinkManager netlink_manager_; 8223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 8243c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<MockSupplicantInterfaceProxy> supplicant_interface_proxy_; 825835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart NiceMock<TestProxyFactory> proxy_factory_; 8263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal}; 8273195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 828e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kDeviceName[] = "wlan0"; 829e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kDeviceAddress[] = "000102030405"; 830e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kNetworkModeAdHoc[] = "ad-hoc"; 831e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kNetworkModeInfrastructure[] = "infrastructure"; 832446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewartconst char WiFiObjectTest::kBSSName[] = "bss0"; 833446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewartconst char WiFiObjectTest::kSSIDName[] = "ssid0"; 8343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 835e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartvoid WiFiObjectTest::RemoveBSS(const ::DBus::Path &bss_path) { 836b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSRemovedTask(bss_path); 837261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 838261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 839e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartvoid WiFiObjectTest::ReportBSS(const ::DBus::Path &bss_path, 8403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 8413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 8423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 843e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 8443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode) { 8453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal map<string, ::DBus::Variant> bss_properties; 8463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 8483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["SSID"].writer()); 8493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << vector<uint8_t>(ssid.begin(), ssid.end()); 8503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 8513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 8523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal string bssid_nosep; 8533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal vector<uint8_t> bssid_bytes; 8543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal RemoveChars(bssid, ":", &bssid_nosep); 8553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal base::HexStringToBytes(bssid_nosep, &bssid_bytes); 8563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["BSSID"].writer()); 8583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << bssid_bytes; 8593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 8600654ece95920696c530ce1c0344365eb741f7efePaul Stewart bss_properties[WPASupplicant::kBSSPropertySignal].writer(). 861e41a72d0737488d561a4158019409d5785dad61bThieu Le append_int16(signal_strength); 8620654ece95920696c530ce1c0344365eb741f7efePaul Stewart bss_properties[WPASupplicant::kBSSPropertyFrequency].writer(). 863e41a72d0737488d561a4158019409d5785dad61bThieu Le append_uint16(frequency); 8640654ece95920696c530ce1c0344365eb741f7efePaul Stewart bss_properties[WPASupplicant::kBSSPropertyMode].writer().append_string(mode); 865b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSAddedTask(bss_path, bss_properties); 8663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 8673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 868e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul StewartWiFiObjectTest::TestProxyFactory::TestProxyFactory(WiFiObjectTest *test) 869b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal : test_(test) { 870b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*this, CreateSupplicantBSSProxy(_, _, _)).Times(AnyNumber()); 871b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ON_CALL(*this, CreateSupplicantBSSProxy(_, _, _)) 872b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal .WillByDefault( 873b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Invoke(this, (&TestProxyFactory::CreateSupplicantBSSProxyInternal))); 874b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 875b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 876e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// Most of our tests involve using a real EventDispatcher object. 877e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartclass WiFiMainTest : public WiFiObjectTest { 878e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart public: 879e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiMainTest() : WiFiObjectTest(&dispatcher_) {} 880e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 881e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart protected: 882e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EventDispatcher dispatcher_; 883e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart}; 884e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 8853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ProxiesSetUpDuringStart) { 8863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 8873c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetSupplicantInterfaceProxyFromWiFi() == NULL); 8883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 8903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 8913c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(GetSupplicantInterfaceProxyFromWiFi() == NULL); 8923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 8933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8942b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, SupplicantPresent) { 8952b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(GetSupplicantPresent()); 8962b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 8972b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8982b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantAppearStarted) { 8992b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 9002b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 9010654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*dbus_manager_, WatchName(WPASupplicant::kDBusAddr, _, _)); 9022b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov StartWiFi(false); // No supplicant present. 9032b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 9042b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 9052b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantAppear(); 9062b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 9079cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov 9089cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // If supplicant reappears while the device is started, the device should be 9099cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // restarted. 9109cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)); 9119cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov EXPECT_CALL(*manager(), RegisterDevice(_)); 9129cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov OnSupplicantAppear(); 9132b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 9142b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 9152b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantAppearStopped) { 9162b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 9172b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 9182b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantAppear(); 9192b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 9209cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov 9219cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // If supplicant reappears while the device is stopped, the device should not 9229cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // be restarted. 9239cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)).Times(0); 9249cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov OnSupplicantAppear(); 9252b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 9262b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 9272b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantVanishStarted) { 9282b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 9292b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 9302b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov StartWiFi(); 9312b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 9322b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantPresent()); 9332b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 9342b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)); 9352b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*manager(), RegisterDevice(_)); 9362b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantVanish(); 9372b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 9382b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 9392b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantVanishStopped) { 9402b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantAppear(); 9412b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantPresent()); 9422b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)).Times(0); 9432b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantVanish(); 9442b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 9452b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 946549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul StewartTEST_F(WiFiMainTest, OnSupplicantVanishedWhileConnected) { 9473c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 9483c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 9493c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 9503c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, NULL)); 951549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart ScopedMockLog log; 952549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 953c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 954549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EndsWith("silently resetting current_service_."))); 955549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_CALL(*manager(), DeregisterDevice(_)) 956549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart .WillOnce(InvokeWithoutArgs(this, &WiFiObjectTest::StopWiFi)); 9573c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<EndpointRemovalHandler> handler( 9583c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeEndpointRemovalHandler(service)); 9593c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 9603c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Invoke(handler.get(), 9613c5040174273386868cc8dea8044d22c465885d8Paul Stewart &EndpointRemovalHandler::OnEndpointRemoved)); 9623c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 963549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_CALL(*manager(), RegisterDevice(_)); 964549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart OnSupplicantVanish(); 965549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_TRUE(GetCurrentService() == NULL); 966549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart} 967549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart 9685a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, CleanStart_FullScan) { 9695a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 9703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 9713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 9723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 9733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 9743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 9753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceUnknown", 9763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 977b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 9783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 9793c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 9803239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 981b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 9823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 9833195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 9845a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, CleanStart) { 9855a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 9865a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 9875a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie .Times(AnyNumber()) 9885a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie .WillRepeatedly(Throw( 9895a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie DBus::Error( 9905a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie "fi.w1.wpa_supplicant1.InterfaceUnknown", 9915a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 9925a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_TRUE(GetScanTimer().IsCancelled()); 9935a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 9945a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 9955a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 9965a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_FALSE(GetScanTimer().IsCancelled()); 9975a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 9985a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 999835934a8e009edf3b6b73717fe3ed336d6720d68Paul StewartTEST_F(WiFiMainTest, ClearCachedCredentials) { 10003c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 1001835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart DBus::Path network = "/test/path"; 10023c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(network, NULL, NULL)); 10033c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)); 1004835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart ClearCachedCredentials(service); 1005835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart} 1006835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 10070427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul StewartTEST_F(WiFiMainTest, NotifyEndpointChanged) { 10080427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart WiFiEndpointRefPtr endpoint = 10090427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart MakeEndpointWithMode("ssid", "00:00:00:00:00:00", kNetworkModeAdHoc); 10100427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointUpdated(EndpointMatch(endpoint))); 10110427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart NotifyEndpointChanged(endpoint); 10120427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart} 10130427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart 1014381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetwork) { 1015381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 1016381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 10173c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)); 1018381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_TRUE(RemoveNetwork(network)); 1019381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 1020381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 1021381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetworkWhenSupplicantReturnsNetworkUnknown) { 1022381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 10233c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)) 1024381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan .WillRepeatedly(Throw( 1025381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Error( 1026381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "fi.w1.wpa_supplicant1.NetworkUnknown", 1027381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "test threw fi.w1.wpa_supplicant1.NetworkUnknown"))); 1028381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 1029381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_TRUE(RemoveNetwork(network)); 1030381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 1031381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 1032ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman UgurayTEST_F(WiFiMainTest, UseArpGateway) { 1033ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray EXPECT_CALL(dhcp_provider_, CreateConfig(kDeviceName, _, _, true)) 1034ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray .WillOnce(Return(dhcp_config_)); 1035ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray const_cast<WiFi *>(wifi().get())->AcquireIPConfig(); 1036ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray} 1037ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray 1038381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetworkWhenSupplicantReturnsInvalidArgs) { 1039381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 10403c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)) 1041381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan .WillRepeatedly(Throw( 1042381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Error( 1043381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "fi.w1.wpa_supplicant1.InvalidArgs", 1044381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "test threw fi.w1.wpa_supplicant1.InvalidArgs"))); 1045381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 1046381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_FALSE(RemoveNetwork(network)); 1047381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 1048381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 1049381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetworkWhenSupplicantReturnsUnknownError) { 1050381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 10513c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)) 1052381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan .WillRepeatedly(Throw( 1053381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Error( 1054381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "fi.w1.wpa_supplicant1.UnknownError", 1055381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "test threw fi.w1.wpa_supplicant1.UnknownError"))); 1056381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 1057381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_FALSE(RemoveNetwork(network)); 1058381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 1059381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 10605a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, Restart_FullScan) { 10615a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 10623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)) 10633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 10643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 10653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 10663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceExists", 10672b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov "test threw fi.w1.wpa_supplicant1.InterfaceExists"))); 10683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)); 10693c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 10703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 10713239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 10723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 10733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 10745a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, Restart) { 10755a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)) 10765a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie .Times(AnyNumber()) 10775a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie .WillRepeatedly(Throw( 10785a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie DBus::Error( 10795a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie "fi.w1.wpa_supplicant1.InterfaceExists", 10805a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie "test threw fi.w1.wpa_supplicant1.InterfaceExists"))); 10815a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 10825a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 10835a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 10845a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 10855a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 10863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, StartClearsState) { 10873c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveAllNetworks()); 10883c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), FlushBSS(_)); 10893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 10903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 10913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 10925a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, NoScansWhileConnecting_FullScan) { 10935a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 1094c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley StartWiFi(); 10953c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 10963c5040174273386868cc8dea8044d22c465885d8Paul Stewart dispatcher_.DispatchPendingEvents(); 10973c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 10983c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1099c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley SetPendingService(service); 1100c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley // If we're connecting, we ignore scan requests to stay on channel. 11013c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(true)); 1102c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 11035a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie TriggerFullScan(); 1104c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 1105c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11063c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 11073c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(false)); 1108c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 11095a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie TriggerFullScan(); 1110c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 1111c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11123c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 1113c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley // Similarly, ignore scans when our connected service is reconnecting. 1114c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley SetPendingService(NULL); 1115c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley SetCurrentService(service); 11163c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(true)); 1117c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 11185a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie TriggerFullScan(); 1119c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 1120c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11213c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 1122c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley // But otherwise we'll honor the request. 11233c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(false)); 1124c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 11255a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie TriggerFullScan(); 1126c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 1127c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11283c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 1129c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley} 1130c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley 11315a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, NoScansWhileConnecting) { 11325a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 11335a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 11345a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 11355a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11365a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 11375a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie SetPendingService(service); 11385a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // If we're connecting, we ignore scan requests to stay on channel. 11395a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(true)); 11405a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 11415a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 11425a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie TriggerFullScan(); 11435a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 11445a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11455a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(service); 11465a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(false)); 11475a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 11485a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 11495a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie TriggerFullScan(); 11505a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 11515a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11525a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(service); 11535a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Similarly, ignore scans when our connected service is reconnecting. 11545a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie SetPendingService(NULL); 11555a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie SetCurrentService(service); 11565a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(true)); 11575a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 11585a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 11595a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie TriggerFullScan(); 11605a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 11615a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11625a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(service); 11635a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // But otherwise we'll honor the request. 11645a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(false)); 11655a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 11665a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 11675a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie TriggerFullScan(); 11685a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 11695a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11705a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(service); 11715a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 11725a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 11735a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ResumeStartsScanWhenIdle_FullScan) { 11745a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 11753c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1176ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 1177ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 11783c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11795c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 1180ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 1181ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 11822f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnAfterResume(); 1183ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 1184ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 1185ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 11865a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ResumeStartsScanWhenIdle) { 11875a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 11885a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 11895a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 11905a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11915a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ReportScanDone(); 11925a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ASSERT_TRUE(wifi()->IsIdle()); 11935a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 11945a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 11955a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie OnAfterResume(); 11965a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 11975a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 11985a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 11995a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, SuspendDoesNotStartScan_FullScan) { 12005a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 12013c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1202ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 1203ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 12043c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 1205ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 1206ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 12072f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnBeforeSuspend(); 1208ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 1209ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 1210ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 12115a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, SuspendDoesNotStartScan) { 12125a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 12135a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 12145a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 12155a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 12165a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ASSERT_TRUE(wifi()->IsIdle()); 12175a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 12185a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 12195a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie OnBeforeSuspend(); 12205a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 12215a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 12225a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 12235a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ResumeDoesNotStartScanWhenNotIdle_FullScan) { 12245a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 12253c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1226ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 1227ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 12283c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 12293c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(DBus::Path(), NULL, NULL)); 12303c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(wifi()->IsIdle()); 12313c5040174273386868cc8dea8044d22c465885d8Paul Stewart ScopedMockLog log; 12323ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 12333ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal EXPECT_CALL(log, Log(_, _, EndsWith("already scanning or connected."))); 1234ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 12352f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnAfterResume(); 1236ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 1237ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 1238ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 12395a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ResumeDoesNotStartScanWhenNotIdle) { 12405a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 12415a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 12425a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 12435a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 12445a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie WiFiServiceRefPtr service(SetupConnectedService(DBus::Path(), NULL, NULL)); 12455a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_FALSE(wifi()->IsIdle()); 12465a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ScopedMockLog log; 12475a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 12485a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(log, Log(_, _, EndsWith("already scanning or connected."))); 12495a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 12505a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 12515a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie OnAfterResume(); 12525a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 12535a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 12545a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 12553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResults) { 12563c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(_)).Times(5); 12573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 1258e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 12593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 1260e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 12613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 1262e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 12633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 1264e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss3", "ssid3", "00:00:00:00:00:03", 3, 0, kNetworkModeInfrastructure); 1265e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency = 2412; 1266e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss4", "ssid4", "00:00:00:00:00:04", 4, frequency, 1267e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeAdHoc); 1268e41a72d0737488d561a4158019409d5785dad61bThieu Le 1269e41a72d0737488d561a4158019409d5785dad61bThieu Le const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 1270e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(5, endpoints_by_rpcid.size()); 1271e41a72d0737488d561a4158019409d5785dad61bThieu Le 1272e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFi::EndpointMap::const_iterator i; 1273e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFiEndpointRefPtr endpoint; 1274e41a72d0737488d561a4158019409d5785dad61bThieu Le for (i = endpoints_by_rpcid.begin(); 1275e41a72d0737488d561a4158019409d5785dad61bThieu Le i != endpoints_by_rpcid.end(); 1276e41a72d0737488d561a4158019409d5785dad61bThieu Le ++i) { 1277e41a72d0737488d561a4158019409d5785dad61bThieu Le if (i->second->bssid_string() == "00:00:00:00:00:04") 1278e41a72d0737488d561a4158019409d5785dad61bThieu Le break; 1279e41a72d0737488d561a4158019409d5785dad61bThieu Le } 1280e41a72d0737488d561a4158019409d5785dad61bThieu Le ASSERT_TRUE(i != endpoints_by_rpcid.end()); 1281e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(4, i->second->signal_strength()); 1282e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency, i->second->frequency()); 1283e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ("adhoc", i->second->network_mode()); 12843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 12853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 12863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanCompleted) { 12873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 12883c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr ap0 = MakeEndpointWithMode("ssid0", "00:00:00:00:00:00", 12893c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeAdHoc); 12903c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr ap1 = MakeEndpoint("ssid1", "00:00:00:00:00:01"); 12913c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr ap2 = MakeEndpoint("ssid2", "00:00:00:00:00:02"); 12923c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(EndpointMatch(ap0))).Times(1); 12933c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(EndpointMatch(ap1))).Times(1); 12943c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(EndpointMatch(ap2))).Times(1); 12953c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS("bss0", ap0->ssid_string(), ap0->bssid_string(), 0, 0, 12963c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeAdHoc); 12973c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS("bss1", ap1->ssid_string(), ap1->bssid_string(), 0, 0, 12983c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeInfrastructure); 12993c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS("bss2", ap2->ssid_string(), ap2->bssid_string(), 0, 0, 13003c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeInfrastructure); 13013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 13023c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(wifi_provider()); 13033c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13043c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(_)).Times(0); 1305b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 1306e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with SSIDs that start with NULL should be filtered. 1307e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss3", string(1, 0), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 1308b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 1309e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with empty SSIDs should be filtered. 1310e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss3", string(), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 13118a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 13128a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 13138a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemovedWhileConnected) { 13148a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 13153c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 13163c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path bss_path; 13173c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 13183c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, &bss_path)); 13193c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<EndpointRemovalHandler> handler( 13203c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeEndpointRemovalHandler(service)); 13213c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 13223c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Invoke(handler.get(), 13233c5040174273386868cc8dea8044d22c465885d8Paul Stewart &EndpointRemovalHandler::OnEndpointRemoved)); 13248a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 13253c5040174273386868cc8dea8044d22c465885d8Paul Stewart RemoveBSS(bss_path); 1326261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 1327261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 1328261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonSolitaryBSSRemoved) { 1329261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 13303c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 13313c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path bss_path; 13323c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 13333c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, &bss_path)); 13343c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 13353c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 13363c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 13373c5040174273386868cc8dea8044d22c465885d8Paul Stewart RemoveBSS(bss_path); 13383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 13393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1340835934a8e009edf3b6b73717fe3ed336d6720d68Paul StewartTEST_F(WiFiMainTest, ReconnectPreservesDBusPath) { 1341835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart StartWiFi(); 13423c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path kPath = "/test/path"; 13433c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 1344835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 1345835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // Return the service to a connectable state. 13463c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 1347835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart InitiateDisconnect(service); 13483c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 13493c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13503c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Complete the disconnection by reporting a BSS change. 13510654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 1352835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 1353835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // A second connection attempt should remember the DBus path associated 1354835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // with this service. 13553c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(_)).Times(0); 13563c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), SelectNetwork(kPath)); 1357835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart InitiateConnect(service); 1358835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart} 1359835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 13600ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingService) { 13610ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 13623c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 13633c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 13643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetPendingService() == service.get()); 13653c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 13663c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateIdle)).Times(AtLeast(1)); 13670ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 13683c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service.get()); 13690ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetPendingService() == NULL); 13700ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 13710ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 13720ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingServiceWithCurrent) { 13730ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 13743c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0( 13753c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL)); 13763c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0, GetCurrentService()); 13773c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetPendingService().get()); 13780ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 13793c5040174273386868cc8dea8044d22c465885d8Paul Stewart // We don't explicitly call Disconnect() while transitioning to a new 13803c5040174273386868cc8dea8044d22c465885d8Paul Stewart // service. Instead, we use the side-effect of SelectNetwork (verified in 13813c5040174273386868cc8dea8044d22c465885d8Paul Stewart // SetupConnectingService). 13823c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 13833c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1( 13843c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService("/new/path", NULL, NULL)); 13853c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 13860ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 13870ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 13880ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 13893c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, SetState(Service::kStateIdle)).Times(AtLeast(1)); 13903c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 13910ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service1); 13923c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service1.get()); 13930ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 13940ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| will be unchanged until supplicant signals 13950ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // that CurrentBSS has changed. 13960ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 13970ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |pending_service_| is updated immediately. 13983c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetPendingService().get()); 13992b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_TRUE(GetPendingTimeout().IsCancelled()); 14000ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 14010ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 14020ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentService) { 14033c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 14043c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path kPath("/fake/path"); 14053c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 14063c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 14070ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 14080ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 14090ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| should not change until supplicant reports 14100ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // a BSS change. 14110ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 1412835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 1413835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // Expect that the entry associated with this network will be disabled. 1414835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart MockSupplicantNetworkProxy *network_proxy = CreateSupplicantNetworkProxy(); 1415835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart EXPECT_CALL(*proxy_factory(), CreateSupplicantNetworkProxy( 14160654ece95920696c530ce1c0344365eb741f7efePaul Stewart kPath, WPASupplicant::kDBusAddr)) 1417835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart .WillOnce(Return(network_proxy)); 1418835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart EXPECT_CALL(*network_proxy, SetEnabled(false)); 1419735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(*eap_state_handler_, Reset()); 14203c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)).Times(0); 14210654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 14223c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetCurrentService().get()); 14233c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 14240ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 14250ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 1426c618448120f8945d77d451242a7de6782d1e4189Christopher WileyTEST_F(WiFiMainTest, DisconnectCurrentServiceWithErrors) { 14273c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 14283c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path kPath("/fake/path"); 14293c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 14303c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()) 1431c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley .WillOnce(InvokeWithoutArgs(this, (&WiFiMainTest::ThrowDBusError))); 14323c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)).Times(1); 1433c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley InitiateDisconnect(service); 1434c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley 1435c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley // We may sometimes fail to disconnect via supplicant, and we patch up some 1436c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley // state when this happens. 1437c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley EXPECT_EQ(NULL, GetCurrentService().get()); 1438c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley EXPECT_EQ(NULL, wifi()->selected_service().get()); 1439c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley} 1440c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley 14410ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceWithPending) { 14420ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 14433c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service0(SetupConnectedService(DBus::Path(), NULL, NULL)); 14443c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service1(SetupConnectingService(DBus::Path(), NULL, NULL)); 14450ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 14460ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 14473c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 14480ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service0); 14490ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 14500ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 14510ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 14522b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_FALSE(GetPendingTimeout().IsCancelled()); 14532b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart} 14542b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart 145517d9065896fd3fd38fbca2e5d791505888f1bdb6Paul StewartTEST_F(WiFiMainTest, TimeoutPendingServiceWithEndpoints) { 145617d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart StartWiFi(); 145717d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart const base::CancelableClosure &pending_timeout = GetPendingTimeout(); 145817d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_TRUE(pending_timeout.IsCancelled()); 145917d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart MockWiFiServiceRefPtr service( 146017d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 146117d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_FALSE(pending_timeout.IsCancelled()); 146217d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_EQ(service, GetPendingService()); 146317d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart // Simulate a service with a wifi_ reference calling DisconnectFrom(). 146417d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(Service::kFailureOutOfRange, _)) 146517d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart .WillOnce(InvokeWithoutArgs(this, &WiFiObjectTest::ResetPendingService)); 146617d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_CALL(*service, HasEndpoints()).Times(0); 146717d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart // DisconnectFrom() should not be called directly from WiFi. 146817d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateIdle)).Times(0); 146917d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 147017d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart pending_timeout.callback().Run(); 147117d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart Mock::VerifyAndClearExpectations(service); 147217d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart} 147317d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart 147417d9065896fd3fd38fbca2e5d791505888f1bdb6Paul StewartTEST_F(WiFiMainTest, TimeoutPendingServiceWithoutEndpoints) { 14752b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart StartWiFi(); 14762b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart const base::CancelableClosure &pending_timeout = GetPendingTimeout(); 14772b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_TRUE(pending_timeout.IsCancelled()); 14783c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 14793c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 14802b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_FALSE(pending_timeout.IsCancelled()); 14812b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_EQ(service, GetPendingService()); 148217d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart // We expect the service to get a disconnect call, but in this scenario 148317d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart // the service does nothing. 14843c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(Service::kFailureOutOfRange, _)); 148517d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_CALL(*service, HasEndpoints()).WillOnce(Return(false)); 148617d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart // DisconnectFrom() should be called directly from WiFi. 148717d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateIdle)).Times(AtLeast(1)); 148817d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 14893c5040174273386868cc8dea8044d22c465885d8Paul Stewart pending_timeout.callback().Run(); 149017d9065896fd3fd38fbca2e5d791505888f1bdb6Paul Stewart EXPECT_EQ(NULL, GetPendingService().get()); 14910ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 14920ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 14930ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectInvalidService) { 14940ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 14953c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 14963c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, &service); 14973c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 14980ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 14990ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 15000ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 15010ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceFailure) { 15023c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 15033c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path kPath("/fake/path"); 15043c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 15053c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()) 15060ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .WillRepeatedly(Throw( 15070ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal DBus::Error( 15080ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "fi.w1.wpa_supplicant1.NotConnected", 15090ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "test threw fi.w1.wpa_supplicant1.NotConnected"))); 15103c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)); 15110ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 15123c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetCurrentService().get()); 15130ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 15140ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 15155c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawalTEST_F(WiFiMainTest, Stop) { 1516c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 15173c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint0; 15183c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path kPath("/fake/path"); 15193c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service0(SetupConnectedService(kPath, &endpoint0, NULL)); 15203c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint1; 15213c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, &endpoint1, NULL); 15223c5040174273386868cc8dea8044d22c465885d8Paul Stewart 15233c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint0))) 15243c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 15253c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint1))) 15263c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 15273c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)).Times(1); 1528c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StopWiFi(); 1529b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1530c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal EXPECT_FALSE(wifi()->weak_ptr_factory_.HasWeakPtrs()); 15315c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal} 15325c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 1533549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul StewartTEST_F(WiFiMainTest, StopWhileConnected) { 15343c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 15353c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 15363c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 15373c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, NULL)); 15383c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<EndpointRemovalHandler> handler( 15393c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeEndpointRemovalHandler(service)); 15403c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 15413c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Invoke(handler.get(), 15423c5040174273386868cc8dea8044d22c465885d8Paul Stewart &EndpointRemovalHandler::OnEndpointRemoved)); 15433c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 1544549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart StopWiFi(); 1545549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_TRUE(GetCurrentService() == NULL); 1546549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart} 1547549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart 1548446639208c7678fd0ef452caf8ce63b6596d25e2Paul StewartTEST_F(WiFiMainTest, ReconnectTimer) { 15493c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 15503c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 15513c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL)); 15523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnected()).WillRepeatedly(Return(true)); 15531aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 15540654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateDisconnected); 15551aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_FALSE(GetReconnectTimeoutCallback().IsCancelled()); 15560654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 15571aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 15580654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateDisconnected); 15591aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_FALSE(GetReconnectTimeoutCallback().IsCancelled()); 1560446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart ReportCurrentBSSChanged(kBSSName); 15611aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 15620654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateDisconnected); 15631aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_FALSE(GetReconnectTimeoutCallback().IsCancelled()); 15643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 15651aff7307d462b0160e821607058fe13831d8ef63Paul Stewart GetReconnectTimeoutCallback().callback().Run(); 15663c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 15671aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 1568446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart} 1569446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart 1570cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart 15715a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieMATCHER_P(HasHiddenSSID_FullScan, ssid, "") { 1572a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart map<string, DBus::Variant>::const_iterator it = 15730654ece95920696c530ce1c0344365eb741f7efePaul Stewart arg.find(WPASupplicant::kPropertyScanSSIDs); 1574ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart if (it == arg.end()) { 1575ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return false; 1576ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 1577ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1578ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const DBus::Variant &ssids_variant = it->second; 1579ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_TRUE(DBusAdaptor::IsByteArrays(ssids_variant.signature())); 1580ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const ByteArrays &ssids = it->second.operator ByteArrays(); 1581ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // A valid Scan containing a single hidden SSID should contain 1582ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // two SSID entries: one containing the SSID we are looking for, 1583ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // and an empty entry, signifying that we also want to do a 1584ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // broadcast probe request for all non-hidden APs as well. 15853c5040174273386868cc8dea8044d22c465885d8Paul Stewart return ssids.size() == 2 && ssids[0] == ssid && ssids[1].empty(); 15863c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 15873c5040174273386868cc8dea8044d22c465885d8Paul Stewart 15885a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieMATCHER(HasNoHiddenSSID_FullScan, "") { 15893c5040174273386868cc8dea8044d22c465885d8Paul Stewart map<string, DBus::Variant>::const_iterator it = 15900654ece95920696c530ce1c0344365eb741f7efePaul Stewart arg.find(WPASupplicant::kPropertyScanSSIDs); 15913c5040174273386868cc8dea8044d22c465885d8Paul Stewart return it == arg.end(); 1592ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1593ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 15945a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ScanHidden_FullScan) { 15955a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 15963c5040174273386868cc8dea8044d22c465885d8Paul Stewart vector<uint8_t>kSSID(1, 'a'); 15973c5040174273386868cc8dea8044d22c465885d8Paul Stewart ByteArrays ssids; 15983c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssids.push_back(kSSID); 15993c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16003c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 16013c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()).WillOnce(Return(ssids)); 16025a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), 16035a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Scan(HasHiddenSSID_FullScan(kSSID))); 16043c5040174273386868cc8dea8044d22c465885d8Paul Stewart dispatcher_.DispatchPendingEvents(); 16053c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 16063c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16075a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie// This test is slightly different from the test in scan_session_unittest.cc 16085a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie// because this tests the piece of WiFi that builds the SSID list. 16095a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ScanHidden) { 16105a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Clear the Mock ScanSession because hidden SSIDs are added when wifi 16115a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // instantiates a new ScanSession (and it won't instantiate a new ScanSession 16125a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // if there's already one there). 16135a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ClearScanSession(); 16145a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie vector<uint8_t>kSSID(1, 'a'); 16155a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ByteArrays ssids; 16165a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ssids.push_back(kSSID); 16175a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 16187347bf2b466ae8058e47b29aaf0583390405d866Wade Guthrie EXPECT_CALL(netlink_manager_, SendNl80211Message( 16197347bf2b466ae8058e47b29aaf0583390405d866Wade Guthrie IsNl80211Command(kNl80211FamilyId, NL80211_CMD_GET_WIPHY), _, _)); 16205a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()).WillOnce(Return(ssids)); 1621ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart StartWiFi(); 16225a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(netlink_manager_, 16237347bf2b466ae8058e47b29aaf0583390405d866Wade Guthrie SendNl80211Message(HasHiddenSSID(kNl80211FamilyId), _, _)); 16245a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 16255a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 16265a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 16275a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ScanNoHidden_FullScan) { 16285a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 16295a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 16305a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 16315a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie .WillOnce(Return(ByteArrays())); 16325a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(HasNoHiddenSSID_FullScan())); 16335a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 16345a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 16355a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 16365a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie// This test is slightly different from the test in scan_session_unittest.cc 16375a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie// because this tests the piece of WiFi that builds the SSID list. 16385a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ScanNoHidden) { 16395a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Clear the Mock ScanSession because hidden SSIDs are added when wifi 16405a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // instantiates a new ScanSession (and it won't instantiate a new ScanSession 16415a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // if there's already one there). 16425a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ClearScanSession(); 16437347bf2b466ae8058e47b29aaf0583390405d866Wade Guthrie EXPECT_CALL(netlink_manager_, SendNl80211Message( 16447347bf2b466ae8058e47b29aaf0583390405d866Wade Guthrie IsNl80211Command(kNl80211FamilyId, NL80211_CMD_GET_WIPHY), _, _)); 16453c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 16463c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(ByteArrays())); 16475a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 16485a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(netlink_manager_, 16497347bf2b466ae8058e47b29aaf0583390405d866Wade Guthrie SendNl80211Message(HasNoHiddenSSID(kNl80211FamilyId), _, _)); 1650ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart dispatcher_.DispatchPendingEvents(); 1651ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1652ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1653fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul StewartTEST_F(WiFiMainTest, ScanWiFiDisabledAfterResume) { 1654fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart ScopedMockLog log; 1655fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 1656fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart EXPECT_CALL(log, Log(_, _, EndsWith( 1657fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart "Ignoring scan request while device is not enabled."))).Times(1); 16583c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 16595a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 1660fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart StartWiFi(); 1661fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart StopWiFi(); 1662fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart // A scan is queued when WiFi resumes. 1663fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart OnAfterResume(); 1664fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart dispatcher_.DispatchPendingEvents(); 1665fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart} 1666fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart 16675a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ProgressiveScanFound) { 16685a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Set min & max scan frequency count to 1 so each scan will be of a single 16695a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // frequency. 16705a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie SetScanSize(1, 1); 16715a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 16725a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Do the first scan (finds nothing). 16735a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 16745a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 16755a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 16765a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ReportScanDoneKeepScanSession(); 16775a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 16785a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Do the second scan (connects afterwards). 16795a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 16805a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 16815a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ReportScanDoneKeepScanSession(); 16825a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 16835a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Connect after second scan. 16845a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 16855a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie SetPendingService(service); 16865a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 16875a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Verify that the third scan aborts and there is no further scan. 16885a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ScopedMockLog log; 16895a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 16905a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(log, Log(_, _, EndsWith( 16915a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie "Ignoring scan request while connecting to an AP."))).Times(1); 16925a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*metrics(), NotifyDeviceScanFinished(_)); 16935a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 16945a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 16955a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 16965a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 16975a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 16985a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ProgressiveScanNotFound) { 16995a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Set min & max scan frequency count to 1 so each scan will be of a single 17005a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // frequency. 17015a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie SetScanSize(1, 1); 17025a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 17035a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Do the first scan (finds nothing). 17045a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 17055a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 17065a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 17075a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ReportScanDoneKeepScanSession(); 17085a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 17095a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Do the second scan (finds nothing). 17105a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 17115a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 17125a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ReportScanDoneKeepScanSession(); 17135a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 17145a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Do the third scan. After (simulated) exhausting of search frequencies, 17155a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // verify that this scan uses supplicant rather than internal (progressive) 17165a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // scan. 17175a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, HasMoreFrequencies()).WillOnce(Return(false)); 17185a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 17195a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 17205a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 17215a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 17225a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // And verify that ScanDone reports a complete scan (i.e., the 17235a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // wifi_::scan_session_ has truly been cleared). 17245a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*metrics(), NotifyDeviceScanFinished(_)); 17255a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ReportScanDoneKeepScanSession(); 17265a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 17275a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 17285a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ProgressiveScanError) { 17295a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // Clear the Mock ScanSession so I can get an actual ScanSession. 17305a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ClearScanSession(); 17315a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 17325a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 17335a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie // This should call |Scan| which posts |ScanTask| 17345a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie NewScanResultsMessage not_supposed_to_get_this_message; 17355a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie OnTriggerScanResponse(not_supposed_to_get_this_message); 17365a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 17375a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_TRUE(IsScanSessionNull()); 17385a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 17395a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 17405a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 17415a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 17427ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, InitialSupplicantState) { 17437ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(WiFi::kInterfaceStateUnknown, GetSupplicantState()); 17447ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 17457ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 17467ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeNoService) { 17477ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // State change should succeed even if there is no pending Service. 17480654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateScanning); 17490654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kInterfaceStateScanning, GetSupplicantState()); 17507ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 17517ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 17527ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeWithService) { 17537ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Forward transition should trigger a Service state change. 17547ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 17557ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 1756cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 17577ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 17587ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 17590654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateAssociated); 17607ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 17617ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 17627ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 1763d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 17647ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 17657ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 17667ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeBackwardsWithService) { 17677ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Some backwards transitions should not trigger a Service state change. 17687ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Supplicant state should still be updated, however. 1769d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1770d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 17717ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 17727ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 1773cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 17742b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 1775d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(Service::kStateConfiguring)); 17767ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 17770654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 17780654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateAuthenticating); 17790654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kInterfaceStateAuthenticating, 17807ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal GetSupplicantState()); 17817ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 17827ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 17833c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 17843c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(_)).Times(AnyNumber()); 17857ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 17867ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 1787a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul StewartTEST_F(WiFiMainTest, ConnectToServiceWithoutRecentIssues) { 1788a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockSupplicantProcessProxy *process_proxy = supplicant_process_proxy_.get(); 1789a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart StartWiFi(); 1790a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart dispatcher_.DispatchPendingEvents(); 1791a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1792a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()).Times(0); 1793a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 1794a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*service.get(), HasRecentConnectionIssues()) 1795a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .WillOnce(Return(false)); 1796a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart InitiateConnect(service); 1797a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart} 1798a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1799a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul StewartTEST_F(WiFiMainTest, ConnectToServiceWithRecentIssues) { 1800a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // Turn of WiFi debugging, so the only reason we will turn on supplicant 1801a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // debugging will be to debug a problematic connection. 1802a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart ScopeLogger::GetInstance()->EnableScopesByName("-wifi"); 1803a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1804a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockSupplicantProcessProxy *process_proxy = supplicant_process_proxy_.get(); 1805a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart StartWiFi(); 1806a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart dispatcher_.DispatchPendingEvents(); 1807a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1808a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 18090654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelInfo)); 18100654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(WPASupplicant::kDebugLevelDebug)) 1811a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .Times(1); 1812a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*service.get(), HasRecentConnectionIssues()) 1813a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .WillOnce(Return(true)); 1814a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart InitiateConnect(service); 1815a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 1816a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1817a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart SetPendingService(NULL); 1818a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart SetCurrentService(service); 1819a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1820a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // When we disconnect from the troubled service, we should reduce the 1821a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // level of supplciant debugging. 1822a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 18230654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelDebug)); 18240654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(WPASupplicant::kDebugLevelInfo)) 1825a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .Times(1); 18260654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 1827a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart} 1828a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 18291590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToDisconnected) { 18301590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 18313c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 18323c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 18333c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, NULL); 18341590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 18353c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateIdle)); 18363c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetFailureSilent(Service::kFailureUnknown)); 18370654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 18381590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetCurrentService().get()); 18391590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 18401590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 18411590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 18421590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToConnectedNewService) { 18431590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 18443c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0 = 18453c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 18463c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1; 18473c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path1(MakeNewEndpointAndService( 18483c5040174273386868cc8dea8044d22c465885d8Paul Stewart 0, 0, kNetworkModeAdHoc, NULL, &service1)); 18493c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0.get(), GetCurrentService().get()); 18501590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1851c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Note that we deliberately omit intermediate supplicant states 1852c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // (e.g. kInterfaceStateAssociating), on the theory that they are 1853c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // unreliable. Specifically, they may be quashed if the association 1854c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // completes before supplicant flushes its changed properties. 18553c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, SetState(Service::kStateIdle)).Times(AtLeast(1)); 18563c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(bss_path1); 18573c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, SetState(Service::kStateConfiguring)); 18580654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 18593c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service1.get(), GetCurrentService().get()); 18603c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service0); 18613c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service1); 18621590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 18631590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1864e41a72d0737488d561a4158019409d5785dad61bThieu LeTEST_F(WiFiMainTest, CurrentBSSChangedUpdateServiceEndpoint) { 1865e41a72d0737488d561a4158019409d5785dad61bThieu Le StartWiFi(); 18663c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 18673c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 18683c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 18693c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path = 18703c5040174273386868cc8dea8044d22c465885d8Paul Stewart AddEndpointToService(service, 0, 0, kNetworkModeAdHoc, &endpoint); 18713c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, NotifyCurrentEndpoint(EndpointMatch(endpoint))); 18723c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(bss_path); 18734eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal} 18744eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal 18758a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, NewConnectPreemptsPending) { 18768a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 18773c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0( 18783c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 18793c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0.get(), GetPendingService().get()); 18808a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 18813c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1( 18823c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 18833c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service1.get(), GetPendingService().get()); 18843c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetCurrentService().get()); 18858a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 18868a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 18878a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, IsIdle) { 18888a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 18898a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(wifi()->IsIdle()); 18903c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 18913c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 18928a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_FALSE(wifi()->IsIdle()); 18938a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 18948a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 18954a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovMATCHER_P(WiFiAddedArgs, bgscan, "") { 18960654ece95920696c530ce1c0344365eb741f7efePaul Stewart return ContainsKey(arg, WPASupplicant::kNetworkPropertyScanSSID) && 18970654ece95920696c530ce1c0344365eb741f7efePaul Stewart ContainsKey(arg, WPASupplicant::kNetworkPropertyBgscan) == bgscan; 18984d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 18994d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 19004d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawalTEST_F(WiFiMainTest, AddNetworkArgs) { 19014d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal StartWiFi(); 19023c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 19033c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, &service); 19043c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(WiFiAddedArgs(true))); 19050654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_TRUE(SetBgscanMethod(WPASupplicant::kNetworkBgscanMethodSimple)); 19064d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal InitiateConnect(service); 19074d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 19084d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 19094a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovTEST_F(WiFiMainTest, AddNetworkArgsNoBgscan) { 19104a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov StartWiFi(); 19113c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 19123c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, &service); 19133c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(WiFiAddedArgs(false))); 19144a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov InitiateConnect(service); 19154a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov} 19164a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 19174a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovTEST_F(WiFiMainTest, AppendBgscan) { 19184a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov StartWiFi(); 19193c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 19204a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov { 19214a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov // 1 endpoint, default bgscan method -- background scan disabled. 19224a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov std::map<std::string, DBus::Variant> params; 19233c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).WillOnce(Return(1)); 19243c5040174273386868cc8dea8044d22c465885d8Paul Stewart AppendBgscan(service, ¶ms); 19253c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 19260654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_FALSE(ContainsKey(params, WPASupplicant::kNetworkPropertyBgscan)); 19274a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 19284a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov { 19294a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov // 2 endpoints, default bgscan method -- background scan frequency reduced. 19304a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov map<string, DBus::Variant> params; 19313c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).WillOnce(Return(2)); 19323c5040174273386868cc8dea8044d22c465885d8Paul Stewart AppendBgscan(service, ¶ms); 19333c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 19344a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov string config_string; 19354a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE( 19364a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov DBusProperties::GetString(params, 19370654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkPropertyBgscan, 19384a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov &config_string)); 19394a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov vector<string> elements; 19404a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov base::SplitString(config_string, ':', &elements); 19414a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ASSERT_EQ(4, elements.size()); 19424a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(WiFi::kDefaultBgscanMethod, elements[0]); 19434a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(StringPrintf("%d", WiFi::kBackgroundScanIntervalSeconds), 19444a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov elements[3]); 19454a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 19464a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov { 19474a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov // Explicit bgscan method -- regular background scan frequency. 19480654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_TRUE(SetBgscanMethod(WPASupplicant::kNetworkBgscanMethodSimple)); 19494a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov std::map<std::string, DBus::Variant> params; 19503c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).Times(0); 19513c5040174273386868cc8dea8044d22c465885d8Paul Stewart AppendBgscan(service, ¶ms); 19523c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 19534a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov string config_string; 19544a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE( 19554a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov DBusProperties::GetString(params, 19560654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkPropertyBgscan, 19574a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov &config_string)); 19584a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov vector<string> elements; 19594a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov base::SplitString(config_string, ':', &elements); 19604a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ASSERT_EQ(4, elements.size()); 19614a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(StringPrintf("%d", WiFi::kDefaultScanIntervalSeconds), 19624a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov elements[3]); 19634a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 19645c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley { 19655c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley // No scan method, simply returns without appending properties 19660654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_TRUE(SetBgscanMethod(WPASupplicant::kNetworkBgscanMethodNone)); 19675c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley std::map<std::string, DBus::Variant> params; 19683c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).Times(0); 19695c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley AppendBgscan(service.get(), ¶ms); 19703c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 19715c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley string config_string; 19725c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley EXPECT_FALSE( 19735c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley DBusProperties::GetString(params, 19740654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkPropertyBgscan, 19755c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley &config_string)); 19765c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley } 19774a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov} 19784a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 1979c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, StateAndIPIgnoreLinkEvent) { 1980c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 19813c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 19823c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 1983c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*service.get(), SetState(_)).Times(0); 1984c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 1985c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportLinkUp(); 1986c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1987c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Verify expectations now, because WiFi may cause |service| state 1988c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // changes during TearDown(). 1989c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal Mock::VerifyAndClearExpectations(service); 1990c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1991c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1992c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, SupplicantCompletedAlreadyConnected) { 1993c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 19943c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 19953c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL)); 19968f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley Mock::VerifyAndClearExpectations(dhcp_config_.get()); 1997c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 19988f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley // Simulate a rekeying event from the AP. These show as transitions from 19998f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley // completed->completed from wpa_supplicant. 20000654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 20015519e9e7021ba05af8c38291710746fac3528f21Christopher Wiley // When we get an IP, WiFi should enable high bitrates on the interface again. 20023c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 20033c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), EnableHighBitrates()).Times(1); 20043c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*manager(), device_info()).WillOnce(Return(device_info())); 2005ba99b598d3f399a41e57f49dccac5f988e653126Prathmesh Prabhu string portal_url; 2006ba99b598d3f399a41e57f49dccac5f988e653126Prathmesh Prabhu EXPECT_CALL(*manager(), GetPortalCheckURL()).WillOnce(ReturnRef(portal_url)); 20078f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley ReportIPConfigComplete(); 20088f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley // Similarly, rekeying events after we have an IP don't trigger L3 20095519e9e7021ba05af8c38291710746fac3528f21Christopher Wiley // configuration. However, we treat all transitions to completed as potential 20105519e9e7021ba05af8c38291710746fac3528f21Christopher Wiley // reassociations, so we will reenable high rates again here. 20113c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 20123c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnected()).WillOnce(Return(true)); 20133c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), EnableHighBitrates()).Times(1); 20140654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 2015c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 2016c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 2017b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSAddedCreatesBSSProxy) { 2018b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): Consider using a factory for WiFiEndpoints, so that 2019b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // we can test the interaction between WiFi and WiFiEndpoint. (Right 2020b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // now, we're testing across multiple layers.) 2021b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 2022b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy_factory(), CreateSupplicantBSSProxy(_, _, _)); 2023b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 2024b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 2025b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 2026b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 2027b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSRemovedDestroysBSSProxy) { 2028b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): As for BSSAddedCreatesBSSProxy, consider using a 2029b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // factory for WiFiEndpoints. 2030b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Get the pointer before we transfer ownership. 2031b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MockSupplicantBSSProxy *proxy = supplicant_bss_proxy_.get(); 2032b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy, Die()); 2033b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 20343c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path bss_path( 20353c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, NULL)); 20363c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(_)) 20373c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 20383c5040174273386868cc8dea8044d22c465885d8Paul Stewart RemoveBSS(bss_path); 2039b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Check this now, to make sure RemoveBSS killed the proxy (rather 2040b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // than TearDown). 2041b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Mock::VerifyAndClearExpectations(proxy); 2042b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 2043b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 20445c05b2920be742d518829972127172481722058dmukesh agrawalTEST_F(WiFiMainTest, FlushBSSOnResume) { 20455c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval resume_time = {1, 0}; 20465c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval scan_done_time = {6, 0}; 20475c05b2920be742d518829972127172481722058dmukesh agrawal 20485c05b2920be742d518829972127172481722058dmukesh agrawal StartWiFi(); 20495c05b2920be742d518829972127172481722058dmukesh agrawal 20505c05b2920be742d518829972127172481722058dmukesh agrawal EXPECT_CALL(time_, GetTimeMonotonic(_)) 20515c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(resume_time), Return(0))) 20525c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(scan_done_time), Return(0))); 20533c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), 20545c05b2920be742d518829972127172481722058dmukesh agrawal FlushBSS(WiFi::kMaxBSSResumeAgeSeconds + 5)); 20552f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnAfterResume(); 20565c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 20575c05b2920be742d518829972127172481722058dmukesh agrawal} 20585c05b2920be742d518829972127172481722058dmukesh agrawal 20595a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ScanTimerIdle_FullScan) { 20605a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 2061b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 2062b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 2063b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 2064b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 2065b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 2066b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2067b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 2068b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 2069b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 2070b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 2071b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 2072b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 20735a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ScanTimerIdle) { 20745a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 20755a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 20765a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ReportScanDone(); 20775a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie CancelScanTimer(); 20785a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_TRUE(GetScanTimer().IsCancelled()); 20795a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 20805a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie FireScanTimer(); 20815a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 20825a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 20835a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 20845a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 2085b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerScanning) { 2086b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 2087b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 2088b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 2089b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 2090b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2091b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // Should not call Scan, since we're already scanning. 2092b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // (Scanning is triggered by StartWiFi.) 2093b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 20945a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 2095b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 2096b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 2097b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 2098b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 2099b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2100b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerConnecting) { 2101b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 2102b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 21033c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 21043c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL); 2105b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 2106b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 2107b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2108b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 21095a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 2110b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 2111b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 2112b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 2113b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 2114b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2115b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerReconfigured) { 2116b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 2117b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 2118b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 2119b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2120bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal SetScanInterval(1, NULL); 2121b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 2122b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 2123b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2124b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerResetOnScanDone) { 2125b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 2126b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 2127b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 2128b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2129b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 2130b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 2131b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 2132b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2133b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerStopOnZeroInterval) { 2134b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 2135b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 2136b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2137bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal SetScanInterval(0, NULL); 2138b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 2139b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 2140b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 21415a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade GuthrieTEST_F(WiFiMainTest, ScanOnDisconnectWithHidden_FullScan) { 21425a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EnableFullScan(); 21435a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie StartWiFi(); 21445a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 21455a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie SetupConnectedService(DBus::Path(), NULL, NULL); 21465a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie vector<uint8_t>kSSID(1, 'a'); 21475a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ByteArrays ssids; 21485a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ssids.push_back(kSSID); 21495a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 21505a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie .WillRepeatedly(Return(ssids)); 21515a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*GetSupplicantInterfaceProxy(), 21525a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie Scan(HasHiddenSSID_FullScan(kSSID))); 21535a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 21545a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie dispatcher_.DispatchPendingEvents(); 21555a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie} 21565a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie 2157b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanOnDisconnectWithHidden) { 2158b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 2159b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 21605a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie ReportScanDone(); 21613c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 21623c5040174273386868cc8dea8044d22c465885d8Paul Stewart vector<uint8_t>kSSID(1, 'a'); 21633c5040174273386868cc8dea8044d22c465885d8Paul Stewart ByteArrays ssids; 21643c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssids.push_back(kSSID); 21653c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 21663c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(ssids)); 21675a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()); 21680654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 2169b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 2170b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 2171b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 2172b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, NoScanOnDisconnectWithoutHidden) { 2173b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 2174b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 21753c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 2176b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 21775a4e2efdb3b7d144a853c9b9e70edbd7be12f4c0Wade Guthrie EXPECT_CALL(*scan_session_, InitiateScan()).Times(0); 21783c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 21793c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(ByteArrays())); 21800654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 2181b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 2182b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 2183b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 21843c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul StewartTEST_F(WiFiMainTest, LinkMonitorFailure) { 21853c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart StartWiFi(); 21863c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart ScopedMockLog log; 21873c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 21883c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart MockLinkMonitor *link_monitor = new StrictMock<MockLinkMonitor>(); 21893c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart SetLinkMonitor(link_monitor); 21903c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(*link_monitor, IsGatewayFound()) 21913c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart .WillOnce(Return(false)) 21923c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart .WillRepeatedly(Return(true)); 21933c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(logging::LOG_INFO, _, 21943c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EndsWith("gateway was never found."))).Times(1); 21953c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Reassociate()).Times(0); 21963c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnLinkMonitorFailure(); 21973c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(logging::LOG_INFO, _, 21983c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EndsWith("Called Reassociate()."))).Times(1); 21993c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Reassociate()).Times(1); 22003c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnLinkMonitorFailure(); 22013c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnSupplicantVanish(); 22023c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 22033c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Reassociate()).Times(0); 22043c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 22053c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EndsWith("Cannot reassociate."))).Times(1); 22063c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnLinkMonitorFailure(); 22073c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart} 22083c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart 2209cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsOpen) { 22103c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 22110654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceState4WayHandshake); 2212cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 22131369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 2214cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 2215cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 2216cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsWPANeverConnected) { 22173c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 22180654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceState4WayHandshake); 2219cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 22201369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart Service::ConnectFailure failure; 22211369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_TRUE(SuspectCredentials(*service, &failure)); 22221369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_EQ(Service::kFailureBadPassphrase, failure); 2223cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 2224cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 2225cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsWPAPreviouslyConnected) { 22263c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 22270654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceState4WayHandshake); 2228cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal service->has_ever_connected_ = true; 22291369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 2230cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 2231cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 22321369c2b482e97a18e8ecb63df04799696ebe39d6Paul StewartTEST_F(WiFiMainTest, SuspectCredentialsEAPInProgress) { 22333c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 2234735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(*eap_state_handler_, is_eap_in_progress()) 2235735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart .WillOnce(Return(false)) 2236735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart .WillOnce(Return(true)) 2237735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart .WillOnce(Return(false)) 2238735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart .WillOnce(Return(true)); 22391369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart service->has_ever_connected_ = false; 22401369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 22411369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart Service::ConnectFailure failure; 22421369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_TRUE(SuspectCredentials(*service, &failure)); 22431369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_EQ(Service::kFailureEAPAuthentication, failure); 2244735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart service->has_ever_connected_ = true; 2245735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 22461369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 22471369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart} 22481369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 22491369c2b482e97a18e8ecb63df04799696ebe39d6Paul StewartTEST_F(WiFiMainTest, SuspectCredentialsYieldFailureWPA) { 2250cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 2251cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal SetPendingService(service); 22520654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceState4WayHandshake); 2253cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 2254cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 2255f2d609103916861ea8a9377ef93a72cc998bdf80Paul Stewart EXPECT_CALL(*service, SetFailure(Service::kFailureBadPassphrase)); 225656e322015a6955035bae144917190c9eccbd90c6mukesh agrawal EXPECT_CALL(*service, SetFailureSilent(_)).Times(0); 225756e322015a6955035bae144917190c9eccbd90c6mukesh agrawal EXPECT_CALL(*service, SetState(_)).Times(0); 2258735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart ScopedMockLog log; 2259cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 22601369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 22611369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EndsWith(flimflam::kErrorBadPassphrase))); 22620654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 22631369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart} 22641369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 22651369c2b482e97a18e8ecb63df04799696ebe39d6Paul StewartTEST_F(WiFiMainTest, SuspectCredentialsYieldFailureEAP) { 22661369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 22671369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart SetCurrentService(service); 22681369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(service->has_ever_connected()); 22691369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 2270735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart ScopedMockLog log; 2271735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 22721369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(*service, SetFailureSilent(_)).Times(0); 22731369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(*service, SetState(_)).Times(0); 2274735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart // Ensure that we retrieve is_eap_in_progress() before resetting the 2275735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart // EAP handler's state. 2276735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart InSequence seq; 2277735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(*eap_state_handler_, is_eap_in_progress()) 2278735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart .WillOnce(Return(true)); 2279735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(*service, SetFailure(Service::kFailureEAPAuthentication)); 22801369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 22811369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EndsWith(shill::kErrorEapAuthenticationFailed))); 2282735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(*eap_state_handler_, Reset()); 22830654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 2284cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 2285cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 2286e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// Scanning tests will use a mock of the event dispatcher instead of a real 2287e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// one. 22881aff7307d462b0160e821607058fe13831d8ef63Paul Stewartclass WiFiTimerTest : public WiFiObjectTest { 2289e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart public: 22901aff7307d462b0160e821607058fe13831d8ef63Paul Stewart WiFiTimerTest() : WiFiObjectTest(&mock_dispatcher_) {} 2291e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2292e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart protected: 2293e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart void ExpectInitialScanSequence(); 2294e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2295e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart StrictMock<MockEventDispatcher> mock_dispatcher_; 2296e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart}; 2297e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 22981aff7307d462b0160e821607058fe13831d8ef63Paul Stewartvoid WiFiTimerTest::ExpectInitialScanSequence() { 2299e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // Choose a number of iterations some multiple higher than the fast scan 2300e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // count. 2301e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart const int kScanTimes = WiFi::kNumFastScanAttempts * 4; 2302e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2303e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // Each time we call FireScanTimer() below, WiFi will post a task to actually 2304e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // run Scan() on the wpa_supplicant proxy. 2305e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)) 2306e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(kScanTimes); 2307e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart { 2308e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart InSequence seq; 2309e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // The scans immediately after the initial scan should happen at the short 2310e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // interval. If we add the initial scan (not invoked in this function) to 2311e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // the ones in the expectation below, we get WiFi::kNumFastScanAttempts at 2312e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // the fast scan interval. 2313e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 2314e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 2315e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(WiFi::kNumFastScanAttempts - 1) 2316e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillRepeatedly(Return(true)); 2317e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2318e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // After this, the WiFi device should use the normal scan interval. 2319e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 2320e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, GetScanInterval() * 1000)) 2321e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(kScanTimes - WiFi::kNumFastScanAttempts + 1) 2322e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillRepeatedly(Return(true)); 2323e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2324e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart for (int i = 0; i < kScanTimes; i++) { 2325e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart FireScanTimer(); 2326e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 2327e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 2328e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart} 2329e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 23301aff7307d462b0160e821607058fe13831d8ef63Paul StewartTEST_F(WiFiTimerTest, FastRescan) { 2331e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // This PostTask is a result of the call to Scan(NULL), and is meant to 2332e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // post a task to call Scan() on the wpa_supplicant proxy immediately. 2333e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)); 2334e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 2335e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 2336e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillOnce(Return(true)); 2337e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart StartWiFi(); 2338e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2339e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart ExpectInitialScanSequence(); 2340e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2341e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // If we end up disconnecting, the sequence should repeat. 2342e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 2343e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 2344e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillOnce(Return(true)); 2345e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart RestartFastScanAttempts(); 2346e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2347e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart ExpectInitialScanSequence(); 2348e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart} 2349e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 23501aff7307d462b0160e821607058fe13831d8ef63Paul StewartTEST_F(WiFiTimerTest, ReconnectTimer) { 23511aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)).Times(AnyNumber()); 23521aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask(_, _)).Times(AnyNumber()); 23533c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 23543c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 23551aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 23561aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 23571aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 23581aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(1); 23591aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 23601aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 23611aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StopReconnectTimer(); 23621aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 23631aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 23641aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(1); 23651aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 23661aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 23671aff7307d462b0160e821607058fe13831d8ef63Paul Stewart GetReconnectTimeoutCallback().callback().Run(); 23681aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 23691aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 23701aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(1); 23711aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 23721aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 23731aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 23741aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 23751aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(0); 23761aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 23771aff7307d462b0160e821607058fe13831d8ef63Paul Stewart} 23781aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 2379bc6e7390c4401e171ede4dc83b79b316f3e71100Paul StewartTEST_F(WiFiMainTest, EAPCertification) { 2380bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 2381bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(*service, AddEAPCertification(_, _)).Times(0); 2382bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2383bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ScopedMockLog log; 2384bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no current service."))); 2385bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart map<string, ::DBus::Variant> args; 2386bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 2387bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 2388bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2389bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart SetCurrentService(service); 2390bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no depth parameter."))); 2391bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 2392bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 2393bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2394bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart const uint32 kDepth = 123; 23950654ece95920696c530ce1c0344365eb741f7efePaul Stewart args[WPASupplicant::kInterfacePropertyDepth].writer().append_uint32(kDepth); 2396bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2397bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, 2398bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Log(logging::LOG_ERROR, _, EndsWith("no subject parameter."))); 2399bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 2400bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 2401bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2402bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart const string kSubject("subject"); 24030654ece95920696c530ce1c0344365eb741f7efePaul Stewart args[WPASupplicant::kInterfacePropertySubject].writer() 2404bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart .append_string(kSubject.c_str()); 2405bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(*service, AddEAPCertification(kSubject, kDepth)).Times(1); 2406bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 2407db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart} 2408db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2409db0f917217979bf7547e27b47faf1b49d25c8d9cPaul StewartTEST_F(WiFiMainTest, EAPEvent) { 2410db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ScopedMockLog log; 2411db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no current service."))); 2412735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(*eap_state_handler_, ParseStatus(_, _, _)).Times(0); 2413735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart const string kEAPStatus("eap-status"); 2414735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart const string kEAPParameter("eap-parameter"); 2415735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart ReportEAPEvent(kEAPStatus, kEAPParameter); 2416db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(&log); 2417db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 2418db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2419735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 2420db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(*service, SetFailure(_)).Times(0); 2421735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(*eap_state_handler_, ParseStatus(kEAPStatus, kEAPParameter, _)); 2422db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart SetCurrentService(service); 2423735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart ReportEAPEvent(kEAPStatus, kEAPParameter); 2424735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart Mock::VerifyAndClearExpectations(service); 2425735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart Mock::VerifyAndClearExpectations(eap_state_handler_); 2426db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2427735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(*eap_state_handler_, ParseStatus(kEAPStatus, kEAPParameter, _)) 2428735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart .WillOnce(DoAll(SetArgumentPointee<2>(Service::kFailureOutOfRange), 2429735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart Return(false))); 2430735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(Service::kFailureOutOfRange, _)); 2431735eab54bf8b9d9b8e7c7aff7c562333bfa9e119Paul Stewart ReportEAPEvent(kEAPStatus, kEAPParameter); 2432bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart} 2433bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2434c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawalTEST_F(WiFiMainTest, PendingScanDoesNotCrashAfterStop) { 2435c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // Scan is one task that should be skipped after Stop. Others are 2436c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // skipped by the same mechanism (invalidating weak pointers), so we 2437c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // don't test them individually. 2438c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // 2439c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // Note that we can't test behavior by setting expectations on the 2440c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // supplicant_interface_proxy_, since that is destroyed when we StopWiFi(). 2441c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal StartWiFi(); 2442c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal StopWiFi(); 2443c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal dispatcher_.DispatchPendingEvents(); 2444c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal} 2445c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal 244660ceaf336297ce536201a82e350c697f1a5b546dDarin PetkovTEST_F(WiFiMainTest, VerifyPaths) { 2447196f50fdcc687512c123a34f54a21eea8215708fPaul Stewart string path(WPASupplicant::kSupplicantConfPath); 244860ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov TrimString(path, FilePath::kSeparators, &path); 244960ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov EXPECT_TRUE(file_util::PathExists(FilePath(SYSROOT).Append(path))); 245060ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov} 245160ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov 24526d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shahstruct BSS { 24536d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah string bsspath; 24546d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah string ssid; 24556d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah string bssid; 24566d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah int16_t signal_strength; 24576d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah uint16 frequency; 24586d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah const char* mode; 24596d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah}; 24606d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 24616d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav ShahTEST_F(WiFiMainTest, GetGeolocationObjects) { 24626d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah BSS bsses[] = { 24636d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah {"bssid1", "ssid1", "00:00:00:00:00:00", 5, Metrics::kWiFiFrequency2412, 24646d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah kNetworkModeInfrastructure}, 24656d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah {"bssid2", "ssid2", "01:00:00:00:00:00", 30, Metrics::kWiFiFrequency5170, 24666d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah kNetworkModeInfrastructure}, 24676d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah // Same SSID but different BSSID is an additional geolocation object. 24686d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah {"bssid3", "ssid1", "02:00:00:00:00:00", 100, 0, 24696d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah kNetworkModeInfrastructure} 24706d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah }; 24716d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah StartWiFi(); 24726d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah vector<GeolocationInfo> objects; 24736d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah EXPECT_EQ(objects.size(), 0); 24746d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 24756d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah for (size_t i = 0; i < arraysize(bsses); ++i) { 24766d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah ReportBSS(bsses[i].bsspath, bsses[i].ssid, bsses[i].bssid, 24776d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah bsses[i].signal_strength, bsses[i].frequency, bsses[i].mode); 24786d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah objects = wifi()->GetGeolocationObjects(); 24796d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah EXPECT_EQ(objects.size(), i + 1); 24806d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 24816d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah GeolocationInfo expected_info; 24826d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah expected_info.AddField(kGeoMacAddressProperty, bsses[i].bssid); 24836d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah expected_info.AddField(kGeoSignalStrengthProperty, 24846d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah StringPrintf("%d", bsses[i].signal_strength)); 24856d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah expected_info.AddField(kGeoChannelProperty, StringPrintf( 24866d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah "%d", Metrics::WiFiFrequencyToChannel(bsses[i].frequency))); 24876d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah EXPECT_TRUE(objects[i].Equals(expected_info)); 24887347bf2b466ae8058e47b29aaf0583390405d866Wade Guthrie } 24897347bf2b466ae8058e47b29aaf0583390405d866Wade Guthrie} 24906d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 24915581d07d765e14737d2a639d3eb42e0b42721602Paul StewartTEST_F(WiFiMainTest, SetSupplicantDebugLevel) { 24925581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart MockSupplicantProcessProxy *process_proxy = supplicant_process_proxy_.get(); 24935581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 24945581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // With WiFi not yet started, nothing interesting (including a crash) should 24955581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // happen. 24965581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()).Times(0); 24975581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 24985581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 24995581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 25005581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // This unit test turns on WiFi debugging, so when we start WiFi, we should 25015581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // check but not set the debug level if we return the "debug" level. 25025581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 25030654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelDebug)); 25045581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 25055581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart StartWiFi(); 25065581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 25075581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 25085581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is toggled and wpa_supplicant reports debugging 25095581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // is set to some unmanaged level, WiFi should leave it alone. 25105581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 25110654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelError)) 25120654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelError)) 25130654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelExcessive)) 25140654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelExcessive)) 25150654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelMsgDump)) 25160654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelMsgDump)) 25170654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelWarning)) 25180654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelWarning)); 25195581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 25205581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 25215581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 25225581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 25235581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 25245581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 25255581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 25265581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 25275581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 25285581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 25295581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 25305581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is turned off and wpa_supplicant reports debugging 25315581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // is turned on, WiFi should turn supplicant debugging off. 25325581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 25330654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelDebug)); 25340654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(WPASupplicant::kDebugLevelInfo)) 25355581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .Times(1); 25365581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 25375581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 25385581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 25395581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is turned on and wpa_supplicant reports debugging 25405581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // is turned off, WiFi should turn supplicant debugging on. 25415581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 25420654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelInfo)); 25430654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(WPASupplicant::kDebugLevelDebug)) 25445581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .Times(1); 25455581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 25465581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 25475581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 25485581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is already in the correct state, it should not be 25495581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // changed. 25505581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 25510654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelDebug)) 25520654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelInfo)); 25535581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 25545581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 25555581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 25565581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 25575581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // After WiFi is stopped, we shouldn't be calling the proxy. 25585581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()).Times(0); 25595581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 25605581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart StopWiFi(); 25615581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 25625581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 25635581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart} 25645581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 256550cb78aa736cf39ee8c7e0193a78792a9686a108Darin PetkovTEST_F(WiFiMainTest, LogSSID) { 256650cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov EXPECT_EQ("[SSID=]", WiFi::LogSSID("")); 256750cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov EXPECT_EQ("[SSID=foo\\x5b\\x09\\x5dbar]", WiFi::LogSSID("foo[\t]bar")); 256850cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov} 256950cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov 2570bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal// Custom property setters should return false, and make no changes, if 2571bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal// the new value is the same as the old value. 2572bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawalTEST_F(WiFiMainTest, CustomSetterNoopChange) { 2573bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal // SetBgscanShortInterval 2574bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal { 2575bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal Error error; 2576bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal static const uint16 kKnownScanInterval = 4; 2577bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal // Set to known value. 2578bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_TRUE(SetBgscanShortInterval(kKnownScanInterval, &error)); 2579bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_TRUE(error.IsSuccess()); 2580bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal // Set to same value. 2581bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_FALSE(SetBgscanShortInterval(kKnownScanInterval, &error)); 2582bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_TRUE(error.IsSuccess()); 2583bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal } 2584bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal 2585bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal // SetBgscanSignalThreshold 2586bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal { 2587bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal Error error; 2588bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal static const int32 kKnownSignalThreshold = 4; 2589bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal // Set to known value. 2590bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_TRUE(SetBgscanSignalThreshold(kKnownSignalThreshold, &error)); 2591bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_TRUE(error.IsSuccess()); 2592bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal // Set to same value. 2593bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_FALSE(SetBgscanSignalThreshold(kKnownSignalThreshold, &error)); 2594bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_TRUE(error.IsSuccess()); 2595bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal } 2596bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal 2597bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal // SetScanInterval 2598bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal { 2599bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal Error error; 2600bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_FALSE(SetScanInterval(GetScanInterval(), &error)); 2601bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal EXPECT_TRUE(error.IsSuccess()); 2602bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal } 2603bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal} 2604bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal 2605853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} // namespace shill 2606