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 "content/browser/geolocation/wifi_data_provider_linux.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/message.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/mock_bus.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/mock_object_proxy.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/object_path.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/object_proxy.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Invoke; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Unused; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GeolocationWifiDataProviderLinuxTest : public testing::Test { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a mock bus. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::Bus::Options options; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options.bus_type = dbus::Bus::SYSTEM; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_bus_ = new dbus::MockBus(options); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a mock proxy that behaves as NetworkManager. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_network_manager_proxy_ = 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new dbus::MockObjectProxy( 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_bus_.get(), 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "org.freedesktop.NetworkManager", 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::ObjectPath("/org/freedesktop/NetworkManager")); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set an expectation so mock_network_manager_proxy_'s 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CallMethodAndBlock() will use CreateNetworkManagerProxyResponse() 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to return responses. 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*mock_network_manager_proxy_.get(), 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockCallMethodAndBlock(_, _)) 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .WillRepeatedly(Invoke(this, 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) &GeolocationWifiDataProviderLinuxTest:: 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateNetworkManagerProxyResponse)); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a mock proxy that behaves as NetworkManager/Devices/0. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_device_proxy_ = 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new dbus::MockObjectProxy( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_bus_.get(), 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "org.freedesktop.NetworkManager", 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::ObjectPath("/org/freedesktop/NetworkManager/Devices/0")); 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*mock_device_proxy_.get(), MockCallMethodAndBlock(_, _)) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Invoke( 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this, 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) &GeolocationWifiDataProviderLinuxTest::CreateDeviceProxyResponse)); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a mock proxy that behaves as NetworkManager/AccessPoint/0. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_access_point_proxy_ = 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new dbus::MockObjectProxy( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_bus_.get(), 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "org.freedesktop.NetworkManager", 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::ObjectPath("/org/freedesktop/NetworkManager/AccessPoint/0")); 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*mock_access_point_proxy_.get(), MockCallMethodAndBlock(_, _)) 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .WillRepeatedly(Invoke(this, 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) &GeolocationWifiDataProviderLinuxTest:: 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateAccessPointProxyResponse)); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set an expectation so mock_bus_'s GetObjectProxy() for the given 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // service name and the object path will return 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mock_network_manager_proxy_. 73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL( 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *mock_bus_.get(), 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetObjectProxy("org.freedesktop.NetworkManager", 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dbus::ObjectPath("/org/freedesktop/NetworkManager"))) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(mock_network_manager_proxy_.get())); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Likewise, set an expectation for mock_device_proxy_. 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL( 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *mock_bus_.get(), 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetObjectProxy( 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "org.freedesktop.NetworkManager", 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dbus::ObjectPath("/org/freedesktop/NetworkManager/Devices/0"))) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(mock_device_proxy_.get())) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(mock_device_proxy_.get())); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Likewise, set an expectation for mock_access_point_proxy_. 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL( 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *mock_bus_.get(), 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetObjectProxy( 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "org.freedesktop.NetworkManager", 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dbus::ObjectPath("/org/freedesktop/NetworkManager/AccessPoint/0"))) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(mock_access_point_proxy_.get())); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ShutdownAndBlock() should be called. 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*mock_bus_.get(), ShutdownAndBlock()).WillOnce(Return()); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the wlan API with the mock bus object injected. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wifi_provider_linux_ = new WifiDataProviderLinux; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wlan_api_.reset( 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wifi_provider_linux_->NewWlanApiForTesting(mock_bus_.get())); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(wlan_api_.get()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DeviceDataProviderImplBase, a super class of WifiDataProviderLinux, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // requires a message loop to be present. message_loop_ is defined here, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as it should outlive wifi_provider_linux_. 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop message_loop_; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<dbus::MockBus> mock_bus_; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<dbus::MockObjectProxy> mock_network_manager_proxy_; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<dbus::MockObjectProxy> mock_access_point_proxy_; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<dbus::MockObjectProxy> mock_device_proxy_; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<WifiDataProviderLinux> wifi_provider_linux_; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<WifiDataProviderCommon::WlanApiInterface> wlan_api_; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a response for |mock_network_manager_proxy_|. 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::Response* CreateNetworkManagerProxyResponse( 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::MethodCall* method_call, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Unused) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (method_call->GetInterface() == "org.freedesktop.NetworkManager" && 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_call->GetMember() == "GetDevices") { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The list of devices is asked. Return the object path. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<dbus::ObjectPath> object_paths; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) object_paths.push_back( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::ObjectPath("/org/freedesktop/NetworkManager/Devices/0")); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::MessageWriter writer(response.get()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendArrayOfObjectPaths(object_paths); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return response.release(); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Unexpected method call: " << method_call->ToString(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a response for |mock_device_proxy_|. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::Response* CreateDeviceProxyResponse(dbus::MethodCall* method_call, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Unused) { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (method_call->GetInterface() == DBUS_INTERFACE_PROPERTIES && 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_call->GetMember() == "Get") { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::MessageReader reader(method_call); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string interface_name; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string property_name; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reader.PopString(&interface_name) && 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reader.PopString(&property_name)) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The device type is asked. Respond that the device type is wifi. 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::MessageWriter writer(response.get()); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This matches NM_DEVICE_TYPE_WIFI in wifi_data_provider_linux.cc. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kDeviceTypeWifi = 2; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendVariantOfUint32(kDeviceTypeWifi); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return response.release(); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (method_call->GetInterface() == 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "org.freedesktop.NetworkManager.Device.Wireless" && 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_call->GetMember() == "GetAccessPoints") { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The list of access points is asked. Return the object path. 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::MessageWriter writer(response.get()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<dbus::ObjectPath> object_paths; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) object_paths.push_back( 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::ObjectPath("/org/freedesktop/NetworkManager/AccessPoint/0")); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendArrayOfObjectPaths(object_paths); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return response.release(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Unexpected method call: " << method_call->ToString(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a response for |mock_access_point_proxy_|. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::Response* CreateAccessPointProxyResponse(dbus::MethodCall* method_call, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Unused) { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (method_call->GetInterface() == DBUS_INTERFACE_PROPERTIES && 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) method_call->GetMember() == "Get") { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::MessageReader reader(method_call); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string interface_name; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string property_name; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reader.PopString(&interface_name) && 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reader.PopString(&property_name)) { 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::MessageWriter writer(response.get()); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (property_name == "Ssid") { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kSsid[] = {0x74, 0x65, 0x73, 0x74}; // "test" 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::MessageWriter variant_writer(response.get()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.OpenVariant("ay", &variant_writer); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) variant_writer.AppendArrayOfBytes(kSsid, arraysize(kSsid)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.CloseContainer(&variant_writer); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (property_name == "HwAddress") { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will be converted to "00-11-22-33-44-55". 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string kMacAddress = "00:11:22:33:44:55"; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendVariantOfString(kMacAddress); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (property_name == "Strength") { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will be converted to -50. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kStrength = 100; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendVariantOfByte(kStrength); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (property_name == "Frequency") { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will be converted to channel 4. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 kFrequency = 2427; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendVariantOfUint32(kFrequency); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return response.release(); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Unexpected method call: " << method_call->ToString(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GeolocationWifiDataProviderLinuxTest, GetAccessPointData) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiData::AccessPointDataSet access_point_data_set; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(wlan_api_->GetAccessPointData(&access_point_data_set)); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, access_point_data_set.size()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccessPointData access_point_data = *access_point_data_set.begin(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the contents of the access point data. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The expected values come from CreateAccessPointProxyResponse() above. 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("test", base::UTF16ToUTF8(access_point_data.ssid)); 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("00-11-22-33-44-55", 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF16ToUTF8(access_point_data.mac_address)); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(-50, access_point_data.radio_signal_strength); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, access_point_data.channel); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 233