blob: 831a1ec7d5b0e086d3bd146636a580926eb7829b [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
Darin Petkov20c13ec2011-11-09 15:07:15 +01007#include <chromeos/dbus/service_constants.h>
Darin Petkovb05315f2011-11-07 10:14:25 +01008#include <gtest/gtest.h>
Darin Petkov20c13ec2011-11-09 15:07:15 +01009#include <mm/mm-modem.h>
Darin Petkov1272a432011-11-10 15:53:37 +010010#include <mobile_provider.h>
Darin Petkovb05315f2011-11-07 10:14:25 +010011
12#include "shill/cellular.h"
Darin Petkov3e509242011-11-10 14:46:44 +010013#include "shill/cellular_service.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010014#include "shill/error.h"
15#include "shill/event_dispatcher.h"
Darin Petkov3cfbf212011-11-21 16:02:09 +010016#include "shill/mock_adaptors.h"
Thieu Le3426c8f2012-01-11 17:35:11 -080017#include "shill/mock_metrics.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010018#include "shill/mock_modem_gsm_card_proxy.h"
Darin Petkov3e509242011-11-10 14:46:44 +010019#include "shill/mock_modem_gsm_network_proxy.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010020#include "shill/nice_mock_control.h"
21
Darin Petkove5bc2cb2011-12-07 14:47:32 +010022using testing::_;
Darin Petkov3cfbf212011-11-21 16:02:09 +010023using testing::NiceMock;
Darin Petkovcb547732011-11-09 13:55:26 +010024using testing::Return;
25
Darin Petkovb05315f2011-11-07 10:14:25 +010026namespace shill {
27
28class CellularCapabilityGSMTest : public testing::Test {
29 public:
30 CellularCapabilityGSMTest()
31 : cellular_(new Cellular(&control_,
32 &dispatcher_,
Thieu Le3426c8f2012-01-11 17:35:11 -080033 &metrics_,
Darin Petkovb05315f2011-11-07 10:14:25 +010034 NULL,
35 "",
36 "",
37 0,
38 Cellular::kTypeGSM,
39 "",
40 "",
41 NULL)),
Darin Petkovcb547732011-11-09 13:55:26 +010042 card_proxy_(new MockModemGSMCardProxy()),
Darin Petkov3e509242011-11-10 14:46:44 +010043 network_proxy_(new MockModemGSMNetworkProxy()),
Darin Petkov721ac932011-11-16 15:43:09 +010044 capability_(NULL),
Darin Petkov3cfbf212011-11-21 16:02:09 +010045 device_adaptor_(NULL),
Darin Petkov1272a432011-11-10 15:53:37 +010046 provider_db_(NULL) {}
Darin Petkovb05315f2011-11-07 10:14:25 +010047
Darin Petkov3e509242011-11-10 14:46:44 +010048 virtual ~CellularCapabilityGSMTest() {
49 cellular_->service_ = NULL;
Darin Petkov1272a432011-11-10 15:53:37 +010050 mobile_provider_close_db(provider_db_);
51 provider_db_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010052 capability_ = NULL;
Darin Petkov3cfbf212011-11-21 16:02:09 +010053 device_adaptor_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010054 }
55
56 virtual void SetUp() {
57 capability_ =
58 dynamic_cast<CellularCapabilityGSM *>(cellular_->capability_.get());
Darin Petkov3cfbf212011-11-21 16:02:09 +010059 device_adaptor_ =
60 dynamic_cast<NiceMock<DeviceMockAdaptor> *>(cellular_->adaptor());
Darin Petkov3e509242011-11-10 14:46:44 +010061 }
62
Darin Petkovb05315f2011-11-07 10:14:25 +010063 protected:
Darin Petkov1272a432011-11-10 15:53:37 +010064 static const char kTestMobileProviderDBPath[];
Darin Petkovcb547732011-11-09 13:55:26 +010065 static const char kTestCarrier[];
Darin Petkovb05315f2011-11-07 10:14:25 +010066 static const char kPIN[];
67 static const char kPUK[];
Darin Petkovcb547732011-11-09 13:55:26 +010068 static const char kIMEI[];
69 static const char kIMSI[];
70 static const char kMSISDN[];
71
72 void SetCardProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +010073 capability_->card_proxy_.reset(card_proxy_.release());
Darin Petkovcb547732011-11-09 13:55:26 +010074 }
Darin Petkovb05315f2011-11-07 10:14:25 +010075
Darin Petkov1272a432011-11-10 15:53:37 +010076 void SetNetworkProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +010077 capability_->network_proxy_.reset(network_proxy_.release());
Darin Petkov1272a432011-11-10 15:53:37 +010078 }
79
Darin Petkov20c13ec2011-11-09 15:07:15 +010080 void SetAccessTechnology(uint32 technology) {
Darin Petkov721ac932011-11-16 15:43:09 +010081 capability_->access_technology_ = technology;
Darin Petkov20c13ec2011-11-09 15:07:15 +010082 }
83
84 void SetRegistrationState(uint32 state) {
Darin Petkov721ac932011-11-16 15:43:09 +010085 capability_->registration_state_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +010086 }
87
Darin Petkov3e509242011-11-10 14:46:44 +010088 void SetService() {
89 cellular_->service_ = new CellularService(
Thieu Le3426c8f2012-01-11 17:35:11 -080090 &control_, &dispatcher_, &metrics_, NULL, cellular_);
Darin Petkov3e509242011-11-10 14:46:44 +010091 }
92
Darin Petkov1272a432011-11-10 15:53:37 +010093 void InitProviderDB() {
94 provider_db_ = mobile_provider_open_db(kTestMobileProviderDBPath);
95 ASSERT_TRUE(provider_db_);
96 cellular_->provider_db_ = provider_db_;
97 }
98
Darin Petkovb05315f2011-11-07 10:14:25 +010099 NiceMockControl control_;
100 EventDispatcher dispatcher_;
Thieu Le3426c8f2012-01-11 17:35:11 -0800101 MockMetrics metrics_;
Darin Petkovb05315f2011-11-07 10:14:25 +0100102 CellularRefPtr cellular_;
Darin Petkovcb547732011-11-09 13:55:26 +0100103 scoped_ptr<MockModemGSMCardProxy> card_proxy_;
Darin Petkov3e509242011-11-10 14:46:44 +0100104 scoped_ptr<MockModemGSMNetworkProxy> network_proxy_;
Darin Petkov721ac932011-11-16 15:43:09 +0100105 CellularCapabilityGSM *capability_; // Owned by |cellular_|.
Darin Petkov3cfbf212011-11-21 16:02:09 +0100106 NiceMock<DeviceMockAdaptor> *device_adaptor_; // Owned by |cellular_|.
Darin Petkov1272a432011-11-10 15:53:37 +0100107 mobile_provider_db *provider_db_;
Darin Petkovb05315f2011-11-07 10:14:25 +0100108};
109
Darin Petkov1272a432011-11-10 15:53:37 +0100110const char CellularCapabilityGSMTest::kTestMobileProviderDBPath[] =
111 "provider_db_unittest.bfd";
Darin Petkovcb547732011-11-09 13:55:26 +0100112const char CellularCapabilityGSMTest::kTestCarrier[] = "The Cellular Carrier";
Darin Petkovb05315f2011-11-07 10:14:25 +0100113const char CellularCapabilityGSMTest::kPIN[] = "9876";
114const char CellularCapabilityGSMTest::kPUK[] = "8765";
Darin Petkovcb547732011-11-09 13:55:26 +0100115const char CellularCapabilityGSMTest::kIMEI[] = "987654321098765";
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100116const char CellularCapabilityGSMTest::kIMSI[] = "310150123456789";
Darin Petkovcb547732011-11-09 13:55:26 +0100117const char CellularCapabilityGSMTest::kMSISDN[] = "12345678901";
118
Darin Petkov721ac932011-11-16 15:43:09 +0100119TEST_F(CellularCapabilityGSMTest, PropertyStore) {
120 EXPECT_TRUE(cellular_->store().Contains(flimflam::kSIMLockStatusProperty));
121}
122
Darin Petkovcb547732011-11-09 13:55:26 +0100123TEST_F(CellularCapabilityGSMTest, GetIdentifiers) {
124 EXPECT_CALL(*card_proxy_, GetIMEI()).WillOnce(Return(kIMEI));
125 EXPECT_CALL(*card_proxy_, GetIMSI()).WillOnce(Return(kIMSI));
126 EXPECT_CALL(*card_proxy_, GetSPN()).WillOnce(Return(kTestCarrier));
127 EXPECT_CALL(*card_proxy_, GetMSISDN()).WillOnce(Return(kMSISDN));
128 SetCardProxy();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100129 InitProviderDB();
Darin Petkov721ac932011-11-16 15:43:09 +0100130 capability_->GetIdentifiers();
Darin Petkovcb547732011-11-09 13:55:26 +0100131 EXPECT_EQ(kIMEI, cellular_->imei());
132 EXPECT_EQ(kIMSI, cellular_->imsi());
Darin Petkov721ac932011-11-16 15:43:09 +0100133 EXPECT_EQ(kTestCarrier, capability_->spn());
Darin Petkovcb547732011-11-09 13:55:26 +0100134 EXPECT_EQ(kMSISDN, cellular_->mdn());
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100135 EXPECT_EQ(kTestCarrier, cellular_->home_provider().GetName());
136 EXPECT_EQ("us", cellular_->home_provider().GetCountry());
137 EXPECT_EQ("310038", cellular_->home_provider().GetCode());
Darin Petkov721ac932011-11-16 15:43:09 +0100138 capability_->GetIdentifiers();
Darin Petkovcb547732011-11-09 13:55:26 +0100139 EXPECT_EQ(kIMEI, cellular_->imei());
140 EXPECT_EQ(kIMSI, cellular_->imsi());
Darin Petkov721ac932011-11-16 15:43:09 +0100141 EXPECT_EQ(kTestCarrier, capability_->spn());
Darin Petkovcb547732011-11-09 13:55:26 +0100142 EXPECT_EQ(kMSISDN, cellular_->mdn());
143}
Darin Petkovb05315f2011-11-07 10:14:25 +0100144
Darin Petkov3e509242011-11-10 14:46:44 +0100145TEST_F(CellularCapabilityGSMTest, GetSignalQuality) {
146 const int kStrength = 80;
147 EXPECT_CALL(*network_proxy_, GetSignalQuality()).WillOnce(Return(kStrength));
148 SetNetworkProxy();
149 SetService();
150 EXPECT_EQ(0, cellular_->service()->strength());
Darin Petkov721ac932011-11-16 15:43:09 +0100151 capability_->GetSignalQuality();
Darin Petkov3e509242011-11-10 14:46:44 +0100152 EXPECT_EQ(kStrength, cellular_->service()->strength());
153}
154
Darin Petkov184c54e2011-11-15 12:44:39 +0100155TEST_F(CellularCapabilityGSMTest, RegisterOnNetwork) {
156 Error error;
Darin Petkov3cfbf212011-11-21 16:02:09 +0100157 EXPECT_CALL(*network_proxy_, Register(kTestCarrier));
Darin Petkov721ac932011-11-16 15:43:09 +0100158 capability_->RegisterOnNetwork(kTestCarrier, &error);
Darin Petkov184c54e2011-11-15 12:44:39 +0100159 EXPECT_TRUE(error.IsSuccess());
160 SetNetworkProxy();
161 dispatcher_.DispatchPendingEvents();
Darin Petkov721ac932011-11-16 15:43:09 +0100162 EXPECT_EQ(kTestCarrier, capability_->selected_network_);
Darin Petkov184c54e2011-11-15 12:44:39 +0100163}
164
Darin Petkovb72cf402011-11-22 14:51:39 +0100165TEST_F(CellularCapabilityGSMTest, IsRegistered) {
166 EXPECT_FALSE(capability_->IsRegistered());
167 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE);
168 EXPECT_FALSE(capability_->IsRegistered());
169 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
170 EXPECT_TRUE(capability_->IsRegistered());
171 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING);
172 EXPECT_FALSE(capability_->IsRegistered());
173 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED);
174 EXPECT_FALSE(capability_->IsRegistered());
175 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN);
176 EXPECT_FALSE(capability_->IsRegistered());
177 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING);
178 EXPECT_TRUE(capability_->IsRegistered());
179}
180
Darin Petkovb05315f2011-11-07 10:14:25 +0100181TEST_F(CellularCapabilityGSMTest, RequirePIN) {
Darin Petkov3cfbf212011-11-21 16:02:09 +0100182 EXPECT_CALL(*card_proxy_, EnablePIN(kPIN, true));
Darin Petkovc64fe5e2012-01-11 12:46:13 +0100183 MockReturner returner;
184 EXPECT_CALL(returner, Return());
185 EXPECT_CALL(returner, ReturnError(_)).Times(0);
186 capability_->RequirePIN(kPIN, true, &returner);
Darin Petkovcb547732011-11-09 13:55:26 +0100187 SetCardProxy();
Darin Petkovb05315f2011-11-07 10:14:25 +0100188 dispatcher_.DispatchPendingEvents();
189}
190
191TEST_F(CellularCapabilityGSMTest, EnterPIN) {
Darin Petkov3cfbf212011-11-21 16:02:09 +0100192 EXPECT_CALL(*card_proxy_, SendPIN(kPIN));
Darin Petkove5bc2cb2011-12-07 14:47:32 +0100193 MockReturner returner;
194 EXPECT_CALL(returner, Return());
195 EXPECT_CALL(returner, ReturnError(_)).Times(0);
196 capability_->EnterPIN(kPIN, &returner);
Darin Petkovcb547732011-11-09 13:55:26 +0100197 SetCardProxy();
Darin Petkovb05315f2011-11-07 10:14:25 +0100198 dispatcher_.DispatchPendingEvents();
199}
200
201TEST_F(CellularCapabilityGSMTest, UnblockPIN) {
Darin Petkov3cfbf212011-11-21 16:02:09 +0100202 EXPECT_CALL(*card_proxy_, SendPUK(kPUK, kPIN));
Darin Petkovc64fe5e2012-01-11 12:46:13 +0100203 MockReturner returner;
204 EXPECT_CALL(returner, Return());
205 EXPECT_CALL(returner, ReturnError(_)).Times(0);
206 capability_->UnblockPIN(kPUK, kPIN, &returner);
Darin Petkovcb547732011-11-09 13:55:26 +0100207 SetCardProxy();
Darin Petkovb05315f2011-11-07 10:14:25 +0100208 dispatcher_.DispatchPendingEvents();
209}
210
211TEST_F(CellularCapabilityGSMTest, ChangePIN) {
212 static const char kOldPIN[] = "1111";
Darin Petkov3cfbf212011-11-21 16:02:09 +0100213 EXPECT_CALL(*card_proxy_, ChangePIN(kOldPIN, kPIN));
Darin Petkovc64fe5e2012-01-11 12:46:13 +0100214 MockReturner returner;
215 EXPECT_CALL(returner, Return());
216 EXPECT_CALL(returner, ReturnError(_)).Times(0);
217 capability_->ChangePIN(kOldPIN, kPIN, &returner);
Darin Petkovcb547732011-11-09 13:55:26 +0100218 SetCardProxy();
Darin Petkovb05315f2011-11-07 10:14:25 +0100219 dispatcher_.DispatchPendingEvents();
220}
221
Darin Petkov1272a432011-11-10 15:53:37 +0100222TEST_F(CellularCapabilityGSMTest, Scan) {
223 static const char kID0[] = "123";
224 static const char kID1[] = "456";
225 Error error;
Darin Petkov721ac932011-11-16 15:43:09 +0100226 capability_->Scan(&error);
Darin Petkov1272a432011-11-10 15:53:37 +0100227 EXPECT_TRUE(error.IsSuccess());
228 ModemGSMNetworkProxyInterface::ScanResults results;
229 results.push_back(ModemGSMNetworkProxyInterface::ScanResult());
230 results[0][CellularCapabilityGSM::kNetworkPropertyID] = kID0;
231 results.push_back(ModemGSMNetworkProxyInterface::ScanResult());
232 results[1][CellularCapabilityGSM::kNetworkPropertyID] = kID1;
233 EXPECT_CALL(*network_proxy_, Scan()).WillOnce(Return(results));
234 SetNetworkProxy();
Darin Petkov721ac932011-11-16 15:43:09 +0100235 capability_->found_networks_.resize(3, Stringmap());
Darin Petkov1272a432011-11-10 15:53:37 +0100236 dispatcher_.DispatchPendingEvents();
Darin Petkov721ac932011-11-16 15:43:09 +0100237 EXPECT_EQ(2, capability_->found_networks_.size());
238 EXPECT_EQ(kID0,
239 capability_->found_networks_[0][flimflam::kNetworkIdProperty]);
240 EXPECT_EQ(kID1,
241 capability_->found_networks_[1][flimflam::kNetworkIdProperty]);
Darin Petkov1272a432011-11-10 15:53:37 +0100242}
243
244TEST_F(CellularCapabilityGSMTest, ParseScanResult) {
245 static const char kID[] = "123";
246 static const char kLongName[] = "long name";
247 static const char kShortName[] = "short name";
248 ModemGSMNetworkProxyInterface::ScanResult result;
249 result[CellularCapabilityGSM::kNetworkPropertyStatus] = "1";
250 result[CellularCapabilityGSM::kNetworkPropertyID] = kID;
251 result[CellularCapabilityGSM::kNetworkPropertyLongName] = kLongName;
252 result[CellularCapabilityGSM::kNetworkPropertyShortName] = kShortName;
253 result[CellularCapabilityGSM::kNetworkPropertyAccessTechnology] = "3";
254 result["unknown property"] = "random value";
Darin Petkov721ac932011-11-16 15:43:09 +0100255 Stringmap parsed = capability_->ParseScanResult(result);
Darin Petkov1272a432011-11-10 15:53:37 +0100256 EXPECT_EQ(5, parsed.size());
257 EXPECT_EQ("available", parsed[flimflam::kStatusProperty]);
258 EXPECT_EQ(kID, parsed[flimflam::kNetworkIdProperty]);
259 EXPECT_EQ(kLongName, parsed[flimflam::kLongNameProperty]);
260 EXPECT_EQ(kShortName, parsed[flimflam::kShortNameProperty]);
261 EXPECT_EQ(flimflam::kNetworkTechnologyEdge,
262 parsed[flimflam::kTechnologyProperty]);
263}
264
265TEST_F(CellularCapabilityGSMTest, ParseScanResultProviderLookup) {
266 InitProviderDB();
267 static const char kID[] = "310210";
268 ModemGSMNetworkProxyInterface::ScanResult result;
269 result[CellularCapabilityGSM::kNetworkPropertyID] = kID;
Darin Petkov721ac932011-11-16 15:43:09 +0100270 Stringmap parsed = capability_->ParseScanResult(result);
Darin Petkov1272a432011-11-10 15:53:37 +0100271 EXPECT_EQ(2, parsed.size());
272 EXPECT_EQ(kID, parsed[flimflam::kNetworkIdProperty]);
273 EXPECT_EQ("T-Mobile", parsed[flimflam::kLongNameProperty]);
274}
275
Darin Petkovae0c64e2011-11-15 15:50:27 +0100276TEST_F(CellularCapabilityGSMTest, SetAccessTechnology) {
Darin Petkov721ac932011-11-16 15:43:09 +0100277 capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
278 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GSM, capability_->access_technology_);
Darin Petkovae0c64e2011-11-15 15:50:27 +0100279 SetService();
Darin Petkovb72cf402011-11-22 14:51:39 +0100280 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100281 capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GPRS);
282 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GPRS, capability_->access_technology_);
Darin Petkovae0c64e2011-11-15 15:50:27 +0100283 EXPECT_EQ(flimflam::kNetworkTechnologyGprs,
Darin Petkovb72cf402011-11-22 14:51:39 +0100284 cellular_->service()->network_technology());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100285}
286
287TEST_F(CellularCapabilityGSMTest, UpdateOperatorInfo) {
288 static const char kOperatorName[] = "Swisscom";
289 InitProviderDB();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100290 capability_->serving_operator_.SetCode("22801");
Darin Petkovae0c64e2011-11-15 15:50:27 +0100291 SetService();
Darin Petkov721ac932011-11-16 15:43:09 +0100292 capability_->UpdateOperatorInfo();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100293 EXPECT_EQ(kOperatorName, capability_->serving_operator_.GetName());
294 EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100295 EXPECT_EQ(kOperatorName, cellular_->service()->serving_operator().GetName());
296}
297
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100298TEST_F(CellularCapabilityGSMTest, UpdateStatus) {
299 InitProviderDB();
300 DBusPropertiesMap props;
301 cellular_->set_imsi("310240123456789");
302 props[Cellular::kPropertyIMSI].writer().append_string("");
303 capability_->UpdateStatus(props);
304 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
305}
306
307TEST_F(CellularCapabilityGSMTest, SetHomeProvider) {
308 static const char kCountry[] = "us";
309 static const char kCode[] = "310160";
310 cellular_->set_imsi("310240123456789");
311
312 capability_->SetHomeProvider(); // No mobile provider DB available.
313 EXPECT_TRUE(cellular_->home_provider().GetName().empty());
314 EXPECT_TRUE(cellular_->home_provider().GetCountry().empty());
315 EXPECT_TRUE(cellular_->home_provider().GetCode().empty());
316
317 InitProviderDB();
318 capability_->SetHomeProvider();
319 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
320 EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
321 EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
Darin Petkov3cfbf212011-11-21 16:02:09 +0100322 EXPECT_EQ(4, capability_->apn_list_.size());
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100323
324 Cellular::Operator oper;
325 cellular_->set_home_provider(oper);
326 capability_->spn_ = kTestCarrier;
327 capability_->SetHomeProvider();
328 EXPECT_EQ(kTestCarrier, cellular_->home_provider().GetName());
329 EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
330 EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
331}
332
Darin Petkov3cfbf212011-11-21 16:02:09 +0100333namespace {
334
335MATCHER(SizeIs4, "") {
336 return arg.size() == 4;
337}
338
339} // namespace
340
341TEST_F(CellularCapabilityGSMTest, InitAPNList) {
342 InitProviderDB();
343 capability_->home_provider_ =
344 mobile_provider_lookup_by_name(cellular_->provider_db(), "T-Mobile");
345 ASSERT_TRUE(capability_->home_provider_);
346 EXPECT_EQ(0, capability_->apn_list_.size());
347 EXPECT_CALL(*device_adaptor_,
348 EmitStringmapsChanged(flimflam::kCellularApnListProperty,
349 SizeIs4()));
350 capability_->InitAPNList();
351 EXPECT_EQ(4, capability_->apn_list_.size());
352 EXPECT_EQ("wap.voicestream.com",
353 capability_->apn_list_[1][flimflam::kApnProperty]);
354 EXPECT_EQ("Web2Go/t-zones",
355 capability_->apn_list_[1][flimflam::kApnNameProperty]);
356}
357
Darin Petkov20c13ec2011-11-09 15:07:15 +0100358TEST_F(CellularCapabilityGSMTest, GetNetworkTechnologyString) {
Darin Petkov721ac932011-11-16 15:43:09 +0100359 EXPECT_EQ("", capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100360 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
Darin Petkov20c13ec2011-11-09 15:07:15 +0100361 EXPECT_EQ(flimflam::kNetworkTechnologyGsm,
Darin Petkov721ac932011-11-16 15:43:09 +0100362 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100363 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM_COMPACT);
364 EXPECT_EQ(flimflam::kNetworkTechnologyGsm,
Darin Petkov721ac932011-11-16 15:43:09 +0100365 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100366 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GPRS);
367 EXPECT_EQ(flimflam::kNetworkTechnologyGprs,
Darin Petkov721ac932011-11-16 15:43:09 +0100368 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100369 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_EDGE);
370 EXPECT_EQ(flimflam::kNetworkTechnologyEdge,
Darin Petkov721ac932011-11-16 15:43:09 +0100371 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100372 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_UMTS);
373 EXPECT_EQ(flimflam::kNetworkTechnologyUmts,
Darin Petkov721ac932011-11-16 15:43:09 +0100374 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100375 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSDPA);
376 EXPECT_EQ(flimflam::kNetworkTechnologyHspa,
Darin Petkov721ac932011-11-16 15:43:09 +0100377 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100378 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSUPA);
379 EXPECT_EQ(flimflam::kNetworkTechnologyHspa,
Darin Petkov721ac932011-11-16 15:43:09 +0100380 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100381 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSPA);
382 EXPECT_EQ(flimflam::kNetworkTechnologyHspa,
Darin Petkov721ac932011-11-16 15:43:09 +0100383 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100384 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS);
385 EXPECT_EQ(flimflam::kNetworkTechnologyHspaPlus,
Darin Petkov721ac932011-11-16 15:43:09 +0100386 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100387}
388
389TEST_F(CellularCapabilityGSMTest, GetRoamingStateString) {
390 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100391 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100392 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
393 EXPECT_EQ(flimflam::kRoamingStateHome,
Darin Petkov721ac932011-11-16 15:43:09 +0100394 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100395 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING);
396 EXPECT_EQ(flimflam::kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100397 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100398 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING);
399 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100400 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100401 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED);
402 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100403 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100404 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE);
405 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100406 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100407}
408
Darin Petkovac635a82012-01-10 16:51:58 +0100409TEST_F(CellularCapabilityGSMTest, CreateFriendlyServiceName) {
410 CellularCapabilityGSM::friendly_service_name_id_ = 0;
411 EXPECT_EQ("GSMNetwork0", capability_->CreateFriendlyServiceName());
412 EXPECT_EQ("GSMNetwork1", capability_->CreateFriendlyServiceName());
413 capability_->serving_operator_.SetCode("1234");
414 EXPECT_EQ("cellular_1234", capability_->CreateFriendlyServiceName());
415 static const char kTestCarrier[] = "A GSM Carrier";
416 cellular_->carrier_ = kTestCarrier;
417 EXPECT_EQ(kTestCarrier, capability_->CreateFriendlyServiceName());
418 static const char kTestOperator[] = "A GSM Operator";
419 capability_->serving_operator_.SetName(kTestOperator);
420 EXPECT_EQ(kTestOperator, capability_->CreateFriendlyServiceName());
421 static const char kHomeProvider[] = "The GSM Home Provider";
422 cellular_->home_provider_.SetName(kHomeProvider);
423 EXPECT_EQ(kTestOperator, capability_->CreateFriendlyServiceName());
424 capability_->registration_state_ = MM_MODEM_GSM_NETWORK_REG_STATUS_HOME;
425 EXPECT_EQ(kHomeProvider, capability_->CreateFriendlyServiceName());
426}
427
Darin Petkovb05315f2011-11-07 10:14:25 +0100428} // namespace shill