blob: 7aaffd2e919fc6e9df2dffaa0a699d5a20136930 [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
Ben Chanc54afe52014-11-05 10:28:08 -08005#include "shill/cellular/cellular_capability_cdma.h"
Darin Petkovcb547732011-11-09 13:55:26 +01006
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
Ben Chanc54afe52014-11-05 10:28:08 -080012#include "shill/cellular/cellular.h"
13#include "shill/cellular/cellular_service.h"
14#include "shill/cellular/mock_cellular.h"
15#include "shill/cellular/mock_modem_cdma_proxy.h"
16#include "shill/cellular/mock_modem_info.h"
17#include "shill/cellular/mock_modem_proxy.h"
Darin Petkovcb547732011-11-09 13:55:26 +010018#include "shill/error.h"
19#include "shill/event_dispatcher.h"
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050020#include "shill/mock_adaptors.h"
Ben Chan3ecdf822012-08-06 12:29:23 -070021#include "shill/proxy_factory.h"
Darin Petkovcb547732011-11-09 13:55:26 +010022
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::_;
Christopher Wiley7d0953e2012-11-16 00:37:10 -080027using testing::InSequence;
Eric Shienbrood9a245532012-03-07 14:20:39 -050028using testing::Invoke;
Darin Petkovcb547732011-11-09 13:55:26 +010029using testing::Return;
Samuel Tan0d061192014-07-07 15:45:15 -070030using testing::StrEq;
Darin Petkovcb547732011-11-09 13:55:26 +010031
32namespace shill {
33
34class CellularCapabilityCDMATest : public testing::Test {
35 public:
36 CellularCapabilityCDMATest()
Ben Chanea18c6c2014-09-30 13:08:26 -070037 : modem_info_(nullptr, &dispatcher_, nullptr, nullptr, nullptr),
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070038 cellular_(new MockCellular(&modem_info_,
Christopher Wiley7d0953e2012-11-16 00:37:10 -080039 "",
40 "",
41 0,
42 Cellular::kTypeCDMA,
43 "",
44 "",
45 "",
Christopher Wiley7d0953e2012-11-16 00:37:10 -080046 ProxyFactory::GetInstance())),
47 classic_proxy_(new MockModemProxy()),
Darin Petkovcb547732011-11-09 13:55:26 +010048 proxy_(new MockModemCDMAProxy()),
Ben Chanea18c6c2014-09-30 13:08:26 -070049 capability_(nullptr) {
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070050 modem_info_.metrics()->RegisterDevice(cellular_->interface_index(),
51 Technology::kCellular);
Thieu Lece4483e2013-01-23 15:12:03 -080052 }
Darin Petkovcb547732011-11-09 13:55:26 +010053
Darin Petkov3e509242011-11-10 14:46:44 +010054 virtual ~CellularCapabilityCDMATest() {
Ben Chanea18c6c2014-09-30 13:08:26 -070055 cellular_->service_ = nullptr;
56 capability_ = nullptr;
Darin Petkov3e509242011-11-10 14:46:44 +010057 }
58
Darin Petkov721ac932011-11-16 15:43:09 +010059 virtual void SetUp() {
60 capability_ =
Paul Stewart2f6c7892015-06-16 13:13:10 -070061 dynamic_cast<CellularCapabilityCDMA*>(cellular_->capability_.get());
Darin Petkov184c54e2011-11-15 12:44:39 +010062 }
63
Paul Stewart2f6c7892015-06-16 13:13:10 -070064 void InvokeActivate(const string& carrier, Error* error,
65 const ActivationResultCallback& callback,
Eric Shienbrood9a245532012-03-07 14:20:39 -050066 int timeout) {
67 callback.Run(MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR, Error());
68 }
Paul Stewart2f6c7892015-06-16 13:13:10 -070069 void InvokeActivateError(const string& carrier, Error* error,
70 const ActivationResultCallback& callback,
Eric Shienbrood9a245532012-03-07 14:20:39 -050071 int timeout) {
72 callback.Run(MM_MODEM_CDMA_ACTIVATION_ERROR_NO_SIGNAL, Error());
73 }
Paul Stewart2f6c7892015-06-16 13:13:10 -070074 void InvokeDisconnect(Error* error,
75 const ResultCallback& callback,
Christopher Wiley7d0953e2012-11-16 00:37:10 -080076 int timeout) {
77 callback.Run(Error());
78 }
Paul Stewart2f6c7892015-06-16 13:13:10 -070079 void InvokeDisconnectError(Error* error,
80 const ResultCallback& callback,
Christopher Wiley7d0953e2012-11-16 00:37:10 -080081 int timeout) {
82 Error err(Error::kOperationFailed);
83 callback.Run(err);
84 }
Paul Stewart2f6c7892015-06-16 13:13:10 -070085 void InvokeGetSignalQuality(Error* error,
86 const SignalQualityCallback& callback,
Eric Shienbrood9a245532012-03-07 14:20:39 -050087 int timeout) {
88 callback.Run(kStrength, Error());
89 }
Paul Stewart2f6c7892015-06-16 13:13:10 -070090 void InvokeGetRegistrationState(Error* error,
91 const RegistrationStateCallback& callback,
Eric Shienbrood9a245532012-03-07 14:20:39 -050092 int timeout) {
93 callback.Run(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED,
94 MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
95 Error());
96 }
97
Paul Stewart2f6c7892015-06-16 13:13:10 -070098 MOCK_METHOD1(TestCallback, void(const Error& error));
Eric Shienbrood9a245532012-03-07 14:20:39 -050099
Darin Petkovcb547732011-11-09 13:55:26 +0100100 protected:
101 static const char kMEID[];
Darin Petkova3d3be52011-11-14 21:34:16 +0100102 static const char kTestCarrier[];
Eric Shienbrood9a245532012-03-07 14:20:39 -0500103 static const unsigned int kStrength;
Darin Petkovcb547732011-11-09 13:55:26 +0100104
Christopher Wiley1582bdd2012-11-15 11:31:14 -0800105 bool IsActivationStarting() const {
106 return capability_->activation_starting_;
107 }
108
Ben Chan7fab8972014-08-10 17:14:46 -0700109 void SetRegistrationStateEVDO(uint32_t state) {
Darin Petkov721ac932011-11-16 15:43:09 +0100110 capability_->registration_state_evdo_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +0100111 }
112
Ben Chan7fab8972014-08-10 17:14:46 -0700113 void SetRegistrationState1x(uint32_t state) {
Darin Petkov721ac932011-11-16 15:43:09 +0100114 capability_->registration_state_1x_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +0100115 }
116
Darin Petkov3e509242011-11-10 14:46:44 +0100117 void SetProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +0100118 capability_->proxy_.reset(proxy_.release());
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800119 capability_->CellularCapabilityClassic::proxy_.reset(
120 classic_proxy_.release());
Darin Petkov3e509242011-11-10 14:46:44 +0100121 }
122
123 void SetService() {
Prathmesh Prabhu0d36b4f2013-04-01 11:45:54 -0700124 cellular_->service_ = new CellularService(&modem_info_, cellular_);
Darin Petkov3e509242011-11-10 14:46:44 +0100125 }
126
Darin Petkova3d3be52011-11-14 21:34:16 +0100127 void SetDeviceState(Cellular::State state) {
128 cellular_->state_ = state;
129 }
130
Darin Petkovcb547732011-11-09 13:55:26 +0100131 EventDispatcher dispatcher_;
Prathmesh Prabhu27526f12013-03-25 19:42:18 -0700132 MockModemInfo modem_info_;
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800133 scoped_refptr<MockCellular> cellular_;
Ben Chanc20ed132014-10-16 12:25:03 -0700134 std::unique_ptr<MockModemProxy> classic_proxy_;
135 std::unique_ptr<MockModemCDMAProxy> proxy_;
Paul Stewart2f6c7892015-06-16 13:13:10 -0700136 CellularCapabilityCDMA* capability_; // Owned by |cellular_|.
Darin Petkovcb547732011-11-09 13:55:26 +0100137};
138
139const char CellularCapabilityCDMATest::kMEID[] = "D1234567EF8901";
Darin Petkova3d3be52011-11-14 21:34:16 +0100140const char CellularCapabilityCDMATest::kTestCarrier[] = "The Cellular Carrier";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500141const unsigned int CellularCapabilityCDMATest::kStrength = 90;
Darin Petkova3d3be52011-11-14 21:34:16 +0100142
Darin Petkov721ac932011-11-16 15:43:09 +0100143TEST_F(CellularCapabilityCDMATest, PropertyStore) {
Ben Chan7ea768e2013-09-20 15:08:40 -0700144 EXPECT_TRUE(cellular_->store().Contains(kPRLVersionProperty));
Darin Petkov721ac932011-11-16 15:43:09 +0100145}
146
Darin Petkova3d3be52011-11-14 21:34:16 +0100147TEST_F(CellularCapabilityCDMATest, Activate) {
Darin Petkova3d3be52011-11-14 21:34:16 +0100148 SetDeviceState(Cellular::kStateEnabled);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500149 EXPECT_CALL(*proxy_, Activate(kTestCarrier, _, _,
150 CellularCapability::kTimeoutActivate))
151 .WillOnce(Invoke(this,
152 &CellularCapabilityCDMATest::InvokeActivate));
153 EXPECT_CALL(*this, TestCallback(_));
Darin Petkova3d3be52011-11-14 21:34:16 +0100154 SetProxy();
155 SetService();
Ben Chanea18c6c2014-09-30 13:08:26 -0700156 capability_->Activate(kTestCarrier, nullptr,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500157 Bind(&CellularCapabilityCDMATest::TestCallback, Unretained(this)));
Darin Petkova3d3be52011-11-14 21:34:16 +0100158 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING,
Darin Petkov721ac932011-11-16 15:43:09 +0100159 capability_->activation_state());
Ben Chan7ea768e2013-09-20 15:08:40 -0700160 EXPECT_EQ(kActivationStateActivating,
Darin Petkova3d3be52011-11-14 21:34:16 +0100161 cellular_->service()->activation_state());
162 EXPECT_EQ("", cellular_->service()->error());
163}
164
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800165TEST_F(CellularCapabilityCDMATest, ActivateWhileConnected) {
166 SetDeviceState(Cellular::kStateConnected);
167 {
168 InSequence dummy;
169
Samuel Tan0d061192014-07-07 15:45:15 -0700170 EXPECT_CALL(*cellular_, Disconnect(_, StrEq("Activate")));
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800171 EXPECT_CALL(*proxy_, Activate(kTestCarrier, _, _,
172 CellularCapability::kTimeoutActivate))
173 .WillOnce(Invoke(this,
174 &CellularCapabilityCDMATest::InvokeActivate));
175 EXPECT_CALL(*this, TestCallback(_));
176 }
177 SetProxy();
178 SetService();
179 Error error;
180 capability_->Activate(kTestCarrier, &error,
181 Bind(&CellularCapabilityCDMATest::TestCallback, Unretained(this)));
Christopher Wiley8a468902012-11-30 11:52:38 -0800182 // So now we should be "activating" while we wait for a disconnect.
183 EXPECT_TRUE(IsActivationStarting());
184 EXPECT_TRUE(capability_->IsActivating());
185 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED,
186 capability_->activation_state());
187 // Simulate a disconnect.
188 SetDeviceState(Cellular::kStateRegistered);
189 capability_->DisconnectCleanup();
190 // Now the modem is actually activating.
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800191 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING,
192 capability_->activation_state());
Ben Chan7ea768e2013-09-20 15:08:40 -0700193 EXPECT_EQ(kActivationStateActivating,
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800194 cellular_->service()->activation_state());
195 EXPECT_EQ("", cellular_->service()->error());
Christopher Wiley1582bdd2012-11-15 11:31:14 -0800196 EXPECT_FALSE(IsActivationStarting());
197 EXPECT_TRUE(capability_->IsActivating());
198}
199
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800200TEST_F(CellularCapabilityCDMATest, ActivateWhileConnectedButFail) {
201 SetDeviceState(Cellular::kStateConnected);
202 {
203 InSequence dummy;
204
Samuel Tan0d061192014-07-07 15:45:15 -0700205 EXPECT_CALL(*cellular_, Disconnect(_, StrEq("Activate")));
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800206 EXPECT_CALL(*proxy_, Activate(kTestCarrier, _, _,
207 CellularCapability::kTimeoutActivate))
208 .Times(0);
209 }
210 SetProxy();
211 SetService();
212 Error error;
213 capability_->Activate(kTestCarrier, &error,
214 Bind(&CellularCapabilityCDMATest::TestCallback, Unretained(this)));
Christopher Wiley8a468902012-11-30 11:52:38 -0800215 // So now we should be "activating" while we wait for a disconnect.
216 EXPECT_TRUE(IsActivationStarting());
217 EXPECT_TRUE(capability_->IsActivating());
218 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED,
219 capability_->activation_state());
220 // Similulate a failed disconnect (the modem is still connected!).
221 capability_->DisconnectCleanup();
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800222 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED,
223 capability_->activation_state());
Ben Chan7ea768e2013-09-20 15:08:40 -0700224 EXPECT_EQ(kActivationStateNotActivated,
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800225 cellular_->service()->activation_state());
Ben Chan7ea768e2013-09-20 15:08:40 -0700226 EXPECT_EQ(kErrorActivationFailed, cellular_->service()->error());
Christopher Wiley1582bdd2012-11-15 11:31:14 -0800227 EXPECT_FALSE(IsActivationStarting());
228 EXPECT_FALSE(capability_->IsActivating());
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800229}
230
Darin Petkova3d3be52011-11-14 21:34:16 +0100231TEST_F(CellularCapabilityCDMATest, ActivateError) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500232 SetDeviceState(Cellular::kStateEnabled);
233 EXPECT_CALL(*proxy_, Activate(kTestCarrier, _, _,
234 CellularCapability::kTimeoutActivate))
235 .WillOnce(Invoke(this,
236 &CellularCapabilityCDMATest::InvokeActivateError));
237 EXPECT_CALL(*this, TestCallback(_));
Darin Petkova3d3be52011-11-14 21:34:16 +0100238 SetProxy();
239 SetService();
Ben Chanea18c6c2014-09-30 13:08:26 -0700240 capability_->Activate(kTestCarrier, nullptr,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500241 Bind(&CellularCapabilityCDMATest::TestCallback, Unretained(this)));
Darin Petkova3d3be52011-11-14 21:34:16 +0100242 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED,
Darin Petkov721ac932011-11-16 15:43:09 +0100243 capability_->activation_state());
Ben Chan7ea768e2013-09-20 15:08:40 -0700244 EXPECT_EQ(kActivationStateNotActivated,
Darin Petkova3d3be52011-11-14 21:34:16 +0100245 cellular_->service()->activation_state());
Ben Chan7ea768e2013-09-20 15:08:40 -0700246 EXPECT_EQ(kErrorActivationFailed,
Darin Petkova3d3be52011-11-14 21:34:16 +0100247 cellular_->service()->error());
248}
Darin Petkovcb547732011-11-09 13:55:26 +0100249
Darin Petkovae0c64e2011-11-15 15:50:27 +0100250TEST_F(CellularCapabilityCDMATest, GetActivationStateString) {
Ben Chan7ea768e2013-09-20 15:08:40 -0700251 EXPECT_EQ(kActivationStateActivated,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100252 CellularCapabilityCDMA::GetActivationStateString(
253 MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATED));
Ben Chan7ea768e2013-09-20 15:08:40 -0700254 EXPECT_EQ(kActivationStateActivating,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100255 CellularCapabilityCDMA::GetActivationStateString(
256 MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING));
Ben Chan7ea768e2013-09-20 15:08:40 -0700257 EXPECT_EQ(kActivationStateNotActivated,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100258 CellularCapabilityCDMA::GetActivationStateString(
259 MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED));
Ben Chan7ea768e2013-09-20 15:08:40 -0700260 EXPECT_EQ(kActivationStatePartiallyActivated,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100261 CellularCapabilityCDMA::GetActivationStateString(
262 MM_MODEM_CDMA_ACTIVATION_STATE_PARTIALLY_ACTIVATED));
Ben Chan7ea768e2013-09-20 15:08:40 -0700263 EXPECT_EQ(kActivationStateUnknown,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100264 CellularCapabilityCDMA::GetActivationStateString(123));
265}
266
267TEST_F(CellularCapabilityCDMATest, GetActivationErrorString) {
Ben Chan7ea768e2013-09-20 15:08:40 -0700268 EXPECT_EQ(kErrorNeedEvdo,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100269 CellularCapabilityCDMA::GetActivationErrorString(
270 MM_MODEM_CDMA_ACTIVATION_ERROR_WRONG_RADIO_INTERFACE));
Ben Chan7ea768e2013-09-20 15:08:40 -0700271 EXPECT_EQ(kErrorNeedHomeNetwork,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100272 CellularCapabilityCDMA::GetActivationErrorString(
273 MM_MODEM_CDMA_ACTIVATION_ERROR_ROAMING));
Ben Chan7ea768e2013-09-20 15:08:40 -0700274 EXPECT_EQ(kErrorOtaspFailed,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100275 CellularCapabilityCDMA::GetActivationErrorString(
276 MM_MODEM_CDMA_ACTIVATION_ERROR_COULD_NOT_CONNECT));
Ben Chan7ea768e2013-09-20 15:08:40 -0700277 EXPECT_EQ(kErrorOtaspFailed,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100278 CellularCapabilityCDMA::GetActivationErrorString(
279 MM_MODEM_CDMA_ACTIVATION_ERROR_SECURITY_AUTHENTICATION_FAILED));
Ben Chan7ea768e2013-09-20 15:08:40 -0700280 EXPECT_EQ(kErrorOtaspFailed,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100281 CellularCapabilityCDMA::GetActivationErrorString(
282 MM_MODEM_CDMA_ACTIVATION_ERROR_PROVISIONING_FAILED));
283 EXPECT_EQ("",
284 CellularCapabilityCDMA::GetActivationErrorString(
285 MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR));
Ben Chan7ea768e2013-09-20 15:08:40 -0700286 EXPECT_EQ(kErrorActivationFailed,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100287 CellularCapabilityCDMA::GetActivationErrorString(
288 MM_MODEM_CDMA_ACTIVATION_ERROR_NO_SIGNAL));
Ben Chan7ea768e2013-09-20 15:08:40 -0700289 EXPECT_EQ(kErrorActivationFailed,
Darin Petkovae0c64e2011-11-15 15:50:27 +0100290 CellularCapabilityCDMA::GetActivationErrorString(1234));
291}
292
Darin Petkovb72cf402011-11-22 14:51:39 +0100293TEST_F(CellularCapabilityCDMATest, IsRegisteredEVDO) {
294 EXPECT_FALSE(capability_->IsRegistered());
295 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
296 EXPECT_FALSE(capability_->IsRegistered());
297 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
298 EXPECT_TRUE(capability_->IsRegistered());
299 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
300 EXPECT_TRUE(capability_->IsRegistered());
301 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
302 EXPECT_TRUE(capability_->IsRegistered());
303}
304
305TEST_F(CellularCapabilityCDMATest, IsRegistered1x) {
306 EXPECT_FALSE(capability_->IsRegistered());
307 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
308 EXPECT_FALSE(capability_->IsRegistered());
309 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
310 EXPECT_TRUE(capability_->IsRegistered());
311 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
312 EXPECT_TRUE(capability_->IsRegistered());
313 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
314 EXPECT_TRUE(capability_->IsRegistered());
315}
316
Darin Petkov20c13ec2011-11-09 15:07:15 +0100317TEST_F(CellularCapabilityCDMATest, GetNetworkTechnologyString) {
Darin Petkov721ac932011-11-16 15:43:09 +0100318 EXPECT_EQ("", capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100319 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Ben Chan7ea768e2013-09-20 15:08:40 -0700320 EXPECT_EQ(kNetworkTechnologyEvdo,
Darin Petkov721ac932011-11-16 15:43:09 +0100321 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100322 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
323 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Ben Chan7ea768e2013-09-20 15:08:40 -0700324 EXPECT_EQ(kNetworkTechnology1Xrtt,
Darin Petkov721ac932011-11-16 15:43:09 +0100325 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100326}
327
328TEST_F(CellularCapabilityCDMATest, GetRoamingStateString) {
Ben Chan7ea768e2013-09-20 15:08:40 -0700329 EXPECT_EQ(kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100330 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100331 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
Ben Chan7ea768e2013-09-20 15:08:40 -0700332 EXPECT_EQ(kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100333 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100334 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Ben Chan7ea768e2013-09-20 15:08:40 -0700335 EXPECT_EQ(kRoamingStateHome, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100336 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
Ben Chan7ea768e2013-09-20 15:08:40 -0700337 EXPECT_EQ(kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100338 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100339 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
340 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
Ben Chan7ea768e2013-09-20 15:08:40 -0700341 EXPECT_EQ(kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100342 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100343 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Ben Chan7ea768e2013-09-20 15:08:40 -0700344 EXPECT_EQ(kRoamingStateHome, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100345 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
Ben Chan7ea768e2013-09-20 15:08:40 -0700346 EXPECT_EQ(kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100347 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100348}
349
Darin Petkov3e509242011-11-10 14:46:44 +0100350TEST_F(CellularCapabilityCDMATest, GetSignalQuality) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500351 EXPECT_CALL(*proxy_,
Ben Chanea18c6c2014-09-30 13:08:26 -0700352 GetSignalQuality(nullptr, _, CellularCapability::kTimeoutDefault))
Eric Shienbrood9a245532012-03-07 14:20:39 -0500353 .WillOnce(Invoke(this,
354 &CellularCapabilityCDMATest::InvokeGetSignalQuality));
Darin Petkov3e509242011-11-10 14:46:44 +0100355 SetProxy();
356 SetService();
357 EXPECT_EQ(0, cellular_->service()->strength());
Darin Petkov721ac932011-11-16 15:43:09 +0100358 capability_->GetSignalQuality();
Darin Petkov3e509242011-11-10 14:46:44 +0100359 EXPECT_EQ(kStrength, cellular_->service()->strength());
360}
361
Darin Petkov184c54e2011-11-15 12:44:39 +0100362TEST_F(CellularCapabilityCDMATest, GetRegistrationState) {
363 EXPECT_FALSE(cellular_->service().get());
364 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
Darin Petkov721ac932011-11-16 15:43:09 +0100365 capability_->registration_state_1x());
Darin Petkov184c54e2011-11-15 12:44:39 +0100366 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
Darin Petkov721ac932011-11-16 15:43:09 +0100367 capability_->registration_state_evdo());
Eric Shienbrood9a245532012-03-07 14:20:39 -0500368 EXPECT_CALL(*proxy_,
Ben Chanea18c6c2014-09-30 13:08:26 -0700369 GetRegistrationState(nullptr, _,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500370 CellularCapability::kTimeoutDefault))
371 .WillOnce(Invoke(
372 this,
373 &CellularCapabilityCDMATest::InvokeGetRegistrationState));
Darin Petkov184c54e2011-11-15 12:44:39 +0100374 SetProxy();
Eric Shienbrood9a245532012-03-07 14:20:39 -0500375 cellular_->state_ = Cellular::kStateEnabled;
Prathmesh Prabhu27526f12013-03-25 19:42:18 -0700376 EXPECT_CALL(*modem_info_.mock_manager(), RegisterService(_));
Eric Shienbrood9a245532012-03-07 14:20:39 -0500377 capability_->GetRegistrationState();
Darin Petkov184c54e2011-11-15 12:44:39 +0100378 dispatcher_.DispatchPendingEvents();
379 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED,
Darin Petkov721ac932011-11-16 15:43:09 +0100380 capability_->registration_state_1x());
Darin Petkov184c54e2011-11-15 12:44:39 +0100381 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
Darin Petkov721ac932011-11-16 15:43:09 +0100382 capability_->registration_state_evdo());
Eric Shienbrood04e63582012-01-19 13:41:12 -0500383 EXPECT_TRUE(cellular_->service().get());
Darin Petkov184c54e2011-11-15 12:44:39 +0100384}
385
Darin Petkovcb547732011-11-09 13:55:26 +0100386} // namespace shill