1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2012 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 16c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 17c3d707d1ae4198d5538ff4deccd729a83f1bc805Ben Chan#include "shill/wimax/wimax_service.h" 18c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 198a5322984f2d81bcbfd8d44c59747a11bd9b904bAlex Vakulenko#include <string> 208a5322984f2d81bcbfd8d44c59747a11bd9b904bAlex Vakulenko 21a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan#include <base/strings/string_util.h> 22289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#if defined(__ANDROID__) 23289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#include <dbus/service_constants.h> 24289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#else 25e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov#include <chromeos/dbus/service_constants.h> 26289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#endif // __ANDROID__ 27c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include <gtest/gtest.h> 28c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 29c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/error.h" 30c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/mock_adaptors.h" 31c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart#include "shill/mock_eap_credentials.h" 32c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/mock_manager.h" 33c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/mock_metrics.h" 34d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov#include "shill/mock_store.h" 35a41ab517725d036b63420f8445550246f8f50b99Alex Vakulenko#include "shill/nice_mock_control.h" 36cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal#include "shill/service_property_change_test.h" 37c3d707d1ae4198d5538ff4deccd729a83f1bc805Ben Chan#include "shill/wimax/mock_wimax.h" 38c3d707d1ae4198d5538ff4deccd729a83f1bc805Ben Chan#include "shill/wimax/mock_wimax_network_proxy.h" 39c3d707d1ae4198d5538ff4deccd729a83f1bc805Ben Chan#include "shill/wimax/mock_wimax_provider.h" 40c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 41e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkovusing std::string; 42c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanusing testing::_; 437cc906803118d61ead47471f26eb1970a5851811Paul Stewartusing testing::AnyNumber; 44c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewartusing testing::Mock; 45c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanusing testing::NiceMock; 46c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanusing testing::Return; 474e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chanusing wimax_manager::kEAPAnonymousIdentity; 484e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chanusing wimax_manager::kEAPUserIdentity; 494e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chanusing wimax_manager::kEAPUserPassword; 50c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 51c07362bebe25b1db1716c24ed340b46b309868e5Ben Channamespace shill { 52c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 53c07362bebe25b1db1716c24ed340b46b309868e5Ben Channamespace { 54c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 55c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanconst char kTestLinkName[] = "wm0"; 56e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkovconst char kTestAddress[] = "0123456789AB"; 57c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanconst int kTestInterfaceIndex = 5; 58e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkovconst char kTestPath[] = "/org/chromium/WiMaxManager/Device/wm7"; 59d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkovconst char kTestName[] = "Test WiMAX Network"; 60d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkovconst char kTestNetworkId[] = "1234abcd"; 61c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 62c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan} // namespace 63c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 64c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanclass WiMaxServiceTest : public testing::Test { 65c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan public: 66c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan WiMaxServiceTest() 671e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov : proxy_(new MockWiMaxNetworkProxy()), 68bad1c10ffd2d4ac14f7bd9f4ef6a8982e711f566mukesh agrawal manager_(&control_, nullptr, nullptr), 6953cc894f1ca677f930da7fce1564db44a7b02791Ben Chan metrics_(nullptr), 7053cc894f1ca677f930da7fce1564db44a7b02791Ben Chan device_(new MockWiMax(&control_, nullptr, &metrics_, &manager_, 71c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov kTestLinkName, kTestAddress, kTestInterfaceIndex, 72c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov kTestPath)), 7353cc894f1ca677f930da7fce1564db44a7b02791Ben Chan service_(new WiMaxService(&control_, nullptr, &metrics_, &manager_)), 74c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart eap_(new MockEapCredentials()) { 75d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov service_->set_friendly_name(kTestName); 76d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov service_->set_network_id(kTestNetworkId); 77d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov service_->InitStorageIdentifier(); 78c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart service_->eap_.reset(eap_); // Passes ownership. 79d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov } 80c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 81c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan virtual ~WiMaxServiceTest() {} 82c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 83c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan protected: 84c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov virtual void TearDown() { 8553cc894f1ca677f930da7fce1564db44a7b02791Ben Chan service_->device_ = nullptr; 86c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov } 87c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov 88b2ba39fb7b19ce331f6aadb3e6e9e61d70a2f0a1Darin Petkov void ExpectUpdateService() { 89b2ba39fb7b19ce331f6aadb3e6e9e61d70a2f0a1Darin Petkov EXPECT_CALL(manager_, HasService(_)).WillOnce(Return(true)); 90b2ba39fb7b19ce331f6aadb3e6e9e61d70a2f0a1Darin Petkov EXPECT_CALL(manager_, UpdateService(_)); 91b2ba39fb7b19ce331f6aadb3e6e9e61d70a2f0a1Darin Petkov } 92b2ba39fb7b19ce331f6aadb3e6e9e61d70a2f0a1Darin Petkov 936b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov void SetConnectable(bool connectable) { 946b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov service_->connectable_ = connectable; 956b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov } 966b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov 97cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal void SetDevice(WiMaxRefPtr device) { 98cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal service_->SetDevice(device); 99cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal } 100cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal 10193d817916f4cac344b6985c867a85f65711a1486Paul Stewart ServiceMockAdaptor* GetAdaptor() { 102fa1eb722d0742d89c26b9c5c81d02ef2a138cbf2Alex Vakulenko return static_cast<ServiceMockAdaptor*>(service_->adaptor()); 103cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal } 104cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal 105247dcc12556bbfb7e50753befe217d29eb2f2f86Ben Chan std::unique_ptr<MockWiMaxNetworkProxy> proxy_; 106c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan NiceMockControl control_; 107c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan MockManager manager_; 1083a4100c44c9676f17829de5bcb23e883bd970ef7Darin Petkov NiceMock<MockMetrics> metrics_; 109c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov scoped_refptr<MockWiMax> device_; 110c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan WiMaxServiceRefPtr service_; 11193d817916f4cac344b6985c867a85f65711a1486Paul Stewart MockEapCredentials* eap_; // Owned by |service_|. 112c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan}; 113c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 1144e5c1310a1c70445a473653bd37d06604c5d5f47Ben ChanTEST_F(WiMaxServiceTest, GetConnectParameters) { 115c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart KeyValueStore parameters; 116c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, PopulateWiMaxProperties(¶meters)); 117c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart service_->GetConnectParameters(¶meters); 1184e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chan} 1194e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chan 120e4b270274cba2a1976c7be6c733bd899e009c1d1Darin PetkovTEST_F(WiMaxServiceTest, GetDeviceRpcId) { 121e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov Error error; 1227723677fb789a6cec68c9732d79e7e454f3597b0Peter Qiu EXPECT_EQ(control_.NullRPCIdentifier(), service_->GetDeviceRpcId(&error)); 123d4dc0836d64d957f233eaf6e4ab24093a97dd4cemukesh agrawal EXPECT_EQ(Error::kNotFound, error.type()); 124c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov service_->device_ = device_; 125c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov error.Reset(); 126e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov EXPECT_EQ(DeviceMockAdaptor::kRpcId, service_->GetDeviceRpcId(&error)); 127e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov EXPECT_TRUE(error.IsSuccess()); 128e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov} 129e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov 1301e52a1b85f387a5f81e01a6f9fc5196e073803caDarin PetkovTEST_F(WiMaxServiceTest, OnSignalStrengthChanged) { 1311e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov const int kStrength = 55; 1321e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov service_->OnSignalStrengthChanged(kStrength); 1331e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov EXPECT_EQ(kStrength, service_->strength()); 1341e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov} 1351e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov 136d1cd79736d7a9969c966a76a5906ea408bad3731Darin PetkovTEST_F(WiMaxServiceTest, StartStop) { 137d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov static const char kName[] = "My WiMAX Network"; 1387fab89734d88724a288e96a9996b15548c5294c7Ben Chan const uint32_t kIdentifier = 0x1234abcd; 1391e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov const int kStrength = 66; 140a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_FALSE(service_->connectable()); 141d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_FALSE(service_->IsStarted()); 142f4647d4e9783b3de43c1a92b93e276ddc461ef92Ben Chan EXPECT_FALSE(service_->IsVisible()); 143d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ(0, service_->strength()); 144d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_FALSE(service_->proxy_.get()); 1451e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov EXPECT_CALL(*proxy_, Name(_)).WillOnce(Return(kName)); 1461e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov EXPECT_CALL(*proxy_, Identifier(_)).WillOnce(Return(kIdentifier)); 1471e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov EXPECT_CALL(*proxy_, SignalStrength(_)).WillOnce(Return(kStrength)); 1481e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov EXPECT_CALL(*proxy_, set_signal_strength_changed_callback(_)); 14993d817916f4cac344b6985c867a85f65711a1486Paul Stewart ServiceMockAdaptor* adaptor = GetAdaptor(); 1507cc906803118d61ead47471f26eb1970a5851811Paul Stewart EXPECT_CALL(*adaptor, EmitBoolChanged(kConnectableProperty, _)) 1517cc906803118d61ead47471f26eb1970a5851811Paul Stewart .Times(AnyNumber()); 1527cc906803118d61ead47471f26eb1970a5851811Paul Stewart EXPECT_CALL(*adaptor, EmitBoolChanged(kVisibleProperty, true)); 153b2ba39fb7b19ce331f6aadb3e6e9e61d70a2f0a1Darin Petkov ExpectUpdateService(); 154a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov service_->need_passphrase_ = false; 1551e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov EXPECT_TRUE(service_->Start(proxy_.release())); 156d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_TRUE(service_->IsStarted()); 157f4647d4e9783b3de43c1a92b93e276ddc461ef92Ben Chan EXPECT_TRUE(service_->IsVisible()); 1581e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov EXPECT_EQ(kStrength, service_->strength()); 1591e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov EXPECT_EQ(kName, service_->network_name()); 160d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ(kTestName, service_->friendly_name()); 161d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ(kTestNetworkId, service_->network_id()); 162a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_TRUE(service_->connectable()); 163d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_TRUE(service_->proxy_.get()); 164c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov 165c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov service_->device_ = device_; 166c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(*device_, OnServiceStopped(_)); 1677cc906803118d61ead47471f26eb1970a5851811Paul Stewart EXPECT_CALL(*adaptor, EmitBoolChanged(kVisibleProperty, false)); 168b2ba39fb7b19ce331f6aadb3e6e9e61d70a2f0a1Darin Petkov ExpectUpdateService(); 169d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov service_->Stop(); 170d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_FALSE(service_->IsStarted()); 171f4647d4e9783b3de43c1a92b93e276ddc461ef92Ben Chan EXPECT_FALSE(service_->IsVisible()); 172d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ(0, service_->strength()); 173d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_FALSE(service_->proxy_.get()); 1741e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov} 1751e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov 176c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul StewartTEST_F(WiMaxServiceTest, Connectable) { 177c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_TRUE(service_->Is8021x()); 1788021e7f581b1d040fa8ff0a09ee9444bdb58bc86Darin Petkov EXPECT_TRUE(service_->need_passphrase_); 179c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_FALSE(service_->connectable()); 180c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart 181c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, IsConnectableUsingPassphrase()) 182c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart .WillOnce(Return(false)) 183c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart .WillRepeatedly(Return(true)); 184c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov 185c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart // No WiMaxCredentials. 1865777690fb2291a468715eabfcc6f7aac6f1678cdRebecca Silberstein service_->OnEapCredentialsChanged(Service::kReasonPropertyUpdate); 1878021e7f581b1d040fa8ff0a09ee9444bdb58bc86Darin Petkov EXPECT_TRUE(service_->need_passphrase_); 188c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_FALSE(service_->connectable()); 189c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov 190c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart // Not started (no proxy). 1915777690fb2291a468715eabfcc6f7aac6f1678cdRebecca Silberstein service_->OnEapCredentialsChanged(Service::kReasonPropertyUpdate); 192a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_FALSE(service_->need_passphrase_); 193c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_FALSE(service_->connectable()); 194c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov 195c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov // Connectable. 196c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov service_->proxy_.reset(proxy_.release()); 197b2ba39fb7b19ce331f6aadb3e6e9e61d70a2f0a1Darin Petkov ExpectUpdateService(); 1985777690fb2291a468715eabfcc6f7aac6f1678cdRebecca Silberstein service_->OnEapCredentialsChanged(Service::kReasonPropertyUpdate); 199a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_FALSE(service_->need_passphrase_); 200c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_TRUE(service_->connectable()); 201a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov 202c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart // Reset WimaxConnectable state. 203c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart Mock::VerifyAndClearExpectations(eap_); 204c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, set_password("")); 205c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, IsConnectableUsingPassphrase()) 206c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart .WillRepeatedly(Return(false)); 207b2ba39fb7b19ce331f6aadb3e6e9e61d70a2f0a1Darin Petkov ExpectUpdateService(); 208a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov service_->ClearPassphrase(); 209a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_TRUE(service_->need_passphrase_); 210c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_FALSE(service_->connectable()); 2118021e7f581b1d040fa8ff0a09ee9444bdb58bc86Darin Petkov} 2128021e7f581b1d040fa8ff0a09ee9444bdb58bc86Darin Petkov 213b6df8b11a3eff18acdc3e9128af73c62ef39aa1aRebecca SilbersteinTEST_F(WiMaxServiceTest, ChangeCredResetHasEverConnected) { 214b6df8b11a3eff18acdc3e9128af73c62ef39aa1aRebecca Silberstein service_->has_ever_connected_ = true; 215b6df8b11a3eff18acdc3e9128af73c62ef39aa1aRebecca Silberstein EXPECT_TRUE(service_->has_ever_connected()); 2165777690fb2291a468715eabfcc6f7aac6f1678cdRebecca Silberstein service_->OnEapCredentialsChanged(Service::kReasonPropertyUpdate); 217b6df8b11a3eff18acdc3e9128af73c62ef39aa1aRebecca Silberstein EXPECT_FALSE(service_->has_ever_connected()); 218b6df8b11a3eff18acdc3e9128af73c62ef39aa1aRebecca Silberstein} 219b6df8b11a3eff18acdc3e9128af73c62ef39aa1aRebecca Silberstein 220d1cd79736d7a9969c966a76a5906ea408bad3731Darin PetkovTEST_F(WiMaxServiceTest, ConvertIdentifierToNetworkId) { 221d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ("00000000", WiMaxService::ConvertIdentifierToNetworkId(0)); 222d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ("abcd1234", WiMaxService::ConvertIdentifierToNetworkId(0xabcd1234)); 223d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ("ffffffff", WiMaxService::ConvertIdentifierToNetworkId(0xffffffff)); 224d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov} 225d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 226d1cd79736d7a9969c966a76a5906ea408bad3731Darin PetkovTEST_F(WiMaxServiceTest, StorageIdentifier) { 227d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov static const char kStorageId[] = "wimax_test_wimax_network_1234abcd"; 228d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ(kStorageId, service_->GetStorageIdentifier()); 229d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_EQ(kStorageId, 230d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov WiMaxService::CreateStorageIdentifier(kTestNetworkId, kTestName)); 231d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov} 232d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 233d1cd79736d7a9969c966a76a5906ea408bad3731Darin PetkovTEST_F(WiMaxServiceTest, Save) { 234d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov NiceMock<MockStore> storage; 235d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov string storage_id = service_->GetStorageIdentifier(); 236d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_CALL(storage, SetString(storage_id, _, _)) 237d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov .WillRepeatedly(Return(true)); 238d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_CALL(storage, DeleteKey(storage_id, _)).WillRepeatedly(Return(true)); 239d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_CALL(storage, SetString(storage_id, 240d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov WiMaxService::kStorageNetworkId, 241d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov kTestNetworkId)); 242d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov EXPECT_TRUE(service_->Save(&storage)); 243d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov} 244d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 245c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin PetkovTEST_F(WiMaxServiceTest, Connect) { 246a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov // Connect but not connectable. 247a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov Error error; 248a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_FALSE(service_->connectable()); 249dc7b8447aa220fae51b73fd8610cbfed14ed57fcmukesh agrawal service_->Connect(&error, "in test"); 250a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov EXPECT_EQ(Error::kOperationFailed, error.type()); 2516b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov SetConnectable(true); 252a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov 253a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov // No carrier device available. 254c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov MockWiMaxProvider provider; 255c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov scoped_refptr<MockWiMax> null_device; 256c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(manager_, wimax_provider()).WillOnce(Return(&provider)); 257c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(provider, SelectCarrier(_)).WillOnce(Return(null_device)); 258a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov error.Reset(); 259dc7b8447aa220fae51b73fd8610cbfed14ed57fcmukesh agrawal service_->Connect(&error, "in test"); 260c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_EQ(Error::kNoCarrier, error.type()); 261c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov 262a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov // Successful connect. 263c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(manager_, wimax_provider()).WillOnce(Return(&provider)); 264c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(provider, SelectCarrier(_)).WillOnce(Return(device_)); 265c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(*device_, ConnectTo(_, _)); 266c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov error.Reset(); 267dc7b8447aa220fae51b73fd8610cbfed14ed57fcmukesh agrawal service_->Connect(&error, "in test"); 268c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_TRUE(error.IsSuccess()); 269c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov 270a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov // Connect while already connected. 271b5310a1b20a6bbc0b644227440cee213fe53ade1Ben Chan // TODO(benchan): Check for error if we populate error again after changing 272b5310a1b20a6bbc0b644227440cee213fe53ade1Ben Chan // the way that Chrome handles Error::kAlreadyConnected situation. 273dc7b8447aa220fae51b73fd8610cbfed14ed57fcmukesh agrawal service_->Connect(&error, "in test"); 274c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov 275a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov // Successful disconnect. 276d141ad880ee5f3c8dbf1db3487558d5231ba209fBen Chan EXPECT_CALL(*eap_, set_password(_)).Times(0); 277c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_CALL(*device_, DisconnectFrom(_, _)); 278c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov error.Reset(); 2790d06119be3224788ba1aa65ed24bc8e46b56b949Samuel Tan service_->Disconnect(&error, "in test"); 280c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_TRUE(error.IsSuccess()); 281d141ad880ee5f3c8dbf1db3487558d5231ba209fBen Chan EXPECT_TRUE(service_->connectable()); 282a289f6682940ac49c7f7217bc5f5168eef06ff75Ben Chan 283a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov // Disconnect while not connected. 2840d06119be3224788ba1aa65ed24bc8e46b56b949Samuel Tan service_->Disconnect(&error, "in test"); 285c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov EXPECT_EQ(Error::kNotConnected, error.type()); 286c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov} 287c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov 288c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin PetkovTEST_F(WiMaxServiceTest, Unload) { 289c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov MockWiMaxProvider provider; 290c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov EXPECT_CALL(manager_, wimax_provider()) 291c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov .Times(2) 292c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov .WillRepeatedly(Return(&provider)); 293c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, Reset()); 294c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, set_password("")); 295c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, IsConnectableUsingPassphrase()) 296c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart .WillRepeatedly(Return(false)); 297c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov EXPECT_CALL(provider, OnServiceUnloaded(_)).WillOnce(Return(false)); 298c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov EXPECT_FALSE(service_->Unload()); 299c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart Mock::VerifyAndClearExpectations(eap_); 300c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart 301c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, Reset()); 302c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, set_password("")); 303c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart EXPECT_CALL(*eap_, IsConnectableUsingPassphrase()) 304c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart .WillRepeatedly(Return(false)); 305c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov EXPECT_CALL(provider, OnServiceUnloaded(_)).WillOnce(Return(true)); 306c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov EXPECT_TRUE(service_->Unload()); 307c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov} 308c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov 3098ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin PetkovTEST_F(WiMaxServiceTest, SetState) { 3108ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov service_->device_ = device_; 3118ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_EQ(Service::kStateIdle, service_->state()); 3128ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov 3138ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_CALL(manager_, UpdateService(_)); 314c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart service_->SetState(Service::kStateAssociating); 3158ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_EQ(Service::kStateAssociating, service_->state()); 3168ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_TRUE(service_->device_); 3178ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov 3188ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_CALL(manager_, UpdateService(_)); 319c43cbbe5b33a7afe1b1250bef87fb8e9223cb764Paul Stewart service_->SetState(Service::kStateFailure); 3208ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_EQ(Service::kStateFailure, service_->state()); 3218ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov EXPECT_FALSE(service_->device_); 3228ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov} 3238ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov 3246b9b2e18088f22b79ea5d87f575b67632fb5770aDarin PetkovTEST_F(WiMaxServiceTest, IsAutoConnectable) { 3256b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_FALSE(service_->connectable()); 32693d817916f4cac344b6985c867a85f65711a1486Paul Stewart const char* reason = ""; 3276b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov 3286b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_FALSE(service_->IsAutoConnectable(&reason)); 3296b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov 3306b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov MockWiMaxProvider provider; 3316b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_CALL(manager_, wimax_provider()) 3326b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov .Times(2) 3336b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov .WillRepeatedly(Return(&provider)); 3346b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov 3356b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov SetConnectable(true); 3366b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_CALL(provider, SelectCarrier(_)).WillOnce(Return(device_)); 3376b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_CALL(*device_, IsIdle()).WillOnce(Return(false)); 3386b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov reason = ""; 3396b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_FALSE(service_->IsAutoConnectable(&reason)); 3406b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_EQ(WiMaxService::kAutoConnBusy, reason); 3416b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov 3426b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_CALL(provider, SelectCarrier(_)).WillOnce(Return(device_)); 3436b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_CALL(*device_, IsIdle()).WillOnce(Return(true)); 3446b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov reason = ""; 3456b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_TRUE(service_->IsAutoConnectable(&reason)); 3466b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov EXPECT_STREQ("", reason); 3476b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov} 3486b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov 349cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawalTEST_F(WiMaxServiceTest, PropertyChanges) { 35093d817916f4cac344b6985c867a85f65711a1486Paul Stewart ServiceMockAdaptor* adaptor = GetAdaptor(); 351cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal TestCommonPropertyChanges(service_, adaptor); 352cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal TestAutoConnectPropertyChange(service_, adaptor); 353cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal 354cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal EXPECT_CALL(*adaptor, 3554276ccab7a3bdf1c2e2e69cf79b859733d7404a0Ben Chan EmitRpcIdentifierChanged(kDeviceProperty, _)); 356cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal SetDevice(device_); 357cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal Mock::VerifyAndClearExpectations(adaptor); 358cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal 359cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal EXPECT_CALL(*adaptor, 3604276ccab7a3bdf1c2e2e69cf79b859733d7404a0Ben Chan EmitRpcIdentifierChanged(kDeviceProperty, _)); 36153cc894f1ca677f930da7fce1564db44a7b02791Ben Chan SetDevice(nullptr); 362cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal Mock::VerifyAndClearExpectations(adaptor); 363cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal} 364cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal 365bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal// Custom property setters should return false, and make no changes, if 366bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal// the new value is the same as the old value. 367bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawalTEST_F(WiMaxServiceTest, CustomSetterNoopChange) { 368bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal TestCustomSetterNoopChange(service_, &manager_); 369bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal} 370bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal 371c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan} // namespace shill 372