17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_device_handler.h"
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/bind.h"
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_ptr.h"
99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/values.h"
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/dbus/dbus_thread_manager.h"
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/dbus/shill_device_client.h"
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "third_party/cros_system_api/dbus/service_constants.h"
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace chromeos {
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace {
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kDefaultCellularDevicePath[] = "stub_cellular_device";
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kDefaultWifiDevicePath[] = "stub_wifi_device";
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kResultSuccess[] = "success";
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass NetworkDeviceHandlerTest : public testing::Test {
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  NetworkDeviceHandlerTest() {}
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual ~NetworkDeviceHandlerTest() {}
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void SetUp() OVERRIDE {
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    DBusThreadManager::InitializeWithStub();
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    message_loop_.RunUntilIdle();
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    success_callback_ = base::Bind(&NetworkDeviceHandlerTest::SuccessCallback,
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   base::Unretained(this));
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    properties_success_callback_ =
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        base::Bind(&NetworkDeviceHandlerTest::PropertiesSuccessCallback,
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                   base::Unretained(this));
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    error_callback_ = base::Bind(&NetworkDeviceHandlerTest::ErrorCallback,
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                 base::Unretained(this));
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    network_device_handler_.reset(new NetworkDeviceHandler());
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    ShillDeviceClient::TestInterface* device_test =
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface();
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    device_test->ClearDevices();
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    device_test->AddDevice(
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        kDefaultCellularDevicePath, flimflam::kTypeCellular, "cellular1");
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    device_test->AddDevice(
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        kDefaultWifiDevicePath, flimflam::kTypeWifi, "wifi1");
50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    base::FundamentalValue allow_roaming(false);
52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    device_test->SetDeviceProperty(
53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch        kDefaultCellularDevicePath,
54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch        flimflam::kCellularAllowRoamingProperty,
55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch        allow_roaming);
56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    base::ListValue test_ip_configs;
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    test_ip_configs.AppendString("ip_config1");
597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    device_test->SetDeviceProperty(
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        kDefaultWifiDevicePath, flimflam::kIPConfigsProperty, test_ip_configs);
617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void TearDown() OVERRIDE {
647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    network_device_handler_.reset();
657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    DBusThreadManager::Shutdown();
667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::Closure GetErrorInvokingCallback(
697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const std::string& device_path,
707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const std::string& error_name) {
717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return base::Bind(&NetworkDeviceHandlerTest::InvokeDBusErrorCallback,
727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                      base::Unretained(this),
737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                      device_path,
747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                      base::Bind(&NetworkDeviceHandlerTest::ErrorCallback,
757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                 base::Unretained(this)),
767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                      error_name);
777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void ErrorCallback(const std::string& error_name,
807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                     scoped_ptr<base::DictionaryValue> error_data) {
817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    result_ = error_name;
827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void SuccessCallback() {
857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    result_ = kResultSuccess;
867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void PropertiesSuccessCallback(const std::string& device_path,
897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                 const base::DictionaryValue& properties) {
907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    result_ = kResultSuccess;
917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    properties_.reset(properties.DeepCopy());
927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void InvokeDBusErrorCallback(
957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const std::string& device_path,
967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const network_handler::ErrorCallback& callback,
977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const std::string& error_name) {
987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    network_device_handler_->HandleShillCallFailureForTest(
997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        device_path, callback, error_name, "Error message.");
1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch protected:
1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  std::string result_;
1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  scoped_ptr<NetworkDeviceHandler> network_device_handler_;
1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::MessageLoopForUI message_loop_;
1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::Closure success_callback_;
1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_handler::DictionaryResultCallback properties_success_callback_;
1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_handler::ErrorCallback error_callback_;
1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  scoped_ptr<base::DictionaryValue> properties_;
1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private:
1137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(NetworkDeviceHandlerTest);
1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(NetworkDeviceHandlerTest, ErrorTranslation) {
1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(result_.empty());
1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_handler::ErrorCallback callback =
1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      base::Bind(&NetworkDeviceHandlerTest::ErrorCallback,
1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                 base::Unretained(this));
1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->HandleShillCallFailureForTest(
1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      callback,
1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "org.chromium.flimflam.Error.Failure",
1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "Error happened.");
1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorFailure, result_);
1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->HandleShillCallFailureForTest(
1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      callback,
1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "org.chromium.flimflam.Error.IncorrectPin",
1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "Incorrect pin.");
1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorIncorrectPin, result_);
1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->HandleShillCallFailureForTest(
1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
1387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      callback,
1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "org.chromium.flimflam.Error.NotSupported",
1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "Operation not supported.");
1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorNotSupported, result_);
1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->HandleShillCallFailureForTest(
1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      callback,
1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "org.chromium.flimflam.Error.PinBlocked",
1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "PIN is blocked.");
1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorPinBlocked, result_);
1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->HandleShillCallFailureForTest(
1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      callback,
1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "org.chromium.flimflam.Error.PinRequired",
1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "A PIN error has occurred.");
1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorPinRequired, result_);
1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->HandleShillCallFailureForTest(
1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      callback,
1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "org.chromium.flimflam.Error.WorldExploded",
1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      "The earth is no more.");
1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorUnknown, result_);
1637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(NetworkDeviceHandlerTest, GetDeviceProperties) {
1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->GetDeviceProperties(
1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultWifiDevicePath,
1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      properties_success_callback_,
1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  std::string type;
1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  properties_->GetString(flimflam::kTypeProperty, &type);
1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(flimflam::kTypeWifi, type);
1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
177ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST_F(NetworkDeviceHandlerTest, SetDeviceProperty) {
178ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Check that GetDeviceProperties returns the expected initial values.
179ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  network_device_handler_->GetDeviceProperties(
180ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      kDefaultCellularDevicePath,
181ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      properties_success_callback_,
182ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      error_callback_);
183ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  message_loop_.RunUntilIdle();
184ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
185ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool allow_roaming;
186ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(properties_->GetBooleanWithoutPathExpansion(
187ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      flimflam::kCellularAllowRoamingProperty, &allow_roaming));
188ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_FALSE(allow_roaming);
189ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
190ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Set the flimflam::kCellularAllowRoamingProperty to true. The call
191ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // should succeed and the value should be set.
192ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  base::FundamentalValue allow_roaming_value(true);
193ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  network_device_handler_->SetDeviceProperty(
194ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      kDefaultCellularDevicePath,
195ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      flimflam::kCellularAllowRoamingProperty,
196ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      allow_roaming_value,
197ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      success_callback_,
198ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      error_callback_);
199ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  message_loop_.RunUntilIdle();
200ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
201ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
202ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // GetDeviceProperties should return the value set by SetDeviceProperty.
203ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  network_device_handler_->GetDeviceProperties(
204ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      kDefaultCellularDevicePath,
205ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      properties_success_callback_,
206ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      error_callback_);
207ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  message_loop_.RunUntilIdle();
208ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
209ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(properties_->GetBooleanWithoutPathExpansion(
210ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      flimflam::kCellularAllowRoamingProperty, &allow_roaming));
211ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(allow_roaming);
212ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
213ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Set property on an invalid path.
214ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  network_device_handler_->SetDeviceProperty(
215ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      "/device/invalid_path",
216ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      flimflam::kCellularAllowRoamingProperty,
217ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      allow_roaming_value,
218ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      success_callback_,
219ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      error_callback_);
220ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  message_loop_.RunUntilIdle();
221ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorFailure, result_);
222ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
223ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(NetworkDeviceHandlerTest, RequestRefreshIPConfigs) {
2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->RequestRefreshIPConfigs(
2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultWifiDevicePath,
2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      success_callback_,
2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // TODO(stevenjb): Add test interface to ShillIPConfigClient and test
2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // refresh calls.
2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(NetworkDeviceHandlerTest, SetCarrier) {
2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const char kCarrier[] = "carrier";
2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the success callback gets called.
2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->SetCarrier(
2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
2417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kCarrier,
2427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      success_callback_,
2437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
2447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
2457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
2467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the shill error gets properly translated and propagates to the
2487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // error callback.
2497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->SetCarrier(
2507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
2517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kCarrier,
2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GetErrorInvokingCallback(kDefaultCellularDevicePath,
2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                               "org.chromium.flimflam.Error.NotSupported"),
2547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
2557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
2567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorNotSupported, result_);
2577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(NetworkDeviceHandlerTest, RequirePin) {
2607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const char kPin[] = "1234";
2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the success callback gets called.
2637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->RequirePin(
2647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
2657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      true,
2667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPin,
2677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      success_callback_,
2687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
2697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
2707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
2717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the shill error gets properly translated and propagates to the
2737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // error callback.
2747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->RequirePin(
2757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
2767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      true,
2777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPin,
2787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GetErrorInvokingCallback(kDefaultCellularDevicePath,
2797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                               "org.chromium.flimflam.Error.IncorrectPin"),
2807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
2817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
2827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorIncorrectPin, result_);
2837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2857dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(NetworkDeviceHandlerTest, EnterPin) {
2867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const char kPin[] = "1234";
2877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the success callback gets called.
2897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->EnterPin(
2907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
2917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPin,
2927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      success_callback_,
2937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
2947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
2957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
2967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the shill error gets properly translated and propagates to the
2987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // error callback.
2997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->EnterPin(
3007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
3017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPin,
3027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GetErrorInvokingCallback(kDefaultCellularDevicePath,
3037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                               "org.chromium.flimflam.Error.IncorrectPin"),
3047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
3057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
3067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorIncorrectPin, result_);
3077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3097dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(NetworkDeviceHandlerTest, UnblockPin) {
3107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const char kPuk[] = "12345678";
3117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const char kPin[] = "1234";
3127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the success callback gets called.
3147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->UnblockPin(
3157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
3167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPin,
3177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPuk,
3187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      success_callback_,
3197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
3207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
3217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
3227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the shill error gets properly translated and propagates to the
3247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // error callback.
3257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->UnblockPin(
3267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
3277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPin,
3287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPuk,
3297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GetErrorInvokingCallback(kDefaultCellularDevicePath,
3307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                               "org.chromium.flimflam.Error.PinRequired"),
3317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
3327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
3337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorPinRequired, result_);
3347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3367dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(NetworkDeviceHandlerTest, ChangePin) {
3377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const char kOldPin[] = "4321";
3387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const char kNewPin[] = "1234";
3397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the success callback gets called.
3417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->ChangePin(
3427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
3437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kOldPin,
3447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kNewPin,
3457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      success_callback_,
3467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
3477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
3487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(kResultSuccess, result_);
3497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that the shill error gets properly translated and propagates to the
3517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // error callback.
3527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_->ChangePin(
3537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultCellularDevicePath,
3547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kOldPin,
3557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kNewPin,
3567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      GetErrorInvokingCallback(kDefaultCellularDevicePath,
3577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                               "org.chromium.flimflam.Error.PinBlocked"),
3587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      error_callback_);
3597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  message_loop_.RunUntilIdle();
3607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(NetworkDeviceHandler::kErrorPinBlocked, result_);
3617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace chromeos
364