blob: 0f33fb96377e0541af94f0e6f94935f6595e494e [file] [log] [blame]
Darin Petkovcb547732011-11-09 13:55:26 +01001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// 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 Petkov20c13ec2011-11-09 15:07:15 +0100180TEST_F(CellularCapabilityCDMATest, GetNetworkTechnologyString) {
Darin Petkov721ac932011-11-16 15:43:09 +0100181 EXPECT_EQ("", capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100182 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
183 EXPECT_EQ(flimflam::kNetworkTechnologyEvdo,
Darin Petkov721ac932011-11-16 15:43:09 +0100184 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100185 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
186 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
187 EXPECT_EQ(flimflam::kNetworkTechnology1Xrtt,
Darin Petkov721ac932011-11-16 15:43:09 +0100188 capability_->GetNetworkTechnologyString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100189}
190
191TEST_F(CellularCapabilityCDMATest, GetRoamingStateString) {
192 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100193 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100194 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
195 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100196 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100197 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100198 EXPECT_EQ(flimflam::kRoamingStateHome, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100199 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
200 EXPECT_EQ(flimflam::kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100201 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100202 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
203 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
204 EXPECT_EQ(flimflam::kRoamingStateUnknown,
Darin Petkov721ac932011-11-16 15:43:09 +0100205 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100206 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
Darin Petkov721ac932011-11-16 15:43:09 +0100207 EXPECT_EQ(flimflam::kRoamingStateHome, capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100208 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
209 EXPECT_EQ(flimflam::kRoamingStateRoaming,
Darin Petkov721ac932011-11-16 15:43:09 +0100210 capability_->GetRoamingStateString());
Darin Petkov20c13ec2011-11-09 15:07:15 +0100211}
212
Darin Petkov3e509242011-11-10 14:46:44 +0100213TEST_F(CellularCapabilityCDMATest, GetSignalQuality) {
214 const int kStrength = 90;
215 EXPECT_CALL(*proxy_, GetSignalQuality()).WillOnce(Return(kStrength));
216 SetProxy();
217 SetService();
218 EXPECT_EQ(0, cellular_->service()->strength());
Darin Petkov721ac932011-11-16 15:43:09 +0100219 capability_->GetSignalQuality();
Darin Petkov3e509242011-11-10 14:46:44 +0100220 EXPECT_EQ(kStrength, cellular_->service()->strength());
221}
222
Darin Petkov184c54e2011-11-15 12:44:39 +0100223TEST_F(CellularCapabilityCDMATest, GetRegistrationState) {
224 EXPECT_FALSE(cellular_->service().get());
225 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
Darin Petkov721ac932011-11-16 15:43:09 +0100226 capability_->registration_state_1x());
Darin Petkov184c54e2011-11-15 12:44:39 +0100227 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
Darin Petkov721ac932011-11-16 15:43:09 +0100228 capability_->registration_state_evdo());
Darin Petkov184c54e2011-11-15 12:44:39 +0100229 EXPECT_CALL(*proxy_, GetRegistrationState(_, _))
230 .WillOnce(DoAll(
231 SetArgumentPointee<0>(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED),
232 SetArgumentPointee<1>(MM_MODEM_CDMA_REGISTRATION_STATE_HOME)));
233 EXPECT_CALL(*proxy_, GetSignalQuality()).WillOnce(Return(90));
234 SetProxy();
Darin Petkov721ac932011-11-16 15:43:09 +0100235 capability_->GetRegistrationState();
Darin Petkov184c54e2011-11-15 12:44:39 +0100236 dispatcher_.DispatchPendingEvents();
237 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED,
Darin Petkov721ac932011-11-16 15:43:09 +0100238 capability_->registration_state_1x());
Darin Petkov184c54e2011-11-15 12:44:39 +0100239 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
Darin Petkov721ac932011-11-16 15:43:09 +0100240 capability_->registration_state_evdo());
Darin Petkov184c54e2011-11-15 12:44:39 +0100241 ASSERT_TRUE(cellular_->service().get());
242}
243
Darin Petkovcb547732011-11-09 13:55:26 +0100244} // namespace shill