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