blob: aaef211bc53fc863cce7653b16555314f3f2fad5 [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
Eric Shienbrood9a245532012-03-07 14:20:39 -05007#include <base/bind.h>
Darin Petkov20c13ec2011-11-09 15:07:15 +01008#include <chromeos/dbus/service_constants.h>
Darin Petkovb05315f2011-11-07 10:14:25 +01009#include <gtest/gtest.h>
Darin Petkov20c13ec2011-11-09 15:07:15 +010010#include <mm/mm-modem.h>
Darin Petkov1272a432011-11-10 15:53:37 +010011#include <mobile_provider.h>
Darin Petkovb05315f2011-11-07 10:14:25 +010012
13#include "shill/cellular.h"
Darin Petkov3e509242011-11-10 14:46:44 +010014#include "shill/cellular_service.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010015#include "shill/error.h"
16#include "shill/event_dispatcher.h"
Darin Petkov3cfbf212011-11-21 16:02:09 +010017#include "shill/mock_adaptors.h"
Thieu Le3426c8f2012-01-11 17:35:11 -080018#include "shill/mock_metrics.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010019#include "shill/mock_modem_gsm_card_proxy.h"
Darin Petkov3e509242011-11-10 14:46:44 +010020#include "shill/mock_modem_gsm_network_proxy.h"
Thieu Le923006b2012-04-05 16:32:58 -070021#include "shill/mock_modem_proxy.h"
22#include "shill/mock_modem_simple_proxy.h"
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -040023#include "shill/mock_profile.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010024#include "shill/nice_mock_control.h"
Thieu Le923006b2012-04-05 16:32:58 -070025#include "shill/proxy_factory.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010026
Eric Shienbrood9a245532012-03-07 14:20:39 -050027using base::Bind;
28using base::Unretained;
Darin Petkov31332412012-01-28 01:50:02 +010029using std::string;
Darin Petkove5bc2cb2011-12-07 14:47:32 +010030using testing::_;
Eric Shienbrood9a245532012-03-07 14:20:39 -050031using testing::Invoke;
Darin Petkov3cfbf212011-11-21 16:02:09 +010032using testing::NiceMock;
Darin Petkovcb547732011-11-09 13:55:26 +010033using testing::Return;
34
Darin Petkovb05315f2011-11-07 10:14:25 +010035namespace shill {
36
Eric Shienbrood9a245532012-03-07 14:20:39 -050037MATCHER(IsSuccess, "") {
38 return arg.IsSuccess();
39}
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050040
Darin Petkovb05315f2011-11-07 10:14:25 +010041class CellularCapabilityGSMTest : public testing::Test {
42 public:
43 CellularCapabilityGSMTest()
44 : cellular_(new Cellular(&control_,
45 &dispatcher_,
Thieu Le3426c8f2012-01-11 17:35:11 -080046 &metrics_,
Darin Petkovb05315f2011-11-07 10:14:25 +010047 NULL,
48 "",
Darin Petkov31332412012-01-28 01:50:02 +010049 kAddress,
Darin Petkovb05315f2011-11-07 10:14:25 +010050 0,
51 Cellular::kTypeGSM,
52 "",
53 "",
54 NULL)),
Thieu Le923006b2012-04-05 16:32:58 -070055 proxy_(new MockModemProxy()),
56 simple_proxy_(new MockModemSimpleProxy()),
Darin Petkovcb547732011-11-09 13:55:26 +010057 card_proxy_(new MockModemGSMCardProxy()),
Darin Petkov3e509242011-11-10 14:46:44 +010058 network_proxy_(new MockModemGSMNetworkProxy()),
Thieu Le923006b2012-04-05 16:32:58 -070059 proxy_factory_(this),
Darin Petkov721ac932011-11-16 15:43:09 +010060 capability_(NULL),
Darin Petkov3cfbf212011-11-21 16:02:09 +010061 device_adaptor_(NULL),
Darin Petkov1272a432011-11-10 15:53:37 +010062 provider_db_(NULL) {}
Darin Petkovb05315f2011-11-07 10:14:25 +010063
Darin Petkov3e509242011-11-10 14:46:44 +010064 virtual ~CellularCapabilityGSMTest() {
65 cellular_->service_ = NULL;
Darin Petkov1272a432011-11-10 15:53:37 +010066 mobile_provider_close_db(provider_db_);
67 provider_db_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010068 capability_ = NULL;
Darin Petkov3cfbf212011-11-21 16:02:09 +010069 device_adaptor_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010070 }
71
72 virtual void SetUp() {
73 capability_ =
74 dynamic_cast<CellularCapabilityGSM *>(cellular_->capability_.get());
Darin Petkov3cfbf212011-11-21 16:02:09 +010075 device_adaptor_ =
76 dynamic_cast<NiceMock<DeviceMockAdaptor> *>(cellular_->adaptor());
Darin Petkov3e509242011-11-10 14:46:44 +010077 }
78
Thieu Le923006b2012-04-05 16:32:58 -070079 void InvokeEnable(bool enable, Error *error,
80 const ResultCallback &callback, int timeout) {
81 callback.Run(Error());
82 }
Eric Shienbrood9a245532012-03-07 14:20:39 -050083 void InvokeGetIMEI(Error *error, const GSMIdentifierCallback &callback,
84 int timeout) {
85 callback.Run(kIMEI, Error());
86 }
87 void InvokeGetIMSI(Error *error, const GSMIdentifierCallback &callback,
88 int timeout) {
89 callback.Run(kIMSI, Error());
90 }
91 void InvokeGetIMSI2(Error *error, const GSMIdentifierCallback &callback,
92 int timeout) {
93 callback.Run("310240123456789", Error());
94 }
95 void InvokeGetMSISDN(Error *error, const GSMIdentifierCallback &callback,
96 int timeout) {
97 callback.Run(kMSISDN, Error());
98 }
Thieu Le923006b2012-04-05 16:32:58 -070099 void InvokeGetMSISDNFail(Error *error, const GSMIdentifierCallback &callback,
100 int timeout) {
101 callback.Run("", Error(Error::kOperationFailed));
102 }
Eric Shienbrood9a245532012-03-07 14:20:39 -0500103 void InvokeGetSPN(Error *error, const GSMIdentifierCallback &callback,
104 int timeout) {
105 callback.Run(kTestCarrier, Error());
106 }
Thieu Le923006b2012-04-05 16:32:58 -0700107 void InvokeGetSPNFail(Error *error, const GSMIdentifierCallback &callback,
108 int timeout) {
109 callback.Run("", Error(Error::kOperationFailed));
110 }
Eric Shienbrood9a245532012-03-07 14:20:39 -0500111 void InvokeGetSignalQuality(Error *error,
112 const SignalQualityCallback &callback,
113 int timeout) {
114 callback.Run(kStrength, Error());
115 }
116 void InvokeGetRegistrationInfo(Error *error,
117 const RegistrationInfoCallback &callback,
118 int timeout) {
119 callback.Run(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME,
120 kTestNetwork, kTestCarrier, Error());
121 }
122 void InvokeRegister(const string &network_id,
123 Error *error,
124 const ResultCallback &callback,
125 int timeout) {
126 callback.Run(Error());
127 }
128 void InvokeEnablePIN(const string &pin, bool enable,
129 Error *error, const ResultCallback &callback,
130 int timeout) {
131 callback.Run(Error());
132 }
133 void InvokeSendPIN(const string &pin, Error *error,
134 const ResultCallback &callback, int timeout) {
135 callback.Run(Error());
136 }
137 void InvokeSendPUK(const string &puk, const string &pin, Error *error,
138 const ResultCallback &callback, int timeout) {
139 callback.Run(Error());
140 }
141 void InvokeChangePIN(const string &old_pin, const string &pin, Error *error,
142 const ResultCallback &callback, int timeout) {
143 callback.Run(Error());
144 }
145 void InvokeScan(Error *error, const ScanResultsCallback &callback,
146 int timeout) {
147 GSMScanResults results;
148 results.push_back(GSMScanResult());
149 results[0][CellularCapabilityGSM::kNetworkPropertyID] = kScanID0;
150 results.push_back(GSMScanResult());
151 results[1][CellularCapabilityGSM::kNetworkPropertyID] = kScanID1;
152 callback.Run(results, Error());
153 }
Thieu Le923006b2012-04-05 16:32:58 -0700154 void InvokeGetModemStatus(Error *error,
155 const DBusPropertyMapCallback &callback,
156 int timeout) {
157 DBusPropertiesMap props;
158 callback.Run(props, Error());
159 }
160 void InvokeGetModemInfo(Error *error, const ModemInfoCallback &callback,
161 int timeout) {
162 ModemHardwareInfo info;
163 callback.Run(info, Error());
164 }
Eric Shienbrood9a245532012-03-07 14:20:39 -0500165
166 MOCK_METHOD1(TestCallback, void(const Error &error));
167
Darin Petkovb05315f2011-11-07 10:14:25 +0100168 protected:
Darin Petkov31332412012-01-28 01:50:02 +0100169 static const char kAddress[];
Darin Petkov1272a432011-11-10 15:53:37 +0100170 static const char kTestMobileProviderDBPath[];
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500171 static const char kTestNetwork[];
Darin Petkovcb547732011-11-09 13:55:26 +0100172 static const char kTestCarrier[];
Darin Petkovb05315f2011-11-07 10:14:25 +0100173 static const char kPIN[];
174 static const char kPUK[];
Darin Petkovcb547732011-11-09 13:55:26 +0100175 static const char kIMEI[];
176 static const char kIMSI[];
177 static const char kMSISDN[];
Eric Shienbrood9a245532012-03-07 14:20:39 -0500178 static const char kScanID0[];
179 static const char kScanID1[];
180 static const int kStrength;
Darin Petkovcb547732011-11-09 13:55:26 +0100181
Thieu Le923006b2012-04-05 16:32:58 -0700182 class TestProxyFactory : public ProxyFactory {
183 public:
184 explicit TestProxyFactory(CellularCapabilityGSMTest *test) : test_(test) {}
185
186 virtual ModemProxyInterface *CreateModemProxy(
187 const string &/*path*/,
188 const string &/*service*/) {
189 return test_->proxy_.release();
190 }
191
192 virtual ModemSimpleProxyInterface *CreateModemSimpleProxy(
193 const string &/*path*/,
194 const string &/*service*/) {
195 return test_->simple_proxy_.release();
196 }
197
198 virtual ModemGSMCardProxyInterface *CreateModemGSMCardProxy(
199 const string &/*path*/,
200 const string &/*service*/) {
201 return test_->card_proxy_.release();
202 }
203
204 virtual ModemGSMNetworkProxyInterface *CreateModemGSMNetworkProxy(
205 const string &/*path*/,
206 const string &/*service*/) {
207 return test_->network_proxy_.release();
208 }
209
210 private:
211 CellularCapabilityGSMTest *test_;
212 };
213
214 void SetProxy() {
215 capability_->proxy_.reset(proxy_.release());
216 }
217
Darin Petkovcb547732011-11-09 13:55:26 +0100218 void SetCardProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +0100219 capability_->card_proxy_.reset(card_proxy_.release());
Darin Petkovcb547732011-11-09 13:55:26 +0100220 }
Darin Petkovb05315f2011-11-07 10:14:25 +0100221
Darin Petkov1272a432011-11-10 15:53:37 +0100222 void SetNetworkProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +0100223 capability_->network_proxy_.reset(network_proxy_.release());
Darin Petkov1272a432011-11-10 15:53:37 +0100224 }
225
Thieu Le923006b2012-04-05 16:32:58 -0700226 void SetProxyFactory() {
227 capability_->proxy_factory_ = &proxy_factory_;
228 }
229
Darin Petkov20c13ec2011-11-09 15:07:15 +0100230 void SetAccessTechnology(uint32 technology) {
Darin Petkov721ac932011-11-16 15:43:09 +0100231 capability_->access_technology_ = technology;
Darin Petkov20c13ec2011-11-09 15:07:15 +0100232 }
233
234 void SetRegistrationState(uint32 state) {
Darin Petkov721ac932011-11-16 15:43:09 +0100235 capability_->registration_state_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +0100236 }
237
Darin Petkov3e509242011-11-10 14:46:44 +0100238 void SetService() {
239 cellular_->service_ = new CellularService(
Thieu Le3426c8f2012-01-11 17:35:11 -0800240 &control_, &dispatcher_, &metrics_, NULL, cellular_);
Darin Petkov3e509242011-11-10 14:46:44 +0100241 }
242
Darin Petkov1272a432011-11-10 15:53:37 +0100243 void InitProviderDB() {
244 provider_db_ = mobile_provider_open_db(kTestMobileProviderDBPath);
245 ASSERT_TRUE(provider_db_);
246 cellular_->provider_db_ = provider_db_;
247 }
248
Thieu Le923006b2012-04-05 16:32:58 -0700249 void SetupCommonStartModemExpectations() {
250 EXPECT_CALL(*proxy_, set_state_changed_callback(_));
251 EXPECT_CALL(*network_proxy_, set_signal_quality_callback(_));
252 EXPECT_CALL(*network_proxy_, set_network_mode_callback(_));
253 EXPECT_CALL(*network_proxy_, set_registration_info_callback(_));
254
255 EXPECT_CALL(*proxy_, Enable(_, _, _, CellularCapability::kTimeoutEnable))
256 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeEnable));
257 EXPECT_CALL(*network_proxy_,
258 Register(_, _, _, CellularCapabilityGSM::kTimeoutRegister))
259 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeRegister));
260 EXPECT_CALL(*simple_proxy_,
261 GetModemStatus(_, _, CellularCapability::kTimeoutDefault))
262 .WillOnce(Invoke(this,
263 &CellularCapabilityGSMTest::InvokeGetModemStatus));
264 EXPECT_CALL(*card_proxy_,
265 GetIMEI(_, _, CellularCapability::kTimeoutDefault))
266 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetIMEI));
267 EXPECT_CALL(*card_proxy_,
268 GetIMSI(_, _, CellularCapability::kTimeoutDefault))
269 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetIMSI));
270 EXPECT_CALL(*network_proxy_, AccessTechnology());
271 EXPECT_CALL(*card_proxy_, EnabledFacilityLocks());
272 EXPECT_CALL(*proxy_,
273 GetModemInfo(_, _, CellularCapability::kTimeoutDefault))
274 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetModemInfo));
275 EXPECT_CALL(*network_proxy_,
276 GetRegistrationInfo(_, _, CellularCapability::kTimeoutDefault));
277 EXPECT_CALL(*network_proxy_,
278 GetSignalQuality(_, _, CellularCapability::kTimeoutDefault));
279 EXPECT_CALL(*this, TestCallback(IsSuccess()));
280 }
281
Darin Petkovb05315f2011-11-07 10:14:25 +0100282 NiceMockControl control_;
283 EventDispatcher dispatcher_;
Thieu Le3426c8f2012-01-11 17:35:11 -0800284 MockMetrics metrics_;
Darin Petkovb05315f2011-11-07 10:14:25 +0100285 CellularRefPtr cellular_;
Thieu Le923006b2012-04-05 16:32:58 -0700286 scoped_ptr<MockModemProxy> proxy_;
287 scoped_ptr<MockModemSimpleProxy> simple_proxy_;
Darin Petkovcb547732011-11-09 13:55:26 +0100288 scoped_ptr<MockModemGSMCardProxy> card_proxy_;
Darin Petkov3e509242011-11-10 14:46:44 +0100289 scoped_ptr<MockModemGSMNetworkProxy> network_proxy_;
Thieu Le923006b2012-04-05 16:32:58 -0700290 TestProxyFactory proxy_factory_;
Darin Petkov721ac932011-11-16 15:43:09 +0100291 CellularCapabilityGSM *capability_; // Owned by |cellular_|.
Darin Petkov3cfbf212011-11-21 16:02:09 +0100292 NiceMock<DeviceMockAdaptor> *device_adaptor_; // Owned by |cellular_|.
Darin Petkov1272a432011-11-10 15:53:37 +0100293 mobile_provider_db *provider_db_;
Darin Petkovb05315f2011-11-07 10:14:25 +0100294};
295
Darin Petkov31332412012-01-28 01:50:02 +0100296const char CellularCapabilityGSMTest::kAddress[] = "1122334455";
Darin Petkov1272a432011-11-10 15:53:37 +0100297const char CellularCapabilityGSMTest::kTestMobileProviderDBPath[] =
298 "provider_db_unittest.bfd";
Darin Petkovcb547732011-11-09 13:55:26 +0100299const char CellularCapabilityGSMTest::kTestCarrier[] = "The Cellular Carrier";
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500300const char CellularCapabilityGSMTest::kTestNetwork[] = "310555";
Darin Petkovb05315f2011-11-07 10:14:25 +0100301const char CellularCapabilityGSMTest::kPIN[] = "9876";
302const char CellularCapabilityGSMTest::kPUK[] = "8765";
Darin Petkovcb547732011-11-09 13:55:26 +0100303const char CellularCapabilityGSMTest::kIMEI[] = "987654321098765";
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100304const char CellularCapabilityGSMTest::kIMSI[] = "310150123456789";
Darin Petkovcb547732011-11-09 13:55:26 +0100305const char CellularCapabilityGSMTest::kMSISDN[] = "12345678901";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500306const char CellularCapabilityGSMTest::kScanID0[] = "123";
307const char CellularCapabilityGSMTest::kScanID1[] = "456";
308const int CellularCapabilityGSMTest::kStrength = 80;
Darin Petkovcb547732011-11-09 13:55:26 +0100309
Darin Petkov721ac932011-11-16 15:43:09 +0100310TEST_F(CellularCapabilityGSMTest, PropertyStore) {
311 EXPECT_TRUE(cellular_->store().Contains(flimflam::kSIMLockStatusProperty));
312}
313
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500314TEST_F(CellularCapabilityGSMTest, GetIMEI) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500315 EXPECT_CALL(*card_proxy_, GetIMEI(_, _, CellularCapability::kTimeoutDefault))
316 .WillOnce(Invoke(this,
317 &CellularCapabilityGSMTest::InvokeGetIMEI));
318 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100319 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500320 ASSERT_TRUE(capability_->imei_.empty());
321 capability_->GetIMEI(Bind(&CellularCapabilityGSMTest::TestCallback,
322 Unretained(this)));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500323 EXPECT_EQ(kIMEI, capability_->imei_);
324}
325
326TEST_F(CellularCapabilityGSMTest, GetIMSI) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500327 EXPECT_CALL(*card_proxy_, GetIMSI(_, _, CellularCapability::kTimeoutDefault))
328 .WillOnce(Invoke(this,
329 &CellularCapabilityGSMTest::InvokeGetIMSI))
330 .WillOnce(Invoke(this,
331 &CellularCapabilityGSMTest::InvokeGetIMSI2));
332 EXPECT_CALL(*this, TestCallback(IsSuccess())).Times(2);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500333 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500334 ResultCallback callback = Bind(&CellularCapabilityGSMTest::TestCallback,
335 Unretained(this));
336 ASSERT_TRUE(capability_->imsi_.empty());
337 capability_->GetIMSI(callback);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500338 EXPECT_EQ(kIMSI, capability_->imsi_);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500339 capability_->imsi_.clear();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100340 InitProviderDB();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500341 capability_->GetIMSI(callback);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500342 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
343}
344
345TEST_F(CellularCapabilityGSMTest, GetMSISDN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500346 EXPECT_CALL(*card_proxy_, GetMSISDN(_, _,
347 CellularCapability::kTimeoutDefault))
348 .WillOnce(Invoke(this,
349 &CellularCapabilityGSMTest::InvokeGetMSISDN));
350 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500351 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500352 ASSERT_TRUE(capability_->mdn_.empty());
353 capability_->GetMSISDN(Bind(&CellularCapabilityGSMTest::TestCallback,
354 Unretained(this)));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500355 EXPECT_EQ(kMSISDN, capability_->mdn_);
356}
357
358TEST_F(CellularCapabilityGSMTest, GetSPN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500359 EXPECT_CALL(*card_proxy_, GetSPN(_, _, CellularCapability::kTimeoutDefault))
360 .WillOnce(Invoke(this,
361 &CellularCapabilityGSMTest::InvokeGetSPN));
362 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500363 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500364 ASSERT_TRUE(capability_->spn_.empty());
365 capability_->GetSPN(Bind(&CellularCapabilityGSMTest::TestCallback,
366 Unretained(this)));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500367 EXPECT_EQ(kTestCarrier, capability_->spn_);
Darin Petkovcb547732011-11-09 13:55:26 +0100368}
Darin Petkovb05315f2011-11-07 10:14:25 +0100369
Darin Petkov3e509242011-11-10 14:46:44 +0100370TEST_F(CellularCapabilityGSMTest, GetSignalQuality) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500371 EXPECT_CALL(*network_proxy_,
372 GetSignalQuality(_, _, CellularCapability::kTimeoutDefault))
373 .WillOnce(Invoke(this,
374 &CellularCapabilityGSMTest::InvokeGetSignalQuality));
Darin Petkov3e509242011-11-10 14:46:44 +0100375 SetNetworkProxy();
376 SetService();
377 EXPECT_EQ(0, cellular_->service()->strength());
Darin Petkov721ac932011-11-16 15:43:09 +0100378 capability_->GetSignalQuality();
Darin Petkov3e509242011-11-10 14:46:44 +0100379 EXPECT_EQ(kStrength, cellular_->service()->strength());
380}
381
Darin Petkov184c54e2011-11-15 12:44:39 +0100382TEST_F(CellularCapabilityGSMTest, RegisterOnNetwork) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500383 EXPECT_CALL(*network_proxy_, Register(kTestNetwork, _, _,
384 CellularCapability::kTimeoutRegister))
385 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeRegister));
386 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkov184c54e2011-11-15 12:44:39 +0100387 SetNetworkProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500388 Error error;
389 capability_->RegisterOnNetwork(kTestNetwork, &error,
390 Bind(&CellularCapabilityGSMTest::TestCallback,
391 Unretained(this)));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500392 EXPECT_EQ(kTestNetwork, capability_->selected_network_);
Darin Petkov184c54e2011-11-15 12:44:39 +0100393}
394
Darin Petkovb72cf402011-11-22 14:51:39 +0100395TEST_F(CellularCapabilityGSMTest, IsRegistered) {
396 EXPECT_FALSE(capability_->IsRegistered());
397 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE);
398 EXPECT_FALSE(capability_->IsRegistered());
399 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
400 EXPECT_TRUE(capability_->IsRegistered());
401 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING);
402 EXPECT_FALSE(capability_->IsRegistered());
403 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED);
404 EXPECT_FALSE(capability_->IsRegistered());
405 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN);
406 EXPECT_FALSE(capability_->IsRegistered());
407 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING);
408 EXPECT_TRUE(capability_->IsRegistered());
409}
410
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500411TEST_F(CellularCapabilityGSMTest, GetRegistrationState) {
412 ASSERT_FALSE(capability_->IsRegistered());
413 EXPECT_CALL(*network_proxy_,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500414 GetRegistrationInfo(_, _, CellularCapability::kTimeoutDefault))
415 .WillOnce(Invoke(this,
416 &CellularCapabilityGSMTest::InvokeGetRegistrationInfo));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500417 SetNetworkProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500418 capability_->GetRegistrationState();
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500419 EXPECT_TRUE(capability_->IsRegistered());
420 EXPECT_EQ(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME,
421 capability_->registration_state_);
422}
423
Darin Petkovb05315f2011-11-07 10:14:25 +0100424TEST_F(CellularCapabilityGSMTest, RequirePIN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500425 EXPECT_CALL(*card_proxy_, EnablePIN(kPIN, true, _, _,
426 CellularCapability::kTimeoutDefault))
427 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeEnablePIN));
428 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100429 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500430 Error error;
431 capability_->RequirePIN(kPIN, true, &error,
432 Bind(&CellularCapabilityGSMTest::TestCallback,
433 Unretained(this)));
434 EXPECT_TRUE(error.IsSuccess());
Darin Petkovb05315f2011-11-07 10:14:25 +0100435}
436
437TEST_F(CellularCapabilityGSMTest, EnterPIN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500438 EXPECT_CALL(*card_proxy_, SendPIN(kPIN, _, _,
439 CellularCapability::kTimeoutDefault))
440 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeSendPIN));
441 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100442 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500443 Error error;
444 capability_->EnterPIN(kPIN, &error,
445 Bind(&CellularCapabilityGSMTest::TestCallback,
446 Unretained(this)));
447 EXPECT_TRUE(error.IsSuccess());
Darin Petkovb05315f2011-11-07 10:14:25 +0100448}
449
450TEST_F(CellularCapabilityGSMTest, UnblockPIN) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500451 EXPECT_CALL(*card_proxy_, SendPUK(kPUK, kPIN, _, _,
452 CellularCapability::kTimeoutDefault))
453 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeSendPUK));
454 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100455 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500456 Error error;
457 capability_->UnblockPIN(kPUK, kPIN, &error,
458 Bind(&CellularCapabilityGSMTest::TestCallback,
459 Unretained(this)));
460 EXPECT_TRUE(error.IsSuccess());
Darin Petkovb05315f2011-11-07 10:14:25 +0100461}
462
463TEST_F(CellularCapabilityGSMTest, ChangePIN) {
464 static const char kOldPIN[] = "1111";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500465 EXPECT_CALL(*card_proxy_, ChangePIN(kOldPIN, kPIN, _, _,
466 CellularCapability::kTimeoutDefault))
467 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeChangePIN));
468 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkovcb547732011-11-09 13:55:26 +0100469 SetCardProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500470 Error error;
471 capability_->ChangePIN(kOldPIN, kPIN, &error,
472 Bind(&CellularCapabilityGSMTest::TestCallback,
473 Unretained(this)));
474 EXPECT_TRUE(error.IsSuccess());
Darin Petkovb05315f2011-11-07 10:14:25 +0100475}
476
Darin Petkovb7828b02012-02-03 12:34:30 +0100477namespace {
478
479MATCHER(SizeIs2, "") {
480 return arg.size() == 2;
481}
482
483} // namespace
484
Darin Petkov1272a432011-11-10 15:53:37 +0100485TEST_F(CellularCapabilityGSMTest, Scan) {
Darin Petkov1272a432011-11-10 15:53:37 +0100486 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500487 EXPECT_CALL(*network_proxy_, Scan(_, _, CellularCapability::kTimeoutScan))
488 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeScan));
489 EXPECT_CALL(*this, TestCallback(IsSuccess()));
Darin Petkov721ac932011-11-16 15:43:09 +0100490 capability_->found_networks_.resize(3, Stringmap());
Darin Petkovb7828b02012-02-03 12:34:30 +0100491 EXPECT_CALL(*device_adaptor_,
492 EmitStringmapsChanged(flimflam::kFoundNetworksProperty,
493 SizeIs2()));
Eric Shienbrood9a245532012-03-07 14:20:39 -0500494 SetNetworkProxy();
495 capability_->Scan(&error, Bind(&CellularCapabilityGSMTest::TestCallback,
496 Unretained(this)));
497 EXPECT_TRUE(error.IsSuccess());
Darin Petkov721ac932011-11-16 15:43:09 +0100498 EXPECT_EQ(2, capability_->found_networks_.size());
Eric Shienbrood9a245532012-03-07 14:20:39 -0500499 EXPECT_EQ(kScanID0,
Darin Petkov721ac932011-11-16 15:43:09 +0100500 capability_->found_networks_[0][flimflam::kNetworkIdProperty]);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500501 EXPECT_EQ(kScanID1,
Darin Petkov721ac932011-11-16 15:43:09 +0100502 capability_->found_networks_[1][flimflam::kNetworkIdProperty]);
Darin Petkov1272a432011-11-10 15:53:37 +0100503}
504
505TEST_F(CellularCapabilityGSMTest, ParseScanResult) {
506 static const char kID[] = "123";
507 static const char kLongName[] = "long name";
508 static const char kShortName[] = "short name";
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500509 GSMScanResult result;
Darin Petkov1272a432011-11-10 15:53:37 +0100510 result[CellularCapabilityGSM::kNetworkPropertyStatus] = "1";
511 result[CellularCapabilityGSM::kNetworkPropertyID] = kID;
512 result[CellularCapabilityGSM::kNetworkPropertyLongName] = kLongName;
513 result[CellularCapabilityGSM::kNetworkPropertyShortName] = kShortName;
514 result[CellularCapabilityGSM::kNetworkPropertyAccessTechnology] = "3";
515 result["unknown property"] = "random value";
Darin Petkov721ac932011-11-16 15:43:09 +0100516 Stringmap parsed = capability_->ParseScanResult(result);
Darin Petkov1272a432011-11-10 15:53:37 +0100517 EXPECT_EQ(5, parsed.size());
518 EXPECT_EQ("available", parsed[flimflam::kStatusProperty]);
519 EXPECT_EQ(kID, parsed[flimflam::kNetworkIdProperty]);
520 EXPECT_EQ(kLongName, parsed[flimflam::kLongNameProperty]);
521 EXPECT_EQ(kShortName, parsed[flimflam::kShortNameProperty]);
522 EXPECT_EQ(flimflam::kNetworkTechnologyEdge,
523 parsed[flimflam::kTechnologyProperty]);
524}
525
526TEST_F(CellularCapabilityGSMTest, ParseScanResultProviderLookup) {
527 InitProviderDB();
528 static const char kID[] = "310210";
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500529 GSMScanResult result;
Darin Petkov1272a432011-11-10 15:53:37 +0100530 result[CellularCapabilityGSM::kNetworkPropertyID] = kID;
Darin Petkov721ac932011-11-16 15:43:09 +0100531 Stringmap parsed = capability_->ParseScanResult(result);
Darin Petkov1272a432011-11-10 15:53:37 +0100532 EXPECT_EQ(2, parsed.size());
533 EXPECT_EQ(kID, parsed[flimflam::kNetworkIdProperty]);
534 EXPECT_EQ("T-Mobile", parsed[flimflam::kLongNameProperty]);
535}
536
Darin Petkovae0c64e2011-11-15 15:50:27 +0100537TEST_F(CellularCapabilityGSMTest, SetAccessTechnology) {
Darin Petkov721ac932011-11-16 15:43:09 +0100538 capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
539 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GSM, capability_->access_technology_);
Darin Petkovae0c64e2011-11-15 15:50:27 +0100540 SetService();
Darin Petkovb72cf402011-11-22 14:51:39 +0100541 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100542 capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GPRS);
543 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GPRS, capability_->access_technology_);
Darin Petkovae0c64e2011-11-15 15:50:27 +0100544 EXPECT_EQ(flimflam::kNetworkTechnologyGprs,
Darin Petkovb72cf402011-11-22 14:51:39 +0100545 cellular_->service()->network_technology());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100546}
547
548TEST_F(CellularCapabilityGSMTest, UpdateOperatorInfo) {
549 static const char kOperatorName[] = "Swisscom";
550 InitProviderDB();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100551 capability_->serving_operator_.SetCode("22801");
Darin Petkovae0c64e2011-11-15 15:50:27 +0100552 SetService();
Darin Petkov721ac932011-11-16 15:43:09 +0100553 capability_->UpdateOperatorInfo();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100554 EXPECT_EQ(kOperatorName, capability_->serving_operator_.GetName());
555 EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100556 EXPECT_EQ(kOperatorName, cellular_->service()->serving_operator().GetName());
557}
558
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100559TEST_F(CellularCapabilityGSMTest, UpdateStatus) {
560 InitProviderDB();
561 DBusPropertiesMap props;
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500562 capability_->imsi_ = "310240123456789";
563 props[CellularCapability::kPropertyIMSI].writer().append_string("");
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100564 capability_->UpdateStatus(props);
565 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
566}
567
568TEST_F(CellularCapabilityGSMTest, SetHomeProvider) {
569 static const char kCountry[] = "us";
570 static const char kCode[] = "310160";
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500571 capability_->imsi_ = "310240123456789";
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100572
573 capability_->SetHomeProvider(); // No mobile provider DB available.
574 EXPECT_TRUE(cellular_->home_provider().GetName().empty());
575 EXPECT_TRUE(cellular_->home_provider().GetCountry().empty());
576 EXPECT_TRUE(cellular_->home_provider().GetCode().empty());
577
578 InitProviderDB();
579 capability_->SetHomeProvider();
580 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
581 EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
582 EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
Darin Petkov3cfbf212011-11-21 16:02:09 +0100583 EXPECT_EQ(4, capability_->apn_list_.size());
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100584
585 Cellular::Operator oper;
586 cellular_->set_home_provider(oper);
587 capability_->spn_ = kTestCarrier;
588 capability_->SetHomeProvider();
589 EXPECT_EQ(kTestCarrier, cellular_->home_provider().GetName());
590 EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
591 EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
592}
593
Darin Petkov3cfbf212011-11-21 16:02:09 +0100594namespace {
595
596MATCHER(SizeIs4, "") {
597 return arg.size() == 4;
598}
599
600} // namespace
601
602TEST_F(CellularCapabilityGSMTest, InitAPNList) {
603 InitProviderDB();
604 capability_->home_provider_ =
605 mobile_provider_lookup_by_name(cellular_->provider_db(), "T-Mobile");
606 ASSERT_TRUE(capability_->home_provider_);
607 EXPECT_EQ(0, capability_->apn_list_.size());
608 EXPECT_CALL(*device_adaptor_,
609 EmitStringmapsChanged(flimflam::kCellularApnListProperty,
610 SizeIs4()));
611 capability_->InitAPNList();
612 EXPECT_EQ(4, capability_->apn_list_.size());
613 EXPECT_EQ("wap.voicestream.com",
614 capability_->apn_list_[1][flimflam::kApnProperty]);
615 EXPECT_EQ("Web2Go/t-zones",
616 capability_->apn_list_[1][flimflam::kApnNameProperty]);
617}
618
Darin Petkov20c13ec2011-11-09 15:07:15 +0100619TEST_F(CellularCapabilityGSMTest, GetNetworkTechnologyString) {
Darin Petkov721ac932011-11-16 15:43:09 +0100620 EXPECT_EQ("", capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100621 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
Darin Petkov20c13ec2011-11-09 15:07:15 +0100622 EXPECT_EQ(flimflam::kNetworkTechnologyGsm,
Darin Petkov721ac932011-11-16 15:43:09 +0100623 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100624 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM_COMPACT);
625 EXPECT_EQ(flimflam::kNetworkTechnologyGsm,
Darin Petkov721ac932011-11-16 15:43:09 +0100626 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100627 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GPRS);
628 EXPECT_EQ(flimflam::kNetworkTechnologyGprs,
Darin Petkov721ac932011-11-16 15:43:09 +0100629 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100630 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_EDGE);
631 EXPECT_EQ(flimflam::kNetworkTechnologyEdge,
Darin Petkov721ac932011-11-16 15:43:09 +0100632 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100633 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_UMTS);
634 EXPECT_EQ(flimflam::kNetworkTechnologyUmts,
Darin Petkov721ac932011-11-16 15:43:09 +0100635 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100636 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSDPA);
637 EXPECT_EQ(flimflam::kNetworkTechnologyHspa,
Darin Petkov721ac932011-11-16 15:43:09 +0100638 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100639 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSUPA);
640 EXPECT_EQ(flimflam::kNetworkTechnologyHspa,
Darin Petkov721ac932011-11-16 15:43:09 +0100641 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100642 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSPA);
643 EXPECT_EQ(flimflam::kNetworkTechnologyHspa,
Darin Petkov721ac932011-11-16 15:43:09 +0100644 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100645 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS);
646 EXPECT_EQ(flimflam::kNetworkTechnologyHspaPlus,
Darin Petkov721ac932011-11-16 15:43:09 +0100647 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100648}
649
650TEST_F(CellularCapabilityGSMTest, GetRoamingStateString) {
651 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100652 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100653 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
654 EXPECT_EQ(flimflam::kRoamingStateHome,
Darin Petkov721ac932011-11-16 15:43:09 +0100655 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100656 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING);
657 EXPECT_EQ(flimflam::kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100658 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100659 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING);
660 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100661 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100662 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED);
663 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100664 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100665 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE);
666 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100667 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100668}
669
Darin Petkovac635a82012-01-10 16:51:58 +0100670TEST_F(CellularCapabilityGSMTest, CreateFriendlyServiceName) {
671 CellularCapabilityGSM::friendly_service_name_id_ = 0;
672 EXPECT_EQ("GSMNetwork0", capability_->CreateFriendlyServiceName());
673 EXPECT_EQ("GSMNetwork1", capability_->CreateFriendlyServiceName());
674 capability_->serving_operator_.SetCode("1234");
675 EXPECT_EQ("cellular_1234", capability_->CreateFriendlyServiceName());
676 static const char kTestCarrier[] = "A GSM Carrier";
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500677 capability_->carrier_ = kTestCarrier;
Darin Petkovac635a82012-01-10 16:51:58 +0100678 EXPECT_EQ(kTestCarrier, capability_->CreateFriendlyServiceName());
679 static const char kTestOperator[] = "A GSM Operator";
680 capability_->serving_operator_.SetName(kTestOperator);
681 EXPECT_EQ(kTestOperator, capability_->CreateFriendlyServiceName());
682 static const char kHomeProvider[] = "The GSM Home Provider";
683 cellular_->home_provider_.SetName(kHomeProvider);
684 EXPECT_EQ(kTestOperator, capability_->CreateFriendlyServiceName());
685 capability_->registration_state_ = MM_MODEM_GSM_NETWORK_REG_STATUS_HOME;
686 EXPECT_EQ(kHomeProvider, capability_->CreateFriendlyServiceName());
687}
688
Darin Petkov31332412012-01-28 01:50:02 +0100689TEST_F(CellularCapabilityGSMTest, SetStorageIdentifier) {
690 SetService();
691 capability_->OnServiceCreated();
Darin Petkovdd3e8662012-02-03 13:16:20 +0100692 EXPECT_EQ(string(flimflam::kTypeCellular) + "_" + kAddress + "_" +
Darin Petkov31332412012-01-28 01:50:02 +0100693 cellular_->service()->friendly_name(),
694 cellular_->service()->GetStorageIdentifier());
695 capability_->imsi_ = kIMSI;
696 capability_->OnServiceCreated();
Darin Petkovdd3e8662012-02-03 13:16:20 +0100697 EXPECT_EQ(string(flimflam::kTypeCellular) + "_" + kAddress + "_" + kIMSI,
Darin Petkov31332412012-01-28 01:50:02 +0100698 cellular_->service()->GetStorageIdentifier());
699}
700
Darin Petkov63138a92012-02-06 14:09:15 +0100701TEST_F(CellularCapabilityGSMTest, OnModemManagerPropertiesChanged) {
702 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_UNKNOWN, capability_->access_technology_);
703 EXPECT_FALSE(capability_->sim_lock_status_.enabled);
704 EXPECT_EQ("", capability_->sim_lock_status_.lock_type);
705 EXPECT_EQ(0, capability_->sim_lock_status_.retries_left);
706 DBusPropertiesMap props;
707 static const char kLockType[] = "sim-pin";
708 const int kRetries = 3;
709 props[CellularCapabilityGSM::kPropertyAccessTechnology].writer().
710 append_uint32(MM_MODEM_GSM_ACCESS_TECH_EDGE);
711 props[CellularCapabilityGSM::kPropertyEnabledFacilityLocks].writer().
712 append_uint32(MM_MODEM_GSM_FACILITY_SIM);
713 props[CellularCapabilityGSM::kPropertyUnlockRequired].writer().append_string(
714 kLockType);
715 props[CellularCapabilityGSM::kPropertyUnlockRetries].writer().append_uint32(
716 kRetries);
717 EXPECT_CALL(*device_adaptor_,
718 EmitKeyValueStoreChanged(flimflam::kSIMLockStatusProperty, _));
719 capability_->OnModemManagerPropertiesChanged(props);
720 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_EDGE, capability_->access_technology_);
721 EXPECT_TRUE(capability_->sim_lock_status_.enabled);
722 EXPECT_EQ(kLockType, capability_->sim_lock_status_.lock_type);
723 EXPECT_EQ(kRetries, capability_->sim_lock_status_.retries_left);
724}
725
Eric Shienbrood30bc0ec2012-03-21 18:19:46 -0400726TEST_F(CellularCapabilityGSMTest, SetupApnTryList) {
727 static const string kTmobileApn("epc.tmobile.com");
728 static const string kLastGoodApn("remembered.apn");
729 static const string kLastGoodUsername("remembered.user");
730 static const string kSuppliedApn("my.apn");
731
732 SetService();
733 capability_->imsi_ = "310240123456789";
734 InitProviderDB();
735 capability_->SetHomeProvider();
736 DBusPropertiesMap props;
737 capability_->SetupConnectProperties(&props);
738 EXPECT_FALSE(props.find(flimflam::kApnProperty) == props.end());
739 EXPECT_EQ(kTmobileApn, props[flimflam::kApnProperty].reader().get_string());
740
741 ProfileRefPtr profile(new NiceMock<MockProfile>(
742 &control_, reinterpret_cast<Manager *>(NULL)));
743 cellular_->service()->set_profile(profile);
744 Stringmap apn_info;
745 apn_info[flimflam::kApnProperty] = kLastGoodApn;
746 apn_info[flimflam::kApnUsernameProperty] = kLastGoodUsername;
747 cellular_->service()->SetLastGoodApn(apn_info);
748 props.clear();
749 EXPECT_TRUE(props.find(flimflam::kApnProperty) == props.end());
750 capability_->SetupConnectProperties(&props);
751 // We expect the list to contain the last good APN, plus
752 // the 4 APNs from the mobile provider info database.
753 EXPECT_EQ(5, capability_->apn_try_list_.size());
754 EXPECT_FALSE(props.find(flimflam::kApnProperty) == props.end());
755 EXPECT_EQ(kLastGoodApn, props[flimflam::kApnProperty].reader().get_string());
756 EXPECT_FALSE(props.find(flimflam::kApnUsernameProperty) == props.end());
757 EXPECT_EQ(kLastGoodUsername,
758 props[flimflam::kApnUsernameProperty].reader().get_string());
759
760 Error error;
761 apn_info.clear();
762 props.clear();
763 apn_info[flimflam::kApnProperty] = kSuppliedApn;
764 // Setting the APN has the side effect of clearing the LastGoodApn,
765 // so the try list will have 5 elements, with the first one being
766 // the supplied APN.
767 cellular_->service()->SetApn(apn_info, &error);
768 EXPECT_TRUE(props.find(flimflam::kApnProperty) == props.end());
769 capability_->SetupConnectProperties(&props);
770 EXPECT_EQ(5, capability_->apn_try_list_.size());
771 EXPECT_FALSE(props.find(flimflam::kApnProperty) == props.end());
772 EXPECT_EQ(kSuppliedApn, props[flimflam::kApnProperty].reader().get_string());
773
774 apn_info.clear();
775 props.clear();
776 apn_info[flimflam::kApnProperty] = kLastGoodApn;
777 apn_info[flimflam::kApnUsernameProperty] = kLastGoodUsername;
778 // Now when LastGoodAPN is set, it will be the one selected.
779 cellular_->service()->SetLastGoodApn(apn_info);
780 EXPECT_TRUE(props.find(flimflam::kApnProperty) == props.end());
781 capability_->SetupConnectProperties(&props);
782 // We expect the list to contain the last good APN, plus
783 // the user-supplied APN, plus the 4 APNs from the mobile
784 // provider info database.
785 EXPECT_EQ(6, capability_->apn_try_list_.size());
786 EXPECT_FALSE(props.find(flimflam::kApnProperty) == props.end());
787 EXPECT_EQ(kLastGoodApn, props[flimflam::kApnProperty].reader().get_string());
788 EXPECT_FALSE(props.find(flimflam::kApnUsernameProperty) == props.end());
789 EXPECT_EQ(kLastGoodUsername,
790 props[flimflam::kApnUsernameProperty].reader().get_string());
791}
792
Thieu Le923006b2012-04-05 16:32:58 -0700793TEST_F(CellularCapabilityGSMTest, StartModemSuccess) {
794 SetupCommonStartModemExpectations();
795 EXPECT_CALL(*card_proxy_,
796 GetSPN(_, _, CellularCapability::kTimeoutDefault))
797 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetSPN));
798 EXPECT_CALL(*card_proxy_,
799 GetMSISDN(_, _, CellularCapability::kTimeoutDefault))
800 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetMSISDN));
801 SetProxyFactory();
802
803 Error error;
804 capability_->StartModem(
805 &error, Bind(&CellularCapabilityGSMTest::TestCallback, Unretained(this)));
806 dispatcher_.DispatchPendingEvents();
807}
808
809TEST_F(CellularCapabilityGSMTest, StartModemGetSPNFail) {
810 SetupCommonStartModemExpectations();
811 EXPECT_CALL(*card_proxy_,
812 GetSPN(_, _, CellularCapability::kTimeoutDefault))
813 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetSPNFail));
814 EXPECT_CALL(*card_proxy_,
815 GetMSISDN(_, _, CellularCapability::kTimeoutDefault))
816 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetMSISDN));
817 SetProxyFactory();
818
819 Error error;
820 capability_->StartModem(
821 &error, Bind(&CellularCapabilityGSMTest::TestCallback, Unretained(this)));
822 dispatcher_.DispatchPendingEvents();
823}
824
825TEST_F(CellularCapabilityGSMTest, StartModemGetMSISDNFail) {
826 SetupCommonStartModemExpectations();
827 EXPECT_CALL(*card_proxy_,
828 GetSPN(_, _, CellularCapability::kTimeoutDefault))
829 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetSPN));
830 EXPECT_CALL(*card_proxy_,
831 GetMSISDN(_, _, CellularCapability::kTimeoutDefault))
832 .WillOnce(Invoke(this, &CellularCapabilityGSMTest::InvokeGetMSISDNFail));
833 SetProxyFactory();
834
835 Error error;
836 capability_->StartModem(
837 &error, Bind(&CellularCapabilityGSMTest::TestCallback, Unretained(this)));
838 dispatcher_.DispatchPendingEvents();
839}
840
Darin Petkovb05315f2011-11-07 10:14:25 +0100841} // namespace shill