blob: 1cf13dd359ffea2b60b2f6ad8a569b4cd8dd8c1e [file] [log] [blame]
Darin Petkovac635a82012-01-10 16:51:58 +01001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkovcb547732011-11-09 13:55:26 +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_cdma.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 Petkovcb547732011-11-09 13:55:26 +01009#include <gtest/gtest.h>
Darin Petkov20c13ec2011-11-09 15:07:15 +010010#include <mm/mm-modem.h>
Darin Petkovcb547732011-11-09 13:55:26 +010011
12#include "shill/cellular.h"
Darin Petkov3e509242011-11-10 14:46:44 +010013#include "shill/cellular_service.h"
Darin Petkovcb547732011-11-09 13:55:26 +010014#include "shill/error.h"
15#include "shill/event_dispatcher.h"
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050016#include "shill/mock_adaptors.h"
Eric Shienbrood04e63582012-01-19 13:41:12 -050017#include "shill/mock_glib.h"
18#include "shill/mock_manager.h"
Thieu Le3426c8f2012-01-11 17:35:11 -080019#include "shill/mock_metrics.h"
Darin Petkovcb547732011-11-09 13:55:26 +010020#include "shill/mock_modem_cdma_proxy.h"
21#include "shill/nice_mock_control.h"
22
Eric Shienbrood9a245532012-03-07 14:20:39 -050023using base::Bind;
24using base::Unretained;
25using std::string;
Darin Petkov184c54e2011-11-15 12:44:39 +010026using testing::_;
Eric Shienbrood9a245532012-03-07 14:20:39 -050027using testing::Invoke;
Darin Petkovcb547732011-11-09 13:55:26 +010028using testing::Return;
29
30namespace shill {
31
32class CellularCapabilityCDMATest : public testing::Test {
33 public:
34 CellularCapabilityCDMATest()
Eric Shienbrood04e63582012-01-19 13:41:12 -050035 : manager_(&control_, &dispatcher_, &metrics_, &glib_),
36 cellular_(new Cellular(&control_,
Darin Petkovcb547732011-11-09 13:55:26 +010037 &dispatcher_,
Thieu Le3426c8f2012-01-11 17:35:11 -080038 &metrics_,
Eric Shienbrood04e63582012-01-19 13:41:12 -050039 &manager_,
Darin Petkovcb547732011-11-09 13:55:26 +010040 "",
41 "",
42 0,
43 Cellular::kTypeCDMA,
44 "",
45 "",
46 NULL)),
47 proxy_(new MockModemCDMAProxy()),
Darin Petkov721ac932011-11-16 15:43:09 +010048 capability_(NULL) {}
Darin Petkovcb547732011-11-09 13:55:26 +010049
Darin Petkov3e509242011-11-10 14:46:44 +010050 virtual ~CellularCapabilityCDMATest() {
51 cellular_->service_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010052 capability_ = NULL;
Darin Petkov3e509242011-11-10 14:46:44 +010053 }
54
Darin Petkov721ac932011-11-16 15:43:09 +010055 virtual void SetUp() {
56 capability_ =
57 dynamic_cast<CellularCapabilityCDMA *>(cellular_->capability_.get());
Darin Petkov184c54e2011-11-15 12:44:39 +010058 }
59
Eric Shienbrood9a245532012-03-07 14:20:39 -050060 void InvokeActivate(const string &carrier, Error *error,
61 const ActivationResultCallback &callback,
62 int timeout) {
63 callback.Run(MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR, Error());
64 }
65 void InvokeActivateError(const string &carrier, Error *error,
66 const ActivationResultCallback &callback,
67 int timeout) {
68 callback.Run(MM_MODEM_CDMA_ACTIVATION_ERROR_NO_SIGNAL, Error());
69 }
70 void InvokeGetSignalQuality(Error *error,
71 const SignalQualityCallback &callback,
72 int timeout) {
73 callback.Run(kStrength, Error());
74 }
75 void InvokeGetRegistrationState(Error *error,
76 const RegistrationStateCallback &callback,
77 int timeout) {
78 callback.Run(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED,
79 MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
80 Error());
81 }
82
83 MOCK_METHOD1(TestCallback, void(const Error &error));
84
Darin Petkovcb547732011-11-09 13:55:26 +010085 protected:
86 static const char kMEID[];
Darin Petkova3d3be52011-11-14 21:34:16 +010087 static const char kTestCarrier[];
Eric Shienbrood9a245532012-03-07 14:20:39 -050088 static const unsigned int kStrength;
Darin Petkovcb547732011-11-09 13:55:26 +010089
Darin Petkov20c13ec2011-11-09 15:07:15 +010090 void SetRegistrationStateEVDO(uint32 state) {
Darin Petkov721ac932011-11-16 15:43:09 +010091 capability_->registration_state_evdo_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +010092 }
93
94 void SetRegistrationState1x(uint32 state) {
Darin Petkov721ac932011-11-16 15:43:09 +010095 capability_->registration_state_1x_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +010096 }
97
Darin Petkov3e509242011-11-10 14:46:44 +010098 void SetProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +010099 capability_->proxy_.reset(proxy_.release());
Darin Petkov3e509242011-11-10 14:46:44 +0100100 }
101
102 void SetService() {
103 cellular_->service_ = new CellularService(
Eric Shienbrood04e63582012-01-19 13:41:12 -0500104 &control_, &dispatcher_, &metrics_, &manager_, cellular_);
Darin Petkov3e509242011-11-10 14:46:44 +0100105 }
106
Darin Petkova3d3be52011-11-14 21:34:16 +0100107 void SetDeviceState(Cellular::State state) {
108 cellular_->state_ = state;
109 }
110
Darin Petkovcb547732011-11-09 13:55:26 +0100111 NiceMockControl control_;
112 EventDispatcher dispatcher_;
Eric Shienbrood04e63582012-01-19 13:41:12 -0500113 MockGLib glib_;
114 MockManager manager_;
Thieu Le3426c8f2012-01-11 17:35:11 -0800115 MockMetrics metrics_;
Darin Petkovcb547732011-11-09 13:55:26 +0100116 CellularRefPtr cellular_;
117 scoped_ptr<MockModemCDMAProxy> proxy_;
Darin Petkov721ac932011-11-16 15:43:09 +0100118 CellularCapabilityCDMA *capability_; // Owned by |cellular_|.
Darin Petkovcb547732011-11-09 13:55:26 +0100119};
120
121const char CellularCapabilityCDMATest::kMEID[] = "D1234567EF8901";
Darin Petkova3d3be52011-11-14 21:34:16 +0100122const char CellularCapabilityCDMATest::kTestCarrier[] = "The Cellular Carrier";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500123const unsigned int CellularCapabilityCDMATest::kStrength = 90;
Darin Petkova3d3be52011-11-14 21:34:16 +0100124
Darin Petkov721ac932011-11-16 15:43:09 +0100125TEST_F(CellularCapabilityCDMATest, PropertyStore) {
126 EXPECT_TRUE(cellular_->store().Contains(flimflam::kPRLVersionProperty));
127}
128
Darin Petkova3d3be52011-11-14 21:34:16 +0100129TEST_F(CellularCapabilityCDMATest, Activate) {
Darin Petkova3d3be52011-11-14 21:34:16 +0100130 SetDeviceState(Cellular::kStateEnabled);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500131 EXPECT_CALL(*proxy_, Activate(kTestCarrier, _, _,
132 CellularCapability::kTimeoutActivate))
133 .WillOnce(Invoke(this,
134 &CellularCapabilityCDMATest::InvokeActivate));
135 EXPECT_CALL(*this, TestCallback(_));
Darin Petkova3d3be52011-11-14 21:34:16 +0100136 SetProxy();
137 SetService();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500138 capability_->Activate(kTestCarrier, NULL,
139 Bind(&CellularCapabilityCDMATest::TestCallback, Unretained(this)));
Darin Petkova3d3be52011-11-14 21:34:16 +0100140 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING,
Darin Petkov721ac932011-11-16 15:43:09 +0100141 capability_->activation_state());
Darin Petkova3d3be52011-11-14 21:34:16 +0100142 EXPECT_EQ(flimflam::kActivationStateActivating,
143 cellular_->service()->activation_state());
144 EXPECT_EQ("", cellular_->service()->error());
145}
146
147TEST_F(CellularCapabilityCDMATest, ActivateError) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500148 SetDeviceState(Cellular::kStateEnabled);
149 EXPECT_CALL(*proxy_, Activate(kTestCarrier, _, _,
150 CellularCapability::kTimeoutActivate))
151 .WillOnce(Invoke(this,
152 &CellularCapabilityCDMATest::InvokeActivateError));
153 EXPECT_CALL(*this, TestCallback(_));
Darin Petkova3d3be52011-11-14 21:34:16 +0100154 SetProxy();
155 SetService();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500156 capability_->Activate(kTestCarrier, NULL,
157 Bind(&CellularCapabilityCDMATest::TestCallback, Unretained(this)));
Darin Petkova3d3be52011-11-14 21:34:16 +0100158 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED,
Darin Petkov721ac932011-11-16 15:43:09 +0100159 capability_->activation_state());
Darin Petkova3d3be52011-11-14 21:34:16 +0100160 EXPECT_EQ(flimflam::kActivationStateNotActivated,
161 cellular_->service()->activation_state());
162 EXPECT_EQ(flimflam::kErrorActivationFailed,
163 cellular_->service()->error());
164}
Darin Petkovcb547732011-11-09 13:55:26 +0100165
Darin Petkovae0c64e2011-11-15 15:50:27 +0100166TEST_F(CellularCapabilityCDMATest, GetActivationStateString) {
167 EXPECT_EQ(flimflam::kActivationStateActivated,
168 CellularCapabilityCDMA::GetActivationStateString(
169 MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATED));
170 EXPECT_EQ(flimflam::kActivationStateActivating,
171 CellularCapabilityCDMA::GetActivationStateString(
172 MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING));
173 EXPECT_EQ(flimflam::kActivationStateNotActivated,
174 CellularCapabilityCDMA::GetActivationStateString(
175 MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED));
176 EXPECT_EQ(flimflam::kActivationStatePartiallyActivated,
177 CellularCapabilityCDMA::GetActivationStateString(
178 MM_MODEM_CDMA_ACTIVATION_STATE_PARTIALLY_ACTIVATED));
179 EXPECT_EQ(flimflam::kActivationStateUnknown,
180 CellularCapabilityCDMA::GetActivationStateString(123));
181}
182
183TEST_F(CellularCapabilityCDMATest, GetActivationErrorString) {
184 EXPECT_EQ(flimflam::kErrorNeedEvdo,
185 CellularCapabilityCDMA::GetActivationErrorString(
186 MM_MODEM_CDMA_ACTIVATION_ERROR_WRONG_RADIO_INTERFACE));
187 EXPECT_EQ(flimflam::kErrorNeedHomeNetwork,
188 CellularCapabilityCDMA::GetActivationErrorString(
189 MM_MODEM_CDMA_ACTIVATION_ERROR_ROAMING));
190 EXPECT_EQ(flimflam::kErrorOtaspFailed,
191 CellularCapabilityCDMA::GetActivationErrorString(
192 MM_MODEM_CDMA_ACTIVATION_ERROR_COULD_NOT_CONNECT));
193 EXPECT_EQ(flimflam::kErrorOtaspFailed,
194 CellularCapabilityCDMA::GetActivationErrorString(
195 MM_MODEM_CDMA_ACTIVATION_ERROR_SECURITY_AUTHENTICATION_FAILED));
196 EXPECT_EQ(flimflam::kErrorOtaspFailed,
197 CellularCapabilityCDMA::GetActivationErrorString(
198 MM_MODEM_CDMA_ACTIVATION_ERROR_PROVISIONING_FAILED));
199 EXPECT_EQ("",
200 CellularCapabilityCDMA::GetActivationErrorString(
201 MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR));
202 EXPECT_EQ(flimflam::kErrorActivationFailed,
203 CellularCapabilityCDMA::GetActivationErrorString(
204 MM_MODEM_CDMA_ACTIVATION_ERROR_NO_SIGNAL));
205 EXPECT_EQ(flimflam::kErrorActivationFailed,
206 CellularCapabilityCDMA::GetActivationErrorString(1234));
207}
208
Darin Petkovb72cf402011-11-22 14:51:39 +0100209TEST_F(CellularCapabilityCDMATest, IsRegisteredEVDO) {
210 EXPECT_FALSE(capability_->IsRegistered());
211 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
212 EXPECT_FALSE(capability_->IsRegistered());
213 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
214 EXPECT_TRUE(capability_->IsRegistered());
215 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
216 EXPECT_TRUE(capability_->IsRegistered());
217 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
218 EXPECT_TRUE(capability_->IsRegistered());
219}
220
221TEST_F(CellularCapabilityCDMATest, IsRegistered1x) {
222 EXPECT_FALSE(capability_->IsRegistered());
223 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
224 EXPECT_FALSE(capability_->IsRegistered());
225 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
226 EXPECT_TRUE(capability_->IsRegistered());
227 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
228 EXPECT_TRUE(capability_->IsRegistered());
229 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
230 EXPECT_TRUE(capability_->IsRegistered());
231}
232
Darin Petkov20c13ec2011-11-09 15:07:15 +0100233TEST_F(CellularCapabilityCDMATest, GetNetworkTechnologyString) {
Darin Petkov721ac932011-11-16 15:43:09 +0100234 EXPECT_EQ("", capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100235 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
236 EXPECT_EQ(flimflam::kNetworkTechnologyEvdo,
Darin Petkov721ac932011-11-16 15:43:09 +0100237 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100238 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
239 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
240 EXPECT_EQ(flimflam::kNetworkTechnology1Xrtt,
Darin Petkov721ac932011-11-16 15:43:09 +0100241 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100242}
243
244TEST_F(CellularCapabilityCDMATest, GetRoamingStateString) {
245 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100246 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100247 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
248 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100249 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100250 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100251 EXPECT_EQ(flimflam::kRoamingStateHome, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100252 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
253 EXPECT_EQ(flimflam::kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100254 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100255 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
256 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
257 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100258 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100259 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100260 EXPECT_EQ(flimflam::kRoamingStateHome, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100261 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
262 EXPECT_EQ(flimflam::kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100263 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100264}
265
Darin Petkov3e509242011-11-10 14:46:44 +0100266TEST_F(CellularCapabilityCDMATest, GetSignalQuality) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500267 EXPECT_CALL(*proxy_,
268 GetSignalQuality(NULL, _, CellularCapability::kTimeoutDefault))
269 .WillOnce(Invoke(this,
270 &CellularCapabilityCDMATest::InvokeGetSignalQuality));
Darin Petkov3e509242011-11-10 14:46:44 +0100271 SetProxy();
272 SetService();
273 EXPECT_EQ(0, cellular_->service()->strength());
Darin Petkov721ac932011-11-16 15:43:09 +0100274 capability_->GetSignalQuality();
Darin Petkov3e509242011-11-10 14:46:44 +0100275 EXPECT_EQ(kStrength, cellular_->service()->strength());
276}
277
Darin Petkov184c54e2011-11-15 12:44:39 +0100278TEST_F(CellularCapabilityCDMATest, GetRegistrationState) {
279 EXPECT_FALSE(cellular_->service().get());
280 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
Darin Petkov721ac932011-11-16 15:43:09 +0100281 capability_->registration_state_1x());
Darin Petkov184c54e2011-11-15 12:44:39 +0100282 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
Darin Petkov721ac932011-11-16 15:43:09 +0100283 capability_->registration_state_evdo());
Eric Shienbrood9a245532012-03-07 14:20:39 -0500284 EXPECT_CALL(*proxy_,
285 GetRegistrationState(NULL, _,
286 CellularCapability::kTimeoutDefault))
287 .WillOnce(Invoke(
288 this,
289 &CellularCapabilityCDMATest::InvokeGetRegistrationState));
Darin Petkov184c54e2011-11-15 12:44:39 +0100290 SetProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500291 cellular_->state_ = Cellular::kStateEnabled;
Eric Shienbrood04e63582012-01-19 13:41:12 -0500292 EXPECT_CALL(manager_, RegisterService(_));
Eric Shienbrood9a245532012-03-07 14:20:39 -0500293 capability_->GetRegistrationState();
Darin Petkov184c54e2011-11-15 12:44:39 +0100294 dispatcher_.DispatchPendingEvents();
295 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED,
Darin Petkov721ac932011-11-16 15:43:09 +0100296 capability_->registration_state_1x());
Darin Petkov184c54e2011-11-15 12:44:39 +0100297 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
Darin Petkov721ac932011-11-16 15:43:09 +0100298 capability_->registration_state_evdo());
Eric Shienbrood04e63582012-01-19 13:41:12 -0500299 EXPECT_TRUE(cellular_->service().get());
Darin Petkov184c54e2011-11-15 12:44:39 +0100300}
301
Darin Petkovac635a82012-01-10 16:51:58 +0100302TEST_F(CellularCapabilityCDMATest, CreateFriendlyServiceName) {
303 CellularCapabilityCDMA::friendly_service_name_id_ = 0;
304 EXPECT_EQ("CDMANetwork0", capability_->CreateFriendlyServiceName());
305 EXPECT_EQ("CDMANetwork1", capability_->CreateFriendlyServiceName());
306 static const char kTestCarrier[] = "A Carrier";
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500307 capability_->carrier_ = kTestCarrier;
Darin Petkovac635a82012-01-10 16:51:58 +0100308 EXPECT_EQ(kTestCarrier, capability_->CreateFriendlyServiceName());
309}
310
Darin Petkovcb547732011-11-09 13:55:26 +0100311} // namespace shill