wimax_unittest.cc revision 247dcc12556bbfb7e50753befe217d29eb2f2f86
1c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan// Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan// Use of this source code is governed by a BSD-style license that can be 3c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan// found in the LICENSE file. 4c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 5c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/wimax.h" 6c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 7247dcc12556bbfb7e50753befe217d29eb2f2f86Ben Chan#include <memory> 8d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov#include <string> 9d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 10c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/event_dispatcher.h" 11ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray#include "shill/mock_dhcp_config.h" 12ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray#include "shill/mock_dhcp_provider.h" 13c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/mock_manager.h" 14c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/mock_metrics.h" 150bc1acaf481a6ebf33a1b973f15f800919b676eeBen Chan#include "shill/mock_proxy_factory.h" 16b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov#include "shill/mock_wimax_device_proxy.h" 17c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov#include "shill/mock_wimax_provider.h" 189893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkov#include "shill/mock_wimax_service.h" 19c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/nice_mock_control.h" 200bc1acaf481a6ebf33a1b973f15f800919b676eeBen Chan#include "shill/testing.h" 21b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov 2259f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkovusing base::Bind; 2359f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkovusing base::Unretained; 24b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkovusing std::string; 25912f0de92ca103568821e20412b7dc2529494f98Darin Petkovusing testing::_; 268ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkovusing testing::NiceMock; 279893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkovusing testing::Return; 28c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 29c07362bebe25b1db1716c24ed340b46b309868e5Ben Channamespace shill { 30c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 31c07362bebe25b1db1716c24ed340b46b309868e5Ben Channamespace { 32c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 33c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanconst char kTestLinkName[] = "wm0"; 344e64d2d72eed1947ab1d15e6ce25a47c37a9e10cBen Chanconst char kTestAddress[] = "01:23:45:67:89:ab"; 35c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanconst int kTestInterfaceIndex = 5; 36b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkovconst char kTestPath[] = "/org/chromium/WiMaxManager/Device/6"; 37c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 38c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan} // namespace 39c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 40c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanclass WiMaxTest : public testing::Test { 41c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan public: 42c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan WiMaxTest() 43b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov : proxy_(new MockWiMaxDeviceProxy()), 446c1e3bbca64d642cb30ed9952203626942bc1451Thieu Le metrics_(&dispatcher_), 4553cc894f1ca677f930da7fce1564db44a7b02791Ben Chan manager_(&control_, &dispatcher_, &metrics_, nullptr), 46ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray dhcp_config_(new MockDHCPConfig(&control_, 47ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray kTestLinkName)), 48d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov device_(new WiMax(&control_, &dispatcher_, &metrics_, &manager_, 49d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov kTestLinkName, kTestAddress, kTestInterfaceIndex, 50d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov kTestPath)) {} 51c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 52c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan virtual ~WiMaxTest() {} 53c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 54c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan protected: 5559f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov class Target { 5659f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov public: 5759f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov virtual ~Target() {} 5859f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov 5959f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov MOCK_METHOD1(EnabledStateChanged, void(const Error &error)); 6059f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov }; 6159f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov 62b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov virtual void SetUp() { 63d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov device_->proxy_factory_ = &proxy_factory_; 64ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray device_->set_dhcp_provider(&dhcp_provider_); 65b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov } 66b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov 67b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov virtual void TearDown() { 6853cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->SelectService(nullptr); 6953cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->pending_service_ = nullptr; 7053cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->proxy_factory_ = nullptr; 71b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov } 72b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov 73247dcc12556bbfb7e50753befe217d29eb2f2f86Ben Chan std::unique_ptr<MockWiMaxDeviceProxy> proxy_; 740bc1acaf481a6ebf33a1b973f15f800919b676eeBen Chan MockProxyFactory proxy_factory_; 75c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan NiceMockControl control_; 76c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan EventDispatcher dispatcher_; 773a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov NiceMock<MockMetrics> metrics_; 78c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan MockManager manager_; 79ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray MockDHCPProvider dhcp_provider_; 80ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray scoped_refptr<MockDHCPConfig> dhcp_config_; 81d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov WiMaxRefPtr device_; 82c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan}; 83c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 84b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin PetkovTEST_F(WiMaxTest, Constructor) { 85d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ(kTestPath, device_->path()); 86d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_FALSE(device_->scanning()); 87b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov} 88b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov 89b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin PetkovTEST_F(WiMaxTest, StartStop) { 90d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_FALSE(device_->proxy_.get()); 910bc1acaf481a6ebf33a1b973f15f800919b676eeBen Chan EXPECT_CALL(proxy_factory_, CreateWiMaxDeviceProxy(_)) 920bc1acaf481a6ebf33a1b973f15f800919b676eeBen Chan .WillOnce(ReturnAndReleasePointee(&proxy_)); 93912f0de92ca103568821e20412b7dc2529494f98Darin Petkov EXPECT_CALL(*proxy_, Enable(_, _, _)); 949893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkov EXPECT_CALL(*proxy_, set_networks_changed_callback(_)); 958ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_CALL(*proxy_, set_status_changed_callback(_)); 96912f0de92ca103568821e20412b7dc2529494f98Darin Petkov EXPECT_CALL(*proxy_, Disable(_, _, _)); 9753cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->Start(nullptr, EnabledStateChangedCallback()); 98c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov ASSERT_TRUE(device_->proxy_.get()); 99d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 1003a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov scoped_refptr<MockWiMaxService> service( 10153cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new MockWiMaxService(&control_, nullptr, &metrics_, &manager_)); 1023a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->pending_service_ = service; 1033a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_CALL(*service, SetState(Service::kStateIdle)); 104c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov device_->networks_.insert("path"); 105c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov MockWiMaxProvider provider; 106c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(manager_, wimax_provider()).WillOnce(Return(&provider)); 107c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(provider, OnNetworksChanged()); 1083a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->StartConnectTimeout(); 10953cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->Stop(nullptr, EnabledStateChangedCallback()); 110d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_TRUE(device_->networks_.empty()); 1113a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_FALSE(device_->IsConnectTimeoutStarted()); 1123a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_FALSE(device_->pending_service_); 113d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov} 114d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 115c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin PetkovTEST_F(WiMaxTest, OnServiceStopped) { 116e2ee5e009081a392fb31596c1d0cfb30bc7bad6eBen Chan scoped_refptr<NiceMock<MockWiMaxService>> service0( 11753cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new NiceMock<MockWiMaxService>(&control_, nullptr, &metrics_, &manager_)); 118c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov scoped_refptr<MockWiMaxService> service1( 11953cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new MockWiMaxService(&control_, nullptr, &metrics_, &manager_)); 120c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov device_->SelectService(service0); 121c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov device_->pending_service_ = service1; 122d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 12353cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->OnServiceStopped(nullptr); 124d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_TRUE(device_->selected_service()); 125d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_TRUE(device_->pending_service_); 126d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 127c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov device_->OnServiceStopped(service0); 128d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_FALSE(device_->selected_service()); 129c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_TRUE(device_->pending_service_); 130d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 131c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov device_->OnServiceStopped(service1); 132c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_FALSE(device_->selected_service()); 133c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_FALSE(device_->pending_service_); 134b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov} 135b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov 1369893d9c59f596e621463c8e97bb3933f8fa7edf6Darin PetkovTEST_F(WiMaxTest, OnNetworksChanged) { 137c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov MockWiMaxProvider provider; 138c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(manager_, wimax_provider()).WillOnce(Return(&provider)); 139c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(provider, OnNetworksChanged()); 140c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov device_->networks_.insert("foo"); 141d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov RpcIdentifiers networks; 142c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov networks.push_back("bar"); 143c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov networks.push_back("zoo"); 144c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov networks.push_back("bar"); 145d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov device_->OnNetworksChanged(networks); 146c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_EQ(2, device_->networks_.size()); 147c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_TRUE(ContainsKey(device_->networks_, "bar")); 148c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_TRUE(ContainsKey(device_->networks_, "zoo")); 1499893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkov} 1509893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkov 1518ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin PetkovTEST_F(WiMaxTest, OnConnectComplete) { 1528ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov scoped_refptr<MockWiMaxService> service( 15353cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new MockWiMaxService(&control_, nullptr, &metrics_, &manager_)); 1548ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov device_->pending_service_ = service; 1558ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_CALL(*service, SetState(_)).Times(0); 1568ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_TRUE(device_->pending_service_); 1578ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_CALL(*service, SetState(Service::kStateFailure)); 1588ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov device_->OnConnectComplete(Error(Error::kOperationFailed)); 1598ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_FALSE(device_->pending_service_); 1608ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov} 1618ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov 162a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin PetkovTEST_F(WiMaxTest, OnStatusChanged) { 163a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov scoped_refptr<MockWiMaxService> service( 16453cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new MockWiMaxService(&control_, nullptr, &metrics_, &manager_)); 165a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov 1663a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_EQ(wimax_manager::kDeviceStatusUninitialized, device_->status_); 167a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov device_->pending_service_ = service; 1683a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_CALL(*service, SetState(_)).Times(0); 1693a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_CALL(*service, ClearPassphrase()).Times(0); 1703a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->OnStatusChanged(wimax_manager::kDeviceStatusScanning); 1713a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_TRUE(device_->pending_service_); 1723a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_EQ(wimax_manager::kDeviceStatusScanning, device_->status_); 1733a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov 1743a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->status_ = wimax_manager::kDeviceStatusConnecting; 175a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_CALL(*service, SetState(Service::kStateFailure)); 176e494e313d474b91b4b5a5f6ad783e7d0bc343dc8Ben Chan EXPECT_CALL(*service, ClearPassphrase()).Times(0); 177a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov device_->OnStatusChanged(wimax_manager::kDeviceStatusScanning); 178a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_FALSE(device_->pending_service_); 179a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov 1803a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->status_ = wimax_manager::kDeviceStatusConnecting; 181a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov device_->SelectService(service); 182a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_CALL(*service, SetState(Service::kStateFailure)); 183a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_CALL(*service, SetState(Service::kStateIdle)); 184a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_CALL(*service, ClearPassphrase()).Times(0); 185a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov device_->OnStatusChanged(wimax_manager::kDeviceStatusScanning); 186a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_FALSE(device_->selected_service()); 187a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov 188a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov device_->pending_service_ = service; 189a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov device_->SelectService(service); 190a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_CALL(*service, SetState(_)).Times(0); 191a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_CALL(*service, ClearPassphrase()).Times(0); 192a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov device_->OnStatusChanged(wimax_manager::kDeviceStatusConnecting); 193a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_TRUE(device_->pending_service_); 194a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_TRUE(device_->selected_service()); 1953a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_EQ(wimax_manager::kDeviceStatusConnecting, device_->status_); 196a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov 197a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_CALL(*service, SetState(Service::kStateIdle)); 19853cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->SelectService(nullptr); 199a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov} 200a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov 201ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman UgurayTEST_F(WiMaxTest, UseNoArpGateway) { 202b108318d9554032feee1249d51c961e4f90f4561Paul Stewart EXPECT_CALL(dhcp_provider_, CreateConfig(kTestLinkName, _, _, false)) 203ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray .WillOnce(Return(dhcp_config_)); 204ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray device_->AcquireIPConfig(); 205ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray} 206ed8e610bb7b8759bcb62b20fbc4ac30a9f242b04Arman Uguray 207b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin PetkovTEST_F(WiMaxTest, DropService) { 208e2ee5e009081a392fb31596c1d0cfb30bc7bad6eBen Chan scoped_refptr<NiceMock<MockWiMaxService>> service0( 20953cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new NiceMock<MockWiMaxService>(&control_, nullptr, &metrics_, &manager_)); 210b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov scoped_refptr<MockWiMaxService> service1( 21153cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new MockWiMaxService(&control_, nullptr, &metrics_, &manager_)); 212b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov device_->SelectService(service0); 213b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov device_->pending_service_ = service1; 2143a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->StartConnectTimeout(); 215b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov 216b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov EXPECT_CALL(*service0, SetState(Service::kStateIdle)).Times(2); 217b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov EXPECT_CALL(*service1, SetState(Service::kStateIdle)); 218b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov device_->DropService(Service::kStateIdle); 219b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov EXPECT_FALSE(device_->selected_service()); 220b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov EXPECT_FALSE(device_->pending_service_); 2213a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_FALSE(device_->IsConnectTimeoutStarted()); 222b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov 223b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov // Expect no crash. 224b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov device_->DropService(Service::kStateFailure); 225b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov} 226b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov 227b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin PetkovTEST_F(WiMaxTest, OnDeviceVanished) { 228b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov device_->proxy_.reset(proxy_.release()); 229b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov scoped_refptr<MockWiMaxService> service( 23053cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new MockWiMaxService(&control_, nullptr, &metrics_, &manager_)); 231b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov device_->pending_service_ = service; 232b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov EXPECT_CALL(*service, SetState(Service::kStateIdle)); 233b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov device_->OnDeviceVanished(); 234b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov EXPECT_FALSE(device_->proxy_.get()); 235b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov EXPECT_FALSE(device_->pending_service_); 236b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov} 237b96a4515c8cc4432a87c70cbae2865e1445eb86eDarin Petkov 23859f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin PetkovTEST_F(WiMaxTest, OnEnableComplete) { 23959f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov MockWiMaxProvider provider; 24059f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EXPECT_CALL(manager_, wimax_provider()).WillOnce(Return(&provider)); 24159f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov RpcIdentifiers networks(1, "path"); 24259f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EXPECT_CALL(*proxy_, Networks(_)).WillOnce(Return(networks)); 24359f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov device_->proxy_.reset(proxy_.release()); 24459f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EXPECT_CALL(provider, OnNetworksChanged()); 24559f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov Target target; 24659f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EXPECT_CALL(target, EnabledStateChanged(_)); 24759f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EnabledStateChangedCallback callback( 24859f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov Bind(&Target::EnabledStateChanged, Unretained(&target))); 24959f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov Error error; 25059f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov device_->OnEnableComplete(callback, error); 25159f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EXPECT_EQ(1, device_->networks_.size()); 25259f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EXPECT_TRUE(ContainsKey(device_->networks_, "path")); 25359f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov 25459f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EXPECT_TRUE(device_->proxy_.get()); 25559f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov error.Populate(Error::kOperationFailed); 25659f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EXPECT_CALL(target, EnabledStateChanged(_)); 25759f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov device_->OnEnableComplete(callback, error); 25859f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov EXPECT_FALSE(device_->proxy_.get()); 25959f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov} 26059f2d69a15abf0a1ceb4eff58adcf815f2a0ff92Darin Petkov 2613a4100c44c9676f17829de5bcb23e883bd970ef7Darin PetkovTEST_F(WiMaxTest, ConnectTimeout) { 2623a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_EQ(&dispatcher_, device_->dispatcher()); 2633a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_TRUE(device_->connect_timeout_callback_.IsCancelled()); 2643a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_FALSE(device_->IsConnectTimeoutStarted()); 2653a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_EQ(WiMax::kDefaultConnectTimeoutSeconds, 2663a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->connect_timeout_seconds_); 2673a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->connect_timeout_seconds_ = 0; 2683a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->StartConnectTimeout(); 2693a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_FALSE(device_->connect_timeout_callback_.IsCancelled()); 2703a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_TRUE(device_->IsConnectTimeoutStarted()); 27153cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->dispatcher_ = nullptr; 2723a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->StartConnectTimeout(); // Expect no crash. 2733a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov scoped_refptr<MockWiMaxService> service( 27453cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new MockWiMaxService(&control_, nullptr, &metrics_, &manager_)); 2753a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->pending_service_ = service; 2763a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_CALL(*service, SetState(Service::kStateFailure)); 2773a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov dispatcher_.DispatchPendingEvents(); 2783a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_TRUE(device_->connect_timeout_callback_.IsCancelled()); 2793a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_FALSE(device_->IsConnectTimeoutStarted()); 2803a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_FALSE(device_->pending_service_); 2813a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov} 2823a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov 2833a4100c44c9676f17829de5bcb23e883bd970ef7Darin PetkovTEST_F(WiMaxTest, ConnectTo) { 2843a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov static const char kPath[] = "/network/path"; 2853a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov scoped_refptr<MockWiMaxService> service( 28653cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new MockWiMaxService(&control_, nullptr, &metrics_, &manager_)); 2873a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_CALL(*service, SetState(Service::kStateAssociating)); 2883a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->status_ = wimax_manager::kDeviceStatusScanning; 2893a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_CALL(*service, GetNetworkObjectPath()).WillOnce(Return(kPath)); 290125aea856fbe6520131c836e0b7f14529035c62fPrathmesh Prabhu EXPECT_CALL(*proxy_, Connect(kPath, _, _, _, _)) 291125aea856fbe6520131c836e0b7f14529035c62fPrathmesh Prabhu .WillOnce(SetErrorTypeInArgument<2>(Error::kSuccess)); 2923a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->proxy_.reset(proxy_.release()); 2933a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov Error error; 2943a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->ConnectTo(service, &error); 2953a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_TRUE(error.IsSuccess()); 2963a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_EQ(service.get(), device_->pending_service_.get()); 2973a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_EQ(wimax_manager::kDeviceStatusUninitialized, device_->status_); 2983a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_TRUE(device_->IsConnectTimeoutStarted()); 2993a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov 3003a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov device_->ConnectTo(service, &error); 3013a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov EXPECT_EQ(Error::kInProgress, error.type()); 3023a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov 30353cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->pending_service_ = nullptr; 3043a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov} 3053a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov 3066b9b2e18088f22b79ea5d87f575b67632fb5770aDarin PetkovTEST_F(WiMaxTest, IsIdle) { 3076b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_TRUE(device_->IsIdle()); 308e2ee5e009081a392fb31596c1d0cfb30bc7bad6eBen Chan scoped_refptr<NiceMock<MockWiMaxService>> service( 30953cc894f1ca677f930da7fce1564db44a7b02791Ben Chan new NiceMock<MockWiMaxService>(&control_, nullptr, &metrics_, &manager_)); 3106b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov device_->pending_service_ = service; 3116b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_FALSE(device_->IsIdle()); 31253cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_->pending_service_ = nullptr; 3136b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov device_->SelectService(service); 3146b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_FALSE(device_->IsIdle()); 3156b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov} 3166b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov 317c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan} // namespace shill 318