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