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"
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/browser/geolocation/wifi_data_provider_manager.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::AtLeast;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::DoDefault;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Invoke;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Return;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockWlanApi : public WifiDataProviderCommon::WlanApiInterface {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockWlanApi() : calls_(0), bool_return_(true) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ANNOTATE_BENIGN_RACE(&calls_, "This is a test-only data race on a counter");
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ON_CALL(*this, GetAccessPointData(_))
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .WillByDefault(Invoke(this, &MockWlanApi::GetAccessPointDataInternal));
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(GetAccessPointData, bool(WifiData::AccessPointDataSet* data));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int calls_;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool bool_return_;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WifiData::AccessPointDataSet data_out_;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetAccessPointDataInternal(WifiData::AccessPointDataSet* data) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++calls_;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *data = data_out_;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return bool_return_;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class MockPollingPolicy : public WifiPollingPolicy {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockPollingPolicy() {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ON_CALL(*this,PollingInterval())
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .WillByDefault(Return(1));
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ON_CALL(*this,NoWifiInterval())
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .WillByDefault(Return(1));
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(PollingInterval, int());
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(NoWifiInterval, int());
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdatePollingInterval(bool) {}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Stops the specified (nested) message loop when the callback is called.
62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class MessageLoopQuitter {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  explicit MessageLoopQuitter(base::MessageLoop* message_loop)
65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      : message_loop_to_quit_(message_loop),
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        callback_(base::Bind(&MessageLoopQuitter::OnWifiDataUpdate,
67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                             base::Unretained(this))) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK(message_loop_to_quit_ != NULL);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void OnWifiDataUpdate() {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Provider should call back on client's thread.
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(base::MessageLoop::current(), message_loop_to_quit_);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    message_loop_to_quit_->QuitNow();
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::MessageLoop* message_loop_to_quit_;
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  WifiDataProviderManager::WifiDataUpdateCallback callback_;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WifiDataProviderCommonWithMock : public WifiDataProviderCommon {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WifiDataProviderCommonWithMock()
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : new_wlan_api_(new MockWlanApi),
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new_polling_policy_(new MockPollingPolicy) {}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WifiDataProviderCommon
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual WlanApiInterface* NewWlanApi() OVERRIDE {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK(new_wlan_api_ != NULL);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return new_wlan_api_.release();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual WifiPollingPolicy* NewPollingPolicy() OVERRIDE {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK(new_polling_policy_ != NULL);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return new_polling_policy_.release();
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<MockWlanApi> new_wlan_api_;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<MockPollingPolicy> new_polling_policy_;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WifiDataProviderCommonWithMock() {}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WifiDataProviderCommonWithMock);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)WifiDataProvider* CreateWifiDataProviderCommonWithMock() {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new WifiDataProviderCommonWithMock;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Main test fixture
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GeolocationWifiDataProviderCommonTest : public testing::Test {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GeolocationWifiDataProviderCommonTest()
113424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      : loop_quitter_(&main_message_loop_) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    provider_ = new WifiDataProviderCommonWithMock;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    wlan_api_ = provider_->new_wlan_api_.get();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    polling_policy_ = provider_->new_polling_policy_.get();
120424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    provider_->AddCallback(&loop_quitter_.callback_);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() {
123424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    provider_->RemoveCallback(&loop_quitter_.callback_);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    provider_->StopDataProvider();
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    provider_ = NULL;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::MessageLoop main_message_loop_;
130424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  MessageLoopQuitter loop_quitter_;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<WifiDataProviderCommonWithMock> provider_;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockWlanApi* wlan_api_;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockPollingPolicy* polling_policy_;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, CreateDestroy) {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test fixture members were SetUp correctly.
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(&main_message_loop_, base::MessageLoop::current());
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(NULL != provider_.get());
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(NULL != wlan_api_);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
143424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, RunNormal) {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*wlan_api_, GetAccessPointData(_))
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(AtLeast(1));
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*polling_policy_, PollingInterval())
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(AtLeast(1));
1483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  provider_->StartDataProvider();
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  main_message_loop_.Run();
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SUCCEED();
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, NoWifi){
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*polling_policy_, NoWifiInterval())
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(AtLeast(1));
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*wlan_api_, GetAccessPointData(_))
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillRepeatedly(Return(false));
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->StartDataProvider();
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  main_message_loop_.Run();
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, IntermittentWifi){
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*polling_policy_, PollingInterval())
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(AtLeast(1));
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*polling_policy_, NoWifiInterval())
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(1);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*wlan_api_, GetAccessPointData(_))
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(true))
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(false))
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillRepeatedly(DoDefault());
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AccessPointData single_access_point;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  single_access_point.channel = 2;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  single_access_point.mac_address = 3;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  single_access_point.radio_signal_strength = 4;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  single_access_point.signal_to_noise = 5;
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  single_access_point.ssid = base::ASCIIToUTF16("foossid");
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  wlan_api_->data_out_.insert(single_access_point);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->StartDataProvider();
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  main_message_loop_.Run();
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  main_message_loop_.Run();
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(OS_MACOSX)
18603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define MAYBE_DoAnEmptyScan DISABLED_DoAnEmptyScan
18703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#else
18803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define MAYBE_DoAnEmptyScan DoAnEmptyScan
18903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif
19003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, MAYBE_DoAnEmptyScan) {
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*wlan_api_, GetAccessPointData(_))
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(AtLeast(1));
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*polling_policy_, PollingInterval())
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(AtLeast(1));
1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  provider_->StartDataProvider();
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  main_message_loop_.Run();
197424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_EQ(wlan_api_->calls_, 1);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WifiData data;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(provider_->GetData(&data));
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0, static_cast<int>(data.access_point_data.size()));
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(OS_MACOSX)
20403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define MAYBE_DoScanWithResults DISABLED_DoScanWithResults
20503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#else
20603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define MAYBE_DoScanWithResults DoScanWithResults
20703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif
20803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, MAYBE_DoScanWithResults) {
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*wlan_api_, GetAccessPointData(_))
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(AtLeast(1));
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*polling_policy_, PollingInterval())
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(AtLeast(1));
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AccessPointData single_access_point;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  single_access_point.channel = 2;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  single_access_point.mac_address = 3;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  single_access_point.radio_signal_strength = 4;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  single_access_point.signal_to_noise = 5;
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  single_access_point.ssid = base::ASCIIToUTF16("foossid");
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  wlan_api_->data_out_.insert(single_access_point);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  provider_->StartDataProvider();
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  main_message_loop_.Run();
223424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_EQ(wlan_api_->calls_, 1);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WifiData data;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(provider_->GetData(&data));
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, static_cast<int>(data.access_point_data.size()));
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(single_access_point.ssid, data.access_point_data.begin()->ssid);
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
230424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderCommonTest, RegisterUnregister) {
231424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  MessageLoopQuitter loop_quitter(&main_message_loop_);
23203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  WifiDataProviderManager::SetFactoryForTesting(
23303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      CreateWifiDataProviderCommonWithMock);
23403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  WifiDataProviderManager::Register(&loop_quitter.callback_);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  main_message_loop_.Run();
23603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  WifiDataProviderManager::Unregister(&loop_quitter.callback_);
23703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  WifiDataProviderManager::ResetFactoryForTesting();
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
241