wifi_unittest.cc revision 3c5040174273386868cc8dea8044d22c465885d8
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 64853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::map; 65853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::string; 66853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::vector; 67853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::_; 683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::AnyNumber; 693c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing ::testing::AtLeast; 703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::DefaultValue; 71a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::DoAll; 72cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalusing ::testing::EndsWith; 733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::InSequence; 74b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalusing ::testing::Invoke; 75549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewartusing ::testing::InvokeWithoutArgs; 767ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalusing ::testing::Mock; 77dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawalusing ::testing::NiceMock; 78853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Return; 79ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morainusing ::testing::SaveArg; 80a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::SetArgumentPointee; 81a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrEq; 82a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrictMock; 83853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Test; 843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::Throw; 858ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalusing ::testing::Values; 86853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 87853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masonenamespace shill { 88853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalclass WiFiPropertyTest : public PropertyStoreTest { 90853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone public: 913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiPropertyTest() 923426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le : device_(new WiFi(control_interface(), 933c5040174273386868cc8dea8044d22c465885d8Paul Stewart NULL, NULL, manager(), "wifi", "", 0)) { 94853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone } 953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual ~WiFiPropertyTest() {} 96853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 97853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone protected: 988abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFiRefPtr device_; 99853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone}; 100853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Contains) { 102de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_TRUE(device_->store().Contains(flimflam::kNameProperty)); 103de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_FALSE(device_->store().Contains("")); 104853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 105853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1066bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawalTEST_F(WiFiPropertyTest, SetProperty) { 107a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 108a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1096bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 110de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal device_->mutable_store(), 111a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanSignalThresholdProperty, 112a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kInt32V, 113a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 114a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 115a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 116a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1176bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty(device_->mutable_store(), 1186bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanIntervalProperty, 1196bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kUint16V, 1206bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 121a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 122853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone // Ensure that an attempt to write a R/O property returns InvalidArgs error. 123a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 124a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1256bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty(device_->mutable_store(), 1266bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanningProperty, 1276bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kBoolV, 1286bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 1299d779936d8f8c2d74b30883e2a2622c4207fe797Chris Masone EXPECT_EQ(invalid_args(), error.name()); 130a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 131853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1324d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1334d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1346bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1354d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1364d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1374d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant( 1384d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal wpa_supplicant::kNetworkBgscanMethodSimple), 1394d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1404d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1414d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1424d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1434d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1446bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty( 1454d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1464d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1474d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant("not a real scan method"), 1484d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1494d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1504d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 1514d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1524a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovTEST_F(WiFiPropertyTest, BgscanMethodProperty) { 1538abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_NE(wpa_supplicant::kNetworkBgscanMethodLearn, 1548abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFi::kDefaultBgscanMethod); 1554a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE(device_->bgscan_method_.empty()); 1564a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 1574a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov string method; 158e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart Error unused_error; 159e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart EXPECT_TRUE(device_->store().GetStringProperty( 160e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart flimflam::kBgscanMethodProperty, &method, &unused_error)); 1614a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(WiFi::kDefaultBgscanMethod, method); 1624a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(wpa_supplicant::kNetworkBgscanMethodSimple, method); 1638abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1648abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal ::DBus::Error error; 1656bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1668abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), 1678abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal flimflam::kBgscanMethodProperty, 1688abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal DBusAdaptor::StringToVariant( 1698abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal wpa_supplicant::kNetworkBgscanMethodLearn), 1708abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal &error)); 1718abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(wpa_supplicant::kNetworkBgscanMethodLearn, device_->bgscan_method_); 172e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart EXPECT_TRUE(device_->store().GetStringProperty( 173e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart flimflam::kBgscanMethodProperty, &method, &unused_error)); 1744a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(wpa_supplicant::kNetworkBgscanMethodLearn, method); 1758abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1768abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_TRUE(DBusAdaptor::ClearProperty( 1778abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), flimflam::kBgscanMethodProperty, &error)); 178e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart EXPECT_TRUE(device_->store().GetStringProperty( 179e6e8e499adf14d9408a7e07f54b58d71ab3a9502Paul Stewart flimflam::kBgscanMethodProperty, &method, &unused_error)); 1804a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(WiFi::kDefaultBgscanMethod, method); 1814a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE(device_->bgscan_method_.empty()); 1828abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal} 1838abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1843c5040174273386868cc8dea8044d22c465885d8Paul Stewart 1853c5040174273386868cc8dea8044d22c465885d8Paul StewartMATCHER_P(EndpointMatch, endpoint, "") { 1863c5040174273386868cc8dea8044d22c465885d8Paul Stewart return 1873c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg->ssid() == endpoint->ssid() && 1883c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg->network_mode() == endpoint->network_mode() && 1893c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg->security_mode() == endpoint->security_mode(); 1903c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 1913c5040174273386868cc8dea8044d22c465885d8Paul Stewart 192e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartclass WiFiObjectTest : public ::testing::TestWithParam<string> { 1933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 194e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiObjectTest(EventDispatcher *dispatcher) 195e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart : event_dispatcher_(dispatcher), 1966c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le metrics_(NULL), 197e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart manager_(&control_interface_, NULL, &metrics_, &glib_), 198e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart device_info_(&control_interface_, dispatcher, &metrics_, &manager_), 199626719f89881a949d8b5a8fa808beb924496489fChris Masone wifi_(new WiFi(&control_interface_, 200e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart dispatcher, 2013426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 202626719f89881a949d8b5a8fa808beb924496489fChris Masone &manager_, 203626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceName, 204626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceAddress, 205626719f89881a949d8b5a8fa808beb924496489fChris Masone 0)), 2063c5040174273386868cc8dea8044d22c465885d8Paul Stewart bss_counter_(0), 207dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_process_proxy_(new NiceMock<MockSupplicantProcessProxy>()), 208b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal supplicant_bss_proxy_( 209b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal new NiceMock<MockSupplicantBSSProxy>()), 210f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal dhcp_config_(new MockDHCPConfig(&control_interface_, 211d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart kDeviceName)), 2122b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov dbus_manager_(new NiceMock<MockDBusManager>()), 2133c5040174273386868cc8dea8044d22c465885d8Paul Stewart supplicant_interface_proxy_( 2143c5040174273386868cc8dea8044d22c465885d8Paul Stewart new NiceMock<MockSupplicantInterfaceProxy>(wifi_)), 2152f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal proxy_factory_(this) { 2163195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ::testing::DefaultValue< ::DBus::Path>::Set("/default/path"); 217c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 218d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart ON_CALL(dhcp_provider_, CreateConfig(_, _, _, _)). 219c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(dhcp_config_)); 220c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ON_CALL(*dhcp_config_.get(), RequestIP()). 221c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(true)); 222835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart ON_CALL(proxy_factory_, CreateSupplicantNetworkProxy(_, _)). 223835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart WillByDefault(InvokeWithoutArgs( 224835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart this, &WiFiObjectTest::CreateSupplicantNetworkProxy)); 225ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 2262b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov manager_.dbus_manager_.reset(dbus_manager_); // Transfers ownership. 2272b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 2283c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->provider_ = &wifi_provider_; 2295c05b2920be742d518829972127172481722058dmukesh agrawal wifi_->time_ = &time_; 2303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2315c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2325c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void SetUp() { 2333ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal // EnableScopes... so that we can EXPECT_CALL for scoped log messages. 2343ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal ScopeLogger::GetInstance()->EnableScopesByName("wifi"); 235d34a47c06c38f2594c85b14b0f9cee2bf37c0e84Christopher Wiley ScopeLogger::GetInstance()->set_verbose_level(3); 236ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = &proxy_factory_; 2375c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal static_cast<Device *>(wifi_)->rtnl_handler_ = &rtnl_handler_; 2385c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(&dhcp_provider_); 2393c5040174273386868cc8dea8044d22c465885d8Paul Stewart ON_CALL(manager_, device_info()).WillByDefault(Return(&device_info_)); 2402b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(manager_, UpdateEnabledTechnologies()).Times(AnyNumber()); 241b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 2425c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal } 2435c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2445c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void TearDown() { 2453c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(_)) 2463c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(reinterpret_cast<WiFiService *>(NULL))); 2479a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->SelectService(NULL); 248b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal if (supplicant_bss_proxy_.get()) { 249b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()); 250b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 251ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = NULL; 2523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // must Stop WiFi instance, to clear its list of services. 2533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // otherwise, the WiFi instance will not be deleted. (because 2543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // services reference a WiFi instance, creating a cycle.) 2559a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->Stop(NULL, ResultCallback()); 2565c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(NULL); 2573ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal // Reset scope logging, to avoid interfering with other tests. 2583ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal ScopeLogger::GetInstance()->EnableScopesByName("-wifi"); 259d34a47c06c38f2594c85b14b0f9cee2bf37c0e84Christopher Wiley ScopeLogger::GetInstance()->set_verbose_level(0); 260f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 261f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 262549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart // Needs to be public since it is called via Invoke(). 263549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart void StopWiFi() { 264549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart wifi_->SetEnabled(false); // Stop(NULL, ResultCallback()); 265549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart } 266549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart 267c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley // Needs to be public since it is called via Invoke(). 268c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley void ThrowDBusError() { 269c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley throw DBus::Error("SomeDBusType", "A handy message"); 270c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley } 271c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley 2723195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 2737ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal typedef scoped_refptr<MockWiFiService> MockWiFiServiceRefPtr; 2747ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 2753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal class TestProxyFactory : public ProxyFactory { 2763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 277e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart explicit TestProxyFactory(WiFiObjectTest *test); 2783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2793195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantProcessProxyInterface *CreateSupplicantProcessProxy( 2801830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_path*/, const char */*dbus_addr*/) { 281dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_process_proxy_.release(); 2823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2833195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantInterfaceProxyInterface *CreateSupplicantInterfaceProxy( 2851830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const WiFiRefPtr &/*wifi*/, 2861830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const DBus::Path &/*object_path*/, 2871830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_addr*/) { 288dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_interface_proxy_.release(); 2893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 291b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MOCK_METHOD3(CreateSupplicantBSSProxy, 292b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *( 293b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint *wifi_endpoint, 294b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &object_path, 295b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char *dbus_addr)); 296b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 297835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart MOCK_METHOD2(CreateSupplicantNetworkProxy, 298835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart SupplicantNetworkProxyInterface *( 299835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart const DBus::Path &object_path, 300835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart const char *dbus_addr)); 301835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 3023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 303b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *CreateSupplicantBSSProxyInternal( 304b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint */*wifi_endpoint*/, 305b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &/*object_path*/, 306b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char */*dbus_addr*/) { 307b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return test_->supplicant_bss_proxy_.release(); 308b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 309b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 310e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiObjectTest *test_; 3113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal }; 3123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 3133c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Simulate the course of events when the last enpoint of a service is 3143c5040174273386868cc8dea8044d22c465885d8Paul Stewart // removed. 3153c5040174273386868cc8dea8044d22c465885d8Paul Stewart class EndpointRemovalHandler { 3163c5040174273386868cc8dea8044d22c465885d8Paul Stewart public: 3173c5040174273386868cc8dea8044d22c465885d8Paul Stewart EndpointRemovalHandler(WiFiRefPtr wifi, const WiFiServiceRefPtr &service) 3183c5040174273386868cc8dea8044d22c465885d8Paul Stewart : wifi_(wifi), service_(service) {} 3193c5040174273386868cc8dea8044d22c465885d8Paul Stewart virtual ~EndpointRemovalHandler() {} 3203c5040174273386868cc8dea8044d22c465885d8Paul Stewart 3213c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr OnEndpointRemoved( 3223c5040174273386868cc8dea8044d22c465885d8Paul Stewart const WiFiEndpointConstRefPtr &endpoint) { 3233c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->DisassociateFromService(service_); 3243c5040174273386868cc8dea8044d22c465885d8Paul Stewart return service_; 3253c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3263c5040174273386868cc8dea8044d22c465885d8Paul Stewart 3273c5040174273386868cc8dea8044d22c465885d8Paul Stewart private: 3283c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiRefPtr wifi_; 3293c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service_; 3303c5040174273386868cc8dea8044d22c465885d8Paul Stewart }; 3313c5040174273386868cc8dea8044d22c465885d8Paul Stewart 3323c5040174273386868cc8dea8044d22c465885d8Paul Stewart EndpointRemovalHandler *MakeEndpointRemovalHandler( 3333c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr &service) { 3343c5040174273386868cc8dea8044d22c465885d8Paul Stewart return new EndpointRemovalHandler(wifi_, service); 3353c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 336b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void CancelScanTimer() { 337b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->scan_timer_callback_.Cancel(); 338b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 3393c5040174273386868cc8dea8044d22c465885d8Paul Stewart // This function creates a new endpoint with a mode set to |mode|. We 3403c5040174273386868cc8dea8044d22c465885d8Paul Stewart // synthesize new |path| and |bssid| values, since we don't really care 3413c5040174273386868cc8dea8044d22c465885d8Paul Stewart // what they are for unit tests. If "use_ssid" is true, we used the 3423c5040174273386868cc8dea8044d22c465885d8Paul Stewart // passed-in ssid, otherwise we create a synthesized value for it as well. 3433c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr MakeNewEndpoint(const char *mode, 3443c5040174273386868cc8dea8044d22c465885d8Paul Stewart bool use_ssid, 3453c5040174273386868cc8dea8044d22c465885d8Paul Stewart string *ssid, 3463c5040174273386868cc8dea8044d22c465885d8Paul Stewart string *path, 3473c5040174273386868cc8dea8044d22c465885d8Paul Stewart string *bssid) { 3483c5040174273386868cc8dea8044d22c465885d8Paul Stewart bss_counter_++; 3493c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (!use_ssid) { 3503c5040174273386868cc8dea8044d22c465885d8Paul Stewart *ssid = base::StringPrintf("ssid%d", bss_counter_); 3513c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3523c5040174273386868cc8dea8044d22c465885d8Paul Stewart *path = base::StringPrintf("/interface/bss%d", bss_counter_); 3533c5040174273386868cc8dea8044d22c465885d8Paul Stewart *bssid = base::StringPrintf("00:00:00:00:00:%02x", bss_counter_); 3543c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = MakeEndpointWithMode(*ssid, *bssid, mode); 3553c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(wifi_provider_, 3563c5040174273386868cc8dea8044d22c465885d8Paul Stewart OnEndpointAdded(EndpointMatch(endpoint))).Times(1); 3573c5040174273386868cc8dea8044d22c465885d8Paul Stewart return endpoint; 3583c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3593c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr MakeEndpoint(const string &ssid, const string &bssid) { 3603c5040174273386868cc8dea8044d22c465885d8Paul Stewart return MakeEndpointWithMode(ssid, bssid, kNetworkModeInfrastructure); 3613c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3623c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr MakeEndpointWithMode( 3633c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string &ssid, const string &bssid, const string &mode) { 3643c5040174273386868cc8dea8044d22c465885d8Paul Stewart return WiFiEndpoint::MakeOpenEndpoint( 3653c5040174273386868cc8dea8044d22c465885d8Paul Stewart &proxy_factory_, NULL, ssid, bssid, mode, 0, 0); 3663c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3673c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr MakeMockServiceWithSSID( 3683c5040174273386868cc8dea8044d22c465885d8Paul Stewart vector<uint8_t> ssid, const std::string &security) { 3693c5040174273386868cc8dea8044d22c465885d8Paul Stewart return new NiceMock<MockWiFiService>( 3703c5040174273386868cc8dea8044d22c465885d8Paul Stewart &control_interface_, 3713c5040174273386868cc8dea8044d22c465885d8Paul Stewart event_dispatcher_, 3723c5040174273386868cc8dea8044d22c465885d8Paul Stewart &metrics_, 3733c5040174273386868cc8dea8044d22c465885d8Paul Stewart &manager_, 3743c5040174273386868cc8dea8044d22c465885d8Paul Stewart &wifi_provider_, 3753c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssid, 3763c5040174273386868cc8dea8044d22c465885d8Paul Stewart flimflam::kModeManaged, 3773c5040174273386868cc8dea8044d22c465885d8Paul Stewart security, 3783c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 3793c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3803c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr MakeMockService(const std::string &security) { 3813c5040174273386868cc8dea8044d22c465885d8Paul Stewart return MakeMockServiceWithSSID(vector<uint8_t>(1, 'a'), security); 3823c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3833c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path MakeNewEndpointAndService(int16_t signal_strength, 3843c5040174273386868cc8dea8044d22c465885d8Paul Stewart uint16 frequency, 3853c5040174273386868cc8dea8044d22c465885d8Paul Stewart const char *mode, 3863c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr, 3873c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr *service_ptr) { 3883c5040174273386868cc8dea8044d22c465885d8Paul Stewart string ssid; 3893c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path path; 3903c5040174273386868cc8dea8044d22c465885d8Paul Stewart string bssid; 3913c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = 3923c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpoint(mode, false, &ssid, &path, &bssid); 3933c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 3943c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeMockServiceWithSSID(endpoint->ssid(), endpoint->security_mode()); 3953c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(wifi_provider_, FindServiceForEndpoint(EndpointMatch(endpoint))) 3963c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(service)); 3973c5040174273386868cc8dea8044d22c465885d8Paul Stewart ON_CALL(*service, GetEndpointCount()).WillByDefault(Return(1)); 3983c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS(path, ssid, bssid, signal_strength, frequency, mode); 3993c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (service_ptr) { 4003c5040174273386868cc8dea8044d22c465885d8Paul Stewart *service_ptr = service; 4013c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4023c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 4033c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 4043c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4053c5040174273386868cc8dea8044d22c465885d8Paul Stewart return path; 4063c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4073c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path AddEndpointToService( 4083c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service, 4093c5040174273386868cc8dea8044d22c465885d8Paul Stewart int16_t signal_strength, 4103c5040174273386868cc8dea8044d22c465885d8Paul Stewart uint16 frequency, 4113c5040174273386868cc8dea8044d22c465885d8Paul Stewart const char *mode, 4123c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr) { 4133c5040174273386868cc8dea8044d22c465885d8Paul Stewart string ssid(service->ssid().begin(), service->ssid().end()); 4143c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path path; 4153c5040174273386868cc8dea8044d22c465885d8Paul Stewart string bssid; 4163c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = 4173c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpoint(mode, true, &ssid, &path, &bssid); 4183c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(wifi_provider_, FindServiceForEndpoint(EndpointMatch(endpoint))) 4193c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(service)); 4203c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS(path, ssid, bssid, signal_strength, frequency, mode); 4213c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 4223c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 4233c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4243c5040174273386868cc8dea8044d22c465885d8Paul Stewart return path; 4253c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4263c5040174273386868cc8dea8044d22c465885d8Paul Stewart void InitiateConnect(WiFiServiceRefPtr service) { 4273c5040174273386868cc8dea8044d22c465885d8Paul Stewart map<string, ::DBus::Variant> params; 4283c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->ConnectTo(service, params); 4293c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4303c5040174273386868cc8dea8044d22c465885d8Paul Stewart void InitiateDisconnect(WiFiServiceRefPtr service) { 4313c5040174273386868cc8dea8044d22c465885d8Paul Stewart wifi_->DisconnectFrom(service); 4323c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4333c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr SetupConnectingService( 4343c5040174273386868cc8dea8044d22c465885d8Paul Stewart const DBus::Path &network_path, 4353c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr, 4363c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path *bss_path_ptr) { 4373c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (!network_path.empty()) { 4383c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(_)) 4393c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(network_path)); 4403c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), SelectNetwork(network_path)); 4413c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4423c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4433c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 4443c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 4453c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path(MakeNewEndpointAndService( 4463c5040174273386868cc8dea8044d22c465885d8Paul Stewart 0, 0, kNetworkModeAdHoc, &endpoint, &service)); 4473c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateAssociating)); 4483c5040174273386868cc8dea8044d22c465885d8Paul Stewart InitiateConnect(service); 4493c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 4503c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(GetPendingTimeout().IsCancelled()); 4513c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 4523c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 4533c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4543c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (bss_path_ptr) { 4553c5040174273386868cc8dea8044d22c465885d8Paul Stewart *bss_path_ptr = bss_path; 4563c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4573c5040174273386868cc8dea8044d22c465885d8Paul Stewart return service; 4583c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4593c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4603c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr SetupConnectedService( 4613c5040174273386868cc8dea8044d22c465885d8Paul Stewart const DBus::Path &network_path, 4623c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr *endpoint_ptr, 4633c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path *bss_path_ptr) { 4643c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 4653c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path; 4663c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 4673c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(network_path, &endpoint, &bss_path); 4683c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (endpoint_ptr) { 4693c5040174273386868cc8dea8044d22c465885d8Paul Stewart *endpoint_ptr = endpoint; 4703c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4713c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (bss_path_ptr) { 4723c5040174273386868cc8dea8044d22c465885d8Paul Stewart *bss_path_ptr = bss_path; 4733c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 4743c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, NotifyCurrentEndpoint(EndpointMatch(endpoint))); 4753c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(bss_path); 4763c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetPendingTimeout().IsCancelled()); 4773c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 4783c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4793c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateConfiguring)); 4803c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 4813c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 4823c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 4833c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 4843c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4853c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service, GetCurrentService()); 4863c5040174273386868cc8dea8044d22c465885d8Paul Stewart return service; 4871590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 488b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void FireScanTimer() { 489b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->ScanTimerHandler(); 490b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 491c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley void TriggerScan() { 492c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley wifi_->Scan(NULL); 493c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley } 4941590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetCurrentService() { 4951590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->current_service_; 4961590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 497bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart void SetCurrentService(const WiFiServiceRefPtr &service) { 498bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart wifi_->current_service_ = service; 499bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart } 5003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFi::EndpointMap &GetEndpointMap() { 501165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->endpoint_by_rpcid_; 5023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5031590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetPendingService() { 5041590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->pending_service_; 5051590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 5062b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart const base::CancelableClosure &GetPendingTimeout() { 5072b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart return wifi_->pending_timeout_callback_; 5082b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart } 5091aff7307d462b0160e821607058fe13831d8ef63Paul Stewart const base::CancelableClosure &GetReconnectTimeoutCallback() { 510446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart return wifi_->reconnect_timeout_callback_; 511446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart } 5121aff7307d462b0160e821607058fe13831d8ef63Paul Stewart int GetReconnectTimeoutSeconds() { 5131aff7307d462b0160e821607058fe13831d8ef63Paul Stewart return WiFi::kReconnectTimeoutSeconds; 5141aff7307d462b0160e821607058fe13831d8ef63Paul Stewart } 515b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal const base::CancelableClosure &GetScanTimer() { 516b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal return wifi_->scan_timer_callback_; 517b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 5183195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // note: the tests need the proxies referenced by WiFi (not the 519e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // proxies instantiated by WiFiObjectTest), to ensure that WiFi 5203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // sets up its proxies correctly. 5213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantProcessProxyInterface *GetSupplicantProcessProxy() { 5223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_process_proxy_.get(); 5233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5243c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockSupplicantInterfaceProxy *GetSupplicantInterfaceProxyFromWiFi() { 5258a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal return dynamic_cast<MockSupplicantInterfaceProxy *>( 5268a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal wifi_->supplicant_interface_proxy_.get()); 5273195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5283c5040174273386868cc8dea8044d22c465885d8Paul Stewart // This function returns the supplicant interface proxy whether 5293c5040174273386868cc8dea8044d22c465885d8Paul Stewart // or not we have passed the instantiated object to the WiFi instance 5303c5040174273386868cc8dea8044d22c465885d8Paul Stewart // from WiFiObjectTest, so tests don't need to worry about when they 5313c5040174273386868cc8dea8044d22c465885d8Paul Stewart // set expectations relative to StartWiFi(). 5323c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockSupplicantInterfaceProxy *GetSupplicantInterfaceProxy() { 5333c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockSupplicantInterfaceProxy *proxy = GetSupplicantInterfaceProxyFromWiFi(); 5343c5040174273386868cc8dea8044d22c465885d8Paul Stewart return proxy ? proxy : supplicant_interface_proxy_.get(); 5353c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 536835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart MockSupplicantNetworkProxy *CreateSupplicantNetworkProxy() { 537835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart return new NiceMock<MockSupplicantNetworkProxy>(); 538835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart } 5397ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal const string &GetSupplicantState() { 5407ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return wifi_->supplicant_state_; 5417ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 542835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart void ClearCachedCredentials(const WiFiService *service) { 543835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart return wifi_->ClearCachedCredentials(service); 544835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart } 545381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan bool RemoveNetwork(const ::DBus::Path &network) { 546381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan return wifi_->RemoveNetwork(network); 547381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan } 548261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal void RemoveBSS(const ::DBus::Path &bss_path); 5493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportBSS(const ::DBus::Path &bss_path, 5503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 5513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 5523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 553e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 5543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode); 555c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal void ReportIPConfigComplete() { 55679d74c9bdb654be48765c1e7aa416126ffd2ae5eDarin Petkov wifi_->OnIPConfigUpdated(dhcp_config_, true); 557c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal } 558f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal void ReportLinkUp() { 559f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi_->LinkEvent(IFF_LOWER_UP, IFF_LOWER_UP); 560f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 5613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportScanDone() { 562dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal wifi_->ScanDoneTask(); 5633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5641590839e44a0e922d4763003a35dbd493509b705mukesh agrawal void ReportCurrentBSSChanged(const string &new_bss) { 5651590839e44a0e922d4763003a35dbd493509b705mukesh agrawal wifi_->CurrentBSSChanged(new_bss); 5661590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 5677ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void ReportStateChanged(const string &new_state) { 5687ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_->StateChanged(new_state); 5697ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 5705581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart void ReportWiFiDebugScopeChanged(bool enabled) { 5715581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart wifi_->OnWiFiDebugScopeChanged(enabled); 5725581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart } 573cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal void SetPendingService(const WiFiServiceRefPtr &service) { 574cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal wifi_->pending_service_ = service; 575cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal } 576b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void SetScanInterval(uint16_t interval_seconds) { 577b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetScanInterval(interval_seconds, NULL); 578b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 579e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart uint16_t GetScanInterval() { 580e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart return wifi_->GetScanInterval(NULL); 581e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 5822b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void StartWiFi(bool supplicant_present) { 5832b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov wifi_->supplicant_present_ = supplicant_present; 584b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetEnabled(true); // Start(NULL, ResultCallback()); 5853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5862b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void StartWiFi() { 5872b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov StartWiFi(true); 5882b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 5892f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal void OnAfterResume() { 5902f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal wifi_->OnAfterResume(); 5912f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal } 5922f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal void OnBeforeSuspend() { 5932f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal wifi_->OnBeforeSuspend(); 5942f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal } 5952b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void OnSupplicantAppear() { 5962b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov wifi_->OnSupplicantAppear(":1.7"); 5972b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(wifi_->supplicant_present_); 5982b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 5992b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov void OnSupplicantVanish() { 6002b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov wifi_->OnSupplicantVanish(); 6012b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(wifi_->supplicant_present_); 6022b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 6032b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov bool GetSupplicantPresent() { 6042b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov return wifi_->supplicant_present_; 6052b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov } 6064a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov bool SetBgscanMethod(const string &method) { 6074a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ::DBus::Error error; 6084a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov return DBusAdaptor::SetProperty( 6094a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov wifi_->mutable_store(), 6104a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov flimflam::kBgscanMethodProperty, 6114a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov DBusAdaptor::StringToVariant(method), 6124a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov &error); 6134a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 6144a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 6154a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov void AppendBgscan(WiFiService *service, 6164a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov std::map<std::string, DBus::Variant> *service_params) { 6174a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov wifi_->AppendBgscan(service, service_params); 6184a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 6194a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 620bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart void ReportCertification(const map<string, ::DBus::Variant> &properties) { 621bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart wifi_->CertificationTask(properties); 622bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart } 62310ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 624db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart void ReportEAPEvent(const string &status, const string ¶meter) { 625db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart wifi_->EAPEventTask(status, parameter); 626db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart } 627db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 628e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart void RestartFastScanAttempts() { 629e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart wifi_->RestartFastScanAttempts(); 630e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 631e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 6321aff7307d462b0160e821607058fe13831d8ef63Paul Stewart void StartReconnectTimer() { 6331aff7307d462b0160e821607058fe13831d8ef63Paul Stewart wifi_->StartReconnectTimer(); 6341aff7307d462b0160e821607058fe13831d8ef63Paul Stewart } 6351aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 6361aff7307d462b0160e821607058fe13831d8ef63Paul Stewart void StopReconnectTimer() { 6371aff7307d462b0160e821607058fe13831d8ef63Paul Stewart wifi_->StopReconnectTimer(); 6381aff7307d462b0160e821607058fe13831d8ef63Paul Stewart } 6391aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 6403c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart void SetLinkMonitor(LinkMonitor *link_monitor) { 6413c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart wifi_->set_link_monitor(link_monitor); 6423c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart } 6433c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart 6441369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart bool SuspectCredentials(const WiFiService &service, 6451369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart Service::ConnectFailure *failure) { 6461369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart return wifi_->SuspectCredentials(service, failure); 6471369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart } 6481369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 6493c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart void OnLinkMonitorFailure() { 6503c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart wifi_->OnLinkMonitorFailure(); 6513c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart } 6523c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart 65310ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart NiceMockControl *control_interface() { 65410ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart return &control_interface_; 65510ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart } 65610ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 65785aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart MockMetrics *metrics() { 65885aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart return &metrics_; 65985aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart } 66085aea151c69ff40967becfa8751d821feebf3bb9Paul Stewart 6613239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal MockManager *manager() { 6623239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return &manager_; 6633239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 664d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 665d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDeviceInfo *device_info() { 666d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &device_info_; 667d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 668d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 669d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDHCPProvider *dhcp_provider() { 670d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &dhcp_provider_; 671d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 672d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 6733239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal const WiFiConstRefPtr wifi() const { 6743239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return wifi_; 6753239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 6763239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal 677b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal TestProxyFactory *proxy_factory() { 678b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return &proxy_factory_; 679b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 680b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 6813c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiProvider *wifi_provider() { 6823c5040174273386868cc8dea8044d22c465885d8Paul Stewart return &wifi_provider_; 6833c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 6843c5040174273386868cc8dea8044d22c465885d8Paul Stewart 685e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EventDispatcher *event_dispatcher_; 6865c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal NiceMock<MockRTNLHandler> rtnl_handler_; 6875c05b2920be742d518829972127172481722058dmukesh agrawal MockTime time_; 6883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 6893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 690dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal NiceMockControl control_interface_; 6913426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le MockMetrics metrics_; 692f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockGLib glib_; 6932ae797d040b7261a5619c750e07037566bcb542bChris Masone MockManager manager_; 694c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal MockDeviceInfo device_info_; 6953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiRefPtr wifi_; 6963c5040174273386868cc8dea8044d22c465885d8Paul Stewart NiceMock<MockWiFiProvider> wifi_provider_; 6973c5040174273386868cc8dea8044d22c465885d8Paul Stewart int bss_counter_; 6983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 6993195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // protected fields interspersed between private fields, due to 7003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // initialization order 7013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 7023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kDeviceName[]; 703626719f89881a949d8b5a8fa808beb924496489fChris Masone static const char kDeviceAddress[]; 7043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeAdHoc[]; 7053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeInfrastructure[]; 706446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart static const char kBSSName[]; 707446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart static const char kSSIDName[]; 7083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 709dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantProcessProxy> supplicant_process_proxy_; 710b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal scoped_ptr<MockSupplicantBSSProxy> supplicant_bss_proxy_; 711f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockDHCPProvider dhcp_provider_; 712f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal scoped_refptr<MockDHCPConfig> dhcp_config_; 7132b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov NiceMock<MockDBusManager> *dbus_manager_; 7143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7153195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 7163c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<MockSupplicantInterfaceProxy> supplicant_interface_proxy_; 717835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart NiceMock<TestProxyFactory> proxy_factory_; 7183195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal}; 7193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 720e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kDeviceName[] = "wlan0"; 721e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kDeviceAddress[] = "000102030405"; 722e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kNetworkModeAdHoc[] = "ad-hoc"; 723e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kNetworkModeInfrastructure[] = "infrastructure"; 724446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewartconst char WiFiObjectTest::kBSSName[] = "bss0"; 725446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewartconst char WiFiObjectTest::kSSIDName[] = "ssid0"; 7263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 727e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartvoid WiFiObjectTest::RemoveBSS(const ::DBus::Path &bss_path) { 728b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSRemovedTask(bss_path); 729261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 730261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 731e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartvoid WiFiObjectTest::ReportBSS(const ::DBus::Path &bss_path, 7323195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 7333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 7343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 735e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 7363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode) { 7373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal map<string, ::DBus::Variant> bss_properties; 7383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 7403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["SSID"].writer()); 7413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << vector<uint8_t>(ssid.begin(), ssid.end()); 7423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 7433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 7443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal string bssid_nosep; 7453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal vector<uint8_t> bssid_bytes; 7463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal RemoveChars(bssid, ":", &bssid_nosep); 7473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal base::HexStringToBytes(bssid_nosep, &bssid_bytes); 7483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["BSSID"].writer()); 7503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << bssid_bytes; 7513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 752e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertySignal].writer(). 753e41a72d0737488d561a4158019409d5785dad61bThieu Le append_int16(signal_strength); 754e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertyFrequency].writer(). 755e41a72d0737488d561a4158019409d5785dad61bThieu Le append_uint16(frequency); 756e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertyMode].writer().append_string(mode); 757b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSAddedTask(bss_path, bss_properties); 7583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7593195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 760e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul StewartWiFiObjectTest::TestProxyFactory::TestProxyFactory(WiFiObjectTest *test) 761b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal : test_(test) { 762b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*this, CreateSupplicantBSSProxy(_, _, _)).Times(AnyNumber()); 763b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ON_CALL(*this, CreateSupplicantBSSProxy(_, _, _)) 764b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal .WillByDefault( 765b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Invoke(this, (&TestProxyFactory::CreateSupplicantBSSProxyInternal))); 766b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 767b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 768e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// Most of our tests involve using a real EventDispatcher object. 769e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartclass WiFiMainTest : public WiFiObjectTest { 770e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart public: 771e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiMainTest() : WiFiObjectTest(&dispatcher_) {} 772e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 773e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart protected: 774e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EventDispatcher dispatcher_; 775e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart}; 776e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 7773195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ProxiesSetUpDuringStart) { 7783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 7793c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetSupplicantInterfaceProxyFromWiFi() == NULL); 7803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 7823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 7833c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(GetSupplicantInterfaceProxyFromWiFi() == NULL); 7843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7862b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, SupplicantPresent) { 7872b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(GetSupplicantPresent()); 7882b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 7892b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 7902b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantAppearStarted) { 7912b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 7922b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 7932b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*dbus_manager_, WatchName(wpa_supplicant::kDBusAddr, _, _)); 7942b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov StartWiFi(false); // No supplicant present. 7952b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 7962b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 7972b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantAppear(); 7982b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 7999cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov 8009cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // If supplicant reappears while the device is started, the device should be 8019cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // restarted. 8029cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)); 8039cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov EXPECT_CALL(*manager(), RegisterDevice(_)); 8049cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov OnSupplicantAppear(); 8052b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 8062b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8072b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantAppearStopped) { 8082b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 8092b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8102b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantAppear(); 8112b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 8129cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov 8139cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // If supplicant reappears while the device is stopped, the device should not 8149cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov // be restarted. 8159cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)).Times(0); 8169cd7ca1c9b73f19f60f6ee5573c3cd5d7beaf4bfDarin Petkov OnSupplicantAppear(); 8172b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 8182b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8192b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantVanishStarted) { 8202b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 8212b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8222b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov StartWiFi(); 8232b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 8242b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantPresent()); 8252b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8262b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)); 8272b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*manager(), RegisterDevice(_)); 8282b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantVanish(); 8292b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 8302b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 8312b8e44e4559ef85394e868963d9084b4e4148824Darin PetkovTEST_F(WiFiMainTest, OnSupplicantVanishStopped) { 8322b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantAppear(); 8332b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_TRUE(GetSupplicantPresent()); 8342b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov EXPECT_CALL(*manager(), DeregisterDevice(_)).Times(0); 8352b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov OnSupplicantVanish(); 8362b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov} 8372b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov 838549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul StewartTEST_F(WiFiMainTest, OnSupplicantVanishedWhileConnected) { 8393c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 8403c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 8413c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 8423c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, NULL)); 843549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart ScopedMockLog log; 844549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 845c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 846549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EndsWith("silently resetting current_service_."))); 847549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_CALL(*manager(), DeregisterDevice(_)) 848549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart .WillOnce(InvokeWithoutArgs(this, &WiFiObjectTest::StopWiFi)); 8493c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<EndpointRemovalHandler> handler( 8503c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeEndpointRemovalHandler(service)); 8513c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 8523c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Invoke(handler.get(), 8533c5040174273386868cc8dea8044d22c465885d8Paul Stewart &EndpointRemovalHandler::OnEndpointRemoved)); 8543c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 855549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_CALL(*manager(), RegisterDevice(_)); 856549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart OnSupplicantVanish(); 857549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_TRUE(GetCurrentService() == NULL); 858549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart} 859549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart 8603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, CleanStart) { 8613195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 8623195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 8633195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 8643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 8653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 8663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceUnknown", 8673195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 868b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 8693195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 8703c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 8713239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 872b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 8733195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 8743195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 875835934a8e009edf3b6b73717fe3ed336d6720d68Paul StewartTEST_F(WiFiMainTest, ClearCachedCredentials) { 8763c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 877835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart DBus::Path network = "/test/path"; 8783c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(network, NULL, NULL)); 8793c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)); 880835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart ClearCachedCredentials(service); 881835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart} 882835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 883381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetwork) { 884381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 885381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 8863c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)); 887381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_TRUE(RemoveNetwork(network)); 888381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 889381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 890381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetworkWhenSupplicantReturnsNetworkUnknown) { 891381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 8923c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)) 893381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan .WillRepeatedly(Throw( 894381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Error( 895381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "fi.w1.wpa_supplicant1.NetworkUnknown", 896381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "test threw fi.w1.wpa_supplicant1.NetworkUnknown"))); 897381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 898381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_TRUE(RemoveNetwork(network)); 899381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 900381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 901ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman UgurayTEST_F(WiFiMainTest, UseArpGateway) { 902ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray EXPECT_CALL(dhcp_provider_, CreateConfig(kDeviceName, _, _, true)) 903ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray .WillOnce(Return(dhcp_config_)); 904ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray const_cast<WiFi *>(wifi().get())->AcquireIPConfig(); 905ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray} 906ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray 907381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetworkWhenSupplicantReturnsInvalidArgs) { 908381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 9093c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)) 910381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan .WillRepeatedly(Throw( 911381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Error( 912381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "fi.w1.wpa_supplicant1.InvalidArgs", 913381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "test threw fi.w1.wpa_supplicant1.InvalidArgs"))); 914381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 915381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_FALSE(RemoveNetwork(network)); 916381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 917381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 918381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen ChanTEST_F(WiFiMainTest, RemoveNetworkWhenSupplicantReturnsUnknownError) { 919381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Path network = "/test/path"; 9203c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(network)) 921381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan .WillRepeatedly(Throw( 922381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan DBus::Error( 923381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "fi.w1.wpa_supplicant1.UnknownError", 924381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan "test threw fi.w1.wpa_supplicant1.UnknownError"))); 925381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan StartWiFi(); 926381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan EXPECT_FALSE(RemoveNetwork(network)); 927381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan} 928381fdcc47ebc780fa361a79c69f9248d5ff1d53bBen Chan 9293195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Restart) { 9303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)) 9313195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 9323195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 9333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 9343195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceExists", 9352b8e44e4559ef85394e868963d9084b4e4148824Darin Petkov "test threw fi.w1.wpa_supplicant1.InterfaceExists"))); 9363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)); 9373c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 9383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 9393239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 9403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 9413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 9423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, StartClearsState) { 9433c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveAllNetworks()); 9443c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), FlushBSS(_)); 9453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 9463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 9473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 948c68c867905c985c0a703a7e2b575ecc091d14688Christopher WileyTEST_F(WiFiMainTest, NoScansWhileConnecting) { 949c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley StartWiFi(); 9503c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 9513c5040174273386868cc8dea8044d22c465885d8Paul Stewart dispatcher_.DispatchPendingEvents(); 9523c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9533c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 954c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley SetPendingService(service); 955c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley // If we're connecting, we ignore scan requests to stay on channel. 9563c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(true)); 957c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 958c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley TriggerScan(); 959c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 960c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9613c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 9623c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(false)); 963c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 964c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley TriggerScan(); 965c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 966c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9673c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 968c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley // Similarly, ignore scans when our connected service is reconnecting. 969c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley SetPendingService(NULL); 970c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley SetCurrentService(service); 9713c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(true)); 972c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 973c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley TriggerScan(); 974c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 975c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9763c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 977c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley // But otherwise we'll honor the request. 9783c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnecting()).WillOnce(Return(false)); 979c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(1); 980c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley TriggerScan(); 981c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley dispatcher_.DispatchPendingEvents(); 982c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9833c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 984c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley} 985c68c867905c985c0a703a7e2b575ecc091d14688Christopher Wiley 9862f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawalTEST_F(WiFiMainTest, ResumeStartsScanWhenIdle) { 9873c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 988ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 989ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 9903c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 9915c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 992ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 993ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 9942f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnAfterResume(); 995ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 996ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 997ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 9982f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawalTEST_F(WiFiMainTest, SuspendDoesNotStartScan) { 9993c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1000ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 1001ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 10023c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 1003ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 1004ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 10052f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnBeforeSuspend(); 1006ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 1007ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 1008ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 10092f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawalTEST_F(WiFiMainTest, ResumeDoesNotStartScanWhenNotIdle) { 10103c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1011ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 1012ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 10133c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 10143c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(DBus::Path(), NULL, NULL)); 10153c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(wifi()->IsIdle()); 10163c5040174273386868cc8dea8044d22c465885d8Paul Stewart ScopedMockLog log; 10173ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 10183ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal EXPECT_CALL(log, Log(_, _, EndsWith("already scanning or connected."))); 1019ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 10202f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnAfterResume(); 1021ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 1022ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 1023ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 10243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResults) { 10253c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(_)).Times(5); 10263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 1027e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 10283195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 1029e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 10303195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 1031e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 10323195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 1033e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss3", "ssid3", "00:00:00:00:00:03", 3, 0, kNetworkModeInfrastructure); 1034e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency = 2412; 1035e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss4", "ssid4", "00:00:00:00:00:04", 4, frequency, 1036e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeAdHoc); 1037e41a72d0737488d561a4158019409d5785dad61bThieu Le 1038e41a72d0737488d561a4158019409d5785dad61bThieu Le const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 1039e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(5, endpoints_by_rpcid.size()); 1040e41a72d0737488d561a4158019409d5785dad61bThieu Le 1041e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFi::EndpointMap::const_iterator i; 1042e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFiEndpointRefPtr endpoint; 1043e41a72d0737488d561a4158019409d5785dad61bThieu Le for (i = endpoints_by_rpcid.begin(); 1044e41a72d0737488d561a4158019409d5785dad61bThieu Le i != endpoints_by_rpcid.end(); 1045e41a72d0737488d561a4158019409d5785dad61bThieu Le ++i) { 1046e41a72d0737488d561a4158019409d5785dad61bThieu Le if (i->second->bssid_string() == "00:00:00:00:00:04") 1047e41a72d0737488d561a4158019409d5785dad61bThieu Le break; 1048e41a72d0737488d561a4158019409d5785dad61bThieu Le } 1049e41a72d0737488d561a4158019409d5785dad61bThieu Le ASSERT_TRUE(i != endpoints_by_rpcid.end()); 1050e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(4, i->second->signal_strength()); 1051e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency, i->second->frequency()); 1052e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ("adhoc", i->second->network_mode()); 10533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 10543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 10553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanCompleted) { 10563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 10573c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr ap0 = MakeEndpointWithMode("ssid0", "00:00:00:00:00:00", 10583c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeAdHoc); 10593c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr ap1 = MakeEndpoint("ssid1", "00:00:00:00:00:01"); 10603c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr ap2 = MakeEndpoint("ssid2", "00:00:00:00:00:02"); 10613c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(EndpointMatch(ap0))).Times(1); 10623c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(EndpointMatch(ap1))).Times(1); 10633c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(EndpointMatch(ap2))).Times(1); 10643c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS("bss0", ap0->ssid_string(), ap0->bssid_string(), 0, 0, 10653c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeAdHoc); 10663c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS("bss1", ap1->ssid_string(), ap1->bssid_string(), 0, 0, 10673c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeInfrastructure); 10683c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportBSS("bss2", ap2->ssid_string(), ap2->bssid_string(), 0, 0, 10693c5040174273386868cc8dea8044d22c465885d8Paul Stewart kNetworkModeInfrastructure); 10703195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 10713c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(wifi_provider()); 10723c5040174273386868cc8dea8044d22c465885d8Paul Stewart 10733c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointAdded(_)).Times(0); 1074b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 1075e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with SSIDs that start with NULL should be filtered. 1076e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss3", string(1, 0), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 1077b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 1078e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with empty SSIDs should be filtered. 1079e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss3", string(), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 10808a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 10818a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 10828a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemovedWhileConnected) { 10838a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 10843c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 10853c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path bss_path; 10863c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 10873c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, &bss_path)); 10883c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<EndpointRemovalHandler> handler( 10893c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeEndpointRemovalHandler(service)); 10903c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 10913c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Invoke(handler.get(), 10923c5040174273386868cc8dea8044d22c465885d8Paul Stewart &EndpointRemovalHandler::OnEndpointRemoved)); 10938a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 10943c5040174273386868cc8dea8044d22c465885d8Paul Stewart RemoveBSS(bss_path); 1095261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 1096261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 1097261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonSolitaryBSSRemoved) { 1098261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 10993c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 11003c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path bss_path; 11013c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 11023c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, &bss_path)); 11033c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 11043c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 11053c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 11063c5040174273386868cc8dea8044d22c465885d8Paul Stewart RemoveBSS(bss_path); 11073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 11083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 1109835934a8e009edf3b6b73717fe3ed336d6720d68Paul StewartTEST_F(WiFiMainTest, ReconnectPreservesDBusPath) { 1110835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart StartWiFi(); 11113c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path kPath = "/test/path"; 11123c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 1113835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 1114835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // Return the service to a connectable state. 11153c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 1116835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart InitiateDisconnect(service); 11173c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11183c5040174273386868cc8dea8044d22c465885d8Paul Stewart 11193c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Complete the disconnection by reporting a BSS change. 11203c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1121835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 1122835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // A second connection attempt should remember the DBus path associated 1123835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // with this service. 11243c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(_)).Times(0); 11253c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), SelectNetwork(kPath)); 1126835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart InitiateConnect(service); 1127835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart} 1128835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 11290ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingService) { 11300ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 11313c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 11323c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 11333c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetPendingService() == service.get()); 11343c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 11353c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateIdle)).Times(AtLeast(1)); 11360ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 11373c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service.get()); 11380ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetPendingService() == NULL); 11390ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 11400ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11410ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingServiceWithCurrent) { 11420ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 11433c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0( 11443c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL)); 11453c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0, GetCurrentService()); 11463c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetPendingService().get()); 11470ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11483c5040174273386868cc8dea8044d22c465885d8Paul Stewart // We don't explicitly call Disconnect() while transitioning to a new 11493c5040174273386868cc8dea8044d22c465885d8Paul Stewart // service. Instead, we use the side-effect of SelectNetwork (verified in 11503c5040174273386868cc8dea8044d22c465885d8Paul Stewart // SetupConnectingService). 11513c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 11523c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1( 11533c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService("/new/path", NULL, NULL)); 11543c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11550ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11560ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 11570ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 11583c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, SetState(Service::kStateIdle)).Times(AtLeast(1)); 11593c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 11600ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service1); 11613c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service1.get()); 11620ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11630ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| will be unchanged until supplicant signals 11640ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // that CurrentBSS has changed. 11650ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 11660ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |pending_service_| is updated immediately. 11673c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetPendingService().get()); 11682b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_TRUE(GetPendingTimeout().IsCancelled()); 11690ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 11700ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11710ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentService) { 11723c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 11733c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path kPath("/fake/path"); 11743c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 11753c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 11760ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 11770ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 11780ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| should not change until supplicant reports 11790ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // a BSS change. 11800ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 1181835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart 1182835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart // Expect that the entry associated with this network will be disabled. 1183835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart MockSupplicantNetworkProxy *network_proxy = CreateSupplicantNetworkProxy(); 1184835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart EXPECT_CALL(*proxy_factory(), CreateSupplicantNetworkProxy( 11853c5040174273386868cc8dea8044d22c465885d8Paul Stewart kPath, wpa_supplicant::kDBusAddr)) 1186835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart .WillOnce(Return(network_proxy)); 1187835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart EXPECT_CALL(*network_proxy, SetEnabled(false)); 11883c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)).Times(0); 1189835934a8e009edf3b6b73717fe3ed336d6720d68Paul Stewart ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 11903c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetCurrentService().get()); 11913c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 11920ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 11930ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 1194c618448120f8945d77d451242a7de6782d1e4189Christopher WileyTEST_F(WiFiMainTest, DisconnectCurrentServiceWithErrors) { 11953c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 11963c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path kPath("/fake/path"); 11973c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 11983c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()) 1199c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley .WillOnce(InvokeWithoutArgs(this, (&WiFiMainTest::ThrowDBusError))); 12003c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)).Times(1); 1201c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley InitiateDisconnect(service); 1202c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley 1203c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley // We may sometimes fail to disconnect via supplicant, and we patch up some 1204c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley // state when this happens. 1205c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley EXPECT_EQ(NULL, GetCurrentService().get()); 1206c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley EXPECT_EQ(NULL, wifi()->selected_service().get()); 1207c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley} 1208c618448120f8945d77d451242a7de6782d1e4189Christopher Wiley 12090ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceWithPending) { 12100ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 12113c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service0(SetupConnectedService(DBus::Path(), NULL, NULL)); 12123c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service1(SetupConnectingService(DBus::Path(), NULL, NULL)); 12130ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 12140ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 12153c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 12160ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service0); 12170ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 12180ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 12190ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 12202b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_FALSE(GetPendingTimeout().IsCancelled()); 12212b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart} 12222b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart 12232b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul StewartTEST_F(WiFiMainTest, TimeoutPendingService) { 12242b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart StartWiFi(); 12252b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart const base::CancelableClosure &pending_timeout = GetPendingTimeout(); 12262b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_TRUE(pending_timeout.IsCancelled()); 12273c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 12283c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 12292b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_FALSE(pending_timeout.IsCancelled()); 12302b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_EQ(service, GetPendingService()); 12313c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(Service::kFailureOutOfRange, _)); 12323c5040174273386868cc8dea8044d22c465885d8Paul Stewart pending_timeout.callback().Run(); 12330ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 12340ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 12350ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectInvalidService) { 12360ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 12373c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 12383c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, &service); 12393c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()).Times(0); 12400ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 12410ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 12420ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 12430ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceFailure) { 12443c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 12453c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path kPath("/fake/path"); 12463c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service(SetupConnectedService(kPath, NULL, NULL)); 12473c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()) 12480ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .WillRepeatedly(Throw( 12490ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal DBus::Error( 12500ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "fi.w1.wpa_supplicant1.NotConnected", 12510ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "test threw fi.w1.wpa_supplicant1.NotConnected"))); 12523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)); 12530ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 12543c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetCurrentService().get()); 12550ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 12560ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 12575c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawalTEST_F(WiFiMainTest, Stop) { 1258c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 12593c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint0; 12603c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path kPath("/fake/path"); 12613c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service0(SetupConnectedService(kPath, &endpoint0, NULL)); 12623c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint1; 12633c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, &endpoint1, NULL); 12643c5040174273386868cc8dea8044d22c465885d8Paul Stewart 12653c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint0))) 12663c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 12673c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint1))) 12683c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 12693c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), RemoveNetwork(kPath)).Times(1); 1270c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StopWiFi(); 1271b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1272c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal EXPECT_FALSE(wifi()->weak_ptr_factory_.HasWeakPtrs()); 12735c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal} 12745c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 1275549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul StewartTEST_F(WiFiMainTest, StopWhileConnected) { 12763c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 12773c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 12783c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service( 12793c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, NULL)); 12803c5040174273386868cc8dea8044d22c465885d8Paul Stewart scoped_ptr<EndpointRemovalHandler> handler( 12813c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeEndpointRemovalHandler(service)); 12823c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(EndpointMatch(endpoint))) 12833c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Invoke(handler.get(), 12843c5040174273386868cc8dea8044d22c465885d8Paul Stewart &EndpointRemovalHandler::OnEndpointRemoved)); 12853c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 1286549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart StopWiFi(); 1287549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart EXPECT_TRUE(GetCurrentService() == NULL); 1288549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart} 1289549d44cd58f2ee46279f3f5a03de2f07e7c439aaPaul Stewart 1290446639208c7678fd0ef452caf8ce63b6596d25e2Paul StewartTEST_F(WiFiMainTest, ReconnectTimer) { 12913c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 12923c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 12933c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL)); 12943c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnected()).WillRepeatedly(Return(true)); 12951aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 1296446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart ReportStateChanged(wpa_supplicant::kInterfaceStateDisconnected); 12971aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_FALSE(GetReconnectTimeoutCallback().IsCancelled()); 1298446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 12991aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 1300446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart ReportStateChanged(wpa_supplicant::kInterfaceStateDisconnected); 13011aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_FALSE(GetReconnectTimeoutCallback().IsCancelled()); 1302446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart ReportCurrentBSSChanged(kBSSName); 13031aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 1304446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart ReportStateChanged(wpa_supplicant::kInterfaceStateDisconnected); 13051aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_FALSE(GetReconnectTimeoutCallback().IsCancelled()); 13063c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 13071aff7307d462b0160e821607058fe13831d8ef63Paul Stewart GetReconnectTimeoutCallback().callback().Run(); 13083c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 13091aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_TRUE(GetReconnectTimeoutCallback().IsCancelled()); 1310446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart} 1311446639208c7678fd0ef452caf8ce63b6596d25e2Paul Stewart 1312cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart 1313ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartMATCHER_P(HasHiddenSSID, ssid, "") { 1314a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart map<string, DBus::Variant>::const_iterator it = 1315ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart arg.find(wpa_supplicant::kPropertyScanSSIDs); 1316ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart if (it == arg.end()) { 1317ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return false; 1318ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 1319ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1320ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const DBus::Variant &ssids_variant = it->second; 1321ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_TRUE(DBusAdaptor::IsByteArrays(ssids_variant.signature())); 1322ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const ByteArrays &ssids = it->second.operator ByteArrays(); 1323ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // A valid Scan containing a single hidden SSID should contain 1324ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // two SSID entries: one containing the SSID we are looking for, 1325ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // and an empty entry, signifying that we also want to do a 1326ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // broadcast probe request for all non-hidden APs as well. 13273c5040174273386868cc8dea8044d22c465885d8Paul Stewart return ssids.size() == 2 && ssids[0] == ssid && ssids[1].empty(); 13283c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 13293c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13303c5040174273386868cc8dea8044d22c465885d8Paul StewartMATCHER(HasNoHiddenSSID, "") { 13313c5040174273386868cc8dea8044d22c465885d8Paul Stewart map<string, DBus::Variant>::const_iterator it = 13323c5040174273386868cc8dea8044d22c465885d8Paul Stewart arg.find(wpa_supplicant::kPropertyScanSSIDs); 13333c5040174273386868cc8dea8044d22c465885d8Paul Stewart return it == arg.end(); 1334ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1335ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1336ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartTEST_F(WiFiMainTest, ScanHidden) { 13373c5040174273386868cc8dea8044d22c465885d8Paul Stewart vector<uint8_t>kSSID(1, 'a'); 13383c5040174273386868cc8dea8044d22c465885d8Paul Stewart ByteArrays ssids; 13393c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssids.push_back(kSSID); 13403c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13413c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 13423c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()).WillOnce(Return(ssids)); 13433c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(HasHiddenSSID(kSSID))); 13443c5040174273386868cc8dea8044d22c465885d8Paul Stewart dispatcher_.DispatchPendingEvents(); 13453c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 13463c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13473c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiMainTest, ScanNoHidden) { 1348ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart StartWiFi(); 13493c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 13503c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(ByteArrays())); 13513c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(HasNoHiddenSSID())); 1352ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart dispatcher_.DispatchPendingEvents(); 1353ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1354ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1355fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul StewartTEST_F(WiFiMainTest, ScanWiFiDisabledAfterResume) { 1356fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart ScopedMockLog log; 1357fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 1358fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart EXPECT_CALL(log, Log(_, _, EndsWith( 1359fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart "Ignoring scan request while device is not enabled."))).Times(1); 13603c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1361fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart StartWiFi(); 1362fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart StopWiFi(); 1363fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart // A scan is queued when WiFi resumes. 1364fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart OnAfterResume(); 1365fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart dispatcher_.DispatchPendingEvents(); 1366fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart} 1367fae4daec29b1dd9c0f288a149a302e740a1f29a3Paul Stewart 13687ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, InitialSupplicantState) { 13697ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(WiFi::kInterfaceStateUnknown, GetSupplicantState()); 13707ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13717ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13727ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeNoService) { 13737ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // State change should succeed even if there is no pending Service. 13747ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateScanning); 13757ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateScanning, GetSupplicantState()); 13767ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13777ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13787ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeWithService) { 13797ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Forward transition should trigger a Service state change. 13807ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 13817ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 1382cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 13837ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 13847ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 13857ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAssociated); 13867ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 13877ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 13887ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 1389d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 13907ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13917ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13927ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeBackwardsWithService) { 13937ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Some backwards transitions should not trigger a Service state change. 13947ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Supplicant state should still be updated, however. 1395d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1396d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 13977ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 13987ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 1399cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 14002b05e62aee046cdabbf7edbc4cf45cef961d30a1Paul Stewart EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 1401d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(Service::kStateConfiguring)); 14027ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 14037ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 14047ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAuthenticating); 14057ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateAuthenticating, 14067ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal GetSupplicantState()); 14077ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 14087ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 14093c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 14103c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(_)).Times(AnyNumber()); 14117ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 14127ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 1413a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul StewartTEST_F(WiFiMainTest, ConnectToServiceWithoutRecentIssues) { 1414a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockSupplicantProcessProxy *process_proxy = supplicant_process_proxy_.get(); 1415a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart StartWiFi(); 1416a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart dispatcher_.DispatchPendingEvents(); 1417a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1418a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()).Times(0); 1419a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 1420a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*service.get(), HasRecentConnectionIssues()) 1421a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .WillOnce(Return(false)); 1422a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart InitiateConnect(service); 1423a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart} 1424a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1425a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul StewartTEST_F(WiFiMainTest, ConnectToServiceWithRecentIssues) { 1426a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // Turn of WiFi debugging, so the only reason we will turn on supplicant 1427a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // debugging will be to debug a problematic connection. 1428a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart ScopeLogger::GetInstance()->EnableScopesByName("-wifi"); 1429a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1430a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockSupplicantProcessProxy *process_proxy = supplicant_process_proxy_.get(); 1431a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart StartWiFi(); 1432a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart dispatcher_.DispatchPendingEvents(); 1433a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1434a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 1435a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelInfo)); 1436a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(wpa_supplicant::kDebugLevelDebug)) 1437a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .Times(1); 1438a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*service.get(), HasRecentConnectionIssues()) 1439a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .WillOnce(Return(true)); 1440a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart InitiateConnect(service); 1441a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 1442a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1443a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart SetPendingService(NULL); 1444a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart SetCurrentService(service); 1445a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 1446a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // When we disconnect from the troubled service, we should reduce the 1447a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart // level of supplciant debugging. 1448a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 1449a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelDebug)); 1450a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(wpa_supplicant::kDebugLevelInfo)) 1451a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart .Times(1); 1452a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1453a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart} 1454a47c3c62552d33aa1f745097a5713c4f6f4cc325Paul Stewart 14551590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToDisconnected) { 14561590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 14573c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 14583c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 14593c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), &endpoint, NULL); 14601590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14613c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetState(Service::kStateIdle)); 14623c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, SetFailureSilent(Service::kFailureUnknown)); 14631590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 14641590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetCurrentService().get()); 14651590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 14661590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 14671590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 14681590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToConnectedNewService) { 14691590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 14703c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0 = 14713c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 14723c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1; 14733c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path1(MakeNewEndpointAndService( 14743c5040174273386868cc8dea8044d22c465885d8Paul Stewart 0, 0, kNetworkModeAdHoc, NULL, &service1)); 14753c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0.get(), GetCurrentService().get()); 14761590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1477c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Note that we deliberately omit intermediate supplicant states 1478c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // (e.g. kInterfaceStateAssociating), on the theory that they are 1479c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // unreliable. Specifically, they may be quashed if the association 1480c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // completes before supplicant flushes its changed properties. 14813c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, SetState(Service::kStateIdle)).Times(AtLeast(1)); 14823c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(bss_path1); 14833c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, SetState(Service::kStateConfiguring)); 14841590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 14853c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service1.get(), GetCurrentService().get()); 14863c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service0); 14873c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service1); 14881590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 14891590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1490e41a72d0737488d561a4158019409d5785dad61bThieu LeTEST_F(WiFiMainTest, CurrentBSSChangedUpdateServiceEndpoint) { 1491e41a72d0737488d561a4158019409d5785dad61bThieu Le StartWiFi(); 14923c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 14933c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 14943c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint; 14953c5040174273386868cc8dea8044d22c465885d8Paul Stewart ::DBus::Path bss_path = 14963c5040174273386868cc8dea8044d22c465885d8Paul Stewart AddEndpointToService(service, 0, 0, kNetworkModeAdHoc, &endpoint); 14973c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, NotifyCurrentEndpoint(EndpointMatch(endpoint))); 14983c5040174273386868cc8dea8044d22c465885d8Paul Stewart ReportCurrentBSSChanged(bss_path); 14994eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal} 15004eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal 15018a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, NewConnectPreemptsPending) { 15028a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 15033c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0( 15043c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 15053c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0.get(), GetPendingService().get()); 15068a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 15073c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1( 15083c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 15093c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service1.get(), GetPendingService().get()); 15103c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(NULL, GetCurrentService().get()); 15118a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 15128a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15138a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, IsIdle) { 15148a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 15158a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(wifi()->IsIdle()); 15163c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 15173c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 15188a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_FALSE(wifi()->IsIdle()); 15198a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 15208a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 15214a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovMATCHER_P(WiFiAddedArgs, bgscan, "") { 15224d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal return ContainsKey(arg, wpa_supplicant::kNetworkPropertyScanSSID) && 15234a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ContainsKey(arg, wpa_supplicant::kNetworkPropertyBgscan) == bgscan; 15244d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 15254d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 15264d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawalTEST_F(WiFiMainTest, AddNetworkArgs) { 15274d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal StartWiFi(); 15283c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 15293c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, &service); 15303c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(WiFiAddedArgs(true))); 15314a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE(SetBgscanMethod(wpa_supplicant::kNetworkBgscanMethodSimple)); 15324d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal InitiateConnect(service); 15334d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 15344d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 15354a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovTEST_F(WiFiMainTest, AddNetworkArgsNoBgscan) { 15364a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov StartWiFi(); 15373c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service; 15383c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, &service); 15393c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(WiFiAddedArgs(false))); 15404a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov InitiateConnect(service); 15414a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov} 15424a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 15434a66cc5e91ad82743ab196257438e3a0c313aab7Darin PetkovTEST_F(WiFiMainTest, AppendBgscan) { 15444a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov StartWiFi(); 15453c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 15464a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov { 15474a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov // 1 endpoint, default bgscan method -- background scan disabled. 15484a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov std::map<std::string, DBus::Variant> params; 15493c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).WillOnce(Return(1)); 15503c5040174273386868cc8dea8044d22c465885d8Paul Stewart AppendBgscan(service, ¶ms); 15513c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 15524a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_FALSE(ContainsKey(params, wpa_supplicant::kNetworkPropertyBgscan)); 15534a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 15544a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov { 15554a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov // 2 endpoints, default bgscan method -- background scan frequency reduced. 15564a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov map<string, DBus::Variant> params; 15573c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).WillOnce(Return(2)); 15583c5040174273386868cc8dea8044d22c465885d8Paul Stewart AppendBgscan(service, ¶ms); 15593c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 15604a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov string config_string; 15614a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE( 15624a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov DBusProperties::GetString(params, 15634a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov wpa_supplicant::kNetworkPropertyBgscan, 15644a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov &config_string)); 15654a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov vector<string> elements; 15664a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov base::SplitString(config_string, ':', &elements); 15674a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ASSERT_EQ(4, elements.size()); 15684a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(WiFi::kDefaultBgscanMethod, elements[0]); 15694a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(StringPrintf("%d", WiFi::kBackgroundScanIntervalSeconds), 15704a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov elements[3]); 15714a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 15724a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov { 15734a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov // Explicit bgscan method -- regular background scan frequency. 15744a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE(SetBgscanMethod(wpa_supplicant::kNetworkBgscanMethodSimple)); 15754a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov std::map<std::string, DBus::Variant> params; 15763c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).Times(0); 15773c5040174273386868cc8dea8044d22c465885d8Paul Stewart AppendBgscan(service, ¶ms); 15783c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 15794a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov string config_string; 15804a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_TRUE( 15814a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov DBusProperties::GetString(params, 15824a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov wpa_supplicant::kNetworkPropertyBgscan, 15834a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov &config_string)); 15844a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov vector<string> elements; 15854a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov base::SplitString(config_string, ':', &elements); 15864a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov ASSERT_EQ(4, elements.size()); 15874a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov EXPECT_EQ(StringPrintf("%d", WiFi::kDefaultScanIntervalSeconds), 15884a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov elements[3]); 15894a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov } 15905c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley { 15915c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley // No scan method, simply returns without appending properties 15925c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley EXPECT_TRUE(SetBgscanMethod(wpa_supplicant::kNetworkBgscanMethodNone)); 15935c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley std::map<std::string, DBus::Variant> params; 15943c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, GetEndpointCount()).Times(0); 15955c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley AppendBgscan(service.get(), ¶ms); 15963c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(service); 15975c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley string config_string; 15985c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley EXPECT_FALSE( 15995c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley DBusProperties::GetString(params, 16005c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley wpa_supplicant::kNetworkPropertyBgscan, 16015c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley &config_string)); 16025c929e250fa0295f3ac8ec6167dd35642c8a1635Christopher Wiley } 16034a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov} 16044a66cc5e91ad82743ab196257438e3a0c313aab7Darin Petkov 1605c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, StateAndIPIgnoreLinkEvent) { 1606c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 16073c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 16083c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL)); 1609c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*service.get(), SetState(_)).Times(0); 1610c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 1611c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportLinkUp(); 1612c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1613c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Verify expectations now, because WiFi may cause |service| state 1614c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // changes during TearDown(). 1615c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal Mock::VerifyAndClearExpectations(service); 1616c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1617c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1618c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, SupplicantCompletedAlreadyConnected) { 1619c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 16203c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service( 16213c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL)); 16228f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley Mock::VerifyAndClearExpectations(dhcp_config_.get()); 1623c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 16248f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley // Simulate a rekeying event from the AP. These show as transitions from 16258f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley // completed->completed from wpa_supplicant. 16268f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 16275519e9e7021ba05af8c38291710746fac3528f21Christopher Wiley // When we get an IP, WiFi should enable high bitrates on the interface again. 16283c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 16293c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), EnableHighBitrates()).Times(1); 16303c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*manager(), device_info()).WillOnce(Return(device_info())); 16318f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley ReportIPConfigComplete(); 16328f81e2a3e3e25345d04ab0b93d09e61cb73153aaChristopher Wiley // Similarly, rekeying events after we have an IP don't trigger L3 16335519e9e7021ba05af8c38291710746fac3528f21Christopher Wiley // configuration. However, we treat all transitions to completed as potential 16345519e9e7021ba05af8c38291710746fac3528f21Christopher Wiley // reassociations, so we will reenable high rates again here. 16353c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 16363c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, IsConnected()).WillOnce(Return(true)); 16373c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), EnableHighBitrates()).Times(1); 1638c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1639c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1640c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1641b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSAddedCreatesBSSProxy) { 1642b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): Consider using a factory for WiFiEndpoints, so that 1643b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // we can test the interaction between WiFi and WiFiEndpoint. (Right 1644b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // now, we're testing across multiple layers.) 1645b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 1646b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy_factory(), CreateSupplicantBSSProxy(_, _, _)); 1647b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 1648b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1649b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1650b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1651b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSRemovedDestroysBSSProxy) { 1652b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): As for BSSAddedCreatesBSSProxy, consider using a 1653b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // factory for WiFiEndpoints. 1654b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Get the pointer before we transfer ownership. 1655b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MockSupplicantBSSProxy *proxy = supplicant_bss_proxy_.get(); 1656b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy, Die()); 1657b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 16583c5040174273386868cc8dea8044d22c465885d8Paul Stewart DBus::Path bss_path( 16593c5040174273386868cc8dea8044d22c465885d8Paul Stewart MakeNewEndpointAndService(0, 0, kNetworkModeAdHoc, NULL, NULL)); 16603c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), OnEndpointRemoved(_)) 16613c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(reinterpret_cast<WiFiService *>(NULL))); 16623c5040174273386868cc8dea8044d22c465885d8Paul Stewart RemoveBSS(bss_path); 1663b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Check this now, to make sure RemoveBSS killed the proxy (rather 1664b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // than TearDown). 1665b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Mock::VerifyAndClearExpectations(proxy); 1666b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1667b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 16685c05b2920be742d518829972127172481722058dmukesh agrawalTEST_F(WiFiMainTest, FlushBSSOnResume) { 16695c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval resume_time = {1, 0}; 16705c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval scan_done_time = {6, 0}; 16715c05b2920be742d518829972127172481722058dmukesh agrawal 16725c05b2920be742d518829972127172481722058dmukesh agrawal StartWiFi(); 16735c05b2920be742d518829972127172481722058dmukesh agrawal 16745c05b2920be742d518829972127172481722058dmukesh agrawal EXPECT_CALL(time_, GetTimeMonotonic(_)) 16755c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(resume_time), Return(0))) 16765c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(scan_done_time), Return(0))); 16773c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), 16785c05b2920be742d518829972127172481722058dmukesh agrawal FlushBSS(WiFi::kMaxBSSResumeAgeSeconds + 5)); 16792f9df4eebeb6363e38834ff1e13fac5836c8eb5dmukesh agrawal OnAfterResume(); 16805c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 16815c05b2920be742d518829972127172481722058dmukesh agrawal} 16825c05b2920be742d518829972127172481722058dmukesh agrawal 1683b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerIdle) { 1684b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1685b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1686b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1687b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1688b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1689b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1690b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1691b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1692b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1693b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1694b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1695b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1696b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerScanning) { 1697b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1698b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1699b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1700b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1701b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1702b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // Should not call Scan, since we're already scanning. 1703b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // (Scanning is triggered by StartWiFi.) 1704b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1705b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1706b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1707b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1708b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1709b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1710b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerConnecting) { 1711b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1712b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 17133c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = 17143c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectingService(DBus::Path(), NULL, NULL); 1715b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1716b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1717b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1718b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1719b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1720b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1721b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1722b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1723b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1724b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerReconfigured) { 1725b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1726b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1727b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1728b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1729b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal SetScanInterval(1); 1730b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1731b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1732b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1733b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerResetOnScanDone) { 1734b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1735b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1736b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1737b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1738b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1739b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1740b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1741b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1742b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerStopOnZeroInterval) { 1743b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1744b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1745b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1746b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal SetScanInterval(0); 1747b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1748b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1749b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1750b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanOnDisconnectWithHidden) { 1751b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1752b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 17533c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 17543c5040174273386868cc8dea8044d22c465885d8Paul Stewart vector<uint8_t>kSSID(1, 'a'); 17553c5040174273386868cc8dea8044d22c465885d8Paul Stewart ByteArrays ssids; 17563c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssids.push_back(kSSID); 17573c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 17583c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(ssids)); 17593c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(HasHiddenSSID(kSSID))); 1760b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1761b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1762b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1763b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1764b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, NoScanOnDisconnectWithoutHidden) { 1765b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1766b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 17673c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 1768b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 17693c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*wifi_provider(), GetHiddenSSIDList()) 17703c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(ByteArrays())); 1771b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1772b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1773b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1774b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 17753c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul StewartTEST_F(WiFiMainTest, LinkMonitorFailure) { 17763c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart StartWiFi(); 17773c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart ScopedMockLog log; 17783c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 17793c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart MockLinkMonitor *link_monitor = new StrictMock<MockLinkMonitor>(); 17803c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart SetLinkMonitor(link_monitor); 17813c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(*link_monitor, IsGatewayFound()) 17823c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart .WillOnce(Return(false)) 17833c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart .WillRepeatedly(Return(true)); 17843c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(logging::LOG_INFO, _, 17853c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EndsWith("gateway was never found."))).Times(1); 17863c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Reassociate()).Times(0); 17873c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnLinkMonitorFailure(); 17883c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(logging::LOG_INFO, _, 17893c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EndsWith("Called Reassociate()."))).Times(1); 17903c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Reassociate()).Times(1); 17913c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnLinkMonitorFailure(); 17923c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnSupplicantVanish(); 17933c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(GetSupplicantInterfaceProxy()); 17943c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*GetSupplicantInterfaceProxy(), Reassociate()).Times(0); 17953c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 17963c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart EndsWith("Cannot reassociate."))).Times(1); 17973c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart OnLinkMonitorFailure(); 17983c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart} 17993c508e19fecd24dd8872d493c5cc6dfdfbe70f17Paul Stewart 1800cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsOpen) { 18013c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1802cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceState4WayHandshake); 1803cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 18041369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 1805cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1806cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1807cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsWPANeverConnected) { 18083c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 1809cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceState4WayHandshake); 1810cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 18111369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart Service::ConnectFailure failure; 18121369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_TRUE(SuspectCredentials(*service, &failure)); 18131369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_EQ(Service::kFailureBadPassphrase, failure); 1814cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1815cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1816cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsWPAPreviouslyConnected) { 18173c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 1818cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceState4WayHandshake); 1819cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal service->has_ever_connected_ = true; 18201369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 1821cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1822cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 18231369c2b482e97a18e8ecb63df04799696ebe39d6Paul StewartTEST_F(WiFiMainTest, SuspectCredentialsEAPInProgress) { 18243c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 18251369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart SetCurrentService(service); 18261369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart service->has_ever_connected_ = false; 18271369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 18281369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusStarted, ""); 18291369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart service->has_ever_connected_ = true; 18301369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 18311369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart service->has_ever_connected_ = false; 18321369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart Service::ConnectFailure failure; 18331369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_TRUE(SuspectCredentials(*service, &failure)); 18341369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_EQ(Service::kFailureEAPAuthentication, failure); 18351369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusCompletion, 18361369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart wpa_supplicant::kEAPParameterSuccess); 18371369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(SuspectCredentials(*service, NULL)); 18381369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart} 18391369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 18401369c2b482e97a18e8ecb63df04799696ebe39d6Paul StewartTEST_F(WiFiMainTest, SuspectCredentialsYieldFailureWPA) { 18411369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart ScopedMockLog log; 1842cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 1843cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal SetPendingService(service); 1844cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceState4WayHandshake); 1845cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 1846cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1847f2d609103916861ea8a9377ef93a72cc998bdf80Paul Stewart EXPECT_CALL(*service, SetFailure(Service::kFailureBadPassphrase)); 184856e322015a6955035bae144917190c9eccbd90c6mukesh agrawal EXPECT_CALL(*service, SetFailureSilent(_)).Times(0); 184956e322015a6955035bae144917190c9eccbd90c6mukesh agrawal EXPECT_CALL(*service, SetState(_)).Times(0); 1850cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 18511369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 18521369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EndsWith(flimflam::kErrorBadPassphrase))); 18531369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 18541369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart} 18551369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 18561369c2b482e97a18e8ecb63df04799696ebe39d6Paul StewartTEST_F(WiFiMainTest, SuspectCredentialsYieldFailureEAP) { 18571369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart ScopedMockLog log; 18581369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 18591369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart SetCurrentService(service); 18601369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusStarted, ""); 18611369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_FALSE(service->has_ever_connected()); 18621369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart 18631369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(*service, SetFailure(Service::kFailureEAPAuthentication)); 18641369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(*service, SetFailureSilent(_)).Times(0); 18651369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(*service, SetState(_)).Times(0); 18661369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 18671369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, 18681369c2b482e97a18e8ecb63df04799696ebe39d6Paul Stewart EndsWith(shill::kErrorEapAuthenticationFailed))); 1869cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1870cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1871cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1872e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// Scanning tests will use a mock of the event dispatcher instead of a real 1873e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// one. 18741aff7307d462b0160e821607058fe13831d8ef63Paul Stewartclass WiFiTimerTest : public WiFiObjectTest { 1875e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart public: 18761aff7307d462b0160e821607058fe13831d8ef63Paul Stewart WiFiTimerTest() : WiFiObjectTest(&mock_dispatcher_) {} 1877e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1878e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart protected: 1879e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart void ExpectInitialScanSequence(); 1880e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1881e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart StrictMock<MockEventDispatcher> mock_dispatcher_; 1882e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart}; 1883e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 18841aff7307d462b0160e821607058fe13831d8ef63Paul Stewartvoid WiFiTimerTest::ExpectInitialScanSequence() { 1885e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // Choose a number of iterations some multiple higher than the fast scan 1886e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // count. 1887e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart const int kScanTimes = WiFi::kNumFastScanAttempts * 4; 1888e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1889e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // Each time we call FireScanTimer() below, WiFi will post a task to actually 1890e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // run Scan() on the wpa_supplicant proxy. 1891e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)) 1892e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(kScanTimes); 1893e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart { 1894e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart InSequence seq; 1895e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // The scans immediately after the initial scan should happen at the short 1896e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // interval. If we add the initial scan (not invoked in this function) to 1897e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // the ones in the expectation below, we get WiFi::kNumFastScanAttempts at 1898e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // the fast scan interval. 1899e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1900e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 1901e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(WiFi::kNumFastScanAttempts - 1) 1902e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillRepeatedly(Return(true)); 1903e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1904e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // After this, the WiFi device should use the normal scan interval. 1905e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1906e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, GetScanInterval() * 1000)) 1907e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(kScanTimes - WiFi::kNumFastScanAttempts + 1) 1908e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillRepeatedly(Return(true)); 1909e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1910e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart for (int i = 0; i < kScanTimes; i++) { 1911e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart FireScanTimer(); 1912e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 1913e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 1914e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart} 1915e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 19161aff7307d462b0160e821607058fe13831d8ef63Paul StewartTEST_F(WiFiTimerTest, FastRescan) { 1917e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // This PostTask is a result of the call to Scan(NULL), and is meant to 1918e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // post a task to call Scan() on the wpa_supplicant proxy immediately. 1919e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)); 1920e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1921e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 1922e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillOnce(Return(true)); 1923e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart StartWiFi(); 1924e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1925e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart ExpectInitialScanSequence(); 1926e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1927e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // If we end up disconnecting, the sequence should repeat. 1928e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1929e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 1930e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillOnce(Return(true)); 1931e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart RestartFastScanAttempts(); 1932e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1933e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart ExpectInitialScanSequence(); 1934e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart} 1935e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 19361aff7307d462b0160e821607058fe13831d8ef63Paul StewartTEST_F(WiFiTimerTest, ReconnectTimer) { 19371aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)).Times(AnyNumber()); 19381aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask(_, _)).Times(AnyNumber()); 19393c5040174273386868cc8dea8044d22c465885d8Paul Stewart StartWiFi(); 19403c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetupConnectedService(DBus::Path(), NULL, NULL); 19411aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 19421aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 19431aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 19441aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(1); 19451aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 19461aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 19471aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StopReconnectTimer(); 19481aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 19491aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 19501aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(1); 19511aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 19521aff7307d462b0160e821607058fe13831d8ef63Paul Stewart Mock::VerifyAndClearExpectations(&mock_dispatcher_); 19531aff7307d462b0160e821607058fe13831d8ef63Paul Stewart GetReconnectTimeoutCallback().callback().Run(); 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 19601aff7307d462b0160e821607058fe13831d8ef63Paul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 19611aff7307d462b0160e821607058fe13831d8ef63Paul Stewart _, GetReconnectTimeoutSeconds() * 1000)).Times(0); 19621aff7307d462b0160e821607058fe13831d8ef63Paul Stewart StartReconnectTimer(); 19631aff7307d462b0160e821607058fe13831d8ef63Paul Stewart} 19641aff7307d462b0160e821607058fe13831d8ef63Paul Stewart 1965bc6e7390c4401e171ede4dc83b79b316f3e71100Paul StewartTEST_F(WiFiMainTest, EAPCertification) { 1966bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 1967bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(*service, AddEAPCertification(_, _)).Times(0); 1968bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1969bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ScopedMockLog log; 1970bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no current service."))); 1971bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart map<string, ::DBus::Variant> args; 1972bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 1973bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 1974bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1975bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart SetCurrentService(service); 1976bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no depth parameter."))); 1977bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 1978bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 1979bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1980bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart const uint32 kDepth = 123; 1981bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart args[wpa_supplicant::kInterfacePropertyDepth].writer().append_uint32(kDepth); 1982bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1983bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, 1984bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Log(logging::LOG_ERROR, _, EndsWith("no subject parameter."))); 1985bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 1986bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 1987bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1988bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart const string kSubject("subject"); 1989bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart args[wpa_supplicant::kInterfacePropertySubject].writer() 1990bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart .append_string(kSubject.c_str()); 1991bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(*service, AddEAPCertification(kSubject, kDepth)).Times(1); 1992bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 1993db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart} 1994db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 1995db0f917217979bf7547e27b47faf1b49d25c8d9cPaul StewartTEST_F(WiFiMainTest, EAPEvent) { 1996db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 1997db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(*service, SetFailure(_)).Times(0); 1998db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 1999db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ScopedMockLog log; 2000db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no current service."))); 2001db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(string(), string()); 2002db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(&log); 2003db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2004db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart SetCurrentService(service); 2005db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart const string kEAPMethod("EAP-ROCHAMBEAU"); 2006db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(logging::LOG_INFO, _, 2007db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EndsWith("accepted EAP method " + kEAPMethod))); 2008db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusAcceptProposedMethod, kEAPMethod); 2009db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2010db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(_, _, EndsWith("Completed authentication."))).Times(1); 2011db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusCompletion, 2012db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart wpa_supplicant::kEAPParameterSuccess); 2013db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2014db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(&log); 2015db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 2016db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2017db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart // An EAP failure without a previous TLS indication yields a generic failure. 2018db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 2019db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(*service, 20203c5040174273386868cc8dea8044d22c465885d8Paul Stewart DisconnectWithFailure(Service::kFailureEAPAuthentication, NULL)) 20213c5040174273386868cc8dea8044d22c465885d8Paul Stewart .Times(1); 2022db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusCompletion, 2023db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart wpa_supplicant::kEAPParameterFailure); 2024db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 2025db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2026db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart // An EAP failure with a previous TLS indication yields a specific failure. 2027db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart SetCurrentService(service); 20283c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(_, _)).Times(0); 2029db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(*service, SetFailure(_)).Times(0); 2030db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusLocalTLSAlert, string()); 2031db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 20323c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, 20333c5040174273386868cc8dea8044d22c465885d8Paul Stewart DisconnectWithFailure(Service::kFailureEAPLocalTLS, NULL)) 20343c5040174273386868cc8dea8044d22c465885d8Paul Stewart .Times(1); 2035db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusCompletion, 2036db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart wpa_supplicant::kEAPParameterFailure); 2037db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 2038db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart 2039db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart SetCurrentService(service); 20403c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, DisconnectWithFailure(_, _)).Times(0); 2041db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(*service, SetFailure(_)).Times(0); 2042db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusRemoteTLSAlert, string()); 2043db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart Mock::VerifyAndClearExpectations(service.get()); 20443c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, 20453c5040174273386868cc8dea8044d22c465885d8Paul Stewart DisconnectWithFailure(Service::kFailureEAPRemoteTLS, NULL)) 20463c5040174273386868cc8dea8044d22c465885d8Paul Stewart .Times(1); 2047db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusCompletion, 2048db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart wpa_supplicant::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); 2054db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart const string kStrangeParameter("ennui"); 2055db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _,EndsWith( 2056db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart string("Unexpected ") + 2057db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart wpa_supplicant::kEAPStatusRemoteCertificateVerification + 2058db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart " parameter: " + kStrangeParameter))); 2059db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart ReportEAPEvent(wpa_supplicant::kEAPStatusRemoteCertificateVerification, 2060db0f917217979bf7547e27b47faf1b49d25c8d9cPaul Stewart kStrangeParameter); 2061bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart} 2062bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2063c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawalTEST_F(WiFiMainTest, PendingScanDoesNotCrashAfterStop) { 2064c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // Scan is one task that should be skipped after Stop. Others are 2065c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // skipped by the same mechanism (invalidating weak pointers), so we 2066c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // don't test them individually. 2067c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // 2068c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // Note that we can't test behavior by setting expectations on the 2069c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal // supplicant_interface_proxy_, since that is destroyed when we StopWiFi(). 2070c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal StartWiFi(); 2071c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal StopWiFi(); 2072c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal dispatcher_.DispatchPendingEvents(); 2073c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal} 2074c4f368f4dfb2f2ba7727a2fd62d3e0ced05dd45emukesh agrawal 207560ceaf336297ce536201a82e350c697f1a5b546dDarin PetkovTEST_F(WiFiMainTest, VerifyPaths) { 207660ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov string path = WiFi::kSupplicantConfPath; 207760ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov TrimString(path, FilePath::kSeparators, &path); 207860ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov EXPECT_TRUE(file_util::PathExists(FilePath(SYSROOT).Append(path))); 207960ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov} 208060ceaf336297ce536201a82e350c697f1a5b546dDarin Petkov 20816d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shahstruct BSS { 20826d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah string bsspath; 20836d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah string ssid; 20846d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah string bssid; 20856d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah int16_t signal_strength; 20866d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah uint16 frequency; 20876d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah const char* mode; 20886d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah}; 20896d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 20906d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav ShahTEST_F(WiFiMainTest, GetGeolocationObjects) { 20916d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah BSS bsses[] = { 20926d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah {"bssid1", "ssid1", "00:00:00:00:00:00", 5, Metrics::kWiFiFrequency2412, 20936d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah kNetworkModeInfrastructure}, 20946d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah {"bssid2", "ssid2", "01:00:00:00:00:00", 30, Metrics::kWiFiFrequency5170, 20956d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah kNetworkModeInfrastructure}, 20966d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah // Same SSID but different BSSID is an additional geolocation object. 20976d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah {"bssid3", "ssid1", "02:00:00:00:00:00", 100, 0, 20986d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah kNetworkModeInfrastructure} 20996d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah }; 21006d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah StartWiFi(); 21016d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah vector<GeolocationInfo> objects; 21026d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah EXPECT_EQ(objects.size(), 0); 21036d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 21046d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah for (size_t i = 0; i < arraysize(bsses); ++i) { 21056d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah ReportBSS(bsses[i].bsspath, bsses[i].ssid, bsses[i].bssid, 21066d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah bsses[i].signal_strength, bsses[i].frequency, bsses[i].mode); 21076d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah objects = wifi()->GetGeolocationObjects(); 21086d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah EXPECT_EQ(objects.size(), i + 1); 21096d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 21106d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah GeolocationInfo expected_info; 21116d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah expected_info.AddField(kGeoMacAddressProperty, bsses[i].bssid); 21126d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah expected_info.AddField(kGeoSignalStrengthProperty, 21136d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah StringPrintf("%d", bsses[i].signal_strength)); 21146d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah expected_info.AddField(kGeoChannelProperty, StringPrintf( 21156d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah "%d", Metrics::WiFiFrequencyToChannel(bsses[i].frequency))); 21166d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah EXPECT_TRUE(objects[i].Equals(expected_info)); 21176d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah }; 21186d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah}; 21196d2c72dddf3dbbc6a614d4fa1a7a3d670756c01fGaurav Shah 21205581d07d765e14737d2a639d3eb42e0b42721602Paul StewartTEST_F(WiFiMainTest, SetSupplicantDebugLevel) { 21215581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart MockSupplicantProcessProxy *process_proxy = supplicant_process_proxy_.get(); 21225581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21235581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // With WiFi not yet started, nothing interesting (including a crash) should 21245581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // happen. 21255581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()).Times(0); 21265581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 21275581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21285581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21295581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // This unit test turns on WiFi debugging, so when we start WiFi, we should 21305581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // check but not set the debug level if we return the "debug" level. 21315581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21325581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelDebug)); 21335581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 21345581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart StartWiFi(); 21355581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 21365581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21375581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is toggled and wpa_supplicant reports debugging 21385581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // is set to some unmanaged level, WiFi should leave it alone. 21395581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21405581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelError)) 21415581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelError)) 21425581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelExcessive)) 21435581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelExcessive)) 21445581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelMsgDump)) 21455581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelMsgDump)) 21465581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelWarning)) 21475581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelWarning)); 21485581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 21495581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21505581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21515581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21525581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21535581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21545581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21555581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21565581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21575581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 21585581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21595581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is turned off and wpa_supplicant reports debugging 21605581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // is turned on, WiFi should turn supplicant debugging off. 21615581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21625581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelDebug)); 21635581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(wpa_supplicant::kDebugLevelInfo)) 21645581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .Times(1); 21655581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21665581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 21675581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21685581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is turned on and wpa_supplicant reports debugging 21695581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // is turned off, WiFi should turn supplicant debugging on. 21705581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21715581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelInfo)); 21725581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(wpa_supplicant::kDebugLevelDebug)) 21735581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .Times(1); 21745581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21755581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart Mock::VerifyAndClearExpectations(process_proxy); 21765581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21775581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // If WiFi debugging is already in the correct state, it should not be 21785581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // changed. 21795581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()) 21805581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelDebug)) 21815581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart .WillOnce(Return(wpa_supplicant::kDebugLevelInfo)); 21825581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 21835581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21845581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21855581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 21865581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart // After WiFi is stopped, we shouldn't be calling the proxy. 21875581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, GetDebugLevel()).Times(0); 21885581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart EXPECT_CALL(*process_proxy, SetDebugLevel(_)).Times(0); 21895581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart StopWiFi(); 21905581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(true); 21915581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart ReportWiFiDebugScopeChanged(false); 21925581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart} 21935581d07d765e14737d2a639d3eb42e0b42721602Paul Stewart 219450cb78aa736cf39ee8c7e0193a78792a9686a108Darin PetkovTEST_F(WiFiMainTest, LogSSID) { 219550cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov EXPECT_EQ("[SSID=]", WiFi::LogSSID("")); 219650cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov EXPECT_EQ("[SSID=foo\\x5b\\x09\\x5dbar]", WiFi::LogSSID("foo[\t]bar")); 219750cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov} 219850cb78aa736cf39ee8c7e0193a78792a9686a108Darin Petkov 2199853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} // namespace shill 2200