blob: 18a5012698c7a46d1b1337f2111185026ea09640 [file] [log] [blame]
Darin Petkovc64fe5e2012-01-11 12:46:13 +01001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkovb05315f2011-11-07 10:14:25 +01002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/cellular_capability_gsm.h"
6
Jason Glasgow4c0724a2012-04-17 15:47:40 -04007#include <string>
8#include <vector>
9
Eric Shienbrood9a245532012-03-07 14:20:39 -050010#include <base/bind.h>
Darin Petkova4ca3c32012-08-17 16:05:24 +020011#include <base/stringprintf.h>
Darin Petkov20c13ec2011-11-09 15:07:15 +010012#include <chromeos/dbus/service_constants.h>
Darin Petkov20c13ec2011-11-09 15:07:15 +010013#include <mm/mm-modem.h>
Darin Petkov1272a432011-11-10 15:53:37 +010014#include <mobile_provider.h>
Darin Petkovb05315f2011-11-07 10:14:25 +010015
16#include "shill/cellular.h"
Darin Petkov3e509242011-11-10 14:46:44 +010017#include "shill/cellular_service.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010018#include "shill/error.h"
19#include "shill/event_dispatcher.h"
Darin Petkov3cfbf212011-11-21 16:02:09 +010020#include "shill/mock_adaptors.h"
Gary Morain82a31a02012-08-02 18:03:32 -070021#include "shill/mock_log.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010022#include "shill/mock_modem_gsm_card_proxy.h"
Darin Petkov3e509242011-11-10 14:46:44 +010023#include "shill/mock_modem_gsm_network_proxy.h"
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070024#include "shill/mock_modem_info.h"
Thieu Le923006b2012-04-05 16:32:58 -070025#include "shill/mock_modem_proxy.h"
26#include "shill/mock_modem_simple_proxy.h"
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -040027#include "shill/mock_profile.h"
Thieu Le923006b2012-04-05 16:32:58 -070028#include "shill/proxy_factory.h"
Ben Chanbe277dd2014-02-05 17:26:47 -080029#include "shill/testing.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010030
Eric Shienbrood9a245532012-03-07 14:20:39 -050031using base::Bind;
Darin Petkova4ca3c32012-08-17 16:05:24 +020032using base::StringPrintf;
Eric Shienbrood9a245532012-03-07 14:20:39 -050033using base::Unretained;
Darin Petkov31332412012-01-28 01:50:02 +010034using std::string;
Jason Glasgow4c0724a2012-04-17 15:47:40 -040035using std::vector;
Darin Petkove5bc2cb2011-12-07 14:47:32 +010036using testing::_;
Eric Shienbrood9a245532012-03-07 14:20:39 -050037using testing::Invoke;
Darin Petkov3cfbf212011-11-21 16:02:09 +010038using testing::NiceMock;
Darin Petkovcb547732011-11-09 13:55:26 +010039using testing::Return;
Jason Glasgowcd0349c2012-05-03 23:32:15 -040040using testing::SaveArg;
Darin Petkovcb547732011-11-09 13:55:26 +010041
Darin Petkovb05315f2011-11-07 10:14:25 +010042namespace shill {
43
44class CellularCapabilityGSMTest : public testing::Test {
45 public:
46 CellularCapabilityGSMTest()
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070047 : modem_info_(NULL, &dispatcher_, NULL, NULL, NULL),
Thieu Le6c1e3bb2013-02-06 15:20:35 -080048 create_card_proxy_from_factory_(false),
Ben Chan3ecdf822012-08-06 12:29:23 -070049 proxy_(new MockModemProxy()),
50 simple_proxy_(new MockModemSimpleProxy()),
51 card_proxy_(new MockModemGSMCardProxy()),
52 network_proxy_(new MockModemGSMNetworkProxy()),
53 proxy_factory_(this),
54 capability_(NULL),
55 device_adaptor_(NULL),
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070056 cellular_(new Cellular(&modem_info_,
Darin Petkovb05315f2011-11-07 10:14:25 +010057 "",
Darin Petkov31332412012-01-28 01:50:02 +010058 kAddress,
Darin Petkovb05315f2011-11-07 10:14:25 +010059 0,
60 Cellular::kTypeGSM,
61 "",
62 "",
Jason Glasgowa585fc32012-06-06 11:04:09 -040063 "",
Thieu Lece4483e2013-01-23 15:12:03 -080064 &proxy_factory_)) {
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070065 modem_info_.metrics()->RegisterDevice(cellular_->interface_index(),
66 Technology::kCellular);
Thieu Lece4483e2013-01-23 15:12:03 -080067 }
Darin Petkovb05315f2011-11-07 10:14:25 +010068
Darin Petkov3e509242011-11-10 14:46:44 +010069 virtual ~CellularCapabilityGSMTest() {
70 cellular_->service_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010071 capability_ = NULL;
Darin Petkov3cfbf212011-11-21 16:02:09 +010072 device_adaptor_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010073 }
74
75 virtual void SetUp() {
76 capability_ =
77 dynamic_cast<CellularCapabilityGSM *>(cellular_->capability_.get());
Darin Petkov3cfbf212011-11-21 16:02:09 +010078 device_adaptor_ =
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070079 dynamic_cast<DeviceMockAdaptor *>(cellular_->adaptor());
80 }
81
82 void InitProviderDB() {
83 modem_info_.SetProviderDB(kTestMobileProviderDBPath);
Darin Petkov3e509242011-11-10 14:46:44 +010084 }
85
Thieu Le923006b2012-04-05 16:32:58 -070086 void InvokeEnable(bool enable, Error *error,
87 const ResultCallback &callback, int timeout) {
88 callback.Run(Error());
89 }
Eric Shienbrood9a245532012-03-07 14:20:39 -050090 void InvokeGetIMEI(Error *error, const GSMIdentifierCallback &callback,
91 int timeout) {
92 callback.Run(kIMEI, Error());
93 }
94 void InvokeGetIMSI(Error *error, const GSMIdentifierCallback &callback,
95 int timeout) {
96 callback.Run(kIMSI, Error());
97 }
98 void InvokeGetIMSI2(Error *error, const GSMIdentifierCallback &callback,
99 int timeout) {
100 callback.Run("310240123456789", Error());
101 }
Gary Morain82a31a02012-08-02 18:03:32 -0700102 void InvokeGetIMSIFails(Error *error, const GSMIdentifierCallback &callback,
103 int timeout) {
104 callback.Run("", Error(Error::kOperationFailed));
105 }
Eric Shienbrood9a245532012-03-07 14:20:39 -0500106 void InvokeGetMSISDN(Error *error, const GSMIdentifierCallback &callback,
107 int timeout) {
108 callback.Run(kMSISDN, Error());
109 }
Thieu Le923006b2012-04-05 16:32:58 -0700110 void InvokeGetMSISDNFail(Error *error, const GSMIdentifierCallback &callback,
111 int timeout) {
112 callback.Run("", Error(Error::kOperationFailed));
113 }
Eric Shienbrood9a245532012-03-07 14:20:39 -0500114 void InvokeGetSPN(Error *error, const GSMIdentifierCallback &callback,
115 int timeout) {
116 callback.Run(kTestCarrier, Error());
117 }
Thieu Le923006b2012-04-05 16:32:58 -0700118 void InvokeGetSPNFail(Error *error, const GSMIdentifierCallback &callback,
119 int timeout) {
120 callback.Run("", Error(Error::kOperationFailed));
121 }
Eric Shienbrood9a245532012-03-07 14:20:39 -0500122 void InvokeGetSignalQuality(Error *error,
123 const SignalQualityCallback &callback,
124 int timeout) {
125 callback.Run(kStrength, Error());
126 }
127 void InvokeGetRegistrationInfo(Error *error,
128 const RegistrationInfoCallback &callback,
129 int timeout) {
130 callback.Run(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME,
131 kTestNetwork, kTestCarrier, Error());
132 }
133 void InvokeRegister(const string &network_id,
134 Error *error,
135 const ResultCallback &callback,
136 int timeout) {
137 callback.Run(Error());
138 }
139 void InvokeEnablePIN(const string &pin, bool enable,
140 Error *error, const ResultCallback &callback,
141 int timeout) {
142 callback.Run(Error());
143 }
144 void InvokeSendPIN(const string &pin, Error *error,
145 const ResultCallback &callback, int timeout) {
146 callback.Run(Error());
147 }
148 void InvokeSendPUK(const string &puk, const string &pin, Error *error,
149 const ResultCallback &callback, int timeout) {
150 callback.Run(Error());
151 }
152 void InvokeChangePIN(const string &old_pin, const string &pin, Error *error,
153 const ResultCallback &callback, int timeout) {
154 callback.Run(Error());
155 }
Thieu Le923006b2012-04-05 16:32:58 -0700156 void InvokeGetModemStatus(Error *error,
157 const DBusPropertyMapCallback &callback,
158 int timeout) {
159 DBusPropertiesMap props;
160 callback.Run(props, Error());
161 }
162 void InvokeGetModemInfo(Error *error, const ModemInfoCallback &callback,
163 int timeout) {
164 ModemHardwareInfo info;
165 callback.Run(info, Error());
166 }
Eric Shienbrood9a245532012-03-07 14:20:39 -0500167
Thieu Leb5954a22012-05-18 10:37:34 -0700168 void InvokeConnectFail(DBusPropertiesMap props, Error *error,
169 const ResultCallback &callback, int timeout) {
170 callback.Run(Error(Error::kOperationFailed));
171 }
172
Eric Shienbrood9a245532012-03-07 14:20:39 -0500173 MOCK_METHOD1(TestCallback, void(const Error &error));
174
Darin Petkovb05315f2011-11-07 10:14:25 +0100175 protected:
Darin Petkov31332412012-01-28 01:50:02 +0100176 static const char kAddress[];
Darin Petkov1272a432011-11-10 15:53:37 +0100177 static const char kTestMobileProviderDBPath[];
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500178 static const char kTestNetwork[];
Darin Petkovcb547732011-11-09 13:55:26 +0100179 static const char kTestCarrier[];
Darin Petkovb05315f2011-11-07 10:14:25 +0100180 static const char kPIN[];
181 static const char kPUK[];
Darin Petkovcb547732011-11-09 13:55:26 +0100182 static const char kIMEI[];
183 static const char kIMSI[];
184 static const char kMSISDN[];
Eric Shienbrood9a245532012-03-07 14:20:39 -0500185 static const int kStrength;
Darin Petkovcb547732011-11-09 13:55:26 +0100186
Thieu Le923006b2012-04-05 16:32:58 -0700187 class TestProxyFactory : public ProxyFactory {
188 public:
189 explicit TestProxyFactory(CellularCapabilityGSMTest *test) : test_(test) {}
190
191 virtual ModemProxyInterface *CreateModemProxy(
192 const string &/*path*/,
193 const string &/*service*/) {
194 return test_->proxy_.release();
195 }
196
197 virtual ModemSimpleProxyInterface *CreateModemSimpleProxy(
198 const string &/*path*/,
199 const string &/*service*/) {
200 return test_->simple_proxy_.release();
201 }
202
203 virtual ModemGSMCardProxyInterface *CreateModemGSMCardProxy(
204 const string &/*path*/,
205 const string &/*service*/) {
Ben Chan3ecdf822012-08-06 12:29:23 -0700206 // TODO(benchan): This code conditionally returns a NULL pointer to avoid
207 // CellularCapabilityGSM::InitProperties (and thus
208 // CellularCapabilityGSM::GetIMSI) from being called during the
209 // construction. Remove this workaround after refactoring the tests.
210 return test_->create_card_proxy_from_factory_ ?
211 test_->card_proxy_.release() : NULL;
Thieu Le923006b2012-04-05 16:32:58 -0700212 }
213
214 virtual ModemGSMNetworkProxyInterface *CreateModemGSMNetworkProxy(
215 const string &/*path*/,
216 const string &/*service*/) {
217 return test_->network_proxy_.release();
218 }
219
220 private:
221 CellularCapabilityGSMTest *test_;
222 };
223
224 void SetProxy() {
225 capability_->proxy_.reset(proxy_.release());
226 }
227
Darin Petkovcb547732011-11-09 13:55:26 +0100228 void SetCardProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +0100229 capability_->card_proxy_.reset(card_proxy_.release());
Darin Petkovcb547732011-11-09 13:55:26 +0100230 }
Darin Petkovb05315f2011-11-07 10:14:25 +0100231
Darin Petkov1272a432011-11-10 15:53:37 +0100232 void SetNetworkProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +0100233 capability_->network_proxy_.reset(network_proxy_.release());
Darin Petkov1272a432011-11-10 15:53:37 +0100234 }
235
Darin Petkov20c13ec2011-11-09 15:07:15 +0100236 void SetAccessTechnology(uint32 technology) {
Darin Petkov721ac932011-11-16 15:43:09 +0100237 capability_->access_technology_ = technology;
Darin Petkov20c13ec2011-11-09 15:07:15 +0100238 }
239
240 void SetRegistrationState(uint32 state) {
Darin Petkov721ac932011-11-16 15:43:09 +0100241 capability_->registration_state_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +0100242 }
243
Darin Petkov3e509242011-11-10 14:46:44 +0100244 void SetService() {
Prathmesh Prabhu0d36b4f2013-04-01 11:45:54 -0700245 cellular_->service_ = new CellularService(&modem_info_, cellular_);
Darin Petkov1272a432011-11-10 15:53:37 +0100246 }
247
Thieu Leb5954a22012-05-18 10:37:34 -0700248 void SetupCommonProxiesExpectations() {
Thieu Le923006b2012-04-05 16:32:58 -0700249 EXPECT_CALL(*proxy_, set_state_changed_callback(_));
250 EXPECT_CALL(*network_proxy_, set_signal_quality_callback(_));
251 EXPECT_CALL(*network_proxy_, set_network_mode_callback(_));
252 EXPECT_CALL(*network_proxy_, set_registration_info_callback(_));
Thieu Leb5954a22012-05-18 10:37:34 -0700253 }
254
255 void SetupCommonStartModemExpectations() {
256 SetupCommonProxiesExpectations();
Thieu Le923006b2012-04-05 16:32:58 -0700257
258 EXPECT_CALL(*proxy_, Enable(_, _, _, CellularCapability::kTimeoutEnable))
259 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeEnable));
Thieu Le923006b2012-04-05 16:32:58 -0700260 EXPECT_CALL(*card_proxy_,
261 GetIMEI(_, _, CellularCapability::kTimeoutDefault))
262 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetIMEI));
263 EXPECT_CALL(*card_proxy_,
264 GetIMSI(_, _, CellularCapability::kTimeoutDefault))
265 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetIMSI));
266 EXPECT_CALL(*network_proxy_, AccessTechnology());
267 EXPECT_CALL(*card_proxy_, EnabledFacilityLocks());
268 EXPECT_CALL(*proxy_,
269 GetModemInfo(_, _, CellularCapability::kTimeoutDefault))
270 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetModemInfo));
271 EXPECT_CALL(*network_proxy_,
272 GetRegistrationInfo(_, _, CellularCapability::kTimeoutDefault));
273 EXPECT_CALL(*network_proxy_,
274 GetSignalQuality(_, _, CellularCapability::kTimeoutDefault));
275 EXPECT_CALL(*this, TestCallback(IsSuccess()));
276 }
277
Thieu Leb5954a22012-05-18 10:37:34 -0700278 void InitProxies() {
Ben Chan3ecdf822012-08-06 12:29:23 -0700279 AllowCreateCardProxyFromFactory();
Thieu Leb5954a22012-05-18 10:37:34 -0700280 capability_->InitProxies();
281 }
282
Ben Chan3ecdf822012-08-06 12:29:23 -0700283 void AllowCreateCardProxyFromFactory() {
284 create_card_proxy_from_factory_ = true;
285 }
286
Darin Petkovb05315f2011-11-07 10:14:25 +0100287 EventDispatcher dispatcher_;
Prathmesh Prabhu27526f12013-03-25 19:42:18 -0700288 MockModemInfo modem_info_;
Ben Chan3ecdf822012-08-06 12:29:23 -0700289 bool create_card_proxy_from_factory_;
Thieu Le923006b2012-04-05 16:32:58 -0700290 scoped_ptr<MockModemProxy> proxy_;
291 scoped_ptr<MockModemSimpleProxy> simple_proxy_;
Darin Petkovcb547732011-11-09 13:55:26 +0100292 scoped_ptr<MockModemGSMCardProxy> card_proxy_;
Darin Petkov3e509242011-11-10 14:46:44 +0100293 scoped_ptr<MockModemGSMNetworkProxy> network_proxy_;
Thieu Le923006b2012-04-05 16:32:58 -0700294 TestProxyFactory proxy_factory_;
Darin Petkov721ac932011-11-16 15:43:09 +0100295 CellularCapabilityGSM *capability_; // Owned by |cellular_|.
Prathmesh Prabhu27526f12013-03-25 19:42:18 -0700296 DeviceMockAdaptor *device_adaptor_; // Owned by |cellular_|.
Ben Chan3ecdf822012-08-06 12:29:23 -0700297 CellularRefPtr cellular_;
Darin Petkovb05315f2011-11-07 10:14:25 +0100298};
299
Darin Petkov31332412012-01-28 01:50:02 +0100300const char CellularCapabilityGSMTest::kAddress[] = "1122334455";
Darin Petkov1272a432011-11-10 15:53:37 +0100301const char CellularCapabilityGSMTest::kTestMobileProviderDBPath[] =
302 "provider_db_unittest.bfd";
Darin Petkovcb547732011-11-09 13:55:26 +0100303const char CellularCapabilityGSMTest::kTestCarrier[] = "The Cellular Carrier";
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500304const char CellularCapabilityGSMTest::kTestNetwork[] = "310555";
Darin Petkovb05315f2011-11-07 10:14:25 +0100305const char CellularCapabilityGSMTest::kPIN[] = "9876";
306const char CellularCapabilityGSMTest::kPUK[] = "8765";
Darin Petkovcb547732011-11-09 13:55:26 +0100307const char CellularCapabilityGSMTest::kIMEI[] = "987654321098765";
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100308const char CellularCapabilityGSMTest::kIMSI[] = "310150123456789";
Darin Petkovcb547732011-11-09 13:55:26 +0100309const char CellularCapabilityGSMTest::kMSISDN[] = "12345678901";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500310const int CellularCapabilityGSMTest::kStrength = 80;
Darin Petkovcb547732011-11-09 13:55:26 +0100311
Darin Petkov721ac932011-11-16 15:43:09 +0100312TEST_F(CellularCapabilityGSMTest, PropertyStore) {
Ben Chan7ea768e2013-09-20 15:08:40 -0700313 EXPECT_TRUE(cellular_->store().Contains(kSIMLockStatusProperty));
Darin Petkov721ac932011-11-16 15:43:09 +0100314}
315
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500316TEST_F(CellularCapabilityGSMTest, GetIMEI) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500317 EXPECT_CALL(*card_proxy_, GetIMEI(_, _, CellularCapability::kTimeoutDefault))
318 .WillOnce(Invoke(this,
319 &CellularCapabilityGSMTest::InvokeGetIMEI));
320 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100321 SetCardProxy();
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800322 ASSERT_TRUE(cellular_->imei().empty());
Eric Shienbrood9a245532012-03-07 14:20:39 -0500323 capability_->GetIMEI(Bind(&CellularCapabilityGSMTest::TestCallback,
324 Unretained(this)));
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800325 EXPECT_EQ(kIMEI, cellular_->imei());
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500326}
327
328TEST_F(CellularCapabilityGSMTest, GetIMSI) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500329 EXPECT_CALL(*card_proxy_, GetIMSI(_, _, CellularCapability::kTimeoutDefault))
330 .WillOnce(Invoke(this,
331 &CellularCapabilityGSMTest::InvokeGetIMSI))
332 .WillOnce(Invoke(this,
333 &CellularCapabilityGSMTest::InvokeGetIMSI2));
334 EXPECT_CALL(*this, TestCallback(IsSuccess())).Times(2);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500335 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500336 ResultCallback callback = Bind(&CellularCapabilityGSMTest::TestCallback,
337 Unretained(this));
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800338 EXPECT_TRUE(cellular_->imsi().empty());
339 EXPECT_FALSE(cellular_->sim_present());
Eric Shienbrood9a245532012-03-07 14:20:39 -0500340 capability_->GetIMSI(callback);
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800341 EXPECT_EQ(kIMSI, cellular_->imsi());
342 EXPECT_TRUE(cellular_->sim_present());
343 cellular_->set_imsi("");
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100344 InitProviderDB();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500345 capability_->GetIMSI(callback);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500346 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
347}
348
Gary Morain82a31a02012-08-02 18:03:32 -0700349// In this test, the call to the proxy's GetIMSI() will always indicate failure,
350// which will cause the retry logic to call the proxy again a number of times.
351// Eventually, the retries expire.
352TEST_F(CellularCapabilityGSMTest, GetIMSIFails) {
353 ScopedMockLog log;
Liam McLoughlinef342b42013-09-13 21:05:36 +0100354 EXPECT_CALL(log, Log(logging::LOG_INFO,
355 ::testing::EndsWith("cellular_capability_gsm.cc"),
Gary Morain82a31a02012-08-02 18:03:32 -0700356 ::testing::StartsWith("GetIMSI failed - ")));
357 EXPECT_CALL(*card_proxy_, GetIMSI(_, _, CellularCapability::kTimeoutDefault))
Arman Uguray29505ec2013-09-12 20:37:53 -0700358 .Times(CellularCapabilityGSM::kGetIMSIRetryLimit + 2)
Gary Morain82a31a02012-08-02 18:03:32 -0700359 .WillRepeatedly(Invoke(this,
360 &CellularCapabilityGSMTest::InvokeGetIMSIFails));
Arman Uguray29505ec2013-09-12 20:37:53 -0700361 EXPECT_CALL(*this, TestCallback(IsFailure())).Times(2);
Gary Morain82a31a02012-08-02 18:03:32 -0700362 SetCardProxy();
363 ResultCallback callback = Bind(&CellularCapabilityGSMTest::TestCallback,
364 Unretained(this));
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800365 EXPECT_TRUE(cellular_->imsi().empty());
366 EXPECT_FALSE(cellular_->sim_present());
Gary Morain82a31a02012-08-02 18:03:32 -0700367
Arman Uguray29505ec2013-09-12 20:37:53 -0700368 capability_->sim_lock_status_.lock_type = "sim-pin";
369 capability_->GetIMSI(callback);
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800370 EXPECT_TRUE(cellular_->imsi().empty());
371 EXPECT_TRUE(cellular_->sim_present());
Arman Uguray29505ec2013-09-12 20:37:53 -0700372
373 capability_->sim_lock_status_.lock_type.clear();
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800374 cellular_->set_sim_present(false);
Gary Morain82a31a02012-08-02 18:03:32 -0700375 capability_->get_imsi_retries_ = 0;
376 EXPECT_EQ(CellularCapabilityGSM::kGetIMSIRetryDelayMilliseconds,
377 capability_->get_imsi_retry_delay_milliseconds_);
378
379 // Set the delay to zero to speed up the test.
380 capability_->get_imsi_retry_delay_milliseconds_ = 0;
381 capability_->GetIMSI(callback);
382 for (int i = 0; i < CellularCapabilityGSM::kGetIMSIRetryLimit; ++i) {
383 dispatcher_.DispatchPendingEvents();
384 }
385 EXPECT_EQ(CellularCapabilityGSM::kGetIMSIRetryLimit + 1,
386 capability_->get_imsi_retries_);
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800387 EXPECT_TRUE(cellular_->imsi().empty());
388 EXPECT_FALSE(cellular_->sim_present());
Gary Morain82a31a02012-08-02 18:03:32 -0700389}
390
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500391TEST_F(CellularCapabilityGSMTest, GetMSISDN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500392 EXPECT_CALL(*card_proxy_, GetMSISDN(_, _,
393 CellularCapability::kTimeoutDefault))
394 .WillOnce(Invoke(this,
395 &CellularCapabilityGSMTest::InvokeGetMSISDN));
396 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500397 SetCardProxy();
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800398 ASSERT_TRUE(cellular_->mdn().empty());
Eric Shienbrood9a245532012-03-07 14:20:39 -0500399 capability_->GetMSISDN(Bind(&CellularCapabilityGSMTest::TestCallback,
400 Unretained(this)));
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800401 EXPECT_EQ(kMSISDN, cellular_->mdn());
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500402}
403
404TEST_F(CellularCapabilityGSMTest, GetSPN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500405 EXPECT_CALL(*card_proxy_, GetSPN(_, _, CellularCapability::kTimeoutDefault))
406 .WillOnce(Invoke(this,
407 &CellularCapabilityGSMTest::InvokeGetSPN));
408 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500409 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500410 ASSERT_TRUE(capability_->spn_.empty());
411 capability_->GetSPN(Bind(&CellularCapabilityGSMTest::TestCallback,
412 Unretained(this)));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500413 EXPECT_EQ(kTestCarrier, capability_->spn_);
Darin Petkovcb547732011-11-09 13:55:26 +0100414}
Darin Petkovb05315f2011-11-07 10:14:25 +0100415
Darin Petkov3e509242011-11-10 14:46:44 +0100416TEST_F(CellularCapabilityGSMTest, GetSignalQuality) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500417 EXPECT_CALL(*network_proxy_,
418 GetSignalQuality(_, _, CellularCapability::kTimeoutDefault))
419 .WillOnce(Invoke(this,
420 &CellularCapabilityGSMTest::InvokeGetSignalQuality));
Darin Petkov3e509242011-11-10 14:46:44 +0100421 SetNetworkProxy();
422 SetService();
423 EXPECT_EQ(0, cellular_->service()->strength());
Darin Petkov721ac932011-11-16 15:43:09 +0100424 capability_->GetSignalQuality();
Darin Petkov3e509242011-11-10 14:46:44 +0100425 EXPECT_EQ(kStrength, cellular_->service()->strength());
426}
427
Darin Petkov184c54e2011-11-15 12:44:39 +0100428TEST_F(CellularCapabilityGSMTest, RegisterOnNetwork) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500429 EXPECT_CALL(*network_proxy_, Register(kTestNetwork, _, _,
430 CellularCapability::kTimeoutRegister))
431 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeRegister));
432 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkov184c54e2011-11-15 12:44:39 +0100433 SetNetworkProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500434 Error error;
435 capability_->RegisterOnNetwork(kTestNetwork, &error,
436 Bind(&CellularCapabilityGSMTest::TestCallback,
437 Unretained(this)));
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800438 EXPECT_EQ(kTestNetwork, cellular_->selected_network());
Darin Petkov184c54e2011-11-15 12:44:39 +0100439}
440
Darin Petkovb72cf402011-11-22 14:51:39 +0100441TEST_F(CellularCapabilityGSMTest, IsRegistered) {
442 EXPECT_FALSE(capability_->IsRegistered());
443 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE);
444 EXPECT_FALSE(capability_->IsRegistered());
445 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
446 EXPECT_TRUE(capability_->IsRegistered());
447 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING);
448 EXPECT_FALSE(capability_->IsRegistered());
449 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED);
450 EXPECT_FALSE(capability_->IsRegistered());
451 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN);
452 EXPECT_FALSE(capability_->IsRegistered());
453 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING);
454 EXPECT_TRUE(capability_->IsRegistered());
455}
456
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500457TEST_F(CellularCapabilityGSMTest, GetRegistrationState) {
458 ASSERT_FALSE(capability_->IsRegistered());
459 EXPECT_CALL(*network_proxy_,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500460 GetRegistrationInfo(_, _, CellularCapability::kTimeoutDefault))
461 .WillOnce(Invoke(this,
462 &CellularCapabilityGSMTest::InvokeGetRegistrationInfo));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500463 SetNetworkProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500464 capability_->GetRegistrationState();
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500465 EXPECT_TRUE(capability_->IsRegistered());
466 EXPECT_EQ(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME,
467 capability_->registration_state_);
468}
469
Darin Petkovb05315f2011-11-07 10:14:25 +0100470TEST_F(CellularCapabilityGSMTest, RequirePIN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500471 EXPECT_CALL(*card_proxy_, EnablePIN(kPIN, true, _, _,
472 CellularCapability::kTimeoutDefault))
473 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeEnablePIN));
474 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100475 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500476 Error error;
477 capability_->RequirePIN(kPIN, true, &error,
478 Bind(&CellularCapabilityGSMTest::TestCallback,
479 Unretained(this)));
480 EXPECT_TRUE(error.IsSuccess());
Darin Petkovb05315f2011-11-07 10:14:25 +0100481}
482
483TEST_F(CellularCapabilityGSMTest, EnterPIN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500484 EXPECT_CALL(*card_proxy_, SendPIN(kPIN, _, _,
485 CellularCapability::kTimeoutDefault))
486 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeSendPIN));
487 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100488 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500489 Error error;
490 capability_->EnterPIN(kPIN, &error,
491 Bind(&CellularCapabilityGSMTest::TestCallback,
492 Unretained(this)));
493 EXPECT_TRUE(error.IsSuccess());
Darin Petkovb05315f2011-11-07 10:14:25 +0100494}
495
496TEST_F(CellularCapabilityGSMTest, UnblockPIN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500497 EXPECT_CALL(*card_proxy_, SendPUK(kPUK, kPIN, _, _,
498 CellularCapability::kTimeoutDefault))
499 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeSendPUK));
500 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100501 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500502 Error error;
503 capability_->UnblockPIN(kPUK, kPIN, &error,
504 Bind(&CellularCapabilityGSMTest::TestCallback,
505 Unretained(this)));
506 EXPECT_TRUE(error.IsSuccess());
Darin Petkovb05315f2011-11-07 10:14:25 +0100507}
508
509TEST_F(CellularCapabilityGSMTest, ChangePIN) {
510 static const char kOldPIN[] = "1111";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500511 EXPECT_CALL(*card_proxy_, ChangePIN(kOldPIN, kPIN, _, _,
512 CellularCapability::kTimeoutDefault))
513 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeChangePIN));
514 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100515 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500516 Error error;
517 capability_->ChangePIN(kOldPIN, kPIN, &error,
518 Bind(&CellularCapabilityGSMTest::TestCallback,
519 Unretained(this)));
520 EXPECT_TRUE(error.IsSuccess());
Darin Petkovb05315f2011-11-07 10:14:25 +0100521}
522
Darin Petkov1272a432011-11-10 15:53:37 +0100523
524TEST_F(CellularCapabilityGSMTest, ParseScanResult) {
525 static const char kID[] = "123";
526 static const char kLongName[] = "long name";
527 static const char kShortName[] = "short name";
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500528 GSMScanResult result;
Darin Petkov1272a432011-11-10 15:53:37 +0100529 result[CellularCapabilityGSM::kNetworkPropertyStatus] = "1";
530 result[CellularCapabilityGSM::kNetworkPropertyID] = kID;
531 result[CellularCapabilityGSM::kNetworkPropertyLongName] = kLongName;
532 result[CellularCapabilityGSM::kNetworkPropertyShortName] = kShortName;
533 result[CellularCapabilityGSM::kNetworkPropertyAccessTechnology] = "3";
534 result["unknown property"] = "random value";
Darin Petkov721ac932011-11-16 15:43:09 +0100535 Stringmap parsed = capability_->ParseScanResult(result);
Darin Petkov1272a432011-11-10 15:53:37 +0100536 EXPECT_EQ(5, parsed.size());
Ben Chan7ea768e2013-09-20 15:08:40 -0700537 EXPECT_EQ("available", parsed[kStatusProperty]);
538 EXPECT_EQ(kID, parsed[kNetworkIdProperty]);
539 EXPECT_EQ(kLongName, parsed[kLongNameProperty]);
540 EXPECT_EQ(kShortName, parsed[kShortNameProperty]);
541 EXPECT_EQ(kNetworkTechnologyEdge, parsed[kTechnologyProperty]);
Darin Petkov1272a432011-11-10 15:53:37 +0100542}
543
544TEST_F(CellularCapabilityGSMTest, ParseScanResultProviderLookup) {
545 InitProviderDB();
546 static const char kID[] = "310210";
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500547 GSMScanResult result;
Darin Petkov1272a432011-11-10 15:53:37 +0100548 result[CellularCapabilityGSM::kNetworkPropertyID] = kID;
Darin Petkov721ac932011-11-16 15:43:09 +0100549 Stringmap parsed = capability_->ParseScanResult(result);
Darin Petkov1272a432011-11-10 15:53:37 +0100550 EXPECT_EQ(2, parsed.size());
Ben Chan7ea768e2013-09-20 15:08:40 -0700551 EXPECT_EQ(kID, parsed[kNetworkIdProperty]);
552 EXPECT_EQ("T-Mobile", parsed[kLongNameProperty]);
Darin Petkov1272a432011-11-10 15:53:37 +0100553}
554
Darin Petkovae0c64e2011-11-15 15:50:27 +0100555TEST_F(CellularCapabilityGSMTest, SetAccessTechnology) {
Darin Petkov721ac932011-11-16 15:43:09 +0100556 capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
557 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GSM, capability_->access_technology_);
Darin Petkovae0c64e2011-11-15 15:50:27 +0100558 SetService();
Darin Petkovb72cf402011-11-22 14:51:39 +0100559 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100560 capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GPRS);
561 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GPRS, capability_->access_technology_);
Ben Chan7ea768e2013-09-20 15:08:40 -0700562 EXPECT_EQ(kNetworkTechnologyGprs, cellular_->service()->network_technology());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100563}
564
565TEST_F(CellularCapabilityGSMTest, UpdateOperatorInfo) {
566 static const char kOperatorName[] = "Swisscom";
567 InitProviderDB();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100568 capability_->serving_operator_.SetCode("22801");
Darin Petkovae0c64e2011-11-15 15:50:27 +0100569 SetService();
Darin Petkov721ac932011-11-16 15:43:09 +0100570 capability_->UpdateOperatorInfo();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100571 EXPECT_EQ(kOperatorName, capability_->serving_operator_.GetName());
572 EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100573 EXPECT_EQ(kOperatorName, cellular_->service()->serving_operator().GetName());
Darin Petkova4ca3c32012-08-17 16:05:24 +0200574
575 static const char kTestOperator[] = "Testcom";
576 capability_->serving_operator_.SetName(kTestOperator);
577 capability_->serving_operator_.SetCountry("");
578 capability_->UpdateOperatorInfo();
579 EXPECT_EQ(kTestOperator, capability_->serving_operator_.GetName());
580 EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
581 EXPECT_EQ(kTestOperator, cellular_->service()->serving_operator().GetName());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100582}
583
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100584TEST_F(CellularCapabilityGSMTest, UpdateStatus) {
585 InitProviderDB();
586 DBusPropertiesMap props;
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800587 cellular_->set_imsi("310240123456789");
Eric Shienbrood7fce52c2012-04-13 19:11:02 -0400588 props[CellularCapability::kModemPropertyIMSI].writer().append_string("");
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100589 capability_->UpdateStatus(props);
590 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
591}
592
Darin Petkovf508c822012-09-21 13:43:17 +0200593TEST_F(CellularCapabilityGSMTest, AllowRoaming) {
594 EXPECT_FALSE(cellular_->allow_roaming_);
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800595 EXPECT_FALSE(cellular_->provider_requires_roaming());
Darin Petkovf508c822012-09-21 13:43:17 +0200596 EXPECT_FALSE(capability_->AllowRoaming());
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800597 cellular_->set_provider_requires_roaming(true);
Darin Petkovf508c822012-09-21 13:43:17 +0200598 EXPECT_TRUE(capability_->AllowRoaming());
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800599 cellular_->set_provider_requires_roaming(false);
Darin Petkovf508c822012-09-21 13:43:17 +0200600 cellular_->allow_roaming_ = true;
601 EXPECT_TRUE(capability_->AllowRoaming());
602}
603
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100604TEST_F(CellularCapabilityGSMTest, SetHomeProvider) {
605 static const char kCountry[] = "us";
606 static const char kCode[] = "310160";
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800607 cellular_->set_imsi("310240123456789");
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100608
Prathmesh Prabhu99ec94d2013-11-22 10:43:37 -0800609 EXPECT_FALSE(capability_->home_provider_info_);
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800610 EXPECT_FALSE(cellular_->provider_requires_roaming());
Darin Petkovf508c822012-09-21 13:43:17 +0200611
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100612 capability_->SetHomeProvider(); // No mobile provider DB available.
613 EXPECT_TRUE(cellular_->home_provider().GetName().empty());
614 EXPECT_TRUE(cellular_->home_provider().GetCountry().empty());
615 EXPECT_TRUE(cellular_->home_provider().GetCode().empty());
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800616 EXPECT_FALSE(cellular_->provider_requires_roaming());
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100617
618 InitProviderDB();
619 capability_->SetHomeProvider();
620 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
621 EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
622 EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800623 EXPECT_EQ(4, cellular_->apn_list().size());
Prathmesh Prabhu99ec94d2013-11-22 10:43:37 -0800624 ASSERT_TRUE(capability_->home_provider_info_);
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800625 EXPECT_FALSE(cellular_->provider_requires_roaming());
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100626
627 Cellular::Operator oper;
628 cellular_->set_home_provider(oper);
629 capability_->spn_ = kTestCarrier;
630 capability_->SetHomeProvider();
631 EXPECT_EQ(kTestCarrier, cellular_->home_provider().GetName());
632 EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
633 EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800634 EXPECT_FALSE(cellular_->provider_requires_roaming());
Darin Petkovb4fccd22012-08-10 11:59:26 +0200635
636 static const char kCubic[] = "Cubic";
637 capability_->spn_ = kCubic;
638 capability_->SetHomeProvider();
639 EXPECT_EQ(kCubic, cellular_->home_provider().GetName());
640 EXPECT_EQ("", cellular_->home_provider().GetCode());
Prathmesh Prabhu99ec94d2013-11-22 10:43:37 -0800641 ASSERT_TRUE(capability_->home_provider_info_);
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800642 EXPECT_TRUE(cellular_->provider_requires_roaming());
Darin Petkovb4fccd22012-08-10 11:59:26 +0200643
644 static const char kCUBIC[] = "CUBIC";
645 capability_->spn_ = kCUBIC;
Prathmesh Prabhu99ec94d2013-11-22 10:43:37 -0800646 capability_->home_provider_info_ = NULL;
Darin Petkovb4fccd22012-08-10 11:59:26 +0200647 capability_->SetHomeProvider();
648 EXPECT_EQ(kCUBIC, cellular_->home_provider().GetName());
649 EXPECT_EQ("", cellular_->home_provider().GetCode());
Prathmesh Prabhu99ec94d2013-11-22 10:43:37 -0800650 ASSERT_TRUE(capability_->home_provider_info_);
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800651 EXPECT_TRUE(cellular_->provider_requires_roaming());
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100652}
653
Darin Petkov3cfbf212011-11-21 16:02:09 +0100654namespace {
655
656MATCHER(SizeIs4, "") {
657 return arg.size() == 4;
658}
659
660} // namespace
661
662TEST_F(CellularCapabilityGSMTest, InitAPNList) {
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800663 Stringmaps apn_list;
Darin Petkov3cfbf212011-11-21 16:02:09 +0100664 InitProviderDB();
Prathmesh Prabhu99ec94d2013-11-22 10:43:37 -0800665 capability_->home_provider_info_ =
Prathmesh Prabhu27526f12013-03-25 19:42:18 -0700666 mobile_provider_lookup_by_name(modem_info_.provider_db(), "T-Mobile");
Prathmesh Prabhu99ec94d2013-11-22 10:43:37 -0800667 ASSERT_TRUE(capability_->home_provider_info_);
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800668 EXPECT_EQ(0, cellular_->apn_list().size());
Darin Petkov3cfbf212011-11-21 16:02:09 +0100669 EXPECT_CALL(*device_adaptor_,
Ben Chan7ea768e2013-09-20 15:08:40 -0700670 EmitStringmapsChanged(kCellularApnListProperty, SizeIs4()));
Darin Petkov3cfbf212011-11-21 16:02:09 +0100671 capability_->InitAPNList();
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800672 apn_list = cellular_->apn_list();
673 EXPECT_EQ(4, apn_list.size());
674 EXPECT_EQ("wap.voicestream.com", apn_list[1][kApnProperty]);
675 EXPECT_EQ("Web2Go/t-zones", apn_list[1][kApnNameProperty]);
Darin Petkov3cfbf212011-11-21 16:02:09 +0100676}
677
Darin Petkov20c13ec2011-11-09 15:07:15 +0100678TEST_F(CellularCapabilityGSMTest, GetNetworkTechnologyString) {
Darin Petkov721ac932011-11-16 15:43:09 +0100679 EXPECT_EQ("", capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100680 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
Ben Chan7ea768e2013-09-20 15:08:40 -0700681 EXPECT_EQ(kNetworkTechnologyGsm, capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100682 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM_COMPACT);
Ben Chan7ea768e2013-09-20 15:08:40 -0700683 EXPECT_EQ(kNetworkTechnologyGsm, capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100684 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GPRS);
Ben Chan7ea768e2013-09-20 15:08:40 -0700685 EXPECT_EQ(kNetworkTechnologyGprs, capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100686 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_EDGE);
Ben Chan7ea768e2013-09-20 15:08:40 -0700687 EXPECT_EQ(kNetworkTechnologyEdge, capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100688 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_UMTS);
Ben Chan7ea768e2013-09-20 15:08:40 -0700689 EXPECT_EQ(kNetworkTechnologyUmts, capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100690 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSDPA);
Ben Chan7ea768e2013-09-20 15:08:40 -0700691 EXPECT_EQ(kNetworkTechnologyHspa, capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100692 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSUPA);
Ben Chan7ea768e2013-09-20 15:08:40 -0700693 EXPECT_EQ(kNetworkTechnologyHspa, capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100694 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSPA);
Ben Chan7ea768e2013-09-20 15:08:40 -0700695 EXPECT_EQ(kNetworkTechnologyHspa, capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100696 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS);
Ben Chan7ea768e2013-09-20 15:08:40 -0700697 EXPECT_EQ(kNetworkTechnologyHspaPlus,
Darin Petkov721ac932011-11-16 15:43:09 +0100698 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100699}
700
701TEST_F(CellularCapabilityGSMTest, GetRoamingStateString) {
Ben Chan7ea768e2013-09-20 15:08:40 -0700702 EXPECT_EQ(kRoamingStateUnknown, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100703 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
Ben Chan7ea768e2013-09-20 15:08:40 -0700704 EXPECT_EQ(kRoamingStateHome, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100705 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING);
Ben Chan7ea768e2013-09-20 15:08:40 -0700706 EXPECT_EQ(kRoamingStateRoaming, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100707 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING);
Ben Chan7ea768e2013-09-20 15:08:40 -0700708 EXPECT_EQ(kRoamingStateUnknown, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100709 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED);
Ben Chan7ea768e2013-09-20 15:08:40 -0700710 EXPECT_EQ(kRoamingStateUnknown, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100711 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE);
Ben Chan7ea768e2013-09-20 15:08:40 -0700712 EXPECT_EQ(kRoamingStateUnknown, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100713}
714
Darin Petkovac635a82012-01-10 16:51:58 +0100715TEST_F(CellularCapabilityGSMTest, CreateFriendlyServiceName) {
716 CellularCapabilityGSM::friendly_service_name_id_ = 0;
717 EXPECT_EQ("GSMNetwork0", capability_->CreateFriendlyServiceName());
718 EXPECT_EQ("GSMNetwork1", capability_->CreateFriendlyServiceName());
Darin Petkova4ca3c32012-08-17 16:05:24 +0200719
Darin Petkovac635a82012-01-10 16:51:58 +0100720 capability_->serving_operator_.SetCode("1234");
721 EXPECT_EQ("cellular_1234", capability_->CreateFriendlyServiceName());
Darin Petkova4ca3c32012-08-17 16:05:24 +0200722
Darin Petkovac635a82012-01-10 16:51:58 +0100723 static const char kTestCarrier[] = "A GSM Carrier";
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800724 cellular_->set_carrier(kTestCarrier);
Darin Petkovac635a82012-01-10 16:51:58 +0100725 EXPECT_EQ(kTestCarrier, capability_->CreateFriendlyServiceName());
Darin Petkova4ca3c32012-08-17 16:05:24 +0200726
727 static const char kHomeProvider[] = "The GSM Home Provider";
728 cellular_->home_provider_.SetName(kHomeProvider);
729 EXPECT_EQ(kTestCarrier, capability_->CreateFriendlyServiceName());
730 capability_->registration_state_ = MM_MODEM_GSM_NETWORK_REG_STATUS_HOME;
731 EXPECT_EQ(kHomeProvider, capability_->CreateFriendlyServiceName());
732
Darin Petkovac635a82012-01-10 16:51:58 +0100733 static const char kTestOperator[] = "A GSM Operator";
734 capability_->serving_operator_.SetName(kTestOperator);
735 EXPECT_EQ(kTestOperator, capability_->CreateFriendlyServiceName());
Darin Petkova4ca3c32012-08-17 16:05:24 +0200736
737 capability_->registration_state_ = MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING;
738 EXPECT_EQ(StringPrintf("%s | %s", kHomeProvider, kTestOperator),
739 capability_->CreateFriendlyServiceName());
Darin Petkovac635a82012-01-10 16:51:58 +0100740}
741
Darin Petkov31332412012-01-28 01:50:02 +0100742TEST_F(CellularCapabilityGSMTest, SetStorageIdentifier) {
743 SetService();
744 capability_->OnServiceCreated();
Ben Chan7ea768e2013-09-20 15:08:40 -0700745 EXPECT_EQ(string(kTypeCellular) + "_" + kAddress + "_" +
Darin Petkov31332412012-01-28 01:50:02 +0100746 cellular_->service()->friendly_name(),
747 cellular_->service()->GetStorageIdentifier());
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800748 cellular_->set_imsi(kIMSI);
Darin Petkov31332412012-01-28 01:50:02 +0100749 capability_->OnServiceCreated();
Ben Chan7ea768e2013-09-20 15:08:40 -0700750 EXPECT_EQ(string(kTypeCellular) + "_" + kAddress + "_" + kIMSI,
Darin Petkov31332412012-01-28 01:50:02 +0100751 cellular_->service()->GetStorageIdentifier());
752}
753
Gaurav Shah67808222013-03-27 13:29:36 -0700754MATCHER_P(KeyValueStoreEq, value, "") {
755 bool match = value.bool_properties() == arg.bool_properties() &&
756 value.int_properties() == arg.int_properties() &&
757 value.string_properties() == arg.string_properties() &&
758 value.uint_properties() == arg.uint_properties();
Gaurav Shah67808222013-03-27 13:29:36 -0700759 if (!match) {
760 *result_listener << "\nExpected KeyValueStore:\n"
761 << "\tbool_properties: "
762 << testing::PrintToString(value.bool_properties())
763 << "\n\tint_properties: "
764 << testing::PrintToString(value.int_properties())
765 << "\n\tstring_properties: "
766 << testing::PrintToString(value.string_properties())
767 << "\n\tint_properties: "
768 << testing::PrintToString(value.uint_properties())
769 << "\nGot KeyValueStore:\n"
770 << "\tbool_properties: "
771 << testing::PrintToString(arg.bool_properties())
772 << "\n\tint_properties: "
773 << testing::PrintToString(arg.int_properties())
774 << "\n\tstring_properties: "
775 << testing::PrintToString(arg.string_properties())
776 << "\n\tuint_properties: "
777 << testing::PrintToString(arg.uint_properties());
778 }
Gaurav Shah67808222013-03-27 13:29:36 -0700779 return match;
780}
781
Jason Glasgow4c0724a2012-04-17 15:47:40 -0400782TEST_F(CellularCapabilityGSMTest, OnDBusPropertiesChanged) {
Darin Petkov63138a92012-02-06 14:09:15 +0100783 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_UNKNOWN, capability_->access_technology_);
784 EXPECT_FALSE(capability_->sim_lock_status_.enabled);
785 EXPECT_EQ("", capability_->sim_lock_status_.lock_type);
786 EXPECT_EQ(0, capability_->sim_lock_status_.retries_left);
787 DBusPropertiesMap props;
788 static const char kLockType[] = "sim-pin";
789 const int kRetries = 3;
790 props[CellularCapabilityGSM::kPropertyAccessTechnology].writer().
791 append_uint32(MM_MODEM_GSM_ACCESS_TECH_EDGE);
792 props[CellularCapabilityGSM::kPropertyEnabledFacilityLocks].writer().
793 append_uint32(MM_MODEM_GSM_FACILITY_SIM);
794 props[CellularCapabilityGSM::kPropertyUnlockRequired].writer().append_string(
795 kLockType);
796 props[CellularCapabilityGSM::kPropertyUnlockRetries].writer().append_uint32(
797 kRetries);
Jason Glasgow4c0724a2012-04-17 15:47:40 -0400798 // Call with the 'wrong' interface and nothing should change.
799 capability_->OnDBusPropertiesChanged(MM_MODEM_GSM_INTERFACE, props,
800 vector<string>());
801 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_UNKNOWN, capability_->access_technology_);
802 EXPECT_FALSE(capability_->sim_lock_status_.enabled);
803 EXPECT_EQ("", capability_->sim_lock_status_.lock_type);
804 EXPECT_EQ(0, capability_->sim_lock_status_.retries_left);
805
Gary Morainbaeefdf2012-04-30 14:53:35 -0700806 // Call with the MM_MODEM_GSM_NETWORK_INTERFACE interface and expect a change
807 // to the enabled state of the SIM lock.
808 KeyValueStore lock_status;
Ben Chan7ea768e2013-09-20 15:08:40 -0700809 lock_status.SetBool(kSIMLockEnabledProperty, true);
810 lock_status.SetString(kSIMLockTypeProperty, "");
811 lock_status.SetUint(kSIMLockRetriesLeftProperty, 0);
Gary Morainbaeefdf2012-04-30 14:53:35 -0700812
813 EXPECT_CALL(*device_adaptor_, EmitKeyValueStoreChanged(
Ben Chan7ea768e2013-09-20 15:08:40 -0700814 kSIMLockStatusProperty,
Gary Morainbaeefdf2012-04-30 14:53:35 -0700815 KeyValueStoreEq(lock_status)));
816
Eric Shienbrood7fce52c2012-04-13 19:11:02 -0400817 capability_->OnDBusPropertiesChanged(MM_MODEM_GSM_NETWORK_INTERFACE, props,
Jason Glasgow4c0724a2012-04-17 15:47:40 -0400818 vector<string>());
Darin Petkov63138a92012-02-06 14:09:15 +0100819 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_EDGE, capability_->access_technology_);
Eric Shienbrood7fce52c2012-04-13 19:11:02 -0400820 capability_->OnDBusPropertiesChanged(MM_MODEM_GSM_CARD_INTERFACE, props,
821 vector<string>());
Darin Petkov63138a92012-02-06 14:09:15 +0100822 EXPECT_TRUE(capability_->sim_lock_status_.enabled);
Gary Morainbaeefdf2012-04-30 14:53:35 -0700823 EXPECT_TRUE(capability_->sim_lock_status_.lock_type.empty());
824 EXPECT_EQ(0, capability_->sim_lock_status_.retries_left);
825
826 // Some properties are sent on the MM_MODEM_INTERFACE.
827 capability_->sim_lock_status_.enabled = false;
828 capability_->sim_lock_status_.lock_type = "";
829 capability_->sim_lock_status_.retries_left = 0;
830 KeyValueStore lock_status2;
Ben Chan7ea768e2013-09-20 15:08:40 -0700831 lock_status2.SetBool(kSIMLockEnabledProperty, false);
832 lock_status2.SetString(kSIMLockTypeProperty, kLockType);
833 lock_status2.SetUint(kSIMLockRetriesLeftProperty, kRetries);
Gary Morainbaeefdf2012-04-30 14:53:35 -0700834 EXPECT_CALL(*device_adaptor_,
Ben Chan7ea768e2013-09-20 15:08:40 -0700835 EmitKeyValueStoreChanged(kSIMLockStatusProperty,
Gary Morainbaeefdf2012-04-30 14:53:35 -0700836 KeyValueStoreEq(lock_status2)));
837 capability_->OnDBusPropertiesChanged(MM_MODEM_INTERFACE, props,
838 vector<string>());
839 EXPECT_FALSE(capability_->sim_lock_status_.enabled);
Darin Petkov63138a92012-02-06 14:09:15 +0100840 EXPECT_EQ(kLockType, capability_->sim_lock_status_.lock_type);
841 EXPECT_EQ(kRetries, capability_->sim_lock_status_.retries_left);
842}
843
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400844TEST_F(CellularCapabilityGSMTest, SetupApnTryList) {
845 static const string kTmobileApn("epc.tmobile.com");
846 static const string kLastGoodApn("remembered.apn");
847 static const string kLastGoodUsername("remembered.user");
848 static const string kSuppliedApn("my.apn");
849
850 SetService();
Prathmesh Prabhu9f06c872013-11-21 14:08:23 -0800851 cellular_->set_imsi("310240123456789");
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400852 InitProviderDB();
853 capability_->SetHomeProvider();
854 DBusPropertiesMap props;
855 capability_->SetupConnectProperties(&props);
Ben Chan7ea768e2013-09-20 15:08:40 -0700856 EXPECT_FALSE(props.find(kApnProperty) == props.end());
857 EXPECT_EQ(kTmobileApn, props[kApnProperty].reader().get_string());
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400858
859 ProfileRefPtr profile(new NiceMock<MockProfile>(
Prathmesh Prabhu27526f12013-03-25 19:42:18 -0700860 modem_info_.control_interface(), modem_info_.metrics(),
861 modem_info_.manager()));
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400862 cellular_->service()->set_profile(profile);
863 Stringmap apn_info;
Ben Chan7ea768e2013-09-20 15:08:40 -0700864 apn_info[kApnProperty] = kLastGoodApn;
865 apn_info[kApnUsernameProperty] = kLastGoodUsername;
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400866 cellular_->service()->SetLastGoodApn(apn_info);
867 props.clear();
Ben Chan7ea768e2013-09-20 15:08:40 -0700868 EXPECT_TRUE(props.find(kApnProperty) == props.end());
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400869 capability_->SetupConnectProperties(&props);
870 // We expect the list to contain the last good APN, plus
871 // the 4 APNs from the mobile provider info database.
872 EXPECT_EQ(5, capability_->apn_try_list_.size());
Ben Chan7ea768e2013-09-20 15:08:40 -0700873 EXPECT_FALSE(props.find(kApnProperty) == props.end());
874 EXPECT_EQ(kLastGoodApn, props[kApnProperty].reader().get_string());
875 EXPECT_FALSE(props.find(kApnUsernameProperty) == props.end());
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400876 EXPECT_EQ(kLastGoodUsername,
Ben Chan7ea768e2013-09-20 15:08:40 -0700877 props[kApnUsernameProperty].reader().get_string());
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400878
879 Error error;
880 apn_info.clear();
881 props.clear();
Ben Chan7ea768e2013-09-20 15:08:40 -0700882 apn_info[kApnProperty] = kSuppliedApn;
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400883 // Setting the APN has the side effect of clearing the LastGoodApn,
884 // so the try list will have 5 elements, with the first one being
885 // the supplied APN.
886 cellular_->service()->SetApn(apn_info, &error);
Ben Chan7ea768e2013-09-20 15:08:40 -0700887 EXPECT_TRUE(props.find(kApnProperty) == props.end());
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400888 capability_->SetupConnectProperties(&props);
889 EXPECT_EQ(5, capability_->apn_try_list_.size());
Ben Chan7ea768e2013-09-20 15:08:40 -0700890 EXPECT_FALSE(props.find(kApnProperty) == props.end());
891 EXPECT_EQ(kSuppliedApn, props[kApnProperty].reader().get_string());
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400892
893 apn_info.clear();
894 props.clear();
Ben Chan7ea768e2013-09-20 15:08:40 -0700895 apn_info[kApnProperty] = kLastGoodApn;
896 apn_info[kApnUsernameProperty] = kLastGoodUsername;
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400897 // Now when LastGoodAPN is set, it will be the one selected.
898 cellular_->service()->SetLastGoodApn(apn_info);
Ben Chan7ea768e2013-09-20 15:08:40 -0700899 EXPECT_TRUE(props.find(kApnProperty) == props.end());
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400900 capability_->SetupConnectProperties(&props);
901 // We expect the list to contain the last good APN, plus
902 // the user-supplied APN, plus the 4 APNs from the mobile
903 // provider info database.
904 EXPECT_EQ(6, capability_->apn_try_list_.size());
Ben Chan7ea768e2013-09-20 15:08:40 -0700905 EXPECT_FALSE(props.find(kApnProperty) == props.end());
906 EXPECT_EQ(kLastGoodApn, props[kApnProperty].reader().get_string());
907 EXPECT_FALSE(props.find(kApnUsernameProperty) == props.end());
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400908 EXPECT_EQ(kLastGoodUsername,
Ben Chan7ea768e2013-09-20 15:08:40 -0700909 props[kApnUsernameProperty].reader().get_string());
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400910}
911
Thieu Le923006b2012-04-05 16:32:58 -0700912TEST_F(CellularCapabilityGSMTest, StartModemSuccess) {
913 SetupCommonStartModemExpectations();
914 EXPECT_CALL(*card_proxy_,
915 GetSPN(_, _, CellularCapability::kTimeoutDefault))
916 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetSPN));
917 EXPECT_CALL(*card_proxy_,
918 GetMSISDN(_, _, CellularCapability::kTimeoutDefault))
919 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetMSISDN));
Ben Chan3ecdf822012-08-06 12:29:23 -0700920 AllowCreateCardProxyFromFactory();
Thieu Le923006b2012-04-05 16:32:58 -0700921
922 Error error;
923 capability_->StartModem(
924 &error, Bind(&CellularCapabilityGSMTest::TestCallback, Unretained(this)));
925 dispatcher_.DispatchPendingEvents();
926}
927
928TEST_F(CellularCapabilityGSMTest, StartModemGetSPNFail) {
929 SetupCommonStartModemExpectations();
930 EXPECT_CALL(*card_proxy_,
931 GetSPN(_, _, CellularCapability::kTimeoutDefault))
932 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetSPNFail));
933 EXPECT_CALL(*card_proxy_,
934 GetMSISDN(_, _, CellularCapability::kTimeoutDefault))
935 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetMSISDN));
Ben Chan3ecdf822012-08-06 12:29:23 -0700936 AllowCreateCardProxyFromFactory();
Thieu Le923006b2012-04-05 16:32:58 -0700937
938 Error error;
939 capability_->StartModem(
940 &error, Bind(&CellularCapabilityGSMTest::TestCallback, Unretained(this)));
941 dispatcher_.DispatchPendingEvents();
942}
943
944TEST_F(CellularCapabilityGSMTest, StartModemGetMSISDNFail) {
945 SetupCommonStartModemExpectations();
946 EXPECT_CALL(*card_proxy_,
947 GetSPN(_, _, CellularCapability::kTimeoutDefault))
948 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetSPN));
949 EXPECT_CALL(*card_proxy_,
950 GetMSISDN(_, _, CellularCapability::kTimeoutDefault))
951 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetMSISDNFail));
Ben Chan3ecdf822012-08-06 12:29:23 -0700952 AllowCreateCardProxyFromFactory();
Thieu Le923006b2012-04-05 16:32:58 -0700953
954 Error error;
955 capability_->StartModem(
956 &error, Bind(&CellularCapabilityGSMTest::TestCallback, Unretained(this)));
957 dispatcher_.DispatchPendingEvents();
958}
959
Thieu Leb5954a22012-05-18 10:37:34 -0700960TEST_F(CellularCapabilityGSMTest, ConnectFailureNoService) {
961 // Make sure we don't crash if the connect failed and there is no
962 // CellularService object. This can happen if the modem is enabled and
963 // then quickly disabled.
964 SetupCommonProxiesExpectations();
965 EXPECT_CALL(*simple_proxy_,
966 Connect(_, _, _, CellularCapabilityGSM::kTimeoutConnect))
967 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeConnectFail));
968 EXPECT_CALL(*this, TestCallback(IsFailure()));
Thieu Leb5954a22012-05-18 10:37:34 -0700969 InitProxies();
970 EXPECT_FALSE(capability_->cellular()->service());
971 Error error;
972 DBusPropertiesMap props;
973 capability_->Connect(props, &error,
974 Bind(&CellularCapabilityGSMTest::TestCallback,
975 Unretained(this)));
976}
977
Darin Petkovb05315f2011-11-07 10:14:25 +0100978} // namespace shill