1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2013 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 1621f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart 17d6a8b519e3057f52313e502f502a4819a942e089Ben Chan#include "shill/wifi/wifi_provider.h" 1821f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart 197c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie#include <map> 207c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie#include <set> 217c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie#include <string> 227c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie#include <vector> 237c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 247c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie#include <base/format_macros.h> 25a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan#include <base/strings/string_number_conversions.h> 26a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan#include <base/strings/string_util.h> 27a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan#include <base/strings/stringprintf.h> 28289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#if defined(__ANDROID__) 29289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#include <dbus/service_constants.h> 30289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#else 313c5040174273386868cc8dea8044d22c465885d8Paul Stewart#include <chromeos/dbus/service_constants.h> 32289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#endif // __ANDROID__ 3321f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart#include <gtest/gtest.h> 3421f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart 353c5040174273386868cc8dea8044d22c465885d8Paul Stewart#include "shill/mock_event_dispatcher.h" 3621f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart#include "shill/mock_manager.h" 3721f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart#include "shill/mock_metrics.h" 383c5040174273386868cc8dea8044d22c465885d8Paul Stewart#include "shill/mock_profile.h" 393c5040174273386868cc8dea8044d22c465885d8Paul Stewart#include "shill/mock_store.h" 4002e3dc3bc6e9fdb475bd13944f1c6764c921abbbPeter Qiu#include "shill/net/ieee80211.h" 418d6b59704591ba9fad57751858835dc332dbdd37Peter Qiu#include "shill/net/mock_time.h" 4221f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart#include "shill/nice_mock_control.h" 43da69ecfa906572120eb4f6c405e7d4be38dc9701Ben Chan#include "shill/supplicant/wpa_supplicant.h" 443c5040174273386868cc8dea8044d22c465885d8Paul Stewart#include "shill/technology.h" 45d6a8b519e3057f52313e502f502a4819a942e089Ben Chan#include "shill/wifi/mock_wifi_service.h" 46d6a8b519e3057f52313e502f502a4819a942e089Ben Chan#include "shill/wifi/wifi_endpoint.h" 473c5040174273386868cc8dea8044d22c465885d8Paul Stewart 48a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chanusing base::StringPrintf; 497c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrieusing std::map; 503c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing std::set; 513c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing std::string; 523c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing std::vector; 533c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing ::testing::_; 54facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawalusing ::testing::AnyNumber; 5560a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrieusing ::testing::ContainerEq; 567c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrieusing ::testing::Eq; 577c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrieusing ::testing::Invoke; 583c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing ::testing::Mock; 593c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing ::testing::NiceMock; 603c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing ::testing::Return; 613c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing ::testing::SetArgumentPointee; 62facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawalusing ::testing::StartsWith; 633c5040174273386868cc8dea8044d22c465885d8Paul Stewartusing ::testing::StrictMock; 6421f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart 6521f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewartnamespace shill { 6621f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart 677c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrienamespace { 687c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 697c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrieconst time_t kFirstWeek = 50; 707c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrieconst char kIllegalDayProfile[] = "IllegalDay"; 717c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrieconst time_t kSecondsPerWeek = 60 * 60 * 24 * 7; 727c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrieconst time_t kTestDays = 20; 737c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 747c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie} // namespace 757c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 7621f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewartclass WiFiProviderTest : public testing::Test { 7721f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart public: 7821f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart WiFiProviderTest() 790afd90f73a4a22c7d9d144d8fe5de66b30632e48Ben Chan : metrics_(nullptr), 80bad1c10ffd2d4ac14f7bd9f4ef6a8982e711f566mukesh agrawal manager_(&control_, &dispatcher_, &metrics_), 813c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_(&control_, &dispatcher_, &metrics_, &manager_), 829842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_( 839842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal new NiceMock<MockProfile>( 849842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal &control_, &metrics_, &manager_, "default")), 859842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal user_profile_( 869842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal new NiceMock<MockProfile>(&control_, &metrics_, &manager_, "user")), 877c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie storage_entry_index_(0) { 887c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie provider_.time_ = &time_; 897c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 907c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie string freq_string = StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 917c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 0); 927c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back( 937c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie base::StringPrintf("@%" PRIu64, static_cast<uint64_t>(kFirstWeek))); 947c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back("5001:1"); 957c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back("5002:2"); 967c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 977c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie freq_string = StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 1); 987c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back( 997c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie base::StringPrintf("@%" PRIu64, static_cast<uint64_t>(kFirstWeek) + 1)); 1007c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Overlap one entry with previous block. 1017c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back("5001:1"); 1027c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back("6001:1"); 1037c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back("6002:2"); 1047c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 1057c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie freq_string = StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 2); 1067c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back( 1077c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie base::StringPrintf("@%" PRIu64, static_cast<uint64_t>(kFirstWeek) + 2)); 1087c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back("7001:1"); 1097c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[freq_string].push_back("7002:2"); 1107c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 1117c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[kIllegalDayProfile].push_back("7001:1"); 1127c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie profile_frequency_data_[kIllegalDayProfile].push_back("7002:2"); 1137c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie } 11421f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart 11521f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart virtual ~WiFiProviderTest() {} 11621f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart 1173c5040174273386868cc8dea8044d22c465885d8Paul Stewart virtual void SetUp() { 1189842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*default_profile_, IsDefault()).WillRepeatedly(Return(true)); 1199842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*default_profile_, GetStorage()) 1209842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillRepeatedly(Return(&default_profile_storage_)); 1219842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*default_profile_, GetConstStorage()) 1229842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillRepeatedly(Return(&default_profile_storage_)); 1239842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal 1249842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*user_profile_, IsDefault()).WillRepeatedly(Return(false)); 1259842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*user_profile_, GetStorage()) 1269842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillRepeatedly(Return(&user_profile_storage_)); 1279842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*user_profile_, GetConstStorage()) 1289842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillRepeatedly(Return(&user_profile_storage_)); 129facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal 130facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal // Default expectations for UMA metrics. Individual test cases 131facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal // will override these, by adding later expectations. 132facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(metrics_, SendToUMA( 133facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCount, 134facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal _, 135facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMin, 136facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMax, 137facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)) 138facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .Times(AnyNumber()); 139facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(metrics_, SendToUMA( 140facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal StartsWith("Network.Shill.WiFi.RememberedPrivateNetworkCount."), 141facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal _, 142facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMin, 143facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMax, 144facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)) 145facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .Times(AnyNumber()); 146facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(metrics_, SendToUMA( 147facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal StartsWith("Network.Shill.WiFi.RememberedSharedNetworkCount."), 148facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal _, 149facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMin, 150facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMax, 151facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)) 152facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .Times(AnyNumber()); 1533c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 1543c5040174273386868cc8dea8044d22c465885d8Paul Stewart 1552b363903f38a515001c5edc7202403fcddb15a01Paul Stewart bool GetStringList(const std::string& /*group*/, 1562b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const std::string& key, 1572b363903f38a515001c5edc7202403fcddb15a01Paul Stewart std::vector<std::string>* value) { 1587c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie if (!value) { 1597c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie return false; 1607c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie } 1617c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie if (ContainsKey(profile_frequency_data_, key)) { 1627c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie *value = profile_frequency_data_[key]; 1637c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie return true; 1647c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie } 1657c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie return false; 1667c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie } 1677c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 1682b363903f38a515001c5edc7202403fcddb15a01Paul Stewart bool GetIllegalDayStringList(const std::string& /*group*/, 1692b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const std::string& key, 1702b363903f38a515001c5edc7202403fcddb15a01Paul Stewart std::vector<std::string>* value) { 1717c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie if (!value) { 1727c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie return false; 1737c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie } 1747c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie if (ContainsKey(profile_frequency_data_, key)) { 1757c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie *value = profile_frequency_data_[kIllegalDayProfile]; 1767c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie return true; 1777c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie } 1787c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie return false; 1797c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie } 1807c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 1814ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart // Used by mock invocations of RegisterService() to maintain the side-effect 1824ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart // of assigning a profile to |service|. 1832b363903f38a515001c5edc7202403fcddb15a01Paul Stewart void BindServiceToDefaultProfile(const ServiceRefPtr& service) { 1849842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal service->set_profile(default_profile_); 1859842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal } 1862b363903f38a515001c5edc7202403fcddb15a01Paul Stewart void BindServiceToUserProfile(const ServiceRefPtr& service) { 1879842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal service->set_profile(user_profile_); 1884ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart } 1894ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 19021f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart protected: 1913c5040174273386868cc8dea8044d22c465885d8Paul Stewart typedef scoped_refptr<MockWiFiService> MockWiFiServiceRefPtr; 1923c5040174273386868cc8dea8044d22c465885d8Paul Stewart 1932b363903f38a515001c5edc7202403fcddb15a01Paul Stewart void CreateServicesFromProfile(Profile* profile) { 1949842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal provider_.CreateServicesFromProfile(profile); 1953c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 1963c5040174273386868cc8dea8044d22c465885d8Paul Stewart 1972b363903f38a515001c5edc7202403fcddb15a01Paul Stewart void LoadAndFixupServiceEntries(Profile* profile) { 1989842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal provider_.LoadAndFixupServiceEntries(profile); 1993c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2003c5040174273386868cc8dea8044d22c465885d8Paul Stewart 2017c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie void Save() { 2029842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal provider_.Save(&default_profile_storage_); 2037c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie } 2047c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 2053c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<WiFiServiceRefPtr> GetServices() { 2063c5040174273386868cc8dea8044d22c465885d8Paul Stewart return provider_.services_; 2073c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2083c5040174273386868cc8dea8044d22c465885d8Paul Stewart 2092b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const WiFiProvider::EndpointServiceMap& GetServiceByEndpoint() { 2100427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart return provider_.service_by_endpoint_; 2110427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart } 2120427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart 2136c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart bool GetRunning() { 2146c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart return provider_.running_; 2156c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart } 2166c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart 2172b363903f38a515001c5edc7202403fcddb15a01Paul Stewart void AddStringParameterToStorage(MockStore* storage, 2182b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const string& id, 2192b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const string& key, 2202b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const string& value) { 2219842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*storage, GetString(id, key, _)) 2223c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(DoAll(SetArgumentPointee<2>(value), 2233c5040174273386868cc8dea8044d22c465885d8Paul Stewart Return(true))); 2243c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2253c5040174273386868cc8dea8044d22c465885d8Paul Stewart 2269842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal // Adds service to profile's storage. But does not set profile on the Service. 2272b363903f38a515001c5edc7202403fcddb15a01Paul Stewart string AddServiceToProfileStorage(Profile* profile, 2282b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const char* ssid, 2292b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const char* mode, 2302b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const char* security, 2319842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal bool is_hidden, 2329842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal bool provide_hidden) { 2333a62e235646ec19bee71e8dbee5208282dcd13b5Alex Vakulenko string id = base::StringPrintf("entry_%d", storage_entry_index_); 234fa1eb722d0742d89c26b9c5c81d02ef2a138cbf2Alex Vakulenko auto profile_storage = static_cast<MockStore*>(profile->GetStorage()); 2359842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*profile_storage, GetString(id, _, _)) 2369842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillRepeatedly(Return(false)); 23718213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu AddStringParameterToStorage( 23818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu profile_storage, id, WiFiService::kStorageType, kTypeWifi); 2393c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (ssid) { 2403c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string ssid_string(ssid); 2413c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string hex_ssid( 2423c5040174273386868cc8dea8044d22c465885d8Paul Stewart base::HexEncode(ssid_string.data(), ssid_string.size())); 2439842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddStringParameterToStorage( 2449842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal profile_storage, id, WiFiService::kStorageSSID, hex_ssid); 2453c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2463c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (mode) { 2479842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddStringParameterToStorage( 2489842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal profile_storage, id, WiFiService::kStorageMode, mode); 2493c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2503c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (security) { 2519842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddStringParameterToStorage( 2529842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal profile_storage, id, WiFiService::kStorageSecurity, security); 2533c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2543c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (provide_hidden) { 2559842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*profile_storage, GetBool(id, kWifiHiddenSsid, _)) 2563c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly( 2573c5040174273386868cc8dea8044d22c465885d8Paul Stewart DoAll(SetArgumentPointee<2>(is_hidden), Return(true))); 2583c5040174273386868cc8dea8044d22c465885d8Paul Stewart } else { 2599842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(*profile_storage, GetBool(id, kWifiHiddenSsid, _)) 2603c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(false)); 2613c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2623c5040174273386868cc8dea8044d22c465885d8Paul Stewart storage_entry_index_++; 2633c5040174273386868cc8dea8044d22c465885d8Paul Stewart return id; 2643c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2653c5040174273386868cc8dea8044d22c465885d8Paul Stewart 2662b363903f38a515001c5edc7202403fcddb15a01Paul Stewart void SetServiceParameters(const char* ssid, 2672b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const char* mode, 2682b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const char* security_class, 269d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart bool is_hidden, 270d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart bool provide_hidden, 2712b363903f38a515001c5edc7202403fcddb15a01Paul Stewart KeyValueStore* args) { 272f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan args->SetString(kTypeProperty, kTypeWifi); 2733c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (ssid) { 2744539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart // TODO(pstew): When Chrome switches to using kWifiHexSsid primarily for 2754539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart // GetService and friends, we should switch to doing so here ourselves. 276f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan args->SetString(kSSIDProperty, ssid); 2773c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2783c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (mode) { 279f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan args->SetString(kModeProperty, mode); 2803c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2817116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal if (security_class) { 2827116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args->SetString(kSecurityClassProperty, security_class); 2833c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 2843c5040174273386868cc8dea8044d22c465885d8Paul Stewart if (provide_hidden) { 285f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan args->SetBool(kWifiHiddenSsid, is_hidden); 2863c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 287d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart } 288d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 2892b363903f38a515001c5edc7202403fcddb15a01Paul Stewart ServiceRefPtr CreateTemporaryService(const char* ssid, 2902b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const char* mode, 2912b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const char* security, 2920e51ad959ff2d81472e053b2809991082f976362Paul Stewart bool is_hidden, 2930e51ad959ff2d81472e053b2809991082f976362Paul Stewart bool provide_hidden, 2942b363903f38a515001c5edc7202403fcddb15a01Paul Stewart Error* error) { 295d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart KeyValueStore args; 296d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart SetServiceParameters( 297d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart ssid, mode, security, is_hidden, provide_hidden, &args); 298d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart return provider_.CreateTemporaryService(args, error); 299d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart } 300d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 3012b363903f38a515001c5edc7202403fcddb15a01Paul Stewart WiFiServiceRefPtr GetService(const char* ssid, 3022b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const char* mode, 3032b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const char* security_class, 304d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart bool is_hidden, 305d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart bool provide_hidden, 3062b363903f38a515001c5edc7202403fcddb15a01Paul Stewart Error* error) { 307d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart KeyValueStore args; 308d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart SetServiceParameters( 3097116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal ssid, mode, security_class, is_hidden, provide_hidden, &args); 3100e51ad959ff2d81472e053b2809991082f976362Paul Stewart return provider_.GetWiFiService(args, error); 3110e51ad959ff2d81472e053b2809991082f976362Paul Stewart } 3120e51ad959ff2d81472e053b2809991082f976362Paul Stewart 3132b363903f38a515001c5edc7202403fcddb15a01Paul Stewart WiFiServiceRefPtr GetWiFiService(const KeyValueStore& args, Error* error) { 3140e51ad959ff2d81472e053b2809991082f976362Paul Stewart return provider_.GetWiFiService(args, error); 3153c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3163c5040174273386868cc8dea8044d22c465885d8Paul Stewart 3172b363903f38a515001c5edc7202403fcddb15a01Paul Stewart WiFiServiceRefPtr FindService(const vector<uint8_t>& ssid, 3182b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const string& mode, 3192b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const string& security) { 3203c5040174273386868cc8dea8044d22c465885d8Paul Stewart return provider_.FindService(ssid, mode, security); 3213c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3222b363903f38a515001c5edc7202403fcddb15a01Paul Stewart WiFiEndpointRefPtr MakeEndpoint(const string& ssid, const string& bssid, 3237fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t frequency, int16_t signal_dbm) { 3243c5040174273386868cc8dea8044d22c465885d8Paul Stewart return WiFiEndpoint::MakeOpenEndpoint( 3250afd90f73a4a22c7d9d144d8fe5de66b30632e48Ben Chan nullptr, nullptr, ssid, bssid, 3260afd90f73a4a22c7d9d144d8fe5de66b30632e48Ben Chan WPASupplicant::kNetworkModeInfrastructure, frequency, signal_dbm); 3273c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3282b363903f38a515001c5edc7202403fcddb15a01Paul Stewart MockWiFiServiceRefPtr AddMockService(const vector<uint8_t>& ssid, 3292b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const string& mode, 3302b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const string& security, 3313c5040174273386868cc8dea8044d22c465885d8Paul Stewart bool hidden_ssid) { 3323c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = new MockWiFiService( 3333c5040174273386868cc8dea8044d22c465885d8Paul Stewart &control_, 3343c5040174273386868cc8dea8044d22c465885d8Paul Stewart &dispatcher_, 3353c5040174273386868cc8dea8044d22c465885d8Paul Stewart &metrics_, 3363c5040174273386868cc8dea8044d22c465885d8Paul Stewart &manager_, 3373c5040174273386868cc8dea8044d22c465885d8Paul Stewart &provider_, 3383c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssid, 3393c5040174273386868cc8dea8044d22c465885d8Paul Stewart mode, 3403c5040174273386868cc8dea8044d22c465885d8Paul Stewart security, 3413c5040174273386868cc8dea8044d22c465885d8Paul Stewart hidden_ssid); 3423c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.services_.push_back(service); 3433c5040174273386868cc8dea8044d22c465885d8Paul Stewart return service; 3443c5040174273386868cc8dea8044d22c465885d8Paul Stewart } 3450427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart void AddEndpointToService(WiFiServiceRefPtr service, 3462b363903f38a515001c5edc7202403fcddb15a01Paul Stewart const WiFiEndpointConstRefPtr& endpoint) { 3470951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko provider_.service_by_endpoint_[endpoint.get()] = service; 3480427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart } 34960a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie 3502b363903f38a515001c5edc7202403fcddb15a01Paul Stewart void BuildFreqCountStrings(vector<string>* strings) { 35160a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie // NOTE: These strings match the frequencies in |BuildFreqCountMap|. They 35260a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie // are also provided, here, in sorted order to match the frequency map 35360a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie // (iterators for which will provide them in frequency-sorted order). 3542b363903f38a515001c5edc7202403fcddb15a01Paul Stewart static const char* kStrings[] = { 3557c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie "@20", "5180:14", "5240:16", "5745:7", "5765:4", "5785:14", "5805:5" 35660a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie }; 35760a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie if (!strings) { 35860a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie LOG(ERROR) << "NULL |strings|."; 35960a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie return; 36060a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie } 36160a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie for (size_t i = 0; i < arraysize(kStrings); ++i) { 36260a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie (*strings).push_back(kStrings[i]); 36360a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie } 36460a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie } 36560a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie 3662b363903f38a515001c5edc7202403fcddb15a01Paul Stewart void BuildFreqCountMap(WiFiProvider::ConnectFrequencyMap* frequencies) { 36760a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie // NOTE: These structures match the strings in |BuildFreqCountStrings|. 36860a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie static const struct FreqCount { 3697fab89734d88724a288e96a9996b15548c5294c7Ben Chan uint16_t freq; 3707fab89734d88724a288e96a9996b15548c5294c7Ben Chan int64_t count; 37160a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie } kConnectFreq[] = { 37260a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie {5180, 14}, 37360a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie {5240, 16}, 37460a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie {5745, 7}, 37560a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie {5765, 4}, 37660a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie {5785, 14}, 37760a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie {5805, 5} 37860a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie }; 37960a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie if (!frequencies) { 38060a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie LOG(ERROR) << "NULL |frequencies|."; 38160a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie return; 38260a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie } 3830951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko for (size_t i = 0; i < arraysize(kConnectFreq); ++i) { 38460a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie (*frequencies)[kConnectFreq[i].freq] = kConnectFreq[i].count; 38560a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie } 38660a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie } 38760a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie 3887c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie void LoadConnectCountByFrequency(time_t today_seconds) { 3897c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie provider_.time_ = &time_; 3907c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_CALL(time_, GetSecondsSinceEpoch()).WillOnce(Return(today_seconds)); 3917c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie const string kGroupId = 392f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan StringPrintf("%s_0_0_%s_%s", kTypeWifi, kModeManaged, kSecurityNone); 3939842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 3947c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie GetString(kGroupId, _, _)).WillRepeatedly(Return(true)); 3957c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie set<string> groups; 3967c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie groups.insert(kGroupId); 3979842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetGroups()).WillOnce(Return(groups)); 3987c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Provide data for block[0] through block[2] (block[3] is empty). 3999842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 4009842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 4019842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetStringList( 4029842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal WiFiProvider::kStorageId, 4039842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 0), _)). 4047c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Invoke(this, &WiFiProviderTest::GetStringList)); 4059842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 4069842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 4079842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetStringList( 4089842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal WiFiProvider::kStorageId, 4099842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 1), _)). 4107c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Invoke(this, &WiFiProviderTest::GetStringList)); 4119842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 4129842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 4139842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetStringList( 4149842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal WiFiProvider::kStorageId, 4159842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 2), _)). 4167c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Invoke(this, &WiFiProviderTest::GetStringList)); 4179842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 4189842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 4199842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetStringList( 4209842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal WiFiProvider::kStorageId, 4219842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 3), _)). 4227c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Invoke(this, &WiFiProviderTest::GetStringList)); 4237c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 4240951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko LoadAndFixupServiceEntries(default_profile_.get()); 4257c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie } 4267c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 4277c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie map<string, vector<string>> profile_frequency_data_; 42821f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart NiceMockControl control_; 4293c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockEventDispatcher dispatcher_; 43021f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart MockMetrics metrics_; 4317c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie MockTime time_; 4323c5040174273386868cc8dea8044d22c465885d8Paul Stewart StrictMock<MockManager> manager_; 43321f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart WiFiProvider provider_; 4349842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal scoped_refptr<MockProfile> default_profile_; 4359842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal scoped_refptr<MockProfile> user_profile_; 4369842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StrictMock<MockStore> default_profile_storage_; 4379842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StrictMock<MockStore> user_profile_storage_; 4389842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal int storage_entry_index_; // shared across profiles 43921f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart}; 44021f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart 4413c5040174273386868cc8dea8044d22c465885d8Paul StewartMATCHER(TypeWiFiPropertyMatch, "") { 442d31fb5812df751f0bfac41e2c0489e1a8a18cfd7Peter Qiu return arg.properties().size() == 1 && 443f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan arg.LookupString(kTypeProperty, "") == kTypeWifi; 4443c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 4453c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4463c5040174273386868cc8dea8044d22c465885d8Paul StewartMATCHER_P(RefPtrMatch, ref, "") { 4473c5040174273386868cc8dea8044d22c465885d8Paul Stewart return ref.get() == arg.get(); 4483c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 4493c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4503c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, Start) { 4513c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Doesn't do anything really. Just testing for no crash. 4523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 4536c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart EXPECT_FALSE(GetRunning()); 4543c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.Start(); 4553c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 4566c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart EXPECT_TRUE(GetRunning()); 4570427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_TRUE(GetServiceByEndpoint().empty()); 4589d97b7deda3ae604d718873207a951f62d418b34Paul Stewart EXPECT_FALSE(provider_.disable_vht()); 4593c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 4603c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4613c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, Stop) { 4623c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0 = AddMockService(vector<uint8_t>(1, '0'), 463f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 464f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 4653c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 4663c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1 = AddMockService(vector<uint8_t>(1, '1'), 467f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 468f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 4693c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 4700427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart WiFiEndpointRefPtr endpoint = MakeEndpoint("", "00:00:00:00:00:00", 0, 0); 4710427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart AddEndpointToService(service0, endpoint); 4720427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart 4733c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(2, GetServices().size()); 4740427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_FALSE(GetServiceByEndpoint().empty()); 4753c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, ResetWiFi()).Times(1); 4763c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, ResetWiFi()).Times(1); 4773c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, DeregisterService(RefPtrMatch(service0))).Times(1); 4783c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, DeregisterService(RefPtrMatch(service1))).Times(1); 4793c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.Stop(); 4803c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Verify now, so it's clear that this happened as a result of the call 4813c5040174273386868cc8dea8044d22c465885d8Paul Stewart // above, and not anything in the destructor(s). 4820951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service0.get()); 4830951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service1.get()); 4843c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 4853c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 4860427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_TRUE(GetServiceByEndpoint().empty()); 4873c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 4883c5040174273386868cc8dea8044d22c465885d8Paul Stewart 4893c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileWithNoGroups) { 4909842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 4919842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 4923c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(set<string>())); 4934ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 4944ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 4954ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 0, 4964ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 4974ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 4984ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 4990951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 5003c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 5013c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 5023c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5033c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileMissingSSID) { 5043c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 505f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan groups.insert( 5069842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 5070951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), nullptr, kModeManaged, kSecurityNone, false, 5080951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko true)); 5099842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 5109842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 5113c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 5124ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 5134ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 5144ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 0, 5154ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 5164ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 5174ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 5180951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 5193c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 5203c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 5213c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5223c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileEmptySSID) { 5233c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 524f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan groups.insert( 5259842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 5260951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), "", kModeManaged, kSecurityNone, false, 5270951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko true)); 5289842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 5299842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 5303c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 5314ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 5324ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 5334ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 0, 5344ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 5354ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 5364ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 5370951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 5383c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 5393c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 5403c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5413c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileMissingMode) { 5423c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 5439842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal groups.insert( 5449842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 5450951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), "foo", nullptr, kSecurityNone, false, true)); 5469842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 5479842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 5483c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 5494ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 5504ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 5514ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 0, 5524ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 5534ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 5544ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 5550951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 5563c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 5573c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 5583c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5593c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileEmptyMode) { 5603c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 5619842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal groups.insert( 5629842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 5630951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), "foo", "", kSecurityNone, false, true)); 5649842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 5659842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 5663c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 5674ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 5684ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 5694ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 0, 5704ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 5714ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 5724ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 5730951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 5743c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 5753c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 5763c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5773c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileMissingSecurity) { 5783c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 5799842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal groups.insert( 5809842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 5810951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), "foo", kModeManaged, nullptr, false, true)); 5829842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 5839842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 5843c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 5854ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 5864ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 5874ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 0, 5884ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 5894ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 5904ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 5910951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 5923c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 5933c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 5943c5040174273386868cc8dea8044d22c465885d8Paul Stewart 5953c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileEmptySecurity) { 5963c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 5979842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal groups.insert( 5989842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 5990951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), "foo", kModeManaged, "", false, true)); 6009842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 6019842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 6023c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 6034ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 6044ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 6054ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 0, 6064ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 6074ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 6084ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 6090951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 6103c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 6113c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 6123c5040174273386868cc8dea8044d22c465885d8Paul Stewart 6133c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileMissingHidden) { 6143c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 615f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan groups.insert( 6169842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 6170951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), "foo", kModeManaged, kSecurityNone, false, 6180951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko false)); 6199842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 6209842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 6213c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 6224ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 6234ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 6244ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 0, 6254ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 6264ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 6274ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 6280951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 6293c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 6303c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 6313c5040174273386868cc8dea8044d22c465885d8Paul Stewart 6323c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileSingle) { 6333c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 6343c5040174273386868cc8dea8044d22c465885d8Paul Stewart string kSSID("foo"); 6359842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal groups.insert( 6369842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 6370951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), 6389842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal kSSID.c_str(), kModeManaged, kSecurityNone, false, true)); 6399842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 6409842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 6413c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 6424ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(manager_, RegisterService(_)) 6439842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillOnce(Invoke(this, &WiFiProviderTest::BindServiceToDefaultProfile)); 6449842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(manager_, IsServiceEphemeral(_)).WillRepeatedly(Return(false)); 6454ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 6464ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 6474ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 1, 6484ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 6494ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 6504ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)).Times(2); 6510951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 6523c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 6533c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 6543c5040174273386868cc8dea8044d22c465885d8Paul Stewart 6553c5040174273386868cc8dea8044d22c465885d8Paul Stewart const WiFiServiceRefPtr service = GetServices().front(); 6563c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string service_ssid(service->ssid().begin(), service->ssid().end()); 6573c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(kSSID, service_ssid); 658f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_EQ(kModeManaged, service->mode()); 659f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_TRUE(service->IsSecurityMatch(kSecurityNone)); 6603c5040174273386868cc8dea8044d22c465885d8Paul Stewart 6613c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 6629842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(manager_, IsServiceEphemeral(_)).WillRepeatedly(Return(false)); 6630951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 6643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 6653c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 6663c5040174273386868cc8dea8044d22c465885d8Paul Stewart 6673c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileHiddenButConnected) { 6683c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 6693c5040174273386868cc8dea8044d22c465885d8Paul Stewart string kSSID("foo"); 6709842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal groups.insert( 6719842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 6720951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), 6739842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal kSSID.c_str(), kModeManaged, kSecurityNone, true, true)); 6749842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 6759842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 6763c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 6774ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(manager_, RegisterService(_)) 6789842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillOnce(Invoke(this, &WiFiProviderTest::BindServiceToDefaultProfile)); 6799842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(manager_, IsServiceEphemeral(_)).WillRepeatedly(Return(false)); 6803c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, IsTechnologyConnected(Technology::kWifi)) 6813c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(true)); 68268d4109ff0176f7e5a9b67b916478d638aac577aWade Guthrie EXPECT_CALL(manager_, RequestScan(_, _, _)).Times(0); 6834ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 6844ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 6854ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 1, 6864ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 6874ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 6884ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)).Times(2); 6890951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 6903c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 6913c5040174273386868cc8dea8044d22c465885d8Paul Stewart 6923c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 6933c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, IsTechnologyConnected(_)).Times(0); 6949842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(manager_, IsServiceEphemeral(_)).WillRepeatedly(Return(false)); 6950951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 6963c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 6973c5040174273386868cc8dea8044d22c465885d8Paul Stewart 6983c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateServicesFromProfileHiddenNotConnected) { 6993c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 7003c5040174273386868cc8dea8044d22c465885d8Paul Stewart string kSSID("foo"); 7010951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko groups.insert(AddServiceToProfileStorage(default_profile_.get(), 702f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSSID.c_str(), kModeManaged, kSecurityNone, true, true)); 7039842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 7049842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 7053c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 7064ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(manager_, RegisterService(_)) 7079842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillOnce(Invoke(this, &WiFiProviderTest::BindServiceToDefaultProfile)); 7089842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(manager_, IsServiceEphemeral(_)).WillRepeatedly(Return(false)); 7093c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, IsTechnologyConnected(Technology::kWifi)) 7103c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(false)); 71168d4109ff0176f7e5a9b67b916478d638aac577aWade Guthrie EXPECT_CALL(manager_, RequestScan(Device::kProgressiveScan, 712f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kTypeWifi, _)).Times(1); 7134ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 7144ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 7154ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 1, 7164ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 7174ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 7184ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)).Times(2); 7190951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 7203c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 7213c5040174273386868cc8dea8044d22c465885d8Paul Stewart 7223c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 7233c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, IsTechnologyConnected(_)).Times(0); 72468d4109ff0176f7e5a9b67b916478d638aac577aWade Guthrie EXPECT_CALL(manager_, RequestScan(_, _, _)).Times(0); 7259842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(manager_, IsServiceEphemeral(_)).WillRepeatedly(Return(false)); 7260951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 7273c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 7283c5040174273386868cc8dea8044d22c465885d8Paul Stewart 72918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter QiuTEST_F(WiFiProviderTest, CreateTemporaryServiceFromProfileNonWiFi) { 73018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu const string kEntryName("name"); 73118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu auto profile_storage = 732fa1eb722d0742d89c26b9c5c81d02ef2a138cbf2Alex Vakulenko static_cast<MockStore*>(default_profile_->GetStorage()); 73318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_CALL(*profile_storage, 73418213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu GetString(kEntryName, WiFiService::kStorageType, _)) 73518213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu .WillOnce(Return(false)); 73618213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu Error error; 73718213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_EQ(nullptr, 73818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu provider_.CreateTemporaryServiceFromProfile( 73918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_, kEntryName, &error)); 74018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_FALSE(error.IsSuccess()); 74118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_THAT(error.message(), 74218213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu StartsWith("Unspecified or invalid network type")); 74318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu} 74418213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 74518213652e2ce4c6e4354951e5b665097b7a7aa6bPeter QiuTEST_F(WiFiProviderTest, CreateTemporaryServiceFromProfileMissingSSID) { 74618213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu string entry_name = AddServiceToProfileStorage( 74718213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_.get(), nullptr, kModeManaged, kSecurityNone, false, 74818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu true); 74918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu Error error; 75018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_EQ(nullptr, 75118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu provider_.CreateTemporaryServiceFromProfile( 75218213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_, entry_name, &error)); 75318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_FALSE(error.IsSuccess()); 75418213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_THAT(error.message(), StartsWith("Unspecified or invalid SSID")); 75518213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu} 75618213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 75718213652e2ce4c6e4354951e5b665097b7a7aa6bPeter QiuTEST_F(WiFiProviderTest, CreateTemporaryServiceFromProfileMissingMode) { 75818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu string entry_name = AddServiceToProfileStorage( 75918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_.get(), "foo", "", kSecurityNone, false, true); 76018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 76118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu Error error; 76218213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_EQ(nullptr, 76318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu provider_.CreateTemporaryServiceFromProfile( 76418213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_, entry_name, &error)); 76518213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_FALSE(error.IsSuccess()); 76618213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_THAT(error.message(), StartsWith("Network mode not specified")); 76718213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu} 76818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 76918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter QiuTEST_F(WiFiProviderTest, CreateTemporaryServiceFromProfileMissingSecurity) { 77018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu string entry_name = AddServiceToProfileStorage( 77118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_.get(), "foo", kModeManaged, "", false, true); 77218213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 77318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu Error error; 77418213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_EQ(nullptr, 77518213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu provider_.CreateTemporaryServiceFromProfile( 77618213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_, entry_name, &error)); 77718213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_FALSE(error.IsSuccess()); 77818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_THAT(error.message(), 77918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu StartsWith("Unspecified or invalid security mode")); 78018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu} 78118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 78218213652e2ce4c6e4354951e5b665097b7a7aa6bPeter QiuTEST_F(WiFiProviderTest, CreateTemporaryServiceFromProfileMissingHidden) { 78318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu string entry_name = AddServiceToProfileStorage( 78418213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_.get(), "foo", kModeManaged, kSecurityNone, false, false); 78518213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 78618213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu Error error; 78718213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_EQ(nullptr, 78818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu provider_.CreateTemporaryServiceFromProfile( 78918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_, entry_name, &error)); 79018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_FALSE(error.IsSuccess()); 79118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_THAT(error.message(), 79218213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu StartsWith("Hidden SSID not specified")); 79318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu} 79418213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 79518213652e2ce4c6e4354951e5b665097b7a7aa6bPeter QiuTEST_F(WiFiProviderTest, CreateTemporaryServiceFromProfile) { 79618213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu string entry_name = AddServiceToProfileStorage( 79718213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_.get(), "foo", kModeManaged, kSecurityNone, false, true); 79818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 79918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu Error error; 80018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_NE(nullptr, 80118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu provider_.CreateTemporaryServiceFromProfile( 80218213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu default_profile_, entry_name, &error)); 80318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu EXPECT_TRUE(error.IsSuccess()); 80418213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu} 80518213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 8063c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, CreateTwoServices) { 8073c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 808f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan groups.insert( 8099842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 8100951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), "foo", kModeManaged, kSecurityNone, false, 8110951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko true)); 812f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan groups.insert( 8139842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal AddServiceToProfileStorage( 8140951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), "bar", kModeManaged, kSecurityNone, true, 8150951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko true)); 8169842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 8179842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 8183c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillRepeatedly(Return(groups)); 8194ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(manager_, RegisterService(_)) 8204ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart .Times(2) 8219842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillRepeatedly( 8229842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal Invoke(this, &WiFiProviderTest::BindServiceToDefaultProfile)); 8234ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(manager_, IsServiceEphemeral(_)).WillRepeatedly(Return(false)); 8243c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, IsTechnologyConnected(Technology::kWifi)) 8253c5040174273386868cc8dea8044d22c465885d8Paul Stewart .WillOnce(Return(true)); 826f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_CALL(manager_, RequestScan(_, kTypeWifi, _)).Times(0); 8274ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart EXPECT_CALL(metrics_, SendToUMA( 8284ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCount, 8294ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart 2, 8304ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMin, 8314ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountMax, 8324ef524d362dd96f987cf34ed412486a7ed0d9863Paul Stewart Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 8330951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 8343c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 8353c5040174273386868cc8dea8044d22c465885d8Paul Stewart 8363c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(2, GetServices().size()); 8373c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 8383c5040174273386868cc8dea8044d22c465885d8Paul Stewart 839facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawalTEST_F(WiFiProviderTest, ServiceSourceStats) { 840facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal set<string> default_profile_groups; 841facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal default_profile_groups.insert( 842facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal AddServiceToProfileStorage( 8430951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko default_profile_.get(), "foo", kModeManaged, kSecurityWpa, false, 8440951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko true)); 845facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(default_profile_storage_, 846facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 847facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .WillRepeatedly(Return(default_profile_groups)); 848facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(manager_, RegisterService(_)) 849facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .WillOnce(Invoke(this, &WiFiProviderTest::BindServiceToDefaultProfile)); 850facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(manager_, IsServiceEphemeral(_)).WillRepeatedly(Return(false)); 851facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal // Processing default profile does not generate UMA metrics. 852facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(metrics_, SendToUMA( 853facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal StartsWith("Network.Shill.WiFi.RememberedSystemNetworkCount."), 854facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal _, _, _, _)) 855facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .Times(0); 856facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(metrics_, SendToUMA( 857facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal StartsWith("Network.Shill.WiFi.RememberedUserNetworkCount."), 858facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal _, _, _, _)) 859facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .Times(0); 8600951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(default_profile_.get()); 861facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Mock::VerifyAndClearExpectations(&manager_); 862facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal 863facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal set<string> user_profile_groups; 864facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal user_profile_groups.insert( 865facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal AddServiceToProfileStorage( 8660951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko user_profile_.get(), "bar", kModeManaged, kSecurityRsn, false, true)); 867facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(user_profile_storage_, 868facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal GetGroupsWithProperties(TypeWiFiPropertyMatch())) 869facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .WillRepeatedly(Return(user_profile_groups)); 870facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(manager_, RegisterService(_)) 871facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .WillOnce(Invoke(this, &WiFiProviderTest::BindServiceToUserProfile)); 872facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(manager_, IsServiceEphemeral(_)).WillRepeatedly(Return(false)); 873facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal // Processing user profile generates metrics for both, default profile, 874facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal // and user profile. 875facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(metrics_, SendToUMA( 876facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal StartsWith("Network.Shill.WiFi.RememberedSystemNetworkCount."), 877facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal 0, 878facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMin, 879facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMax, 880facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)) 881facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .Times(3); // none, wep, 802.1x 882facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(metrics_, SendToUMA( 883facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal StartsWith("Network.Shill.WiFi.RememberedUserNetworkCount."), 884facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal 0, 885facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMin, 886facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMax, 887facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)) 888facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal .Times(3); // none, wep, 802.1x 889facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(metrics_, SendToUMA( 890facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal StartsWith("Network.Shill.WiFi.RememberedSystemNetworkCount.psk"), 891facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal 1, 892facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMin, 893facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMax, 894facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 895facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal EXPECT_CALL(metrics_, SendToUMA( 896facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal StartsWith("Network.Shill.WiFi.RememberedUserNetworkCount.psk"), 897facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal 1, 898facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMin, 899facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountMax, 900facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal Metrics::kMetricRememberedWiFiNetworkCountNumBuckets)); 9010951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko CreateServicesFromProfile(user_profile_.get()); 902facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal} 903facf7ad71dd19d113f1457d89e186d5356b130b7mukesh agrawal 9044fe4ec22a0c7d3d08c81b436d44e8c97d59bd3afPaul StewartTEST_F(WiFiProviderTest, GetServiceEmptyMode) { 9053c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 906f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_FALSE(GetService("foo", "", kSecurityNone, 9073c5040174273386868cc8dea8044d22c465885d8Paul Stewart false, false, &error).get()); 9083c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(Error::kNotSupported, error.type()); 9094fe4ec22a0c7d3d08c81b436d44e8c97d59bd3afPaul Stewart} 9104fe4ec22a0c7d3d08c81b436d44e8c97d59bd3afPaul Stewart 9114fe4ec22a0c7d3d08c81b436d44e8c97d59bd3afPaul StewartTEST_F(WiFiProviderTest, GetServiceNoMode) { 9124fe4ec22a0c7d3d08c81b436d44e8c97d59bd3afPaul Stewart Error error; 9134fe4ec22a0c7d3d08c81b436d44e8c97d59bd3afPaul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 9140afd90f73a4a22c7d9d144d8fe5de66b30632e48Ben Chan EXPECT_TRUE(GetService("foo", nullptr, kSecurityNone, 9154fe4ec22a0c7d3d08c81b436d44e8c97d59bd3afPaul Stewart false, false, &error).get()); 9164fe4ec22a0c7d3d08c81b436d44e8c97d59bd3afPaul Stewart EXPECT_TRUE(error.IsSuccess()); 9173c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 9183c5040174273386868cc8dea8044d22c465885d8Paul Stewart 9193c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, GetServiceBadMode) { 9203c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 921d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_FALSE(GetService("foo", "BogoMesh", 922f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 9233c5040174273386868cc8dea8044d22c465885d8Paul Stewart false, false, &error).get()); 9243c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(Error::kNotSupported, error.type()); 9253c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ("service mode is unsupported", error.message()); 9263c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 9273c5040174273386868cc8dea8044d22c465885d8Paul Stewart 9283c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, GetServiceNoSSID) { 9293c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 9300afd90f73a4a22c7d9d144d8fe5de66b30632e48Ben Chan EXPECT_FALSE(GetService(nullptr, kModeManaged, 931f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, false, false, 9323c5040174273386868cc8dea8044d22c465885d8Paul Stewart &error).get()); 9333c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(Error::kInvalidArguments, error.type()); 9343c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ("must specify SSID", error.message()); 9353c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 9363c5040174273386868cc8dea8044d22c465885d8Paul Stewart 9373c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, GetServiceEmptySSID) { 9383c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 939f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_FALSE(GetService("", kModeManaged, 940f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, false, false, 9413c5040174273386868cc8dea8044d22c465885d8Paul Stewart &error).get()); 9423c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(Error::kInvalidNetworkName, error.type()); 9433c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ("SSID is too short", error.message()); 9443c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 9453c5040174273386868cc8dea8044d22c465885d8Paul Stewart 9463c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, GetServiceLongSSID) { 9473c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 9483c5040174273386868cc8dea8044d22c465885d8Paul Stewart string ssid(IEEE_80211::kMaxSSIDLen + 1, '0'); 949f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_FALSE(GetService(ssid.c_str(), kModeManaged, 950f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, false, false, 9513c5040174273386868cc8dea8044d22c465885d8Paul Stewart &error).get()); 9523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(Error::kInvalidNetworkName, error.type()); 9533c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ("SSID is too long", error.message()); 9543c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 9553c5040174273386868cc8dea8044d22c465885d8Paul Stewart 9563c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, GetServiceJustLongEnoughSSID) { 9573c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 9583c5040174273386868cc8dea8044d22c465885d8Paul Stewart string ssid(IEEE_80211::kMaxSSIDLen, '0'); 9593c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 960f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_TRUE(GetService(ssid.c_str(), kModeManaged, 961f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, false, false, 9623c5040174273386868cc8dea8044d22c465885d8Paul Stewart &error)); 9633c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(error.IsSuccess()); 9643c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 9653c5040174273386868cc8dea8044d22c465885d8Paul Stewart 9667116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawalTEST_F(WiFiProviderTest, GetServiceBadSecurityClass) { 9673c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 968f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_FALSE(GetService("foo", kModeManaged, 9697116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal kSecurityRsn, false, false, 9703c5040174273386868cc8dea8044d22c465885d8Paul Stewart &error)); 9713c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(Error::kNotSupported, error.type()); 9727116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_EQ("security class is unsupported", error.message()); 9733c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 9743c5040174273386868cc8dea8044d22c465885d8Paul Stewart 9753c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, GetServiceMinimal) { 9763c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 9773c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string kSSID("foo"); 9783c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 979f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr service = GetService(kSSID.c_str(), kModeManaged, 9800afd90f73a4a22c7d9d144d8fe5de66b30632e48Ben Chan nullptr, false, false, &error); 9813c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(service.get()); 9823c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(error.IsSuccess()); 9833c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string service_ssid(service->ssid().begin(), service->ssid().end()); 9843c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(kSSID, service_ssid); 985f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_EQ(kModeManaged, service->mode()); 9863c5040174273386868cc8dea8044d22c465885d8Paul Stewart 9873c5040174273386868cc8dea8044d22c465885d8Paul Stewart // These two should be set to their default values if not specified. 988f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_TRUE(service->IsSecurityMatch(kSecurityNone)); 9893c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(service->hidden_ssid()); 9903c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 9913c5040174273386868cc8dea8044d22c465885d8Paul Stewart 9923c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, GetServiceFullySpecified) { 9933c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 9943c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string kSSID("bar"); 9953c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 996f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr service0 = GetService( 997f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSSID.c_str(), kModeManaged, kSecurityPsk, false, true, &error); 9983c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 9993c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(error.IsSuccess()); 10003c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string service_ssid(service0->ssid().begin(), service0->ssid().end()); 10013c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(kSSID, service_ssid); 1002f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_EQ(kModeManaged, service0->mode()); 1003f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_TRUE(service0->IsSecurityMatch(kSecurityPsk)); 10043c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(service0->hidden_ssid()); 10053c5040174273386868cc8dea8044d22c465885d8Paul Stewart 10063c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Getting the same service parameters (even with a different hidden 10073c5040174273386868cc8dea8044d22c465885d8Paul Stewart // parameter) should return the same service. 10083c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 10093c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service1 = 1010f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan GetService(kSSID.c_str(), kModeManaged, kSecurityPsk, true, true, &error); 10113c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 10123c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0.get(), service1.get()); 10133c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 10143c5040174273386868cc8dea8044d22c465885d8Paul Stewart 10153c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Getting the same ssid with different other parameters should return 10163c5040174273386868cc8dea8044d22c465885d8Paul Stewart // a different service. 10173c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 1018f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr service2 = GetService( 1019f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSSID.c_str(), kModeManaged, kSecurityNone, true, true, &error); 10203c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 10213c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_NE(service0.get(), service2.get()); 10223c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(2, GetServices().size()); 10233c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 10243c5040174273386868cc8dea8044d22c465885d8Paul Stewart 10254539d26229b9f37f7047ad32a4f02becf4cd32b2Paul StewartTEST_F(WiFiProviderTest, GetServiceByHexSsid) { 10264539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 10274539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart const string kSSID("bar"); 10284539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart const string kHexSsid(base::HexEncode(kSSID.c_str(), kSSID.length())); 10294539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart 10304539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart KeyValueStore args; 10314539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart args.SetString(kTypeProperty, kTypeWifi); 10324539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart args.SetString(kWifiHexSsid, kHexSsid); 10334539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart args.SetString(kSecurityProperty, kSecurityPsk); 10344539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart args.SetBool(kWifiHiddenSsid, false); 10354539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart 10364539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart Error error; 10374539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart WiFiServiceRefPtr service = GetWiFiService(args, &error); 10384539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 10394539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart EXPECT_TRUE(error.IsSuccess()); 10404539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart const string service_ssid(service->ssid().begin(), service->ssid().end()); 10414539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart EXPECT_EQ(kSSID, service_ssid); 10424539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart EXPECT_EQ(kModeManaged, service->mode()); 10434539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart EXPECT_TRUE(service->IsSecurityMatch(kSecurityPsk)); 10444539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart EXPECT_FALSE(service->hidden_ssid()); 10454539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart 10464539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart 10474539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart // While here, make sure FindSimilarService also supports kWifiHexSsid. 10484539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart Error find_error; 10494539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart ServiceRefPtr find_service = provider_.FindSimilarService(args, &find_error); 10504539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart EXPECT_TRUE(find_error.IsSuccess()); 10514539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart EXPECT_EQ(service.get(), find_service.get()); 10524539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart} 10534539d26229b9f37f7047ad32a4f02becf4cd32b2Paul Stewart 10547116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawalTEST_F(WiFiProviderTest, GetServiceWithSecurityAndSecurityClassMismatched) { 10557116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal const string kSSID("bar"); 10567116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal KeyValueStore args; 10577116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kTypeProperty, kTypeWifi); 10587116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSSIDProperty, kSSID); 10597116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSecurityProperty, kSecurityRsn); 10607116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSecurityClassProperty, kSecurityPsk); 10617116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetBool(kWifiHiddenSsid, false); 10627116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal 10637116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal Error error; 10647116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal WiFiServiceRefPtr service; 10657116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_CALL(manager_, RegisterService(_)).Times(0); 10667116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal service = GetWiFiService(args, &error); 10677116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_FALSE(error.IsSuccess()); 10687116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal} 10697116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal 10707116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawalTEST_F(WiFiProviderTest, GetServiceWithSecurityAndSecurityClassMatching) { 10717116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal const string kSSID("bar"); 10727116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal KeyValueStore args; 10737116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kTypeProperty, kTypeWifi); 10747116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSSIDProperty, kSSID); 10757116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSecurityProperty, kSecurityPsk); 10767116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSecurityClassProperty, kSecurityPsk); 10777116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetBool(kWifiHiddenSsid, false); 10787116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal 10797116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal Error error; 10807116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal WiFiServiceRefPtr service; 10817116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_CALL(manager_, RegisterService(_)); 10827116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal service = GetWiFiService(args, &error); 10837116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_TRUE(error.IsSuccess()); 10847116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal} 10857116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal 10867116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawalTEST_F(WiFiProviderTest, 10877116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal GetServiceWithSecurityAndSecurityClassMatchingButInvalidClass) { 10887116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal const string kSSID("bar"); 10897116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal KeyValueStore args; 10907116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kTypeProperty, kTypeWifi); 10917116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSSIDProperty, kSSID); 10927116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSecurityProperty, kSecurityRsn); 10937116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSecurityClassProperty, kSecurityRsn); 10947116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetBool(kWifiHiddenSsid, false); 10957116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_CALL(manager_, RegisterService(_)).Times(0); 10967116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal 10977116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal Error error; 10987116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal WiFiServiceRefPtr service = GetWiFiService(args, &error); 10997116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal Mock::VerifyAndClearExpectations(&manager_); 11007116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_FALSE(error.IsSuccess()); 11017116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal} 11027116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal 11037116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawalTEST_F(WiFiProviderTest, GetServiceBadSecurity) { 11047116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal const string kSSID("bar"); 11057116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal KeyValueStore args; 11067116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kTypeProperty, kTypeWifi); 11077116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSSIDProperty, kSSID); 11087116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSecurityProperty, "pig-80211"); 11097116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetBool(kWifiHiddenSsid, false); 11107116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal 11117116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal Error error; 11127116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal WiFiServiceRefPtr service; 11137116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_CALL(manager_, RegisterService(_)).Times(0); 11147116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal service = GetWiFiService(args, &error); 11157116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_FALSE(error.IsSuccess()); 11167116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_EQ(Error::kNotSupported, error.type()); 11177116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal EXPECT_EQ("security mode is unsupported", error.message()); 11187116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal} 11197116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal 1120d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul StewartTEST_F(WiFiProviderTest, FindSimilarService) { 1121d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart // Since CreateTemporyService uses exactly the same validation as 1122d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart // GetService, don't bother with testing invalid parameters. 1123d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart const string kSSID("foo"); 1124d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart KeyValueStore args; 1125d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart SetServiceParameters( 1126f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSSID.c_str(), kModeManaged, kSecurityNone, 1127d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart true, true, &args); 1128d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 1129d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart Error get_service_error; 11300e51ad959ff2d81472e053b2809991082f976362Paul Stewart WiFiServiceRefPtr service = GetWiFiService(args, &get_service_error); 1131d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_EQ(1, GetServices().size()); 1132d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 1133d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart { 1134d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart Error error; 11350e51ad959ff2d81472e053b2809991082f976362Paul Stewart ServiceRefPtr find_service = provider_.FindSimilarService(args, &error); 1136d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_EQ(service.get(), find_service.get()); 1137d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_TRUE(error.IsSuccess()); 1138d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart } 1139d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 1140f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan args.SetBool(kWifiHiddenSsid, false); 1141d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 1142d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart { 1143d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart Error error; 11440e51ad959ff2d81472e053b2809991082f976362Paul Stewart ServiceRefPtr find_service = provider_.FindSimilarService(args, &error); 1145d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_EQ(service.get(), find_service.get()); 1146d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_TRUE(error.IsSuccess()); 1147d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart } 1148d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 11497116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSecurityClassProperty, kSecurityPsk); 1150d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 1151d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart { 1152d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart Error error; 11530e51ad959ff2d81472e053b2809991082f976362Paul Stewart ServiceRefPtr find_service = provider_.FindSimilarService(args, &error); 11540afd90f73a4a22c7d9d144d8fe5de66b30632e48Ben Chan EXPECT_EQ(nullptr, find_service.get()); 1155d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_EQ(Error::kNotFound, error.type()); 1156d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart } 1157d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart} 1158d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 1159d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul StewartTEST_F(WiFiProviderTest, CreateTemporaryService) { 1160d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart // Since CreateTemporyService uses exactly the same validation as 1161d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart // GetService, don't bother with testing invalid parameters. 1162d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart const string kSSID("foo"); 1163d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 1164d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart Error error; 1165f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr service0 = GetService( 1166f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSSID.c_str(), kModeManaged, kSecurityNone, true, true, &error); 1167d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_EQ(1, GetServices().size()); 1168d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 1169d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 1170d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 11710e51ad959ff2d81472e053b2809991082f976362Paul Stewart ServiceRefPtr service1 = 1172f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan CreateTemporaryService(kSSID.c_str(), kModeManaged, 1173f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, true, true, &error); 1174d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 1175d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart // Test that a new service was created, but not registered with the 1176d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart // manager or added to the provider's service list. 1177d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_EQ(1, GetServices().size()); 1178d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_TRUE(service0 != service1); 1179d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart EXPECT_TRUE(service1->HasOneRef()); 1180d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart} 1181d2e1c360880fe0f23ee7dac785ca1c247544aac1Paul Stewart 11823c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, FindServiceWPA) { 11833c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string kSSID("an_ssid"); 11843c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 11853c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 11867116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal KeyValueStore args; 11877116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal SetServiceParameters( 11887116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal kSSID.c_str(), kModeManaged, nullptr, false, false, &args); 11897116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal args.SetString(kSecurityProperty, kSecurityRsn); 11907116093da00d83a9b2a2200e5501fe138cbdd11emukesh agrawal WiFiServiceRefPtr service = GetWiFiService(args, &error); 11913c5040174273386868cc8dea8044d22c465885d8Paul Stewart ASSERT_TRUE(service); 11923c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid_bytes(kSSID.begin(), kSSID.end()); 1193f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr wpa_service(FindService(ssid_bytes, kModeManaged, 1194f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityWpa)); 11953c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(wpa_service); 11963c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service.get(), wpa_service.get()); 1197f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr rsn_service(FindService(ssid_bytes, kModeManaged, 1198f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityRsn)); 11993c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(rsn_service.get()); 12003c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service.get(), rsn_service.get()); 1201f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr psk_service(FindService(ssid_bytes, kModeManaged, 1202f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityPsk)); 12033c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service.get(), psk_service.get()); 1204f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr wep_service(FindService(ssid_bytes, kModeManaged, 1205f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityWep)); 12063c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(service.get() != wep_service.get()); 12070afd90f73a4a22c7d9d144d8fe5de66b30632e48Ben Chan EXPECT_EQ(nullptr, wep_service.get()); 12083c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 12093c5040174273386868cc8dea8044d22c465885d8Paul Stewart 12103c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, FindServiceForEndpoint) { 12113c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 12123c5040174273386868cc8dea8044d22c465885d8Paul Stewart Error error; 12133c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string kSSID("an_ssid"); 12143c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr service = GetService( 1215f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSSID.c_str(), kModeManaged, kSecurityNone, false, true, &error); 12163c5040174273386868cc8dea8044d22c465885d8Paul Stewart ASSERT_TRUE(service); 12173c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint = MakeEndpoint(kSSID, "00:00:00:00:00:00", 0, 0); 12183c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiServiceRefPtr endpoint_service = 12193c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.FindServiceForEndpoint(endpoint); 12200427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart // Just because a matching service exists, we shouldn't necessarily have 12210427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart // it returned. We will test that this function returns the correct 12220427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart // service if the endpoint is added below. 12230afd90f73a4a22c7d9d144d8fe5de66b30632e48Ben Chan EXPECT_EQ(nullptr, endpoint_service.get()); 12243c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 12253c5040174273386868cc8dea8044d22c465885d8Paul Stewart 12263c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, OnEndpointAdded) { 12276c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart provider_.Start(); 12283c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string ssid0("an_ssid"); 12293c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid0_bytes(ssid0.begin(), ssid0.end()); 1230f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_FALSE(FindService(ssid0_bytes, kModeManaged, 1231f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone)); 12323c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint0 = MakeEndpoint(ssid0, "00:00:00:00:00:00", 0, 0); 12333c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 12343c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, UpdateService(_)).Times(1); 12353c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.OnEndpointAdded(endpoint0); 12363c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 12373c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 1238f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr service0(FindService(ssid0_bytes, kModeManaged, 1239f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone)); 12403c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(service0); 12413c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(service0->HasEndpoints()); 12420427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_EQ(1, GetServiceByEndpoint().size()); 12430427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart WiFiServiceRefPtr endpoint_service = 12440427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart provider_.FindServiceForEndpoint(endpoint0); 12450427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_EQ(service0.get(), endpoint_service.get()); 12463c5040174273386868cc8dea8044d22c465885d8Paul Stewart 12473c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint1 = MakeEndpoint(ssid0, "00:00:00:00:00:01", 0, 0); 12483c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 12493c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(service0))).Times(1); 12503c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.OnEndpointAdded(endpoint1); 12513c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 12523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 12533c5040174273386868cc8dea8044d22c465885d8Paul Stewart 12543c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string ssid1("another_ssid"); 12553c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid1_bytes(ssid1.begin(), ssid1.end()); 1256f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_FALSE(FindService(ssid1_bytes, kModeManaged, 1257f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone)); 12583c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint2 = MakeEndpoint(ssid1, "00:00:00:00:00:02", 12593c5040174273386868cc8dea8044d22c465885d8Paul Stewart 0, 0); 12603c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 12613c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, UpdateService(_)).Times(1); 12623c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.OnEndpointAdded(endpoint2); 12633c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 12643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(2, GetServices().size()); 12653c5040174273386868cc8dea8044d22c465885d8Paul Stewart 1266f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr service1(FindService(ssid1_bytes, kModeManaged, 1267f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone)); 12683c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(service1); 12693c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(service1->HasEndpoints()); 12703c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(service1 != service0); 12713c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 12723c5040174273386868cc8dea8044d22c465885d8Paul Stewart 127308a54ebb51c670e2a46a84d715c6231323a8742fPaul StewartTEST_F(WiFiProviderTest, OnEndpointAddedWithSecurity) { 127408a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart provider_.Start(); 127508a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart const string ssid0("an_ssid"); 127608a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart const vector<uint8_t> ssid0_bytes(ssid0.begin(), ssid0.end()); 1277f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_FALSE(FindService(ssid0_bytes, kModeManaged, 1278f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone)); 127908a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart WiFiEndpointRefPtr endpoint0 = MakeEndpoint(ssid0, "00:00:00:00:00:00", 0, 0); 1280f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan endpoint0->set_security_mode(kSecurityRsn); 128108a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 128208a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_CALL(manager_, UpdateService(_)).Times(1); 128308a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart provider_.OnEndpointAdded(endpoint0); 128408a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart Mock::VerifyAndClearExpectations(&manager_); 128508a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_EQ(1, GetServices().size()); 1286f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr service0(FindService(ssid0_bytes, kModeManaged, 1287f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityWpa)); 128808a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_TRUE(service0); 128908a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_TRUE(service0->HasEndpoints()); 1290f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_EQ(kSecurityPsk, service0->security_); 129108a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart 129208a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart WiFiEndpointRefPtr endpoint1 = MakeEndpoint(ssid0, "00:00:00:00:00:01", 0, 0); 1293f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan endpoint1->set_security_mode(kSecurityWpa); 129408a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 129508a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(service0))).Times(1); 129608a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart provider_.OnEndpointAdded(endpoint1); 129708a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart Mock::VerifyAndClearExpectations(&manager_); 129808a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_EQ(1, GetServices().size()); 129908a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart 130008a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart const string ssid1("another_ssid"); 130108a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart const vector<uint8_t> ssid1_bytes(ssid1.begin(), ssid1.end()); 1302f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_FALSE(FindService(ssid1_bytes, kModeManaged, 1303f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone)); 130408a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart WiFiEndpointRefPtr endpoint2 = MakeEndpoint(ssid1, "00:00:00:00:00:02", 0, 0); 1305f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan endpoint2->set_security_mode(kSecurityWpa); 130608a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(1); 130708a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_CALL(manager_, UpdateService(_)).Times(1); 130808a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart provider_.OnEndpointAdded(endpoint2); 130908a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart Mock::VerifyAndClearExpectations(&manager_); 131008a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_EQ(2, GetServices().size()); 131108a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart 1312f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan WiFiServiceRefPtr service1(FindService(ssid1_bytes, kModeManaged, 1313f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityRsn)); 131408a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_TRUE(service1); 131508a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_TRUE(service1->HasEndpoints()); 1316f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan EXPECT_EQ(kSecurityPsk, service1->security_); 131708a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart EXPECT_TRUE(service1 != service0); 131808a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart} 131908a54ebb51c670e2a46a84d715c6231323a8742fPaul Stewart 13206c351ff7fea8c93c99b2a9d20bf4d66731603885Paul StewartTEST_F(WiFiProviderTest, OnEndpointAddedWhileStopped) { 13216c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart // If we don't call provider_.Start(), OnEndpointAdded should have no effect. 13226c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart const string ssid("an_ssid"); 13236c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart WiFiEndpointRefPtr endpoint = MakeEndpoint(ssid, "00:00:00:00:00:00", 0, 0); 13246c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 13256c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart EXPECT_CALL(manager_, UpdateService(_)).Times(0); 13266c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart provider_.OnEndpointAdded(endpoint); 13276c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart EXPECT_TRUE(GetServices().empty()); 13286c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart} 13296c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart 13303c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, OnEndpointAddedToMockService) { 13313c5040174273386868cc8dea8044d22c465885d8Paul Stewart // The previous test allowed the provider to create its own "real" 13323c5040174273386868cc8dea8044d22c465885d8Paul Stewart // WiFiServices, which hides some of what we can test with mock 13333c5040174273386868cc8dea8044d22c465885d8Paul Stewart // services. Re-do an add-endpoint operation by seeding the provider 13343c5040174273386868cc8dea8044d22c465885d8Paul Stewart // with a mock service. 13356c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart provider_.Start(); 13363c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string ssid0("an_ssid"); 13373c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid0_bytes(ssid0.begin(), ssid0.end()); 13383c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0 = AddMockService(ssid0_bytes, 1339f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1340f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 13413c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 13423c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string ssid1("another_ssid"); 13433c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid1_bytes(ssid1.begin(), ssid1.end()); 13443c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1 = AddMockService(ssid1_bytes, 1345f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1346f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 13473c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 13483c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service0.get(), FindService(ssid0_bytes, 1349f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1350f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone).get()); 13513c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint0 = MakeEndpoint(ssid0, "00:00:00:00:00:00", 0, 0); 13523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 13533c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(service0))).Times(1); 13543c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, AddEndpoint(RefPtrMatch(endpoint0))).Times(1); 13553c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, AddEndpoint(_)).Times(0); 13563c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.OnEndpointAdded(endpoint0); 13573c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 13580951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service0.get()); 13590951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service1.get()); 13603c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13613c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint1 = MakeEndpoint(ssid0, "00:00:00:00:00:01", 0, 0); 13623c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 13633c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(service0))).Times(1); 13643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, AddEndpoint(RefPtrMatch(endpoint1))).Times(1); 13653c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, AddEndpoint(_)).Times(0); 13663c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.OnEndpointAdded(endpoint1); 13673c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 13680951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service0.get()); 13690951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service1.get()); 13703c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13713c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint2 = MakeEndpoint(ssid1, "00:00:00:00:00:02", 0, 0); 13723c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, RegisterService(_)).Times(0); 13733c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(service1))).Times(1); 13743c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, AddEndpoint(_)).Times(0); 13753c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, AddEndpoint(RefPtrMatch(endpoint2))).Times(1); 13763c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.OnEndpointAdded(endpoint2); 13773c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 13783c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13793c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, OnEndpointRemoved) { 13806c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart provider_.Start(); 13813c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string ssid0("an_ssid"); 13823c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid0_bytes(ssid0.begin(), ssid0.end()); 13833c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0 = AddMockService(ssid0_bytes, 1384f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1385f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 13863c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 13873c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string ssid1("another_ssid"); 13883c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid1_bytes(ssid1.begin(), ssid1.end()); 13893c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1 = AddMockService(ssid1_bytes, 1390f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1391f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 13923c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 13933c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(2, GetServices().size()); 13943c5040174273386868cc8dea8044d22c465885d8Paul Stewart 13953c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Remove the last endpoint of a non-remembered service. 13963c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint0 = MakeEndpoint(ssid0, "00:00:00:00:00:00", 0, 0); 13970427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart AddEndpointToService(service0, endpoint0); 13980427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_EQ(1, GetServiceByEndpoint().size()); 13990427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart 14003c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, RemoveEndpoint(RefPtrMatch(endpoint0))).Times(1); 14013c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, RemoveEndpoint(_)).Times(0); 14023c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, HasEndpoints()).WillOnce(Return(false)); 14033c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, IsRemembered()).WillOnce(Return(false)); 14043c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, ResetWiFi()).Times(1); 14053c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(service0))).Times(0); 14063c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, DeregisterService(RefPtrMatch(service0))).Times(1); 14073c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.OnEndpointRemoved(endpoint0); 14083c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Verify now, so it's clear that this happened as a result of the call 14093c5040174273386868cc8dea8044d22c465885d8Paul Stewart // above, and not anything in the destructor(s). 14103c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 14110951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service0.get()); 14120951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service1.get()); 14133c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 14143c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(service1.get(), GetServices().front().get()); 14150427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_TRUE(GetServiceByEndpoint().empty()); 14163c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 14173c5040174273386868cc8dea8044d22c465885d8Paul Stewart 14183c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, OnEndpointRemovedButHasEndpoints) { 14196c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart provider_.Start(); 14203c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string ssid0("an_ssid"); 14213c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid0_bytes(ssid0.begin(), ssid0.end()); 14223c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0 = AddMockService(ssid0_bytes, 1423f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1424f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 14253c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 14263c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 14273c5040174273386868cc8dea8044d22c465885d8Paul Stewart 14283c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Remove an endpoint of a non-remembered service. 14293c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint0 = MakeEndpoint(ssid0, "00:00:00:00:00:00", 0, 0); 14300427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart AddEndpointToService(service0, endpoint0); 14310427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_EQ(1, GetServiceByEndpoint().size()); 14320427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart 14333c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, RemoveEndpoint(RefPtrMatch(endpoint0))).Times(1); 14343c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, HasEndpoints()).WillOnce(Return(true)); 14353c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, IsRemembered()).WillRepeatedly(Return(false)); 14363c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(service0))).Times(1); 14373c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, ResetWiFi()).Times(0); 14383c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, DeregisterService(_)).Times(0); 14393c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.OnEndpointRemoved(endpoint0); 14403c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Verify now, so it's clear that this happened as a result of the call 14413c5040174273386868cc8dea8044d22c465885d8Paul Stewart // above, and not anything in the destructor(s). 14423c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 14430951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service0.get()); 14443c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 14450427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_TRUE(GetServiceByEndpoint().empty()); 14463c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 14473c5040174273386868cc8dea8044d22c465885d8Paul Stewart 14483c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, OnEndpointRemovedButIsRemembered) { 14496c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart provider_.Start(); 14503c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string ssid0("an_ssid"); 14513c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid0_bytes(ssid0.begin(), ssid0.end()); 14523c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service0 = AddMockService(ssid0_bytes, 1453f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1454f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 14553c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 14563c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 14573c5040174273386868cc8dea8044d22c465885d8Paul Stewart 14583c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Remove the last endpoint of a remembered service. 14593c5040174273386868cc8dea8044d22c465885d8Paul Stewart WiFiEndpointRefPtr endpoint0 = MakeEndpoint(ssid0, "00:00:00:00:00:00", 0, 0); 14600427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart AddEndpointToService(service0, endpoint0); 14610427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_EQ(1, GetServiceByEndpoint().size()); 14620427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart 14633c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, RemoveEndpoint(RefPtrMatch(endpoint0))).Times(1); 14643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, HasEndpoints()).WillRepeatedly(Return(false)); 14653c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, IsRemembered()).WillOnce(Return(true)); 14663c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(service0))).Times(1); 14673c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service0, ResetWiFi()).Times(0); 14683c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, DeregisterService(_)).Times(0); 14693c5040174273386868cc8dea8044d22c465885d8Paul Stewart provider_.OnEndpointRemoved(endpoint0); 14703c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Verify now, so it's clear that this happened as a result of the call 14713c5040174273386868cc8dea8044d22c465885d8Paul Stewart // above, and not anything in the destructor(s). 14723c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 14730951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service0.get()); 14743c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 14750427cc1c28419b4980ecf4b1d8ba6c3e7bb341daPaul Stewart EXPECT_TRUE(GetServiceByEndpoint().empty()); 14763c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 14773c5040174273386868cc8dea8044d22c465885d8Paul Stewart 14786c351ff7fea8c93c99b2a9d20bf4d66731603885Paul StewartTEST_F(WiFiProviderTest, OnEndpointRemovedWhileStopped) { 14796c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart // If we don't call provider_.Start(), OnEndpointRemoved should not 14806c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart // cause a crash even if a service matching the endpoint does not exist. 14816c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart const string ssid("an_ssid"); 14826c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart WiFiEndpointRefPtr endpoint = MakeEndpoint(ssid, "00:00:00:00:00:00", 0, 0); 14836c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart provider_.OnEndpointRemoved(endpoint); 14846c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart} 14856c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart 148658baeecaf4725031d94de9c1a149c9848b6c5b1dPaul StewartTEST_F(WiFiProviderTest, OnEndpointUpdated) { 148758baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart provider_.Start(); 148858baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart 148958baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart // Create an endpoint and associate it with a mock service. 149058baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart const string ssid("an_ssid"); 149158baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart WiFiEndpointRefPtr endpoint = MakeEndpoint(ssid, "00:00:00:00:00:00", 0, 0); 149258baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart 149358baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart const vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end()); 149458baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart MockWiFiServiceRefPtr open_service = AddMockService(ssid_bytes, 1495f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1496f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 149758baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart false); 149858baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart EXPECT_CALL(*open_service, AddEndpoint(RefPtrMatch(endpoint))); 149958baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(open_service))); 150058baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart provider_.OnEndpointAdded(endpoint); 15010951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(open_service.get()); 150258baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart 150358baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart // WiFiProvider is running and endpoint matches this service. 150458baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart EXPECT_CALL(*open_service, NotifyEndpointUpdated(RefPtrMatch(endpoint))); 150558baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart EXPECT_CALL(*open_service, AddEndpoint(_)).Times(0); 150658baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart provider_.OnEndpointUpdated(endpoint); 15070951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(open_service.get()); 150858baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart 150958baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart // If the endpoint is changed in a way that causes it to match a different 151058baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart // service, the provider should transfer the endpoint from one service to 151158baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart // the other. 151258baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart MockWiFiServiceRefPtr rsn_service = AddMockService(ssid_bytes, 1513f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1514f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityRsn, 151558baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart false); 151658baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart EXPECT_CALL(*open_service, RemoveEndpoint(RefPtrMatch(endpoint))); 151758baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart // We are playing out a scenario where the open service is not removed 151858baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart // since it still claims to have more endpoints remaining. 151958baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart EXPECT_CALL(*open_service, HasEndpoints()).WillOnce(Return(true)); 152058baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart EXPECT_CALL(*rsn_service, AddEndpoint(RefPtrMatch(endpoint))); 152158baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(open_service))); 152258baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart EXPECT_CALL(manager_, UpdateService(RefPtrMatch(rsn_service))); 1523f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan endpoint->set_security_mode(kSecurityRsn); 152458baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart provider_.OnEndpointUpdated(endpoint); 152558baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart} 152658baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart 152758baeecaf4725031d94de9c1a149c9848b6c5b1dPaul StewartTEST_F(WiFiProviderTest, OnEndpointUpdatedWhileStopped) { 152858baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart // If we don't call provider_.Start(), OnEndpointUpdated should not 152958baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart // cause a crash even if a service matching the endpoint does not exist. 153058baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart const string ssid("an_ssid"); 153158baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart WiFiEndpointRefPtr endpoint = MakeEndpoint(ssid, "00:00:00:00:00:00", 0, 0); 153258baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart provider_.OnEndpointUpdated(endpoint); 153358baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart} 153458baeecaf4725031d94de9c1a149c9848b6c5b1dPaul Stewart 15353c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, OnServiceUnloaded) { 15363c5040174273386868cc8dea8044d22c465885d8Paul Stewart // This function should never unregister services itself -- the Manager 15373c5040174273386868cc8dea8044d22c465885d8Paul Stewart // will automatically deregister the service if OnServiceUnloaded() 15383c5040174273386868cc8dea8044d22c465885d8Paul Stewart // returns true (via WiFiService::Unload()). 15393c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(manager_, DeregisterService(_)).Times(0); 15403c5040174273386868cc8dea8044d22c465885d8Paul Stewart 15413c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service = AddMockService(vector<uint8_t>(1, '0'), 1542f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1543f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 15446c351ff7fea8c93c99b2a9d20bf4d66731603885Paul Stewart false); 15453c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 15463c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, HasEndpoints()).WillOnce(Return(true)); 15473c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, ResetWiFi()).Times(0); 15483c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_FALSE(provider_.OnServiceUnloaded(service)); 15493c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, GetServices().size()); 15500951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service.get()); 15513c5040174273386868cc8dea8044d22c465885d8Paul Stewart 15523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, HasEndpoints()).WillOnce(Return(false)); 15533c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service, ResetWiFi()).Times(1); 15543c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(provider_.OnServiceUnloaded(service)); 15553c5040174273386868cc8dea8044d22c465885d8Paul Stewart // Verify now, so it's clear that this happened as a result of the call 15563c5040174273386868cc8dea8044d22c465885d8Paul Stewart // above, and not anything in the destructor(s). 15570951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko Mock::VerifyAndClearExpectations(service.get()); 15583c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(GetServices().empty()); 15593c5040174273386868cc8dea8044d22c465885d8Paul Stewart 15603c5040174273386868cc8dea8044d22c465885d8Paul Stewart Mock::VerifyAndClearExpectations(&manager_); 15613c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 15623c5040174273386868cc8dea8044d22c465885d8Paul Stewart 15639842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawalTEST_F(WiFiProviderTest, LoadAndFixupServiceEntriesDefaultProfile) { 156460a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie // We test LoadAndFixupServiceEntries indirectly since it calls a static 156560a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie // method in WiFiService. 15663c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(metrics_, SendEnumToUMA( 15673c5040174273386868cc8dea8044d22c465885d8Paul Stewart "Network.Shill.Wifi.ServiceFixupEntries", 15683c5040174273386868cc8dea8044d22c465885d8Paul Stewart Metrics::kMetricServiceFixupDefaultProfile, 15693c5040174273386868cc8dea8044d22c465885d8Paul Stewart Metrics::kMetricServiceFixupMax)).Times(1); 15709842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, Flush()).Times(1); 15713c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string kGroupId = 1572f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan StringPrintf("%s_0_0_%s_%s", kTypeWifi, kModeManaged, kSecurityNone); 15739842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 15743c5040174273386868cc8dea8044d22c465885d8Paul Stewart GetString(kGroupId, _, _)).WillRepeatedly(Return(false)); 15759842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 15763c5040174273386868cc8dea8044d22c465885d8Paul Stewart SetString(kGroupId, _, _)).WillRepeatedly(Return(true)); 15773c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 15783c5040174273386868cc8dea8044d22c465885d8Paul Stewart groups.insert(kGroupId); 15799842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetGroups()) 15809842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillRepeatedly(Return(groups)); 15819842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 15827c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 0), _)). 15837c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Return(true)); 15849842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 15857c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 1), _)). 15867c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Return(true)); 15879842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 15887c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 2), _)). 15897c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Return(true)); 15909842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 15917c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 3), _)). 15927c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Return(false)); 15930951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko LoadAndFixupServiceEntries(default_profile_.get()); 15949842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal} 15953c5040174273386868cc8dea8044d22c465885d8Paul Stewart 15969842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawalTEST_F(WiFiProviderTest, LoadAndFixupServiceEntriesUserProfile) { 15973c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(metrics_, SendEnumToUMA( 15983c5040174273386868cc8dea8044d22c465885d8Paul Stewart "Network.Shill.Wifi.ServiceFixupEntries", 15993c5040174273386868cc8dea8044d22c465885d8Paul Stewart Metrics::kMetricServiceFixupUserProfile, 16003c5040174273386868cc8dea8044d22c465885d8Paul Stewart Metrics::kMetricServiceFixupMax)).Times(1); 16019842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(user_profile_storage_, Flush()).Times(1); 16029842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal const string kGroupId = 16039842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf("%s_0_0_%s_%s", kTypeWifi, kModeManaged, kSecurityNone); 16049842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(user_profile_storage_, 16059842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal GetString(kGroupId, _, _)).WillRepeatedly(Return(false)); 16069842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(user_profile_storage_, 16079842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal SetString(kGroupId, _, _)).WillRepeatedly(Return(true)); 16089842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal set<string> groups; 16099842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal groups.insert(kGroupId); 16109842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(user_profile_storage_, GetGroups()) 16119842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .WillRepeatedly(Return(groups)); 16129842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(user_profile_storage_, GetStringList(_, _, _)).Times(0); 16130951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko LoadAndFixupServiceEntries(user_profile_.get()); 16143c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 16153c5040174273386868cc8dea8044d22c465885d8Paul Stewart 161660a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade GuthrieTEST_F(WiFiProviderTest, LoadAndFixupServiceEntriesNothingToDo) { 16173c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(metrics_, SendEnumToUMA(_, _, _)).Times(0); 16189842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, Flush()).Times(0); 16193c5040174273386868cc8dea8044d22c465885d8Paul Stewart const string kGroupId = 1620f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan StringPrintf("%s_0_0_%s_%s", kTypeWifi, kModeManaged, kSecurityNone); 16219842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 16223c5040174273386868cc8dea8044d22c465885d8Paul Stewart GetString(kGroupId, _, _)).WillRepeatedly(Return(true)); 16233c5040174273386868cc8dea8044d22c465885d8Paul Stewart set<string> groups; 16243c5040174273386868cc8dea8044d22c465885d8Paul Stewart groups.insert(kGroupId); 16259842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetGroups()).WillOnce(Return(groups)); 16269842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 16277c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 0), _)). 16287c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Return(true)); 16299842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 16307c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 1), _)). 16317c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Return(true)); 16329842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 16337c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 2), _)). 16347c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Return(true)); 16359842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 16367c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 3), _)). 16377c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Return(false)); 16380951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko LoadAndFixupServiceEntries(default_profile_.get()); 16393c5040174273386868cc8dea8044d22c465885d8Paul Stewart} 16403c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16413c5040174273386868cc8dea8044d22c465885d8Paul StewartTEST_F(WiFiProviderTest, GetHiddenSSIDList) { 16423c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(provider_.GetHiddenSSIDList().empty()); 16433c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid0(1, '0'); 1644f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan AddMockService(ssid0, kModeManaged, kSecurityNone, false); 16453c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(provider_.GetHiddenSSIDList().empty()); 16463c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16473c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid1(1, '1'); 16483c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service1 = AddMockService(ssid1, 1649f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1650f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 16513c5040174273386868cc8dea8044d22c465885d8Paul Stewart true); 16523c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service1, IsRemembered()).WillRepeatedly(Return(false)); 16533c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(provider_.GetHiddenSSIDList().empty()); 16543c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16553c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid2(1, '2'); 16563c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service2 = AddMockService(ssid2, 1657f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1658f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 16593c5040174273386868cc8dea8044d22c465885d8Paul Stewart true); 16603c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service2, IsRemembered()).WillRepeatedly(Return(true)); 16613c5040174273386868cc8dea8044d22c465885d8Paul Stewart ByteArrays ssid_list = provider_.GetHiddenSSIDList(); 16623c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16633c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, ssid_list.size()); 16643c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(ssid_list[0] == ssid2); 16653c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16663c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid3(1, '3'); 16673c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service3 = AddMockService(ssid3, 1668f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1669f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 16703c5040174273386868cc8dea8044d22c465885d8Paul Stewart false); 16713c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service2, IsRemembered()).WillRepeatedly(Return(true)); 16723c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16733c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssid_list = provider_.GetHiddenSSIDList(); 16743c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(1, ssid_list.size()); 16753c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(ssid_list[0] == ssid2); 16763c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16773c5040174273386868cc8dea8044d22c465885d8Paul Stewart const vector<uint8_t> ssid4(1, '4'); 16783c5040174273386868cc8dea8044d22c465885d8Paul Stewart MockWiFiServiceRefPtr service4 = AddMockService(ssid4, 1679f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kModeManaged, 1680f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan kSecurityNone, 16813c5040174273386868cc8dea8044d22c465885d8Paul Stewart true); 16823c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_CALL(*service4, IsRemembered()).WillRepeatedly(Return(true)); 16833c5040174273386868cc8dea8044d22c465885d8Paul Stewart 16843c5040174273386868cc8dea8044d22c465885d8Paul Stewart ssid_list = provider_.GetHiddenSSIDList(); 16853c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_EQ(2, ssid_list.size()); 16863c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(ssid_list[0] == ssid2); 16873c5040174273386868cc8dea8044d22c465885d8Paul Stewart EXPECT_TRUE(ssid_list[1] == ssid4); 168821f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart} 168921f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart 169060a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade GuthrieTEST_F(WiFiProviderTest, StringListToFrequencyMap) { 169160a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie vector<string> strings; 169260a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie BuildFreqCountStrings(&strings); 169360a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie WiFiProvider::ConnectFrequencyMap frequencies_result; 16947c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie time_t days = WiFiProvider::StringListToFrequencyMap(strings, 16957c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie &frequencies_result); 169660a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie 169760a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie WiFiProvider::ConnectFrequencyMap frequencies_expect; 169860a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie BuildFreqCountMap(&frequencies_expect); 169960a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie EXPECT_THAT(frequencies_result, ContainerEq(frequencies_expect)); 17007c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_EQ(days, kTestDays); 17017c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie} 17027c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 17037c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade GuthrieTEST_F(WiFiProviderTest, StringListToFrequencyMapEmpty) { 17047c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie vector<string> strings; 17057c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie strings.push_back("@50"); 17067c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::ConnectFrequencyMap frequencies_result; 17077c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie time_t days = WiFiProvider::StringListToFrequencyMap(strings, 17087c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie &frequencies_result); 17097c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_TRUE(frequencies_result.empty()); 17107c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_EQ(days, 50); 171160a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie} 171260a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie 171360a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade GuthrieTEST_F(WiFiProviderTest, FrequencyMapToStringList) { 171460a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie WiFiProvider::ConnectFrequencyMap frequencies; 171560a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie BuildFreqCountMap(&frequencies); 171660a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie vector<string> strings_result; 17177c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::FrequencyMapToStringList(kTestDays, frequencies, 17187c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie &strings_result); 171960a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie 172060a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie vector<string> strings_expect; 172160a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie BuildFreqCountStrings(&strings_expect); 172260a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie EXPECT_THAT(strings_result, ContainerEq(strings_expect)); 172360a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie} 172460a3706bee5686ae2322a774b9e7d5e8e63fcaf7Wade Guthrie 17257c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade GuthrieTEST_F(WiFiProviderTest, FrequencyMapToStringListEmpty) { 17267c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::ConnectFrequencyMap frequencies; 17277c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie vector<string> strings_result; 17287c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::FrequencyMapToStringList(kTestDays, frequencies, 17297c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie &strings_result); 17307c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_EQ(1, strings_result.size()); 17317c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_EQ(*strings_result.begin(), "@20"); 17327c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie} 17337c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 17347c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade GuthrieTEST_F(WiFiProviderTest, FrequencyMapBasicAging) { 17357c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie const time_t kThisWeek = kFirstWeek + 17367c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::kWeeksToKeepFrequencyCounts - 1; 17377c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie LoadConnectCountByFrequency(kThisWeek * kSecondsPerWeek); 17387c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 17397c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Make sure we have data for all 3 blocks. 17407c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::ConnectFrequencyMap expected; 17417c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[5001] = 2; 17427c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[5002] = 2; 17437c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[6001] = 1; 17447c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[6002] = 2; 17457c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[7001] = 1; 17467c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[7002] = 2; 17477c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_THAT(provider_.connect_count_by_frequency_, ContainerEq(expected)); 17487c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 17497c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // And, then, make sure we output the expected blocks of data. 17509842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 17519842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 17529842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal SetStringList(WiFiProvider::kStorageId, _, 17539842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal Eq(profile_frequency_data_[ 17549842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf( 17559842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal "%s%d", WiFiProvider::kStorageFrequencies, 0)]))); 17569842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 17579842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 17589842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal SetStringList(WiFiProvider::kStorageId, _, 17599842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal Eq(profile_frequency_data_[ 17609842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf( 17619842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal "%s%d", WiFiProvider::kStorageFrequencies, 1)]))); 17629842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 17639842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 17649842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal SetStringList(WiFiProvider::kStorageId, _, 17659842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal Eq(profile_frequency_data_[ 17669842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf( 17679842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal "%s%d", WiFiProvider::kStorageFrequencies, 2)]))); 17687c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie vector<string> frequencies; 17697c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie frequencies.push_back(base::StringPrintf("@%" PRIu64, 17707c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie static_cast<uint64_t>(kThisWeek))); 17719842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 17729842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 17739842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal SetStringList(WiFiProvider::kStorageId, _, Eq(frequencies))).Times(0); 17747c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie Save(); 17757c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie} 17767c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 17777c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade GuthrieTEST_F(WiFiProviderTest, FrequencyMapAgingIllegalDay) { 17787c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie provider_.time_ = &time_; 17797c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie const time_t kThisWeek = kFirstWeek + 17807c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::kWeeksToKeepFrequencyCounts - 1; 17817c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie const time_t kThisWeekSeconds = kThisWeek * kSecondsPerWeek; 17827c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_CALL(time_, GetSecondsSinceEpoch()).WillOnce(Return(kThisWeekSeconds)); 17837c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie const string kGroupId = 1784f024ef470665bee08eeb9cdfe5bbcc3fd7bbc8fdBen Chan StringPrintf("%s_0_0_%s_%s", kTypeWifi, kModeManaged, kSecurityNone); 17859842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 17867c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie GetString(kGroupId, _, _)).WillRepeatedly(Return(true)); 17877c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie set<string> groups; 17887c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie groups.insert(kGroupId); 17897c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Instead of block[1], return a block without the date. 17909842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetGroups()).WillOnce(Return(groups)); 17919842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 17927c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 0), _)). 17937c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Invoke(this, &WiFiProviderTest::GetStringList)); 17949842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 17957c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 1), _)). 17967c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Invoke(this, &WiFiProviderTest::GetIllegalDayStringList)); 17979842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 17987c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 2), _)). 17997c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Invoke(this, &WiFiProviderTest::GetStringList)); 18009842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, GetStringList(WiFiProvider::kStorageId, 18017c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie StringPrintf("%s%d", WiFiProvider::kStorageFrequencies, 3), _)). 18027c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Invoke(this, &WiFiProviderTest::GetStringList)); 18037c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 18040951ccbfca977a9cf218b2e4308aa26fb4d06ef9Alex Vakulenko LoadAndFixupServiceEntries(default_profile_.get()); 18057c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 18067c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Verify that the received information only includes block[0] and block[2]. 18077c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::ConnectFrequencyMap expected; 18087c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[5001] = 1; 18097c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[5002] = 2; 18107c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[7001] = 1; 18117c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[7002] = 2; 18127c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_THAT(provider_.connect_count_by_frequency_, ContainerEq(expected)); 18137c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 18147c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // And, then, make sure we output the expected blocks of data. 18159842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 18169842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 18179842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal SetStringList(WiFiProvider::kStorageId, _, 18189842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal Eq(profile_frequency_data_[ 18199842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf( 18209842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal "%s%d", WiFiProvider::kStorageFrequencies, 0)]))); 18219842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 18229842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 18239842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal SetStringList(WiFiProvider::kStorageId, _, 18249842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal Eq(profile_frequency_data_[ 18259842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf( 18269842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal "%s%d", WiFiProvider::kStorageFrequencies, 1)]))). 18277c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie Times(0); 18289842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL( 18299842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal default_profile_storage_, 18309842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal SetStringList(WiFiProvider::kStorageId, _, 18319842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal Eq(profile_frequency_data_[ 18329842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal StringPrintf( 18339842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal "%s%d", WiFiProvider::kStorageFrequencies, 2)]))); 18347c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie vector<string> frequencies; 18357c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie frequencies.push_back(base::StringPrintf("@%" PRIu64, 18367c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie static_cast<uint64_t>(kThisWeek))); 18379842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal EXPECT_CALL(default_profile_storage_, 18389842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal SetStringList(WiFiProvider::kStorageId, _, Eq(frequencies))) 18399842441bbfae81053a6c08045f1d7b831e5101b2mukesh agrawal .Times(0); 18407c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie Save(); 18417c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie} 18427c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 18437c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade GuthrieTEST_F(WiFiProviderTest, IncrementConnectCount) { 18447c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie const time_t kThisWeek = kFirstWeek + 18457c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::kWeeksToKeepFrequencyCounts - 1; 18467c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie const time_t kThisWeekSeconds = kThisWeek * kSecondsPerWeek; 18477c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie LoadConnectCountByFrequency(kThisWeekSeconds); 18487c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 18497c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_CALL(time_, GetSecondsSinceEpoch()).WillOnce(Return(kThisWeekSeconds)); 18507c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_CALL(manager_, UpdateWiFiProvider()); 1851a5dda0e9b074fa2c5a4279470f1916c66cb14013mukesh agrawal EXPECT_CALL(metrics_, SendToUMA(Metrics::kMetricFrequenciesConnectedEver, 1852a5dda0e9b074fa2c5a4279470f1916c66cb14013mukesh agrawal _, _, _, _)); 18537c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie time_t newest_week_at_start = 18547c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie provider_.connect_count_by_frequency_dated_.crbegin()->first; 18557c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie provider_.IncrementConnectCount(6002); 18567c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 18577c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Make sure we have data for all 3 blocks. 18587c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::ConnectFrequencyMap expected; 18597c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[5001] = 2; 18607c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[5002] = 2; 18617c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[6001] = 1; 18627c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[6002] = 3; 18637c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[7001] = 1; 18647c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[7002] = 2; 18657c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_THAT(provider_.connect_count_by_frequency_, ContainerEq(expected)); 18667c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Make sure we didn't delete the oldest block. 18677c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_TRUE(ContainsKey(provider_.connect_count_by_frequency_dated_, 18687c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie kFirstWeek)); 18697c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Make sure we didn't create a new block. 18707c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie time_t newest_week_at_end = 18717c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie provider_.connect_count_by_frequency_dated_.crbegin()->first; 18727c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_EQ(newest_week_at_start, newest_week_at_end); 18737c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie} 18747c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 18757c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade GuthrieTEST_F(WiFiProviderTest, IncrementConnectCountCreateNew) { 18767c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie time_t this_week = kFirstWeek + WiFiProvider::kWeeksToKeepFrequencyCounts - 1; 18777c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie LoadConnectCountByFrequency(this_week * kSecondsPerWeek); 18787c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 18797c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie this_week += 2; 18807c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_CALL(time_, GetSecondsSinceEpoch()). 18817c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WillOnce(Return(this_week * kSecondsPerWeek)); 18827c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_CALL(manager_, UpdateWiFiProvider()); 1883a5dda0e9b074fa2c5a4279470f1916c66cb14013mukesh agrawal EXPECT_CALL(metrics_, SendToUMA(Metrics::kMetricFrequenciesConnectedEver, 1884a5dda0e9b074fa2c5a4279470f1916c66cb14013mukesh agrawal _, _, _, _)); 18857c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie time_t newest_week_at_start = 18867c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie provider_.connect_count_by_frequency_dated_.crbegin()->first; 18877c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie provider_.IncrementConnectCount(6001); 18887c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 18897c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Make sure we have data for newest 2 blocks (only). 18907c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie WiFiProvider::ConnectFrequencyMap expected; 18917c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[5001] = 1; 18927c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[6001] = 2; 18937c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[6002] = 2; 18947c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[7001] = 1; 18957c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie expected[7002] = 2; 18967c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_THAT(provider_.connect_count_by_frequency_, ContainerEq(expected)); 18977c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Verify that the oldest block is gone. 18987c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_FALSE(ContainsKey(provider_.connect_count_by_frequency_dated_, 18997c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie kFirstWeek)); 19007c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie // Make sure we created a new block and that it is for the current week. 19017c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie time_t newest_week_at_end = 19027c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie provider_.connect_count_by_frequency_dated_.crbegin()->first; 19037c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_NE(newest_week_at_start, newest_week_at_end); 19047c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie EXPECT_TRUE(ContainsKey(provider_.connect_count_by_frequency_dated_, 19057c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie this_week)); 19067c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie} 19077c2d34e9273e9ba8fcb8c49282bcd39e5a771ceeWade Guthrie 1908574996af8ed3e3c2fe2bc16970f73c665296cfccPeter QiuTEST_F(WiFiProviderTest, ReportAutoConnectableServices) { 1909574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu MockWiFiServiceRefPtr service0 = AddMockService(vector<uint8_t>(1, '0'), 1910574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu kModeManaged, 1911574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu kSecurityNone, 1912574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu false); 1913574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu MockWiFiServiceRefPtr service1 = AddMockService(vector<uint8_t>(1, '1'), 1914574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu kModeManaged, 1915574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu kSecurityNone, 1916574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu false); 1917574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu service0->EnableAndRetainAutoConnect(); 1918574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu service0->SetConnectable(true); 1919574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu service1->EnableAndRetainAutoConnect(); 1920574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu service1->SetConnectable(true); 1921574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu 1922574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu EXPECT_CALL(*service0, IsAutoConnectable(_)) 1923574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu .WillOnce(Return(true)) 1924574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu .WillOnce(Return(false)); 1925574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu EXPECT_CALL(*service1, IsAutoConnectable(_)) 1926574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu .WillRepeatedly(Return(false)); 1927574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu 1928574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu // With 1 auto connectable service. 1929574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu EXPECT_CALL(metrics_, NotifyWifiAutoConnectableServices(1)); 1930574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu provider_.ReportAutoConnectableServices(); 1931574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu 1932574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu // With no auto connectable service. 1933574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu EXPECT_CALL(metrics_, NotifyWifiAutoConnectableServices(_)).Times(0); 1934574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu provider_.ReportAutoConnectableServices(); 1935574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu} 1936574996af8ed3e3c2fe2bc16970f73c665296cfccPeter Qiu 1937402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel TanTEST_F(WiFiProviderTest, NumAutoConnectableServices) { 19386d61faf84ef5eb2545bc6eee8a4d74109dfdd6d1Samuel Tan MockWiFiServiceRefPtr service0 = AddMockService( 19396d61faf84ef5eb2545bc6eee8a4d74109dfdd6d1Samuel Tan vector<uint8_t>(1, '0'), kModeManaged, kSecurityNone, false); 19406d61faf84ef5eb2545bc6eee8a4d74109dfdd6d1Samuel Tan MockWiFiServiceRefPtr service1 = AddMockService( 19416d61faf84ef5eb2545bc6eee8a4d74109dfdd6d1Samuel Tan vector<uint8_t>(1, '1'), kModeManaged, kSecurityNone, false); 1942402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan service0->EnableAndRetainAutoConnect(); 1943402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan service0->SetConnectable(true); 1944402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan service1->EnableAndRetainAutoConnect(); 1945402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan service1->SetConnectable(true); 1946402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan 1947402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan EXPECT_CALL(*service0, IsAutoConnectable(_)) 1948402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan .WillOnce(Return(true)) 1949402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan .WillOnce(Return(false)); 19506d61faf84ef5eb2545bc6eee8a4d74109dfdd6d1Samuel Tan EXPECT_CALL(*service1, IsAutoConnectable(_)).WillRepeatedly(Return(true)); 1951402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan 1952d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan // 2 auto-connectable services. 1953d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan EXPECT_EQ(2, provider_.NumAutoConnectableServices()); 1954402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan 1955d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan // 1 auto-connectable service. 1956d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan EXPECT_EQ(1, provider_.NumAutoConnectableServices()); 1957402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan} 1958402bf2959e8b2c68627a7b66203ec84760bf2e03Samuel Tan 1959d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel TanTEST_F(WiFiProviderTest, GetSsidsConfiguredForAutoConnect) { 1960d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan vector<uint8_t> ssid0(3, '0'); 1961d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan vector<uint8_t> ssid1(5, '1'); 1962d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan ByteString ssid0_bytes(ssid0); 1963d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan ByteString ssid1_bytes(ssid1); 19646d61faf84ef5eb2545bc6eee8a4d74109dfdd6d1Samuel Tan MockWiFiServiceRefPtr service0 = 19656d61faf84ef5eb2545bc6eee8a4d74109dfdd6d1Samuel Tan AddMockService(ssid0, kModeManaged, kSecurityNone, false); 19666d61faf84ef5eb2545bc6eee8a4d74109dfdd6d1Samuel Tan MockWiFiServiceRefPtr service1 = 19676d61faf84ef5eb2545bc6eee8a4d74109dfdd6d1Samuel Tan AddMockService(ssid1, kModeManaged, kSecurityNone, false); 1968d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan // 2 services configured for auto-connect. 1969d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan service0->SetAutoConnect(true); 1970d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan service1->SetAutoConnect(true); 1971d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan vector<ByteString> service_list_0 = 1972d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan provider_.GetSsidsConfiguredForAutoConnect(); 1973d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan EXPECT_EQ(2, service_list_0.size()); 1974d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan EXPECT_TRUE(ssid0_bytes.Equals(service_list_0[0])); 1975d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan EXPECT_TRUE(ssid1_bytes.Equals(service_list_0[1])); 1976d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan 1977d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan // 1 service configured for auto-connect. 1978d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan service0->SetAutoConnect(false); 1979d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan service1->SetAutoConnect(true); 1980d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan vector<ByteString> service_list_1 = 1981d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan provider_.GetSsidsConfiguredForAutoConnect(); 1982d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan EXPECT_EQ(1, service_list_1.size()); 1983d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan EXPECT_TRUE(ssid1_bytes.Equals(service_list_1[0])); 1984d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan} 1985d70ecdf36c94516b71cca8212caeb71da8c63d02Samuel Tan 198621f2aae6a9c15c2fb3d43d822f9d963a961b9627Paul Stewart} // namespace shill 1987