wifi_unittest.cc revision 3ab56acd3681faabdee8d09b8441aea76bf81945
18a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal// Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone// Use of this source code is governed by a BSD-style license that can be 3853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone// found in the LICENSE file. 4853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 5853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/wifi.h" 6853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 7f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include <netinet/ether.h> 8f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include <linux/if.h> 95c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include <sys/socket.h> 105c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include <linux/netlink.h> // Needs typedefs from sys/socket.h. 11f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 12853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <map> 13a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include <set> 14853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <string> 15853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <vector> 16853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 177ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal#include <base/memory/ref_counted.h> 18dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include <base/memory/scoped_ptr.h> 19a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include <base/stringprintf.h> 203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_number_conversions.h> 213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include <base/string_util.h> 22853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include <chromeos/dbus/service_constants.h> 231830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal#include <dbus-c++/dbus.h> 247156c923c9a9d2240ea9c62045337ac8c8f89e57Chris Masone#include <gmock/gmock.h> 252ae797d040b7261a5619c750e07037566bcb542bChris Masone#include <gtest/gtest.h> 26853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 27853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/dbus_adaptor.h" 2826b327e559583d5a84b7e1605c29a4dcbc87d2a9Paul Stewart#include "shill/event_dispatcher.h" 298ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal#include "shill/ieee80211.h" 307a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal#include "shill/key_value_store.h" 31853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/manager.h" 32853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/mock_device.h" 33c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal#include "shill/mock_device_info.h" 34f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include "shill/mock_dhcp_config.h" 35f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal#include "shill/mock_dhcp_provider.h" 36e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart#include "shill/mock_event_dispatcher.h" 37cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal#include "shill/mock_log.h" 382ae797d040b7261a5619c750e07037566bcb542bChris Masone#include "shill/mock_manager.h" 393426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le#include "shill/mock_metrics.h" 40ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain#include "shill/mock_power_manager.h" 41ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain#include "shill/mock_power_manager_proxy.h" 4210ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart#include "shill/mock_profile.h" 435c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal#include "shill/mock_rtnl_handler.h" 44a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart#include "shill/mock_store.h" 45b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal#include "shill/mock_supplicant_bss_proxy.h" 463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_interface_proxy.h" 473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/mock_supplicant_process_proxy.h" 485c05b2920be742d518829972127172481722058dmukesh agrawal#include "shill/mock_time.h" 497ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal#include "shill/mock_wifi_service.h" 50dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal#include "shill/nice_mock_control.h" 51853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone#include "shill/property_store_unittest.h" 523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/proxy_factory.h" 533ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal#include "shill/scope_logger.h" 543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal#include "shill/wifi_endpoint.h" 553239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal#include "shill/wifi_service.h" 56ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart#include "shill/wpa_supplicant.h" 57853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 58ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 59853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::map; 60a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing std::set; 61853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::string; 62853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing std::vector; 63853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::_; 643195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::AnyNumber; 653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::DefaultValue; 66a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::DoAll; 67cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalusing ::testing::EndsWith; 683195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::InSequence; 69b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalusing ::testing::Invoke; 707ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalusing ::testing::Mock; 71dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawalusing ::testing::NiceMock; 72853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Return; 73ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morainusing ::testing::SaveArg; 74a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::SetArgumentPointee; 75a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrEq; 76a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewartusing ::testing::StrictMock; 77853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masoneusing ::testing::Test; 783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalusing ::testing::Throw; 798ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalusing ::testing::Values; 80853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 81853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masonenamespace shill { 82853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 833195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalclass WiFiPropertyTest : public PropertyStoreTest { 84853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone public: 853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiPropertyTest() 863426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le : device_(new WiFi(control_interface(), 873426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le NULL, NULL, NULL, "wifi", "", 0)) { 88853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone } 893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual ~WiFiPropertyTest() {} 90853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 91853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone protected: 928abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFiRefPtr device_; 93853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone}; 94853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiPropertyTest, Contains) { 96de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_TRUE(device_->store().Contains(flimflam::kNameProperty)); 97de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal EXPECT_FALSE(device_->store().Contains("")); 98853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} 99853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1006bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawalTEST_F(WiFiPropertyTest, SetProperty) { 101a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 102a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1036bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 104de29fa8d95092f28548b5e4537a6c61e21ae760bmukesh agrawal device_->mutable_store(), 105a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone flimflam::kBgscanSignalThresholdProperty, 106a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone PropertyStoreTest::kInt32V, 107a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone &error)); 108a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 109a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 110a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1116bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty(device_->mutable_store(), 1126bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanIntervalProperty, 1136bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kUint16V, 1146bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 115a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 116853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone // Ensure that an attempt to write a R/O property returns InvalidArgs error. 117a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone { 118a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone ::DBus::Error error; 1196bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty(device_->mutable_store(), 1206bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal flimflam::kScanningProperty, 1216bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal PropertyStoreTest::kBoolV, 1226bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal &error)); 1239d779936d8f8c2d74b30883e2a2622c4207fe797Chris Masone EXPECT_EQ(invalid_args(), error.name()); 124a8a2c25df27d77f278511769f0c9029b03dff053Chris Masone } 125853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone 1264d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1274d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1286bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1294d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1304d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1314d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant( 1324d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal wpa_supplicant::kNetworkBgscanMethodSimple), 1334d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1344d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1354d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1364d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal { 1374d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ::DBus::Error error; 1386bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_FALSE(DBusAdaptor::SetProperty( 1394d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal device_->mutable_store(), 1404d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal flimflam::kBgscanMethodProperty, 1414d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal DBusAdaptor::StringToVariant("not a real scan method"), 1424d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal &error)); 1434d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal } 1444d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 1454d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1468abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawalTEST_F(WiFiPropertyTest, ClearDerivedProperty) { 1478abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_NE(wpa_supplicant::kNetworkBgscanMethodLearn, 1488abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal WiFi::kDefaultBgscanMethod); 1498abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(WiFi::kDefaultBgscanMethod, device_->bgscan_method_); 1508abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1518abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal ::DBus::Error error; 1526bb9e7c2c068fc15333babea8e66f02332683e33mukesh agrawal EXPECT_TRUE(DBusAdaptor::SetProperty( 1538abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), 1548abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal flimflam::kBgscanMethodProperty, 1558abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal DBusAdaptor::StringToVariant( 1568abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal wpa_supplicant::kNetworkBgscanMethodLearn), 1578abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal &error)); 1588abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(wpa_supplicant::kNetworkBgscanMethodLearn, device_->bgscan_method_); 1598abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 1608abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_TRUE(DBusAdaptor::ClearProperty( 1618abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal device_->mutable_store(), flimflam::kBgscanMethodProperty, &error)); 1628abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal EXPECT_EQ(WiFi::kDefaultBgscanMethod, device_->bgscan_method_); 1638abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal} 1648abd2f67616c3d138346781a49a40d4ae2bc7019mukesh agrawal 165e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartclass WiFiObjectTest : public ::testing::TestWithParam<string> { 1663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 167e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiObjectTest(EventDispatcher *dispatcher) 168e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart : event_dispatcher_(dispatcher), 169e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart manager_(&control_interface_, NULL, &metrics_, &glib_), 170e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart device_info_(&control_interface_, dispatcher, &metrics_, &manager_), 171626719f89881a949d8b5a8fa808beb924496489fChris Masone wifi_(new WiFi(&control_interface_, 172e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart dispatcher, 1733426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 174626719f89881a949d8b5a8fa808beb924496489fChris Masone &manager_, 175626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceName, 176626719f89881a949d8b5a8fa808beb924496489fChris Masone kDeviceAddress, 177626719f89881a949d8b5a8fa808beb924496489fChris Masone 0)), 178dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_process_proxy_(new NiceMock<MockSupplicantProcessProxy>()), 179dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal supplicant_interface_proxy_( 180dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal new NiceMock<MockSupplicantInterfaceProxy>(wifi_)), 181b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal supplicant_bss_proxy_( 182b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal new NiceMock<MockSupplicantBSSProxy>()), 183f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal dhcp_config_(new MockDHCPConfig(&control_interface_, 184d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart kDeviceName)), 185ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain proxy_factory_(this), 1863e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_manager_(new MockPowerManager(&proxy_factory_)) { 1873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ::testing::DefaultValue< ::DBus::Path>::Set("/default/path"); 1884eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal // Except for WiFiServices created via WiFi::GetService, we expect 1894eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal // that any WiFiService has been registered with the Manager. So 1904eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal // default Manager.HasService to true, to make the common case 1914eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal // easy. 1924eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal ON_CALL(manager_, HasService(_)). 1934eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal WillByDefault(Return(true)); 194c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 195d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart ON_CALL(dhcp_provider_, CreateConfig(_, _, _, _)). 196c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(dhcp_config_)); 197c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ON_CALL(*dhcp_config_.get(), RequestIP()). 198c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(true)); 199ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 200ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain // |manager_| takes ownership of |power_manager_|. 201ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain manager_.set_power_manager(power_manager_); 2025c05b2920be742d518829972127172481722058dmukesh agrawal 2035c05b2920be742d518829972127172481722058dmukesh agrawal wifi_->time_ = &time_; 2043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2055c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2065c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void SetUp() { 2073ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal // EnableScopes... so that we can EXPECT_CALL for scoped log messages. 2083ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal ScopeLogger::GetInstance()->EnableScopesByName("wifi"); 209ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = &proxy_factory_; 2105c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal static_cast<Device *>(wifi_)->rtnl_handler_ = &rtnl_handler_; 2115c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(&dhcp_provider_); 212c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ON_CALL(manager_, device_info()). 213c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WillByDefault(Return(&device_info_)); 214b9c00597eb1f6d2560f7e88cb0d1f627228840d4Chris Masone EXPECT_CALL(manager_, DeregisterService(_)).Times(AnyNumber()); 215b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 2165c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal } 2175c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 2185c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal virtual void TearDown() { 219d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 220910011207d66e14bf753d2783e131e7558126430Gary Morain EXPECT_CALL(*power_manager_, RemoveStateChangeCallback(wifi_->UniqueName())) 221910011207d66e14bf753d2783e131e7558126430Gary Morain .Times(AnyNumber()); 2229a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->SelectService(NULL); 223b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal if (supplicant_bss_proxy_.get()) { 224b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()); 225b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 226ab565bb6f148849fc0ceb12529ff93acfbbed71fDarin Petkov wifi_->proxy_factory_ = NULL; 2273195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // must Stop WiFi instance, to clear its list of services. 2283195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // otherwise, the WiFi instance will not be deleted. (because 2293195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // services reference a WiFi instance, creating a cycle.) 2309a24553461df7036755060423f90804011612249Eric Shienbrood wifi_->Stop(NULL, ResultCallback()); 2315c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal wifi_->set_dhcp_provider(NULL); 2323ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal // Reset scope logging, to avoid interfering with other tests. 2333ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal ScopeLogger::GetInstance()->EnableScopesByName("-wifi"); 234f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 235f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal 2363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 2377ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal typedef scoped_refptr<MockWiFiService> MockWiFiServiceRefPtr; 2387ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 2393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal class TestProxyFactory : public ProxyFactory { 2403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal public: 241e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart explicit TestProxyFactory(WiFiObjectTest *test); 2423195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantProcessProxyInterface *CreateSupplicantProcessProxy( 2441830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_path*/, const char */*dbus_addr*/) { 245dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_process_proxy_.release(); 2463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 2483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal virtual SupplicantInterfaceProxyInterface *CreateSupplicantInterfaceProxy( 2491830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const WiFiRefPtr &/*wifi*/, 2501830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const DBus::Path &/*object_path*/, 2511830fa1f2e8691073f4d07b0883f059a290a9cc2mukesh agrawal const char */*dbus_addr*/) { 252dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal return test_->supplicant_interface_proxy_.release(); 2533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 255b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MOCK_METHOD3(CreateSupplicantBSSProxy, 256b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *( 257b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint *wifi_endpoint, 258b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &object_path, 259b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char *dbus_addr)); 260b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 261ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain virtual PowerManagerProxyInterface *CreatePowerManagerProxy( 262ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain PowerManagerProxyDelegate */*delegate*/) { 263ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain return new MockPowerManagerProxy(); 264ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain } 265ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 2663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 267b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal SupplicantBSSProxyInterface *CreateSupplicantBSSProxyInternal( 268b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal WiFiEndpoint */*wifi_endpoint*/, 269b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const DBus::Path &/*object_path*/, 270b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal const char */*dbus_addr*/) { 271b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return test_->supplicant_bss_proxy_.release(); 272b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 273b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 274e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiObjectTest *test_; 2753195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal }; 2763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 277b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void CancelScanTimer() { 278b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->scan_timer_callback_.Cancel(); 279b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 2801590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr CreateServiceForEndpoint(const WiFiEndpoint &endpoint) { 2811590839e44a0e922d4763003a35dbd493509b705mukesh agrawal bool hidden_ssid = false; 2821590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->CreateServiceForEndpoint(endpoint, hidden_ssid); 2831590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 284b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void FireScanTimer() { 285b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->ScanTimerHandler(); 286b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 2871590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetCurrentService() { 2881590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->current_service_; 2891590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 290bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart void SetCurrentService(const WiFiServiceRefPtr &service) { 291bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart wifi_->current_service_ = service; 292bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart } 2933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const WiFi::EndpointMap &GetEndpointMap() { 294165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->endpoint_by_rpcid_; 2953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 2961590839e44a0e922d4763003a35dbd493509b705mukesh agrawal const WiFiServiceRefPtr &GetPendingService() { 2971590839e44a0e922d4763003a35dbd493509b705mukesh agrawal return wifi_->pending_service_; 2981590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 299b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal const base::CancelableClosure &GetScanTimer() { 300b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal return wifi_->scan_timer_callback_; 301b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 302165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal const vector<WiFiServiceRefPtr> &GetServices() { 303165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal return wifi_->services_; 3043195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3053195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // note: the tests need the proxies referenced by WiFi (not the 306e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // proxies instantiated by WiFiObjectTest), to ensure that WiFi 3073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // sets up its proxies correctly. 3083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal SupplicantProcessProxyInterface *GetSupplicantProcessProxy() { 3093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal return wifi_->supplicant_process_proxy_.get(); 3103195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3118a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal MockSupplicantInterfaceProxy *GetSupplicantInterfaceProxy() { 3128a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal return dynamic_cast<MockSupplicantInterfaceProxy *>( 3138a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal wifi_->supplicant_interface_proxy_.get()); 3143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3157ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal const string &GetSupplicantState() { 3167ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return wifi_->supplicant_state_; 3177ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 3187ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void InitiateConnect(WiFiServiceRefPtr service) { 3196e277774580c52073c919c4cbebedae27861d845mukesh agrawal map<string, ::DBus::Variant> params; 3206e277774580c52073c919c4cbebedae27861d845mukesh agrawal wifi_->ConnectTo(service, params); 3213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3220ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal void InitiateDisconnect(WiFiServiceRefPtr service) { 3230ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal wifi_->DisconnectFrom(service); 3240ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal } 3251590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr MakeEndpoint(const string &ssid, const string &bssid) { 326e1d90e9f688406d47a1453eeac51b7faaebf9908mukesh agrawal return WiFiEndpoint::MakeOpenEndpoint( 327e1d90e9f688406d47a1453eeac51b7faaebf9908mukesh agrawal &proxy_factory_, NULL, ssid, bssid, 0, 0); 3281590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 329cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr MakeMockService(const std::string &security) { 3307ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal vector<uint8_t> ssid(1, 'a'); 3317ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal return new MockWiFiService( 3327ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &control_interface_, 333e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart event_dispatcher_, 3343426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 3357ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal &manager_, 3367ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_, 3377ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ssid, 3387ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal flimflam::kModeManaged, 339cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal security, 3407ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal false); 3417ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 342261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal void RemoveBSS(const ::DBus::Path &bss_path); 3433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportBSS(const ::DBus::Path &bss_path, 3443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 3453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 3463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 347e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 3483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode); 34966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart void ClearCachedCredentials() { 35066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart wifi_->ClearCachedCredentials(); 35166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart } 352c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal void ReportIPConfigComplete() { 35379d74c9bdb654be48765c1e7aa416126ffd2ae5eDarin Petkov wifi_->OnIPConfigUpdated(dhcp_config_, true); 354c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal } 355f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal void ReportLinkUp() { 356f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi_->LinkEvent(IFF_LOWER_UP, IFF_LOWER_UP); 357f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal } 3583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void ReportScanDone() { 359dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal wifi_->ScanDoneTask(); 3603195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3611590839e44a0e922d4763003a35dbd493509b705mukesh agrawal void ReportCurrentBSSChanged(const string &new_bss) { 3621590839e44a0e922d4763003a35dbd493509b705mukesh agrawal wifi_->CurrentBSSChanged(new_bss); 3631590839e44a0e922d4763003a35dbd493509b705mukesh agrawal } 3647ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal void ReportStateChanged(const string &new_state) { 3657ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal wifi_->StateChanged(new_state); 3667ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal } 367cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal void SetPendingService(const WiFiServiceRefPtr &service) { 368cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal wifi_->pending_service_ = service; 369cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal } 370b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal void SetScanInterval(uint16_t interval_seconds) { 371b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetScanInterval(interval_seconds, NULL); 372b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal } 373e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart uint16_t GetScanInterval() { 374e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart return wifi_->GetScanInterval(NULL); 375e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 3763195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StartWiFi() { 377ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*power_manager_, AddStateChangeCallback(wifi_->UniqueName(), _)) 378ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain .WillOnce(SaveArg<1>(&power_state_callback_)); 379b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetEnabled(true); // Start(NULL, ResultCallback()); 3803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 3813195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal void StopWiFi() { 382910011207d66e14bf753d2783e131e7558126430Gary Morain EXPECT_CALL(*power_manager_, 383910011207d66e14bf753d2783e131e7558126430Gary Morain RemoveStateChangeCallback(wifi_->UniqueName())); 384b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal wifi_->SetEnabled(false); // Stop(NULL, ResultCallback()); 3853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 386cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal WiFiServiceRefPtr GetOpenService(const char *service_type, 387cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal const char *ssid, 388cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal const char *mode, 389cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal Error *result) { 390cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal return GetServiceInner(service_type, ssid, mode, NULL, NULL, false, result); 3917a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal } 392cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal WiFiServiceRefPtr GetService(const char *service_type, 393cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal const char *ssid, 394cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal const char *mode, 395cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal const char *security, 396cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal const char *passphrase, 397cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal Error *result) { 398cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal return GetServiceInner(service_type, ssid, mode, security, passphrase, 399cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal false, result); 400ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 401ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart WiFiServiceRefPtr GetServiceInner(const char *service_type, 402ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *ssid, 403ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *mode, 404ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *security, 405ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const char *passphrase, 406a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart bool allow_hidden, 407ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error *result) { 4087a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal map<string, ::DBus::Variant> args; 4097a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // in general, we want to avoid D-Bus specific code for any RPCs 4107a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // that come in via adaptors. we make an exception here, because 4117a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // calls to GetWifiService are rerouted from the Manager object to 4127a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal // the Wifi class. 4137a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (service_type != NULL) 4147a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kTypeProperty].writer().append_string(service_type); 4157a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (ssid != NULL) 4167a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kSSIDProperty].writer().append_string(ssid); 4177a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (mode != NULL) 4187a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kModeProperty].writer().append_string(mode); 4197a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (security != NULL) 4207a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kSecurityProperty].writer().append_string(security); 4217a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal if (passphrase != NULL) 4227a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal args[flimflam::kPassphraseProperty].writer().append_string(passphrase); 423a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart if (!allow_hidden) 424a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart args[flimflam::kWifiHiddenSsid].writer().append_bool(false); 4257a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 426ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart Error e; 427ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart KeyValueStore args_kv; 4287a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal DBusAdaptor::ArgsToKeyValueStore(args, &args_kv, &e); 429ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return wifi_->GetService(args_kv, result); 4307a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal } 431cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart 432cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart WiFiServiceRefPtr GetServiceWithKeyValues(const KeyValueStore &args, 433cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart Error *result) { 434cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart return wifi_->GetService(args, result); 435cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart } 436cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart 437a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr FindService(const vector<uint8_t> &ssid, 438a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string &mode, 439a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string &security) { 440a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart return wifi_->FindService(ssid, mode, security); 441a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 442a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart bool LoadHiddenServices(StoreInterface *storage) { 443a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart return wifi_->LoadHiddenServices(storage); 444a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 445a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart void SetupHiddenStorage(MockStore *storage, const string &ssid, string *id) { 446a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const string hex_ssid = base::HexEncode(ssid.data(), ssid.size()); 447a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart *id = StringToLowerASCII(base::StringPrintf("%s_%s_%s_%s_%s", 448a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kTypeWifi, 449a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart kDeviceAddress, 450a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart hex_ssid.c_str(), 451a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, 452a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityNone)); 453a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart const char *groups[] = { id->c_str() }; 454a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetGroupsWithKey(flimflam::kWifiHiddenSsid)) 455a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(Return(set<string>(groups, groups + 1))); 456a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetBool(StrEq(*id), flimflam::kWifiHiddenSsid, _)) 457a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(DoAll(SetArgumentPointee<2>(true), Return(true))); 458a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*storage, GetString(StrEq(*id), flimflam::kSSIDProperty, _)) 459a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillRepeatedly(DoAll(SetArgumentPointee<2>(hex_ssid), Return(true))); 460a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 461bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart void ReportCertification(const map<string, ::DBus::Variant> &properties) { 462bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart wifi_->CertificationTask(properties); 463bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart } 46410ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 465e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart void RestartFastScanAttempts() { 466e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart wifi_->RestartFastScanAttempts(); 467e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 468e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 46910ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart NiceMockControl *control_interface() { 47010ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart return &control_interface_; 47110ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart } 47210ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart 4733239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal MockManager *manager() { 4743239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return &manager_; 4753239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 476d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 477d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDeviceInfo *device_info() { 478d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &device_info_; 479d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 480d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 481d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain MockDHCPProvider *dhcp_provider() { 482d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain return &dhcp_provider_; 483d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain } 484d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain 4853e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood const PowerManager::PowerStateCallback &power_state_callback() const { 486ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain return power_state_callback_; 487ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain } 488ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 4893239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal const WiFiConstRefPtr wifi() const { 4903239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal return wifi_; 4913239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal } 4923239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal 493b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal TestProxyFactory *proxy_factory() { 494b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal return &proxy_factory_; 495b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal } 496b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 497e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EventDispatcher *event_dispatcher_; 4985c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal NiceMock<MockRTNLHandler> rtnl_handler_; 4995c05b2920be742d518829972127172481722058dmukesh agrawal MockTime time_; 5003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 502dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal NiceMockControl control_interface_; 5033426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le MockMetrics metrics_; 504f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockGLib glib_; 5052ae797d040b7261a5619c750e07037566bcb542bChris Masone MockManager manager_; 506c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal MockDeviceInfo device_info_; 5073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal WiFiRefPtr wifi_; 5083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // protected fields interspersed between private fields, due to 5103195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal // initialization order 5113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal protected: 5123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kDeviceName[]; 513626719f89881a949d8b5a8fa808beb924496489fChris Masone static const char kDeviceAddress[]; 5143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeAdHoc[]; 5153195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal static const char kNetworkModeInfrastructure[]; 5163195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 517dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantProcessProxy> supplicant_process_proxy_; 518dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal scoped_ptr<MockSupplicantInterfaceProxy> supplicant_interface_proxy_; 519b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal scoped_ptr<MockSupplicantBSSProxy> supplicant_bss_proxy_; 520f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal MockDHCPProvider dhcp_provider_; 521f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal scoped_refptr<MockDHCPConfig> dhcp_config_; 5223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal private: 5243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal TestProxyFactory proxy_factory_; 525ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain MockPowerManager *power_manager_; 5263e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood PowerManager::PowerStateCallback power_state_callback_; 5273195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal}; 5283195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 529e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kDeviceName[] = "wlan0"; 530e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kDeviceAddress[] = "000102030405"; 531e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kNetworkModeAdHoc[] = "ad-hoc"; 532e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartconst char WiFiObjectTest::kNetworkModeInfrastructure[] = "infrastructure"; 5333195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 534e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartvoid WiFiObjectTest::RemoveBSS(const ::DBus::Path &bss_path) { 535b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSRemovedTask(bss_path); 536261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 537261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 538e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartvoid WiFiObjectTest::ReportBSS(const ::DBus::Path &bss_path, 5393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &ssid, 5403195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const string &bssid, 5413195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal int16_t signal_strength, 542e41a72d0737488d561a4158019409d5785dad61bThieu Le uint16 frequency, 5433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal const char *mode) { 5443195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal map<string, ::DBus::Variant> bss_properties; 5453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5463195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 5473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["SSID"].writer()); 5483195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << vector<uint8_t>(ssid.begin(), ssid.end()); 5493195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 5503195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 5513195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal string bssid_nosep; 5523195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal vector<uint8_t> bssid_bytes; 5533195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal RemoveChars(bssid, ":", &bssid_nosep); 5543195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal base::HexStringToBytes(bssid_nosep, &bssid_bytes); 5553195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5563195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::MessageIter writer(bss_properties["BSSID"].writer()); 5573195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal writer << bssid_bytes; 5583195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 559e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertySignal].writer(). 560e41a72d0737488d561a4158019409d5785dad61bThieu Le append_int16(signal_strength); 561e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertyFrequency].writer(). 562e41a72d0737488d561a4158019409d5785dad61bThieu Le append_uint16(frequency); 563e41a72d0737488d561a4158019409d5785dad61bThieu Le bss_properties[wpa_supplicant::kBSSPropertyMode].writer().append_string(mode); 564b4bc57dadc64612aaec2a7eab3b72b7d49d42d0bmukesh agrawal wifi_->BSSAddedTask(bss_path, bss_properties); 5653195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5663195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 567e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul StewartWiFiObjectTest::TestProxyFactory::TestProxyFactory(WiFiObjectTest *test) 568b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal : test_(test) { 569b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*this, CreateSupplicantBSSProxy(_, _, _)).Times(AnyNumber()); 570b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ON_CALL(*this, CreateSupplicantBSSProxy(_, _, _)) 571b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal .WillByDefault( 572b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Invoke(this, (&TestProxyFactory::CreateSupplicantBSSProxyInternal))); 573b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 574b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 575e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// Most of our tests involve using a real EventDispatcher object. 576e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartclass WiFiMainTest : public WiFiObjectTest { 577e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart public: 578e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiMainTest() : WiFiObjectTest(&dispatcher_) {} 579e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 580e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart protected: 581e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EventDispatcher dispatcher_; 582e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart}; 583e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 5843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ProxiesSetUpDuringStart) { 5853195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantProcessProxy() == NULL); 5863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_TRUE(GetSupplicantInterfaceProxy() == NULL); 5873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5883195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 5893195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantProcessProxy() == NULL); 5903195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_FALSE(GetSupplicantInterfaceProxy() == NULL); 5913195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 5923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 5933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, CleanStart) { 5943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 5953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 5963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 5973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 5983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 5993195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceUnknown", 6003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 6013195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 602b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 6033195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 6043239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 605b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 6063195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 6073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 6083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Restart) { 6093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)) 6103195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .Times(AnyNumber()) 6113195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillRepeatedly(Throw( 6123195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Error( 6133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "fi.w1.wpa_supplicant1.InterfaceExists", 6143195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal "test thew fi.w1.wpa_supplicant1.InterfaceExists"))); 6153195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)); 6163195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 6173195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 6183239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal dispatcher_.DispatchPendingEvents(); 6193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 6203195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 6213195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, StartClearsState) { 6223195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, RemoveAllNetworks()); 6233195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal EXPECT_CALL(*supplicant_interface_proxy_, FlushBSS(_)); 6243195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 6253195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 6263195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 627ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary MorainTEST_F(WiFiMainTest, PowerChangeToResumeStartsScanWhenIdle) { 628ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 629ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 630ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 631ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Mock::VerifyAndClearExpectations(&supplicant_interface_proxy_); 6325c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 6333e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood ASSERT_FALSE(power_state_callback().is_null()); 634ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 635ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 6363e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kOn); 637ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 638ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 639ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 640ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary MorainTEST_F(WiFiMainTest, PowerChangeToSuspendDoesNotStartScan) { 641ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 642ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 643ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 644ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Mock::VerifyAndClearExpectations(&supplicant_interface_proxy_); 6453e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood ASSERT_FALSE(power_state_callback().is_null()); 646ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_TRUE(wifi()->IsIdle()); 647ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 6483e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kStandby); 649ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 6503e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kMem); 651ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 6523e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kDisk); 653ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 654ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 655ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 656ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary MorainTEST_F(WiFiMainTest, PowerChangeDoesNotStartScanWhenNotIdle) { 657ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*supplicant_interface_proxy_, Scan(_)); 658ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain StartWiFi(); 659ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 660ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 661ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 662ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Error error; 6633ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal ScopedMockLog log; 664ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain service->AddEndpoint(ap); 665ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain service->AutoConnect(); 666ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_FALSE(wifi()->IsIdle()); 667ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 668ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain Mock::VerifyAndClearExpectations(&supplicant_interface_proxy_); 6693e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood ASSERT_FALSE(power_state_callback().is_null()); 670ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain ASSERT_FALSE(wifi()->IsIdle()); 6713ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 6723ab56acd3681faabdee8d09b8441aea76bf81945mukesh agrawal EXPECT_CALL(log, Log(_, _, EndsWith("already scanning or connected."))); 673ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 6743e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kOn); 675ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain dispatcher_.DispatchPendingEvents(); 676ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain} 677ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain 6783195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResults) { 679d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 6803195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 681e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 6823195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 683e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 6843195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 685e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 6863195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 687e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss3", "ssid3", "00:00:00:00:00:03", 3, 0, kNetworkModeInfrastructure); 688e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency = 2412; 689e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss4", "ssid4", "00:00:00:00:00:04", 4, frequency, 690e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeAdHoc); 691e41a72d0737488d561a4158019409d5785dad61bThieu Le 692e41a72d0737488d561a4158019409d5785dad61bThieu Le const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 693e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(5, endpoints_by_rpcid.size()); 694e41a72d0737488d561a4158019409d5785dad61bThieu Le 695e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFi::EndpointMap::const_iterator i; 696e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFiEndpointRefPtr endpoint; 697e41a72d0737488d561a4158019409d5785dad61bThieu Le for (i = endpoints_by_rpcid.begin(); 698e41a72d0737488d561a4158019409d5785dad61bThieu Le i != endpoints_by_rpcid.end(); 699e41a72d0737488d561a4158019409d5785dad61bThieu Le ++i) { 700e41a72d0737488d561a4158019409d5785dad61bThieu Le if (i->second->bssid_string() == "00:00:00:00:00:04") 701e41a72d0737488d561a4158019409d5785dad61bThieu Le break; 702e41a72d0737488d561a4158019409d5785dad61bThieu Le } 703e41a72d0737488d561a4158019409d5785dad61bThieu Le ASSERT_TRUE(i != endpoints_by_rpcid.end()); 704e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(4, i->second->signal_strength()); 705e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency, i->second->frequency()); 706e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ("adhoc", i->second->network_mode()); 7073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanResultsWithUpdates) { 710d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 711d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 712d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 7133195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 714e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 7153195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 716e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 7173195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 718e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 7193195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 720e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 3, 0, kNetworkModeInfrastructure); 721e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 4, 0, kNetworkModeAdHoc); 722165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 723165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal const WiFi::EndpointMap &endpoints_by_rpcid = GetEndpointMap(); 724165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(3, endpoints_by_rpcid.size()); 725165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 726165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFi::EndpointMap::const_iterator i; 727165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFiEndpointRefPtr endpoint; 728165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal for (i = endpoints_by_rpcid.begin(); 729165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal i != endpoints_by_rpcid.end(); 730165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ++i) { 731165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal if (i->second->bssid_string() == "00:00:00:00:00:00") 732165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal break; 733165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal } 734165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ASSERT_TRUE(i != endpoints_by_rpcid.end()); 735165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(4, i->second->signal_strength()); 7363195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7373195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 7383195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, ScanCompleted) { 7393195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 740261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 741261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(3); 742e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 7433195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 744e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss1", "ssid1", "00:00:00:00:00:01", 1, 0, kNetworkModeInfrastructure); 7453195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportBSS( 746e41a72d0737488d561a4158019409d5785dad61bThieu Le "bss2", "ssid2", "00:00:00:00:00:02", 2, 0, kNetworkModeInfrastructure); 7473195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 748165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(3, GetServices().size()); 749b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 750e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with SSIDs that start with NULL should be filtered. 751e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss3", string(1, 0), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 752e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(3, GetEndpointMap().size()); 753b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal EXPECT_EQ(3, GetServices().size()); 754b385761b76687f8aa08ad8b0cbd70c7fa6c6c50emukesh agrawal 755e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // BSSes with empty SSIDs should be filtered. 756e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss3", string(), "00:00:00:00:00:03", 3, 0, kNetworkModeAdHoc); 757e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(3, GetEndpointMap().size()); 758e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(3, GetServices().size()); 759165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 760165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 761165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingTogether) { 762165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 763261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 764261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal InSequence s; 765261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)); 766d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)); 767261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)); 768e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 769e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 770165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 771165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(1, GetServices().size()); 772165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 773165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 774165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingDifferentSSID) { 775165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 776261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 777261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(2); 778e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid1", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 779e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid2", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 780165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 781165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(2, GetServices().size()); 782165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal} 783165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal 784165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawalTEST_F(WiFiMainTest, EndpointGroupingDifferentMode) { 785165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal StartWiFi(); 786261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 787261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal .Times(2); 788e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 789e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid", "00:00:00:00:00:01", 0, 0, 790e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 791165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal ReportScanDone(); 792165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal EXPECT_EQ(2, GetServices().size()); 7933195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 7943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 795261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonExistentBSSRemoved) { 796261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal // Removal of non-existent BSS should not cause a crash. 797261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 798261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 799261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(0, GetServices().size()); 800261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 801261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 802e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawalTEST_F(WiFiMainTest, BSSWithEmptySSIDRemoved) { 803e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // Removal of BSS with an empty SSID should not cause a crash. 804e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss", string(), "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 805e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal StartWiFi(); 806e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal RemoveBSS("bss"); 807e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(0, GetServices().size()); 808e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal} 809e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal 810e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawalTEST_F(WiFiMainTest, BSSWithNullSSIDRemoved) { 811e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal // Removal of BSS with a NULL SSID should not cause a crash. 812e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal ReportBSS("bss", string(1, 0), "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 813e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal StartWiFi(); 814e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal RemoveBSS("bss"); 815e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal EXPECT_EQ(0, GetServices().size()); 816e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal} 817e9adda1335ce052bcd3680afd5b5811d732a5fd3mukesh agrawal 818261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemoved) { 819d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 820261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 821e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 822261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportScanDone(); 823261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 824261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 825261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 8268a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 827261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 8288a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(GetServices().empty()); 8298a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 8308a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8318a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemovedWhileConnected) { 832d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 8338a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 834e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 8358a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportScanDone(); 8368a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportCurrentBSSChanged("bss0"); 8378a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8388a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 8398a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 8408a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal RemoveBSS("bss0"); 8418a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(GetServices().empty()); 8428a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 8438a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8448a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, LoneBSSRemovedWhileConnectedToHidden) { 845d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 846d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 8478a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 8488a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8498a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal Error e; 8508a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service = 8518a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal GetServiceInner(flimflam::kTypeWifi, "ssid", flimflam::kModeManaged, 8528a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal NULL, NULL, true, &e); 8538a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(1, GetServices().size()); 8548a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 855e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss", "ssid", "00:00:00:00:00:01", 0, 0, 856e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 8578a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportScanDone(); 8588a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal ReportCurrentBSSChanged("bss"); 859261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 8608a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 8618a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 8628a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal RemoveBSS("bss"); 8638a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(1, GetServices().size()); 8648a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal // Verify expectations now, because WiFi may call UpdateService when 8658a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal // WiFi is Stop()-ed (during TearDown()). 8668a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal Mock::VerifyAndClearExpectations(manager()); 867d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), DeregisterService(_)).Times(AnyNumber()); 868261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 869261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 870261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawalTEST_F(WiFiMainTest, NonSolitaryBSSRemoved) { 871d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)); 872d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)); 873d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)); 874261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal StartWiFi(); 875e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 876e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 877261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal ReportScanDone(); 878261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 879261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 880261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 881261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)); 882261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal RemoveBSS("bss0"); 883261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_TRUE(GetServices().front()->IsVisible()); 884261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal EXPECT_EQ(1, GetServices().size()); 885261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal} 886261daca461a38a700db80b1fee0fb1f50941aaf9mukesh agrawal 8873195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawalTEST_F(WiFiMainTest, Connect) { 888d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 889dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 890dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal *supplicant_interface_proxy_; 891dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal 8923195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal StartWiFi(); 893e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 8943195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal ReportScanDone(); 8953195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 8963195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal { 8973195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal InSequence s; 8983195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal DBus::Path fake_path("/fake/path"); 899165e614021915fa551186acaa202e1e1bf403f4bmukesh agrawal WiFiService *service(GetServices().begin()->get()); 9003195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 901dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(_)) 9023195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal .WillOnce(Return(fake_path)); 903dc42bb32d20da8ddd2ace08f171f9adf3ec1c847mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, SelectNetwork(fake_path)); 9043239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal InitiateConnect(service); 905f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal EXPECT_EQ(static_cast<Service *>(service), 906f2f68a50aabcde256cabad0041c357cbacaeb3e0mukesh agrawal wifi()->selected_service_.get()); 9073195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal } 9083195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal} 9093195024a8c5a5ec9b6d54c18c9788809814d4e25mukesh agrawal 9100ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingService) { 911d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 9120ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9130ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9140ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9150ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 916e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 9170ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 9180ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service); 9190ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9200ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_FALSE(GetPendingService() == NULL); 9210ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()); 9220ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 9230ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9240ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetPendingService() == NULL); 9250ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9260ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9270ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectPendingServiceWithCurrent) { 928d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 929d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 930d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 931d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9320ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9330ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9340ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9350ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 936e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 937e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid1", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 9380ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service0(GetServices()[0].get()); 9390ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service1(GetServices()[1].get()); 9400ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9410ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service0); 9420ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 9430ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9440ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service1); 9450ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9460ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 9470ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 9480ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()); 9490ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service1); 9500ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9510ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| will be unchanged until supplicant signals 9520ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // that CurrentBSS has changed. 9530ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 9540ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |pending_service_| is updated immediately. 9550ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetPendingService() == NULL); 9560ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9570ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9580ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentService) { 959d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 960d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 961d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 962d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9630ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9640ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9650ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9660ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 967e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 9680ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 9690ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service); 9700ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 9710ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9720ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9730ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 9740ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()); 9750ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 9760ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9770ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // |current_service_| should not change until supplicant reports 9780ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal // a BSS change. 9790ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 9800ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 9810ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9820ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceWithPending) { 983d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 984d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 985d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 986d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 9870ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 9880ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 9890ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9900ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 991e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 992e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid1", "00:00:00:00:00:01", 0, 0, kNetworkModeAdHoc); 9930ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service0(GetServices()[0].get()); 9940ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service1(GetServices()[1].get()); 9950ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 9960ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service0); 9970ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 9980ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 9990ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service1); 10000ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10010ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 10020ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 10030ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()) 10040ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .Times(0); 10050ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service0); 10060ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10070ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service0, GetCurrentService()); 10080ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service1, GetPendingService()); 10090ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 10100ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10110ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectInvalidService) { 1012d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 10130ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 10140ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 10150ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10160ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 1017e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 10180ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 10190ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()) 10200ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .Times(0); 10210ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 10220ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 10230ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10240ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawalTEST_F(WiFiMainTest, DisconnectCurrentServiceFailure) { 1025d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1026d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1027d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 1028d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 10290ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 10300ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal *supplicant_interface_proxy_; 10310ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10320ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal StartWiFi(); 1033e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 10340ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10350ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal WiFiService *service(GetServices().begin()->get()); 10360ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal DBus::Path fake_path("/fake/path"); 10370ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(_)) 10380ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .WillOnce(Return(fake_path)); 10390ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateConnect(service); 10400ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportCurrentBSSChanged("bss0"); 10410ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 10420ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10430ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_EQ(service, GetCurrentService()); 10440ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, Disconnect()) 10450ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal .WillRepeatedly(Throw( 10460ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal DBus::Error( 10470ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "fi.w1.wpa_supplicant1.NotConnected", 10480ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal "test threw fi.w1.wpa_supplicant1.NotConnected"))); 10490ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, RemoveNetwork(fake_path)); 10500ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal InitiateDisconnect(service); 10510ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10520ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal EXPECT_TRUE(GetCurrentService() == NULL); 10530ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal} 10540ed0f2e84c366a90bca4a824b0adf18e9f243369mukesh agrawal 10555c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawalTEST_F(WiFiMainTest, Stop) { 1056d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1057c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1058e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1059c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportScanDone(); 10605c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 1061c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*manager(), DeregisterService(_)); 1062c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StopWiFi(); 1063b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 10645c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal} 10655c4dd0b0886fb10deae0d3b40628fb2c521aff99mukesh agrawal 10667a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpen) { 10677a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1068a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, &e); 10697a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 10707a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10717a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10727a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenNoSSID) { 10737a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1074a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, NULL, flimflam::kModeManaged, &e); 10757a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidArguments, e.type()); 10767a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("must specify SSID", e.message()); 10777a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10787a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10797a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenLongSSID) { 10807a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 10817a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal GetOpenService( 1082a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kTypeWifi, "123456789012345678901234567890123", 1083a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, &e); 10847a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidNetworkName, e.type()); 10857a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("SSID is too long", e.message()); 10867a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10877a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10887a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenShortSSID) { 10897a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1090a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "", flimflam::kModeManaged, &e); 10917a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidNetworkName, e.type()); 10927a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("SSID is too short", e.message()); 10937a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 10947a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 10957a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenBadMode) { 10967a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1097a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", "ad-hoc", &e); 10987a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kNotSupported, e.type()); 10997a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("service mode is unsupported", e.message()); 11007a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11017a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11027a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceOpenNoMode) { 11037a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1104a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", NULL, &e); 11057a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11067a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11077a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11087a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceRSN) { 11097a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1110a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1111a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn, "secure password", &e); 11127a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11137a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11147a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11157a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceRSNNoPassword) { 1116b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // When configuring hidden networks, Chrome expects to be able to 1117b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // GetService w/o a password, and supply the password with 1118b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // SetProperty afterwards. 11197a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1120a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1121a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn, NULL, &e); 1122b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11237a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11247a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11257a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceBadSecurity) { 11267a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1127a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, "rot-13", 1128a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, &e); 11297a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kNotSupported, e.type()); 11307a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ("security mode is unsupported", e.message()); 11317a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11327a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11337a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEPNoPassword) { 1134b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // When configuring hidden networks, Chrome expects to be able to 1135b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // GetService w/o a password, and supply the password with 1136b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal // SetProperty afterwards. 11377a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1138a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1139a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, NULL, &e); 1140b172e4a6b35588728f17008e3510eebff95cc38cmukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11417a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11427a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11437a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEPEmptyPassword) { 11447a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1145a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1146a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "", &e); 11477a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11487a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11497a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11507a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40ASCII) { 11517a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1152a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1153a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "abcde", &e); 11547a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11557a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11567a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11577a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104ASCII) { 11587a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1159a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1160a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "abcdefghijklm", &e); 11617a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11627a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11637a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11647a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40ASCIIWithKeyIndex) { 11657a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1166a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1167a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:abcdefghijklm", &e); 11687a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11697a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11707a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11717a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40Hex) { 11727a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1173a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1174a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405", &e); 11757a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 11767a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11777a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11787a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexBadPassphrase) { 11797a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1180a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1181a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "O102030405", &e); 11827a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11837a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11847a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11857a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexBadPassphrase) { 11867a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1187a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1188a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "1:O102030405", &e); 11897a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11907a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11917a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11927a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexAndBaseBadPassphrase) { 11937a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1194a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1195a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "1:0xO102030405", &e); 11967a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 11977a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 11987a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 11997a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithBaseBadPassphrase) { 12007a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1201a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1202a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0xO102030405", &e); 12037a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 12047a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 12057a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 12067a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104Hex) { 12077a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1208a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1209a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405060708090a0b0c0d", &e); 12107a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 12117a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 12127a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 12137a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexUppercase) { 12147a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1215a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1216a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0102030405060708090A0B0C0D", &e); 12177a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 12187a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 12197a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 12207a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndex) { 12217a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1222a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1223a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:0102030405060708090a0b0c0d", &e); 12247a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 12257a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 12267a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 12277a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawalTEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndexAndBase) { 12287a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal Error e; 1229a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1230a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep, "0:0x0102030405060708090a0b0c0d", &e); 12317a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 12327a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal} 12337a4e4008dc09effe39c94a5f9575644a79ee1388mukesh agrawal 12348ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiGetServiceSuccessTest : public WiFiMainTest {}; 12358ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalclass WiFiGetServiceFailureTest : public WiFiMainTest {}; 12368ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12378ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalTEST_P(WiFiGetServiceSuccessTest, Passphrase) { 12388ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Error e; 1239a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1240a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa, GetParam().c_str(), &e); 12418ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal EXPECT_TRUE(e.IsSuccess()); 12428ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal} 12438ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12448ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalTEST_P(WiFiGetServiceFailureTest, Passphrase) { 12458ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Error e; 1246a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1247a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa, GetParam().c_str(), &e); 12488ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal EXPECT_EQ(Error::kInvalidPassphrase, e.type()); 12498ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal} 12508ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12518ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalINSTANTIATE_TEST_CASE_P( 12528ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceSuccessTestInstance, 12538ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceSuccessTest, 12548ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Values( 12558ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMinLen, 'Z'), 12568ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMaxLen, 'Z'), 12578ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal // subtle: invalid length for hex key, but valid as ascii passphrase 12588ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen-1, '1'), 12598ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen, '1'))); 12608ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12618ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawalINSTANTIATE_TEST_CASE_P( 12628ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceFailureTestInstance, 12638ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal WiFiGetServiceFailureTest, 12648ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal Values( 12658ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMinLen-1, 'Z'), 12668ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAAsciiMaxLen+1, 'Z'), 12678ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal string(IEEE_80211::kWPAHexLen+1, '1'))); 12688ede052be929e07a8fa5d46af1996242bf5f7fc8mukesh agrawal 12696ab23a9d4526686406d50081853639540b22213aPaul StewartTEST_F(WiFiMainTest, FindServiceWEP) { 12706ab23a9d4526686406d50081853639540b22213aPaul Stewart const string ssid("an_ssid"); 12716ab23a9d4526686406d50081853639540b22213aPaul Stewart { 12726ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 1273a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, ssid.c_str(), flimflam::kModeManaged, 12746ab23a9d4526686406d50081853639540b22213aPaul Stewart flimflam::kSecurityWep, "abcde", &e); 12756ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 12766ab23a9d4526686406d50081853639540b22213aPaul Stewart } 12776ab23a9d4526686406d50081853639540b22213aPaul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 12786ab23a9d4526686406d50081853639540b22213aPaul Stewart 1279a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(FindService(ssid_bytes, flimflam::kModeManaged, 1280a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWep).get()); 1281a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(FindService(ssid_bytes, flimflam::kModeManaged, 1282a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa).get()); 12836ab23a9d4526686406d50081853639540b22213aPaul Stewart} 12846ab23a9d4526686406d50081853639540b22213aPaul Stewart 12856ab23a9d4526686406d50081853639540b22213aPaul StewartTEST_F(WiFiMainTest, FindServiceWPA) { 12866ab23a9d4526686406d50081853639540b22213aPaul Stewart const string ssid("an_ssid"); 12876ab23a9d4526686406d50081853639540b22213aPaul Stewart { 12886ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 1289a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetService(flimflam::kTypeWifi, ssid.c_str(), flimflam::kModeManaged, 12906ab23a9d4526686406d50081853639540b22213aPaul Stewart flimflam::kSecurityRsn, "abcdefgh", &e); 12916ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 12926ab23a9d4526686406d50081853639540b22213aPaul Stewart } 12936ab23a9d4526686406d50081853639540b22213aPaul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 1294a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr wpa_service(FindService(ssid_bytes, flimflam::kModeManaged, 1295a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityWpa)); 12966ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(wpa_service.get()); 1297a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr rsn_service(FindService(ssid_bytes, flimflam::kModeManaged, 1298a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityRsn)); 12996ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(rsn_service.get()); 13006ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), rsn_service.get()); 1301a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr psk_service(FindService(ssid_bytes, flimflam::kModeManaged, 1302a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityPsk)); 13036ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), psk_service.get()); 13046ab23a9d4526686406d50081853639540b22213aPaul Stewart // Indirectly test FindService by doing a GetService on something that 13056ab23a9d4526686406d50081853639540b22213aPaul Stewart // already exists. 13066ab23a9d4526686406d50081853639540b22213aPaul Stewart { 13076ab23a9d4526686406d50081853639540b22213aPaul Stewart Error e; 13086ab23a9d4526686406d50081853639540b22213aPaul Stewart WiFiServiceRefPtr wpa_service2( 1309a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, ssid.c_str(), 1310a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kModeManaged, flimflam::kSecurityWpa, 1311a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart "abcdefgh", false, &e)); 13126ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_TRUE(e.IsSuccess()); 13136ab23a9d4526686406d50081853639540b22213aPaul Stewart EXPECT_EQ(wpa_service.get(), wpa_service2.get()); 13146ab23a9d4526686406d50081853639540b22213aPaul Stewart } 13156ab23a9d4526686406d50081853639540b22213aPaul Stewart} 13166ab23a9d4526686406d50081853639540b22213aPaul Stewart 1317cb59fed9326dc91c93b817dcd9eaca363d8313fePaul StewartTEST_F(WiFiMainTest, GetServiceWithGUID) { 1318cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart // Perform a GetService that also configures properties in the base Service 1319cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart // class using Service::Configure(). 1320cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart KeyValueStore args; 1321cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart args.SetString(flimflam::kTypeProperty, flimflam::kTypeWifi); 1322cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart args.SetString(flimflam::kSSIDProperty, "ssid"); 1323cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart args.SetString(flimflam::kSecurityProperty, flimflam::kSecurityNone); 1324cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart const string kGUID = "aguid"; // Stored as a registered Service property. 1325cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart args.SetString(flimflam::kGuidProperty, kGUID); 1326cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart Error e; 1327cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart WiFiServiceRefPtr service = GetServiceWithKeyValues(args, &e); 1328cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart EXPECT_TRUE(e.IsSuccess()); 1329cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart EXPECT_EQ(kGUID, service->guid()); 1330cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart} 1331cb59fed9326dc91c93b817dcd9eaca363d8313fePaul Stewart 1332ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartMATCHER_P(HasHiddenSSID, ssid, "") { 1333a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart map<string, DBus::Variant>::const_iterator it = 1334ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart arg.find(wpa_supplicant::kPropertyScanSSIDs); 1335ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart if (it == arg.end()) { 1336ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return false; 1337ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart } 1338ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1339ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const DBus::Variant &ssids_variant = it->second; 1340ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_TRUE(DBusAdaptor::IsByteArrays(ssids_variant.signature())); 1341ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart const ByteArrays &ssids = it->second.operator ByteArrays(); 1342ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // A valid Scan containing a single hidden SSID should contain 1343ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // two SSID entries: one containing the SSID we are looking for, 1344ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // and an empty entry, signifying that we also want to do a 1345ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart // broadcast probe request for all non-hidden APs as well. 1346ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart return ssids.size() == 2 && 1347ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart string(ssids[0].begin(), ssids[0].end()) == ssid && 1348ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart ssids[1].empty(); 1349ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1350ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 1351ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul StewartTEST_F(WiFiMainTest, ScanHidden) { 1352ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_CALL(*supplicant_process_proxy_, CreateInterface(_)); 1353ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart EXPECT_CALL(*supplicant_process_proxy_, GetInterface(_)) 1354ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart .Times(AnyNumber()) 1355ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart .WillRepeatedly(Throw( 1356ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart DBus::Error( 1357ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart "fi.w1.wpa_supplicant1.InterfaceUnknown", 1358ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart "test threw fi.w1.wpa_supplicant1.InterfaceUnknown"))); 135910ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart scoped_refptr<MockProfile> profile( 136010ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart new NiceMock<MockProfile>(control_interface(), manager(), "")); 1361a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 136210ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart // Create a hidden service with an associated profile. 1363a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1364a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 1365a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid0", flimflam::kModeManaged, 1366a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, true, &e); 1367a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 1368a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(service->hidden_ssid()); 136910ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart service->set_profile(profile); 1370a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 1371a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 137210ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart // Create a hidden service without an associated profile. 1373a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1374a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 1375a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid1", flimflam::kModeManaged, 1376a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, true, &e); 1377a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 1378a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(service->hidden_ssid()); 1379a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 1380a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart { 138110ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart // Create a non-hidden service with an associated profile. 1382a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1383a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart WiFiServiceRefPtr service = 1384a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetServiceInner(flimflam::kTypeWifi, "ssid2", flimflam::kModeManaged, 1385a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart NULL, NULL, false, &e); 1386a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(e.IsSuccess()); 1387a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(service->hidden_ssid()); 138810ccbb3c6bc4f4246105743c8508fc9ce8759c17Paul Stewart service->set_profile(profile); 1389a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart } 1390a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(*supplicant_interface_proxy_, Scan(HasHiddenSSID("ssid0"))); 1391ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart StartWiFi(); 1392ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart dispatcher_.DispatchPendingEvents(); 1393ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart} 1394ced6a0b2c2c3952ba79e10709345b573d2e06af6Paul Stewart 13957ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, InitialSupplicantState) { 13967ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(WiFi::kInterfaceStateUnknown, GetSupplicantState()); 13977ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 13987ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 13997ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeNoService) { 14007ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // State change should succeed even if there is no pending Service. 14017ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateScanning); 14027ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateScanning, GetSupplicantState()); 14037ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 14047ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 14057ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeWithService) { 14067ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Forward transition should trigger a Service state change. 14077ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 14087ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 1409cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 14107ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 14117ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_CALL(*service.get(), SetState(Service::kStateAssociating)); 14127ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAssociated); 14137ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 14147ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 14157ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 1416d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 14177ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 14187ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 14197ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawalTEST_F(WiFiMainTest, StateChangeBackwardsWithService) { 14207ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Some backwards transitions should not trigger a Service state change. 14217ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Supplicant state should still be updated, however. 1422d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1423d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 14247ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal StartWiFi(); 14257ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal dispatcher_.DispatchPendingEvents(); 1426cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1427d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(Service::kStateConfiguring)); 14287ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal InitiateConnect(service); 14297ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 14307ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateAuthenticating); 14317ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal EXPECT_EQ(wpa_supplicant::kInterfaceStateAuthenticating, 14327ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal GetSupplicantState()); 14337ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // Verify expectations now, because WiFi may report other state changes 14347ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal // when WiFi is Stop()-ed (during TearDown()). 14357ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal Mock::VerifyAndClearExpectations(service.get()); 1436d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 14377ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal} 14387ec7131cbc4e192ea044cf761317e71699f7c190mukesh agrawal 1439a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithNoGroups) { 1440a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1441a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetGroupsWithKey(flimflam::kWifiHiddenSsid)) 1442a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(set<string>())); 1443a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1444a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1445a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1446a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithMissingHidden) { 1447a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1448a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1449a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1450a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Missing "Hidden" property. 1451a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetBool(StrEq(id), flimflam::kWifiHiddenSsid, _)) 1452a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(false)); 1453a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1454a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1455a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1456a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithFalseHidden) { 1457a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1458a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1459a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1460a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // "Hidden" property set to "false". 1461a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetBool(StrEq(id), flimflam::kWifiHiddenSsid, _)) 1462a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(DoAll(SetArgumentPointee<2>(true), Return(false))); 1463a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1464a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1465a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1466a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithMissingSSID) { 1467a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1468a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1469a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1470a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart // Missing "SSID" property. 1471a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_CALL(storage, GetString(StrEq(id), flimflam::kSSIDProperty, _)) 1472a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart .WillOnce(Return(false)); 1473a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1474a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1475a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1476a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1477a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesFailWithFoundService) { 1478a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1479a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1480a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, "an_ssid", &id); 1481a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart Error e; 1482a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart GetOpenService(flimflam::kTypeWifi, "an_ssid", NULL, &e); 1483a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart ASSERT_TRUE(e.IsSuccess()); 1484a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_FALSE(LoadHiddenServices(&storage)); 1485a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1486a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 1487a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul StewartTEST_F(WiFiMainTest, LoadHiddenServicesSuccess) { 1488d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1489a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart StrictMock<MockStore> storage; 1490a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string ssid("an_ssid"); 1491a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart string id; 1492a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart SetupHiddenStorage(&storage, ssid, &id); 1493a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(LoadHiddenServices(&storage)); 1494a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 1495a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart EXPECT_TRUE(FindService(ssid_bytes, flimflam::kModeManaged, 1496a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart flimflam::kSecurityNone).get()); 1497a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart} 1498a41e38d57e4fa37bd2c8de6447890b4e1951acb7Paul Stewart 14991590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToDisconnected) { 1500d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1501d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1502d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 1503d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 15041590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 15051590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 15061590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15071590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handle used in this test ("an_ap") is not 15081590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // intended to reflect the format used by supplicant. It's just 15091590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // convenient for testing. 15101590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15111590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 1512e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 15131590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 15141590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service); 15151590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service, GetPendingService().get()); 15161590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15171590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("an_ap"); 15181590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 15191590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 15201590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service, GetCurrentService().get()); 15211590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 15221590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15231590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1524568b5c6b093d5605a40216711d3291376394dd0fmukesh agrawal EXPECT_EQ(Service::kStateIdle, service->state()); 1525568b5c6b093d5605a40216711d3291376394dd0fmukesh agrawal EXPECT_TRUE(service->IsFailed()); 15261590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetCurrentService().get()); 15271590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(NULL, GetPendingService().get()); 15281590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 15291590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15301590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeConnectedToConnectedNewService) { 1531d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1532d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1533d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 1534d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 15351590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap1 = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 15361590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap2 = MakeEndpoint("another_ssid", "01:02:03:04:05:06"); 15371590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service1 = CreateServiceForEndpoint(*ap1); 15381590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service2 = CreateServiceForEndpoint(*ap2); 15391590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15401590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handles used in this test ("ap1", "ap2") are 15411590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // not intended to reflect the format used by supplicant. They're 15421590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // just convenient for testing. 15431590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15441590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 1545e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap1", ap1->ssid_string(), ap1->bssid_string(), 0, 0, 15461590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 1547e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap2", ap2->ssid_string(), ap2->bssid_string(), 0, 0, 15481590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 15491590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service1); 15501590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("ap1"); 15511590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 15521590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service1.get(), GetCurrentService().get()); 15531590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1554c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Note that we deliberately omit intermediate supplicant states 1555c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // (e.g. kInterfaceStateAssociating), on the theory that they are 1556c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // unreliable. Specifically, they may be quashed if the association 1557c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // completes before supplicant flushes its changed properties. 15581590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("ap2"); 15591590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 15601590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service2.get(), GetCurrentService().get()); 15611590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateIdle, service1->state()); 15621590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service2->state()); 15631590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 15641590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15651590839e44a0e922d4763003a35dbd493509b705mukesh agrawalTEST_F(WiFiMainTest, CurrentBSSChangeDisconnectedToConnected) { 1566d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1567d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1568d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1569d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(AnyNumber()); 15701590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 15711590839e44a0e922d4763003a35dbd493509b705mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 15721590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15731590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // Note that the BSS handle used in this test ("an_ap") is not 15741590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // intended to reflect the format used by supplicant. It's just 15751590839e44a0e922d4763003a35dbd493509b705mukesh agrawal // convenient for testing. 15761590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 15771590839e44a0e922d4763003a35dbd493509b705mukesh agrawal StartWiFi(); 1578e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 15791590839e44a0e922d4763003a35dbd493509b705mukesh agrawal kNetworkModeInfrastructure); 15801590839e44a0e922d4763003a35dbd493509b705mukesh agrawal InitiateConnect(service); 15811590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportCurrentBSSChanged("an_ap"); 15821590839e44a0e922d4763003a35dbd493509b705mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 15831590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(service.get(), GetCurrentService().get()); 15841590839e44a0e922d4763003a35dbd493509b705mukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 15851590839e44a0e922d4763003a35dbd493509b705mukesh agrawal} 15861590839e44a0e922d4763003a35dbd493509b705mukesh agrawal 1587e41a72d0737488d561a4158019409d5785dad61bThieu LeTEST_F(WiFiMainTest, CurrentBSSChangedUpdateServiceEndpoint) { 1588b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1589b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1590b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1591b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1592e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency1 = 2412; 1593e41a72d0737488d561a4158019409d5785dad61bThieu Le const uint16 frequency2 = 2442; 1594e41a72d0737488d561a4158019409d5785dad61bThieu Le StartWiFi(); 1595e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss1", "ssid1", "00:00:00:00:00:01", 1, frequency1, 1596e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 1597e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss2", "ssid1", "00:00:00:00:00:02", 1, frequency2, 1598e41a72d0737488d561a4158019409d5785dad61bThieu Le kNetworkModeInfrastructure); 1599e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(1, GetServices().size()); 1600e41a72d0737488d561a4158019409d5785dad61bThieu Le WiFiService *service(GetServices()[0].get()); 1601e41a72d0737488d561a4158019409d5785dad61bThieu Le InitiateConnect(service); 1602e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportCurrentBSSChanged("bss1"); 1603e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency1, service->frequency_); 1604e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportCurrentBSSChanged("bss2"); 1605e41a72d0737488d561a4158019409d5785dad61bThieu Le EXPECT_EQ(frequency2, service->frequency_); 1606e41a72d0737488d561a4158019409d5785dad61bThieu Le} 1607e41a72d0737488d561a4158019409d5785dad61bThieu Le 16084eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawalTEST_F(WiFiMainTest, ConfiguredServiceRegistration) { 16094eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal Error e; 16104eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)) 16114eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal .Times(0); 16124eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal EXPECT_CALL(*manager(), HasService(_)) 16134eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal .WillOnce(Return(false)); 16144eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal GetOpenService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, &e); 16154eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)); 1616e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap0", "an_ssid", "00:00:00:00:00:00", 0, 0, 16174eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal kNetworkModeInfrastructure); 16184eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal} 16194eb4d782b83850552af41f675d22250601b9fb8dmukesh agrawal 16208a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, NewConnectPreemptsPending) { 1621d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1622d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 16238a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiEndpointRefPtr ap1 = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 16248a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiEndpointRefPtr ap2 = MakeEndpoint("another_ssid", "01:02:03:04:05:06"); 16258a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service1 = CreateServiceForEndpoint(*ap1); 16268a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service2 = CreateServiceForEndpoint(*ap2); 16278a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 16288a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 1629e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap1", ap1->ssid_string(), ap1->bssid_string(), 0, 0, 16308a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal kNetworkModeInfrastructure); 1631e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap2", ap2->ssid_string(), ap2->bssid_string(), 0, 0, 16328a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal kNetworkModeInfrastructure); 16338a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal InitiateConnect(service1); 16348a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(service1.get(), GetPendingService().get()); 16358a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 16368a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Disconnect()); 16378a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), AddNetwork(_)); 16388a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal InitiateConnect(service2); 16398a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_EQ(service2.get(), GetPendingService().get()); 16408a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 16418a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 16428a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawalTEST_F(WiFiMainTest, IsIdle) { 16438a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal StartWiFi(); 16448a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_TRUE(wifi()->IsIdle()); 16458a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 16468a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 16478a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 16488a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal Error error; 16498a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal service->AddEndpoint(ap); 16508a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal service->AutoConnect(); 16518a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal EXPECT_FALSE(wifi()->IsIdle()); 16528a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal} 16538a3188dbc04245c17a4729d16a632547ce4bf585mukesh agrawal 16544d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawalMATCHER(WiFiAddedArgs, "") { 16554d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal return ContainsKey(arg, wpa_supplicant::kNetworkPropertyScanSSID) && 16564d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal ContainsKey(arg, wpa_supplicant::kNetworkPropertyBgscan); 16574d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 16584d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 16594d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawalTEST_F(WiFiMainTest, AddNetworkArgs) { 1660d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 16614d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 16624d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal *supplicant_interface_proxy_; 16634d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 16644d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal StartWiFi(); 1665e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 16664d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal WiFiService *service(GetServices().begin()->get()); 16674d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal EXPECT_CALL(supplicant_interface_proxy, AddNetwork(WiFiAddedArgs())); 16684d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal InitiateConnect(service); 16694d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal} 16704d0401cd44d6082f03ace63134b64dec0bc99116mukesh agrawal 1671c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, StateAndIPIgnoreLinkEvent) { 1672c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1673cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityNone); 1674c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal InitiateConnect(service); 1675c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*service.get(), SetState(_)).Times(0); 1676c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 1677c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportLinkUp(); 1678c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1679c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // Verify expectations now, because WiFi may cause |service| state 1680c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal // changes during TearDown(). 1681c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal Mock::VerifyAndClearExpectations(service); 1682d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*service.get(), SetState(_)).Times(AnyNumber()); 1683c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1684c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1685c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, SupplicantCompleted) { 1686d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1687d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1688d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1689c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1690c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1691c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1692c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1693e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1694c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal kNetworkModeInfrastructure); 1695c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal InitiateConnect(service); 1696c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1697c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()); 1698c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportCurrentBSSChanged("ap"); 1699c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1700c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_EQ(Service::kStateConfiguring, service->state()); 1701c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1702c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1703c01f3983048b882154099b4d284f0c145510b68bmukesh agrawalTEST_F(WiFiMainTest, SupplicantCompletedAlreadyConnected) { 1704d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*dhcp_config_.get(), RequestIP()); 1705d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), UpdateService(_)).Times(AnyNumber()); 1706d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*device_info(), FlushAddresses(_)).Times(AnyNumber()); 1707d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), device_info()).Times(AnyNumber()); 1708d408fdf69489e3199c63796a06f7cfbbb4513515Paul Stewart EXPECT_CALL(*dhcp_provider(), CreateConfig(_, _, _, _)).Times(AnyNumber()); 1709d9f893fba21b093cf63939e6e2c58bc77d6f2bdbGary Morain EXPECT_CALL(*manager(), HasService(_)).Times(AnyNumber()); 1710ac1bdb47b498a82460c995742ac5892f9a4d7e57Gary Morain EXPECT_CALL(*manager(), IsPortalDetectionEnabled(_)).Times(AnyNumber()); 1711c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1712c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1713c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1714c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal StartWiFi(); 1715e41a72d0737488d561a4158019409d5785dad61bThieu Le ReportBSS("ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1716c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal kNetworkModeInfrastructure); 1717c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal InitiateConnect(service); 1718c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportCurrentBSSChanged("ap"); 1719c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1720c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportIPConfigComplete(); 1721c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal Mock::VerifyAndClearExpectations(service); 1722c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 1723c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal EXPECT_CALL(*dhcp_config_.get(), RequestIP()).Times(0); 1724c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1725c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal} 1726c01f3983048b882154099b4d284f0c145510b68bmukesh agrawal 172766c8600f8410ed205701921d58d9e2c00000047cPaul StewartTEST_F(WiFiMainTest, ClearCachedCredentials) { 172866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart MockSupplicantInterfaceProxy &supplicant_interface_proxy = 172966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart *supplicant_interface_proxy_; 173066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 173166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart StartWiFi(); 173266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 173366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart // Ensure call to the proxy is deferred. 173466c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 173566c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(0); 173666c8600f8410ed205701921d58d9e2c00000047cPaul Stewart ClearCachedCredentials(); 173766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 173866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart Mock::VerifyAndClearExpectations(&supplicant_interface_proxy); 173966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 174066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 174166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(1); 174266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart dispatcher_.DispatchPendingEvents(); 174366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 174466c8600f8410ed205701921d58d9e2c00000047cPaul Stewart Mock::VerifyAndClearExpectations(&supplicant_interface_proxy); 174566c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 174666c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 174766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(0); 174866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart ClearCachedCredentials(); 174966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart ClearCachedCredentials(); 175066c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 175166c8600f8410ed205701921d58d9e2c00000047cPaul Stewart Mock::VerifyAndClearExpectations(&supplicant_interface_proxy); 175266c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 175366c8600f8410ed205701921d58d9e2c00000047cPaul Stewart // Ensure multiple calls to ClearCachedCredentials() results in only 175466c8600f8410ed205701921d58d9e2c00000047cPaul Stewart // one call to the proxy. 175566c8600f8410ed205701921d58d9e2c00000047cPaul Stewart EXPECT_CALL(supplicant_interface_proxy, ClearCachedCredentials()) 175666c8600f8410ed205701921d58d9e2c00000047cPaul Stewart .Times(1); 175766c8600f8410ed205701921d58d9e2c00000047cPaul Stewart dispatcher_.DispatchPendingEvents(); 175866c8600f8410ed205701921d58d9e2c00000047cPaul Stewart} 175966c8600f8410ed205701921d58d9e2c00000047cPaul Stewart 1760b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSAddedCreatesBSSProxy) { 1761b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1762b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): Consider using a factory for WiFiEndpoints, so that 1763b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // we can test the interaction between WiFi and WiFiEndpoint. (Right 1764b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // now, we're testing across multiple layers.) 1765b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*supplicant_bss_proxy_, Die()).Times(AnyNumber()); 1766b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy_factory(), CreateSupplicantBSSProxy(_, _, _)); 1767b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 1768b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1769b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1770b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1771b20776f4bb664c2256a414ca04114725c95d606emukesh agrawalTEST_F(WiFiMainTest, BSSRemovedDestroysBSSProxy) { 1772b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // TODO(quiche): As for BSSAddedCreatesBSSProxy, consider using a 1773b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // factory for WiFiEndpoints. 1774b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*manager(), RegisterService(_)).Times(AnyNumber()); 1775b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 1776b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Get the pointer before we transfer ownership. 1777b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal MockSupplicantBSSProxy *proxy = supplicant_bss_proxy_.get(); 1778b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal EXPECT_CALL(*proxy, Die()); 1779b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal StartWiFi(); 1780b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1781b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal RemoveBSS("bss0"); 1782b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // Check this now, to make sure RemoveBSS killed the proxy (rather 1783b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal // than TearDown). 1784b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal Mock::VerifyAndClearExpectations(proxy); 1785b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal} 1786b20776f4bb664c2256a414ca04114725c95d606emukesh agrawal 17875c05b2920be742d518829972127172481722058dmukesh agrawalTEST_F(WiFiMainTest, FlushBSSOnResume) { 17885c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval resume_time = {1, 0}; 17895c05b2920be742d518829972127172481722058dmukesh agrawal const struct timeval scan_done_time = {6, 0}; 17905c05b2920be742d518829972127172481722058dmukesh agrawal MockSupplicantInterfaceProxy &supplicant_interface_proxy = 17915c05b2920be742d518829972127172481722058dmukesh agrawal *supplicant_interface_proxy_; 17925c05b2920be742d518829972127172481722058dmukesh agrawal 17935c05b2920be742d518829972127172481722058dmukesh agrawal StartWiFi(); 17945c05b2920be742d518829972127172481722058dmukesh agrawal 17955c05b2920be742d518829972127172481722058dmukesh agrawal EXPECT_CALL(time_, GetTimeMonotonic(_)) 17965c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(resume_time), Return(0))) 17975c05b2920be742d518829972127172481722058dmukesh agrawal .WillOnce(DoAll(SetArgumentPointee<0>(scan_done_time), Return(0))); 17985c05b2920be742d518829972127172481722058dmukesh agrawal EXPECT_CALL(supplicant_interface_proxy, 17995c05b2920be742d518829972127172481722058dmukesh agrawal FlushBSS(WiFi::kMaxBSSResumeAgeSeconds + 5)); 18003e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood power_state_callback().Run(PowerManagerProxyDelegate::kOn); 18015c05b2920be742d518829972127172481722058dmukesh agrawal ReportScanDone(); 18025c05b2920be742d518829972127172481722058dmukesh agrawal} 18035c05b2920be742d518829972127172481722058dmukesh agrawal 1804b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerIdle) { 1805b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1806b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1807b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1808b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1809b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1810b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1811b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)); 1812b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1813b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1814b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1815b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1816b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1817b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerScanning) { 1818b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1819b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1820b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1821b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1822b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1823b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // Should not call Scan, since we're already scanning. 1824b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal // (Scanning is triggered by StartWiFi.) 1825b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1826b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1827b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1828b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1829b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1830b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1831b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerConnecting) { 1832b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1833b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1834b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportBSS("bss0", "ssid0", "00:00:00:00:00:00", 0, 0, kNetworkModeAdHoc); 1835b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1836b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiService *service(GetServices().begin()->get()); 1837b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal InitiateConnect(service); 1838b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1839b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1840b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1841b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1842b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal FireScanTimer(); 1843b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1844b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); // Automatically re-armed. 1845b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1846b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1847b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerReconfigured) { 1848b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1849b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1850b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1851b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1852b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal SetScanInterval(1); 1853b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1854b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1855b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1856b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerResetOnScanDone) { 1857b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1858b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal CancelScanTimer(); 1859b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1860b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1861b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportScanDone(); 1862b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1863b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1864b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1865b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanTimerStopOnZeroInterval) { 1866b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1867b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_FALSE(GetScanTimer().IsCancelled()); 1868b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1869b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal SetScanInterval(0); 1870b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_TRUE(GetScanTimer().IsCancelled()); 1871b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1872b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1873b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, ScanOnDisconnectWithHidden) { 1874b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal Error e; 1875b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal scoped_refptr<MockProfile> profile( 1876b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal new NiceMock<MockProfile>(control_interface(), manager(), "")); 1877b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiServiceRefPtr hidden_service = 1878b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal GetServiceInner(flimflam::kTypeWifi, "hidden_ssid", 1879b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal flimflam::kModeManaged, NULL, NULL, true, &e); 1880b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal hidden_service->set_profile(profile); 1881b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1882b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1883b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1884b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1885b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1886b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal kNetworkModeInfrastructure); 1887b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal InitiateConnect(service); 1888b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged("an_ap"); 1889b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1890b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1891b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1892b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), 1893b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal Scan(HasHiddenSSID("hidden_ssid"))); 1894b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1895b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1896b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1897b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1898b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawalTEST_F(WiFiMainTest, NoScanOnDisconnectWithoutHidden) { 1899b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal StartWiFi(); 1900b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiEndpointRefPtr ap = MakeEndpoint("an_ssid", "00:01:02:03:04:05"); 1901b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal WiFiServiceRefPtr service = CreateServiceForEndpoint(*ap); 1902b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportBSS("an_ap", ap->ssid_string(), ap->bssid_string(), 0, 0, 1903b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal kNetworkModeInfrastructure); 1904b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal InitiateConnect(service); 1905b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged("an_ap"); 1906b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceStateCompleted); 1907b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1908b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1909b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal EXPECT_CALL(*GetSupplicantInterfaceProxy(), Scan(_)).Times(0); 1910b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1911b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal dispatcher_.DispatchPendingEvents(); 1912b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal} 1913b66c646facf31a901629c1bc7da15b9c7d7d88c0mukesh agrawal 1914cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsOpen) { 1915cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal Error e; 1916cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal WiFiServiceRefPtr service = GetOpenService( 1917cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, &e); 1918cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceState4WayHandshake); 1919cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 1920cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(wifi()->SuspectCredentials(*service)); 1921cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1922cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1923cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsWPANeverConnected) { 1924cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal Error e; 1925cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal WiFiServiceRefPtr service = 1926cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1927cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal flimflam::kSecurityWpa, "abcdefgh", &e); 1928cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceState4WayHandshake); 1929cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 1930cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_TRUE(wifi()->SuspectCredentials(*service)); 1931cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1932cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1933cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsWPAPreviouslyConnected) { 1934cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal Error e; 1935cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal WiFiServiceRefPtr service = 1936cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal GetService(flimflam::kTypeWifi, "an_ssid", flimflam::kModeManaged, 1937cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal flimflam::kSecurityWpa, "abcdefgh", &e); 1938cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceState4WayHandshake); 1939cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal service->has_ever_connected_ = true; 1940cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(wifi()->SuspectCredentials(*service)); 1941cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1942cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1943cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawalTEST_F(WiFiMainTest, SuspectCredentialsYieldFailure) { 1944cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ScopedMockLog log; 1945cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal Error e; 1946cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurityWpa); 1947cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal SetPendingService(service); 1948cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportStateChanged(wpa_supplicant::kInterfaceState4WayHandshake); 1949cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_FALSE(service->has_ever_connected()); 1950cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1951cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_CALL(*service, SetFailure(Service::kFailureBadCredentials)); 1952cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); 1953cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("Bad passphrase?"))); 1954cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal ReportCurrentBSSChanged(wpa_supplicant::kCurrentBSSNull); 1955cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_EQ(Service::kStateIdle, service->state()); 1956cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal EXPECT_TRUE(service->IsFailed()); 1957cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal} 1958cf24a2465a3e7b5a11fa97be282f0af47aa3ef6emukesh agrawal 1959bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 1960e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// Scanning tests will use a mock of the event dispatcher instead of a real 1961e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart// one. 1962e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartclass WiFiScanTest : public WiFiObjectTest { 1963e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart public: 1964e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart WiFiScanTest() : WiFiObjectTest(&mock_dispatcher_) {} 1965e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1966e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart protected: 1967e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart void ExpectInitialScanSequence(); 1968e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1969e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart StrictMock<MockEventDispatcher> mock_dispatcher_; 1970e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart}; 1971e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1972e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewartvoid WiFiScanTest::ExpectInitialScanSequence() { 1973e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // Choose a number of iterations some multiple higher than the fast scan 1974e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // count. 1975e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart const int kScanTimes = WiFi::kNumFastScanAttempts * 4; 1976e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1977e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // Each time we call FireScanTimer() below, WiFi will post a task to actually 1978e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // run Scan() on the wpa_supplicant proxy. 1979e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)) 1980e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(kScanTimes); 1981e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart { 1982e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart InSequence seq; 1983e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // The scans immediately after the initial scan should happen at the short 1984e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // interval. If we add the initial scan (not invoked in this function) to 1985e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // the ones in the expectation below, we get WiFi::kNumFastScanAttempts at 1986e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // the fast scan interval. 1987e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1988e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 1989e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(WiFi::kNumFastScanAttempts - 1) 1990e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillRepeatedly(Return(true)); 1991e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1992e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // After this, the WiFi device should use the normal scan interval. 1993e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 1994e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, GetScanInterval() * 1000)) 1995e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .Times(kScanTimes - WiFi::kNumFastScanAttempts + 1) 1996e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillRepeatedly(Return(true)); 1997e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 1998e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart for (int i = 0; i < kScanTimes; i++) { 1999e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart FireScanTimer(); 2000e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 2001e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart } 2002e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart} 2003e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2004e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul StewartTEST_F(WiFiScanTest, FastRescan) { 2005e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // This PostTask is a result of the call to Scan(NULL), and is meant to 2006e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // post a task to call Scan() on the wpa_supplicant proxy immediately. 2007e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostTask(_)); 2008e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 2009e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 2010e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillOnce(Return(true)); 2011e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart StartWiFi(); 2012e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2013e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart ExpectInitialScanSequence(); 2014e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2015e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart // If we end up disconnecting, the sequence should repeat. 2016e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart EXPECT_CALL(mock_dispatcher_, PostDelayedTask( 2017e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart _, WiFi::kFastScanIntervalSeconds * 1000)) 2018e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart .WillOnce(Return(true)); 2019e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart RestartFastScanAttempts(); 2020e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2021e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart ExpectInitialScanSequence(); 2022e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart} 2023e369ecef65c622f0f6aaf3012e4ae392a378ee1cPaul Stewart 2024bc6e7390c4401e171ede4dc83b79b316f3e71100Paul StewartTEST_F(WiFiMainTest, EAPCertification) { 2025bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart MockWiFiServiceRefPtr service = MakeMockService(flimflam::kSecurity8021x); 2026bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(*service, AddEAPCertification(_, _)).Times(0); 2027bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2028bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ScopedMockLog log; 2029bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no current service."))); 2030bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart map<string, ::DBus::Variant> args; 2031bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 2032bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 2033bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2034bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart SetCurrentService(service); 2035bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, Log(logging::LOG_ERROR, _, EndsWith("no depth parameter."))); 2036bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 2037bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 2038bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2039bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart const uint32 kDepth = 123; 2040bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart args[wpa_supplicant::kInterfacePropertyDepth].writer().append_uint32(kDepth); 2041bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2042bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(log, 2043bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Log(logging::LOG_ERROR, _, EndsWith("no subject parameter."))); 2044bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 2045bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart Mock::VerifyAndClearExpectations(&log); 2046bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2047bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart const string kSubject("subject"); 2048bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart args[wpa_supplicant::kInterfacePropertySubject].writer() 2049bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart .append_string(kSubject.c_str()); 2050bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart EXPECT_CALL(*service, AddEAPCertification(kSubject, kDepth)).Times(1); 2051bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart ReportCertification(args); 2052bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart} 2053bc6e7390c4401e171ede4dc83b79b316f3e71100Paul Stewart 2054853b81b19ddcd39561df2bde9c61b7106a9ee9d6Chris Masone} // namespace shill 2055