shill: cellular: Remove old code paths to update operator information.
Old code paths that updated the |Cellular::home_operator| property and the
|CellularService::serving_operator| property are obsolete, now that these
properties are updated using the MobileOperatorInfo objects. This CL deletes old
code paths. Additionally, it
- deletes/updates related tests from capabilities.
- Adds a test to |Cellular| that tests the logic for choosing the home provider
/ serving operator.
BUG=chromium:352243
TEST=- Run shill_unittest.
- Test that home provider and serving operator are set correctly on devices
that use the different capabilities.
CQ-DEPEND=CL:198330
Change-Id: I7cd095286f1d41fd23b3a0cc3a2d46ccf3f1e639
Reviewed-on: https://chromium-review.googlesource.com/198322
Reviewed-by: Thieu Le <thieule@chromium.org>
Commit-Queue: Prathmesh Prabhu <pprabhu@chromium.org>
Tested-by: Prathmesh Prabhu <pprabhu@chromium.org>
diff --git a/cellular.h b/cellular.h
index 690118a..0599d65 100644
--- a/cellular.h
+++ b/cellular.h
@@ -337,19 +337,13 @@
FRIEND_TEST(CellularCapabilityTest, GetModemInfo);
FRIEND_TEST(CellularCapabilityTest, GetModemStatus);
FRIEND_TEST(CellularCapabilityUniversalCDMATest, OnCDMARegistrationChanged);
- FRIEND_TEST(CellularCapabilityUniversalCDMATest, UpdateOLP);
- FRIEND_TEST(CellularCapabilityUniversalCDMATest, UpdateOperatorInfo);
FRIEND_TEST(CellularCapabilityUniversalMainTest, AllowRoaming);
FRIEND_TEST(CellularCapabilityUniversalMainTest, Connect);
FRIEND_TEST(CellularCapabilityUniversalMainTest, IsServiceActivationRequired);
- FRIEND_TEST(CellularCapabilityUniversalMainTest, SetHomeProvider);
FRIEND_TEST(CellularCapabilityUniversalMainTest, StartModemAlreadyEnabled);
FRIEND_TEST(CellularCapabilityUniversalMainTest, StopModemConnected);
FRIEND_TEST(CellularCapabilityUniversalMainTest,
UpdatePendingActivationState);
- FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateOLP);
- FRIEND_TEST(CellularCapabilityUniversalMainTest,
- UpdateOperatorInfoViaOperatorId);
FRIEND_TEST(CellularCapabilityUniversalMainTest,
UpdateRegistrationState);
FRIEND_TEST(CellularCapabilityUniversalMainTest,
@@ -357,7 +351,6 @@
FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateScanningProperty);
FRIEND_TEST(CellularCapabilityUniversalMainTest,
UpdateServiceActivationState);
- FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateServiceName);
FRIEND_TEST(CellularTest, ChangeServiceState);
FRIEND_TEST(CellularTest, ChangeServiceStatePPP);
FRIEND_TEST(CellularTest, CreateService);
@@ -376,8 +369,10 @@
FRIEND_TEST(CellularTest, EstablishLinkDHCP);
FRIEND_TEST(CellularTest, EstablishLinkPPP);
FRIEND_TEST(CellularTest, EstablishLinkStatic);
+ FRIEND_TEST(CellularTest, FriendlyServiceName);
FRIEND_TEST(CellularTest,
HandleNewRegistrationStateForServiceRequiringActivation);
+ FRIEND_TEST(CellularTest, HomeProviderServingOperator);
FRIEND_TEST(CellularTest, LinkEventUpWithPPP);
FRIEND_TEST(CellularTest, LinkEventUpWithoutPPP);
FRIEND_TEST(CellularTest, LinkEventWontDestroyService);
@@ -399,7 +394,6 @@
FRIEND_TEST(CellularTest, ScanAsynchronousFailure);
FRIEND_TEST(CellularTest, ScanImmediateFailure);
FRIEND_TEST(CellularTest, ScanSuccess);
- FRIEND_TEST(CellularTest, ServiceFriendlyName);
FRIEND_TEST(CellularTest, SetAllowRoaming);
FRIEND_TEST(CellularTest, StartModemCallback);
FRIEND_TEST(CellularTest, StartModemCallbackFail);
diff --git a/cellular_capability_cdma.cc b/cellular_capability_cdma.cc
index 74e273b..8805bda 100644
--- a/cellular_capability_cdma.cc
+++ b/cellular_capability_cdma.cc
@@ -96,7 +96,6 @@
void CellularCapabilityCDMA::OnServiceCreated() {
SLOG(Cellular, 2) << __func__;
cellular()->service()->SetUsageURL(usage_url_);
- UpdateServingOperator();
HandleNewActivationState(MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR);
}
@@ -320,13 +319,6 @@
proxy_->GetRegistrationState(NULL, callback, kTimeoutDefault);
}
-void CellularCapabilityCDMA::UpdateServingOperator() {
- SLOG(Cellular, 2) << __func__;
- if (cellular()->service().get()) {
- cellular()->service()->SetServingOperator(cellular()->home_provider());
- }
-}
-
void CellularCapabilityCDMA::OnActivateReply(
const ResultCallback &callback, uint32 status, const Error &error) {
activation_starting_ = false;
diff --git a/cellular_capability_cdma.h b/cellular_capability_cdma.h
index 916248d..051cefa 100644
--- a/cellular_capability_cdma.h
+++ b/cellular_capability_cdma.h
@@ -77,9 +77,6 @@
void HandleNewActivationState(uint32 error);
- // Updates the serving operator on the active service.
- void UpdateServingOperator();
-
static std::string GetActivationStateString(uint32 state);
static std::string GetActivationErrorString(uint32 error);
diff --git a/cellular_capability_classic.cc b/cellular_capability_classic.cc
index aece7d3..39265c3 100644
--- a/cellular_capability_classic.cc
+++ b/cellular_capability_classic.cc
@@ -310,6 +310,11 @@
callback.Run(error);
}
+void CellularCapabilityClassic::UpdateStatus(
+ const DBusPropertiesMap &properties) {
+ SLOG(Cellular, 3) << __func__;
+}
+
void CellularCapabilityClassic::OnGetModemInfoReply(
const ResultCallback &callback,
const ModemHardwareInfo &info,
diff --git a/cellular_capability_classic.h b/cellular_capability_classic.h
index f9b6e2c..b2838b7 100644
--- a/cellular_capability_classic.h
+++ b/cellular_capability_classic.h
@@ -93,7 +93,9 @@
void FinishDisable(const ResultCallback &callback);
virtual void InitProxies();
virtual void ReleaseProxies();
- virtual void UpdateStatus(const DBusPropertiesMap &properties) = 0;
+
+ // Default implementation is no-op.
+ virtual void UpdateStatus(const DBusPropertiesMap &properties);
// Runs the next task in a list.
// Precondition: |tasks| is not empty.
diff --git a/cellular_capability_classic_unittest.cc b/cellular_capability_classic_unittest.cc
index eec7525..84a62a8 100644
--- a/cellular_capability_classic_unittest.cc
+++ b/cellular_capability_classic_unittest.cc
@@ -82,12 +82,28 @@
capability_->proxy_factory_ = NULL;
}
- void SetService() {
- cellular_->service_ = new CellularService(&modem_info_, cellular_);
- }
+ void CreateService() {
+ // The following constants are never directly accessed by the tests.
+ const char kStorageIdentifier[] = "default_test_storage_id";
+ const char kFriendlyServiceName[] = "default_test_service_name";
+ const char kOperatorCode[] = "10010";
+ const char kOperatorName[] = "default_test_operator_name";
+ const char kOperatorCountry[] = "us";
- void InitProviderDB() {
- modem_info_.SetProviderDB(kTestMobileProviderDBPath);
+ // Simulate all the side-effects of Cellular::CreateService
+ auto service = new CellularService(&modem_info_, cellular_);
+ service->SetStorageIdentifier(kStorageIdentifier);
+ service->SetFriendlyName(kFriendlyServiceName);
+
+ Cellular::Operator oper;
+ oper.SetCode(kOperatorCode);
+ oper.SetName(kOperatorName);
+ oper.SetCountry(kOperatorCountry);
+
+ service->SetServingOperator(oper);
+
+ cellular_->set_home_provider(oper);
+ cellular_->service_ = service;
}
CellularCapabilityGSM *GetGsmCapability() {
@@ -364,12 +380,75 @@
TEST_F(CellularCapabilityTest, TryApns) {
static const string kLastGoodApn("remembered.apn");
+ static const string kLastGoodUsername("remembered.user");
static const string kSuppliedApn("my.apn");
static const string kTmobileApn1("epc.tmobile.com");
static const string kTmobileApn2("wap.voicestream.com");
static const string kTmobileApn3("internet2.voicestream.com");
static const string kTmobileApn4("internet3.voicestream.com");
+ const Stringmaps kDatabaseApnList {{{ kApnProperty, kTmobileApn1 }},
+ {{ kApnProperty, kTmobileApn2 }},
+ {{ kApnProperty, kTmobileApn3 }},
+ {{ kApnProperty, kTmobileApn4 }}};
+
+ CreateService();
+ // Supply the database APNs to |cellular_| object.
+ cellular_->set_apn_list(kDatabaseApnList);
+ ProfileRefPtr profile(new NiceMock<MockProfile>(
+ modem_info_.control_interface(), modem_info_.metrics(),
+ modem_info_.manager()));
+ cellular_->service()->set_profile(profile);
+
+ Error error;
+ Stringmap apn_info;
+ DBusPropertiesMap props;
+ CellularCapabilityGSM *gsm_capability = GetGsmCapability();
+
+ apn_info[kApnProperty] = kLastGoodApn;
+ apn_info[kApnUsernameProperty] = kLastGoodUsername;
+ cellular_->service()->SetLastGoodApn(apn_info);
+ props.clear();
+ EXPECT_TRUE(props.find(kApnProperty) == props.end());
+ gsm_capability->SetupConnectProperties(&props);
+ // We expect the list to contain the last good APN, plus
+ // the 4 APNs from the mobile provider info database.
+ EXPECT_EQ(5, gsm_capability->apn_try_list_.size());
+ EXPECT_FALSE(props.find(kApnProperty) == props.end());
+ EXPECT_EQ(kLastGoodApn, props[kApnProperty].reader().get_string());
+ EXPECT_FALSE(props.find(kApnUsernameProperty) == props.end());
+ EXPECT_EQ(kLastGoodUsername,
+ props[kApnUsernameProperty].reader().get_string());
+
+ apn_info.clear();
+ props.clear();
+ apn_info[kApnProperty] = kSuppliedApn;
+ // Setting the APN has the side effect of clearing the LastGoodApn,
+ // so the try list will have 5 elements, with the first one being
+ // the supplied APN.
+ cellular_->service()->SetApn(apn_info, &error);
+ EXPECT_TRUE(props.find(kApnProperty) == props.end());
+ gsm_capability->SetupConnectProperties(&props);
+ EXPECT_EQ(5, gsm_capability->apn_try_list_.size());
+ EXPECT_FALSE(props.find(kApnProperty) == props.end());
+ EXPECT_EQ(kSuppliedApn, props[kApnProperty].reader().get_string());
+
+ apn_info.clear();
+ props.clear();
+ apn_info[kApnProperty] = kLastGoodApn;
+ apn_info[kApnUsernameProperty] = kLastGoodUsername;
+ // Now when LastGoodAPN is set, it will be the one selected.
+ cellular_->service()->SetLastGoodApn(apn_info);
+ EXPECT_TRUE(props.find(kApnProperty) == props.end());
+ gsm_capability->SetupConnectProperties(&props);
+ // We expect the list to contain the last good APN, plus
+ // the user-supplied APN, plus the 4 APNs from the mobile
+ // provider info database.
+ EXPECT_EQ(6, gsm_capability->apn_try_list_.size());
+ EXPECT_FALSE(props.find(kApnProperty) == props.end());
+ EXPECT_EQ(kLastGoodApn, props[kApnProperty].reader().get_string());
+
+ // Now try all the given APNs.
using testing::InSequence;
{
InSequence dummy;
@@ -381,36 +460,8 @@
EXPECT_CALL(*simple_proxy_, Connect(HasApn(kTmobileApn4), _, _, _));
EXPECT_CALL(*simple_proxy_, Connect(HasNoApn(), _, _, _));
}
- CellularCapabilityGSM *gsm_capability = GetGsmCapability();
- SetService();
- cellular_->set_imsi("310240123456789");
- InitProviderDB();
- gsm_capability->SetHomeProvider();
- ProfileRefPtr profile(new NiceMock<MockProfile>(
- modem_info_.control_interface(), modem_info_.metrics(),
- modem_info_.manager()));
- cellular_->service()->set_profile(profile);
-
- Error error;
- Stringmap apn_info;
- DBusPropertiesMap props;
- apn_info[kApnProperty] = kSuppliedApn;
- cellular_->service()->SetApn(apn_info, &error);
-
- apn_info.clear();
- apn_info[kApnProperty] = kLastGoodApn;
- cellular_->service()->SetLastGoodApn(apn_info);
-
- capability_->SetupConnectProperties(&props);
- // We expect the list to contain the last good APN, plus
- // the user-supplied APN, plus the 4 APNs from the mobile
- // provider info database.
- EXPECT_EQ(6, gsm_capability->apn_try_list_.size());
- EXPECT_FALSE(props.find(kApnProperty) == props.end());
- EXPECT_EQ(kLastGoodApn, props[kApnProperty].reader().get_string());
-
SetSimpleProxy();
- capability_->Connect(props, &error, ResultCallback());
+ gsm_capability->Connect(props, &error, ResultCallback());
Error cerror(Error::kInvalidApn);
gsm_capability->OnConnectReply(ResultCallback(), cerror);
EXPECT_EQ(5, gsm_capability->apn_try_list_.size());
diff --git a/cellular_capability_gsm.cc b/cellular_capability_gsm.cc
index e1ae2a1..2e0cac2 100644
--- a/cellular_capability_gsm.cc
+++ b/cellular_capability_gsm.cc
@@ -210,13 +210,6 @@
void CellularCapabilityGSM::OnServiceCreated() {
cellular()->service()->SetActivationState(kActivationStateActivated);
- UpdateServingOperator();
-}
-
-void CellularCapabilityGSM::UpdateStatus(const DBusPropertiesMap &properties) {
- if (ContainsKey(properties, kModemPropertyIMSI)) {
- SetHomeProvider();
- }
}
// Create the list of APNs to try, in the following order:
@@ -424,123 +417,6 @@
callback.Run(Error());
}
-void CellularCapabilityGSM::SetHomeProvider() {
- string imsi = cellular()->imsi();
- SLOG(Cellular, 2) << __func__ << "(IMSI: " << imsi
- << " SPN: " << spn_ << ")";
- // TODO(petkov): The test for NULL provider_db should be done by
- // mobile_provider_lookup_best_match.
- if (imsi.empty() || !modem_info()->provider_db()) {
- return;
- }
- mobile_provider *provider_info =
- mobile_provider_lookup_best_match(
- modem_info()->provider_db(), spn_.c_str(), imsi.c_str());
- if (!provider_info) {
- SLOG(Cellular, 2) << "GSM provider not found.";
- return;
- }
- home_provider_info_ = provider_info;
- cellular()->set_provider_requires_roaming(provider_info->requires_roaming);
- Cellular::Operator oper;
- if (provider_info->networks && provider_info->networks[0]) {
- oper.SetCode(provider_info->networks[0]);
- }
- if (*provider_info->country) {
- oper.SetCountry(provider_info->country);
- }
- if (spn_.empty()) {
- const char *name = mobile_provider_get_name(provider_info);
- if (name) {
- oper.SetName(name);
- }
- } else {
- oper.SetName(spn_);
- }
- cellular()->set_home_provider(oper);
- bool roaming_required = cellular()->provider_requires_roaming();
- SLOG(Cellular, 2) << "Home provider: " << oper.GetCode() << ", "
- << oper.GetName() << ", " << oper.GetCountry()
- << (roaming_required ? ", roaming required" : "");
- InitAPNList();
-}
-
-void CellularCapabilityGSM::UpdateOperatorInfo() {
- SLOG(Cellular, 2) << __func__;
- const string &network_id = serving_operator_.GetCode();
- if (!network_id.empty()) {
- SLOG(Cellular, 2) << "Looking up network id: " << network_id;
- mobile_provider *provider =
- mobile_provider_lookup_by_network(modem_info()->provider_db(),
- network_id.c_str());
- if (provider) {
- if (serving_operator_.GetName().empty()) {
- const char *provider_name = mobile_provider_get_name(provider);
- if (provider_name && *provider_name) {
- serving_operator_.SetName(provider_name);
- }
- }
- if (*provider->country) {
- serving_operator_.SetCountry(provider->country);
- }
- SLOG(Cellular, 2) << "Operator name: " << serving_operator_.GetName()
- << ", country: " << serving_operator_.GetCountry();
- } else {
- SLOG(Cellular, 2) << "GSM provider not found.";
- }
- }
- UpdateServingOperator();
-}
-
-void CellularCapabilityGSM::UpdateServingOperator() {
- SLOG(Cellular, 2) << __func__;
- if (cellular()->service().get()) {
- cellular()->service()->SetServingOperator(serving_operator_);
- }
-}
-
-void CellularCapabilityGSM::InitAPNList() {
- SLOG(Cellular, 2) << __func__;
- Stringmaps apn_list;
- if (!home_provider_info_) {
- return;
- }
- for (int i = 0; i < home_provider_info_->num_apns; ++i) {
- Stringmap props;
- mobile_apn *apn = home_provider_info_->apns[i];
- if (apn->value) {
- props[kApnProperty] = apn->value;
- }
- if (apn->username) {
- props[kApnUsernameProperty] = apn->username;
- }
- if (apn->password) {
- props[kApnPasswordProperty] = apn->password;
- }
- // Find the first localized and non-localized name, if any.
- const localized_name *lname = NULL;
- const localized_name *name = NULL;
- for (int j = 0; j < apn->num_names; ++j) {
- if (apn->names[j]->lang) {
- if (!lname) {
- lname = apn->names[j];
- }
- } else if (!name) {
- name = apn->names[j];
- }
- }
- if (name) {
- props[kApnNameProperty] = name->name;
- }
- if (lname) {
- props[kApnLocalizedNameProperty] = lname->name;
- props[kApnLanguageProperty] = lname->lang;
- }
- apn_list.push_back(props);
- }
- cellular()->set_apn_list(apn_list);
-}
-
// always called from an async context
void CellularCapabilityGSM::Register(const ResultCallback &callback) {
SLOG(Cellular, 2) << __func__ << " \"" << cellular()->selected_network()
@@ -820,7 +696,6 @@
serving_operator_.SetName(operator_name);
cellular()->serving_operator_info()->UpdateMCCMNC(operator_code);
cellular()->serving_operator_info()->UpdateOperatorName(operator_name);
- UpdateOperatorInfo();
cellular()->HandleNewRegistrationState();
}
@@ -861,7 +736,6 @@
cellular()->set_imsi(imsi);
cellular()->set_sim_present(true);
cellular()->home_provider_info()->UpdateIMSI(imsi);
- SetHomeProvider();
callback.Run(error);
} else if (!sim_lock_status_.lock_type.empty()) {
SLOG(Cellular, 2) << "GetIMSI failed - SIM lock in place.";
@@ -892,7 +766,6 @@
SLOG(Cellular, 2) << "SPN: " << spn;
spn_ = spn;
cellular()->home_provider_info()->UpdateOperatorName(spn);
- SetHomeProvider();
} else {
SLOG(Cellular, 2) << "GetSPN failed - " << error;
}
diff --git a/cellular_capability_gsm.h b/cellular_capability_gsm.h
index 6e7fc84..96447c3 100644
--- a/cellular_capability_gsm.h
+++ b/cellular_capability_gsm.h
@@ -90,7 +90,6 @@
// Inherited from CellularCapabilityClassic.
virtual void InitProxies() override;
virtual void ReleaseProxies() override;
- virtual void UpdateStatus(const DBusPropertiesMap &properties) override;
// Initializes properties, such as IMSI, which are required before the device
// is enabled.
@@ -111,17 +110,12 @@
FRIEND_TEST(CellularCapabilityGSMTest, EnterPIN);
FRIEND_TEST(CellularCapabilityGSMTest, UnblockPIN);
FRIEND_TEST(CellularCapabilityGSMTest, ChangePIN);
- FRIEND_TEST(CellularCapabilityGSMTest, InitAPNList);
FRIEND_TEST(CellularCapabilityGSMTest, ParseScanResult);
FRIEND_TEST(CellularCapabilityGSMTest, ParseScanResultProviderLookup);
FRIEND_TEST(CellularCapabilityGSMTest, RegisterOnNetwork);
FRIEND_TEST(CellularCapabilityGSMTest, SetAccessTechnology);
- FRIEND_TEST(CellularCapabilityGSMTest, UpdateStatus);
- FRIEND_TEST(CellularCapabilityGSMTest, SetHomeProvider);
- FRIEND_TEST(CellularCapabilityGSMTest, UpdateOperatorInfo);
FRIEND_TEST(CellularCapabilityGSMTest, GetRegistrationState);
FRIEND_TEST(CellularCapabilityGSMTest, OnDBusPropertiesChanged);
- FRIEND_TEST(CellularCapabilityGSMTest, SetupApnTryList);
FRIEND_TEST(CellularCapabilityTest, AllowRoaming);
FRIEND_TEST(CellularCapabilityTest, TryApns);
FRIEND_TEST(CellularTest, ScanAsynchronousFailure);
@@ -160,21 +154,6 @@
void SetAccessTechnology(uint32 access_technology);
- // Sets the upper level information about the home cellular provider from the
- // modem's IMSI and SPN.
- void SetHomeProvider();
-
- // Updates the GSM operator name and country based on a newly obtained network
- // id.
- void UpdateOperatorInfo();
-
- // Updates the serving operator on the active service.
- void UpdateServingOperator();
-
- // Initializes the |apn_list| property based on the current
- // |home_provider_info_|.
- void InitAPNList();
-
Stringmap ParseScanResult(const GSMScanResult &result);
KeyValueStore SimLockStatusToProperty(Error *error);
diff --git a/cellular_capability_gsm_unittest.cc b/cellular_capability_gsm_unittest.cc
index 3658b7c..341e4d9 100644
--- a/cellular_capability_gsm_unittest.cc
+++ b/cellular_capability_gsm_unittest.cc
@@ -19,6 +19,7 @@
#include "shill/event_dispatcher.h"
#include "shill/mock_adaptors.h"
#include "shill/mock_log.h"
+#include "shill/mock_mobile_operator_info.h"
#include "shill/mock_modem_gsm_card_proxy.h"
#include "shill/mock_modem_gsm_network_proxy.h"
#include "shill/mock_modem_info.h"
@@ -61,7 +62,9 @@
"",
"",
"",
- &proxy_factory_)) {
+ &proxy_factory_)),
+ mock_home_provider_info_(NULL),
+ mock_serving_operator_info_(NULL) {
modem_info_.metrics()->RegisterDevice(cellular_->interface_index(),
Technology::kCellular);
}
@@ -95,10 +98,6 @@
int timeout) {
callback.Run(kIMSI, Error());
}
- void InvokeGetIMSI2(Error *error, const GSMIdentifierCallback &callback,
- int timeout) {
- callback.Run("310240123456789", Error());
- }
void InvokeGetIMSIFails(Error *error, const GSMIdentifierCallback &callback,
int timeout) {
callback.Run("", Error(Error::kOperationFailed));
@@ -241,8 +240,37 @@
capability_->registration_state_ = state;
}
- void SetService() {
- cellular_->service_ = new CellularService(&modem_info_, cellular_);
+ void CreateService() {
+ // The following constants are never directly accessed by the tests.
+ const char kStorageIdentifier[] = "default_test_storage_id";
+ const char kFriendlyServiceName[] = "default_test_service_name";
+ const char kOperatorCode[] = "10010";
+ const char kOperatorName[] = "default_test_operator_name";
+ const char kOperatorCountry[] = "us";
+
+ // Simulate all the side-effects of Cellular::CreateService
+ auto service = new CellularService(&modem_info_, cellular_);
+ service->SetStorageIdentifier(kStorageIdentifier);
+ service->SetFriendlyName(kFriendlyServiceName);
+
+ Cellular::Operator oper;
+ oper.SetCode(kOperatorCode);
+ oper.SetName(kOperatorName);
+ oper.SetCountry(kOperatorCountry);
+
+ service->SetServingOperator(oper);
+
+ cellular_->set_home_provider(oper);
+ cellular_->service_ = service;
+ }
+
+ void SetMockMobileOperatorInfoObjects() {
+ CHECK(!mock_home_provider_info_);
+ CHECK(!mock_serving_operator_info_);
+ mock_home_provider_info_ = new MockMobileOperatorInfo(&dispatcher_);
+ mock_serving_operator_info_ = new MockMobileOperatorInfo(&dispatcher_);
+ cellular_->set_home_provider_info(mock_home_provider_info_);
+ cellular_->set_serving_operator_info(mock_serving_operator_info_);
}
void SetupCommonProxiesExpectations() {
@@ -295,6 +323,10 @@
CellularCapabilityGSM *capability_; // Owned by |cellular_|.
DeviceMockAdaptor *device_adaptor_; // Owned by |cellular_|.
CellularRefPtr cellular_;
+
+ // Set when required and passed to |cellular_|. Owned by |cellular_|.
+ MockMobileOperatorInfo *mock_home_provider_info_;
+ MockMobileOperatorInfo *mock_serving_operator_info_;
};
const char CellularCapabilityGSMTest::kAddress[] = "1122334455";
@@ -326,24 +358,20 @@
}
TEST_F(CellularCapabilityGSMTest, GetIMSI) {
+ SetMockMobileOperatorInfoObjects();
EXPECT_CALL(*card_proxy_, GetIMSI(_, _, CellularCapability::kTimeoutDefault))
.WillOnce(Invoke(this,
- &CellularCapabilityGSMTest::InvokeGetIMSI))
- .WillOnce(Invoke(this,
- &CellularCapabilityGSMTest::InvokeGetIMSI2));
- EXPECT_CALL(*this, TestCallback(IsSuccess())).Times(2);
+ &CellularCapabilityGSMTest::InvokeGetIMSI));
+ EXPECT_CALL(*this, TestCallback(IsSuccess()));
SetCardProxy();
ResultCallback callback = Bind(&CellularCapabilityGSMTest::TestCallback,
Unretained(this));
EXPECT_TRUE(cellular_->imsi().empty());
EXPECT_FALSE(cellular_->sim_present());
+ EXPECT_CALL(*mock_home_provider_info_, UpdateIMSI(kIMSI));
capability_->GetIMSI(callback);
EXPECT_EQ(kIMSI, cellular_->imsi());
EXPECT_TRUE(cellular_->sim_present());
- cellular_->set_imsi("");
- InitProviderDB();
- capability_->GetIMSI(callback);
- EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
}
// In this test, the call to the proxy's GetIMSI() will always indicate failure,
@@ -419,7 +447,7 @@
.WillOnce(Invoke(this,
&CellularCapabilityGSMTest::InvokeGetSignalQuality));
SetNetworkProxy();
- SetService();
+ CreateService();
EXPECT_EQ(0, cellular_->service()->strength());
capability_->GetSignalQuality();
EXPECT_EQ(kStrength, cellular_->service()->strength());
@@ -555,41 +583,13 @@
TEST_F(CellularCapabilityGSMTest, SetAccessTechnology) {
capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GSM, capability_->access_technology_);
- SetService();
+ CreateService();
SetRegistrationState(MM_MODEM_GSM_NETWORK_REG_STATUS_HOME);
capability_->SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GPRS);
EXPECT_EQ(MM_MODEM_GSM_ACCESS_TECH_GPRS, capability_->access_technology_);
EXPECT_EQ(kNetworkTechnologyGprs, cellular_->service()->network_technology());
}
-TEST_F(CellularCapabilityGSMTest, UpdateOperatorInfo) {
- static const char kOperatorName[] = "Swisscom";
- InitProviderDB();
- capability_->serving_operator_.SetCode("22801");
- SetService();
- capability_->UpdateOperatorInfo();
- EXPECT_EQ(kOperatorName, capability_->serving_operator_.GetName());
- EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
- EXPECT_EQ(kOperatorName, cellular_->service()->serving_operator().GetName());
-
- static const char kTestOperator[] = "Testcom";
- capability_->serving_operator_.SetName(kTestOperator);
- capability_->serving_operator_.SetCountry("");
- capability_->UpdateOperatorInfo();
- EXPECT_EQ(kTestOperator, capability_->serving_operator_.GetName());
- EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
- EXPECT_EQ(kTestOperator, cellular_->service()->serving_operator().GetName());
-}
-
-TEST_F(CellularCapabilityGSMTest, UpdateStatus) {
- InitProviderDB();
- DBusPropertiesMap props;
- cellular_->set_imsi("310240123456789");
- props[CellularCapability::kModemPropertyIMSI].writer().append_string("");
- capability_->UpdateStatus(props);
- EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
-}
-
TEST_F(CellularCapabilityGSMTest, AllowRoaming) {
EXPECT_FALSE(cellular_->allow_roaming_);
EXPECT_FALSE(cellular_->provider_requires_roaming());
@@ -601,56 +601,6 @@
EXPECT_TRUE(capability_->AllowRoaming());
}
-TEST_F(CellularCapabilityGSMTest, SetHomeProvider) {
- static const char kCountry[] = "us";
- static const char kCode[] = "310160";
- cellular_->set_imsi("310240123456789");
-
- EXPECT_FALSE(capability_->home_provider_info_);
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- capability_->SetHomeProvider(); // No mobile provider DB available.
- EXPECT_TRUE(cellular_->home_provider().GetName().empty());
- EXPECT_TRUE(cellular_->home_provider().GetCountry().empty());
- EXPECT_TRUE(cellular_->home_provider().GetCode().empty());
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- InitProviderDB();
- capability_->SetHomeProvider();
- EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
- EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
- EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
- EXPECT_EQ(4, cellular_->apn_list().size());
- ASSERT_TRUE(capability_->home_provider_info_);
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- Cellular::Operator oper;
- cellular_->set_home_provider(oper);
- capability_->spn_ = kTestCarrier;
- capability_->SetHomeProvider();
- EXPECT_EQ(kTestCarrier, cellular_->home_provider().GetName());
- EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
- EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- static const char kCubic[] = "Cubic";
- capability_->spn_ = kCubic;
- capability_->SetHomeProvider();
- EXPECT_EQ(kCubic, cellular_->home_provider().GetName());
- EXPECT_EQ("", cellular_->home_provider().GetCode());
- ASSERT_TRUE(capability_->home_provider_info_);
- EXPECT_TRUE(cellular_->provider_requires_roaming());
-
- static const char kCUBIC[] = "CUBIC";
- capability_->spn_ = kCUBIC;
- capability_->home_provider_info_ = NULL;
- capability_->SetHomeProvider();
- EXPECT_EQ(kCUBIC, cellular_->home_provider().GetName());
- EXPECT_EQ("", cellular_->home_provider().GetCode());
- ASSERT_TRUE(capability_->home_provider_info_);
- EXPECT_TRUE(cellular_->provider_requires_roaming());
-}
-
namespace {
MATCHER(SizeIs4, "") {
@@ -659,22 +609,6 @@
} // namespace
-TEST_F(CellularCapabilityGSMTest, InitAPNList) {
- Stringmaps apn_list;
- InitProviderDB();
- capability_->home_provider_info_ =
- mobile_provider_lookup_by_name(modem_info_.provider_db(), "T-Mobile");
- ASSERT_TRUE(capability_->home_provider_info_);
- EXPECT_EQ(0, cellular_->apn_list().size());
- EXPECT_CALL(*device_adaptor_,
- EmitStringmapsChanged(kCellularApnListProperty, SizeIs4()));
- capability_->InitAPNList();
- apn_list = cellular_->apn_list();
- EXPECT_EQ(4, apn_list.size());
- EXPECT_EQ("wap.voicestream.com", apn_list[1][kApnProperty]);
- EXPECT_EQ("Web2Go/t-zones", apn_list[1][kApnNameProperty]);
-}
-
TEST_F(CellularCapabilityGSMTest, GetNetworkTechnologyString) {
EXPECT_EQ("", capability_->GetNetworkTechnologyString());
SetAccessTechnology(MM_MODEM_GSM_ACCESS_TECH_GSM);
@@ -802,74 +736,6 @@
EXPECT_EQ(kRetries, capability_->sim_lock_status_.retries_left);
}
-TEST_F(CellularCapabilityGSMTest, SetupApnTryList) {
- static const string kTmobileApn("epc.tmobile.com");
- static const string kLastGoodApn("remembered.apn");
- static const string kLastGoodUsername("remembered.user");
- static const string kSuppliedApn("my.apn");
-
- SetService();
- cellular_->set_imsi("310240123456789");
- InitProviderDB();
- capability_->SetHomeProvider();
- DBusPropertiesMap props;
- capability_->SetupConnectProperties(&props);
- EXPECT_FALSE(props.find(kApnProperty) == props.end());
- EXPECT_EQ(kTmobileApn, props[kApnProperty].reader().get_string());
-
- ProfileRefPtr profile(new NiceMock<MockProfile>(
- modem_info_.control_interface(), modem_info_.metrics(),
- modem_info_.manager()));
- cellular_->service()->set_profile(profile);
- Stringmap apn_info;
- apn_info[kApnProperty] = kLastGoodApn;
- apn_info[kApnUsernameProperty] = kLastGoodUsername;
- cellular_->service()->SetLastGoodApn(apn_info);
- props.clear();
- EXPECT_TRUE(props.find(kApnProperty) == props.end());
- capability_->SetupConnectProperties(&props);
- // We expect the list to contain the last good APN, plus
- // the 4 APNs from the mobile provider info database.
- EXPECT_EQ(5, capability_->apn_try_list_.size());
- EXPECT_FALSE(props.find(kApnProperty) == props.end());
- EXPECT_EQ(kLastGoodApn, props[kApnProperty].reader().get_string());
- EXPECT_FALSE(props.find(kApnUsernameProperty) == props.end());
- EXPECT_EQ(kLastGoodUsername,
- props[kApnUsernameProperty].reader().get_string());
-
- Error error;
- apn_info.clear();
- props.clear();
- apn_info[kApnProperty] = kSuppliedApn;
- // Setting the APN has the side effect of clearing the LastGoodApn,
- // so the try list will have 5 elements, with the first one being
- // the supplied APN.
- cellular_->service()->SetApn(apn_info, &error);
- EXPECT_TRUE(props.find(kApnProperty) == props.end());
- capability_->SetupConnectProperties(&props);
- EXPECT_EQ(5, capability_->apn_try_list_.size());
- EXPECT_FALSE(props.find(kApnProperty) == props.end());
- EXPECT_EQ(kSuppliedApn, props[kApnProperty].reader().get_string());
-
- apn_info.clear();
- props.clear();
- apn_info[kApnProperty] = kLastGoodApn;
- apn_info[kApnUsernameProperty] = kLastGoodUsername;
- // Now when LastGoodAPN is set, it will be the one selected.
- cellular_->service()->SetLastGoodApn(apn_info);
- EXPECT_TRUE(props.find(kApnProperty) == props.end());
- capability_->SetupConnectProperties(&props);
- // We expect the list to contain the last good APN, plus
- // the user-supplied APN, plus the 4 APNs from the mobile
- // provider info database.
- EXPECT_EQ(6, capability_->apn_try_list_.size());
- EXPECT_FALSE(props.find(kApnProperty) == props.end());
- EXPECT_EQ(kLastGoodApn, props[kApnProperty].reader().get_string());
- EXPECT_FALSE(props.find(kApnUsernameProperty) == props.end());
- EXPECT_EQ(kLastGoodUsername,
- props[kApnUsernameProperty].reader().get_string());
-}
-
TEST_F(CellularCapabilityGSMTest, StartModemSuccess) {
SetupCommonStartModemExpectations();
EXPECT_CALL(*card_proxy_,
diff --git a/cellular_capability_universal.cc b/cellular_capability_universal.cc
index e45d1f0..a1d2737 100644
--- a/cellular_capability_universal.cc
+++ b/cellular_capability_universal.cc
@@ -693,7 +693,6 @@
void CellularCapabilityUniversal::OnServiceCreated() {
UpdateServiceActivationState();
- UpdateServingOperator();
// WORKAROUND:
// E362 modems on Verizon network does not properly redirect when a SIM
@@ -823,58 +822,6 @@
OnModem3GPPPropertiesChanged(properties, vector<string>());
}
-void CellularCapabilityUniversal::SetHomeProvider() {
- const string &imsi = cellular()->imsi();
- SLOG(Cellular, 3) << __func__ << "(IMSI: " << imsi
- << " SPN: " << spn_ << ")";
-
- if (!modem_info()->provider_db())
- return;
-
- // MCCMNC can be determined either from IMSI or Operator Code. Use whichever
- // one is available. If both were reported by the SIM, use IMSI.
- const string &network_id = imsi.empty() ? operator_id_ : imsi;
- mobile_provider *provider_info = mobile_provider_lookup_best_match(
- modem_info()->provider_db(),
- spn_.c_str(),
- network_id.c_str());
- if (!provider_info) {
- SLOG(Cellular, 2) << "3GPP provider not found.";
- return;
- }
-
- // Even if |provider_info| is the same as |home_provider_info_|, it is
- // possible that the |spn_| has changed. Run all the code below.
- home_provider_info_ = provider_info;
- cellular()->set_provider_requires_roaming(
- home_provider_info_->requires_roaming);
- Cellular::Operator oper;
- // If Operator ID is available, use that as network code, otherwise
- // use what was returned from the database.
- if (!operator_id_.empty()) {
- oper.SetCode(operator_id_);
- } else if (provider_info->networks && provider_info->networks[0]) {
- oper.SetCode(provider_info->networks[0]);
- }
- if (*provider_info->country) {
- oper.SetCountry(provider_info->country);
- }
- if (spn_.empty()) {
- const char *name = mobile_provider_get_name(provider_info);
- if (name) {
- oper.SetName(name);
- }
- } else {
- oper.SetName(spn_);
- }
- cellular()->set_home_provider(oper);
- bool roaming_required = cellular()->provider_requires_roaming();
- SLOG(Cellular, 2) << "Home provider: " << oper.GetCode() << ", "
- << oper.GetName() << ", " << oper.GetCountry()
- << (roaming_required ? ", roaming required" : "");
- InitAPNList();
-}
-
void CellularCapabilityUniversal::UpdateServiceOLP() {
SLOG(Cellular, 3) << __func__;
@@ -908,67 +855,6 @@
cellular()->service()->SetOLP(olp_list[0].url, olp_list[0].method, post_data);
}
-void CellularCapabilityUniversal::UpdateOperatorInfo() {
- SLOG(Cellular, 3) << __func__;
- // TODO(armansito): Use CellularOperatorInfo here instead of
- // mobile_provider_db.
-
- // Sometimes the modem fails to acquire the operator code OTA, in which case
- // |serving_operator_| may not have an operator ID (sometimes due to service
- // activation being required or broken modem firmware). Use |operator_id_| as
- // a fallback when available. |operator_id_| is retrieved from the SIM card.
- if (serving_operator_.GetCode().empty() && !operator_id_.empty()) {
- SLOG(Cellular, 2) << "Assuming operator '" << operator_id_
- << "' as serving operator.";
- serving_operator_.SetCode(operator_id_);
- } else if (!serving_operator_.GetCode().empty() && operator_id_.empty()) {
- // Sometimes the SIM may fail to report an operator code. Since we build
- // the APN list based on home provider, report that the serving operator
- // is the home provider.
- // TODO(armansito): This is clearly not the best behavior for the roaming
- // case: we are now reporting that the roaming carrier is the same as the
- // home carrier. While this is not preferable, we don't have any home
- // provider to report either way, so this won't hurt the user experience.
- // This is a quick fix needed for the M31 release (crbug.com/306310).
- // Remove it with a better approach for M32 (crbug.com/298408).
- SLOG(Cellular, 2) << "Home provider is unknown but serving operator is. "
- << "Reporting serving operator as home provider.";
- operator_id_ = serving_operator_.GetCode();
- SetHomeProvider();
- }
-
- const string &network_id = serving_operator_.GetCode();
- if (!network_id.empty()) {
- SLOG(Cellular, 2) << "Looking up network id: " << network_id;
- mobile_provider *provider =
- mobile_provider_lookup_by_network(modem_info()->provider_db(),
- network_id.c_str());
- if (provider) {
- if (serving_operator_.GetName().empty()) {
- const char *provider_name = mobile_provider_get_name(provider);
- if (provider_name && *provider_name) {
- serving_operator_.SetName(provider_name);
- }
- }
- if (*provider->country) {
- serving_operator_.SetCountry(provider->country);
- }
- SLOG(Cellular, 2) << "Operator name: " << serving_operator_.GetName()
- << ", country: " << serving_operator_.GetCountry();
- } else {
- SLOG(Cellular, 2) << "GSM provider not found.";
- }
- }
- UpdateServingOperator();
-}
-
-void CellularCapabilityUniversal::UpdateServingOperator() {
- SLOG(Cellular, 3) << __func__;
- if (cellular()->service().get()) {
- cellular()->service()->SetServingOperator(serving_operator_);
- }
-}
-
void CellularCapabilityUniversal::UpdateActiveBearer() {
SLOG(Cellular, 3) << __func__;
@@ -995,48 +881,6 @@
SLOG(Cellular, 2) << "No active bearer found.";
}
-void CellularCapabilityUniversal::InitAPNList() {
- SLOG(Cellular, 3) << __func__;
- Stringmaps apn_list;
- if (!home_provider_info_) {
- return;
- }
- for (int i = 0; i < home_provider_info_->num_apns; ++i) {
- Stringmap props;
- mobile_apn *apn = home_provider_info_->apns[i];
- if (apn->value) {
- props[kApnProperty] = apn->value;
- }
- if (apn->username) {
- props[kApnUsernameProperty] = apn->username;
- }
- if (apn->password) {
- props[kApnPasswordProperty] = apn->password;
- }
- // Find the first localized and non-localized name, if any.
- const localized_name *lname = NULL;
- const localized_name *name = NULL;
- for (int j = 0; j < apn->num_names; ++j) {
- if (apn->names[j]->lang) {
- if (!lname) {
- lname = apn->names[j];
- }
- } else if (!name) {
- name = apn->names[j];
- }
- }
- if (name) {
- props[kApnNameProperty] = name->name;
- }
- if (lname) {
- props[kApnLocalizedNameProperty] = lname->name;
- props[kApnLanguageProperty] = lname->lang;
- }
- apn_list.push_back(props);
- }
- cellular()->set_apn_list(apn_list);
-}
-
bool CellularCapabilityUniversal::IsServiceActivationRequired() const {
const string &sim_identifier = cellular()->sim_identifier();
// subscription_state_ is the definitive answer. If that does not work,
@@ -1811,9 +1655,6 @@
cellular()->serving_operator_info()->UpdateOperatorName(
updated_operator_name);
- // Update the carrier name for |serving_operator_|.
- UpdateOperatorInfo();
-
cellular()->HandleNewRegistrationState();
// If the modem registered with the network and the current ICCID is pending
@@ -1896,7 +1737,6 @@
cellular()->set_imsi(value);
cellular()->home_provider_info()->UpdateIMSI(value);
}
- SetHomeProvider();
}
void CellularCapabilityUniversal::OnSpnChanged(const std::string &spn) {
diff --git a/cellular_capability_universal.h b/cellular_capability_universal.h
index 85da29b..af2c874 100644
--- a/cellular_capability_universal.h
+++ b/cellular_capability_universal.h
@@ -205,7 +205,6 @@
FRIEND_TEST(CellularCapabilityUniversalMainTest, Reset);
FRIEND_TEST(CellularCapabilityUniversalMainTest, Scan);
FRIEND_TEST(CellularCapabilityUniversalMainTest, ScanFailure);
- FRIEND_TEST(CellularCapabilityUniversalMainTest, SetHomeProvider);
FRIEND_TEST(CellularCapabilityUniversalMainTest, SimLockStatusChanged);
FRIEND_TEST(CellularCapabilityUniversalMainTest, SimLockStatusToProperty);
FRIEND_TEST(CellularCapabilityUniversalMainTest, SimPathChanged);
@@ -235,9 +234,6 @@
FRIEND_TEST(CellularCapabilityUniversalMainTest,
UpdateServiceActivationState);
FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateServiceOLP);
- FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateOperatorInfo);
- FRIEND_TEST(CellularCapabilityUniversalMainTest,
- UpdateOperatorInfoViaOperatorId);
FRIEND_TEST(CellularCapabilityUniversalTimerTest, CompleteActivation);
FRIEND_TEST(CellularTest, EnableTrafficMonitor);
FRIEND_TEST(CellularTest,
@@ -287,23 +283,6 @@
void Stop_PowerDownCompleted(const ResultCallback &callback,
const Error &error);
- // Methods used in acquiring information related to the carrier;
-
- // Updates the Universal operator name and country based on a newly
- // obtained network id.
- void UpdateOperatorInfo();
-
- // Sets the upper level information about the home cellular provider from the
- // modem's IMSI and SPN.
- void SetHomeProvider();
-
- // Updates the serving operator on the active service.
- void UpdateServingOperator();
-
- // Initializes the |apn_list| property based on the current
- // |home_provider_info_|.
- void InitAPNList();
-
// Updates |active_bearer_| to match the currently active bearer.
void UpdateActiveBearer();
diff --git a/cellular_capability_universal_cdma.cc b/cellular_capability_universal_cdma.cc
index 43af14a..040249e 100644
--- a/cellular_capability_universal_cdma.cc
+++ b/cellular_capability_universal_cdma.cc
@@ -33,10 +33,6 @@
const char kPhoneNumber[] = "#777";
const char kPropertyConnectNumber[] = "number";
-string FormattedSID(const string &sid) {
- return "[SID=" + sid + "]";
-}
-
} // namespace
CellularCapabilityUniversalCDMA::CellularCapabilityUniversalCDMA(
@@ -187,7 +183,6 @@
void CellularCapabilityUniversalCDMA::OnServiceCreated() {
SLOG(Cellular, 2) << __func__;
UpdateServiceActivationStateProperty();
- UpdateServingOperator();
HandleNewActivationStatus(MM_CDMA_ACTIVATION_ERROR_NONE);
UpdatePendingActivationState();
}
@@ -245,54 +240,6 @@
OnModemCDMAPropertiesChanged(properties, vector<string>());
}
-void CellularCapabilityUniversalCDMA::UpdateOperatorInfo() {
- SLOG(Cellular, 2) << __func__;
-
- if (sid_ == 0 || !modem_info()->cellular_operator_info()) {
- SLOG(Cellular, 2) << "No provider is currently available.";
- provider_.SetCode("");
- return;
- }
-
- string sid = UintToString(sid_);
- const CellularOperatorInfo::CellularOperator *provider =
- modem_info()->cellular_operator_info()->GetCellularOperatorBySID(sid);
- if (!provider) {
- SLOG(Cellular, 2) << "CDMA provider with "
- << FormattedSID(sid)
- << " not found.";
- // If a matching provider is not found, shill should update the
- // Cellular.ServingOperator property to to display the Sid.
- provider_.SetCode(sid);
- provider_.SetCountry("");
- provider_.SetName("");
- activation_code_.clear();
- } else {
- if (!provider->name_list().empty()) {
- provider_.SetName(provider->name_list()[0].name);
- }
- provider_.SetCode(sid);
- provider_.SetCountry(provider->country());
-
- activation_code_ = provider->activation_code();
- }
-
- // TODO(armansito): The CDMA interface only returns information about the
- // current serving carrier, so for now both the home provider and the
- // serving operator will be the same in case of roaming. We should figure
- // out if there is a way to (and whether or not it is necessary to)
- // determine if we're roaming.
- cellular()->set_home_provider(provider_);
- UpdateServingOperator();
-}
-
-void CellularCapabilityUniversalCDMA::UpdateServingOperator() {
- SLOG(Cellular, 2) << __func__;
- if (cellular()->service().get()) {
- cellular()->service()->SetServingOperator(cellular()->home_provider());
- }
-}
-
void CellularCapabilityUniversalCDMA::OnActivationStateChangedSignal(
uint32 activation_state,
uint32 activation_error,
@@ -572,7 +519,6 @@
nid_ = nid;
cellular()->serving_operator_info()->UpdateSID(UintToString(sid));
cellular()->serving_operator_info()->UpdateNID(UintToString(nid));
- UpdateOperatorInfo();
cellular()->HandleNewRegistrationState();
}
diff --git a/cellular_capability_universal_cdma.h b/cellular_capability_universal_cdma.h
index 848b9bb..651e6d9 100644
--- a/cellular_capability_universal_cdma.h
+++ b/cellular_capability_universal_cdma.h
@@ -86,7 +86,6 @@
OnCDMARegistrationChanged);
FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, PropertiesChanged);
FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, UpdateServiceOLP);
- FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, UpdateOperatorInfo);
FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
UpdateServiceActivationStateProperty);
@@ -112,9 +111,6 @@
static std::string GetActivationStateString(uint32 state);
static std::string GetActivationErrorString(uint32 error);
- void UpdateOperatorInfo();
- void UpdateServingOperator();
-
scoped_ptr<mm1::ModemModemCdmaProxyInterface> modem_cdma_proxy_;
// TODO(armansito): Should probably call this |weak_ptr_factory_| after
// 3gpp refactor
diff --git a/cellular_capability_universal_cdma_unittest.cc b/cellular_capability_universal_cdma_unittest.cc
index e54ce4c..acd6b50 100644
--- a/cellular_capability_universal_cdma_unittest.cc
+++ b/cellular_capability_universal_cdma_unittest.cc
@@ -7,6 +7,7 @@
#include <string>
#include <vector>
+#include <base/strings/string_number_conversions.h>
#include <base/strings/string_util.h>
#include <base/strings/stringprintf.h>
#include <gmock/gmock.h>
@@ -35,6 +36,7 @@
#include "shill/proxy_factory.h"
using base::StringPrintf;
+using base::UintToString;
using std::string;
using std::vector;
using testing::Invoke;
@@ -49,7 +51,8 @@
class CellularCapabilityUniversalCDMATest : public testing::Test {
public:
CellularCapabilityUniversalCDMATest(EventDispatcher *dispatcher)
- : capability_(NULL),
+ : dispatcher_(dispatcher),
+ capability_(NULL),
device_adaptor_(NULL),
modem_info_(NULL, dispatcher, NULL, NULL, NULL),
modem_3gpp_proxy_(new mm1::MockModemModem3gppProxy()),
@@ -59,8 +62,6 @@
sim_proxy_(new mm1::MockSimProxy()),
properties_proxy_(new MockDBusPropertiesProxy()),
proxy_factory_(this),
- mock_home_provider_info_(new MockMobileOperatorInfo(dispatcher)),
- mock_serving_operator_info_(new MockMobileOperatorInfo(dispatcher)),
cellular_(new Cellular(&modem_info_,
"",
kMachineAddress,
@@ -71,7 +72,9 @@
"",
&proxy_factory_)),
service_(new MockCellularService(&modem_info_,
- cellular_)) {}
+ cellular_)),
+ mock_home_provider_info_(NULL),
+ mock_serving_operator_info_(NULL) {}
virtual ~CellularCapabilityUniversalCDMATest() {
cellular_->service_ = NULL;
@@ -112,10 +115,12 @@
}
void SetMockMobileOperatorInfoObjects() {
- CHECK(mock_home_provider_info_);
- CHECK(mock_serving_operator_info_);
- cellular_->set_home_provider_info(mock_home_provider_info_.release());
- cellular_->set_serving_operator_info(mock_serving_operator_info_.release());
+ CHECK(!mock_home_provider_info_);
+ CHECK(!mock_serving_operator_info_);
+ mock_home_provider_info_ = new MockMobileOperatorInfo(dispatcher_);
+ mock_serving_operator_info_ = new MockMobileOperatorInfo(dispatcher_);
+ cellular_->set_home_provider_info(mock_home_provider_info_);
+ cellular_->set_serving_operator_info(mock_serving_operator_info_);
}
protected:
@@ -170,7 +175,7 @@
CellularCapabilityUniversalCDMATest *test_;
};
-
+ EventDispatcher *dispatcher_;
CellularCapabilityUniversalCDMA *capability_;
NiceMock<DeviceMockAdaptor> *device_adaptor_;
MockModemInfo modem_info_;
@@ -183,10 +188,12 @@
scoped_ptr<mm1::MockSimProxy> sim_proxy_;
scoped_ptr<MockDBusPropertiesProxy> properties_proxy_;
TestProxyFactory proxy_factory_;
- scoped_ptr<MockMobileOperatorInfo> mock_home_provider_info_;
- scoped_ptr<MockMobileOperatorInfo> mock_serving_operator_info_;
CellularRefPtr cellular_;
MockCellularService *service_;
+
+ // Set when required and passed to |cellular_|. Owned by |cellular_|.
+ MockMobileOperatorInfo *mock_home_provider_info_;
+ MockMobileOperatorInfo *mock_serving_operator_info_;
};
// static
@@ -251,107 +258,24 @@
EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
capability_->cdma_evdo_registration_state_);
- EXPECT_EQ("", capability_->provider_.GetCode());
- EXPECT_EQ("", capability_->provider_.GetName());
- EXPECT_EQ("", capability_->provider_.GetCountry());
-
- CellularOperatorInfo::CellularOperator *provider =
- new CellularOperatorInfo::CellularOperator();
-
- provider->country_ = "us";
- provider->is_primary_ = true;
- provider->name_list_.push_back(
- CellularOperatorInfo::LocalizedName("Test", ""));
-
- scoped_ptr<const CellularOperatorInfo::CellularOperator> ptr(provider);
-
- EXPECT_CALL(*modem_info_.mock_cellular_operator_info(),
- GetCellularOperatorBySID("2"))
- .WillOnce(Return(ptr.get()));
-
+ const unsigned kSid = 2;
+ const unsigned kNid = 1;
+ SetMockMobileOperatorInfoObjects();
+ EXPECT_CALL(*mock_serving_operator_info_, UpdateSID(UintToString(kSid)));
+ EXPECT_CALL(*mock_serving_operator_info_, UpdateNID(UintToString(kNid)));
capability_->OnCDMARegistrationChanged(
MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
- 2,
- 0);
- EXPECT_EQ(2, capability_->sid_);
- EXPECT_EQ(0, capability_->nid_);
+ kSid,
+ kNid);
+ EXPECT_EQ(kSid, capability_->sid_);
+ EXPECT_EQ(kNid, capability_->nid_);
EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN,
capability_->cdma_1x_registration_state_);
EXPECT_EQ(MM_MODEM_CDMA_REGISTRATION_STATE_HOME,
capability_->cdma_evdo_registration_state_);
EXPECT_TRUE(capability_->IsRegistered());
- EXPECT_EQ("2", capability_->provider_.GetCode());
- EXPECT_EQ("Test", capability_->provider_.GetName());
- EXPECT_EQ("us", capability_->provider_.GetCountry());
-}
-
-TEST_F(CellularCapabilityUniversalCDMAMainTest, UpdateOperatorInfo) {
- EXPECT_EQ("", capability_->provider_.GetCode());
- EXPECT_EQ("", capability_->provider_.GetName());
- EXPECT_EQ("", capability_->provider_.GetCountry());
- EXPECT_TRUE(capability_->activation_code_.empty());
-
- capability_->UpdateOperatorInfo();
- EXPECT_EQ("", capability_->provider_.GetCode());
- EXPECT_EQ("", capability_->provider_.GetName());
- EXPECT_EQ("", capability_->provider_.GetCountry());
- EXPECT_TRUE(capability_->activation_code_.empty());
-
- capability_->UpdateOperatorInfo();
- EXPECT_EQ("", capability_->provider_.GetCode());
- EXPECT_EQ("", capability_->provider_.GetName());
- EXPECT_EQ("", capability_->provider_.GetCountry());
- EXPECT_TRUE(capability_->activation_code_.empty());
-
- capability_->sid_ = 1;
- EXPECT_CALL(*modem_info_.mock_cellular_operator_info(),
- GetCellularOperatorBySID(_))
- .WillOnce(Return((const CellularOperatorInfo::CellularOperator *)NULL));
-
- capability_->UpdateOperatorInfo();
- EXPECT_EQ("1", capability_->provider_.GetCode());
- EXPECT_EQ("", capability_->provider_.GetName());
- EXPECT_EQ("", capability_->provider_.GetCountry());
- EXPECT_TRUE(capability_->activation_code_.empty());
-
- CellularOperatorInfo::CellularOperator *provider =
- new CellularOperatorInfo::CellularOperator();
-
- provider->country_ = "us";
- provider->is_primary_ = true;
- provider->activation_code_ = "1234";
- provider->name_list_.push_back(
- CellularOperatorInfo::LocalizedName("Test", ""));
-
- scoped_ptr<const CellularOperatorInfo::CellularOperator> ptr(provider);
-
- EXPECT_CALL(*modem_info_.mock_cellular_operator_info(),
- GetCellularOperatorBySID(_))
- .WillOnce(Return(ptr.get()));
-
- capability_->UpdateOperatorInfo();
-
- EXPECT_EQ("1", capability_->provider_.GetCode());
- EXPECT_EQ("Test", capability_->provider_.GetName());
- EXPECT_EQ("us", capability_->provider_.GetCountry());
- EXPECT_EQ("1234", capability_->activation_code_);
- EXPECT_EQ("1", cellular_->service()->serving_operator().GetCode());
- EXPECT_EQ("Test", cellular_->service()->serving_operator().GetName());
- EXPECT_EQ("us", cellular_->service()->serving_operator().GetCountry());
-
- capability_->sid_ = 1;
- EXPECT_CALL(*modem_info_.mock_cellular_operator_info(),
- GetCellularOperatorBySID(_))
- .WillOnce(Return(nullptr));
-
- capability_->UpdateOperatorInfo();
- EXPECT_EQ("1", capability_->provider_.GetCode());
- EXPECT_EQ("", capability_->provider_.GetName());
- EXPECT_EQ("", capability_->provider_.GetCountry());
- EXPECT_TRUE(capability_->activation_code_.empty());
-
}
TEST_F(CellularCapabilityUniversalCDMAMainTest, UpdateServiceOLP) {
@@ -363,20 +287,18 @@
const string kUuidVzw = "vzw";
const string kUuidFoo = "foo";
- MockMobileOperatorInfo *serving_operator_info =
- mock_serving_operator_info_.get();
SetMockMobileOperatorInfoObjects();
cellular_->set_esn("0");
cellular_->set_mdn("10123456789");
cellular_->set_meid("4");
- serving_operator_info->SetEmptyDefaultsForProperties();
- EXPECT_CALL(*serving_operator_info, IsMobileNetworkOperatorKnown())
+ mock_serving_operator_info_->SetEmptyDefaultsForProperties();
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
- EXPECT_CALL(*serving_operator_info, olp_list())
+ EXPECT_CALL(*mock_serving_operator_info_, olp_list())
.WillRepeatedly(ReturnRef(kOlpList));
- EXPECT_CALL(*serving_operator_info, uuid())
+ EXPECT_CALL(*mock_serving_operator_info_, uuid())
.WillOnce(ReturnRef(kUuidVzw));
SetService();
capability_->UpdateServiceOLP();
@@ -386,14 +308,14 @@
EXPECT_EQ("POST", vzw_olp[kPaymentPortalMethod]);
EXPECT_EQ("esn=0&mdn=0123456789&meid=4",
vzw_olp[kPaymentPortalPostData]);
- Mock::VerifyAndClearExpectations(serving_operator_info);
+ Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
- serving_operator_info->SetEmptyDefaultsForProperties();
- EXPECT_CALL(*serving_operator_info, IsMobileNetworkOperatorKnown())
+ mock_serving_operator_info_->SetEmptyDefaultsForProperties();
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
- EXPECT_CALL(*serving_operator_info, olp_list())
+ EXPECT_CALL(*mock_serving_operator_info_, olp_list())
.WillRepeatedly(ReturnRef(kOlpList));
- EXPECT_CALL(*serving_operator_info, uuid())
+ EXPECT_CALL(*mock_serving_operator_info_, uuid())
.WillOnce(ReturnRef(kUuidFoo));
capability_->UpdateServiceOLP();
// Copy to simplify assertions below.
diff --git a/cellular_capability_universal_unittest.cc b/cellular_capability_universal_unittest.cc
index 2add654..708c333 100644
--- a/cellular_capability_universal_unittest.cc
+++ b/cellular_capability_universal_unittest.cc
@@ -68,15 +68,14 @@
class CellularCapabilityUniversalTest : public testing::TestWithParam<string> {
public:
CellularCapabilityUniversalTest(EventDispatcher *dispatcher)
- : modem_info_(NULL, dispatcher, NULL, NULL, NULL),
+ : dispatcher_(dispatcher),
+ modem_info_(NULL, dispatcher, NULL, NULL, NULL),
modem_3gpp_proxy_(new mm1::MockModemModem3gppProxy()),
modem_cdma_proxy_(new mm1::MockModemModemCdmaProxy()),
modem_proxy_(new mm1::MockModemProxy()),
modem_simple_proxy_(new mm1::MockModemSimpleProxy()),
sim_proxy_(new mm1::MockSimProxy()),
properties_proxy_(new MockDBusPropertiesProxy()),
- mock_home_provider_info_(new MockMobileOperatorInfo(dispatcher)),
- mock_serving_operator_info_(new MockMobileOperatorInfo(dispatcher)),
proxy_factory_(this),
capability_(NULL),
device_adaptor_(NULL),
@@ -89,7 +88,9 @@
"",
"",
&proxy_factory_)),
- service_(new MockCellularService(&modem_info_, cellular_)) {
+ service_(new MockCellularService(&modem_info_, cellular_)),
+ mock_home_provider_info_(NULL),
+ mock_serving_operator_info_(NULL) {
modem_info_.metrics()->RegisterDevice(cellular_->interface_index(),
Technology::kCellular);
}
@@ -112,18 +113,36 @@
ON_CALL(*modem_info_.mock_pending_activation_store(),
GetActivationState(PendingActivationStore::kIdentifierICCID, _))
.WillByDefault(Return(PendingActivationStore::kStateUnknown));
+
+ SetMockMobileOperatorInfoObjects();
}
virtual void TearDown() {
capability_->proxy_factory_ = NULL;
}
- void InitProviderDB() {
- modem_info_.SetProviderDB(kTestMobileProviderDBPath);
- }
+ void CreateService() {
+ // The following constants are never directly accessed by the tests.
+ const char kStorageIdentifier[] = "default_test_storage_id";
+ const char kFriendlyServiceName[] = "default_test_service_name";
+ const char kOperatorCode[] = "10010";
+ const char kOperatorName[] = "default_test_operator_name";
+ const char kOperatorCountry[] = "us";
- void SetService() {
- cellular_->service_ = new CellularService(&modem_info_, cellular_);
+ // Simulate all the side-effects of Cellular::CreateService
+ auto service = new CellularService(&modem_info_, cellular_);
+ service->SetStorageIdentifier(kStorageIdentifier);
+ service->SetFriendlyName(kFriendlyServiceName);
+
+ Cellular::Operator oper;
+ oper.SetCode(kOperatorCode);
+ oper.SetName(kOperatorName);
+ oper.SetCountry(kOperatorCountry);
+
+ service->SetServingOperator(oper);
+
+ cellular_->set_home_provider(oper);
+ cellular_->service_ = service;
}
void ClearService() {
@@ -193,10 +212,12 @@
}
void SetMockMobileOperatorInfoObjects() {
- CHECK(mock_home_provider_info_);
- CHECK(mock_serving_operator_info_);
- cellular_->set_home_provider_info(mock_home_provider_info_.release());
- cellular_->set_serving_operator_info(mock_serving_operator_info_.release());
+ CHECK(!mock_home_provider_info_);
+ CHECK(!mock_serving_operator_info_);
+ mock_home_provider_info_ = new MockMobileOperatorInfo(dispatcher_);
+ mock_serving_operator_info_ = new MockMobileOperatorInfo(dispatcher_);
+ cellular_->set_home_provider_info(mock_home_provider_info_);
+ cellular_->set_serving_operator_info(mock_serving_operator_info_);
}
void ReleaseCapabilityProxies() {
@@ -309,6 +330,7 @@
DBusPropertiesMap inactive_bearer_properties_;
};
+ EventDispatcher *dispatcher_;
MockModemInfo modem_info_;
scoped_ptr<mm1::MockModemModem3gppProxy> modem_3gpp_proxy_;
scoped_ptr<mm1::MockModemModemCdmaProxy> modem_cdma_proxy_;
@@ -316,14 +338,16 @@
scoped_ptr<mm1::MockModemSimpleProxy> modem_simple_proxy_;
scoped_ptr<mm1::MockSimProxy> sim_proxy_;
scoped_ptr<MockDBusPropertiesProxy> properties_proxy_;
- scoped_ptr<MockMobileOperatorInfo> mock_home_provider_info_;
- scoped_ptr<MockMobileOperatorInfo> mock_serving_operator_info_;
TestProxyFactory proxy_factory_;
CellularCapabilityUniversal *capability_; // Owned by |cellular_|.
DeviceMockAdaptor *device_adaptor_; // Owned by |cellular_|.
CellularRefPtr cellular_;
MockCellularService *service_; // owned by cellular_
DBusPathCallback connect_callback_; // saved for testing connect operations
+
+ // Set when required and passed to |cellular_|. Owned by |cellular_|.
+ MockMobileOperatorInfo *mock_home_provider_info_;
+ MockMobileOperatorInfo *mock_serving_operator_info_;
};
// Most of our tests involve using a real EventDispatcher object.
@@ -787,8 +811,6 @@
GetActivationState(PendingActivationStore::kIdentifierICCID, _))
.Times(1);
- InitProviderDB();
-
EXPECT_FALSE(cellular_->sim_present());
EXPECT_TRUE(capability_->sim_proxy_ == NULL);
@@ -947,12 +969,10 @@
}
TEST_F(CellularCapabilityUniversalMainTest, UpdateRegistrationState) {
- InitProviderDB();
capability_->InitProxies();
- SetService();
+ CreateService();
cellular_->set_imsi("310240123456789");
- capability_->SetHomeProvider();
cellular_->set_modem_state(Cellular::kModemStateConnected);
SetRegistrationDroppedUpdateTimeout(0);
@@ -1102,12 +1122,10 @@
TEST_F(CellularCapabilityUniversalMainTest,
UpdateRegistrationStateModemNotConnected) {
- InitProviderDB();
capability_->InitProxies();
- SetService();
+ CreateService();
cellular_->set_imsi("310240123456789");
- capability_->SetHomeProvider();
cellular_->set_modem_state(Cellular::kModemStateRegistered);
SetRegistrationDroppedUpdateTimeout(0);
@@ -1253,11 +1271,7 @@
EXPECT_CALL(*modem_info_.mock_pending_activation_store(),
GetActivationState(PendingActivationStore::kIdentifierICCID, _))
.Times(0);
- InitProviderDB();
- EXPECT_TRUE(cellular_->home_provider().GetName().empty());
- EXPECT_TRUE(cellular_->home_provider().GetCountry().empty());
- EXPECT_TRUE(cellular_->home_provider().GetCode().empty());
EXPECT_FALSE(capability_->sim_proxy_.get());
capability_->OnDBusPropertiesChanged(MM_DBUS_INTERFACE_MODEM,
modem_properties, vector<string>());
@@ -1267,15 +1281,16 @@
Mock::VerifyAndClearExpectations(modem_info_.mock_pending_activation_store());
// Updating the SIM
- EXPECT_CALL(*modem_info_.mock_pending_activation_store(),
- GetActivationState(PendingActivationStore::kIdentifierICCID, _))
- .Times(2);
DBusPropertiesMap new_properties;
const char kCountry[] = "us";
const char kNewImsi[] = "310240123456789";
const char kSimIdentifier[] = "9999888";
const char kOperatorIdentifier[] = "310240";
const char kOperatorName[] = "Custom SPN";
+ EXPECT_CALL(*modem_info_.mock_pending_activation_store(),
+ GetActivationState(PendingActivationStore::kIdentifierICCID, _))
+ .Times(2);
+ EXPECT_CALL(*mock_home_provider_info_, UpdateIMSI(kNewImsi)).Times(2);
new_properties[MM_SIM_PROPERTY_IMSI].writer().append_string(kNewImsi);
new_properties[MM_SIM_PROPERTY_SIMIDENTIFIER].writer().
append_string(kSimIdentifier);
@@ -1288,17 +1303,12 @@
EXPECT_EQ(kSimIdentifier, cellular_->sim_identifier());
EXPECT_EQ(kOperatorIdentifier, capability_->operator_id_);
EXPECT_EQ("", capability_->spn_);
- EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
- EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
- EXPECT_EQ(kOperatorIdentifier, cellular_->home_provider().GetCode());
- EXPECT_EQ(4, cellular_->apn_list().size());
new_properties[MM_SIM_PROPERTY_OPERATORNAME].writer().
append_string(kOperatorName);
capability_->OnDBusPropertiesChanged(MM_DBUS_INTERFACE_SIM,
new_properties,
vector<string>());
- EXPECT_EQ(kOperatorName, cellular_->home_provider().GetName());
EXPECT_EQ(kOperatorName, capability_->spn_);
}
@@ -1497,82 +1507,6 @@
EXPECT_TRUE(capability_->AllowRoaming());
}
-TEST_F(CellularCapabilityUniversalMainTest, SetHomeProvider) {
- static const char kTestCarrier[] = "The Cellular Carrier";
- static const char kCountry[] = "us";
- static const char kCode[] = "310160";
-
- EXPECT_FALSE(capability_->home_provider_info_);
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- // No mobile provider DB available.
- capability_->SetHomeProvider();
- EXPECT_TRUE(cellular_->home_provider().GetName().empty());
- EXPECT_TRUE(cellular_->home_provider().GetCountry().empty());
- EXPECT_TRUE(cellular_->home_provider().GetCode().empty());
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- InitProviderDB();
-
- // IMSI and Operator Code not available.
- capability_->SetHomeProvider();
- EXPECT_TRUE(cellular_->home_provider().GetName().empty());
- EXPECT_TRUE(cellular_->home_provider().GetCountry().empty());
- EXPECT_TRUE(cellular_->home_provider().GetCode().empty());
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- // Operator Code available.
- capability_->operator_id_ = "310240";
- capability_->SetHomeProvider();
- EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
- EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
- EXPECT_EQ("310240", cellular_->home_provider().GetCode());
- EXPECT_EQ(4, cellular_->apn_list().size());
- ASSERT_TRUE(capability_->home_provider_info_);
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- cellular_->home_provider_.SetName("");
- cellular_->home_provider_.SetCountry("");
- cellular_->home_provider_.SetCode("");
-
- // IMSI available
- cellular_->set_imsi("310240123456789");
- capability_->operator_id_.clear();
- capability_->SetHomeProvider();
- EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
- EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
- EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
- EXPECT_EQ(4, cellular_->apn_list().size());
- ASSERT_TRUE(capability_->home_provider_info_);
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- Cellular::Operator oper;
- cellular_->set_home_provider(oper);
- capability_->spn_ = kTestCarrier;
- capability_->SetHomeProvider();
- EXPECT_EQ(kTestCarrier, cellular_->home_provider().GetName());
- EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
- EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
- EXPECT_FALSE(cellular_->provider_requires_roaming());
-
- static const char kCubic[] = "Cubic";
- capability_->spn_ = kCubic;
- capability_->SetHomeProvider();
- EXPECT_EQ(kCubic, cellular_->home_provider().GetName());
- EXPECT_EQ("", cellular_->home_provider().GetCode());
- ASSERT_TRUE(capability_->home_provider_info_);
- EXPECT_TRUE(cellular_->provider_requires_roaming());
-
- static const char kCUBIC[] = "CUBIC";
- capability_->spn_ = kCUBIC;
- capability_->home_provider_info_ = NULL;
- capability_->SetHomeProvider();
- EXPECT_EQ(kCUBIC, cellular_->home_provider().GetName());
- EXPECT_EQ("", cellular_->home_provider().GetCode());
- ASSERT_TRUE(capability_->home_provider_info_);
- EXPECT_TRUE(cellular_->provider_requires_roaming());
-}
-
TEST_F(CellularCapabilityUniversalMainTest, GetMdnForOLP) {
const string kVzwUUID = "vzw";
const string kFooUUID = "foo";
@@ -1620,22 +1554,20 @@
const string kUuidVzw = "vzw";
const string kUuidFoo = "foo";
- MockMobileOperatorInfo *home_provider_info = mock_home_provider_info_.get();
- SetMockMobileOperatorInfoObjects();
cellular_->set_imei("1");
cellular_->set_imsi("2");
cellular_->set_mdn("10123456789");
cellular_->set_min("5");
cellular_->set_sim_identifier("6");
- home_provider_info->SetEmptyDefaultsForProperties();
- EXPECT_CALL(*home_provider_info, IsMobileNetworkOperatorKnown())
+ mock_home_provider_info_->SetEmptyDefaultsForProperties();
+ EXPECT_CALL(*mock_home_provider_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
- EXPECT_CALL(*home_provider_info, olp_list())
+ EXPECT_CALL(*mock_home_provider_info_, olp_list())
.WillRepeatedly(ReturnRef(kOlpList));
- EXPECT_CALL(*home_provider_info, uuid())
+ EXPECT_CALL(*mock_home_provider_info_, uuid())
.WillOnce(ReturnRef(kUuidVzw));
- SetService();
+ CreateService();
capability_->UpdateServiceOLP();
// Copy to simplify assertions below.
Stringmap vzw_olp = cellular_->service()->olp();
@@ -1643,14 +1575,14 @@
EXPECT_EQ("POST", vzw_olp[kPaymentPortalMethod]);
EXPECT_EQ("imei=1&imsi=2&mdn=0123456789&min=5&iccid=6",
vzw_olp[kPaymentPortalPostData]);
- Mock::VerifyAndClearExpectations(home_provider_info);
+ Mock::VerifyAndClearExpectations(mock_home_provider_info_);
- home_provider_info->SetEmptyDefaultsForProperties();
- EXPECT_CALL(*home_provider_info, IsMobileNetworkOperatorKnown())
+ mock_home_provider_info_->SetEmptyDefaultsForProperties();
+ EXPECT_CALL(*mock_home_provider_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
- EXPECT_CALL(*home_provider_info, olp_list())
+ EXPECT_CALL(*mock_home_provider_info_, olp_list())
.WillRepeatedly(ReturnRef(kOlpList));
- EXPECT_CALL(*home_provider_info, uuid())
+ EXPECT_CALL(*mock_home_provider_info_, uuid())
.WillOnce(ReturnRef(kUuidFoo));
capability_->UpdateServiceOLP();
// Copy to simplify assertions below.
@@ -2021,45 +1953,6 @@
Mock::VerifyAndClearExpectations(modem_info_.mock_pending_activation_store());
}
-TEST_F(CellularCapabilityUniversalMainTest, UpdateOperatorInfo) {
- static const char kOperatorName[] = "Swisscom";
- InitProviderDB();
- capability_->serving_operator_.SetCode("22801");
- SetService();
- capability_->UpdateOperatorInfo();
- EXPECT_EQ(kOperatorName, capability_->serving_operator_.GetName());
- EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
- EXPECT_EQ(kOperatorName, cellular_->service()->serving_operator().GetName());
-
- static const char kTestOperator[] = "Testcom";
- capability_->serving_operator_.SetName(kTestOperator);
- capability_->serving_operator_.SetCountry("");
- capability_->UpdateOperatorInfo();
- EXPECT_EQ(kTestOperator, capability_->serving_operator_.GetName());
- EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
- EXPECT_EQ(kTestOperator, cellular_->service()->serving_operator().GetName());
-}
-
-TEST_F(CellularCapabilityUniversalMainTest, UpdateOperatorInfoViaOperatorId) {
- static const char kOperatorName[] = "Swisscom";
- static const char kOperatorId[] = "22801";
- InitProviderDB();
- capability_->serving_operator_.SetCode("");
- SetService();
- capability_->UpdateOperatorInfo();
- EXPECT_EQ("", capability_->serving_operator_.GetName());
- EXPECT_EQ("", capability_->serving_operator_.GetCountry());
- EXPECT_EQ("", cellular_->service()->serving_operator().GetName());
-
- capability_->operator_id_ = kOperatorId;
-
- capability_->UpdateOperatorInfo();
- EXPECT_EQ(kOperatorId, capability_->serving_operator_.GetCode());
- EXPECT_EQ(kOperatorName, capability_->serving_operator_.GetName());
- EXPECT_EQ("ch", capability_->serving_operator_.GetCountry());
- EXPECT_EQ(kOperatorName, cellular_->service()->serving_operator().GetName());
-}
-
TEST_F(CellularCapabilityUniversalMainTest, IsServiceActivationRequired) {
capability_->subscription_state_ =
CellularCapabilityUniversal::kSubscriptionStateProvisioned;
diff --git a/cellular_unittest.cc b/cellular_unittest.cc
index ed2a228..0e43bc2 100644
--- a/cellular_unittest.cc
+++ b/cellular_unittest.cc
@@ -440,6 +440,13 @@
static const Stringmaps kTestNetworksGSM;
static const Stringmaps kTestNetworksCellular;
static const int kStrength;
+ // Must be std::string so that we can safely ReturnRef.
+ static string kHomeProviderCode;
+ static string kHomeProviderCountry;
+ static string kHomeProviderName;
+ static string kServingOperatorCode;
+ static string kServingOperatorCountry;
+ static string kServingOperatorName;
class TestProxyFactory : public ProxyFactory {
public:
@@ -605,6 +612,12 @@
{kLongNameProperty, "some_long_name"},
{kShortNameProperty, "short"}}};
const int CellularTest::kStrength = 90;
+string CellularTest::kHomeProviderCode = "10001";
+string CellularTest::kHomeProviderCountry = "us";
+string CellularTest::kHomeProviderName = "HomeProviderName";
+string CellularTest::kServingOperatorCode = "10002";
+string CellularTest::kServingOperatorCountry = "ca";
+string CellularTest::kServingOperatorName = "ServingOperatorName";
TEST_F(CellularTest, GetStateString) {
EXPECT_EQ("CellularStateDisabled",
@@ -666,6 +679,7 @@
TEST_F(CellularTest, StartGSMRegister) {
InitProviderDB();
+ SetMockMobileOperatorInfoObjects();
EXPECT_CALL(*proxy_, Enable(true, _, _, CellularCapability::kTimeoutEnable))
.WillOnce(Invoke(this, &CellularTest::InvokeEnable));
EXPECT_CALL(*gsm_card_proxy_,
@@ -694,6 +708,8 @@
.Times(2)
.WillRepeatedly(Invoke(this,
&CellularTest::InvokeGetSignalQuality));
+ EXPECT_CALL(*mock_serving_operator_info_, UpdateMCCMNC(_));
+ EXPECT_CALL(*mock_serving_operator_info_, UpdateOperatorName(_));
EXPECT_CALL(*this, TestCallback(IsSuccess()));
EXPECT_CALL(*modem_info_.mock_manager(), RegisterService(_));
AllowCreateGSMCardProxyFromFactory();
@@ -712,9 +728,6 @@
EXPECT_TRUE(GetCapabilityGSM()->sim_lock_status_.enabled);
EXPECT_EQ(kStrength, device_->service_->strength());
EXPECT_EQ(kRoamingStateRoaming, device_->service_->roaming_state());
- EXPECT_EQ(kNetworkID, device_->service_->serving_operator().GetCode());
- EXPECT_EQ(kTestCarrier, device_->service_->serving_operator().GetName());
- EXPECT_EQ("ch", device_->service_->serving_operator().GetCountry());
}
TEST_F(CellularTest, StartConnected) {
@@ -751,15 +764,13 @@
device_->SelectService(NULL);
}
-TEST_F(CellularTest, ServiceFriendlyName) {
+TEST_F(CellularTest, FriendlyServiceName) {
// Test that the name created for the service is sensible under different
// scenarios w.r.t. information about the mobile network operator.
SetMockMobileOperatorInfoObjects();
CHECK(mock_home_provider_info_);
CHECK(mock_serving_operator_info_);
- const string home_provider_name {"HomeProviderName"};
- const string serving_operator_name {"ServingOperatorName"};
SetCellularType(Cellular::kTypeCDMA);
// We are not testing the behaviour of capabilities here.
device_->mobile_operator_info_observer_->set_capability(NULL);
@@ -791,9 +802,9 @@
EXPECT_CALL(*mock_home_provider_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
EXPECT_CALL(*mock_home_provider_info_, operator_name())
- .WillRepeatedly(ReturnRef(home_provider_name));
+ .WillRepeatedly(ReturnRef(kHomeProviderName));
device_->mobile_operator_info_observer_->OnOperatorChanged();
- EXPECT_EQ(home_provider_name, device_->service_->friendly_name());
+ EXPECT_EQ(kHomeProviderName, device_->service_->friendly_name());
Mock::VerifyAndClearExpectations(mock_home_provider_info_);
Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
device_->DestroyService();
@@ -811,9 +822,9 @@
EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
EXPECT_CALL(*mock_serving_operator_info_, operator_name())
- .WillRepeatedly(ReturnRef(serving_operator_name));
+ .WillRepeatedly(ReturnRef(kServingOperatorName));
device_->mobile_operator_info_observer_->OnOperatorChanged();
- EXPECT_EQ(serving_operator_name, device_->service_->friendly_name());
+ EXPECT_EQ(kServingOperatorName, device_->service_->friendly_name());
Mock::VerifyAndClearExpectations(mock_home_provider_info_);
Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
device_->DestroyService();
@@ -831,7 +842,7 @@
EXPECT_CALL(*mock_home_provider_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
EXPECT_CALL(*mock_home_provider_info_, operator_name())
- .WillRepeatedly(ReturnRef(home_provider_name));
+ .WillRepeatedly(ReturnRef(kHomeProviderName));
device_->mobile_operator_info_observer_->OnOperatorChanged();
// Now emulate an event for updated serving operator information.
Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
@@ -839,9 +850,9 @@
EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
EXPECT_CALL(*mock_serving_operator_info_, operator_name())
- .WillRepeatedly(ReturnRef(serving_operator_name));
+ .WillRepeatedly(ReturnRef(kServingOperatorName));
device_->mobile_operator_info_observer_->OnOperatorChanged();
- EXPECT_EQ(serving_operator_name, device_->service_->friendly_name());
+ EXPECT_EQ(kServingOperatorName, device_->service_->friendly_name());
Mock::VerifyAndClearExpectations(mock_home_provider_info_);
Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
device_->DestroyService();
@@ -859,7 +870,7 @@
EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
EXPECT_CALL(*mock_serving_operator_info_, operator_name())
- .WillRepeatedly(ReturnRef(serving_operator_name));
+ .WillRepeatedly(ReturnRef(kServingOperatorName));
device_->mobile_operator_info_observer_->OnOperatorChanged();
// Now emulate an event for updated home provider information.
Mock::VerifyAndClearExpectations(mock_home_provider_info_);
@@ -867,9 +878,9 @@
EXPECT_CALL(*mock_home_provider_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
EXPECT_CALL(*mock_home_provider_info_, operator_name())
- .WillRepeatedly(ReturnRef(home_provider_name));
+ .WillRepeatedly(ReturnRef(kHomeProviderName));
device_->mobile_operator_info_observer_->OnOperatorChanged();
- EXPECT_EQ(serving_operator_name, device_->service_->friendly_name());
+ EXPECT_EQ(kServingOperatorName, device_->service_->friendly_name());
Mock::VerifyAndClearExpectations(mock_home_provider_info_);
Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
device_->DestroyService();
@@ -883,11 +894,127 @@
EXPECT_CALL(*mock_home_provider_info_, IsMobileNetworkOperatorKnown())
.WillRepeatedly(Return(true));
EXPECT_CALL(*mock_home_provider_info_, operator_name())
- .WillRepeatedly(ReturnRef(home_provider_name));
+ .WillRepeatedly(ReturnRef(kHomeProviderName));
EXPECT_CALL(*mock_serving_operator_info_, operator_name())
- .WillRepeatedly(ReturnRef(serving_operator_name));
+ .WillRepeatedly(ReturnRef(kServingOperatorName));
device_->CreateService();
- EXPECT_EQ(serving_operator_name, device_->service_->friendly_name());
+ EXPECT_EQ(kServingOperatorName, device_->service_->friendly_name());
+}
+
+TEST_F(CellularTest, HomeProviderServingOperator) {
+ // Test that the the home provider information is correctly updated under
+ // different scenarios w.r.t. information about the mobile network operators.
+ SetMockMobileOperatorInfoObjects();
+ CHECK(mock_home_provider_info_);
+ CHECK(mock_serving_operator_info_);
+
+ // (1) Neither home provider nor serving operator known.
+ EXPECT_CALL(*mock_home_provider_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(false));
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(false));
+
+ device_->CreateService();
+
+ EXPECT_EQ("", device_->home_provider().GetCode());
+ EXPECT_EQ("", device_->home_provider().GetName());
+ EXPECT_EQ("", device_->home_provider().GetCountry());
+ EXPECT_EQ("", device_->service_->serving_operator().GetCode());
+ EXPECT_EQ("", device_->service_->serving_operator().GetName());
+ EXPECT_EQ("", device_->service_->serving_operator().GetCountry());
+ Mock::VerifyAndClearExpectations(mock_home_provider_info_);
+ Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
+ device_->DestroyService();
+
+ // (2) serving operator known.
+ // When home provider is not known, serving operator proxies in.
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(false));
+ mock_serving_operator_info_->SetEmptyDefaultsForProperties();
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_serving_operator_info_, mccmnc())
+ .WillRepeatedly(ReturnRef(kServingOperatorCode));
+ EXPECT_CALL(*mock_serving_operator_info_, operator_name())
+ .WillRepeatedly(ReturnRef(kServingOperatorName));
+ EXPECT_CALL(*mock_serving_operator_info_, country())
+ .WillRepeatedly(ReturnRef(kServingOperatorCountry));
+
+ device_->CreateService();
+
+ EXPECT_EQ(kServingOperatorCode, device_->home_provider().GetCode());
+ EXPECT_EQ(kServingOperatorName, device_->home_provider().GetName());
+ EXPECT_EQ(kServingOperatorCountry, device_->home_provider().GetCountry());
+ EXPECT_EQ(kServingOperatorCode,
+ device_->service_->serving_operator().GetCode());
+ EXPECT_EQ(kServingOperatorName,
+ device_->service_->serving_operator().GetName());
+ EXPECT_EQ(kServingOperatorCountry,
+ device_->service_->serving_operator().GetCountry());
+ Mock::VerifyAndClearExpectations(mock_home_provider_info_);
+ Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
+ device_->DestroyService();
+
+ // (3) home provider known.
+ // When serving operator is not known, home provider proxies in.
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(false));
+ mock_home_provider_info_->SetEmptyDefaultsForProperties();
+ EXPECT_CALL(*mock_home_provider_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_home_provider_info_, mccmnc())
+ .WillRepeatedly(ReturnRef(kHomeProviderCode));
+ EXPECT_CALL(*mock_home_provider_info_, operator_name())
+ .WillRepeatedly(ReturnRef(kHomeProviderName));
+ EXPECT_CALL(*mock_home_provider_info_, country())
+ .WillRepeatedly(ReturnRef(kHomeProviderCountry));
+
+ device_->CreateService();
+
+ EXPECT_EQ(kHomeProviderCode, device_->home_provider().GetCode());
+ EXPECT_EQ(kHomeProviderName, device_->home_provider().GetName());
+ EXPECT_EQ(kHomeProviderCountry, device_->home_provider().GetCountry());
+ EXPECT_EQ(kHomeProviderCode,
+ device_->service_->serving_operator().GetCode());
+ EXPECT_EQ(kHomeProviderName,
+ device_->service_->serving_operator().GetName());
+ EXPECT_EQ(kHomeProviderCountry,
+ device_->service_->serving_operator().GetCountry());
+ Mock::VerifyAndClearExpectations(mock_home_provider_info_);
+ Mock::VerifyAndClearExpectations(mock_serving_operator_info_);
+ device_->DestroyService();
+
+ // (4) Serving operator known, home provider known.
+ mock_home_provider_info_->SetEmptyDefaultsForProperties();
+ EXPECT_CALL(*mock_home_provider_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_home_provider_info_, mccmnc())
+ .WillRepeatedly(ReturnRef(kHomeProviderCode));
+ EXPECT_CALL(*mock_home_provider_info_, operator_name())
+ .WillRepeatedly(ReturnRef(kHomeProviderName));
+ EXPECT_CALL(*mock_home_provider_info_, country())
+ .WillRepeatedly(ReturnRef(kHomeProviderCountry));
+ mock_serving_operator_info_->SetEmptyDefaultsForProperties();
+ EXPECT_CALL(*mock_serving_operator_info_, IsMobileNetworkOperatorKnown())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_serving_operator_info_, mccmnc())
+ .WillRepeatedly(ReturnRef(kServingOperatorCode));
+ EXPECT_CALL(*mock_serving_operator_info_, operator_name())
+ .WillRepeatedly(ReturnRef(kServingOperatorName));
+ EXPECT_CALL(*mock_serving_operator_info_, country())
+ .WillRepeatedly(ReturnRef(kServingOperatorCountry));
+
+ device_->CreateService();
+
+ EXPECT_EQ(kHomeProviderCode, device_->home_provider().GetCode());
+ EXPECT_EQ(kHomeProviderName, device_->home_provider().GetName());
+ EXPECT_EQ(kHomeProviderCountry, device_->home_provider().GetCountry());
+ EXPECT_EQ(kServingOperatorCode,
+ device_->service_->serving_operator().GetCode());
+ EXPECT_EQ(kServingOperatorName,
+ device_->service_->serving_operator().GetName());
+ EXPECT_EQ(kServingOperatorCountry,
+ device_->service_->serving_operator().GetCountry());
}
static bool IllegalChar(char a) {
diff --git a/mobile_operator_info.h b/mobile_operator_info.h
index ae053d2..9b49ea1 100644
--- a/mobile_operator_info.h
+++ b/mobile_operator_info.h
@@ -145,7 +145,7 @@
virtual const std::string &uuid() const;
virtual const std::string &operator_name() const;
- const std::string &country() const;
+ virtual const std::string &country() const;
virtual const std::string &mccmnc() const;
const std::string &sid() const;
const std::string &nid() const;
@@ -189,13 +189,13 @@
// Both MCCMNC and SID correspond to operator code in the different
// technologies. They are never to be used together. If you want to use SID
// after MCCMNC (or vice-versa), ensure a call to |Reset| to clear state.
- void UpdateMCCMNC(const std::string &mccmnc);
- void UpdateSID(const std::string &sid);
+ virtual void UpdateMCCMNC(const std::string &mccmnc);
+ virtual void UpdateSID(const std::string &sid);
- void UpdateIMSI(const std::string &imsi);
+ virtual void UpdateIMSI(const std::string &imsi);
void UpdateICCID(const std::string &iccid);
- void UpdateNID(const std::string &nid);
- void UpdateOperatorName(const std::string &operator_name);
+ virtual void UpdateNID(const std::string &nid);
+ virtual void UpdateOperatorName(const std::string &operator_name);
void UpdateOnlinePortal(const std::string &url,
const std::string &method,
const std::string &post_data);
diff --git a/mock_mobile_operator_info.cc b/mock_mobile_operator_info.cc
index 4f3d197..de6336b 100644
--- a/mock_mobile_operator_info.cc
+++ b/mock_mobile_operator_info.cc
@@ -18,6 +18,8 @@
ON_CALL(*this, olp_list()).WillByDefault(ReturnRef(empty_olp_list_));
ON_CALL(*this, operator_name())
.WillByDefault(ReturnRef(empty_operator_name_));
+ ON_CALL(*this, country())
+ .WillByDefault(ReturnRef(empty_country_));
ON_CALL(*this, uuid()).WillByDefault(ReturnRef(empty_uuid_));
}
diff --git a/mock_mobile_operator_info.h b/mock_mobile_operator_info.h
index a0ad489..0d33bfc 100644
--- a/mock_mobile_operator_info.h
+++ b/mock_mobile_operator_info.h
@@ -27,8 +27,15 @@
MOCK_CONST_METHOD0(olp_list,
const std::vector<MobileOperatorInfo::OnlinePortal> &());
MOCK_CONST_METHOD0(operator_name, const std::string &());
+ MOCK_CONST_METHOD0(country, const std::string &());
MOCK_CONST_METHOD0(uuid, const std::string &());
+ MOCK_METHOD1(UpdateMCCMNC, void(const std::string &));
+ MOCK_METHOD1(UpdateSID, void(const std::string &));
+ MOCK_METHOD1(UpdateIMSI, void(const std::string &));
+ MOCK_METHOD1(UpdateNID, void(const std::string &));
+ MOCK_METHOD1(UpdateOperatorName, void(const std::string &));
+
// Sets up the mock object to return empty strings/vectors etc for all
// propeties.
void SetEmptyDefaultsForProperties();
@@ -37,6 +44,7 @@
std::string empty_mccmnc_;
std::vector<MobileOperatorInfo::OnlinePortal> empty_olp_list_;
std::string empty_operator_name_;
+ std::string empty_country_;
std::string empty_uuid_;
};