wifi_unittest.cc revision 0427cc1c28419b4980ecf4b1d8ba6c3e7bb341da
18a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal// Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone// Use of this source code is governed by a BSD-style license that can be 3853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone// found in the LICENSE file. 4853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 5853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/wifi.h" 6853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 7f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include <netinet/ether.h> 8f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include <linux/if.h> 95c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include <sys/socket.h> 105c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include <linux/netlink.h> // Needs typedefs from sys/socket.h. 11f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 12853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <map> 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> 19a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include <base/stringprintf.h> 203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_number_conversions.h> 214a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov#include <base/string_split.h> 223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_util.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" 4510ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart#include "shill/mock_profile.h" 465c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include "shill/mock_rtnl_handler.h" 47a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include "shill/mock_store.h" 48b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal#include "shill/mock_supplicant_bss_proxy.h" 493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_interface_proxy.h" 50835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart#include "shill/mock_supplicant_network_proxy.h" 513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_process_proxy.h" 525c05b2920be742d518829972127172481722058dmukesh agrawal#include "shill/mock_time.h" 533c5040174273386868cc8dea8044d22c465885d8Paul Stewart#include "shill/mock_wifi_provider.h" 547ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal#include "shill/mock_wifi_service.h" 55dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include "shill/nice_mock_control.h" 56853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/property_store_unittest.h" 573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/proxy_factory.h" 5885aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart#include "shill/technology.h" 593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/wifi_endpoint.h" 603239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal#include "shill/wifi_service.h" 61ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart#include "shill/wpa_supplicant.h" 62853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 63ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 640e1cdeae24dd678a5fe27c840802582c0ca45ec0Albert Chaulkusing base::FilePath; 65853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::map; 66853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::string; 67853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::vector; 68853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::_; 693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::AnyNumber; 703c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing ::testing::AtLeast; 713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::DefaultValue; 72a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::DoAll; 73cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalusing ::testing::EndsWith; 743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::InSequence; 75b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalusing ::testing::Invoke; 76549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewartusing ::testing::InvokeWithoutArgs; 777ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalusing ::testing::Mock; 78dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawalusing ::testing::NiceMock; 79d4dc0836d64d957f233eaf6e4ab24093a97dd4cemukesh agrawalusing ::testing::NotNull; 80853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Return; 81ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morainusing ::testing::SaveArg; 82a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::SetArgumentPointee; 83a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrEq; 84a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrictMock; 85853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Test; 863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::Throw; 878ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalusing ::testing::Values; 88853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 89853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masonenamespace shill { 90853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalclass WiFiPropertyTest : public PropertyStoreTest { 92853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone public: 933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiPropertyTest() 943426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le : device_(new WiFi(control_interface(), 953c5040174273386868cc8dea8044d22c465885d8Paul Stewart NULL, NULL, manager(), "wifi", "", 0)) { 96853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone } 973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual ~WiFiPropertyTest() {} 98853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 99853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone protected: 1008abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFiRefPtr device_; 101853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone}; 102853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Contains) { 104de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_TRUE(device_->store().Contains(flimflam::kNameProperty)); 105de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_FALSE(device_->store().Contains("")); 106853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 107853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1086bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawalTEST_F(WiFiPropertyTest, SetProperty) { 109a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 110a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1116bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 112de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal device_->mutable_store(), 113a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanSignalThresholdProperty, 114a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kInt32V, 115a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 116a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 117a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 118a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1196bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty(device_->mutable_store(), 1206bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanIntervalProperty, 1216bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kUint16V, 1226bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 123a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 124853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone // Ensure that an attempt to write a R/O property returns InvalidArgs error. 125a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 126a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1276bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty(device_->mutable_store(), 1286bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanningProperty, 1296bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kBoolV, 1306bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 1319d779936d8f8c2d74b30883e2a2622c4207fe797Chris Masone EXPECT_EQ(invalid_args(), error.name()); 132a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 133853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1344d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1354d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1366bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1374d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1384d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1394d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant( 1400654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkBgscanMethodSimple), 1414d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1424d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1434d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1444d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1454d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1466bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty( 1474d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1484d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1494d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant("not a real scan method"), 1504d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1514d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1524d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 1534d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1544a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovTEST_F(WiFiPropertyTest, BgscanMethodProperty) { 1550654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_NE(WPASupplicant::kNetworkBgscanMethodLearn, 1568abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFi::kDefaultBgscanMethod); 1574a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE(device_->bgscan_method_.empty()); 1584a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 1594a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov string method; 160e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart Error unused_error; 161e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart EXPECT_TRUE(device_->store().GetStringProperty( 162e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart flimflam::kBgscanMethodProperty, &method, &unused_error)); 1634a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(WiFi::kDefaultBgscanMethod, method); 1640654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kNetworkBgscanMethodSimple, method); 1658abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1668abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal ::DBus::Error error; 1676bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1688abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), 1698abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal flimflam::kBgscanMethodProperty, 1708abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal DBusAdaptor::StringToVariant( 1710654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkBgscanMethodLearn), 1728abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal &error)); 1730654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kNetworkBgscanMethodLearn, device_->bgscan_method_); 174e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart EXPECT_TRUE(device_->store().GetStringProperty( 175e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart flimflam::kBgscanMethodProperty, &method, &unused_error)); 1760654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kNetworkBgscanMethodLearn, method); 1778abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1788abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_TRUE(DBusAdaptor::ClearProperty( 1798abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), flimflam::kBgscanMethodProperty, &error)); 180e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart EXPECT_TRUE(device_->store().GetStringProperty( 181e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart flimflam::kBgscanMethodProperty, &method, &unused_error)); 1824a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(WiFi::kDefaultBgscanMethod, method); 1834a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE(device_->bgscan_method_.empty()); 1848abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal} 1858abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1863c5040174273386868cc8dea8044d22c465885d8Paul Stewart 1873c5040174273386868cc8dea8044d22c465885d8Paul StewartMATCHER_P(EndpointMatch, endpoint, "") { 1883c5040174273386868cc8dea8044d22c465885d8Paul Stewart return 1893c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg->ssid() == endpoint->ssid() && 1903c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg->network_mode() == endpoint->network_mode() && 1913c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg->security_mode() == endpoint->security_mode(); 1923c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 1933c5040174273386868cc8dea8044d22c465885d8Paul Stewart 194e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartclass WiFiObjectTest : public ::testing::TestWithParam<string> { 1953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 196e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiObjectTest(EventDispatcher *dispatcher) 197e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart : event_dispatcher_(dispatcher), 1986c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le metrics_(NULL), 199e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart manager_(&control_interface_, NULL, &metrics_, &glib_), 200e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart device_info_(&control_interface_, dispatcher, &metrics_, &manager_), 201626719f89881a949d8b5a8fa808beb924496489fChris Masone wifi_(new WiFi(&control_interface_, 202e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart dispatcher, 2033426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 204626719f89881a949d8b5a8fa808beb924496489fChris Masone &manager_, 205626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceName, 206626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceAddress, 207626719f89881a949d8b5a8fa808beb924496489fChris Masone 0)), 2083c5040174273386868cc8dea8044d22c465885d8Paul Stewart bss_counter_(0), 209dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_process_proxy_(new NiceMock<MockSupplicantProcessProxy>()), 210b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal supplicant_bss_proxy_( 211b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal new NiceMock<MockSupplicantBSSProxy>()), 212f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal dhcp_config_(new MockDHCPConfig(&control_interface_, 213d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart kDeviceName)), 2142b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov dbus_manager_(new NiceMock<MockDBusManager>()), 2153c5040174273386868cc8dea8044d22c465885d8Paul Stewart supplicant_interface_proxy_( 2163c5040174273386868cc8dea8044d22c465885d8Paul Stewart new NiceMock<MockSupplicantInterfaceProxy>(wifi_)), 2172f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal proxy_factory_(this) { 2183195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ::testing::DefaultValue< ::DBus::Path>::Set("/default/path"); 219c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 220d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart ON_CALL(dhcp_provider_, CreateConfig(_, _, _, _)). 221c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(dhcp_config_)); 222c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ON_CALL(*dhcp_config_.get(), RequestIP()). 223c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(true)); 224835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart ON_CALL(proxy_factory_, CreateSupplicantNetworkProxy(_, _)). 225835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart WillByDefault(InvokeWithoutArgs( 226835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart this, &WiFiObjectTest::CreateSupplicantNetworkProxy)); 227ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 2282b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov manager_.dbus_manager_.reset(dbus_manager_); // Transfers ownership. 2292b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 2303c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->provider_ = &wifi_provider_; 2315c05b2920be742d518829972127172481722058dmukesh agrawal wifi_->time_ = &time_; 2323195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2335c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2345c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void SetUp() { 2353ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal // EnableScopes... so that we can EXPECT_CALL for scoped log messages. 2363ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal ScopeLogger::GetInstance()->EnableScopesByName("wifi"); 237d34a47c06c38f2594c85b14b0f9cee2bf37c0e84Christopher Wiley ScopeLogger::GetInstance()->set_verbose_level(3); 238ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = &proxy_factory_; 2395c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal static_cast<Device *>(wifi_)->rtnl_handler_ = &rtnl_handler_; 2405c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(&dhcp_provider_); 2413c5040174273386868cc8dea8044d22c465885d8Paul Stewart ON_CALL(manager_, device_info()).WillByDefault(Return(&device_info_)); 2422b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(manager_, UpdateEnabledTechnologies()).Times(AnyNumber()); 243b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 2445c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal } 2455c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2465c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void TearDown() { 2473c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(_)) 2483c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(reinterpret_cast<WiFiService *>(NULL))); 2499a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->SelectService(NULL); 250b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal if (supplicant_bss_proxy_.get()) { 251b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()); 252b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 253ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = NULL; 2543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // must Stop WiFi instance, to clear its list of services. 2553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // otherwise, the WiFi instance will not be deleted. (because 2563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // services reference a WiFi instance, creating a cycle.) 2579a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->Stop(NULL, ResultCallback()); 2585c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(NULL); 2593ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal // Reset scope logging, to avoid interfering with other tests. 2603ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal ScopeLogger::GetInstance()->EnableScopesByName("-wifi"); 261d34a47c06c38f2594c85b14b0f9cee2bf37c0e84Christopher Wiley ScopeLogger::GetInstance()->set_verbose_level(0); 262f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 263f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 264549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart // Needs to be public since it is called via Invoke(). 265549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart void StopWiFi() { 266549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart wifi_->SetEnabled(false); // Stop(NULL, ResultCallback()); 267549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart } 268549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart 269c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley // Needs to be public since it is called via Invoke(). 270c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley void ThrowDBusError() { 271c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley throw DBus::Error("SomeDBusType", "A handy message"); 272c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley } 273c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley 2743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 2757ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal typedef scoped_refptr<MockWiFiService> MockWiFiServiceRefPtr; 2767ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 2773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal class TestProxyFactory : public ProxyFactory { 2783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 279e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart explicit TestProxyFactory(WiFiObjectTest *test); 2803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantProcessProxyInterface *CreateSupplicantProcessProxy( 2821830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_path*/, const char */*dbus_addr*/) { 283dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_process_proxy_.release(); 2843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantInterfaceProxyInterface *CreateSupplicantInterfaceProxy( 287196f50fdcc687512c123a34f54a21eea8215708fPaul Stewart SupplicantEventDelegateInterface */*delegate*/, 2881830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const DBus::Path &/*object_path*/, 2891830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_addr*/) { 290dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_interface_proxy_.release(); 2913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 293b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MOCK_METHOD3(CreateSupplicantBSSProxy, 294b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *( 295b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint *wifi_endpoint, 296b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &object_path, 297b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char *dbus_addr)); 298b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 299835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart MOCK_METHOD2(CreateSupplicantNetworkProxy, 300835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart SupplicantNetworkProxyInterface *( 301835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart const DBus::Path &object_path, 302835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart const char *dbus_addr)); 303835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 3043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 305b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *CreateSupplicantBSSProxyInternal( 306b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint */*wifi_endpoint*/, 307b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &/*object_path*/, 308b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char */*dbus_addr*/) { 309b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return test_->supplicant_bss_proxy_.release(); 310b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 311b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 312e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiObjectTest *test_; 3133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal }; 3143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3153c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Simulate the course of events when the last enpoint of a service is 3163c5040174273386868cc8dea8044d22c465885d8Paul Stewart // removed. 3173c5040174273386868cc8dea8044d22c465885d8Paul Stewart class EndpointRemovalHandler { 3183c5040174273386868cc8dea8044d22c465885d8Paul Stewart public: 3193c5040174273386868cc8dea8044d22c465885d8Paul Stewart EndpointRemovalHandler(WiFiRefPtr wifi, const WiFiServiceRefPtr &service) 3203c5040174273386868cc8dea8044d22c465885d8Paul Stewart : wifi_(wifi), service_(service) {} 3213c5040174273386868cc8dea8044d22c465885d8Paul Stewart virtual ~EndpointRemovalHandler() {} 3223c5040174273386868cc8dea8044d22c465885d8Paul Stewart 3233c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr OnEndpointRemoved( 3243c5040174273386868cc8dea8044d22c465885d8Paul Stewart const WiFiEndpointConstRefPtr &endpoint) { 3253c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->DisassociateFromService(service_); 3263c5040174273386868cc8dea8044d22c465885d8Paul Stewart return service_; 3273c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3283c5040174273386868cc8dea8044d22c465885d8Paul Stewart 3293c5040174273386868cc8dea8044d22c465885d8Paul Stewart private: 3303c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiRefPtr wifi_; 3313c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service_; 3323c5040174273386868cc8dea8044d22c465885d8Paul Stewart }; 3333c5040174273386868cc8dea8044d22c465885d8Paul Stewart 3343c5040174273386868cc8dea8044d22c465885d8Paul Stewart EndpointRemovalHandler *MakeEndpointRemovalHandler( 3353c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr &service) { 3363c5040174273386868cc8dea8044d22c465885d8Paul Stewart return new EndpointRemovalHandler(wifi_, service); 3373c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 338b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void CancelScanTimer() { 339b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->scan_timer_callback_.Cancel(); 340b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 3413c5040174273386868cc8dea8044d22c465885d8Paul Stewart // This function creates a new endpoint with a mode set to |mode|. We 3423c5040174273386868cc8dea8044d22c465885d8Paul Stewart // synthesize new |path| and |bssid| values, since we don't really care 3433c5040174273386868cc8dea8044d22c465885d8Paul Stewart // what they are for unit tests. If "use_ssid" is true, we used the 3443c5040174273386868cc8dea8044d22c465885d8Paul Stewart // passed-in ssid, otherwise we create a synthesized value for it as well. 3453c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr MakeNewEndpoint(const char *mode, 3463c5040174273386868cc8dea8044d22c465885d8Paul Stewart bool use_ssid, 3473c5040174273386868cc8dea8044d22c465885d8Paul Stewart string *ssid, 3483c5040174273386868cc8dea8044d22c465885d8Paul Stewart string *path, 3493c5040174273386868cc8dea8044d22c465885d8Paul Stewart string *bssid) { 3503c5040174273386868cc8dea8044d22c465885d8Paul Stewart bss_counter_++; 3513c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (!use_ssid) { 3523c5040174273386868cc8dea8044d22c465885d8Paul Stewart *ssid = base::StringPrintf("ssid%d", bss_counter_); 3533c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3543c5040174273386868cc8dea8044d22c465885d8Paul Stewart *path = base::StringPrintf("/interface/bss%d", bss_counter_); 3553c5040174273386868cc8dea8044d22c465885d8Paul Stewart *bssid = base::StringPrintf("00:00:00:00:00:%02x", bss_counter_); 3563c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = MakeEndpointWithMode(*ssid, *bssid, mode); 3573c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(wifi_provider_, 3583c5040174273386868cc8dea8044d22c465885d8Paul Stewart OnEndpointAdded(EndpointMatch(endpoint))).Times(1); 3593c5040174273386868cc8dea8044d22c465885d8Paul Stewart return endpoint; 3603c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3613c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr MakeEndpoint(const string &ssid, const string &bssid) { 3623c5040174273386868cc8dea8044d22c465885d8Paul Stewart return MakeEndpointWithMode(ssid, bssid, kNetworkModeInfrastructure); 3633c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3643c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr MakeEndpointWithMode( 3653c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string &ssid, const string &bssid, const string &mode) { 3663c5040174273386868cc8dea8044d22c465885d8Paul Stewart return WiFiEndpoint::MakeOpenEndpoint( 3673c5040174273386868cc8dea8044d22c465885d8Paul Stewart &proxy_factory_, NULL, ssid, bssid, mode, 0, 0); 3683c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3693c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr MakeMockServiceWithSSID( 3703c5040174273386868cc8dea8044d22c465885d8Paul Stewart vector<uint8_t> ssid, const std::string &security) { 3713c5040174273386868cc8dea8044d22c465885d8Paul Stewart return new NiceMock<MockWiFiService>( 3723c5040174273386868cc8dea8044d22c465885d8Paul Stewart &control_interface_, 3733c5040174273386868cc8dea8044d22c465885d8Paul Stewart event_dispatcher_, 3743c5040174273386868cc8dea8044d22c465885d8Paul Stewart &metrics_, 3753c5040174273386868cc8dea8044d22c465885d8Paul Stewart &manager_, 3763c5040174273386868cc8dea8044d22c465885d8Paul Stewart &wifi_provider_, 3773c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssid, 3783c5040174273386868cc8dea8044d22c465885d8Paul Stewart flimflam::kModeManaged, 3793c5040174273386868cc8dea8044d22c465885d8Paul Stewart security, 3803c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 3813c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3823c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr MakeMockService(const std::string &security) { 3833c5040174273386868cc8dea8044d22c465885d8Paul Stewart return MakeMockServiceWithSSID(vector<uint8_t>(1, 'a'), security); 3843c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3853c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path MakeNewEndpointAndService(int16_t signal_strength, 3863c5040174273386868cc8dea8044d22c465885d8Paul Stewart uint16 frequency, 3873c5040174273386868cc8dea8044d22c465885d8Paul Stewart const char *mode, 3883c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr, 3893c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr *service_ptr) { 3903c5040174273386868cc8dea8044d22c465885d8Paul Stewart string ssid; 3913c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path path; 3923c5040174273386868cc8dea8044d22c465885d8Paul Stewart string bssid; 3933c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = 3943c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpoint(mode, false, &ssid, &path, &bssid); 3953c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 3963c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeMockServiceWithSSID(endpoint->ssid(), endpoint->security_mode()); 3973c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(wifi_provider_, FindServiceForEndpoint(EndpointMatch(endpoint))) 3983c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(service)); 3993c5040174273386868cc8dea8044d22c465885d8Paul Stewart ON_CALL(*service, GetEndpointCount()).WillByDefault(Return(1)); 4003c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS(path, ssid, bssid, signal_strength, frequency, mode); 4013c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (service_ptr) { 4023c5040174273386868cc8dea8044d22c465885d8Paul Stewart *service_ptr = service; 4033c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4043c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 4053c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 4063c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4073c5040174273386868cc8dea8044d22c465885d8Paul Stewart return path; 4083c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4093c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path AddEndpointToService( 4103c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service, 4113c5040174273386868cc8dea8044d22c465885d8Paul Stewart int16_t signal_strength, 4123c5040174273386868cc8dea8044d22c465885d8Paul Stewart uint16 frequency, 4133c5040174273386868cc8dea8044d22c465885d8Paul Stewart const char *mode, 4143c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr) { 4153c5040174273386868cc8dea8044d22c465885d8Paul Stewart string ssid(service->ssid().begin(), service->ssid().end()); 4163c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path path; 4173c5040174273386868cc8dea8044d22c465885d8Paul Stewart string bssid; 4183c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = 4193c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpoint(mode, true, &ssid, &path, &bssid); 4203c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(wifi_provider_, FindServiceForEndpoint(EndpointMatch(endpoint))) 4213c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(service)); 4223c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS(path, ssid, bssid, signal_strength, frequency, mode); 4233c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 4243c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 4253c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4263c5040174273386868cc8dea8044d22c465885d8Paul Stewart return path; 4273c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4283c5040174273386868cc8dea8044d22c465885d8Paul Stewart void InitiateConnect(WiFiServiceRefPtr service) { 4293c5040174273386868cc8dea8044d22c465885d8Paul Stewart map<string, ::DBus::Variant> params; 4303c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->ConnectTo(service, params); 4313c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4323c5040174273386868cc8dea8044d22c465885d8Paul Stewart void InitiateDisconnect(WiFiServiceRefPtr service) { 4333c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->DisconnectFrom(service); 4343c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4353c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr SetupConnectingService( 4363c5040174273386868cc8dea8044d22c465885d8Paul Stewart const DBus::Path &network_path, 4373c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr, 4383c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path *bss_path_ptr) { 4393c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (!network_path.empty()) { 4403c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(_)) 4413c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(network_path)); 4423c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), SelectNetwork(network_path)); 4433c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4443c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4453c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 4463c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 4473c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path(MakeNewEndpointAndService( 4483c5040174273386868cc8dea8044d22c465885d8Paul Stewart 0, 0, kNetworkModeAdHoc, &endpoint, &service)); 4493c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateAssociating)); 4503c5040174273386868cc8dea8044d22c465885d8Paul Stewart InitiateConnect(service); 4513c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 4523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(GetPendingTimeout().IsCancelled()); 4533c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 4543c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 4553c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4563c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (bss_path_ptr) { 4573c5040174273386868cc8dea8044d22c465885d8Paul Stewart *bss_path_ptr = bss_path; 4583c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4593c5040174273386868cc8dea8044d22c465885d8Paul Stewart return service; 4603c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4613c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4623c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr SetupConnectedService( 4633c5040174273386868cc8dea8044d22c465885d8Paul Stewart const DBus::Path &network_path, 4643c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr, 4653c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path *bss_path_ptr) { 4663c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 4673c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path; 4683c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 4693c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(network_path, &endpoint, &bss_path); 4703c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 4713c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 4723c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4733c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (bss_path_ptr) { 4743c5040174273386868cc8dea8044d22c465885d8Paul Stewart *bss_path_ptr = bss_path; 4753c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4763c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, NotifyCurrentEndpoint(EndpointMatch(endpoint))); 4773c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(bss_path); 4783c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetPendingTimeout().IsCancelled()); 4793c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 4803c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4813c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateConfiguring)); 4823c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 4833c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 4840654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 4853c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 4863c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4873c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service, GetCurrentService()); 4883c5040174273386868cc8dea8044d22c465885d8Paul Stewart return service; 4891590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 490b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void FireScanTimer() { 491b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->ScanTimerHandler(); 492b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 493c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley void TriggerScan() { 494c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley wifi_->Scan(NULL); 495c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley } 4961590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetCurrentService() { 4971590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->current_service_; 4981590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 499bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart void SetCurrentService(const WiFiServiceRefPtr &service) { 500bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart wifi_->current_service_ = service; 501bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart } 5023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFi::EndpointMap &GetEndpointMap() { 503165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->endpoint_by_rpcid_; 5043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5051590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetPendingService() { 5061590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->pending_service_; 5071590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 5082b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart const base::CancelableClosure &GetPendingTimeout() { 5092b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart return wifi_->pending_timeout_callback_; 5102b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart } 5111aff7307d462b0160e821607058fe13831d8ef63Paul Stewart const base::CancelableClosure &GetReconnectTimeoutCallback() { 512446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart return wifi_->reconnect_timeout_callback_; 513446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart } 5141aff7307d462b0160e821607058fe13831d8ef63Paul Stewart int GetReconnectTimeoutSeconds() { 5151aff7307d462b0160e821607058fe13831d8ef63Paul Stewart return WiFi::kReconnectTimeoutSeconds; 5161aff7307d462b0160e821607058fe13831d8ef63Paul Stewart } 517b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal const base::CancelableClosure &GetScanTimer() { 518b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal return wifi_->scan_timer_callback_; 519b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 5203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // note: the tests need the proxies referenced by WiFi (not the 521e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // proxies instantiated by WiFiObjectTest), to ensure that WiFi 5223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // sets up its proxies correctly. 5233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantProcessProxyInterface *GetSupplicantProcessProxy() { 5243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_process_proxy_.get(); 5253195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5263c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockSupplicantInterfaceProxy *GetSupplicantInterfaceProxyFromWiFi() { 5278a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal return dynamic_cast<MockSupplicantInterfaceProxy *>( 5288a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal wifi_->supplicant_interface_proxy_.get()); 5293195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5303c5040174273386868cc8dea8044d22c465885d8Paul Stewart // This function returns the supplicant interface proxy whether 5313c5040174273386868cc8dea8044d22c465885d8Paul Stewart // or not we have passed the instantiated object to the WiFi instance 5323c5040174273386868cc8dea8044d22c465885d8Paul Stewart // from WiFiObjectTest, so tests don't need to worry about when they 5333c5040174273386868cc8dea8044d22c465885d8Paul Stewart // set expectations relative to StartWiFi(). 5343c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockSupplicantInterfaceProxy *GetSupplicantInterfaceProxy() { 5353c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockSupplicantInterfaceProxy *proxy = GetSupplicantInterfaceProxyFromWiFi(); 5363c5040174273386868cc8dea8044d22c465885d8Paul Stewart return proxy ? proxy : supplicant_interface_proxy_.get(); 5373c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 538835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart MockSupplicantNetworkProxy *CreateSupplicantNetworkProxy() { 539835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart return new NiceMock<MockSupplicantNetworkProxy>(); 540835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart } 5417ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal const string &GetSupplicantState() { 5427ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return wifi_->supplicant_state_; 5437ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 544835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart void ClearCachedCredentials(const WiFiService *service) { 545835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart return wifi_->ClearCachedCredentials(service); 546835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart } 5470427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart void NotifyEndpointChanged(const WiFiEndpointConstRefPtr &endpoint) { 5480427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart wifi_->NotifyEndpointChanged(endpoint); 5490427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart } 550381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan bool RemoveNetwork(const ::DBus::Path &network) { 551381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan return wifi_->RemoveNetwork(network); 552381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan } 553261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal void RemoveBSS(const ::DBus::Path &bss_path); 5543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportBSS(const ::DBus::Path &bss_path, 5553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 5563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 5573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 558e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 5593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode); 560c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal void ReportIPConfigComplete() { 56179d74c9bdb654be48765c1e7aa416126ffd2ae5eDarin Petkov wifi_->OnIPConfigUpdated(dhcp_config_, true); 562c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal } 563f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal void ReportLinkUp() { 564f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi_->LinkEvent(IFF_LOWER_UP, IFF_LOWER_UP); 565f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 5663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportScanDone() { 567dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal wifi_->ScanDoneTask(); 5683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5691590839e44a0e922d4763003a35dbd493509b705mukesh agrawal void ReportCurrentBSSChanged(const string &new_bss) { 5701590839e44a0e922d4763003a35dbd493509b705mukesh agrawal wifi_->CurrentBSSChanged(new_bss); 5711590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 5727ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void ReportStateChanged(const string &new_state) { 5737ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_->StateChanged(new_state); 5747ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 5755581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart void ReportWiFiDebugScopeChanged(bool enabled) { 5765581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart wifi_->OnWiFiDebugScopeChanged(enabled); 5775581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart } 578cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal void SetPendingService(const WiFiServiceRefPtr &service) { 579cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal wifi_->pending_service_ = service; 580cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal } 581b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void SetScanInterval(uint16_t interval_seconds) { 582b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetScanInterval(interval_seconds, NULL); 583b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 584e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart uint16_t GetScanInterval() { 585e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart return wifi_->GetScanInterval(NULL); 586e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 5872b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void StartWiFi(bool supplicant_present) { 5882b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov wifi_->supplicant_present_ = supplicant_present; 589b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetEnabled(true); // Start(NULL, ResultCallback()); 5903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5912b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void StartWiFi() { 5922b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov StartWiFi(true); 5932b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 5942f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal void OnAfterResume() { 5952f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal wifi_->OnAfterResume(); 5962f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal } 5972f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal void OnBeforeSuspend() { 5982f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal wifi_->OnBeforeSuspend(); 5992f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal } 6002b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void OnSupplicantAppear() { 6012b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov wifi_->OnSupplicantAppear(":1.7"); 6022b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(wifi_->supplicant_present_); 6032b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 6042b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void OnSupplicantVanish() { 6052b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov wifi_->OnSupplicantVanish(); 6062b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(wifi_->supplicant_present_); 6072b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 6082b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov bool GetSupplicantPresent() { 6092b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov return wifi_->supplicant_present_; 6102b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 6114a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov bool SetBgscanMethod(const string &method) { 6124a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ::DBus::Error error; 6134a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov return DBusAdaptor::SetProperty( 6144a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov wifi_->mutable_store(), 6154a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov flimflam::kBgscanMethodProperty, 6164a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov DBusAdaptor::StringToVariant(method), 6174a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov &error); 6184a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 6194a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 6204a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov void AppendBgscan(WiFiService *service, 6214a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov std::map<std::string, DBus::Variant> *service_params) { 6224a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov wifi_->AppendBgscan(service, service_params); 6234a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 6244a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 625bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart void ReportCertification(const map<string, ::DBus::Variant> &properties) { 626bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart wifi_->CertificationTask(properties); 627bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart } 62810ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 629db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart void ReportEAPEvent(const string &status, const string ¶meter) { 630db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart wifi_->EAPEventTask(status, parameter); 631db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart } 632db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 633e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart void RestartFastScanAttempts() { 634e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart wifi_->RestartFastScanAttempts(); 635e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 636e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 6371aff7307d462b0160e821607058fe13831d8ef63Paul Stewart void StartReconnectTimer() { 6381aff7307d462b0160e821607058fe13831d8ef63Paul Stewart wifi_->StartReconnectTimer(); 6391aff7307d462b0160e821607058fe13831d8ef63Paul Stewart } 6401aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 6411aff7307d462b0160e821607058fe13831d8ef63Paul Stewart void StopReconnectTimer() { 6421aff7307d462b0160e821607058fe13831d8ef63Paul Stewart wifi_->StopReconnectTimer(); 6431aff7307d462b0160e821607058fe13831d8ef63Paul Stewart } 6441aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 6453c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart void SetLinkMonitor(LinkMonitor *link_monitor) { 6463c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart wifi_->set_link_monitor(link_monitor); 6473c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart } 6483c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart 6491369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart bool SuspectCredentials(const WiFiService &service, 6501369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart Service::ConnectFailure *failure) { 6511369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart return wifi_->SuspectCredentials(service, failure); 6521369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart } 6531369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 6543c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart void OnLinkMonitorFailure() { 6553c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart wifi_->OnLinkMonitorFailure(); 6563c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart } 6573c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart 65810ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart NiceMockControl *control_interface() { 65910ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart return &control_interface_; 66010ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart } 66110ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 66285aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart MockMetrics *metrics() { 66385aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart return &metrics_; 66485aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart } 66585aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart 6663239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal MockManager *manager() { 6673239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return &manager_; 6683239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 669d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 670d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDeviceInfo *device_info() { 671d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &device_info_; 672d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 673d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 674d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDHCPProvider *dhcp_provider() { 675d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &dhcp_provider_; 676d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 677d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 6783239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal const WiFiConstRefPtr wifi() const { 6793239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return wifi_; 6803239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 6813239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal 682b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal TestProxyFactory *proxy_factory() { 683b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return &proxy_factory_; 684b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 685b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 6863c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiProvider *wifi_provider() { 6873c5040174273386868cc8dea8044d22c465885d8Paul Stewart return &wifi_provider_; 6883c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 6893c5040174273386868cc8dea8044d22c465885d8Paul Stewart 690e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EventDispatcher *event_dispatcher_; 6915c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal NiceMock<MockRTNLHandler> rtnl_handler_; 6925c05b2920be742d518829972127172481722058dmukesh agrawal MockTime time_; 6933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 6943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 695dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal NiceMockControl control_interface_; 6963426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le MockMetrics metrics_; 697f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockGLib glib_; 6982ae797d040b7261a5619c750e07037566bcb542bChris Masone MockManager manager_; 699c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal MockDeviceInfo device_info_; 7003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiRefPtr wifi_; 7013c5040174273386868cc8dea8044d22c465885d8Paul Stewart NiceMock<MockWiFiProvider> wifi_provider_; 7023c5040174273386868cc8dea8044d22c465885d8Paul Stewart int bss_counter_; 7033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // protected fields interspersed between private fields, due to 7053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // initialization order 7063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 7073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kDeviceName[]; 708626719f89881a949d8b5a8fa808beb924496489fChris Masone static const char kDeviceAddress[]; 7093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeAdHoc[]; 7103195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeInfrastructure[]; 711446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart static const char kBSSName[]; 712446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart static const char kSSIDName[]; 7133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 714dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantProcessProxy> supplicant_process_proxy_; 715b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal scoped_ptr<MockSupplicantBSSProxy> supplicant_bss_proxy_; 716f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockDHCPProvider dhcp_provider_; 717f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal scoped_refptr<MockDHCPConfig> dhcp_config_; 7182b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov NiceMock<MockDBusManager> *dbus_manager_; 7193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 7213c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<MockSupplicantInterfaceProxy> supplicant_interface_proxy_; 722835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart NiceMock<TestProxyFactory> proxy_factory_; 7233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal}; 7243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 725e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kDeviceName[] = "wlan0"; 726e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kDeviceAddress[] = "000102030405"; 727e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kNetworkModeAdHoc[] = "ad-hoc"; 728e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kNetworkModeInfrastructure[] = "infrastructure"; 729446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewartconst char WiFiObjectTest::kBSSName[] = "bss0"; 730446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewartconst char WiFiObjectTest::kSSIDName[] = "ssid0"; 7313195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 732e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartvoid WiFiObjectTest::RemoveBSS(const ::DBus::Path &bss_path) { 733b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSRemovedTask(bss_path); 734261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 735261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 736e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartvoid WiFiObjectTest::ReportBSS(const ::DBus::Path &bss_path, 7373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 7383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 7393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 740e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 7413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode) { 7423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal map<string, ::DBus::Variant> bss_properties; 7433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 7453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["SSID"].writer()); 7463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << vector<uint8_t>(ssid.begin(), ssid.end()); 7473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 7483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 7493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal string bssid_nosep; 7503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal vector<uint8_t> bssid_bytes; 7513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal RemoveChars(bssid, ":", &bssid_nosep); 7523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal base::HexStringToBytes(bssid_nosep, &bssid_bytes); 7533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["BSSID"].writer()); 7553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << bssid_bytes; 7563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 7570654ece95920696c530ce1c0344365eb741f7efePaul Stewart bss_properties[WPASupplicant::kBSSPropertySignal].writer(). 758e41a72d0737488d561a4158019409d5785dad61bThieu Le append_int16(signal_strength); 7590654ece95920696c530ce1c0344365eb741f7efePaul Stewart bss_properties[WPASupplicant::kBSSPropertyFrequency].writer(). 760e41a72d0737488d561a4158019409d5785dad61bThieu Le append_uint16(frequency); 7610654ece95920696c530ce1c0344365eb741f7efePaul Stewart bss_properties[WPASupplicant::kBSSPropertyMode].writer().append_string(mode); 762b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSAddedTask(bss_path, bss_properties); 7633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 765e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul StewartWiFiObjectTest::TestProxyFactory::TestProxyFactory(WiFiObjectTest *test) 766b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal : test_(test) { 767b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*this, CreateSupplicantBSSProxy(_, _, _)).Times(AnyNumber()); 768b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ON_CALL(*this, CreateSupplicantBSSProxy(_, _, _)) 769b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal .WillByDefault( 770b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Invoke(this, (&TestProxyFactory::CreateSupplicantBSSProxyInternal))); 771b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 772b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 773e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// Most of our tests involve using a real EventDispatcher object. 774e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartclass WiFiMainTest : public WiFiObjectTest { 775e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart public: 776e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiMainTest() : WiFiObjectTest(&dispatcher_) {} 777e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 778e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart protected: 779e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EventDispatcher dispatcher_; 780e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart}; 781e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 7823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ProxiesSetUpDuringStart) { 7833195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 7843c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetSupplicantInterfaceProxyFromWiFi() == NULL); 7853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 7873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 7883c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(GetSupplicantInterfaceProxyFromWiFi() == NULL); 7893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7912b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, SupplicantPresent) { 7922b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(GetSupplicantPresent()); 7932b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 7942b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 7952b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantAppearStarted) { 7962b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 7972b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 7980654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*dbus_manager_, WatchName(WPASupplicant::kDBusAddr, _, _)); 7992b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov StartWiFi(false); // No supplicant present. 8002b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 8012b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8022b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantAppear(); 8032b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 8049cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov 8059cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // If supplicant reappears while the device is started, the device should be 8069cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // restarted. 8079cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)); 8089cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov EXPECT_CALL(*manager(), RegisterDevice(_)); 8099cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov OnSupplicantAppear(); 8102b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 8112b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8122b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantAppearStopped) { 8132b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 8142b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8152b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantAppear(); 8162b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 8179cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov 8189cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // If supplicant reappears while the device is stopped, the device should not 8199cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // be restarted. 8209cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)).Times(0); 8219cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov OnSupplicantAppear(); 8222b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 8232b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8242b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantVanishStarted) { 8252b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 8262b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8272b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov StartWiFi(); 8282b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 8292b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantPresent()); 8302b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8312b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)); 8322b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*manager(), RegisterDevice(_)); 8332b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantVanish(); 8342b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 8352b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8362b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantVanishStopped) { 8372b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantAppear(); 8382b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantPresent()); 8392b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)).Times(0); 8402b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantVanish(); 8412b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 8422b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 843549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul StewartTEST_F(WiFiMainTest, OnSupplicantVanishedWhileConnected) { 8443c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 8453c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 8463c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 8473c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, NULL)); 848549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart ScopedMockLog log; 849549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 850c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 851549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EndsWith("silently resetting current_service_."))); 852549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_CALL(*manager(), DeregisterDevice(_)) 853549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart .WillOnce(InvokeWithoutArgs(this, &WiFiObjectTest::StopWiFi)); 8543c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<EndpointRemovalHandler> handler( 8553c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeEndpointRemovalHandler(service)); 8563c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 8573c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Invoke(handler.get(), 8583c5040174273386868cc8dea8044d22c465885d8Paul Stewart &EndpointRemovalHandler::OnEndpointRemoved)); 8593c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 860549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_CALL(*manager(), RegisterDevice(_)); 861549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart OnSupplicantVanish(); 862549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_TRUE(GetCurrentService() == NULL); 863549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart} 864549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart 8653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, CleanStart) { 8663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 8673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 8683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 8693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 8703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 8713195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceUnknown", 8723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 873b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 8743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 8753c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 8763239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 877b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 8783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 8793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 880835934a8e009edf3b6b73717fe3ed336d6720d68Paul StewartTEST_F(WiFiMainTest, ClearCachedCredentials) { 8813c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 882835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart DBus::Path network = "/test/path"; 8833c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(network, NULL, NULL)); 8843c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)); 885835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart ClearCachedCredentials(service); 886835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart} 887835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 8880427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul StewartTEST_F(WiFiMainTest, NotifyEndpointChanged) { 8890427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart WiFiEndpointRefPtr endpoint = 8900427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart MakeEndpointWithMode("ssid", "00:00:00:00:00:00", kNetworkModeAdHoc); 8910427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointUpdated(EndpointMatch(endpoint))); 8920427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart NotifyEndpointChanged(endpoint); 8930427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart} 8940427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart 895381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetwork) { 896381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 897381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 8983c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)); 899381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_TRUE(RemoveNetwork(network)); 900381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 901381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 902381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetworkWhenSupplicantReturnsNetworkUnknown) { 903381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 9043c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)) 905381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan .WillRepeatedly(Throw( 906381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Error( 907381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "fi.w1.wpa_supplicant1.NetworkUnknown", 908381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "test threw fi.w1.wpa_supplicant1.NetworkUnknown"))); 909381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 910381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_TRUE(RemoveNetwork(network)); 911381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 912381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 913ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman UgurayTEST_F(WiFiMainTest, UseArpGateway) { 914ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray EXPECT_CALL(dhcp_provider_, CreateConfig(kDeviceName, _, _, true)) 915ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray .WillOnce(Return(dhcp_config_)); 916ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray const_cast<WiFi *>(wifi().get())->AcquireIPConfig(); 917ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray} 918ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray 919381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetworkWhenSupplicantReturnsInvalidArgs) { 920381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 9213c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)) 922381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan .WillRepeatedly(Throw( 923381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Error( 924381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "fi.w1.wpa_supplicant1.InvalidArgs", 925381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "test threw fi.w1.wpa_supplicant1.InvalidArgs"))); 926381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 927381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_FALSE(RemoveNetwork(network)); 928381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 929381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 930381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetworkWhenSupplicantReturnsUnknownError) { 931381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 9323c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)) 933381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan .WillRepeatedly(Throw( 934381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Error( 935381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "fi.w1.wpa_supplicant1.UnknownError", 936381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "test threw fi.w1.wpa_supplicant1.UnknownError"))); 937381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 938381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_FALSE(RemoveNetwork(network)); 939381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 940381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 9413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Restart) { 9423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)) 9433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 9443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 9453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 9463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceExists", 9472b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov "test threw fi.w1.wpa_supplicant1.InterfaceExists"))); 9483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)); 9493c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 9503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 9513239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 9523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 9533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 9543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, StartClearsState) { 9553c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveAllNetworks()); 9563c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), FlushBSS(_)); 9573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 9583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 9593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 960c68c867905c985c0a703a7e2b575ecc091d14688Christopher WileyTEST_F(WiFiMainTest, NoScansWhileConnecting) { 961c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley StartWiFi(); 9623c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 9633c5040174273386868cc8dea8044d22c465885d8Paul Stewart dispatcher_.DispatchPendingEvents(); 9643c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9653c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 966c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley SetPendingService(service); 967c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley // If we're connecting, we ignore scan requests to stay on channel. 9683c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(true)); 969c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 970c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley TriggerScan(); 971c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 972c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9733c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 9743c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(false)); 975c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 976c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley TriggerScan(); 977c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 978c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9793c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 980c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley // Similarly, ignore scans when our connected service is reconnecting. 981c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley SetPendingService(NULL); 982c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley SetCurrentService(service); 9833c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(true)); 984c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 985c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley TriggerScan(); 986c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 987c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9883c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 989c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley // But otherwise we'll honor the request. 9903c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(false)); 991c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 992c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley TriggerScan(); 993c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 994c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9953c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 996c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley} 997c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley 9982f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawalTEST_F(WiFiMainTest, ResumeStartsScanWhenIdle) { 9993c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1000ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 1001ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 10023c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 10035c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 1004ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 1005ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 10062f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnAfterResume(); 1007ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 1008ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 1009ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 10102f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawalTEST_F(WiFiMainTest, SuspendDoesNotStartScan) { 10113c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1012ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 1013ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 10143c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 1015ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 1016ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 10172f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnBeforeSuspend(); 1018ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 1019ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 1020ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 10212f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawalTEST_F(WiFiMainTest, ResumeDoesNotStartScanWhenNotIdle) { 10223c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1023ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 1024ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 10253c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 10263c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(DBus::Path(), NULL, NULL)); 10273c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(wifi()->IsIdle()); 10283c5040174273386868cc8dea8044d22c465885d8Paul Stewart ScopedMockLog log; 10293ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 10303ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal EXPECT_CALL(log, Log(_, _, EndsWith("already scanning or connected."))); 1031ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 10322f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnAfterResume(); 1033ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 1034ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 1035ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 10363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResults) { 10373c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(_)).Times(5); 10383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 1039e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 10403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 1041e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 10423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 1043e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 10443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 1045e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss3", "ssid3", "00:00:00:00:00:03", 3, 0, kNetworkModeInfrastructure); 1046e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency = 2412; 1047e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss4", "ssid4", "00:00:00:00:00:04", 4, frequency, 1048e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeAdHoc); 1049e41a72d0737488d561a4158019409d5785dad61bThieu Le 1050e41a72d0737488d561a4158019409d5785dad61bThieu Le const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 1051e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(5, endpoints_by_rpcid.size()); 1052e41a72d0737488d561a4158019409d5785dad61bThieu Le 1053e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFi::EndpointMap::const_iterator i; 1054e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFiEndpointRefPtr endpoint; 1055e41a72d0737488d561a4158019409d5785dad61bThieu Le for (i = endpoints_by_rpcid.begin(); 1056e41a72d0737488d561a4158019409d5785dad61bThieu Le i != endpoints_by_rpcid.end(); 1057e41a72d0737488d561a4158019409d5785dad61bThieu Le ++i) { 1058e41a72d0737488d561a4158019409d5785dad61bThieu Le if (i->second->bssid_string() == "00:00:00:00:00:04") 1059e41a72d0737488d561a4158019409d5785dad61bThieu Le break; 1060e41a72d0737488d561a4158019409d5785dad61bThieu Le } 1061e41a72d0737488d561a4158019409d5785dad61bThieu Le ASSERT_TRUE(i != endpoints_by_rpcid.end()); 1062e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(4, i->second->signal_strength()); 1063e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency, i->second->frequency()); 1064e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ("adhoc", i->second->network_mode()); 10653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 10663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 10673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanCompleted) { 10683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 10693c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr ap0 = MakeEndpointWithMode("ssid0", "00:00:00:00:00:00", 10703c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeAdHoc); 10713c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr ap1 = MakeEndpoint("ssid1", "00:00:00:00:00:01"); 10723c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr ap2 = MakeEndpoint("ssid2", "00:00:00:00:00:02"); 10733c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(EndpointMatch(ap0))).Times(1); 10743c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(EndpointMatch(ap1))).Times(1); 10753c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(EndpointMatch(ap2))).Times(1); 10763c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS("bss0", ap0->ssid_string(), ap0->bssid_string(), 0, 0, 10773c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeAdHoc); 10783c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS("bss1", ap1->ssid_string(), ap1->bssid_string(), 0, 0, 10793c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeInfrastructure); 10803c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS("bss2", ap2->ssid_string(), ap2->bssid_string(), 0, 0, 10813c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeInfrastructure); 10823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 10833c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(wifi_provider()); 10843c5040174273386868cc8dea8044d22c465885d8Paul Stewart 10853c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(_)).Times(0); 1086b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 1087e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with SSIDs that start with NULL should be filtered. 1088e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss3", string(1, 0), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 1089b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 1090e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with empty SSIDs should be filtered. 1091e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss3", string(), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 10928a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 10938a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 10948a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemovedWhileConnected) { 10958a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 10963c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 10973c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path bss_path; 10983c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 10993c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, &bss_path)); 11003c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<EndpointRemovalHandler> handler( 11013c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeEndpointRemovalHandler(service)); 11023c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 11033c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Invoke(handler.get(), 11043c5040174273386868cc8dea8044d22c465885d8Paul Stewart &EndpointRemovalHandler::OnEndpointRemoved)); 11058a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 11063c5040174273386868cc8dea8044d22c465885d8Paul Stewart RemoveBSS(bss_path); 1107261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 1108261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 1109261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonSolitaryBSSRemoved) { 1110261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 11113c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 11123c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path bss_path; 11133c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 11143c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, &bss_path)); 11153c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 11163c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 11173c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 11183c5040174273386868cc8dea8044d22c465885d8Paul Stewart RemoveBSS(bss_path); 11193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 11203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1121835934a8e009edf3b6b73717fe3ed336d6720d68Paul StewartTEST_F(WiFiMainTest, ReconnectPreservesDBusPath) { 1122835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart StartWiFi(); 11233c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path kPath = "/test/path"; 11243c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 1125835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 1126835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // Return the service to a connectable state. 11273c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 1128835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart InitiateDisconnect(service); 11293c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11303c5040174273386868cc8dea8044d22c465885d8Paul Stewart 11313c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Complete the disconnection by reporting a BSS change. 11320654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 1133835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 1134835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // A second connection attempt should remember the DBus path associated 1135835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // with this service. 11363c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(_)).Times(0); 11373c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), SelectNetwork(kPath)); 1138835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart InitiateConnect(service); 1139835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart} 1140835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 11410ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingService) { 11420ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 11433c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 11443c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 11453c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetPendingService() == service.get()); 11463c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 11473c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateIdle)).Times(AtLeast(1)); 11480ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 11493c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service.get()); 11500ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetPendingService() == NULL); 11510ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 11520ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11530ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingServiceWithCurrent) { 11540ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 11553c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0( 11563c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL)); 11573c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0, GetCurrentService()); 11583c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetPendingService().get()); 11590ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11603c5040174273386868cc8dea8044d22c465885d8Paul Stewart // We don't explicitly call Disconnect() while transitioning to a new 11613c5040174273386868cc8dea8044d22c465885d8Paul Stewart // service. Instead, we use the side-effect of SelectNetwork (verified in 11623c5040174273386868cc8dea8044d22c465885d8Paul Stewart // SetupConnectingService). 11633c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 11643c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1( 11653c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService("/new/path", NULL, NULL)); 11663c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11670ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11680ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 11690ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 11703c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, SetState(Service::kStateIdle)).Times(AtLeast(1)); 11713c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 11720ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service1); 11733c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service1.get()); 11740ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11750ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| will be unchanged until supplicant signals 11760ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // that CurrentBSS has changed. 11770ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 11780ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |pending_service_| is updated immediately. 11793c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetPendingService().get()); 11802b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_TRUE(GetPendingTimeout().IsCancelled()); 11810ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 11820ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11830ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentService) { 11843c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 11853c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path kPath("/fake/path"); 11863c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 11873c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 11880ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 11890ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11900ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| should not change until supplicant reports 11910ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // a BSS change. 11920ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 1193835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 1194835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // Expect that the entry associated with this network will be disabled. 1195835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart MockSupplicantNetworkProxy *network_proxy = CreateSupplicantNetworkProxy(); 1196835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart EXPECT_CALL(*proxy_factory(), CreateSupplicantNetworkProxy( 11970654ece95920696c530ce1c0344365eb741f7efePaul Stewart kPath, WPASupplicant::kDBusAddr)) 1198835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart .WillOnce(Return(network_proxy)); 1199835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart EXPECT_CALL(*network_proxy, SetEnabled(false)); 12003c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)).Times(0); 12010654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 12023c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetCurrentService().get()); 12033c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 12040ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 12050ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 1206c618448120f8945d77d451242a7de6782d1e4189Christopher WileyTEST_F(WiFiMainTest, DisconnectCurrentServiceWithErrors) { 12073c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 12083c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path kPath("/fake/path"); 12093c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 12103c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()) 1211c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley .WillOnce(InvokeWithoutArgs(this, (&WiFiMainTest::ThrowDBusError))); 12123c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)).Times(1); 1213c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley InitiateDisconnect(service); 1214c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley 1215c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley // We may sometimes fail to disconnect via supplicant, and we patch up some 1216c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley // state when this happens. 1217c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley EXPECT_EQ(NULL, GetCurrentService().get()); 1218c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley EXPECT_EQ(NULL, wifi()->selected_service().get()); 1219c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley} 1220c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley 12210ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceWithPending) { 12220ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 12233c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service0(SetupConnectedService(DBus::Path(), NULL, NULL)); 12243c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service1(SetupConnectingService(DBus::Path(), NULL, NULL)); 12250ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 12260ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 12273c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 12280ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service0); 12290ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 12300ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 12310ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 12322b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_FALSE(GetPendingTimeout().IsCancelled()); 12332b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart} 12342b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart 12352b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul StewartTEST_F(WiFiMainTest, TimeoutPendingService) { 12362b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart StartWiFi(); 12372b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart const base::CancelableClosure &pending_timeout = GetPendingTimeout(); 12382b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_TRUE(pending_timeout.IsCancelled()); 12393c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 12403c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 12412b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_FALSE(pending_timeout.IsCancelled()); 12422b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_EQ(service, GetPendingService()); 12433c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(Service::kFailureOutOfRange, _)); 12443c5040174273386868cc8dea8044d22c465885d8Paul Stewart pending_timeout.callback().Run(); 12450ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 12460ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 12470ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectInvalidService) { 12480ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 12493c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 12503c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, &service); 12513c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 12520ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 12530ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 12540ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 12550ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceFailure) { 12563c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 12573c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path kPath("/fake/path"); 12583c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 12593c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()) 12600ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .WillRepeatedly(Throw( 12610ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal DBus::Error( 12620ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "fi.w1.wpa_supplicant1.NotConnected", 12630ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "test threw fi.w1.wpa_supplicant1.NotConnected"))); 12643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)); 12650ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 12663c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetCurrentService().get()); 12670ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 12680ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 12695c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawalTEST_F(WiFiMainTest, Stop) { 1270c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 12713c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint0; 12723c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path kPath("/fake/path"); 12733c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service0(SetupConnectedService(kPath, &endpoint0, NULL)); 12743c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint1; 12753c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, &endpoint1, NULL); 12763c5040174273386868cc8dea8044d22c465885d8Paul Stewart 12773c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint0))) 12783c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 12793c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint1))) 12803c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 12813c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)).Times(1); 1282c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StopWiFi(); 1283b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1284c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal EXPECT_FALSE(wifi()->weak_ptr_factory_.HasWeakPtrs()); 12855c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal} 12865c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 1287549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul StewartTEST_F(WiFiMainTest, StopWhileConnected) { 12883c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 12893c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 12903c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 12913c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, NULL)); 12923c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<EndpointRemovalHandler> handler( 12933c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeEndpointRemovalHandler(service)); 12943c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 12953c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Invoke(handler.get(), 12963c5040174273386868cc8dea8044d22c465885d8Paul Stewart &EndpointRemovalHandler::OnEndpointRemoved)); 12973c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 1298549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart StopWiFi(); 1299549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_TRUE(GetCurrentService() == NULL); 1300549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart} 1301549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart 1302446639208c7678fd0ef452caf8ce63b6596d25e2Paul StewartTEST_F(WiFiMainTest, ReconnectTimer) { 13033c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 13043c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 13053c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL)); 13063c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnected()).WillRepeatedly(Return(true)); 13071aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 13080654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateDisconnected); 13091aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_FALSE(GetReconnectTimeoutCallback().IsCancelled()); 13100654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 13111aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 13120654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateDisconnected); 13131aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_FALSE(GetReconnectTimeoutCallback().IsCancelled()); 1314446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart ReportCurrentBSSChanged(kBSSName); 13151aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 13160654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateDisconnected); 13171aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_FALSE(GetReconnectTimeoutCallback().IsCancelled()); 13183c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 13191aff7307d462b0160e821607058fe13831d8ef63Paul Stewart GetReconnectTimeoutCallback().callback().Run(); 13203c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 13211aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 1322446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart} 1323446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart 1324cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart 1325ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartMATCHER_P(HasHiddenSSID, ssid, "") { 1326a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart map<string, DBus::Variant>::const_iterator it = 13270654ece95920696c530ce1c0344365eb741f7efePaul Stewart arg.find(WPASupplicant::kPropertyScanSSIDs); 1328ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart if (it == arg.end()) { 1329ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return false; 1330ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 1331ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1332ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const DBus::Variant &ssids_variant = it->second; 1333ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_TRUE(DBusAdaptor::IsByteArrays(ssids_variant.signature())); 1334ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const ByteArrays &ssids = it->second.operator ByteArrays(); 1335ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // A valid Scan containing a single hidden SSID should contain 1336ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // two SSID entries: one containing the SSID we are looking for, 1337ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // and an empty entry, signifying that we also want to do a 1338ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // broadcast probe request for all non-hidden APs as well. 13393c5040174273386868cc8dea8044d22c465885d8Paul Stewart return ssids.size() == 2 && ssids[0] == ssid && ssids[1].empty(); 13403c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 13413c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13423c5040174273386868cc8dea8044d22c465885d8Paul StewartMATCHER(HasNoHiddenSSID, "") { 13433c5040174273386868cc8dea8044d22c465885d8Paul Stewart map<string, DBus::Variant>::const_iterator it = 13440654ece95920696c530ce1c0344365eb741f7efePaul Stewart arg.find(WPASupplicant::kPropertyScanSSIDs); 13453c5040174273386868cc8dea8044d22c465885d8Paul Stewart return it == arg.end(); 1346ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1347ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1348ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartTEST_F(WiFiMainTest, ScanHidden) { 13493c5040174273386868cc8dea8044d22c465885d8Paul Stewart vector<uint8_t>kSSID(1, 'a'); 13503c5040174273386868cc8dea8044d22c465885d8Paul Stewart ByteArrays ssids; 13513c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssids.push_back(kSSID); 13523c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13533c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 13543c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()).WillOnce(Return(ssids)); 13553c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(HasHiddenSSID(kSSID))); 13563c5040174273386868cc8dea8044d22c465885d8Paul Stewart dispatcher_.DispatchPendingEvents(); 13573c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 13583c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13593c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiMainTest, ScanNoHidden) { 1360ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart StartWiFi(); 13613c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 13623c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(ByteArrays())); 13633c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(HasNoHiddenSSID())); 1364ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart dispatcher_.DispatchPendingEvents(); 1365ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1366ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1367fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul StewartTEST_F(WiFiMainTest, ScanWiFiDisabledAfterResume) { 1368fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart ScopedMockLog log; 1369fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 1370fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart EXPECT_CALL(log, Log(_, _, EndsWith( 1371fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart "Ignoring scan request while device is not enabled."))).Times(1); 13723c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1373fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart StartWiFi(); 1374fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart StopWiFi(); 1375fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart // A scan is queued when WiFi resumes. 1376fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart OnAfterResume(); 1377fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart dispatcher_.DispatchPendingEvents(); 1378fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart} 1379fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart 13807ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, InitialSupplicantState) { 13817ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(WiFi::kInterfaceStateUnknown, GetSupplicantState()); 13827ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13837ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13847ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeNoService) { 13857ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // State change should succeed even if there is no pending Service. 13860654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateScanning); 13870654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kInterfaceStateScanning, GetSupplicantState()); 13887ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13897ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13907ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeWithService) { 13917ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Forward transition should trigger a Service state change. 13927ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 13937ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 1394cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 13957ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 13967ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 13970654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateAssociated); 13987ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 13997ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 14007ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 1401d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 14027ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 14037ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 14047ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeBackwardsWithService) { 14057ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Some backwards transitions should not trigger a Service state change. 14067ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Supplicant state should still be updated, however. 1407d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1408d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 14097ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 14107ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 1411cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 14122b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 1413d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(Service::kStateConfiguring)); 14147ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 14150654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 14160654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateAuthenticating); 14170654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_EQ(WPASupplicant::kInterfaceStateAuthenticating, 14187ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal GetSupplicantState()); 14197ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 14207ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 14213c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 14223c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(_)).Times(AnyNumber()); 14237ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 14247ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 1425a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul StewartTEST_F(WiFiMainTest, ConnectToServiceWithoutRecentIssues) { 1426a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockSupplicantProcessProxy *process_proxy = supplicant_process_proxy_.get(); 1427a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart StartWiFi(); 1428a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart dispatcher_.DispatchPendingEvents(); 1429a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1430a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()).Times(0); 1431a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 1432a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*service.get(), HasRecentConnectionIssues()) 1433a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .WillOnce(Return(false)); 1434a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart InitiateConnect(service); 1435a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart} 1436a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1437a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul StewartTEST_F(WiFiMainTest, ConnectToServiceWithRecentIssues) { 1438a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // Turn of WiFi debugging, so the only reason we will turn on supplicant 1439a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // debugging will be to debug a problematic connection. 1440a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart ScopeLogger::GetInstance()->EnableScopesByName("-wifi"); 1441a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1442a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockSupplicantProcessProxy *process_proxy = supplicant_process_proxy_.get(); 1443a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart StartWiFi(); 1444a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart dispatcher_.DispatchPendingEvents(); 1445a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1446a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 14470654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelInfo)); 14480654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(WPASupplicant::kDebugLevelDebug)) 1449a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .Times(1); 1450a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*service.get(), HasRecentConnectionIssues()) 1451a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .WillOnce(Return(true)); 1452a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart InitiateConnect(service); 1453a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 1454a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1455a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart SetPendingService(NULL); 1456a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart SetCurrentService(service); 1457a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1458a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // When we disconnect from the troubled service, we should reduce the 1459a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // level of supplciant debugging. 1460a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 14610654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelDebug)); 14620654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(WPASupplicant::kDebugLevelInfo)) 1463a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .Times(1); 14640654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 1465a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart} 1466a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 14671590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToDisconnected) { 14681590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 14693c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 14703c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 14713c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, NULL); 14721590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14733c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateIdle)); 14743c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetFailureSilent(Service::kFailureUnknown)); 14750654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 14761590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetCurrentService().get()); 14771590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 14781590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 14791590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14801590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToConnectedNewService) { 14811590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 14823c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0 = 14833c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 14843c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1; 14853c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path1(MakeNewEndpointAndService( 14863c5040174273386868cc8dea8044d22c465885d8Paul Stewart 0, 0, kNetworkModeAdHoc, NULL, &service1)); 14873c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0.get(), GetCurrentService().get()); 14881590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1489c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Note that we deliberately omit intermediate supplicant states 1490c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // (e.g. kInterfaceStateAssociating), on the theory that they are 1491c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // unreliable. Specifically, they may be quashed if the association 1492c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // completes before supplicant flushes its changed properties. 14933c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, SetState(Service::kStateIdle)).Times(AtLeast(1)); 14943c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(bss_path1); 14953c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, SetState(Service::kStateConfiguring)); 14960654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 14973c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service1.get(), GetCurrentService().get()); 14983c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service0); 14993c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service1); 15001590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 15011590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1502e41a72d0737488d561a4158019409d5785dad61bThieu LeTEST_F(WiFiMainTest, CurrentBSSChangedUpdateServiceEndpoint) { 1503e41a72d0737488d561a4158019409d5785dad61bThieu Le StartWiFi(); 15043c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 15053c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 15063c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 15073c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path = 15083c5040174273386868cc8dea8044d22c465885d8Paul Stewart AddEndpointToService(service, 0, 0, kNetworkModeAdHoc, &endpoint); 15093c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, NotifyCurrentEndpoint(EndpointMatch(endpoint))); 15103c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(bss_path); 15114eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal} 15124eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal 15138a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, NewConnectPreemptsPending) { 15148a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 15153c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0( 15163c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 15173c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0.get(), GetPendingService().get()); 15188a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 15193c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1( 15203c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 15213c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service1.get(), GetPendingService().get()); 15223c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetCurrentService().get()); 15238a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 15248a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15258a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, IsIdle) { 15268a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 15278a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(wifi()->IsIdle()); 15283c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 15293c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 15308a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_FALSE(wifi()->IsIdle()); 15318a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 15328a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15334a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovMATCHER_P(WiFiAddedArgs, bgscan, "") { 15340654ece95920696c530ce1c0344365eb741f7efePaul Stewart return ContainsKey(arg, WPASupplicant::kNetworkPropertyScanSSID) && 15350654ece95920696c530ce1c0344365eb741f7efePaul Stewart ContainsKey(arg, WPASupplicant::kNetworkPropertyBgscan) == bgscan; 15364d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 15374d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 15384d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawalTEST_F(WiFiMainTest, AddNetworkArgs) { 15394d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal StartWiFi(); 15403c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 15413c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, &service); 15423c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(WiFiAddedArgs(true))); 15430654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_TRUE(SetBgscanMethod(WPASupplicant::kNetworkBgscanMethodSimple)); 15444d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal InitiateConnect(service); 15454d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 15464d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 15474a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovTEST_F(WiFiMainTest, AddNetworkArgsNoBgscan) { 15484a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov StartWiFi(); 15493c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 15503c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, &service); 15513c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(WiFiAddedArgs(false))); 15524a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov InitiateConnect(service); 15534a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov} 15544a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 15554a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovTEST_F(WiFiMainTest, AppendBgscan) { 15564a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov StartWiFi(); 15573c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 15584a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov { 15594a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov // 1 endpoint, default bgscan method -- background scan disabled. 15604a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov std::map<std::string, DBus::Variant> params; 15613c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).WillOnce(Return(1)); 15623c5040174273386868cc8dea8044d22c465885d8Paul Stewart AppendBgscan(service, ¶ms); 15633c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 15640654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_FALSE(ContainsKey(params, WPASupplicant::kNetworkPropertyBgscan)); 15654a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 15664a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov { 15674a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov // 2 endpoints, default bgscan method -- background scan frequency reduced. 15684a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov map<string, DBus::Variant> params; 15693c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).WillOnce(Return(2)); 15703c5040174273386868cc8dea8044d22c465885d8Paul Stewart AppendBgscan(service, ¶ms); 15713c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 15724a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov string config_string; 15734a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE( 15744a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov DBusProperties::GetString(params, 15750654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkPropertyBgscan, 15764a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov &config_string)); 15774a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov vector<string> elements; 15784a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov base::SplitString(config_string, ':', &elements); 15794a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ASSERT_EQ(4, elements.size()); 15804a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(WiFi::kDefaultBgscanMethod, elements[0]); 15814a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(StringPrintf("%d", WiFi::kBackgroundScanIntervalSeconds), 15824a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov elements[3]); 15834a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 15844a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov { 15854a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov // Explicit bgscan method -- regular background scan frequency. 15860654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_TRUE(SetBgscanMethod(WPASupplicant::kNetworkBgscanMethodSimple)); 15874a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov std::map<std::string, DBus::Variant> params; 15883c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).Times(0); 15893c5040174273386868cc8dea8044d22c465885d8Paul Stewart AppendBgscan(service, ¶ms); 15903c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 15914a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov string config_string; 15924a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE( 15934a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov DBusProperties::GetString(params, 15940654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkPropertyBgscan, 15954a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov &config_string)); 15964a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov vector<string> elements; 15974a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov base::SplitString(config_string, ':', &elements); 15984a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ASSERT_EQ(4, elements.size()); 15994a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(StringPrintf("%d", WiFi::kDefaultScanIntervalSeconds), 16004a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov elements[3]); 16014a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 16025c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley { 16035c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley // No scan method, simply returns without appending properties 16040654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_TRUE(SetBgscanMethod(WPASupplicant::kNetworkBgscanMethodNone)); 16055c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley std::map<std::string, DBus::Variant> params; 16063c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).Times(0); 16075c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley AppendBgscan(service.get(), ¶ms); 16083c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 16095c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley string config_string; 16105c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley EXPECT_FALSE( 16115c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley DBusProperties::GetString(params, 16120654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kNetworkPropertyBgscan, 16135c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley &config_string)); 16145c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley } 16154a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov} 16164a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 1617c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, StateAndIPIgnoreLinkEvent) { 1618c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 16193c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 16203c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 1621c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*service.get(), SetState(_)).Times(0); 1622c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 1623c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportLinkUp(); 1624c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1625c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Verify expectations now, because WiFi may cause |service| state 1626c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // changes during TearDown(). 1627c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal Mock::VerifyAndClearExpectations(service); 1628c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1629c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1630c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, SupplicantCompletedAlreadyConnected) { 1631c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 16323c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 16333c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL)); 16348f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley Mock::VerifyAndClearExpectations(dhcp_config_.get()); 1635c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 16368f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley // Simulate a rekeying event from the AP. These show as transitions from 16378f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley // completed->completed from wpa_supplicant. 16380654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 16395519e9e7021ba05af8c38291710746fac3528f21Christopher Wiley // When we get an IP, WiFi should enable high bitrates on the interface again. 16403c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 16413c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), EnableHighBitrates()).Times(1); 16423c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*manager(), device_info()).WillOnce(Return(device_info())); 16438f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley ReportIPConfigComplete(); 16448f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley // Similarly, rekeying events after we have an IP don't trigger L3 16455519e9e7021ba05af8c38291710746fac3528f21Christopher Wiley // configuration. However, we treat all transitions to completed as potential 16465519e9e7021ba05af8c38291710746fac3528f21Christopher Wiley // reassociations, so we will reenable high rates again here. 16473c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 16483c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnected()).WillOnce(Return(true)); 16493c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), EnableHighBitrates()).Times(1); 16500654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceStateCompleted); 1651c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1652c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1653b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSAddedCreatesBSSProxy) { 1654b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): Consider using a factory for WiFiEndpoints, so that 1655b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // we can test the interaction between WiFi and WiFiEndpoint. (Right 1656b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // now, we're testing across multiple layers.) 1657b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 1658b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy_factory(), CreateSupplicantBSSProxy(_, _, _)); 1659b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 1660b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1661b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1662b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1663b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSRemovedDestroysBSSProxy) { 1664b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): As for BSSAddedCreatesBSSProxy, consider using a 1665b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // factory for WiFiEndpoints. 1666b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Get the pointer before we transfer ownership. 1667b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MockSupplicantBSSProxy *proxy = supplicant_bss_proxy_.get(); 1668b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy, Die()); 1669b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 16703c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path bss_path( 16713c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, NULL)); 16723c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(_)) 16733c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 16743c5040174273386868cc8dea8044d22c465885d8Paul Stewart RemoveBSS(bss_path); 1675b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Check this now, to make sure RemoveBSS killed the proxy (rather 1676b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // than TearDown). 1677b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Mock::VerifyAndClearExpectations(proxy); 1678b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1679b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 16805c05b2920be742d518829972127172481722058dmukesh agrawalTEST_F(WiFiMainTest, FlushBSSOnResume) { 16815c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval resume_time = {1, 0}; 16825c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval scan_done_time = {6, 0}; 16835c05b2920be742d518829972127172481722058dmukesh agrawal 16845c05b2920be742d518829972127172481722058dmukesh agrawal StartWiFi(); 16855c05b2920be742d518829972127172481722058dmukesh agrawal 16865c05b2920be742d518829972127172481722058dmukesh agrawal EXPECT_CALL(time_, GetTimeMonotonic(_)) 16875c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(resume_time), Return(0))) 16885c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(scan_done_time), Return(0))); 16893c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), 16905c05b2920be742d518829972127172481722058dmukesh agrawal FlushBSS(WiFi::kMaxBSSResumeAgeSeconds + 5)); 16912f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnAfterResume(); 16925c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 16935c05b2920be742d518829972127172481722058dmukesh agrawal} 16945c05b2920be742d518829972127172481722058dmukesh agrawal 1695b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerIdle) { 1696b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1697b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1698b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1699b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1700b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1701b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1702b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1703b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1704b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1705b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1706b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1707b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1708b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerScanning) { 1709b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1710b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1711b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1712b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1713b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1714b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // Should not call Scan, since we're already scanning. 1715b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // (Scanning is triggered by StartWiFi.) 1716b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1717b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1718b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1719b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1720b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1721b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1722b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerConnecting) { 1723b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1724b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 17253c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 17263c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL); 1727b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1728b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1729b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1730b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1731b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1732b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1733b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1734b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1735b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1736b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerReconfigured) { 1737b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1738b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1739b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1740b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1741b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal SetScanInterval(1); 1742b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1743b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1744b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1745b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerResetOnScanDone) { 1746b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1747b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1748b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1749b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1750b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1751b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1752b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1753b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1754b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerStopOnZeroInterval) { 1755b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1756b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1757b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1758b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal SetScanInterval(0); 1759b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1760b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1761b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1762b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanOnDisconnectWithHidden) { 1763b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1764b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 17653c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 17663c5040174273386868cc8dea8044d22c465885d8Paul Stewart vector<uint8_t>kSSID(1, 'a'); 17673c5040174273386868cc8dea8044d22c465885d8Paul Stewart ByteArrays ssids; 17683c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssids.push_back(kSSID); 17693c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 17703c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(ssids)); 17713c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(HasHiddenSSID(kSSID))); 17720654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 1773b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1774b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1775b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1776b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, NoScanOnDisconnectWithoutHidden) { 1777b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1778b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 17793c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 1780b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 17813c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 17823c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(ByteArrays())); 17830654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 1784b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1785b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1786b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 17873c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul StewartTEST_F(WiFiMainTest, LinkMonitorFailure) { 17883c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart StartWiFi(); 17893c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart ScopedMockLog log; 17903c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 17913c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart MockLinkMonitor *link_monitor = new StrictMock<MockLinkMonitor>(); 17923c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart SetLinkMonitor(link_monitor); 17933c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(*link_monitor, IsGatewayFound()) 17943c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart .WillOnce(Return(false)) 17953c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart .WillRepeatedly(Return(true)); 17963c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(logging::LOG_INFO, _, 17973c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EndsWith("gateway was never found."))).Times(1); 17983c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Reassociate()).Times(0); 17993c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnLinkMonitorFailure(); 18003c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(logging::LOG_INFO, _, 18013c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EndsWith("Called Reassociate()."))).Times(1); 18023c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Reassociate()).Times(1); 18033c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnLinkMonitorFailure(); 18043c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnSupplicantVanish(); 18053c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 18063c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Reassociate()).Times(0); 18073c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 18083c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EndsWith("Cannot reassociate."))).Times(1); 18093c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnLinkMonitorFailure(); 18103c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart} 18113c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart 1812cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsOpen) { 18133c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 18140654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceState4WayHandshake); 1815cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 18161369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 1817cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1818cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1819cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsWPANeverConnected) { 18203c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 18210654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceState4WayHandshake); 1822cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 18231369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart Service::ConnectFailure failure; 18241369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_TRUE(SuspectCredentials(*service, &failure)); 18251369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_EQ(Service::kFailureBadPassphrase, failure); 1826cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1827cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1828cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsWPAPreviouslyConnected) { 18293c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 18300654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceState4WayHandshake); 1831cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal service->has_ever_connected_ = true; 18321369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 1833cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1834cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 18351369c2b482e97a18e8ecb63df04799696ebe39d6Paul StewartTEST_F(WiFiMainTest, SuspectCredentialsEAPInProgress) { 18363c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 18371369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart SetCurrentService(service); 18381369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart service->has_ever_connected_ = false; 18391369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 18400654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusStarted, ""); 18411369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart service->has_ever_connected_ = true; 18421369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 18431369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart service->has_ever_connected_ = false; 18441369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart Service::ConnectFailure failure; 18451369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_TRUE(SuspectCredentials(*service, &failure)); 18461369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_EQ(Service::kFailureEAPAuthentication, failure); 18470654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusCompletion, 18480654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kEAPParameterSuccess); 18491369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 18501369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart} 18511369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 18521369c2b482e97a18e8ecb63df04799696ebe39d6Paul StewartTEST_F(WiFiMainTest, SuspectCredentialsYieldFailureWPA) { 18531369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart ScopedMockLog log; 1854cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 1855cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal SetPendingService(service); 18560654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportStateChanged(WPASupplicant::kInterfaceState4WayHandshake); 1857cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 1858cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1859f2d609103916861ea8a9377ef93a72cc998bdf80Paul Stewart EXPECT_CALL(*service, SetFailure(Service::kFailureBadPassphrase)); 186056e322015a6955035bae144917190c9eccbd90c6mukesh agrawal EXPECT_CALL(*service, SetFailureSilent(_)).Times(0); 186156e322015a6955035bae144917190c9eccbd90c6mukesh agrawal EXPECT_CALL(*service, SetState(_)).Times(0); 1862cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 18631369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 18641369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EndsWith(flimflam::kErrorBadPassphrase))); 18650654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 18661369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart} 18671369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 18681369c2b482e97a18e8ecb63df04799696ebe39d6Paul StewartTEST_F(WiFiMainTest, SuspectCredentialsYieldFailureEAP) { 18691369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart ScopedMockLog log; 18701369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 18711369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart SetCurrentService(service); 18720654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusStarted, ""); 18731369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(service->has_ever_connected()); 18741369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 18751369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(*service, SetFailure(Service::kFailureEAPAuthentication)); 18761369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(*service, SetFailureSilent(_)).Times(0); 18771369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(*service, SetState(_)).Times(0); 18781369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 18791369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 18801369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EndsWith(shill::kErrorEapAuthenticationFailed))); 18810654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportCurrentBSSChanged(WPASupplicant::kCurrentBSSNull); 1882cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1883cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1884e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// Scanning tests will use a mock of the event dispatcher instead of a real 1885e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// one. 18861aff7307d462b0160e821607058fe13831d8ef63Paul Stewartclass WiFiTimerTest : public WiFiObjectTest { 1887e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart public: 18881aff7307d462b0160e821607058fe13831d8ef63Paul Stewart WiFiTimerTest() : WiFiObjectTest(&mock_dispatcher_) {} 1889e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1890e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart protected: 1891e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart void ExpectInitialScanSequence(); 1892e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1893e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart StrictMock<MockEventDispatcher> mock_dispatcher_; 1894e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart}; 1895e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 18961aff7307d462b0160e821607058fe13831d8ef63Paul Stewartvoid WiFiTimerTest::ExpectInitialScanSequence() { 1897e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // Choose a number of iterations some multiple higher than the fast scan 1898e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // count. 1899e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart const int kScanTimes = WiFi::kNumFastScanAttempts * 4; 1900e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1901e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // Each time we call FireScanTimer() below, WiFi will post a task to actually 1902e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // run Scan() on the wpa_supplicant proxy. 1903e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)) 1904e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(kScanTimes); 1905e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart { 1906e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart InSequence seq; 1907e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // The scans immediately after the initial scan should happen at the short 1908e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // interval. If we add the initial scan (not invoked in this function) to 1909e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // the ones in the expectation below, we get WiFi::kNumFastScanAttempts at 1910e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // the fast scan interval. 1911e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1912e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 1913e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(WiFi::kNumFastScanAttempts - 1) 1914e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillRepeatedly(Return(true)); 1915e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1916e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // After this, the WiFi device should use the normal scan interval. 1917e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1918e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, GetScanInterval() * 1000)) 1919e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(kScanTimes - WiFi::kNumFastScanAttempts + 1) 1920e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillRepeatedly(Return(true)); 1921e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1922e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart for (int i = 0; i < kScanTimes; i++) { 1923e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart FireScanTimer(); 1924e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 1925e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 1926e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart} 1927e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 19281aff7307d462b0160e821607058fe13831d8ef63Paul StewartTEST_F(WiFiTimerTest, FastRescan) { 1929e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // This PostTask is a result of the call to Scan(NULL), and is meant to 1930e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // post a task to call Scan() on the wpa_supplicant proxy immediately. 1931e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)); 1932e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1933e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 1934e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillOnce(Return(true)); 1935e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart StartWiFi(); 1936e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1937e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart ExpectInitialScanSequence(); 1938e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1939e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // If we end up disconnecting, the sequence should repeat. 1940e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1941e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 1942e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillOnce(Return(true)); 1943e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart RestartFastScanAttempts(); 1944e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1945e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart ExpectInitialScanSequence(); 1946e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart} 1947e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 19481aff7307d462b0160e821607058fe13831d8ef63Paul StewartTEST_F(WiFiTimerTest, ReconnectTimer) { 19491aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)).Times(AnyNumber()); 19501aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask(_, _)).Times(AnyNumber()); 19513c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 19523c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 19531aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 19541aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 19551aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 19561aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(1); 19571aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 19581aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 19591aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StopReconnectTimer(); 19601aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 19611aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 19621aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(1); 19631aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 19641aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 19651aff7307d462b0160e821607058fe13831d8ef63Paul Stewart GetReconnectTimeoutCallback().callback().Run(); 19661aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 19671aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 19681aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(1); 19691aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 19701aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 19711aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 19721aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 19731aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(0); 19741aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 19751aff7307d462b0160e821607058fe13831d8ef63Paul Stewart} 19761aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 1977bc6e7390c4401e171ede4dc83b79b316f3e71100Paul StewartTEST_F(WiFiMainTest, EAPCertification) { 1978bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 1979bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(*service, AddEAPCertification(_, _)).Times(0); 1980bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1981bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ScopedMockLog log; 1982bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no current service."))); 1983bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart map<string, ::DBus::Variant> args; 1984bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 1985bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 1986bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1987bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart SetCurrentService(service); 1988bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no depth parameter."))); 1989bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 1990bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 1991bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1992bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart const uint32 kDepth = 123; 19930654ece95920696c530ce1c0344365eb741f7efePaul Stewart args[WPASupplicant::kInterfacePropertyDepth].writer().append_uint32(kDepth); 1994bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1995bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, 1996bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Log(logging::LOG_ERROR, _, EndsWith("no subject parameter."))); 1997bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 1998bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 1999bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2000bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart const string kSubject("subject"); 20010654ece95920696c530ce1c0344365eb741f7efePaul Stewart args[WPASupplicant::kInterfacePropertySubject].writer() 2002bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart .append_string(kSubject.c_str()); 2003bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(*service, AddEAPCertification(kSubject, kDepth)).Times(1); 2004bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 2005db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart} 2006db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2007db0f917217979bf7547e27b47faf1b49d25c8d9cPaul StewartTEST_F(WiFiMainTest, EAPEvent) { 2008db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 2009db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(*service, SetFailure(_)).Times(0); 2010db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2011db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ScopedMockLog log; 2012db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no current service."))); 2013db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(string(), string()); 2014db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(&log); 2015db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2016db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart SetCurrentService(service); 2017db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart const string kEAPMethod("EAP-ROCHAMBEAU"); 2018db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(logging::LOG_INFO, _, 2019db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EndsWith("accepted EAP method " + kEAPMethod))); 20200654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusAcceptProposedMethod, kEAPMethod); 2021db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2022db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(_, _, EndsWith("Completed authentication."))).Times(1); 20230654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusCompletion, 20240654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kEAPParameterSuccess); 2025db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2026db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(&log); 2027db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 2028db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2029db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart // An EAP failure without a previous TLS indication yields a generic failure. 2030db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 2031d4dc0836d64d957f233eaf6e4ab24093a97dd4cemukesh agrawal EXPECT_CALL(*service, DisconnectWithFailure( 2032d4dc0836d64d957f233eaf6e4ab24093a97dd4cemukesh agrawal Service::kFailureEAPAuthentication, NotNull())) 20333c5040174273386868cc8dea8044d22c465885d8Paul Stewart .Times(1); 20340654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusCompletion, 20350654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kEAPParameterFailure); 2036db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 2037db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2038db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart // An EAP failure with a previous TLS indication yields a specific failure. 2039db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart SetCurrentService(service); 20403c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(_, _)).Times(0); 2041db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(*service, SetFailure(_)).Times(0); 20420654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusLocalTLSAlert, string()); 2043db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 20443c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, 2045d4dc0836d64d957f233eaf6e4ab24093a97dd4cemukesh agrawal DisconnectWithFailure(Service::kFailureEAPLocalTLS, NotNull())) 20463c5040174273386868cc8dea8044d22c465885d8Paul Stewart .Times(1); 20470654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusCompletion, 20480654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kEAPParameterFailure); 2049db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 2050db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2051db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart SetCurrentService(service); 20523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(_, _)).Times(0); 2053db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(*service, SetFailure(_)).Times(0); 20540654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusRemoteTLSAlert, string()); 2055db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 20563c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, 2057d4dc0836d64d957f233eaf6e4ab24093a97dd4cemukesh agrawal DisconnectWithFailure(Service::kFailureEAPRemoteTLS, NotNull())) 20583c5040174273386868cc8dea8044d22c465885d8Paul Stewart .Times(1); 20590654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusCompletion, 20600654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kEAPParameterFailure); 2061db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 2062db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2063db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart SetCurrentService(service); 20643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(_, _)).Times(0); 2065db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(*service, SetFailure(_)).Times(0); 2066db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart const string kStrangeParameter("ennui"); 2067db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _,EndsWith( 2068db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart string("Unexpected ") + 20690654ece95920696c530ce1c0344365eb741f7efePaul Stewart WPASupplicant::kEAPStatusRemoteCertificateVerification + 2070db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart " parameter: " + kStrangeParameter))); 20710654ece95920696c530ce1c0344365eb741f7efePaul Stewart ReportEAPEvent(WPASupplicant::kEAPStatusRemoteCertificateVerification, 2072db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart kStrangeParameter); 2073bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart} 2074bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2075c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawalTEST_F(WiFiMainTest, PendingScanDoesNotCrashAfterStop) { 2076c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // Scan is one task that should be skipped after Stop. Others are 2077c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // skipped by the same mechanism (invalidating weak pointers), so we 2078c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // don't test them individually. 2079c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // 2080c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // Note that we can't test behavior by setting expectations on the 2081c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // supplicant_interface_proxy_, since that is destroyed when we StopWiFi(). 2082c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal StartWiFi(); 2083c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal StopWiFi(); 2084c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal dispatcher_.DispatchPendingEvents(); 2085c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal} 2086c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal 208760ceaf336297ce536201a82e350c697f1a5b546dDarin PetkovTEST_F(WiFiMainTest, VerifyPaths) { 2088196f50fdcc687512c123a34f54a21eea8215708fPaul Stewart string path(WPASupplicant::kSupplicantConfPath); 208960ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov TrimString(path, FilePath::kSeparators, &path); 209060ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov EXPECT_TRUE(file_util::PathExists(FilePath(SYSROOT).Append(path))); 209160ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov} 209260ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov 20936d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shahstruct BSS { 20946d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah string bsspath; 20956d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah string ssid; 20966d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah string bssid; 20976d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah int16_t signal_strength; 20986d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah uint16 frequency; 20996d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah const char* mode; 21006d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah}; 21016d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 21026d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav ShahTEST_F(WiFiMainTest, GetGeolocationObjects) { 21036d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah BSS bsses[] = { 21046d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah {"bssid1", "ssid1", "00:00:00:00:00:00", 5, Metrics::kWiFiFrequency2412, 21056d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah kNetworkModeInfrastructure}, 21066d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah {"bssid2", "ssid2", "01:00:00:00:00:00", 30, Metrics::kWiFiFrequency5170, 21076d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah kNetworkModeInfrastructure}, 21086d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah // Same SSID but different BSSID is an additional geolocation object. 21096d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah {"bssid3", "ssid1", "02:00:00:00:00:00", 100, 0, 21106d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah kNetworkModeInfrastructure} 21116d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah }; 21126d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah StartWiFi(); 21136d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah vector<GeolocationInfo> objects; 21146d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah EXPECT_EQ(objects.size(), 0); 21156d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 21166d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah for (size_t i = 0; i < arraysize(bsses); ++i) { 21176d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah ReportBSS(bsses[i].bsspath, bsses[i].ssid, bsses[i].bssid, 21186d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah bsses[i].signal_strength, bsses[i].frequency, bsses[i].mode); 21196d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah objects = wifi()->GetGeolocationObjects(); 21206d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah EXPECT_EQ(objects.size(), i + 1); 21216d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 21226d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah GeolocationInfo expected_info; 21236d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah expected_info.AddField(kGeoMacAddressProperty, bsses[i].bssid); 21246d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah expected_info.AddField(kGeoSignalStrengthProperty, 21256d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah StringPrintf("%d", bsses[i].signal_strength)); 21266d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah expected_info.AddField(kGeoChannelProperty, StringPrintf( 21276d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah "%d", Metrics::WiFiFrequencyToChannel(bsses[i].frequency))); 21286d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah EXPECT_TRUE(objects[i].Equals(expected_info)); 21296d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah }; 21306d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah}; 21316d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 21325581d07d765e14737d2a639d3eb42e0b42721602Paul StewartTEST_F(WiFiMainTest, SetSupplicantDebugLevel) { 21335581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart MockSupplicantProcessProxy *process_proxy = supplicant_process_proxy_.get(); 21345581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21355581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // With WiFi not yet started, nothing interesting (including a crash) should 21365581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // happen. 21375581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()).Times(0); 21385581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 21395581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21405581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21415581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // This unit test turns on WiFi debugging, so when we start WiFi, we should 21425581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // check but not set the debug level if we return the "debug" level. 21435581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21440654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelDebug)); 21455581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 21465581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart StartWiFi(); 21475581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 21485581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21495581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is toggled and wpa_supplicant reports debugging 21505581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // is set to some unmanaged level, WiFi should leave it alone. 21515581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21520654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelError)) 21530654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelError)) 21540654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelExcessive)) 21550654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelExcessive)) 21560654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelMsgDump)) 21570654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelMsgDump)) 21580654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelWarning)) 21590654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelWarning)); 21605581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 21615581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21625581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21635581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21645581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21655581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21665581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21675581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21685581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21695581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 21705581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21715581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is turned off and wpa_supplicant reports debugging 21725581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // is turned on, WiFi should turn supplicant debugging off. 21735581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21740654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelDebug)); 21750654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(WPASupplicant::kDebugLevelInfo)) 21765581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .Times(1); 21775581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21785581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 21795581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21805581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is turned on and wpa_supplicant reports debugging 21815581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // is turned off, WiFi should turn supplicant debugging on. 21825581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21830654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelInfo)); 21840654ece95920696c530ce1c0344365eb741f7efePaul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(WPASupplicant::kDebugLevelDebug)) 21855581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .Times(1); 21865581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21875581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 21885581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21895581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is already in the correct state, it should not be 21905581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // changed. 21915581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21920654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelDebug)) 21930654ece95920696c530ce1c0344365eb741f7efePaul Stewart .WillOnce(Return(WPASupplicant::kDebugLevelInfo)); 21945581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 21955581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21965581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21975581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21985581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // After WiFi is stopped, we shouldn't be calling the proxy. 21995581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()).Times(0); 22005581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 22015581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart StopWiFi(); 22025581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 22035581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 22045581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart} 22055581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 220650cb78aa736cf39ee8c7e0193a78792a9686a108Darin PetkovTEST_F(WiFiMainTest, LogSSID) { 220750cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov EXPECT_EQ("[SSID=]", WiFi::LogSSID("")); 220850cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov EXPECT_EQ("[SSID=foo\\x5b\\x09\\x5dbar]", WiFi::LogSSID("foo[\t]bar")); 220950cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov} 221050cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov 2211853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} // namespace shill 2212