cellular_service_unittest.cc revision 9fdf137271659498c0d942c3510a8133478555a7
1ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov// Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov// Use of this source code is governed by a BSD-style license that can be 3b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov// found in the LICENSE file. 4b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 5b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov#include "shill/cellular_service.h" 6b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 7b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov#include <chromeos/dbus/service_constants.h> 8b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov#include <gtest/gtest.h> 9b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 105de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood#include "shill/cellular_capability.h" 1182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include "shill/cellular_capability_gsm.h" 12b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov#include "shill/nice_mock_control.h" 13b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov#include "shill/mock_adaptors.h" 143426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le#include "shill/mock_metrics.h" 15c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood#include "shill/mock_profile.h" 16b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 17313324136473f9120b1e485a408f51ae938dcb64Darin Petkovusing std::string; 189cb026860ded74991fa26700e07389c9d9e3c841Darin Petkovusing testing::_; 19c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbroodusing testing::InSequence; 20b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkovusing testing::NiceMock; 21b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 22b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkovnamespace shill { 23b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 24b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkovclass CellularServiceTest : public testing::Test { 25b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov public: 26b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov CellularServiceTest() 27ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov : device_(new Cellular(&control_, 28ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov NULL, 293426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le &metrics_, 30ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov NULL, 31ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov "usb0", 32313324136473f9120b1e485a408f51ae938dcb64Darin Petkov kAddress, 33ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov 3, 34ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov Cellular::kTypeGSM, 35ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov "", 36ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov "", 37ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov NULL)), 383426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le service_(new CellularService(&control_, NULL, &metrics_, NULL, 393426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le device_)), 40b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov adaptor_(NULL) {} 41b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 42b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov virtual ~CellularServiceTest() { 43b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov adaptor_ = NULL; 44b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov } 45b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 46b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov virtual void SetUp() { 47b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov adaptor_ = 48b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov dynamic_cast<NiceMock<ServiceMockAdaptor> *>(service_->adaptor()); 49b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov } 50b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 5182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow CellularCapabilityGSM *GetCapabilityGSM() { 5282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow return dynamic_cast<CellularCapabilityGSM *>(device_->capability_.get()); 5382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow } 5482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 55b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov protected: 56313324136473f9120b1e485a408f51ae938dcb64Darin Petkov static const char kAddress[]; 57313324136473f9120b1e485a408f51ae938dcb64Darin Petkov 58b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov NiceMockControl control_; 593426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le MockMetrics metrics_; 60ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov CellularRefPtr device_; 61b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov CellularServiceRefPtr service_; 62b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov NiceMock<ServiceMockAdaptor> *adaptor_; // Owned by |service_|. 63b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov}; 64b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 65313324136473f9120b1e485a408f51ae938dcb64Darin Petkovconst char CellularServiceTest::kAddress[] = "000102030405"; 66313324136473f9120b1e485a408f51ae938dcb64Darin Petkov 679fdf137271659498c0d942c3510a8133478555a7Thieu LeTEST_F(CellularServiceTest, Constructor) { 689fdf137271659498c0d942c3510a8133478555a7Thieu Le EXPECT_TRUE(service_->connectable()); 699fdf137271659498c0d942c3510a8133478555a7Thieu Le} 709fdf137271659498c0d942c3510a8133478555a7Thieu Le 71b72cf40dc315f9ae3537980f4fd85e737c125a03Darin PetkovTEST_F(CellularServiceTest, SetNetworkTechnology) { 72b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov EXPECT_CALL(*adaptor_, EmitStringChanged(flimflam::kNetworkTechnologyProperty, 73b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov flimflam::kNetworkTechnologyUmts)); 74b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov EXPECT_TRUE(service_->network_technology().empty()); 75b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov service_->SetNetworkTechnology(flimflam::kNetworkTechnologyUmts); 76b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov EXPECT_EQ(flimflam::kNetworkTechnologyUmts, service_->network_technology()); 77b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov service_->SetNetworkTechnology(flimflam::kNetworkTechnologyUmts); 78b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov} 79b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 80b72cf40dc315f9ae3537980f4fd85e737c125a03Darin PetkovTEST_F(CellularServiceTest, SetRoamingState) { 81b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov EXPECT_CALL(*adaptor_, EmitStringChanged(flimflam::kRoamingStateProperty, 82b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov flimflam::kRoamingStateHome)); 83b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov EXPECT_TRUE(service_->roaming_state().empty()); 84b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov service_->SetRoamingState(flimflam::kRoamingStateHome); 85b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov EXPECT_EQ(flimflam::kRoamingStateHome, service_->roaming_state()); 86b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov service_->SetRoamingState(flimflam::kRoamingStateHome); 87b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov} 88b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov 89ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin PetkovTEST_F(CellularServiceTest, FriendlyName) { 90ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov static const char kCarrier[] = "Cellular Carrier"; 9182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow GetCapabilityGSM()->carrier_ = kCarrier; 923426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Le service_ = new CellularService(&control_, NULL, &metrics_, NULL, device_); 93ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov EXPECT_EQ(kCarrier, service_->friendly_name()); 94ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov} 95ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov 96313324136473f9120b1e485a408f51ae938dcb64Darin PetkovTEST_F(CellularServiceTest, SetStorageIdentifier) { 97dd3e86688859f209f1128f5562fc03a21f211aa8Darin Petkov EXPECT_EQ(string(flimflam::kTypeCellular) + "_" + 98dd3e86688859f209f1128f5562fc03a21f211aa8Darin Petkov kAddress + "_" + service_->friendly_name(), 99313324136473f9120b1e485a408f51ae938dcb64Darin Petkov service_->GetStorageIdentifier()); 100313324136473f9120b1e485a408f51ae938dcb64Darin Petkov service_->SetStorageIdentifier("a b c"); 101313324136473f9120b1e485a408f51ae938dcb64Darin Petkov EXPECT_EQ("a_b_c", service_->GetStorageIdentifier()); 102313324136473f9120b1e485a408f51ae938dcb64Darin Petkov} 103313324136473f9120b1e485a408f51ae938dcb64Darin Petkov 1049cb026860ded74991fa26700e07389c9d9e3c841Darin PetkovTEST_F(CellularServiceTest, SetServingOperator) { 1059cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov EXPECT_CALL(*adaptor_, 1069cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov EmitStringmapChanged(flimflam::kServingOperatorProperty, _)); 1079cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov static const char kCode[] = "123456"; 1089cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov static const char kName[] = "Some Cellular Operator"; 1099cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov Cellular::Operator oper; 1109cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov service_->SetServingOperator(oper); 1119cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov oper.SetCode(kCode); 1129cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov oper.SetName(kName); 1139cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov service_->SetServingOperator(oper); 1149cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov EXPECT_EQ(kCode, service_->serving_operator().GetCode()); 1159cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov EXPECT_EQ(kName, service_->serving_operator().GetName()); 1169cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov service_->SetServingOperator(oper); 1179cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov} 1189cb026860ded74991fa26700e07389c9d9e3c841Darin Petkov 119381928f996d23a21d4cfbed70d07cbf9029f625dDarin PetkovTEST_F(CellularServiceTest, SetOLP) { 120381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov EXPECT_CALL(*adaptor_, 121381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov EmitStringmapChanged(flimflam::kPaymentPortalProperty, _)); 122381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov static const char kURL[] = "payment.url"; 123381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov static const char kMethod[] = "GET"; 124381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov CellularService::OLP olp; 125381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov service_->SetOLP(olp); 126381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov olp.SetURL(kURL); 127381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov olp.SetMethod(kMethod); 128381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov service_->SetOLP(olp); 129381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov EXPECT_EQ(kURL, service_->olp().GetURL()); 130381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov EXPECT_EQ(kMethod, service_->olp().GetMethod()); 131381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov service_->SetOLP(olp); 132381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov} 133381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov 134381928f996d23a21d4cfbed70d07cbf9029f625dDarin PetkovTEST_F(CellularServiceTest, SetUsageURL) { 135381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov static const char kUsageURL[] = "usage.url"; 136381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov EXPECT_CALL(*adaptor_, EmitStringChanged(flimflam::kUsageURLProperty, 137381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov kUsageURL)); 138381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov EXPECT_TRUE(service_->usage_url().empty()); 139381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov service_->SetUsageURL(kUsageURL); 140381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov EXPECT_EQ(kUsageURL, service_->usage_url()); 141381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov service_->SetUsageURL(kUsageURL); 142381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov} 143381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov 144c7073307211b6b5a090a14b951524ac210ab1c9cEric ShienbroodTEST_F(CellularServiceTest, SetApn) { 145c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood static const char kApn[] = "TheAPN"; 146c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood static const char kUsername[] = "commander.data"; 147c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood ProfileRefPtr profile(new NiceMock<MockProfile>( 148c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood &control_, reinterpret_cast<Manager *>(NULL))); 149c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood service_->set_profile(profile); 150c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Error error; 151c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap testapn; 152c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood testapn[flimflam::kApnProperty] = kApn; 153c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood testapn[flimflam::kApnUsernameProperty] = kUsername; 154c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood { 155c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood InSequence seq; 156c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_CALL(*adaptor_, 157c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EmitStringmapChanged(flimflam::kCellularLastGoodApnProperty, 158c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood _)); 159c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_CALL(*adaptor_, 160c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EmitStringmapChanged(flimflam::kCellularApnProperty, _)); 161c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood } 162c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood service_->SetApn(testapn, &error); 163c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(error.IsSuccess()); 164c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap resultapn = service_->GetApn(&error); 165c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(error.IsSuccess()); 166c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_EQ(2, resultapn.size()); 167c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap::const_iterator it = resultapn.find(flimflam::kApnProperty); 168c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(it != resultapn.end() && it->second == kApn); 169c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood it = resultapn.find(flimflam::kApnUsernameProperty); 170c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(it != resultapn.end() && it->second == kUsername); 171c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_FALSE(service_->GetUserSpecifiedApn() == NULL); 172c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood} 173c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood 174c7073307211b6b5a090a14b951524ac210ab1c9cEric ShienbroodTEST_F(CellularServiceTest, ClearApn) { 175c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood static const char kApn[] = "TheAPN"; 176c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood static const char kUsername[] = "commander.data"; 177c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood ProfileRefPtr profile(new NiceMock<MockProfile>( 178c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood &control_, reinterpret_cast<Manager *>(NULL))); 179c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood service_->set_profile(profile); 180c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Error error; 181c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood // Set up an APN to make sure that it later gets cleared. 182c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap testapn; 183c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood testapn[flimflam::kApnProperty] = kApn; 184c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood testapn[flimflam::kApnUsernameProperty] = kUsername; 185c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood { 186c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood InSequence seq; 187c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_CALL(*adaptor_, 188c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EmitStringmapChanged(flimflam::kCellularLastGoodApnProperty, 189c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood _)); 190c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_CALL(*adaptor_, 191c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EmitStringmapChanged(flimflam::kCellularApnProperty, _)); 192c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood } 193c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood service_->SetApn(testapn, &error); 194c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap resultapn = service_->GetApn(&error); 195c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood ASSERT_TRUE(error.IsSuccess()); 196c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood ASSERT_EQ(2, service_->GetApn(&error).size()); 197c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood 198c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap emptyapn; 199c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_CALL(*adaptor_, 200c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EmitStringmapChanged(flimflam::kCellularLastGoodApnProperty, 201c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood _)).Times(0); 202c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_CALL(*adaptor_, 203c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EmitStringmapChanged(flimflam::kCellularApnProperty, _)).Times(1); 204c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood service_->SetApn(emptyapn, &error); 205c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(error.IsSuccess()); 206c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood resultapn = service_->GetApn(&error); 207c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(resultapn.empty()); 208c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(service_->GetUserSpecifiedApn() == NULL); 209c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood} 210c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood 211c7073307211b6b5a090a14b951524ac210ab1c9cEric ShienbroodTEST_F(CellularServiceTest, LastGoodApn) { 212c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood static const char kApn[] = "TheAPN"; 213c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood static const char kUsername[] = "commander.data"; 214c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood ProfileRefPtr profile(new NiceMock<MockProfile>( 215c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood &control_, reinterpret_cast<Manager *>(NULL))); 216c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood service_->set_profile(profile); 217c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap testapn; 218c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood testapn[flimflam::kApnProperty] = kApn; 219c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood testapn[flimflam::kApnUsernameProperty] = kUsername; 220c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_CALL(*adaptor_, 221c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EmitStringmapChanged(flimflam::kCellularLastGoodApnProperty, _)); 222c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood service_->SetLastGoodApn(testapn); 223c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap *resultapn = service_->GetLastGoodApn(); 224c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_FALSE(resultapn == NULL); 225c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_EQ(2, resultapn->size()); 226c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap::const_iterator it = resultapn->find(flimflam::kApnProperty); 227c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(it != resultapn->end() && it->second == kApn); 228c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood it = resultapn->find(flimflam::kApnUsernameProperty); 229c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(it != resultapn->end() && it->second == kUsername); 230c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood // Now set the user-specified APN, and check that LastGoodApn got 231c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood // cleared. 232c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Stringmap userapn; 233c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood userapn[flimflam::kApnProperty] = kApn; 234c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood userapn[flimflam::kApnUsernameProperty] = kUsername; 235c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood { 236c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood InSequence seq; 237c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_CALL(*adaptor_, 238c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EmitStringmapChanged(flimflam::kCellularLastGoodApnProperty, 239c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood _)); 240c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_CALL(*adaptor_, 241c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EmitStringmapChanged(flimflam::kCellularApnProperty, _)); 242c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood } 243c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood Error error; 244c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood service_->SetApn(userapn, &error); 245c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood EXPECT_TRUE(service_->GetLastGoodApn() == NULL); 246c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood} 247c7073307211b6b5a090a14b951524ac210ab1c9cEric Shienbrood 248b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov} // namespace shill 249