blob: 12c4ff36c3f8873a7ab02a966b65c50f09e9a765 [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()),
38 capability_(cellular_.get()) {}
39
Darin Petkov3e509242011-11-10 14:46:44 +010040 virtual ~CellularCapabilityCDMATest() {
41 cellular_->service_ = NULL;
42 }
43
Darin Petkov184c54e2011-11-15 12:44:39 +010044 virtual void TearDown() {
45 CellularCapability *capability = cellular_->capability_.release();
46 ASSERT_TRUE(capability == NULL || capability == &capability_);
47 }
48
Darin Petkovcb547732011-11-09 13:55:26 +010049 protected:
50 static const char kMEID[];
Darin Petkova3d3be52011-11-14 21:34:16 +010051 static const char kTestCarrier[];
Darin Petkovcb547732011-11-09 13:55:26 +010052
Darin Petkov20c13ec2011-11-09 15:07:15 +010053 void SetRegistrationStateEVDO(uint32 state) {
Darin Petkov184c54e2011-11-15 12:44:39 +010054 capability_.registration_state_evdo_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +010055 }
56
57 void SetRegistrationState1x(uint32 state) {
Darin Petkov184c54e2011-11-15 12:44:39 +010058 capability_.registration_state_1x_ = state;
Darin Petkov20c13ec2011-11-09 15:07:15 +010059 }
60
Darin Petkov3e509242011-11-10 14:46:44 +010061 void SetProxy() {
Darin Petkov184c54e2011-11-15 12:44:39 +010062 capability_.proxy_.reset(proxy_.release());
Darin Petkov3e509242011-11-10 14:46:44 +010063 }
64
65 void SetService() {
66 cellular_->service_ = new CellularService(
67 &control_, &dispatcher_, NULL, cellular_);
68 }
69
Darin Petkov184c54e2011-11-15 12:44:39 +010070 void SetCapability() {
71 ASSERT_FALSE(cellular_->capability_.get());
72 cellular_->capability_.reset(&capability_);
73 }
74
Darin Petkova3d3be52011-11-14 21:34:16 +010075 void SetDeviceState(Cellular::State state) {
76 cellular_->state_ = state;
77 }
78
Darin Petkovcb547732011-11-09 13:55:26 +010079 NiceMockControl control_;
80 EventDispatcher dispatcher_;
81 CellularRefPtr cellular_;
82 scoped_ptr<MockModemCDMAProxy> proxy_;
83 CellularCapabilityCDMA capability_;
84};
85
86const char CellularCapabilityCDMATest::kMEID[] = "D1234567EF8901";
Darin Petkova3d3be52011-11-14 21:34:16 +010087const char CellularCapabilityCDMATest::kTestCarrier[] = "The Cellular Carrier";
88
89TEST_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));
94 capability_.Activate(kTestCarrier, &error);
95 EXPECT_TRUE(error.IsSuccess());
96 SetProxy();
97 SetService();
98 dispatcher_.DispatchPendingEvents();
99 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING,
Darin Petkovae0c64e2011-11-15 15:50:27 +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;
108 capability_.Activate(kTestCarrier, &error);
109 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));
115 capability_.Activate(kTestCarrier, &error);
116 EXPECT_TRUE(error.IsSuccess());
117 SetProxy();
118 SetService();
119 dispatcher_.DispatchPendingEvents();
120 EXPECT_EQ(MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED,
Darin Petkovae0c64e2011-11-15 15:50:27 +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 Petkovcb547732011-11-09 13:55:26 +0100174 capability_.GetIdentifiers();
175 EXPECT_EQ(kMEID, cellular_->meid());
176 capability_.GetIdentifiers();
177 EXPECT_EQ(kMEID, cellular_->meid());
178}
179
Darin Petkov20c13ec2011-11-09 15:07:15 +0100180TEST_F(CellularCapabilityCDMATest, GetNetworkTechnologyString) {
181 EXPECT_EQ("", capability_.GetNetworkTechnologyString());
182 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
183 EXPECT_EQ(flimflam::kNetworkTechnologyEvdo,
184 capability_.GetNetworkTechnologyString());
185 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
186 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
187 EXPECT_EQ(flimflam::kNetworkTechnology1Xrtt,
188 capability_.GetNetworkTechnologyString());
189}
190
191TEST_F(CellularCapabilityCDMATest, GetRoamingStateString) {
192 EXPECT_EQ(flimflam::kRoamingStateUnknown,
193 capability_.GetRoamingStateString());
194 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
195 EXPECT_EQ(flimflam::kRoamingStateUnknown,
196 capability_.GetRoamingStateString());
197 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
198 EXPECT_EQ(flimflam::kRoamingStateHome, capability_.GetRoamingStateString());
199 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
200 EXPECT_EQ(flimflam::kRoamingStateRoaming,
201 capability_.GetRoamingStateString());
202 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
203 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
204 EXPECT_EQ(flimflam::kRoamingStateUnknown,
205 capability_.GetRoamingStateString());
206 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
207 EXPECT_EQ(flimflam::kRoamingStateHome, capability_.GetRoamingStateString());
208 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
209 EXPECT_EQ(flimflam::kRoamingStateRoaming,
210 capability_.GetRoamingStateString());
211}
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());
219 capability_.GetSignalQuality();
220 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,
226 capability_.registration_state_1x());
227 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
228 capability_.registration_state_evdo());
229 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();
235 capability_.GetRegistrationState();
236 SetCapability();
237 dispatcher_.DispatchPendingEvents();
238 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED,
239 capability_.registration_state_1x());
240 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
241 capability_.registration_state_evdo());
242 ASSERT_TRUE(cellular_->service().get());
243}
244
Darin Petkovcb547732011-11-09 13:55:26 +0100245} // namespace shill