wifi_data_provider_common_unittest.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/third_party/dynamic_annotations/dynamic_annotations.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/geolocation/wifi_data_provider_common.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::AtLeast; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::DoDefault; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Invoke; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Return; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockWlanApi : public WifiDataProviderCommon::WlanApiInterface { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockWlanApi() : calls_(0), bool_return_(true) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ANNOTATE_BENIGN_RACE(&calls_, "This is a test-only data race on a counter"); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ON_CALL(*this, GetAccessPointData(_)) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillByDefault(Invoke(this, &MockWlanApi::GetAccessPointDataInternal)); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(GetAccessPointData, bool(WifiData::AccessPointDataSet* data)); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int calls_; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool bool_return_; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiData::AccessPointDataSet data_out_; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetAccessPointDataInternal(WifiData::AccessPointDataSet* data) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++calls_; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *data = data_out_; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return bool_return_; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class MockPollingPolicy : public WifiPollingPolicy { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockPollingPolicy() { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ON_CALL(*this,PollingInterval()) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillByDefault(Return(1)); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ON_CALL(*this,NoWifiInterval()) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillByDefault(Return(1)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(PollingInterval, int()); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(NoWifiInterval, int()); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdatePollingInterval(bool) {} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Stops the specified (nested) message loop when the callback is called. 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class MessageLoopQuitter { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 63424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) explicit MessageLoopQuitter(base::MessageLoop* message_loop) 64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) : message_loop_to_quit_(message_loop), 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) callback_(base::Bind(&MessageLoopQuitter::OnWifiDataUpdate, 66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::Unretained(this))) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(message_loop_to_quit_ != NULL); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnWifiDataUpdate(WifiDataProvider* provider) { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Provider should call back on client's thread. 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(base::MessageLoop::current(), message_loop_to_quit_); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_to_quit_->QuitNow(); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop* message_loop_to_quit_; 76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) WifiDataProvider::WifiDataUpdateCallback callback_; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WifiDataProviderCommonWithMock : public WifiDataProviderCommon { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiDataProviderCommonWithMock() 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : new_wlan_api_(new MockWlanApi), 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_polling_policy_(new MockPollingPolicy) {} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WifiDataProviderCommon 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WlanApiInterface* NewWlanApi() OVERRIDE { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(new_wlan_api_ != NULL); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new_wlan_api_.release(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual WifiPollingPolicy* NewPollingPolicy() OVERRIDE { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(new_polling_policy_ != NULL); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new_polling_policy_.release(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MockWlanApi> new_wlan_api_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MockPollingPolicy> new_polling_policy_; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WifiDataProviderCommonWithMock() {} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WifiDataProviderCommonWithMock); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WifiDataProviderImplBase* CreateWifiDataProviderCommonWithMock() { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new WifiDataProviderCommonWithMock; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Main test fixture 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GeolocationWifiDataProviderCommonTest : public testing::Test { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GeolocationWifiDataProviderCommonTest() 112424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) : loop_quitter_(&main_message_loop_) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_ = new WifiDataProviderCommonWithMock; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wlan_api_ = provider_->new_wlan_api_.get(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) polling_policy_ = provider_->new_polling_policy_.get(); 119424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) provider_->AddCallback(&loop_quitter_.callback_); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 122424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) provider_->RemoveCallback(&loop_quitter_.callback_); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->StopDataProvider(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_ = NULL; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop main_message_loop_; 129424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) MessageLoopQuitter loop_quitter_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<WifiDataProviderCommonWithMock> provider_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockWlanApi* wlan_api_; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockPollingPolicy* polling_policy_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, CreateDestroy) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test fixture members were SetUp correctly. 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(&main_message_loop_, base::MessageLoop::current()); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(NULL != provider_.get()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(NULL != wlan_api_); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, RunNormal) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*wlan_api_, GetAccessPointData(_)) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(AtLeast(1)); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*polling_policy_, PollingInterval()) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(AtLeast(1)); 1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) provider_->StartDataProvider(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_message_loop_.Run(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SUCCEED(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, NoWifi){ 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*polling_policy_, NoWifiInterval()) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(AtLeast(1)); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*wlan_api_, GetAccessPointData(_)) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(false)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->StartDataProvider(); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_message_loop_.Run(); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, IntermittentWifi){ 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*polling_policy_, PollingInterval()) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(AtLeast(1)); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*polling_policy_, NoWifiInterval()) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*wlan_api_, GetAccessPointData(_)) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(true)) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(false)) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(DoDefault()); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccessPointData single_access_point; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) single_access_point.channel = 2; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) single_access_point.mac_address = 3; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) single_access_point.radio_signal_strength = 4; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) single_access_point.signal_to_noise = 5; 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) single_access_point.ssid = base::ASCIIToUTF16("foossid"); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wlan_api_->data_out_.insert(single_access_point); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->StartDataProvider(); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_message_loop_.Run(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_message_loop_.Run(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, DoAnEmptyScan) { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*wlan_api_, GetAccessPointData(_)) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(AtLeast(1)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*polling_policy_, PollingInterval()) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(AtLeast(1)); 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) provider_->StartDataProvider(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_message_loop_.Run(); 191424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(wlan_api_->calls_, 1); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiData data; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->GetData(&data)); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, static_cast<int>(data.access_point_data.size())); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, DoScanWithResults) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*wlan_api_, GetAccessPointData(_)) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(AtLeast(1)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*polling_policy_, PollingInterval()) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(AtLeast(1)); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccessPointData single_access_point; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) single_access_point.channel = 2; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) single_access_point.mac_address = 3; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) single_access_point.radio_signal_strength = 4; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) single_access_point.signal_to_noise = 5; 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) single_access_point.ssid = base::ASCIIToUTF16("foossid"); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wlan_api_->data_out_.insert(single_access_point); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) provider_->StartDataProvider(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_message_loop_.Run(); 212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(wlan_api_->calls_, 1); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiData data; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->GetData(&data)); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, static_cast<int>(data.access_point_data.size())); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(single_access_point.ssid, data.access_point_data.begin()->ssid); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 219424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, RegisterUnregister) { 220424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) MessageLoopQuitter loop_quitter(&main_message_loop_); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiDataProvider::SetFactory(CreateWifiDataProviderCommonWithMock); 222424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) WifiDataProvider::Register(&loop_quitter.callback_); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main_message_loop_.Run(); 224424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) WifiDataProvider::Unregister(&loop_quitter.callback_); 225424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) WifiDataProvider::ResetFactory(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 229