blob: ac584a20bcc0abcf62f1482c06c61a06385b98d3 [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,
100 cellular_->cdma_activation_state());
101 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,
121 cellular_->cdma_activation_state());
122 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
128TEST_F(CellularCapabilityCDMATest, GetIdentifiers) {
129 EXPECT_CALL(*proxy_, MEID()).WillOnce(Return(kMEID));
Darin Petkov3e509242011-11-10 14:46:44 +0100130 SetProxy();
Darin Petkovcb547732011-11-09 13:55:26 +0100131 capability_.GetIdentifiers();
132 EXPECT_EQ(kMEID, cellular_->meid());
133 capability_.GetIdentifiers();
134 EXPECT_EQ(kMEID, cellular_->meid());
135}
136
Darin Petkov20c13ec2011-11-09 15:07:15 +0100137TEST_F(CellularCapabilityCDMATest, GetNetworkTechnologyString) {
138 EXPECT_EQ("", capability_.GetNetworkTechnologyString());
139 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
140 EXPECT_EQ(flimflam::kNetworkTechnologyEvdo,
141 capability_.GetNetworkTechnologyString());
142 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
143 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
144 EXPECT_EQ(flimflam::kNetworkTechnology1Xrtt,
145 capability_.GetNetworkTechnologyString());
146}
147
148TEST_F(CellularCapabilityCDMATest, GetRoamingStateString) {
149 EXPECT_EQ(flimflam::kRoamingStateUnknown,
150 capability_.GetRoamingStateString());
151 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
152 EXPECT_EQ(flimflam::kRoamingStateUnknown,
153 capability_.GetRoamingStateString());
154 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
155 EXPECT_EQ(flimflam::kRoamingStateHome, capability_.GetRoamingStateString());
156 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
157 EXPECT_EQ(flimflam::kRoamingStateRoaming,
158 capability_.GetRoamingStateString());
159 SetRegistrationStateEVDO(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN);
160 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED);
161 EXPECT_EQ(flimflam::kRoamingStateUnknown,
162 capability_.GetRoamingStateString());
163 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_HOME);
164 EXPECT_EQ(flimflam::kRoamingStateHome, capability_.GetRoamingStateString());
165 SetRegistrationState1x(MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING);
166 EXPECT_EQ(flimflam::kRoamingStateRoaming,
167 capability_.GetRoamingStateString());
168}
169
Darin Petkov3e509242011-11-10 14:46:44 +0100170TEST_F(CellularCapabilityCDMATest, GetSignalQuality) {
171 const int kStrength = 90;
172 EXPECT_CALL(*proxy_, GetSignalQuality()).WillOnce(Return(kStrength));
173 SetProxy();
174 SetService();
175 EXPECT_EQ(0, cellular_->service()->strength());
176 capability_.GetSignalQuality();
177 EXPECT_EQ(kStrength, cellular_->service()->strength());
178}
179
Darin Petkov184c54e2011-11-15 12:44:39 +0100180TEST_F(CellularCapabilityCDMATest, GetRegistrationState) {
181 EXPECT_FALSE(cellular_->service().get());
182 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
183 capability_.registration_state_1x());
184 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
185 capability_.registration_state_evdo());
186 EXPECT_CALL(*proxy_, GetRegistrationState(_, _))
187 .WillOnce(DoAll(
188 SetArgumentPointee<0>(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED),
189 SetArgumentPointee<1>(MM_MODEM_CDMA_REGISTRATION_STATE_HOME)));
190 EXPECT_CALL(*proxy_, GetSignalQuality()).WillOnce(Return(90));
191 SetProxy();
192 capability_.GetRegistrationState();
193 SetCapability();
194 dispatcher_.DispatchPendingEvents();
195 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED,
196 capability_.registration_state_1x());
197 EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
198 capability_.registration_state_evdo());
199 ASSERT_TRUE(cellular_->service().get());
200}
201
Darin Petkovcb547732011-11-09 13:55:26 +0100202} // namespace shill