blob: 15578dbd06819666f650d1cc7b2c2dc55a6ef820 [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
Darin Petkov20c13ec2011-11-09 15:07:15 +01007#include <chromeos/dbus/service_constants.h>
Darin Petkovcb547732011-11-09 13:55:26 +01008#include <gtest/gtest.h>
Darin Petkov20c13ec2011-11-09 15:07:15 +01009#include <mm/mm-modem.h>
Darin Petkovcb547732011-11-09 13:55:26 +010010
11#include "shill/cellular.h"
Darin Petkov3e509242011-11-10 14:46:44 +010012#include "shill/cellular_service.h"
Darin Petkovcb547732011-11-09 13:55:26 +010013#include "shill/error.h"
14#include "shill/event_dispatcher.h"
15#include "shill/mock_modem_cdma_proxy.h"
16#include "shill/nice_mock_control.h"
17
Darin Petkov184c54e2011-11-15 12:44:39 +010018using testing::_;
Darin Petkovcb547732011-11-09 13:55:26 +010019using testing::Return;
Darin Petkov184c54e2011-11-15 12:44:39 +010020using testing::SetArgumentPointee;
Darin Petkovcb547732011-11-09 13:55:26 +010021
22namespace shill {
23
24class CellularCapabilityCDMATest : public testing::Test {
25 public:
26 CellularCapabilityCDMATest()
27 : cellular_(new Cellular(&control_,
28 &dispatcher_,
29 NULL,
30 "",
31 "",
32 0,
33 Cellular::kTypeCDMA,
34 "",
35 "",
36 NULL)),
37 proxy_(new MockModemCDMAProxy()),
Darin Petkov721ac932011-11-16 15:43:09 +010038 capability_(NULL) {}
Darin Petkovcb547732011-11-09 13:55:26 +010039
Darin Petkov3e509242011-11-10 14:46:44 +010040 virtual ~CellularCapabilityCDMATest() {
41 cellular_->service_ = NULL;
Darin Petkov721ac932011-11-16 15:43:09 +010042 capability_ = NULL;
Darin Petkov3e509242011-11-10 14:46:44 +010043 }
44
Darin Petkov721ac932011-11-16 15:43:09 +010045 virtual void SetUp() {
46 capability_ =
47 dynamic_cast<CellularCapabilityCDMA *>(cellular_->capability_.get());
Darin Petkov184c54e2011-11-15 12:44:39 +010048 }
49
Darin Petkovcb547732011-11-09 13:55:26 +010050 protected:
51 static const char kMEID[];
Darin Petkova3d3be52011-11-14 21:34:16 +010052 static const char kTestCarrier[];
Darin Petkovcb547732011-11-09 13:55:26 +010053
Darin Petkov20c13ec2011-11-09 15:07:15 +010054 void SetRegistrationStateEVDO(uint32 state) {
Darin Petkov721ac932011-11-16 15:43:09 +010055 capability_->registration_state_evdo_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +010056 }
57
58 void SetRegistrationState1x(uint32 state) {
Darin Petkov721ac932011-11-16 15:43:09 +010059 capability_->registration_state_1x_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +010060 }
61
Darin Petkov3e509242011-11-10 14:46:44 +010062 void SetProxy() {
Darin Petkov721ac932011-11-16 15:43:09 +010063 capability_->proxy_.reset(proxy_.release());
Darin Petkov3e509242011-11-10 14:46:44 +010064 }
65
66 void SetService() {
67 cellular_->service_ = new CellularService(
68 &control_, &dispatcher_, NULL, cellular_);
69 }
70
Darin Petkova3d3be52011-11-14 21:34:16 +010071 void SetDeviceState(Cellular::State state) {
72 cellular_->state_ = state;
73 }
74
Darin Petkovcb547732011-11-09 13:55:26 +010075 NiceMockControl control_;
76 EventDispatcher dispatcher_;
77 CellularRefPtr cellular_;
78 scoped_ptr<MockModemCDMAProxy> proxy_;
Darin Petkov721ac932011-11-16 15:43:09 +010079 CellularCapabilityCDMA *capability_; // Owned by |cellular_|.
Darin Petkovcb547732011-11-09 13:55:26 +010080};
81
82const char CellularCapabilityCDMATest::kMEID[] = "D1234567EF8901";
Darin Petkova3d3be52011-11-14 21:34:16 +010083const char CellularCapabilityCDMATest::kTestCarrier[] = "The Cellular Carrier";
84
Darin Petkov721ac932011-11-16 15:43:09 +010085TEST_F(CellularCapabilityCDMATest, PropertyStore) {
86 EXPECT_TRUE(cellular_->store().Contains(flimflam::kPRLVersionProperty));
87}
88
Darin Petkova3d3be52011-11-14 21:34:16 +010089TEST_F(CellularCapabilityCDMATest, Activate) {
90 Error error;
91 SetDeviceState(Cellular::kStateEnabled);
92 EXPECT_CALL(*proxy_, Activate(kTestCarrier))
93 .WillOnce(Return(MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR));
Darin Petkov721ac932011-11-16 15:43:09 +010094 capability_->Activate(kTestCarrier, &error);
Darin Petkova3d3be52011-11-14 21:34:16 +010095 EXPECT_TRUE(error.IsSuccess());
96 SetProxy();
97 SetService();
98 dispatcher_.DispatchPendingEvents();
99 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING,
Darin Petkov721ac932011-11-16 15:43:09 +0100100 capability_->activation_state());
Darin Petkova3d3be52011-11-14 21:34:16 +0100101 EXPECT_EQ(flimflam::kActivationStateActivating,
102 cellular_->service()->activation_state());
103 EXPECT_EQ("", cellular_->service()->error());
104}
105
106TEST_F(CellularCapabilityCDMATest, ActivateError) {
107 Error error;
Darin Petkov721ac932011-11-16 15:43:09 +0100108 capability_->Activate(kTestCarrier, &error);
Darin Petkova3d3be52011-11-14 21:34:16 +0100109 EXPECT_EQ(Error::kInvalidArguments, error.type());
110
111 error.Reset();
112 SetDeviceState(Cellular::kStateRegistered);
113 EXPECT_CALL(*proxy_, Activate(kTestCarrier))
114 .WillOnce(Return(MM_MODEM_CDMA_ACTIVATION_ERROR_NO_SIGNAL));
Darin Petkov721ac932011-11-16 15:43:09 +0100115 capability_->Activate(kTestCarrier, &error);
Darin Petkova3d3be52011-11-14 21:34:16 +0100116 EXPECT_TRUE(error.IsSuccess());
117 SetProxy();
118 SetService();
119 dispatcher_.DispatchPendingEvents();
120 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED,
Darin Petkov721ac932011-11-16 15:43:09 +0100121 capability_->activation_state());
Darin Petkova3d3be52011-11-14 21:34:16 +0100122 EXPECT_EQ(flimflam::kActivationStateNotActivated,
123 cellular_->service()->activation_state());
124 EXPECT_EQ(flimflam::kErrorActivationFailed,
125 cellular_->service()->error());
126}
Darin Petkovcb547732011-11-09 13:55:26 +0100127
Darin Petkovae0c64e2011-11-15 15:50:27 +0100128TEST_F(CellularCapabilityCDMATest, GetActivationStateString) {
129 EXPECT_EQ(flimflam::kActivationStateActivated,
130 CellularCapabilityCDMA::GetActivationStateString(
131 MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATED));
132 EXPECT_EQ(flimflam::kActivationStateActivating,
133 CellularCapabilityCDMA::GetActivationStateString(
134 MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING));
135 EXPECT_EQ(flimflam::kActivationStateNotActivated,
136 CellularCapabilityCDMA::GetActivationStateString(
137 MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED));
138 EXPECT_EQ(flimflam::kActivationStatePartiallyActivated,
139 CellularCapabilityCDMA::GetActivationStateString(
140 MM_MODEM_CDMA_ACTIVATION_STATE_PARTIALLY_ACTIVATED));
141 EXPECT_EQ(flimflam::kActivationStateUnknown,
142 CellularCapabilityCDMA::GetActivationStateString(123));
143}
144
145TEST_F(CellularCapabilityCDMATest, GetActivationErrorString) {
146 EXPECT_EQ(flimflam::kErrorNeedEvdo,
147 CellularCapabilityCDMA::GetActivationErrorString(
148 MM_MODEM_CDMA_ACTIVATION_ERROR_WRONG_RADIO_INTERFACE));
149 EXPECT_EQ(flimflam::kErrorNeedHomeNetwork,
150 CellularCapabilityCDMA::GetActivationErrorString(
151 MM_MODEM_CDMA_ACTIVATION_ERROR_ROAMING));
152 EXPECT_EQ(flimflam::kErrorOtaspFailed,
153 CellularCapabilityCDMA::GetActivationErrorString(
154 MM_MODEM_CDMA_ACTIVATION_ERROR_COULD_NOT_CONNECT));
155 EXPECT_EQ(flimflam::kErrorOtaspFailed,
156 CellularCapabilityCDMA::GetActivationErrorString(
157 MM_MODEM_CDMA_ACTIVATION_ERROR_SECURITY_AUTHENTICATION_FAILED));
158 EXPECT_EQ(flimflam::kErrorOtaspFailed,
159 CellularCapabilityCDMA::GetActivationErrorString(
160 MM_MODEM_CDMA_ACTIVATION_ERROR_PROVISIONING_FAILED));
161 EXPECT_EQ("",
162 CellularCapabilityCDMA::GetActivationErrorString(
163 MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR));
164 EXPECT_EQ(flimflam::kErrorActivationFailed,
165 CellularCapabilityCDMA::GetActivationErrorString(
166 MM_MODEM_CDMA_ACTIVATION_ERROR_NO_SIGNAL));
167 EXPECT_EQ(flimflam::kErrorActivationFailed,
168 CellularCapabilityCDMA::GetActivationErrorString(1234));
169}
170
Darin Petkovcb547732011-11-09 13:55:26 +0100171TEST_F(CellularCapabilityCDMATest, GetIdentifiers) {
172 EXPECT_CALL(*proxy_, MEID()).WillOnce(Return(kMEID));
Darin Petkov3e509242011-11-10 14:46:44 +0100173 SetProxy();
Darin Petkov721ac932011-11-16 15:43:09 +0100174 capability_->GetIdentifiers();
Darin Petkovcb547732011-11-09 13:55:26 +0100175 EXPECT_EQ(kMEID, cellular_->meid());
Darin Petkov721ac932011-11-16 15:43:09 +0100176 capability_->GetIdentifiers();
Darin Petkovcb547732011-11-09 13:55:26 +0100177 EXPECT_EQ(kMEID, cellular_->meid());
178}
179
Darin Petkovb72cf402011-11-22 14:51:39 +0100180TEST_F(CellularCapabilityCDMATest, IsRegisteredEVDO) {
181 EXPECT_FALSE(capability_->IsRegistered());
182 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
183 EXPECT_FALSE(capability_->IsRegistered());
184 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
185 EXPECT_TRUE(capability_->IsRegistered());
186 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
187 EXPECT_TRUE(capability_->IsRegistered());
188 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
189 EXPECT_TRUE(capability_->IsRegistered());
190}
191
192TEST_F(CellularCapabilityCDMATest, IsRegistered1x) {
193 EXPECT_FALSE(capability_->IsRegistered());
194 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
195 EXPECT_FALSE(capability_->IsRegistered());
196 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
197 EXPECT_TRUE(capability_->IsRegistered());
198 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
199 EXPECT_TRUE(capability_->IsRegistered());
200 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
201 EXPECT_TRUE(capability_->IsRegistered());
202}
203
Darin Petkov20c13ec2011-11-09 15:07:15 +0100204TEST_F(CellularCapabilityCDMATest, GetNetworkTechnologyString) {
Darin Petkov721ac932011-11-16 15:43:09 +0100205 EXPECT_EQ("", capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100206 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
207 EXPECT_EQ(flimflam::kNetworkTechnologyEvdo,
Darin Petkov721ac932011-11-16 15:43:09 +0100208 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100209 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
210 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
211 EXPECT_EQ(flimflam::kNetworkTechnology1Xrtt,
Darin Petkov721ac932011-11-16 15:43:09 +0100212 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100213}
214
215TEST_F(CellularCapabilityCDMATest, GetRoamingStateString) {
216 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100217 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100218 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
219 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100220 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100221 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100222 EXPECT_EQ(flimflam::kRoamingStateHome, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100223 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
224 EXPECT_EQ(flimflam::kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100225 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100226 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
227 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
228 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100229 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100230 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100231 EXPECT_EQ(flimflam::kRoamingStateHome, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100232 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
233 EXPECT_EQ(flimflam::kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100234 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100235}
236
Darin Petkov3e509242011-11-10 14:46:44 +0100237TEST_F(CellularCapabilityCDMATest, GetSignalQuality) {
238 const int kStrength = 90;
239 EXPECT_CALL(*proxy_, GetSignalQuality()).WillOnce(Return(kStrength));
240 SetProxy();
241 SetService();
242 EXPECT_EQ(0, cellular_->service()->strength());
Darin Petkov721ac932011-11-16 15:43:09 +0100243 capability_->GetSignalQuality();
Darin Petkov3e509242011-11-10 14:46:44 +0100244 EXPECT_EQ(kStrength, cellular_->service()->strength());
245}
246
Darin Petkov184c54e2011-11-15 12:44:39 +0100247TEST_F(CellularCapabilityCDMATest, GetRegistrationState) {
248 EXPECT_FALSE(cellular_->service().get());
249 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
Darin Petkov721ac932011-11-16 15:43:09 +0100250 capability_->registration_state_1x());
Darin Petkov184c54e2011-11-15 12:44:39 +0100251 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
Darin Petkov721ac932011-11-16 15:43:09 +0100252 capability_->registration_state_evdo());
Darin Petkov184c54e2011-11-15 12:44:39 +0100253 EXPECT_CALL(*proxy_, GetRegistrationState(_, _))
254 .WillOnce(DoAll(
255 SetArgumentPointee<0>(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED),
256 SetArgumentPointee<1>(MM_MODEM_CDMA_REGISTRATION_STATE_HOME)));
257 EXPECT_CALL(*proxy_, GetSignalQuality()).WillOnce(Return(90));
258 SetProxy();
Darin Petkov721ac932011-11-16 15:43:09 +0100259 capability_->GetRegistrationState();
Darin Petkov184c54e2011-11-15 12:44:39 +0100260 dispatcher_.DispatchPendingEvents();
261 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED,
Darin Petkov721ac932011-11-16 15:43:09 +0100262 capability_->registration_state_1x());
Darin Petkov184c54e2011-11-15 12:44:39 +0100263 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
Darin Petkov721ac932011-11-16 15:43:09 +0100264 capability_->registration_state_evdo());
Darin Petkov184c54e2011-11-15 12:44:39 +0100265 ASSERT_TRUE(cellular_->service().get());
266}
267
Darin Petkovac635a82012-01-10 16:51:58 +0100268TEST_F(CellularCapabilityCDMATest, CreateFriendlyServiceName) {
269 CellularCapabilityCDMA::friendly_service_name_id_ = 0;
270 EXPECT_EQ("CDMANetwork0", capability_->CreateFriendlyServiceName());
271 EXPECT_EQ("CDMANetwork1", capability_->CreateFriendlyServiceName());
272 static const char kTestCarrier[] = "A Carrier";
273 cellular_->carrier_ = kTestCarrier;
274 EXPECT_EQ(kTestCarrier, capability_->CreateFriendlyServiceName());
275}
276
Darin Petkovcb547732011-11-09 13:55:26 +0100277} // namespace shill