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 "base/bind.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/mock_dbus_thread_manager.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/mock_gsm_sms_client.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/mock_shill_device_client.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/mock_shill_ipconfig_client.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/mock_shill_manager_client.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/mock_shill_profile_client.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/mock_shill_service_client.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/cros_network_functions.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/sms_watcher.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Invoke; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Pointee; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SaveArg; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrEq; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Matcher to match base::Value. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER_P(IsEqualTo, value, "") { return arg.Equals(value); } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Matcher to match SMS. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER_P(IsSMSEqualTo, sms, "") { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sms.timestamp == arg.timestamp && 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(sms.number) == arg.number && 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(sms.text) == arg.text && 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms.validity == arg.validity && 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms.msgclass == arg.msgclass; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Matcher to match IPConfig::path 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER_P(IsIPConfigPathEqualTo, str, "") { return str == arg.path; } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kExamplePath[] = "/foo/bar/baz"; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A mock to check arguments of NetworkPropertiesCallback and ensure that the 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// callback is called exactly once. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockNetworkPropertiesCallback { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a NetworkPropertiesCallback with expectations. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static NetworkPropertiesCallback CreateCallback( 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_path, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue& expected_result) { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesCallback* mock_callback = 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockNetworkPropertiesCallback; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_callback, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Run(expected_path, Pointee(IsEqualTo(&expected_result)))) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Bind(&MockNetworkPropertiesCallback::Run, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Owned(mock_callback)); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(Run, void(const std::string& path, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* result)); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A mock to check arguments of NetworkPropertiesWatcherCallback and ensure that 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the callback is called exactly once. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockNetworkPropertiesWatcherCallback { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a NetworkPropertiesWatcherCallback with expectations. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static NetworkPropertiesWatcherCallback CreateCallback( 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_path, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_key, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& expected_value) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesWatcherCallback* mock_callback = 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockNetworkPropertiesWatcherCallback; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_callback, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Run(expected_path, expected_key, IsEqualTo(&expected_value))) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Bind(&MockNetworkPropertiesWatcherCallback::Run, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Owned(mock_callback)); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD3(Run, void(const std::string& expected_path, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_key, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& value)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test for cros_network_functions.cc without Libcros. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CrosNetworkFunctionsTest : public testing::Test { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosNetworkFunctionsTest() : mock_profile_client_(NULL), 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary_value_result_(NULL) {} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDBusThreadManager* mock_dbus_thread_manager = new MockDBusThreadManager; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_dbus_thread_manager, GetSystemBus()) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(reinterpret_cast<dbus::Bus*>(NULL))); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_device_client_ = 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_dbus_thread_manager->mock_shill_device_client(); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_ipconfig_client_ = 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_dbus_thread_manager->mock_shill_ipconfig_client(); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_manager_client_ = 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_dbus_thread_manager->mock_shill_manager_client(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_profile_client_ = 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_dbus_thread_manager->mock_shill_profile_client(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_service_client_ = 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_dbus_thread_manager->mock_shill_service_client(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_gsm_sms_client_ = mock_dbus_thread_manager->mock_gsm_sms_client(); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DBusThreadManager::Shutdown(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_profile_client_ = NULL; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handles responses for GetProperties method calls for ShillManagerClient. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetManagerProperties( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShillClientHelper::DictionaryValueCallback& callback) { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(DBUS_METHOD_CALL_SUCCESS, *dictionary_value_result_); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handles responses for GetProperties method calls. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetProperties( 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath& path, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShillClientHelper::DictionaryValueCallback& callback) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(DBUS_METHOD_CALL_SUCCESS, *dictionary_value_result_); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handles responses for GetProperties method calls that return 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // errors in an error callback. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetPropertiesWithoutStatus( 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath& path, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShillClientHelper::DictionaryValueCallbackWithoutStatus& callback, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShillClientHelper::ErrorCallback& error_callback) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(*dictionary_value_result_); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handles responses for GetEntry method calls. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetEntry( 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath& profile_path, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& entry_path, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShillClientHelper::DictionaryValueCallbackWithoutStatus& callback, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShillClientHelper::ErrorCallback& error_callback) { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(*dictionary_value_result_); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mock NetworkOperationCallback. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD3(MockNetworkOperationCallback, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(const std::string& path, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkMethodErrorType error, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& error_message)); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mock MonitorSMSCallback. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(MockMonitorSMSCallback, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(const std::string& modem_device_path, const SMS& message)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockShillDeviceClient* mock_device_client_; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockShillIPConfigClient* mock_ipconfig_client_; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockShillManagerClient* mock_manager_client_; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockShillProfileClient* mock_profile_client_; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockShillServiceClient* mock_service_client_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockGsmSMSClient* mock_gsm_sms_client_; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* dictionary_value_result_; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosActivateCellularModem) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string service_path = "/"; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string carrier = "carrier"; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CallActivateCellularModemAndBlock(dbus::ObjectPath(service_path), 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) carrier)) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(true)); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(CrosActivateCellularModem(service_path, carrier)); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosCompleteCellularActivation) { 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string service_path = "/"; 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*mock_service_client_, 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CompleteCellularActivation(dbus::ObjectPath(service_path), _, _)) 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(1); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CrosCompleteCellularActivation(service_path); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosSetNetworkServiceProperty) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string service_path = "/"; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string property = "property"; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key1 = "key1"; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string string1 = "string1"; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key2 = "key2"; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string string2 = "string2"; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue value; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value.SetString(key1, string1); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value.SetString(key2, string2); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetProperty(dbus::ObjectPath(service_path), property, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsEqualTo(&value), _, _)).Times(1); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSetNetworkServiceProperty(service_path, property, value); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosClearNetworkServiceProperty) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string service_path = "/"; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string property = "property"; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearProperty(dbus::ObjectPath(service_path), property, _, _)) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosClearNetworkServiceProperty(service_path, property); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosSetNetworkDeviceProperty) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string device_path = "/"; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string property = "property"; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool kBool = true; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FundamentalValue value(kBool); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetProperty(dbus::ObjectPath(device_path), StrEq(property), 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsEqualTo(&value), _, _)).Times(1); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSetNetworkDeviceProperty(device_path, property, value); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosSetNetworkIPConfigProperty) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string ipconfig_path = "/"; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string property = "property"; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kInt = 1234; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FundamentalValue value(kInt); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_ipconfig_client_, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetProperty(dbus::ObjectPath(ipconfig_path), property, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsEqualTo(&value), _)).Times(1); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSetNetworkIPConfigProperty(ipconfig_path, property, value); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosSetNetworkManagerProperty) { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string property = "property"; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::StringValue value("string"); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_manager_client_, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetProperty(property, IsEqualTo(&value), _, _)).Times(1); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSetNetworkManagerProperty(property, value); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosDeleteServiceFromProfile) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string profile_path("/profile/path"); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string service_path("/service/path"); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_profile_client_, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteEntry(dbus::ObjectPath(profile_path), service_path, _, _)) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosDeleteServiceFromProfile(profile_path, service_path); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosMonitorNetworkManagerProperties) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key = "key"; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kValue = 42; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FundamentalValue value(kValue); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start monitoring. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillPropertyChangedObserver* observer = NULL; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_manager_client_, AddPropertyChangedObserver(_)) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<0>(&observer)); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosNetworkWatcher* watcher = CrosMonitorNetworkManagerProperties( 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesWatcherCallback::CreateCallback( 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kFlimflamServicePath, key, value)); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call callback. 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->OnPropertyChanged(key, value); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stop monitoring. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_manager_client_, 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemovePropertyChangedObserver(_)).Times(1); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete watcher; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosMonitorNetworkServiceProperties) { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath path("/path"); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key = "key"; 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kValue = 42; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FundamentalValue value(kValue); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start monitoring. 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillPropertyChangedObserver* observer = NULL; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, AddPropertyChangedObserver(path, _)) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<1>(&observer)); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertiesWatcherCallback callback = 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesWatcherCallback::CreateCallback(path.value(), 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key, value); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosNetworkWatcher* watcher = CrosMonitorNetworkServiceProperties( 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback, path.value()); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call callback. 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->OnPropertyChanged(key, value); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stop monitoring. 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemovePropertyChangedObserver(path, _)).Times(1); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete watcher; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosMonitorNetworkDeviceProperties) { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath path("/path"); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key = "key"; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kValue = 42; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FundamentalValue value(kValue); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start monitoring. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillPropertyChangedObserver* observer = NULL; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, AddPropertyChangedObserver(path, _)) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<1>(&observer)); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertiesWatcherCallback callback = 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesWatcherCallback::CreateCallback(path.value(), 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key, value); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosNetworkWatcher* watcher = CrosMonitorNetworkDeviceProperties( 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback, path.value()); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call callback. 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer->OnPropertyChanged(key, value); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stop monitoring. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemovePropertyChangedObserver(path, _)).Times(1); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete watcher; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosMonitorSMS) { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string dbus_connection = ":1.1"; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath object_path("/object/path"); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue device_properties; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_properties.SetWithoutPathExpansion( 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kDBusConnectionProperty, 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(dbus_connection)); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_properties.SetWithoutPathExpansion( 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kDBusObjectProperty, 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(object_path.value())); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string number = "0123456789"; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string text = "Hello."; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string timestamp_string = 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "120424123456+00"; // 2012-04-24 12:34:56 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::Exploded timestamp_exploded = {}; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamp_exploded.year = 2012; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamp_exploded.month = 4; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamp_exploded.day_of_month = 24; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamp_exploded.hour = 12; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamp_exploded.minute = 34; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timestamp_exploded.second = 56; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time timestamp = base::Time::FromUTCExploded(timestamp_exploded); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string smsc = "9876543210"; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 kValidity = 1; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 kMsgclass = 2; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 kIndex = 0; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool kComplete = true; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* sms_dictionary = new base::DictionaryValue; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms_dictionary->SetWithoutPathExpansion( 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SMSWatcher::kNumberKey, new base::StringValue(number)); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms_dictionary->SetWithoutPathExpansion( 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SMSWatcher::kTextKey, new base::StringValue(text)); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms_dictionary->SetWithoutPathExpansion( 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SMSWatcher::kTimestampKey, 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(timestamp_string)); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms_dictionary->SetWithoutPathExpansion(SMSWatcher::kSmscKey, 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(smsc)); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms_dictionary->SetWithoutPathExpansion( 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SMSWatcher::kValidityKey, base::Value::CreateDoubleValue(kValidity)); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms_dictionary->SetWithoutPathExpansion( 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SMSWatcher::kClassKey, base::Value::CreateDoubleValue(kMsgclass)); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms_dictionary->SetWithoutPathExpansion( 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SMSWatcher::kIndexKey, base::Value::CreateDoubleValue(kIndex)); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue sms_list; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms_list.Append(sms_dictionary); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SMS sms; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms.timestamp = timestamp; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms.number = number.c_str(); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms.text = text.c_str(); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms.smsc = smsc.c_str(); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms.validity = kValidity; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms.msgclass = kMsgclass; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string modem_device_path = "/modem/device/path"; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillDeviceClient::DictionaryValueCallback get_properties_callback; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProperties(dbus::ObjectPath(modem_device_path), _)) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<1>(&get_properties_callback)); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GsmSMSClient::SmsReceivedHandler sms_received_handler; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_gsm_sms_client_, 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetSmsReceivedHandler(dbus_connection, object_path, _)) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<2>(&sms_received_handler)); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GsmSMSClient::ListCallback list_callback; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_gsm_sms_client_, List(dbus_connection, object_path, _)) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<2>(&list_callback)); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, MockMonitorSMSCallback( 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modem_device_path, IsSMSEqualTo(sms))).Times(2); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GsmSMSClient::DeleteCallback delete_callback; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_gsm_sms_client_, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delete(dbus_connection, object_path, kIndex, _)) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(SaveArg<3>(&delete_callback)); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GsmSMSClient::GetCallback get_callback; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_gsm_sms_client_, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Get(dbus_connection, object_path, kIndex, _)) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<3>(&get_callback)); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start monitoring. 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosNetworkWatcher* watcher = CrosMonitorSMS( 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modem_device_path, 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&CrosNetworkFunctionsTest::MockMonitorSMSCallback, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return GetProperties() result. 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_properties_callback.Run(DBUS_METHOD_CALL_SUCCESS, device_properties); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return List() result. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(list_callback.is_null()); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list_callback.Run(sms_list); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return Delete() result. 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(delete_callback.is_null()); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete_callback.Run(); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send fake signal. 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(sms_received_handler.is_null()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sms_received_handler.Run(kIndex, kComplete); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return Get() result. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(get_callback.is_null()); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_callback.Run(*sms_dictionary); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return Delete() result. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(delete_callback.is_null()); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete_callback.Run(); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stop monitoring. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_gsm_sms_client_, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetSmsReceivedHandler(dbus_connection, object_path)).Times(1); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete watcher; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestNetworkManagerProperties) { 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key1 = "key1"; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value1 = "value1"; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key2 = "key.2."; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value2 = "value2"; 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create result value. 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue result; 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key1, new base::StringValue(value1)); 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key2, new base::StringValue(value2)); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary_value_result_ = &result; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_manager_client_, 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProperties(_)).WillOnce( 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Invoke(this, 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &CrosNetworkFunctionsTest::OnGetManagerProperties)); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestNetworkManagerProperties( 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesCallback::CreateCallback( 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kFlimflamServicePath, result)); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestNetworkServiceProperties) { 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string service_path = "/service/path"; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key1 = "key1"; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value1 = "value1"; 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key2 = "key.2."; 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value2 = "value2"; 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create result value. 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue result; 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key1, new base::StringValue(value1)); 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key2, new base::StringValue(value2)); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary_value_result_ = &result; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProperties(dbus::ObjectPath(service_path), _)).WillOnce( 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Invoke(this, &CrosNetworkFunctionsTest::OnGetProperties)); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestNetworkServiceProperties( 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_path, 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesCallback::CreateCallback(service_path, result)); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestNetworkDeviceProperties) { 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string device_path = "/device/path"; 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key1 = "key1"; 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value1 = "value1"; 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key2 = "key.2."; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value2 = "value2"; 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create result value. 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue result; 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key1, new base::StringValue(value1)); 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key2, new base::StringValue(value2)); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary_value_result_ = &result; 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProperties(dbus::ObjectPath(device_path), _)).WillOnce( 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Invoke(this, &CrosNetworkFunctionsTest::OnGetProperties)); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestNetworkDeviceProperties( 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_path, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesCallback::CreateCallback(device_path, result)); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestNetworkProfileProperties) { 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string profile_path = "/profile/path"; 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key1 = "key1"; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value1 = "value1"; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key2 = "key.2."; 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value2 = "value2"; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create result value. 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue result; 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key1, new base::StringValue(value1)); 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key2, new base::StringValue(value2)); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary_value_result_ = &result; 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL( 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *mock_profile_client_, 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProperties(dbus::ObjectPath(profile_path), _, _)).WillOnce( 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Invoke(this, 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &CrosNetworkFunctionsTest::OnGetPropertiesWithoutStatus)); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestNetworkProfileProperties( 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_path, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesCallback::CreateCallback(profile_path, result)); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestNetworkProfileEntryProperties) { 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string profile_path = "profile path"; 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string profile_entry_path = "profile entry path"; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key1 = "key1"; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value1 = "value1"; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key2 = "key.2."; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value2 = "value2"; 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create result value. 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue result; 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key1, new base::StringValue(value1)); 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key2, new base::StringValue(value2)); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary_value_result_ = &result; 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_profile_client_, 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetEntry(dbus::ObjectPath(profile_path), 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_entry_path, _, _)) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Invoke(this, &CrosNetworkFunctionsTest::OnGetEntry)); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestNetworkProfileEntryProperties( 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_path, profile_entry_path, 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesCallback::CreateCallback(profile_entry_path, 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result)); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestHiddenWifiNetworkProperties) { 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string ssid = "ssid"; 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string security = "security"; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key1 = "key1"; 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value1 = "value1"; 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key2 = "key.2."; 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value2 = "value2"; 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create result value. 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue result; 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key1, new base::StringValue(value1)); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key2, new base::StringValue(value2)); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary_value_result_ = &result; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create expected argument to ShillManagerClient::GetService. 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue properties; 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) properties.SetWithoutPathExpansion( 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kModeProperty, 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(flimflam::kModeManaged)); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) properties.SetWithoutPathExpansion( 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kTypeProperty, 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(flimflam::kTypeWifi)); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) properties.SetWithoutPathExpansion( 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kSSIDProperty, 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(ssid)); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) properties.SetWithoutPathExpansion( 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kSecurityProperty, 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(security)); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath service_path("/service/path"); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObjectPathCallback callback; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_manager_client_, GetService(IsEqualTo(&properties), _, _)) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<1>(&callback)); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProperties(service_path, _)).WillOnce( 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Invoke(this, &CrosNetworkFunctionsTest::OnGetProperties)); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call function. 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestHiddenWifiNetworkProperties( 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ssid, security, 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesCallback::CreateCallback(service_path.value(), 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result)); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run callback to invoke GetProperties. 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(service_path); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestVirtualNetworkProperties) { 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string service_name = "service name"; 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string server_hostname = "server hostname"; 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string provider_type = "provider type"; 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key1 = "key1"; 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value1 = "value1"; 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key2 = "key.2."; 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string value2 = "value2"; 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create result value. 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue result; 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key1, new base::StringValue(value1)); 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.SetWithoutPathExpansion(key2, new base::StringValue(value2)); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary_value_result_ = &result; 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create expected argument to ShillManagerClient::ConfigureService. 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue properties; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) properties.SetWithoutPathExpansion( 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flimflam::kTypeProperty, new base::StringValue("vpn")); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) properties.SetWithoutPathExpansion( 614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) flimflam::kNameProperty, 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(service_name)); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) properties.SetWithoutPathExpansion( 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kProviderHostProperty, 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(server_hostname)); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) properties.SetWithoutPathExpansion( 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flimflam::kProviderTypeProperty, 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::StringValue(provider_type)); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath service_path("/service/path"); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObjectPathCallback callback; 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*mock_manager_client_, 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConfigureService(IsEqualTo(&properties), _, _)) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<1>(&callback)); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProperties(service_path, _)).WillOnce( 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Invoke(this, &CrosNetworkFunctionsTest::OnGetProperties)); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call function. 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestVirtualNetworkProperties( 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_name, server_hostname, provider_type, 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockNetworkPropertiesCallback::CreateCallback(service_path.value(), 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result)); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run callback to invoke GetProperties. 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(service_path); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestNetworkServiceDisconnect) { 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string service_path = "/service/path"; 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Disconnect(dbus::ObjectPath(service_path), _, _)).Times(1); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestNetworkServiceDisconnect(service_path); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestRemoveNetworkService) { 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string service_path = "/service/path"; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_service_client_, 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Remove(dbus::ObjectPath(service_path), _, _)).Times(1); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestRemoveNetworkService(service_path); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestNetworkScan) { 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_manager_client_, 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RequestScan(flimflam::kTypeWifi, _, _)).Times(1); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestNetworkScan(flimflam::kTypeWifi); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestNetworkDeviceEnable) { 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool kEnable = true; 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_manager_client_, 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnableTechnology(flimflam::kTypeWifi, _, _)).Times(1); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestNetworkDeviceEnable(flimflam::kTypeWifi, kEnable); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool kDisable = false; 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_manager_client_, 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DisableTechnology(flimflam::kTypeWifi, _, _)).Times(1); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestNetworkDeviceEnable(flimflam::kTypeWifi, kDisable); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestRequirePin) { 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string device_path = "/device/path"; 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string pin = "123456"; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool kRequire = true; 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure callback; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RequirePin(dbus::ObjectPath(device_path), pin, kRequire, _, _)) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<3>(&callback)); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, MockNetworkOperationCallback( 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_path, NETWORK_METHOD_ERROR_NONE, _)).Times(1); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestRequirePin( 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_path, pin, kRequire, 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&CrosNetworkFunctionsTest::MockNetworkOperationCallback, 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run saved callback. 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestEnterPin) { 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string device_path = "/device/path"; 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string pin = "123456"; 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure callback; 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterPin(dbus::ObjectPath(device_path), pin, _, _)) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<2>(&callback)); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, MockNetworkOperationCallback( 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_path, NETWORK_METHOD_ERROR_NONE, _)).Times(1); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestEnterPin( 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_path, pin, 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&CrosNetworkFunctionsTest::MockNetworkOperationCallback, 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run saved callback. 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestUnblockPin) { 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string device_path = "/device/path"; 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string unblock_code = "987654"; 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string pin = "123456"; 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure callback; 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL( 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *mock_device_client_, 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnblockPin(dbus::ObjectPath(device_path), unblock_code, pin, _, _)) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<3>(&callback)); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, MockNetworkOperationCallback( 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_path, NETWORK_METHOD_ERROR_NONE, _)).Times(1); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestUnblockPin(device_path, unblock_code, pin, 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&CrosNetworkFunctionsTest::MockNetworkOperationCallback, 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run saved callback. 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestChangePin) { 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string device_path = "/device/path"; 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string old_pin = "123456"; 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string new_pin = "234567"; 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure callback; 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChangePin(dbus::ObjectPath(device_path), old_pin, new_pin, _, _)) 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<3>(&callback)); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, MockNetworkOperationCallback( 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_path, NETWORK_METHOD_ERROR_NONE, _)).Times(1); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestChangePin(device_path, old_pin, new_pin, 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&CrosNetworkFunctionsTest::MockNetworkOperationCallback, 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run saved callback. 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosProposeScan) { 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string device_path = "/device/path"; 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProposeScan(dbus::ObjectPath(device_path), _)).Times(1); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosProposeScan(device_path); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosRequestCellularRegister) { 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string device_path = "/device/path"; 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string network_id = "networkid"; 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure callback; 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_device_client_, 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Register(dbus::ObjectPath(device_path), network_id, _, _)) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SaveArg<2>(&callback)); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, MockNetworkOperationCallback( 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_path, NETWORK_METHOD_ERROR_NONE, _)).Times(1); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosRequestCellularRegister(device_path, network_id, 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&CrosNetworkFunctionsTest::MockNetworkOperationCallback, 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run saved callback. 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosNetworkFunctionsTest, CrosConfigureService) { 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key1 = "key1"; 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string string1 = "string1"; 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string key2 = "key2"; 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string string2 = "string2"; 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue value; 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value.SetString(key1, string1); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value.SetString(key2, string2); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_manager_client_, ConfigureService(IsEqualTo(&value), _, _)) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosConfigureService(value); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 791