blob: 228c81eaf0dbd85fcbd3a7e3229d1797d553e5fa [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"
Darin Petkovb05315f2011-11-07 10:14:25 +010017#include "shill/mock_modem_gsm_card_proxy.h"
Darin Petkov3e509242011-11-10 14:46:44 +010018#include "shill/mock_modem_gsm_network_proxy.h"
Darin Petkovb05315f2011-11-07 10:14:25 +010019#include "shill/nice_mock_control.h"
20
Darin Petkove5bc2cb2011-12-07 14:47:32 +010021using testing::_;
Darin Petkov3cfbf212011-11-21 16:02:09 +010022using testing::NiceMock;
Darin Petkovcb547732011-11-09 13:55:26 +010023using testing::Return;
24
Darin Petkovb05315f2011-11-07 10:14:25 +010025namespace shill {
26
27class CellularCapabilityGSMTest : public testing::Test {
28 public:
29 CellularCapabilityGSMTest()
30 : cellular_(new Cellular(&control_,
31 &dispatcher_,
32 NULL,
33 "",
34 "",
35 0,
36 Cellular::kTypeGSM,
37 "",
38 "",
39 NULL)),
Darin Petkovcb547732011-11-09 13:55:26 +010040 card_proxy_(new MockModemGSMCardProxy()),
Darin Petkov3e509242011-11-10 14:46:44 +010041 network_proxy_(new MockModemGSMNetworkProxy()),
Darin Petkov721ac932011-11-16 15:43:09 +010042 capability_(NULL),
Darin Petkov3cfbf212011-11-21 16:02:09 +010043 device_adaptor_(NULL),
Darin Petkov1272a432011-11-10 15:53:37 +010044 provider_db_(NULL) {}
Darin Petkovb05315f2011-11-07 10:14:25 +010045
Darin Petkov3e509242011-11-10 14:46:44 +010046 virtual ~CellularCapabilityGSMTest() {
47 cellular_->service_ = NULL;
Darin Petkov1272a432011-11-10 15:53:37 +010048 mobile_provider_close_db(provider_db_);
49 provider_db_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010050 capability_ = NULL;
Darin Petkov3cfbf212011-11-21 16:02:09 +010051 device_adaptor_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010052 }
53
54 virtual void SetUp() {
55 capability_ =
56 dynamic_cast<CellularCapabilityGSM *>(cellular_->capability_.get());
Darin Petkov3cfbf212011-11-21 16:02:09 +010057 device_adaptor_ =
58 dynamic_cast<NiceMock<DeviceMockAdaptor> *>(cellular_->adaptor());
Darin Petkov3e509242011-11-10 14:46:44 +010059 }
60
Darin Petkovb05315f2011-11-07 10:14:25 +010061 protected:
Darin Petkov1272a432011-11-10 15:53:37 +010062 static const char kTestMobileProviderDBPath[];
Darin Petkovcb547732011-11-09 13:55:26 +010063 static const char kTestCarrier[];
Darin Petkovb05315f2011-11-07 10:14:25 +010064 static const char kPIN[];
65 static const char kPUK[];
Darin Petkovcb547732011-11-09 13:55:26 +010066 static const char kIMEI[];
67 static const char kIMSI[];
68 static const char kMSISDN[];
69
70 void SetCardProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +010071 capability_->card_proxy_.reset(card_proxy_.release());
Darin Petkovcb547732011-11-09 13:55:26 +010072 }
Darin Petkovb05315f2011-11-07 10:14:25 +010073
Darin Petkov1272a432011-11-10 15:53:37 +010074 void SetNetworkProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +010075 capability_->network_proxy_.reset(network_proxy_.release());
Darin Petkov1272a432011-11-10 15:53:37 +010076 }
77
Darin Petkov20c13ec2011-11-09 15:07:15 +010078 void SetAccessTechnology(uint32 technology) {
Darin Petkov721ac932011-11-16 15:43:09 +010079 capability_->access_technology_ = technology;
Darin Petkov20c13ec2011-11-09 15:07:15 +010080 }
81
82 void SetRegistrationState(uint32 state) {
Darin Petkov721ac932011-11-16 15:43:09 +010083 capability_->registration_state_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +010084 }
85
Darin Petkov3e509242011-11-10 14:46:44 +010086 void SetService() {
87 cellular_->service_ = new CellularService(
88 &control_, &dispatcher_, NULL, cellular_);
89 }
90
Darin Petkov1272a432011-11-10 15:53:37 +010091 void InitProviderDB() {
92 provider_db_ = mobile_provider_open_db(kTestMobileProviderDBPath);
93 ASSERT_TRUE(provider_db_);
94 cellular_->provider_db_ = provider_db_;
95 }
96
Darin Petkovb05315f2011-11-07 10:14:25 +010097 NiceMockControl control_;
98 EventDispatcher dispatcher_;
99 CellularRefPtr cellular_;
Darin Petkovcb547732011-11-09 13:55:26 +0100100 scoped_ptr<MockModemGSMCardProxy> card_proxy_;
Darin Petkov3e509242011-11-10 14:46:44 +0100101 scoped_ptr<MockModemGSMNetworkProxy> network_proxy_;
Darin Petkov721ac932011-11-16 15:43:09 +0100102 CellularCapabilityGSM *capability_; // Owned by |cellular_|.
Darin Petkov3cfbf212011-11-21 16:02:09 +0100103 NiceMock<DeviceMockAdaptor> *device_adaptor_; // Owned by |cellular_|.
Darin Petkov1272a432011-11-10 15:53:37 +0100104 mobile_provider_db *provider_db_;
Darin Petkovb05315f2011-11-07 10:14:25 +0100105};
106
Darin Petkov1272a432011-11-10 15:53:37 +0100107const char CellularCapabilityGSMTest::kTestMobileProviderDBPath[] =
108 "provider_db_unittest.bfd";
Darin Petkovcb547732011-11-09 13:55:26 +0100109const char CellularCapabilityGSMTest::kTestCarrier[] = "The Cellular Carrier";
Darin Petkovb05315f2011-11-07 10:14:25 +0100110const char CellularCapabilityGSMTest::kPIN[] = "9876";
111const char CellularCapabilityGSMTest::kPUK[] = "8765";
Darin Petkovcb547732011-11-09 13:55:26 +0100112const char CellularCapabilityGSMTest::kIMEI[] = "987654321098765";
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100113const char CellularCapabilityGSMTest::kIMSI[] = "310150123456789";
Darin Petkovcb547732011-11-09 13:55:26 +0100114const char CellularCapabilityGSMTest::kMSISDN[] = "12345678901";
115
Darin Petkov721ac932011-11-16 15:43:09 +0100116TEST_F(CellularCapabilityGSMTest, PropertyStore) {
117 EXPECT_TRUE(cellular_->store().Contains(flimflam::kSIMLockStatusProperty));
118}
119
Darin Petkovcb547732011-11-09 13:55:26 +0100120TEST_F(CellularCapabilityGSMTest, GetIdentifiers) {
121 EXPECT_CALL(*card_proxy_, GetIMEI()).WillOnce(Return(kIMEI));
122 EXPECT_CALL(*card_proxy_, GetIMSI()).WillOnce(Return(kIMSI));
123 EXPECT_CALL(*card_proxy_, GetSPN()).WillOnce(Return(kTestCarrier));
124 EXPECT_CALL(*card_proxy_, GetMSISDN()).WillOnce(Return(kMSISDN));
125 SetCardProxy();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100126 InitProviderDB();
Darin Petkov721ac932011-11-16 15:43:09 +0100127 capability_->GetIdentifiers();
Darin Petkovcb547732011-11-09 13:55:26 +0100128 EXPECT_EQ(kIMEI, cellular_->imei());
129 EXPECT_EQ(kIMSI, cellular_->imsi());
Darin Petkov721ac932011-11-16 15:43:09 +0100130 EXPECT_EQ(kTestCarrier, capability_->spn());
Darin Petkovcb547732011-11-09 13:55:26 +0100131 EXPECT_EQ(kMSISDN, cellular_->mdn());
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100132 EXPECT_EQ(kTestCarrier, cellular_->home_provider().GetName());
133 EXPECT_EQ("us", cellular_->home_provider().GetCountry());
134 EXPECT_EQ("310038", cellular_->home_provider().GetCode());
Darin Petkov721ac932011-11-16 15:43:09 +0100135 capability_->GetIdentifiers();
Darin Petkovcb547732011-11-09 13:55:26 +0100136 EXPECT_EQ(kIMEI, cellular_->imei());
137 EXPECT_EQ(kIMSI, cellular_->imsi());
Darin Petkov721ac932011-11-16 15:43:09 +0100138 EXPECT_EQ(kTestCarrier, capability_->spn());
Darin Petkovcb547732011-11-09 13:55:26 +0100139 EXPECT_EQ(kMSISDN, cellular_->mdn());
140}
Darin Petkovb05315f2011-11-07 10:14:25 +0100141
Darin Petkov3e509242011-11-10 14:46:44 +0100142TEST_F(CellularCapabilityGSMTest, GetSignalQuality) {
143 const int kStrength = 80;
144 EXPECT_CALL(*network_proxy_, GetSignalQuality()).WillOnce(Return(kStrength));
145 SetNetworkProxy();
146 SetService();
147 EXPECT_EQ(0, cellular_->service()->strength());
Darin Petkov721ac932011-11-16 15:43:09 +0100148 capability_->GetSignalQuality();
Darin Petkov3e509242011-11-10 14:46:44 +0100149 EXPECT_EQ(kStrength, cellular_->service()->strength());
150}
151
Darin Petkov184c54e2011-11-15 12:44:39 +0100152TEST_F(CellularCapabilityGSMTest, RegisterOnNetwork) {
153 Error error;
Darin Petkov3cfbf212011-11-21 16:02:09 +0100154 EXPECT_CALL(*network_proxy_, Register(kTestCarrier));
Darin Petkov721ac932011-11-16 15:43:09 +0100155 capability_->RegisterOnNetwork(kTestCarrier, &error);
Darin Petkov184c54e2011-11-15 12:44:39 +0100156 EXPECT_TRUE(error.IsSuccess());
157 SetNetworkProxy();
158 dispatcher_.DispatchPendingEvents();
Darin Petkov721ac932011-11-16 15:43:09 +0100159 EXPECT_EQ(kTestCarrier, capability_->selected_network_);
Darin Petkov184c54e2011-11-15 12:44:39 +0100160}
161
Darin Petkovb72cf402011-11-22 14:51:39 +0100162TEST_F(CellularCapabilityGSMTest, IsRegistered) {
163 EXPECT_FALSE(capability_->IsRegistered());
164 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_IDLE);
165 EXPECT_FALSE(capability_->IsRegistered());
166 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
167 EXPECT_TRUE(capability_->IsRegistered());
168 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_SEARCHING);
169 EXPECT_FALSE(capability_->IsRegistered());
170 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_DENIED);
171 EXPECT_FALSE(capability_->IsRegistered());
172 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_UNKNOWN);
173 EXPECT_FALSE(capability_->IsRegistered());
174 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING);
175 EXPECT_TRUE(capability_->IsRegistered());
176}
177
Darin Petkovb05315f2011-11-07 10:14:25 +0100178TEST_F(CellularCapabilityGSMTest, RequirePIN) {
Darin Petkov3cfbf212011-11-21 16:02:09 +0100179 EXPECT_CALL(*card_proxy_, EnablePIN(kPIN, true));
Darin Petkovc64fe5e2012-01-11 12:46:13 +0100180 MockReturner returner;
181 EXPECT_CALL(returner, Return());
182 EXPECT_CALL(returner, ReturnError(_)).Times(0);
183 capability_->RequirePIN(kPIN, true, &returner);
Darin Petkovcb547732011-11-09 13:55:26 +0100184 SetCardProxy();
Darin Petkovb05315f2011-11-07 10:14:25 +0100185 dispatcher_.DispatchPendingEvents();
186}
187
188TEST_F(CellularCapabilityGSMTest, EnterPIN) {
Darin Petkov3cfbf212011-11-21 16:02:09 +0100189 EXPECT_CALL(*card_proxy_, SendPIN(kPIN));
Darin Petkove5bc2cb2011-12-07 14:47:32 +0100190 MockReturner returner;
191 EXPECT_CALL(returner, Return());
192 EXPECT_CALL(returner, ReturnError(_)).Times(0);
193 capability_->EnterPIN(kPIN, &returner);
Darin Petkovcb547732011-11-09 13:55:26 +0100194 SetCardProxy();
Darin Petkovb05315f2011-11-07 10:14:25 +0100195 dispatcher_.DispatchPendingEvents();
196}
197
198TEST_F(CellularCapabilityGSMTest, UnblockPIN) {
Darin Petkov3cfbf212011-11-21 16:02:09 +0100199 EXPECT_CALL(*card_proxy_, SendPUK(kPUK, kPIN));
Darin Petkovc64fe5e2012-01-11 12:46:13 +0100200 MockReturner returner;
201 EXPECT_CALL(returner, Return());
202 EXPECT_CALL(returner, ReturnError(_)).Times(0);
203 capability_->UnblockPIN(kPUK, kPIN, &returner);
Darin Petkovcb547732011-11-09 13:55:26 +0100204 SetCardProxy();
Darin Petkovb05315f2011-11-07 10:14:25 +0100205 dispatcher_.DispatchPendingEvents();
206}
207
208TEST_F(CellularCapabilityGSMTest, ChangePIN) {
209 static const char kOldPIN[] = "1111";
Darin Petkov3cfbf212011-11-21 16:02:09 +0100210 EXPECT_CALL(*card_proxy_, ChangePIN(kOldPIN, kPIN));
Darin Petkovc64fe5e2012-01-11 12:46:13 +0100211 MockReturner returner;
212 EXPECT_CALL(returner, Return());
213 EXPECT_CALL(returner, ReturnError(_)).Times(0);
214 capability_->ChangePIN(kOldPIN, kPIN, &returner);
Darin Petkovcb547732011-11-09 13:55:26 +0100215 SetCardProxy();
Darin Petkovb05315f2011-11-07 10:14:25 +0100216 dispatcher_.DispatchPendingEvents();
217}
218
Darin Petkov1272a432011-11-10 15:53:37 +0100219TEST_F(CellularCapabilityGSMTest, Scan) {
220 static const char kID0[] = "123";
221 static const char kID1[] = "456";
222 Error error;
Darin Petkov721ac932011-11-16 15:43:09 +0100223 capability_->Scan(&error);
Darin Petkov1272a432011-11-10 15:53:37 +0100224 EXPECT_TRUE(error.IsSuccess());
225 ModemGSMNetworkProxyInterface::ScanResults results;
226 results.push_back(ModemGSMNetworkProxyInterface::ScanResult());
227 results[0][CellularCapabilityGSM::kNetworkPropertyID] = kID0;
228 results.push_back(ModemGSMNetworkProxyInterface::ScanResult());
229 results[1][CellularCapabilityGSM::kNetworkPropertyID] = kID1;
230 EXPECT_CALL(*network_proxy_, Scan()).WillOnce(Return(results));
231 SetNetworkProxy();
Darin Petkov721ac932011-11-16 15:43:09 +0100232 capability_->found_networks_.resize(3, Stringmap());
Darin Petkov1272a432011-11-10 15:53:37 +0100233 dispatcher_.DispatchPendingEvents();
Darin Petkov721ac932011-11-16 15:43:09 +0100234 EXPECT_EQ(2, capability_->found_networks_.size());
235 EXPECT_EQ(kID0,
236 capability_->found_networks_[0][flimflam::kNetworkIdProperty]);
237 EXPECT_EQ(kID1,
238 capability_->found_networks_[1][flimflam::kNetworkIdProperty]);
Darin Petkov1272a432011-11-10 15:53:37 +0100239}
240
241TEST_F(CellularCapabilityGSMTest, ParseScanResult) {
242 static const char kID[] = "123";
243 static const char kLongName[] = "long name";
244 static const char kShortName[] = "short name";
245 ModemGSMNetworkProxyInterface::ScanResult result;
246 result[CellularCapabilityGSM::kNetworkPropertyStatus] = "1";
247 result[CellularCapabilityGSM::kNetworkPropertyID] = kID;
248 result[CellularCapabilityGSM::kNetworkPropertyLongName] = kLongName;
249 result[CellularCapabilityGSM::kNetworkPropertyShortName] = kShortName;
250 result[CellularCapabilityGSM::kNetworkPropertyAccessTechnology] = "3";
251 result["unknown property"] = "random value";
Darin Petkov721ac932011-11-16 15:43:09 +0100252 Stringmap parsed = capability_->ParseScanResult(result);
Darin Petkov1272a432011-11-10 15:53:37 +0100253 EXPECT_EQ(5, parsed.size());
254 EXPECT_EQ("available", parsed[flimflam::kStatusProperty]);
255 EXPECT_EQ(kID, parsed[flimflam::kNetworkIdProperty]);
256 EXPECT_EQ(kLongName, parsed[flimflam::kLongNameProperty]);
257 EXPECT_EQ(kShortName, parsed[flimflam::kShortNameProperty]);
258 EXPECT_EQ(flimflam::kNetworkTechnologyEdge,
259 parsed[flimflam::kTechnologyProperty]);
260}
261
262TEST_F(CellularCapabilityGSMTest, ParseScanResultProviderLookup) {
263 InitProviderDB();
264 static const char kID[] = "310210";
265 ModemGSMNetworkProxyInterface::ScanResult result;
266 result[CellularCapabilityGSM::kNetworkPropertyID] = kID;
Darin Petkov721ac932011-11-16 15:43:09 +0100267 Stringmap parsed = capability_->ParseScanResult(result);
Darin Petkov1272a432011-11-10 15:53:37 +0100268 EXPECT_EQ(2, parsed.size());
269 EXPECT_EQ(kID, parsed[flimflam::kNetworkIdProperty]);
270 EXPECT_EQ("T-Mobile", parsed[flimflam::kLongNameProperty]);
271}
272
Darin Petkovae0c64e2011-11-15 15:50:27 +0100273TEST_F(CellularCapabilityGSMTest, SetAccessTechnology) {
Darin Petkov721ac932011-11-16 15:43:09 +0100274 capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
275 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GSM, capability_->access_technology_);
Darin Petkovae0c64e2011-11-15 15:50:27 +0100276 SetService();
Darin Petkovb72cf402011-11-22 14:51:39 +0100277 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100278 capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GPRS);
279 EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GPRS, capability_->access_technology_);
Darin Petkovae0c64e2011-11-15 15:50:27 +0100280 EXPECT_EQ(flimflam::kNetworkTechnologyGprs,
Darin Petkovb72cf402011-11-22 14:51:39 +0100281 cellular_->service()->network_technology());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100282}
283
284TEST_F(CellularCapabilityGSMTest, UpdateOperatorInfo) {
285 static const char kOperatorName[] = "Swisscom";
286 InitProviderDB();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100287 capability_->serving_operator_.SetCode("22801");
Darin Petkovae0c64e2011-11-15 15:50:27 +0100288 SetService();
Darin Petkov721ac932011-11-16 15:43:09 +0100289 capability_->UpdateOperatorInfo();
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100290 EXPECT_EQ(kOperatorName, capability_->serving_operator_.GetName());
291 EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100292 EXPECT_EQ(kOperatorName, cellular_->service()->serving_operator().GetName());
293}
294
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100295TEST_F(CellularCapabilityGSMTest, UpdateStatus) {
296 InitProviderDB();
297 DBusPropertiesMap props;
298 cellular_->set_imsi("310240123456789");
299 props[Cellular::kPropertyIMSI].writer().append_string("");
300 capability_->UpdateStatus(props);
301 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
302}
303
304TEST_F(CellularCapabilityGSMTest, SetHomeProvider) {
305 static const char kCountry[] = "us";
306 static const char kCode[] = "310160";
307 cellular_->set_imsi("310240123456789");
308
309 capability_->SetHomeProvider(); // No mobile provider DB available.
310 EXPECT_TRUE(cellular_->home_provider().GetName().empty());
311 EXPECT_TRUE(cellular_->home_provider().GetCountry().empty());
312 EXPECT_TRUE(cellular_->home_provider().GetCode().empty());
313
314 InitProviderDB();
315 capability_->SetHomeProvider();
316 EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
317 EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
318 EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
Darin Petkov3cfbf212011-11-21 16:02:09 +0100319 EXPECT_EQ(4, capability_->apn_list_.size());
Darin Petkov0a4dfeb2011-11-18 19:36:13 +0100320
321 Cellular::Operator oper;
322 cellular_->set_home_provider(oper);
323 capability_->spn_ = kTestCarrier;
324 capability_->SetHomeProvider();
325 EXPECT_EQ(kTestCarrier, cellular_->home_provider().GetName());
326 EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
327 EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
328}
329
Darin Petkov3cfbf212011-11-21 16:02:09 +0100330namespace {
331
332MATCHER(SizeIs4, "") {
333 return arg.size() == 4;
334}
335
336} // namespace
337
338TEST_F(CellularCapabilityGSMTest, InitAPNList) {
339 InitProviderDB();
340 capability_->home_provider_ =
341 mobile_provider_lookup_by_name(cellular_->provider_db(), "T-Mobile");
342 ASSERT_TRUE(capability_->home_provider_);
343 EXPECT_EQ(0, capability_->apn_list_.size());
344 EXPECT_CALL(*device_adaptor_,
345 EmitStringmapsChanged(flimflam::kCellularApnListProperty,
346 SizeIs4()));
347 capability_->InitAPNList();
348 EXPECT_EQ(4, capability_->apn_list_.size());
349 EXPECT_EQ("wap.voicestream.com",
350 capability_->apn_list_[1][flimflam::kApnProperty]);
351 EXPECT_EQ("Web2Go/t-zones",
352 capability_->apn_list_[1][flimflam::kApnNameProperty]);
353}
354
Darin Petkov20c13ec2011-11-09 15:07:15 +0100355TEST_F(CellularCapabilityGSMTest, GetNetworkTechnologyString) {
Darin Petkov721ac932011-11-16 15:43:09 +0100356 EXPECT_EQ("", capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100357 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
Darin Petkov20c13ec2011-11-09 15:07:15 +0100358 EXPECT_EQ(flimflam::kNetworkTechnologyGsm,
Darin Petkov721ac932011-11-16 15:43:09 +0100359 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100360 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM_COMPACT);
361 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_GPRS);
364 EXPECT_EQ(flimflam::kNetworkTechnologyGprs,
Darin Petkov721ac932011-11-16 15:43:09 +0100365 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100366 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_EDGE);
367 EXPECT_EQ(flimflam::kNetworkTechnologyEdge,
Darin Petkov721ac932011-11-16 15:43:09 +0100368 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100369 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_UMTS);
370 EXPECT_EQ(flimflam::kNetworkTechnologyUmts,
Darin Petkov721ac932011-11-16 15:43:09 +0100371 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100372 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSDPA);
373 EXPECT_EQ(flimflam::kNetworkTechnologyHspa,
Darin Petkov721ac932011-11-16 15:43:09 +0100374 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100375 SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_HSUPA);
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_HSPA);
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_PLUS);
382 EXPECT_EQ(flimflam::kNetworkTechnologyHspaPlus,
Darin Petkov721ac932011-11-16 15:43:09 +0100383 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100384}
385
386TEST_F(CellularCapabilityGSMTest, GetRoamingStateString) {
387 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100388 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100389 SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
390 EXPECT_EQ(flimflam::kRoamingStateHome,
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_ROAMING);
393 EXPECT_EQ(flimflam::kRoamingStateRoaming,
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_SEARCHING);
396 EXPECT_EQ(flimflam::kRoamingStateUnknown,
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_DENIED);
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_IDLE);
402 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100403 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100404}
405
Darin Petkovac635a82012-01-10 16:51:58 +0100406TEST_F(CellularCapabilityGSMTest, CreateFriendlyServiceName) {
407 CellularCapabilityGSM::friendly_service_name_id_ = 0;
408 EXPECT_EQ("GSMNetwork0", capability_->CreateFriendlyServiceName());
409 EXPECT_EQ("GSMNetwork1", capability_->CreateFriendlyServiceName());
410 capability_->serving_operator_.SetCode("1234");
411 EXPECT_EQ("cellular_1234", capability_->CreateFriendlyServiceName());
412 static const char kTestCarrier[] = "A GSM Carrier";
413 cellular_->carrier_ = kTestCarrier;
414 EXPECT_EQ(kTestCarrier, capability_->CreateFriendlyServiceName());
415 static const char kTestOperator[] = "A GSM Operator";
416 capability_->serving_operator_.SetName(kTestOperator);
417 EXPECT_EQ(kTestOperator, capability_->CreateFriendlyServiceName());
418 static const char kHomeProvider[] = "The GSM Home Provider";
419 cellular_->home_provider_.SetName(kHomeProvider);
420 EXPECT_EQ(kTestOperator, capability_->CreateFriendlyServiceName());
421 capability_->registration_state_ = MM_MODEM_GSM_NETWORK_REG_STATUS_HOME;
422 EXPECT_EQ(kHomeProvider, capability_->CreateFriendlyServiceName());
423}
424
Darin Petkovb05315f2011-11-07 10:14:25 +0100425} // namespace shill