shill: cellular: Obtain |actvation_code| from serving operator.
In automatic activation implemented in CellularCapabilityUniversalCDMA, obtain
the activation code from the serving operator.
BUG=chromium:376098
TEST=(1) Run shill_unittests
(2) Run network_CDMAActivate
Change-Id: Id56dcd99625ad2d655e58b68090a17febb7a56f9
Reviewed-on: https://chromium-review.googlesource.com/201084
Reviewed-by: Ben Chan <benchan@chromium.org>
Commit-Queue: Prathmesh Prabhu <pprabhu@chromium.org>
Tested-by: Prathmesh Prabhu <pprabhu@chromium.org>
diff --git a/cellular_capability_universal_cdma.cc b/cellular_capability_universal_cdma.cc
index 3d6f65d..dd925f3 100644
--- a/cellular_capability_universal_cdma.cc
+++ b/cellular_capability_universal_cdma.cc
@@ -92,11 +92,13 @@
}
void CellularCapabilityUniversalCDMA::ActivateAutomatic() {
- if (activation_code_.empty()) {
+ if (!cellular()->serving_operator_info()->IsMobileNetworkOperatorKnown() ||
+ cellular()->serving_operator_info()->activation_code().empty()) {
SLOG(Cellular, 2) << "OTA activation cannot be run in the presence of no "
<< "activation code.";
return;
}
+
PendingActivationStore::State state =
modem_info()->pending_activation_store()->GetActivationState(
PendingActivationStore::kIdentifierMEID, cellular()->meid());
@@ -125,7 +127,10 @@
Error error;
modem_cdma_proxy_->Activate(
- activation_code_, &error, activation_callback, kTimeoutActivate);
+ cellular()->serving_operator_info()->activation_code(),
+ &error,
+ activation_callback,
+ kTimeoutActivate);
}
void CellularCapabilityUniversalCDMA::UpdatePendingActivationState() {
diff --git a/cellular_capability_universal_cdma.h b/cellular_capability_universal_cdma.h
index f8f8bd1..b0badb1 100644
--- a/cellular_capability_universal_cdma.h
+++ b/cellular_capability_universal_cdma.h
@@ -119,9 +119,6 @@
// CDMA ActivationState property.
MMModemCdmaActivationState activation_state_;
- // The activation code needed for OTASP activation.
- std::string activation_code_;
-
MMModemCdmaRegistrationState cdma_1x_registration_state_;
MMModemCdmaRegistrationState cdma_evdo_registration_state_;
diff --git a/cellular_capability_universal_cdma_unittest.cc b/cellular_capability_universal_cdma_unittest.cc
index a65148b..e108111 100644
--- a/cellular_capability_universal_cdma_unittest.cc
+++ b/cellular_capability_universal_cdma_unittest.cc
@@ -328,22 +328,33 @@
}
TEST_F(CellularCapabilityUniversalCDMAMainTest, ActivateAutomatic) {
+ const string activation_code {"1234"};
+ SetMockMobileOperatorInfoObjects();
+
mm1::MockModemModemCdmaProxy *cdma_proxy = modem_cdma_proxy_.get();
SetUp();
capability_->InitProxies();
- EXPECT_CALL(*modem_info_.mock_pending_activation_store(),
- GetActivationState(_,_))
- .Times(0);
- EXPECT_CALL(*modem_info_.mock_pending_activation_store(),
- SetActivationState(_,_,_))
- .Times(0);
+ // Cases when activation fails because |activation_code| is not available.
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(false));
EXPECT_CALL(*cdma_proxy, Activate(_,_,_,_)).Times(0);
capability_->ActivateAutomatic();
- Mock::VerifyAndClearExpectations(modem_info_.mock_pending_activation_store());
+ Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
+ Mock::VerifyAndClearExpectations(modem_cdma_proxy_.get());
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(true));
+ mock_serving_operator_info_->SetEmptyDefaultsForProperties();
+ EXPECT_CALL(*cdma_proxy, Activate(_,_,_,_)).Times(0);
+ capability_->ActivateAutomatic();
+ Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
Mock::VerifyAndClearExpectations(modem_cdma_proxy_.get());
- capability_->activation_code_ = "1234";
+ // These expectations hold for all subsequent tests.
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_serving_operator_info_, activation_code())
+ .WillRepeatedly(ReturnRef(activation_code));
EXPECT_CALL(*modem_info_.mock_pending_activation_store(),
GetActivationState(PendingActivationStore::kIdentifierMEID, _))
diff --git a/mobile_operator_info.h b/mobile_operator_info.h
index 009c5ef..5dc463a 100644
--- a/mobile_operator_info.h
+++ b/mobile_operator_info.h
@@ -173,7 +173,7 @@
virtual const std::vector<OnlinePortal> &olp_list() const;
// The number to dial for automatic activation.
- const std::string &activation_code() const;
+ virtual const std::string &activation_code() const;
// Some carriers are only available while roaming. This is mainly used by
// Chrome.
bool requires_roaming() const;
diff --git a/mock_mobile_operator_info.cc b/mock_mobile_operator_info.cc
index aa6ec12..48197bf 100644
--- a/mock_mobile_operator_info.cc
+++ b/mock_mobile_operator_info.cc
@@ -17,6 +17,8 @@
void MockMobileOperatorInfo::SetEmptyDefaultsForProperties() {
ON_CALL(*this, mccmnc()).WillByDefault(ReturnRef(empty_mccmnc_));
ON_CALL(*this, olp_list()).WillByDefault(ReturnRef(empty_olp_list_));
+ ON_CALL(*this, activation_code())
+ .WillByDefault(ReturnRef(empty_activation_code_));
ON_CALL(*this, operator_name())
.WillByDefault(ReturnRef(empty_operator_name_));
ON_CALL(*this, country())
diff --git a/mock_mobile_operator_info.h b/mock_mobile_operator_info.h
index a3ebfd0..ccdd447 100644
--- a/mock_mobile_operator_info.h
+++ b/mock_mobile_operator_info.h
@@ -27,6 +27,7 @@
MOCK_CONST_METHOD0(mccmnc, const std::string &());
MOCK_CONST_METHOD0(olp_list,
const std::vector<MobileOperatorInfo::OnlinePortal> &());
+ MOCK_CONST_METHOD0(activation_code, const std::string &());
MOCK_CONST_METHOD0(operator_name, const std::string &());
MOCK_CONST_METHOD0(country, const std::string &());
MOCK_CONST_METHOD0(uuid, const std::string &());
@@ -44,6 +45,7 @@
private:
std::string empty_mccmnc_;
std::vector<MobileOperatorInfo::OnlinePortal> empty_olp_list_;
+ std::string empty_activation_code_;
std::string empty_operator_name_;
std::string empty_country_;
std::string empty_uuid_;